3、侧信道攻击基础:功耗分析(SPA/DPA)、电磁辐射分析、时间分析

各位同学,咱们今天聊点实在的。侧信道攻击,说白了就是“不走正门,翻窗户”。芯片在运算的时候,会泄露各种物理信息——功耗、电磁波、运算时间。攻击者就靠这些“蛛丝马迹”,把你的密钥给扒出来。

我刚开始接触这个领域时,也觉得有点玄乎。直到有一次,我在实验室里亲眼看着一台示波器,愣是把一个AES-128的密钥给“读”了出来。嗯,从那以后,我再也不敢小看这些“旁门左道”了。

3.1 功耗分析:芯片的“呼吸”会说话

芯片在工作时,电流会随着数据变化而波动。你想想看,执行一条“加1”指令和执行一条“乘100”指令,功耗能一样吗?肯定不一样。攻击者就是靠分析这些功耗曲线,来反推你在算什么东西。

3.1.1 简单功耗分析(SPA)

SPA,就是直接看功耗波形。就像看心电图一样,一眼就能看出“心跳”是否异常。

典型场景:

  • 识别操作序列:比如RSA的模幂运算,乘法和平方的功耗波形明显不同。攻击者一看就知道你做了几次乘法、几次平方。
  • 检测分支跳转:if-else语句,两个分支的功耗可能不一样。攻击者能猜出你走了哪条路。

避坑指南:我曾经见过一个产品,它的RSA实现里,乘法和平方的功耗波形差异巨大。攻击者用SPA一眼就看出了密钥的每一位。后来我们改成了“总是执行乘法和平方”,才堵上这个漏洞。

3.1.2 差分功耗分析(DPA)

DPA比SPA高级多了。它不只看一条波形,而是收集成千上万条波形,然后用统计学方法找出“隐藏的信号”。

核心思路:

  1. 攻击者猜一个密钥字节。
  2. 根据这个猜测,把功耗曲线分成两组(比如:某一位是0的一组,是1的一组)。
  3. 计算两组曲线的平均差值。如果猜对了,差值里就会出现一个明显的“尖峰”。

说白了,DPA就是把噪声平均掉,把信号放大出来。

我的经验:对付DPA,最有效的方法就是“掩码”。把每个中间值都拆成随机数,让功耗和真实数据脱钩。我习惯在算法设计阶段就加入掩码,而不是等流片回来再打补丁。

3.2 电磁辐射分析:隔空取“钥”

芯片在工作时,电流变化会产生电磁场。攻击者拿个探针,靠近芯片表面,就能采集到电磁辐射信号。这玩意儿比功耗分析更隐蔽,因为不需要物理接触。

为什么更危险?

  • 非接触式:攻击者可以在几毫米外采集信号,你根本发现不了。
  • 局部性:探针可以对准芯片的某个特定模块(比如密码协处理器),采集到的信号更干净。

我记得有个项目,客户要求做EM防护。我们花了很大力气做屏蔽罩,结果发现屏蔽罩的接地没做好,反而成了“天线”。嗯,细节决定成败啊。

3.3 时间分析:快慢之间藏玄机

这个就更好理解了。如果某个操作的时间长短,和输入数据有关,攻击者就能通过计时来反推数据。

经典案例:

  • 字符串比较:很多系统用strcmp()比较密码。一旦发现某个字符不匹配,就立即返回。攻击者可以逐个字符试探,直到返回时间变长——说明这个字符猜对了。
  • RSA解密:如果密钥的某一位是1,就执行一次乘法;如果是0,就跳过。攻击者测量解密时间,就能推断出密钥的每一位。

注意:时间攻击的精度要求很高,通常需要纳秒级的测量。但在FPGA或ASIC上,这个精度是可以达到的。我建议所有涉及密钥比较的操作,都改成“恒定时间”实现。

3.4 知识体系总览

下面这张图,是我自己总结的侧信道攻击知识框架。你可以把它当作一张“作战地图”。

侧信道攻击知识体系 物理信道 分析方法 防护手段 功耗 (Power) 电磁 (EM) 时间 (Timing) 简单分析 (SPA/SEMA) 差分分析 (DPA/DEMA) 相关性分析 (CPA) 掩码 (Masking) 隐藏 (Hiding) 恒定时间实现 攻击者通过物理信道采集泄露信息,运用统计方法提取密钥, 设计者则通过掩码、隐藏、恒定时间等手段进行对抗。 实战建议 1. 设计阶段就要考虑侧信道防护,不要等流片回来再补救。 2. 使用掩码时,注意随机数的质量。伪随机数发生器可能成为新漏洞。 3. 定期做侧信道攻击测试,用实际攻击结果来验证防护效果。

3.5 小结

侧信道攻击,说白了就是“利用物理泄露,破解逻辑秘密”。SPA/DPA看功耗,EMA看电磁,时间分析看延迟。每一种都有对应的防护手段。

我个人习惯,在设计芯片之初就把这些攻击模型列出来,然后逐个击破。不要等到产品被攻破了,才想起来要补课。嗯,今天就先聊到这里,大家回去可以拿个示波器,看看自己手头的芯片功耗波形长什么样。


专注资料整理