2、密码学基础回顾:对称加密、非对称加密、哈希函数、分组密码(AES、DES)与侧信道攻击的关联
侧信道攻击的核心思想,是绕过密码算法本身的数学强度,转而观察密码设备在运行过程中泄露的物理信息——功耗、电磁辐射、运行时间、缓存访问模式等。要理解这些泄露为何能威胁安全,必须先厘清密码学基础构件的工作方式及其在硬件上的实现特征。本章将回顾对称加密、非对称加密、哈希函数和分组密码的基本原理,并重点剖析它们与侧信道攻击之间的内在关联,为后续功耗时序分析和电磁分析实战打下理论基础。
2.1 对称加密与侧信道攻击的天然耦合
核心原理
对称加密使用同一把密钥进行加密和解密,其安全性依赖于密钥的保密性。AES(高级加密标准)和DES(数据加密标准)是最具代表性的分组对称密码。AES-128的密钥长度为128位,分组大小为128位,经过10轮(AddRoundKey、SubBytes、ShiftRows、MixColumns)迭代运算。DES使用64位分组和56位有效密钥,虽然已不再安全,但其Feistel结构在硬件实现上仍有教学意义。
侧信道攻击之所以对对称加密构成严重威胁,根本原因在于:加密过程中的中间值(如S盒输出、轮密钥加结果)直接依赖于密钥和明文/密文的组合。当硬件电路处理这些中间值时,其瞬态功耗与所处理数据的汉明重量(Hamming Weight)或汉明距离(Hamming Distance)存在线性或非线性关系。攻击者只需采集足够多的功耗轨迹,通过统计模型即可恢复出密钥。
判断方法与操作流程
针对AES的典型相关功耗分析(CPA)攻击流程如下:
- 选择攻击点:通常选择第一轮SubBytes的输出或最后一轮AddRoundKey的输入作为中间值函数。
- 采集功耗轨迹:使用数字示波器或专用采集板,以高采样率(≥1GS/s)记录加密操作期间的功耗变化,同时记录对应的明文或密文。
- 构建假设模型:对每个可能的密钥字节(0-255),计算中间值,并映射为功耗模型(如汉明重量模型)。
- 计算相关系数:使用皮尔逊相关系数比较实际功耗轨迹与假设功耗模型,相关系数最大的密钥候选即为正确密钥。
# 伪代码示例:CPA攻击单个密钥字节
for guess_key in range(256):
intermediate = sbox[plaintext ^ guess_key] # 第一轮S盒输出
hw = popcount(intermediate) # 汉明重量
corr[guess_key] = pearson_corr(hw, power_traces)
key_byte = argmax(corr)
实战场景:在评估一款物联网安全芯片时,我们使用CW308目标板搭载STM32F303,运行AES-128加密。采集5000条功耗轨迹,采样率2GS/s。对第一个密钥字节进行CPA分析,正确密钥0x2B的相关系数达到0.42,而错误密钥的相关系数均低于0.15。仅需约2000条轨迹即可稳定恢复全部16字节密钥。
常见误区与总结
- 误区一:认为AES-256比AES-128更抗侧信道。实际上,密钥长度不影响侧信道泄露的难易程度,攻击者仍可通过首轮或末轮攻击恢复密钥。
- 误区二:只关注S盒输出,忽略密钥扩展。密钥扩展过程同样涉及密钥相关运算,且往往防护更弱。
- 误区三:忽视同步问题。功耗轨迹必须精确对齐,否则相关性会被噪声淹没。可使用重采样或互相关对齐预处理。
2.2 非对称加密:模幂运算的时序与功耗泄露
核心原理
非对称加密(公钥密码)使用公钥加密、私钥解密,或私钥签名、公钥验证。RSA基于大整数分解难题,核心运算是模幂运算 m^d mod n;ECC(椭圆曲线密码)基于椭圆曲线离散对数难题,核心运算是标量乘法 k·P。这些运算涉及大量大数乘法和模约减,其执行时间或功耗与密钥位值密切相关。
侧信道攻击对非对称加密的威胁主要体现在:私钥的每一位二进制值会显著影响运算路径。例如,RSA的平方-乘算法中,若密钥位为1,则执行平方和乘法;若为0,则只执行平方。这种分支行为直接导致功耗轨迹和运行时间的差异,简单功耗分析(SPA)即可直接读取密钥位。
判断方法与操作流程
| 攻击类型 | 目标算法 | 泄露来源 | 所需轨迹数 | 难度 |
|---|---|---|---|---|
| SPA(简单功耗分析) | RSA | 模乘/模平方的功耗差异 | 1-10条 | 低 |
| 时序攻击 | RSA/ECC | 密钥位导致的执行时间差异 | 数百条 | 中 |
| DPA(差分功耗分析) | ECC | 点加/点倍的数据依赖 | 数千条 | 中高 |
| 模板攻击 | 任何 | 设备指纹特征 | 数十条(需先建模) | 高 |
案例拆解:RSA私钥的SPA恢复
在一次对安全令牌的评估中,目标设备使用RSA-1024签名。我们使用高带宽电流探头(带宽1GHz)采集签名操作的功耗轨迹。从轨迹中清晰可见:平方运算呈现均匀的功耗包络,而乘法运算因操作数不同出现明显的尖峰。通过识别这两种模式,直接读取了私钥的二进制序列。整个过程仅需3条轨迹即可完整恢复私钥,耗时不到5分钟。
防护措施包括:使用蒙哥马利阶梯算法(Montgomery Ladder)使每次迭代都执行相同的运算序列;引入盲化因子(Blinding)随机化中间值;在硬件层面增加掩码和随机延时。
风险提示:非对称加密的侧信道防护远比对称加密复杂。即使使用了固定时间算法,功耗差异仍可能泄露信息。必须在算法层、电路层和系统层同时实施防护。
2.3 哈希函数:压缩函数的侧信道脆弱性
核心原理
哈希函数将任意长度消息压缩为固定长度摘要,具有单向性、抗碰撞性和雪崩效应。SHA-256使用64轮压缩函数,每轮包含逻辑函数(Ch、Maj)、循环移位和模加运算。SM3是中国国密标准,结构类似SHA-256。哈希函数在HMAC、密钥派生(HKDF)、数字签名和区块链中广泛使用。
哈希函数与侧信道攻击的关联常被忽视,但实际风险显著:当哈希函数处理含密钥的数据(如HMAC)时,密钥与消息的异或结果、压缩函数的中间状态都会产生数据依赖的功耗泄露。攻击者可通过DPA恢复HMAC的密钥,进而伪造消息认证码。
判断方法与操作流程
针对HMAC-SHA-256的侧信道攻击流程:
- 攻击目标:ipad(内部填充)与密钥异或后的值,或第一轮压缩函数的加法器输出。
- 采集策略:固定消息,重复计算HMAC,采集功耗轨迹。
- 分析模型:使用汉明距离模型,因为压缩函数中加法器的输出变化与前后状态相关。
- 密钥恢复:逐字节或逐字恢复密钥,利用SHA-256的32位字结构。
经验提醒:哈希函数的侧信道攻击往往比分组密码更难实施,因为压缩函数的非线性更强,且中间值位宽更大(32位)。建议使用CPA结合部分字攻击(Partial Word Attack)策略,先恢复高16位,再恢复低16位。
常见误区与总结
- 误区一:认为哈希函数是单向的,所以侧信道攻击无效。单向性保证的是数学逆运算困难,但物理泄露不依赖逆运算。
- 误区二:只关注压缩函数,忽略消息扩展。SHA-256的消息扩展(W数组生成)同样涉及密钥相关数据。
- 误区三:忽视长度扩展攻击与侧信道的结合。攻击者可利用侧信道获取内部状态,进而预测后续摘要。
2.4 分组密码模式与侧信道攻击的交互
核心原理
分组密码在实际应用中必须配合工作模式。ECB模式简单但存在模式泄露;CBC模式引入前一个密文分组作为反馈;CTR模式将计数器加密后与明文异或;GCM模式结合CTR和GHASH认证。不同模式对侧信道攻击的暴露面不同:
- ECB模式:相同明文分组产生相同密文,功耗轨迹呈现重复模式,便于攻击者识别分组边界。
- CBC模式:攻击者可选择密文分组,通过修改前一分组来影响后一分组的解密中间值,实现字节翻转攻击与侧信道结合。
- CTR模式:加密计数器值,攻击者可预测计数器,直接攻击加密路径。
- GCM模式:GHASH运算涉及密钥相关的H值(子密钥),且乘法在GF(2^128)上进行,功耗泄露点更多。
案例拆解:CBC模式下的填充预言攻击与侧信道结合
在一次对安全启动固件的评估中,目标使用AES-128-CBC解密引导镜像。我们利用侧信道信息辅助填充预言攻击:首先通过功耗轨迹确定解密操作完成的确切时间点,从而判断填充是否有效(PKCS#7填充)。传统填充预言攻击需要约128次请求/字节,而结合侧信道后,每次请求的响应时间差异更明显,攻击效率提升至约64次请求/字节。最终在约2小时内恢复了完整的固件解密密钥。
| 模式 | 侧信道暴露点 | 典型攻击方式 | 防护建议 |
|---|---|---|---|
| ECB | 分组边界、重复模式 | SPA识别分组、DPA攻击首轮 | 避免使用ECB,使用随机化IV |
| CBC | 解密中间值、填充验证 | 填充预言+DPA、字节翻转 | 使用认证加密(GCM/CCM) |
| CTR | 计数器加密路径 | CPA攻击计数器加密 | 使用掩码防护AES核心 |
| GCM | GHASH乘法、H值 | 模板攻击恢复H值 | 对GHASH实现掩码 |
常见误区与总结
- 误区一:认为认证加密(GCM)天然抗侧信道。GCM的认证标签计算同样依赖密钥,且GHASH的乘法在硬件上功耗特征明显。
- 误区二:只防护AES核心,忽略模式逻辑。模式逻辑中的异或、移位、乘法操作同样可能泄露密钥信息。
- 误区三:忽视IV/Nonce的重复使用。在CTR模式下,Nonce重复会导致密钥流重用,侧信道攻击可进一步放大此风险。
总结复盘:密码学基础与侧信道攻击的关联可归纳为三个层次:算法层(中间值依赖密钥)、实现层(功耗/时序与数据相关)、系统层(模式交互、协议设计)。任何一层防护缺失都可能导致密钥泄露。在后续章节中,我们将深入探讨如何利用这些关联实施具体的功耗分析和电磁分析攻击,以及对应的防护对策。