硬件安全基础:安全芯片选型与接口保护

各位同学,咱们今天聊点实在的。嵌入式摄像头的安全,说白了就是两件事:一是核心数据不能被偷,二是设备本身不能被篡改。要做到这两点,光靠软件加密是不够的——你想想看,如果攻击者直接拿探针去量你的总线,或者用JTAG把固件读出来,那软件写得再好也没用。

所以,硬件安全才是真正的根基。这一章我重点讲三个东西:安全芯片怎么选、防篡改设计怎么做、调试接口怎么保护。这些都是我在实际项目中踩过坑的地方,希望能帮你们少走弯路。

安全芯片选型:TPM、HSM、SE

先说说安全芯片。市面上常见的就三种:TPM、HSM、SE。很多人搞不清它们的区别,我简单解释一下。

TPM(可信平台模块),这玩意儿最早是给PC用的。它主要干三件事:存储密钥、度量启动过程、提供随机数。我做过一个智能门锁的项目,当时就用了TPM来存储设备证书。嗯,这里要注意——TPM的运算能力其实很弱,它不适合做大量加解密,只适合做密钥存储和平台完整性校验。

HSM(硬件安全模块),这个就猛多了。它通常是一个独立的硬件设备,运算能力强,支持各种密码算法。我在银行系统里见过HSM,那家伙能每秒处理上万次签名。但说实话,嵌入式摄像头用HSM有点大材小用——成本太高,功耗也大。

SE(安全元件),这才是嵌入式设备的首选。SE是一个独立的芯片,内部有CPU、存储、密码加速器。它专门干一件事:保护密钥。我建议你们做摄像头项目时优先考虑SE,因为它体积小、功耗低、安全性高。

我给你们列个对比表,方便选型:

特性 TPM HSM SE
典型应用 PC、服务器 金融、云 嵌入式、IoT
运算能力 中等 极强 中等
成本 极高 中等
功耗 中等
安全等级 CC EAL4+ CC EAL5+ CC EAL6+
我的建议: 做摄像头项目,选SE最合适。具体型号可以看看NXP的SE050或者Microchip的ATECC608。这两个我都用过,稳定性不错。

硬件防篡改设计

选好了安全芯片,接下来要考虑怎么保护它。攻击者不会老老实实按你的流程走,他们会用各种物理手段来破解。我见过最狠的一次,有人直接用激光烧开芯片封装,然后用探针去读内部总线。

硬件防篡改,说白了就是让攻击者一碰就坏,或者一碰就擦除数据。常用的手段有几种:

  • 防篡改封装: 芯片外面包一层金属屏蔽罩,一旦被破坏,内部传感器会触发数据擦除。
  • 电压/温度检测: 攻击者常用电压毛刺或者液氮降温来干扰芯片。加个检测电路,一旦电压或温度异常,立即触发安全响应。
  • 主动屏蔽层: 在芯片顶层走一层蛇形线,一旦被切断或短路,芯片自动销毁密钥。
  • 防侧信道攻击: 这个比较高级。攻击者会通过分析功耗或电磁辐射来猜密钥。我建议在硬件设计时加入随机延时和掩码技术。
注意: 防篡改设计不是万能的。我曾经遇到一个项目,客户要求做防篡改,结果成本翻了3倍,最后产品根本卖不出去。所以,防篡改的等级要根据实际威胁模型来定,别过度设计。

JTAG/SWD接口保护

这个我必须重点讲。JTAG和SWD是调试接口,用来烧录固件、调试代码。但你知道吗?很多攻击者就是通过这两个接口把固件读出来的。

我刚开始做嵌入式时,觉得JTAG接口留着也没事,反正产品上市后没人会去动它。结果有一次,客户的产品被破解了,攻击者就是用JTAG把整个Flash读出来,然后逆向工程。那次教训太深刻了。

保护JTAG/SWD接口,常用的方法有:

  1. 物理熔断: 量产时烧录完固件,直接熔断JTAG引脚。这是最彻底的方法,但一旦熔断,以后就没法调试了。
  2. 密码保护: 很多MCU支持JTAG密码锁。只有输入正确的密码才能访问调试接口。我建议用至少128位的密码。
  3. 禁用未使用的接口: 如果产品不需要JTAG,直接在PCB设计时就不引出这些引脚。
  4. 动态使能: 只有在特定条件下(比如按下某个按键)才开启JTAG。平时接口是关闭的。

这里我贴一段代码,展示如何在STM32上禁用JTAG:

// 禁用JTAG,只保留SWD
void disable_jtag(void) {
    // 修改AFIO寄存器,关闭JTAG功能
    AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_1;  // 只保留SWD
    // 或者完全禁用所有调试接口
    // AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_2 | AFIO_MAPR_SWJ_CFG_1;
}
关键点: 代码里只保留了SWD,因为SWD只需要两根线(SWDIO和SWCLK),比JTAG的5根线更安全。而且SWD的速度也够用。

嗯,这里还要提一句。有些芯片支持一次性编程(OTP)区域,你可以把密钥或者配置信息写进去,之后就不能改了。我建议把JTAG密码也放在OTP里,这样即使攻击者拿到芯片,也没法通过软件修改密码。

避坑指南

最后,我分享几个实战中遇到的坑:

  • 别信默认配置: 很多芯片出厂时JTAG是默认开启的。我见过有人忘了关,结果产品被破解。量产前一定要检查。
  • 注意PCB走线: 安全芯片的通信总线(比如I2C、SPI)要尽量短,而且不要走表层。我曾经在项目中,攻击者直接用探针在PCB表面量到了I2C信号,密钥被截获。
  • 考虑老化问题: 防篡改电路里的电池会老化。如果电池没电了,防篡改功能就失效了。我建议用超级电容或者定期更换电池的方案。
  • 别忽略固件更新: 安全芯片的固件也需要更新。如果更新机制不安全,攻击者可能会利用这个漏洞。我建议用签名验证的方式更新固件。

好了,这一章的内容就这些。硬件安全是个系统工程,从芯片选型到接口保护,每一步都不能马虎。下一章我会讲加密算法的硬件实现,到时候咱们再聊。