2、安全存储需求分析:数据机密性、数据完整性、身份认证、防篡改
好,咱们接着聊。上一章我们把加密狗的整体架构搭起来了,这一章得沉下来,好好掰扯掰扯安全存储到底要满足哪些需求。
说实话,我早年做第一个加密狗项目时,踩过一个大坑。当时只想着把密钥存进去,加个锁就完事了。结果呢?客户反馈说,他们用逻辑分析仪抓了几次总线数据,就把密钥给还原了。嗯,那会儿我才真正意识到——安全存储不是存进去就完事,它是一整套攻防博弈。
今天咱们要聊的四个需求:数据机密性、数据完整性、身份认证、防篡改。这四个词,说白了就是加密狗的四条命。少一条,你的产品就可能被攻破。
2.1 数据机密性:别让密钥裸奔
数据机密性,核心就一句话:未经授权的人,看不到你的数据。
你想想看,加密狗里存的是什么?私钥、证书、固件加密密钥。这些东西要是明文存储,那跟把银行卡密码写在纸条上贴脑门上有什么区别?
我在项目中遇到过一种情况:某厂商的加密狗,直接用Flash存储私钥,连个简单的XOR加密都没做。攻击者用JTAG读出来,直接就是二进制明文。这哪是加密狗,这是送分狗啊。
正确的做法是什么?我建议至少做到这几点:
- 存储加密:所有敏感数据写入Flash前,必须用芯片内部唯一密钥(比如UID派生密钥)进行AES-256加密。
- 密钥分层:不要只用一个密钥加密所有东西。我习惯用三层结构——主密钥加密工作密钥,工作密钥加密用户数据。这样即使工作密钥泄露,主密钥还在安全区内。
- 内存清零:数据使用完毕后,立即用随机数覆盖内存。别指望系统自动回收,我见过太多因为忘记清零导致密钥残留在RAM里的案例。
重要原则:加密狗内部,任何时候都不应该出现明文形式的私钥或主密钥。如果必须出现,那也只在安全CPU的临时寄存器里,用完立即销毁。
2.2 数据完整性:数据没被改过,你信吗?
机密性解决了“别人看不到”的问题,但还有个问题:你怎么知道数据没被人动过手脚?
完整性,就是用来回答这个问题的。它保证数据从写入到读取,中间没有被篡改过。
我记得有一次做固件升级功能,加密狗里存了固件的哈希值。攻击者把固件替换成恶意版本,同时把哈希值也改了。结果呢?校验通过了,但狗已经废了。
这个教训告诉我:完整性校验的元数据,必须和原始数据分开保护。
具体怎么做?我推荐以下方案:
- HMAC-SHA256:对每个敏感数据块计算HMAC,密钥用芯片内部唯一密钥。这样攻击者即使能改数据,也伪造不了正确的MAC。
- 数字签名:对于固件、配置等需要跨设备传输的数据,用ECDSA或RSA签名。私钥在安全区内,公钥可以公开。
- 防回滚保护:每次写入数据时,递增一个单调计数器。读取时检查计数器值,防止攻击者把数据恢复到旧版本。
我的小技巧:完整性校验的密钥,最好和加密密钥不同。我曾经见过一个设计,加密和完整性用同一个密钥,结果攻击者利用侧信道攻击同时拿到了两个能力。分开,更安全。
2.3 身份认证:你怎么证明你是你?
身份认证,说白了就是加密狗要证明自己是合法的,主机也要证明自己是合法的。这是双向的。
你想想看,如果加密狗不验证主机身份,那随便一个上位机软件都能调用加密狗里的密钥。那跟把钥匙挂门口有什么区别?
我建议采用挑战-应答机制:
- 主机发送一个随机数(挑战)给加密狗。
- 加密狗用内部私钥对随机数签名,返回签名结果。
- 主机用公钥验证签名。如果验证通过,说明加密狗是合法的。
- 反过来,加密狗也可以验证主机的身份,防止中间人攻击。
这里有个坑:随机数必须真随机。我见过有人用伪随机数生成器,结果攻击者预测了随机数序列,直接重放攻击就破解了。真随机数生成器(TRNG)是必须的,别省这个成本。
警告:身份认证的私钥,绝对不能导出。一旦导出,你的加密狗就失去了身份的唯一性。我见过一个产品,私钥存储在外部EEPROM里,结果被物理探针直接读走了。嗯,那款产品后来被召回了。
2.4 防篡改:物理攻击也得防
前面三个需求,主要针对逻辑攻击。但别忘了,加密狗是物理设备,攻击者可能直接上手拆。
防篡改,就是防止攻击者通过物理手段获取或修改内部数据。
我参与过一个汽车ECU加密狗项目,客户要求通过ISO 21434标准。那会儿我们做了这些防护:
| 攻击方式 | 防护措施 | 说明 |
|---|---|---|
| JTAG/SWD调试接口 | 物理熔断或eFuse | 量产时永久禁用调试接口 |
| 探针攻击 | 主动屏蔽层 | 芯片顶层覆盖金属网格,检测到断路立即擦除密钥 |
| 电压/时钟毛刺 | 电压检测器+时钟监测 | 检测到异常波动,触发安全擦除 |
| 温度攻击 | 温度传感器 | 超出工作温度范围,自动锁定 |
| 激光/聚焦离子束 | 安全封装+环氧树脂 | 增加物理探测难度 |
我曾经遇到一个案例:攻击者用液氮冷却芯片,然后通过低温下的电压毛刺让CPU跳过安全检查。嗯,从那以后,我所有设计都加了温度传感器,低于-20°C直接擦除密钥。
核心思想:防篡改不是让攻击者打不开,而是让攻击者在打开之前,数据已经消失了。这叫“主动销毁”。
2.5 四个需求的协同关系
这四个需求不是孤立的。我习惯把它们看作一个整体:
- 机密性 + 完整性 = 数据安全存储的基础
- 身份认证 = 访问控制的门禁
- 防篡改 = 物理层面的最后防线
举个例子:你加密存储了私钥(机密性),用HMAC保护了它(完整性),只有经过挑战-应答认证的主机才能读取(身份认证),而且芯片有主动屏蔽层,一拆就自毁(防篡改)。
这才是一个完整的安全存储方案。
我的建议:设计时,先画一个威胁模型。想想攻击者会从哪个角度入手,然后针对性地补强。别一上来就堆防护,成本扛不住。我一般会问自己三个问题:
- 攻击者最想拿到的数据是什么?
- 他最容易从哪里下手?
- 我的防护能撑多久?
想清楚这三个问题,需求分析就到位了。
好,这一章咱们把安全存储的四个核心需求聊透了。下一章,我会带大家看看具体的硬件选型和架构设计。到时候咱们再细聊。