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 密钥存储的核心挑战

说了这么多威胁,你可能会问:那密钥到底该怎么存?

其实核心挑战就三个:

  1. 保密性:密钥不能被未授权方读取。无论是物理手段还是软件手段,都不能让密钥暴露。
  2. 完整性:密钥不能被篡改。如果攻击者替换了密钥,就能用自己的密钥认证设备。
  3. 可用性:合法用户(固件本身)必须能正常使用密钥。不能为了保护密钥,搞得设备自己都用不了。

这三个目标之间往往存在矛盾。比如,把密钥放在安全芯片里,保密性很好,但成本高、访问速度慢。把密钥放在 Flash 里,访问快,但容易被读出来。

我个人习惯的做法是:先评估产品的安全等级和成本预算,再选择合适的密钥存储方案。没有银弹,只有权衡。

1.4 本章知识体系

下面这张图概括了本章的核心逻辑:

密钥存储威胁模型总览 固件中的密钥 物理攻击 侧信道攻击 软件提取 探针攻击 芯片开盖 JTAG/SWD Flash直读 功耗分析 电磁辐射 时序分析 故障注入 缓冲区溢出 固件逆向 权限提升 远程侧信道 核心挑战 保密性 · 完整性 · 可用性 三者之间需要根据产品安全等级和成本进行权衡

1.5 小结

这一章我们聊了为什么密钥存储这么重要,以及它面临的三大类威胁:物理攻击、侧信道攻击、软件提取。

我见过太多项目,花了大价钱做安全算法、安全协议,最后却在密钥存储上栽了跟头。密钥就像房子的钥匙——锁做得再好,钥匙被人拿走了,一切白搭。

接下来的章节,我们会深入探讨各种密钥存储技术的原理、实现和优缺点。但在此之前,我希望你能记住一个原则:永远不要假设攻击者拿不到你的密钥,而是假设密钥一定会被攻击者尝试获取,然后设计你的保护方案。