想象一下,你的电脑就像一栋繁忙的办公大楼。每当一名员工(程序)完成任务并进入睡眠状态时,大楼的安保系统都会在员工踏出门的那一瞬间,对能源消耗进行一次快照记录。
这篇论文发现了一种新的黑客手段,通过观察计算机进入睡眠时拍摄的这些“能源快照”,来窃取秘密代码。以下是使用简单类比进行的详细解析:
1. 秘密代码(Nonce/随机数)
为了签署一份数字文件(如银行转账或软件更新),计算机使用一种特殊的数学技巧,叫做 ECDSA。这种技巧依赖于一个一次性的秘密数字,称为 nonce(随机数)。
- 类比: 把这个 nonce 想象成你在支票上写下的一个唯一的、一次性的密码。如果有人偷走了这张纸,他们就能推算出你的永久主密钥,从而永远伪造你的签名。
- 目标: 计算机试图将这个数字隐藏起来,甚至不让它自身的内部传感器察觉。
2. 旧方法 vs. 新方法
- 旧方法(传统的功率攻击): 黑客以前需要记录计算机在进行数学运算时一段高清的功率使用“电影”。他们必须分析数千帧图像来寻找模式。这就像是通过看每一页书的模糊照片来试图阅读一本书。
- 新方法(基于睡眠的攻击): 研究人员发现,当一个计算机程序进入“睡眠”(暂停)时,电源供应会以一种非常特定的方式产生峰值。
- 类比: 想象一个人走出房间。如果他提着一个沉重的箱子(大量数据),门会发出巨大的吱呀声;如果他两手空空(零数据),门声就会很轻。
- 研究人员意识到,他们不需要一部“电影”。他们只需要在计算机进入睡眠的那一刻,听一下那一声“吱呀声”(功率峰值)即可。
3. 攻击是如何运作的
计算机进行复杂的数学运算来生成那个秘密的 nonce。在运算过程中,它会逐位(bit by bit)处理这个数字。
- 缺陷: 如果这个秘密数字以一串零开头(例如
000000123...),计算机的大脑(寄存器)在前几步中会保持基本空闲和安静。如果数字是以非零开头的,大脑就会变得忙碌且“嘈杂”。
- 泄露: 当计算机最终进入睡眠时,那些“安静”步骤与“忙碌”步骤所留下的“噪声”会产生不同大小的功率峰值。
- 结果: 通过测量这个单一峰值的大小,黑客可以判断出该秘密数字是否以零开头。他们可以重复这个过程,逐位剥离出这个秘密数字。
4. “SleepWalk” 漏洞
研究人员将此称为 SleepWalk 漏洞。
- 类比: 这就像是一个小偷不需要破门而入,他们只需等待你离开去睡觉(睡眠),然后通过听你走出门口时的脚步声有多重,来猜测你刚才在屋里搬运了什么。
- 惊喜之处: 研究人员在两种截然不同的芯片类型(ARM 和 RISC-V)以及三种流行的软件库(RustCrypto、BearSSL、GoCrypto)上进行了测试。他们发现,所有这些软件都存在这种“足迹”泄露。即使是那些设计为“常数时间”(constant-time,通常用于防止此类监听)的软件也难逃其咎,因为睡眠机制本身就会泄露信息。
5. 他们究竟取得了什么成果?
- 规模: 他们不需要一百万个数据点。他们只需要大约 1,000 个样本(有时每次尝试仅需一个样本)。
- 成功率: 他们成功地从功率峰值中恢复了 20 位(bits) 的秘密 nonce。
- 后果: 在密码学领域,掌握了那个秘密数字中的仅仅 20 位信息,就足以让数学家解开一个被称为“隐藏数字问题”(Hidden Number Problem)的谜题,从而揭示整个私钥。
总结
论文声称,通过仅仅倾听计算机进入睡眠时产生的微小功率峰值,黑客就可以推断出用于数字签名的部分秘密代码。这种攻击在不同的计算机芯片和软件上均有效,证明了目前处于“睡眠”状态的计算机正在泄露那些本被认为安全的秘密。
技术摘要:睡眠揭示随机数 (Sleep Reveals the Nonce)
问题陈述
椭圆曲线数字签名算法 (ECDSA) 的安全性从根本上依赖于每次签名随机数 (k) 的机密性。即使是随机数的局部泄露,也可能允许攻击者利用基于格的密码分析(特别是隐藏数字问题,Hidden Number Problem)来恢复长期私钥。虽然确定性 ECDSA (RFC 6979) 缓解了随机性失败的问题,但它引入了新的漏洞:相同的消息会产生相同的随机数,从而放大了侧信道泄露模式。
现有的针对 ECDSA 的功耗侧信道攻击 (PSC) 通常需要高分辨率的迹线、复杂的对齐、特权观测能力(例如,电磁探针、高级示波器),或针对特定的非恒定时间实现。此外,许多先前的攻击局限于单一硬件平台或特定的加密库。目前仍存在一个认知空白,即此前被识别为 SleepWalk 漏洞的“睡眠诱导”功耗波动,是否可以推广到不同架构和库,从而破解恒定时间 ECDSA 实现。
方法论
作者提出了一种利用 SleepWalk 侧信道漏洞的新型攻击向量。与分析完整功耗迹线的传统 PSC 不同,该方法依赖于单点测量:即在由 sleep 系统调用触发的操作系统上下文切换期间产生的功耗峰值幅度。
攻击向量
- 机制: 上下文切换期间的功耗峰值由两部分组成:一个上下文切换功耗特征(取决于切换瞬间寄存器数据的汉明重量)和一个残余功耗特征(反映了紧接其前执行的指令的残留功耗足迹)。
- 漏洞关联: 作者假设,当 ECDSA 在处理随机数的领先零位/零半字节(leading zero bits/nibbles)时,标量乘法运算会涉及包含单位点(全零位模式)的计算。这些操作会产生较低的汉明重量和独特的残余功耗足迹,区别于对非零值的操作。
- 实验设置:
- 硬件: 使用了两台单板计算机:树莓派 4B (Raspberry Pi 4B, ARM Cortex-A72) 和 VisionFive 2 (RISC-V U74)。
- 库: 针对了三个广泛使用的加密库:RustCrypto、BearSSL 和 GoCrypto。
- 流程: 系统对同一条消息进行多次 ECDSA 签名操作(以确保随机数相同),随后调用
sleep。使用 Keysight 示波器捕获功耗峰值幅度。
- 数据收集: 研究通过改变随机数的领先零位/零半字节的数量,并测量由此产生的功耗峰值幅度。
实现分析
作者通过逆向工程目标库中的标量乘法例程,以识别泄露源:
- RustCrypto & BearSSL: 两者都使用了固定的 4 位窗口从左至右的双倍加法(double-and-add)算法。当随机数以零半字节开头时,循环处理单位点(全零模式),导致较低的汉明重量和减少的残余功耗。
- GoCrypto: 使用了带有 Booth 编码的固定 6 位有符号窗口法。与其他库类似,处理零块会导致以零值为主的计算,从而产生可辨识的功耗特征。
核心贡献
- 跨架构泛化: 本文证明了 SleepWalk 漏洞并非局限于单一平台,而是存在于不同的处理器架构(ARM 和 RISC-V)之中。
- 与库无关的攻击: 该攻击成功地从三种不同的加密库(RustCrypto、BearSSL、GoCrypto)中提取了随机数信息,证明该漏洞源于操作系统 sleep 机制与标量乘法逻辑之间的相互作用,而非特定的库缺陷。
- 高效性: 提议的攻击比以往的工作显著更高效。以往的攻击(如 Wang 等人的研究)大约需要一百万个数据点,而本方法每条迹线仅需一个采样点,且最多只需 1,000 条迹线即可恢复显著的随机数信息。
- 破解恒定时间: 该攻击成功破解了旨在实现恒定时间和抵御传统时序或功耗分析的实现,专门利用了零值计算产生的残余功耗效应。
结果
- 泄露确认: 实验证实,睡眠诱导的功耗峰值幅度与 ECDSA 随机数的领先零位/零半字节数量相关联。
- 具有更多领先零位的随机数表现出较低的平均峰值功耗。
- 具有较少领先零位的随机数表现出较高的平均峰值功耗。
- 比特恢复: 攻击在所有测试配置(3 个库与 2 个架构的 6 种组合)中成功恢复了 20 位 ECDSA 随机数。
- 平台差异:
- RISC-V (VisionFive 2): 在所有三个库中均显示出清晰、一致的漏洞。
- ARM (Raspberry Pi 4B): 在 RustCrypto 和 BearSSL 中显示出漏洞。然而,GoCrypto 在 ARM 上的实验表现出巨大的波动,使得在特定平台上进行可靠的攻击变得具有挑战性。
- 密钥恢复可行性: 作者指出,恢复 20 位随机数足以利用格技术(隐藏数字问题)恢复完整的私钥,这在先前的密码分析文献中已有定论。
意义与主张
本文声称是首篇证明睡眠诱导的功耗峰值构成一种通用的、跨平台的侧信道漏洞并能破解 ECDSA 的研究工作。
- 威胁模型扩展: 研究结果扩展了物理侧信道攻击的攻击面。攻击者现在有可能使用极简的硬件(单个功耗探针)来恢复秘密,且无需复杂的迹线对齐或高端设备。
- 设计启示: 研究结果挑战了“恒定时间及确定性实现足以保证安全”的假设。论文强调,零值计算产生的“残余功耗”效应,结合操作系统层面的上下文切换,创造了一个即使在经过加固的软件中依然存在的泄露通道。
- 实用性: 通过仅需单次执行的一个采样点以及相对较少的迹线数量(最多 1,000 条),该攻击被呈现为对运行在通用硬件上的现实世界加密系统的实际威胁。
作者总结道,必须重新考虑加密系统的设计选择,以应对睡眠诱导泄露,因为目前的防御措施并未解决这一特定的攻击向量。
每周获取最佳 computer science 论文。
受到斯坦福、剑桥和法国科学院研究人员的信赖。
请查收邮箱确认订阅。
出了点问题,再试一次?
无垃圾邮件,随时退订。