1. 密钥存储概述:为什么需要保护密钥?
大家好,我是你们的讲师。今天咱们聊聊固件安全里最基础、也最要命的一个话题——密钥存储。
你可能会想,密钥不就是一串二进制数吗?放在固件里,别人又看不见,有什么好保护的?
嗯,我刚开始做嵌入式那会儿也这么想。直到有一次,我负责的一个智能门锁产品,固件里直接硬编码了 AES 密钥。结果呢?被一个安全研究员用 JTAG 接口读出来了。整个产品线被迫召回,损失惨重。从那以后,我再也不敢小看密钥存储这件事了。
1.1 密钥是固件安全的基石
说白了,密钥就是固件安全的最后一道防线。你想想看,固件里那么多安全机制——安全启动、加密通信、固件更新验证、数据加密存储——哪一个离得开密钥?
一旦密钥泄露,所有依赖它的安全机制就形同虚设。攻击者可以伪造固件更新包、解密通信数据、提取敏感信息,甚至完全控制设备。
核心观点:密钥存储不是可选项,而是固件安全的基础设施。没有安全的密钥存储,其他安全措施都是空中楼阁。
1.2 固件中密钥面临的威胁模型
我经常跟团队说,做安全设计之前,先搞清楚敌人是谁、用什么武器。固件中的密钥面临的威胁,大致可以分为三类:
1.2.1 物理攻击
这类攻击需要攻击者物理接触设备。听起来门槛高,但在物联网时代,设备遍布各处,物理接触其实很容易实现。
- 探针攻击:用微探针直接接触芯片内部总线或存储单元,读取密钥数据。我在一个工控项目里见过,攻击者用探针台直接读出了 Flash 中的密钥。
- 芯片开盖:用化学方法去除芯片封装,用显微镜和探针直接观察或读取内部存储。高端攻击者甚至能用聚焦离子束(FIB)修改芯片内部电路。
- JTAG/SWD 调试接口:如果调试接口没锁死,攻击者可以直接连接调试器,读取整个固件和密钥。这是最常见的攻击路径之一。
- 存储器直接读取:拆下 Flash 芯片,用编程器直接读取内容。很多 IoT 设备用的 SPI Flash 芯片,拆下来就能读。
注意:物理攻击的成本正在快速下降。一台二手探针台几千块就能买到,开盖服务几百块就能搞定。别以为物理攻击离你很远。
1.2.2 侧信道攻击
这类攻击不直接读取密钥,而是通过观察设备的物理特性来推断密钥。听起来像谍战片?其实很常见。
| 攻击类型 | 利用的物理量 | 典型场景 |
|---|---|---|
| 功耗分析(SPA/DPA) | 芯片运行时的电流变化 | 加密运算时,不同密钥位导致不同功耗波形 |
| 电磁辐射分析(EMA) | 芯片运行时产生的电磁场 | 用近场探头采集加密运算的电磁泄漏 |
| 时序分析 | 加密运算的执行时间 | 某些实现中,密钥位不同导致执行时间不同 |
| 故障注入 | 电压/时钟/激光干扰 | 在加密运算中注入错误,通过错误结果推断密钥 |
我记得有一次做安全评估,客户说他们的 AES 实现是标准的,肯定没问题。我拿示波器抓了一下功耗波形,简单做了个差分功耗分析(DPA),不到两个小时就把密钥还原出来了。客户当时脸都绿了。
经验之谈:侧信道攻击最可怕的地方在于,它不需要破坏设备,甚至不需要知道密钥存储在哪里。只要设备在执行加密运算,就可能泄漏信息。
1.2.3 软件提取
这类攻击通过软件漏洞或固件本身的缺陷来提取密钥。不需要物理接触,远程就能完成。
- 缓冲区溢出:利用固件中的内存漏洞,读取或覆盖密钥存储区域。我在一个路由器固件里就发现过这样的漏洞。
- 固件逆向:从固件镜像中直接提取硬编码的密钥。很多开发人员习惯把密钥写在代码里,用字符串搜索就能找到。
- 调试接口未锁定:固件中保留了调试接口,攻击者通过 UART 或 SWD 连接后,可以读取内存中的密钥。
- 权限提升:利用操作系统或 RTOS 的漏洞,从用户态获取内核态权限,进而读取受保护的内存区域。
- 侧信道软件化:通过软件定时器或性能计数器,远程测量加密运算的时间,进行时序分析。
关键认知:软件提取是攻击面最广、攻击成本最低的方式。一个远程代码执行漏洞,就可能让所有密钥保护措施化为乌有。
1.3 密钥存储的核心挑战
说了这么多威胁,你可能会问:那密钥到底该怎么存?
其实核心挑战就三个:
- 保密性:密钥不能被未授权方读取。无论是物理手段还是软件手段,都不能让密钥暴露。
- 完整性:密钥不能被篡改。如果攻击者替换了密钥,就能用自己的密钥认证设备。
- 可用性:合法用户(固件本身)必须能正常使用密钥。不能为了保护密钥,搞得设备自己都用不了。
这三个目标之间往往存在矛盾。比如,把密钥放在安全芯片里,保密性很好,但成本高、访问速度慢。把密钥放在 Flash 里,访问快,但容易被读出来。
我个人习惯的做法是:先评估产品的安全等级和成本预算,再选择合适的密钥存储方案。没有银弹,只有权衡。
1.4 本章知识体系
下面这张图概括了本章的核心逻辑:
1.5 小结
这一章我们聊了为什么密钥存储这么重要,以及它面临的三大类威胁:物理攻击、侧信道攻击、软件提取。
我见过太多项目,花了大价钱做安全算法、安全协议,最后却在密钥存储上栽了跟头。密钥就像房子的钥匙——锁做得再好,钥匙被人拿走了,一切白搭。
接下来的章节,我们会深入探讨各种密钥存储技术的原理、实现和优缺点。但在此之前,我希望你能记住一个原则:永远不要假设攻击者拿不到你的密钥,而是假设密钥一定会被攻击者尝试获取,然后设计你的保护方案。