OTP

本文介绍了嵌入式系统中OTP(一次性可编程)寄存器与Lock寄存器的作用及其实现方式。OTP寄存器可用于存储软件版本号、硬件版本号等敏感信息,而Lock寄存器则用于锁定OTP寄存器以增加安全性。文中还提及了一些大型制造商如何利用这些特性来开发更加安全的产品。
AI助手已提取文章相关产品:

文章出处

http://forum.eepw.com.cn/thread/120354/1/

随着嵌入式应用的越来越广泛,产品的安全也显得越来越重要。一方面是为了保护硬件设计,另外一方面也是为了产品本身的安全,防止被HACKED.
在嵌入式系统当中,所有的代码和系统数据都是被存储在FLASH芯片内部的。FLASH芯片的特点是可多次擦写,而且掉电数据不会丢失。为了保护
FLASH中的数据,越来越多的FLASH厂商在FLASH内部提供了一种特殊的寄存器:OTP寄存器。OTP=ONE TIME PROGRAMMABLE,意思是这个寄存器是
只可以编程一次的,编程后就再也不可以修改了。OTP寄存器和FLASH数据区域很类似,1能被改写为0,但0永远也不能写成1.如果有一个32位的OTP
寄存器,出产的值是0xFFFFFFFF,如果用户通过编程,将OTP寄存器的值写为0xFFFFFFFE后,那OTP寄存器再也不能在改写为0xFFFFFFFF了;当然,这
个OTP寄存器的值还可以改写为0xFFFFFFFD或其它。。。。。

为了给OTP寄存器提供保护,一般这类FLASH芯片还会提供一个LOCK寄存器。LOCK寄存器也是ONE TIME PROGRAMMABLE的。LOCK寄存器的每一位对应于
一个OTP寄存器。如果与OTP寄存器对应LOCK寄存器的位(BIT)被从1写为0,就意味着这个被锁住的OTP寄存器在也不能进行写操作了。即使OTP的当前值为
0XFFFFFFFF,它的值也永远不可以被改写了。

通过OTP寄存器与LOCK寄存器,用户可以在OTP里保存一些特定的信息,例如软件版本号,硬件版本号,秘钥等信息。同时,这类FLASH芯片内部还会
有另外一个OTP寄存器,这个寄存器在出产的时候就被厂家编程过了,写入特定的序列号,并LOCK住。如果有需要,FLASH厂商也可以根据客户的需要
写入特定的序列号。这样,每个芯片都会有一个不一样的ID号,避免被复制。

除了FLASH芯片,很多CPU厂商,也在CPU内部提供类似的OTP寄存器,供用户使用,利于开发更安全的应用。象一些比较大的厂商,例如TI,FREESCALE
等,他们往往是不公开某些芯片的数据手册的。如果要获得他们的数据手册,一是要有大量的订货,同时也需要签署一定的保密协议。

OTP本身并不能提供绝对安全的应用。但OTP的提供,有利于开发商开发和部署更安全的应用,保护自己和客户的利益。象很多大的厂商,例如NOKIA,
MOTOROAL,SAMSUNG和SONYERRICSON等,都需要根据客户(运营商)的要求,开发一些只能在自己的网络里使用的手机。其中很多软件和硬件的保护
都是基于OTP来实现的。

您可能感兴趣的与本文相关内容

03-22
### 关于一次性密码 (OTP) 的概述 一次性密码 (One-Time Password, OTP) 是一种用于身份验证的安全机制,通常作为多因素认证的一部分。其核心理念在于每次生成的密码仅能使用一次,在特定时间段之后失效。这种特性显著提高了系统的安全性。 #### 时间同步型一次性密码的工作原理 时间同步型一次性密码(Time-Based One-Time Password, TOTP)是一种基于时间戳的一次性密码算法[^2]。该方法扩展了HMAC基础一次性密码算法(HOTP),通过引入动态的时间因子实现更灵活的身份验证方式。TOTP的核心依赖于两个端点——客户端和服务器之间共享的秘密密钥以及当前时间戳。由于网络延迟的存在,接收方可能无法精确匹配发送方生成密码的具体时刻,因此验证过程允许一定范围内的偏差窗口[^1]。 #### 安全性和潜在威胁分析 尽管OTP技术极大地增强了账户保护能力,但它并非完全无懈可击。例如,短信形式传输的一次性密码容易受到本地攻击者的拦截风险影响[^3]。这类漏洞尤其存在于现代移动设备上,因为恶意程序可能会窃取用户的短消息内容从而绕过安全防护措施。 #### 实际应用场景举例说明 在实际应用层面,许多在线服务平台采用电子邮件或专门的应用程序来分发OTPs给用户完成注册或者登录流程中的二次确认环节。比如某电商平台要求顾客先提供电子邮箱地址,随后向此邮箱发送包含随机字符串形式验证码邮件;客户只需把这串字符复制粘贴到网站指定位置即可顺利进入个人主页继续购物操作[^4]。 以下是Python语言编写的一个简单模拟TOTP生成函数的例子: ```python import hmac import hashlib import struct import time def generate_totp(secret_key: bytes, interval=30): current_time = int(time.time() / interval) msg = struct.pack(">Q", current_time) digest = hmac.new(secret_key, msg=msg, digestmod=hashlib.sha1).digest() offset = digest[-1] & 0xf truncated_hash = digest[offset:offset+4] code = struct.unpack('>I', truncated_hash)[0] & 0x7fffffff return str(code)[-6:].zfill(6) secret = b'your_secret_shared_between_client_and_server' print(generate_totp(secret)) ``` 上述脚本展示了如何利用哈希运算配合系统实时秒数计算得出六位长度变化不定但遵循既定规律的新鲜数值供即时校验之需。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值