2、安全存储需求分析:数据机密性、数据完整性、身份认证、防篡改

好,咱们接着聊。上一章我们把加密狗的整体架构搭起来了,这一章得沉下来,好好掰扯掰扯安全存储到底要满足哪些需求。

说实话,我早年做第一个加密狗项目时,踩过一个大坑。当时只想着把密钥存进去,加个锁就完事了。结果呢?客户反馈说,他们用逻辑分析仪抓了几次总线数据,就把密钥给还原了。嗯,那会儿我才真正意识到——安全存储不是存进去就完事,它是一整套攻防博弈

今天咱们要聊的四个需求:数据机密性、数据完整性、身份认证、防篡改。这四个词,说白了就是加密狗的四条命。少一条,你的产品就可能被攻破。

2.1 数据机密性:别让密钥裸奔

数据机密性,核心就一句话:未经授权的人,看不到你的数据

你想想看,加密狗里存的是什么?私钥、证书、固件加密密钥。这些东西要是明文存储,那跟把银行卡密码写在纸条上贴脑门上有什么区别?

我在项目中遇到过一种情况:某厂商的加密狗,直接用Flash存储私钥,连个简单的XOR加密都没做。攻击者用JTAG读出来,直接就是二进制明文。这哪是加密狗,这是送分狗啊。

正确的做法是什么?我建议至少做到这几点:

  • 存储加密:所有敏感数据写入Flash前,必须用芯片内部唯一密钥(比如UID派生密钥)进行AES-256加密。
  • 密钥分层:不要只用一个密钥加密所有东西。我习惯用三层结构——主密钥加密工作密钥,工作密钥加密用户数据。这样即使工作密钥泄露,主密钥还在安全区内。
  • 内存清零:数据使用完毕后,立即用随机数覆盖内存。别指望系统自动回收,我见过太多因为忘记清零导致密钥残留在RAM里的案例。

重要原则:加密狗内部,任何时候都不应该出现明文形式的私钥或主密钥。如果必须出现,那也只在安全CPU的临时寄存器里,用完立即销毁。

2.2 数据完整性:数据没被改过,你信吗?

机密性解决了“别人看不到”的问题,但还有个问题:你怎么知道数据没被人动过手脚?

完整性,就是用来回答这个问题的。它保证数据从写入到读取,中间没有被篡改过。

我记得有一次做固件升级功能,加密狗里存了固件的哈希值。攻击者把固件替换成恶意版本,同时把哈希值也改了。结果呢?校验通过了,但狗已经废了。

这个教训告诉我:完整性校验的元数据,必须和原始数据分开保护

具体怎么做?我推荐以下方案:

  • HMAC-SHA256:对每个敏感数据块计算HMAC,密钥用芯片内部唯一密钥。这样攻击者即使能改数据,也伪造不了正确的MAC。
  • 数字签名:对于固件、配置等需要跨设备传输的数据,用ECDSA或RSA签名。私钥在安全区内,公钥可以公开。
  • 防回滚保护:每次写入数据时,递增一个单调计数器。读取时检查计数器值,防止攻击者把数据恢复到旧版本。

我的小技巧:完整性校验的密钥,最好和加密密钥不同。我曾经见过一个设计,加密和完整性用同一个密钥,结果攻击者利用侧信道攻击同时拿到了两个能力。分开,更安全。

2.3 身份认证:你怎么证明你是你?

身份认证,说白了就是加密狗要证明自己是合法的,主机也要证明自己是合法的。这是双向的。

你想想看,如果加密狗不验证主机身份,那随便一个上位机软件都能调用加密狗里的密钥。那跟把钥匙挂门口有什么区别?

我建议采用挑战-应答机制

  1. 主机发送一个随机数(挑战)给加密狗。
  2. 加密狗用内部私钥对随机数签名,返回签名结果。
  3. 主机用公钥验证签名。如果验证通过,说明加密狗是合法的。
  4. 反过来,加密狗也可以验证主机的身份,防止中间人攻击。

这里有个坑:随机数必须真随机。我见过有人用伪随机数生成器,结果攻击者预测了随机数序列,直接重放攻击就破解了。真随机数生成器(TRNG)是必须的,别省这个成本。

警告:身份认证的私钥,绝对不能导出。一旦导出,你的加密狗就失去了身份的唯一性。我见过一个产品,私钥存储在外部EEPROM里,结果被物理探针直接读走了。嗯,那款产品后来被召回了。

2.4 防篡改:物理攻击也得防

前面三个需求,主要针对逻辑攻击。但别忘了,加密狗是物理设备,攻击者可能直接上手拆。

防篡改,就是防止攻击者通过物理手段获取或修改内部数据

我参与过一个汽车ECU加密狗项目,客户要求通过ISO 21434标准。那会儿我们做了这些防护:

攻击方式 防护措施 说明
JTAG/SWD调试接口 物理熔断或eFuse 量产时永久禁用调试接口
探针攻击 主动屏蔽层 芯片顶层覆盖金属网格,检测到断路立即擦除密钥
电压/时钟毛刺 电压检测器+时钟监测 检测到异常波动,触发安全擦除
温度攻击 温度传感器 超出工作温度范围,自动锁定
激光/聚焦离子束 安全封装+环氧树脂 增加物理探测难度

我曾经遇到一个案例:攻击者用液氮冷却芯片,然后通过低温下的电压毛刺让CPU跳过安全检查。嗯,从那以后,我所有设计都加了温度传感器,低于-20°C直接擦除密钥。

核心思想:防篡改不是让攻击者打不开,而是让攻击者在打开之前,数据已经消失了。这叫“主动销毁”。

2.5 四个需求的协同关系

这四个需求不是孤立的。我习惯把它们看作一个整体:

  • 机密性 + 完整性 = 数据安全存储的基础
  • 身份认证 = 访问控制的门禁
  • 防篡改 = 物理层面的最后防线

举个例子:你加密存储了私钥(机密性),用HMAC保护了它(完整性),只有经过挑战-应答认证的主机才能读取(身份认证),而且芯片有主动屏蔽层,一拆就自毁(防篡改)。

这才是一个完整的安全存储方案。

我的建议:设计时,先画一个威胁模型。想想攻击者会从哪个角度入手,然后针对性地补强。别一上来就堆防护,成本扛不住。我一般会问自己三个问题:

  1. 攻击者最想拿到的数据是什么?
  2. 他最容易从哪里下手?
  3. 我的防护能撑多久?

想清楚这三个问题,需求分析就到位了。

好,这一章咱们把安全存储的四个核心需求聊透了。下一章,我会带大家看看具体的硬件选型和架构设计。到时候咱们再细聊。