乐鑫 ESP32 微控制器具有闪存加密功能,启用后可确保存储在(通常是外部)闪存芯片上的数据和代码使用 AES-256 (ESP32) 或更高版本(ESP32-C3、-C6)进行加密。对于 ESP32,此加密功能已被证明容易受到侧通道攻击 (SCA),导致 [courk] 不仅使用自定义 ESP 相关功耗分析 (CPA) 板(如图所示)来复制此结果,该板捕获 ESP32 的功耗MCU,还要尝试一下 ESP32-C3 和 ESP32-C6 部件的运气,这些部件应该是更难破解的。
ESP32 使用相当简单的 AES-256 加密例程,与 QSPI 总线上暴露的闪存通信线路一起构成教科书 SCA 示例,而 ESP32-C3 将加密升级为XTS-AES ,它使用两个 128 位密钥在 -C3 部分 (XTS-256)。这个特定的 MCU 仍然容易受到与 CPA 相同的 SCA 攻击,使其比 ESP32 更难受到攻击,但绝不是不可能。
在Espressif (PDF) 发布有关 ESP32 Flash 加密被破解的公告后,据称将在未来的 Espressif 设计中实施反 SCA 措施,其中包括 ESP32-C6。这些措施主要用于掩盖和混淆内部操作,从而降低电源跟踪数据的用处。这些对策可以分阶段启用,[courk] 就是这么做的,看看它们对基于 CPA 的 SCA 有何影响。也许令人震惊的是,这些似乎都没有对 CPA 攻击产生太大影响(如果有的话)。
作为奖励回合,[courk] 随后决定加快通过故障注入恢复加密密钥的极其缓慢的过程,这只需要 -C3 和 -C6 部分的前 128 个字节(一个块)。使用电压故障注入可以绕过安全启动功能。基本思想是通过缓冲区溢出可以运行自定义代码,从而转储整个 Flash 内容。在演示了这一点并向 Espressif 报告后, 发布了一份公告,其中指出,除了使用具有内部闪存且无法从外部访问 QSPI 总线的 ESP32 部件之外,无法防御这种 SCA 和故障注入攻击。
鉴于这些 ESP32 系列部件上的 Flash 加密存在多么严重的漏洞,将赌注押在厌恶打开 IC 的攻击者身上可能确实是您最好的防御。
上图:ESP CPA 板的框图(图片来源:Courk at courk.cc)