3. 侧信道攻击基础与威胁模型
后量子密码(PQC)算法在数学上被证明能抵抗量子计算机攻击,但这并不意味着其实现是安全的。侧信道攻击(Side-Channel Attack, SCA)绕过算法本身的数学强度,转而利用密码设备在运行过程中泄露的物理信息——时间、功耗、电磁辐射、缓存行为乃至故障响应——来恢复密钥或伪造签名。理解这些攻击的原理与威胁模型,是设计安全PQC实现的前提。
3.1 侧信道攻击的分类与物理原理
侧信道攻击的核心思想是:密码运算在物理设备上执行时,其耗时、能量消耗、电磁辐射等物理量必然与所处理的秘密数据相关。攻击者通过观测这些物理量,结合对算法结构的了解,可以推断出密钥信息。
计时攻击(Timing Attack)利用不同输入导致运算路径或运算量的差异。例如,若某实现中的模约减操作在结果超出范围时执行额外减法,则不同密钥位对应的运算时间不同。计时攻击无需物理接触设备,可通过网络远程发起,但易受网络抖动和系统噪声干扰。
功耗分析攻击(Power Analysis)分为简单功耗分析(SPA)和差分功耗分析(DPA)。SPA通过观察单条功耗轨迹识别操作序列,例如区分平方与乘法操作,从而推断密钥位。DPA则采集大量轨迹,利用统计方法(如相关系数)找出与猜测中间值相关的功耗泄漏点。DPA对噪声有较强鲁棒性,是实践中最有效的攻击手段之一。
电磁攻击(Electromagnetic Attack)与功耗攻击原理类似,但通过天线或探头捕获芯片表面电磁辐射。电磁攻击的优势在于可进行空间定位,能分离芯片不同区域的泄漏,且无需与设备电源直接接触。
缓存攻击(Cache Attack)针对具有缓存层次的处理器。攻击者通过监控缓存命中/未命中模式,推断受害者访问的内存地址,进而恢复密钥。常见方法包括Prime+Probe、Flush+Reload等。缓存攻击在共享硬件(如云服务器)场景中尤为危险。
故障攻击(Fault Attack)通过注入故障(如电压毛刺、时钟毛刺、激光注入)使密码运算产生错误,再分析错误输出与正确输出之间的关系来恢复密钥。例如,RSA-CRT签名中若模幂运算出现故障,可分解模数N。故障攻击常与差分故障分析(DFA)结合使用。
3.2 后量子密码实现中的攻击面
PQC算法虽然数学结构不同,但其实现仍面临与传统密码类似的侧信道威胁,且部分特性引入了新的攻击面。
基于格的密码(如Kyber、Dilithium)的核心操作包括NTT(数论变换)、多项式乘法、采样与舍入。攻击面主要集中在:NTT中的蝶形运算若使用条件分支,可能泄露系数信息;采样函数(如CBD、拒绝采样)的循环次数与随机数相关,可能被计时攻击利用;舍入操作中的比较逻辑可能产生功耗差异。此外,Dilithium的签名过程中涉及拒绝采样循环,其执行次数与私钥相关,是计时攻击的潜在目标。
基于编码的密码(如McEliece)的密钥生成和加解密涉及大规模矩阵运算,其功耗特征可能泄露矩阵结构信息。解码算法中的迭代次数也可能成为计时侧信道。
基于哈希的签名(如SPHINCS+)虽然本身设计为常数时间,但其底层哈希函数的实现若存在缓存访问模式差异,仍可能被缓存攻击利用。
多变量密码的运算涉及有限域上的线性代数,其高斯消元等操作的数据依赖分支可能引入计时泄漏。
3.3 威胁模型与评估边界
在评估PQC实现的安全性时,需要明确威胁模型。常见的威胁模型包括:
- 远程计时攻击模型:攻击者通过网络发送请求,测量响应时间。评估边界为网络抖动、操作系统调度噪声。防护目标是使所有操作的执行时间与秘密数据无关。
- 本地功耗/电磁攻击模型:攻击者拥有物理设备,可采集功耗轨迹或电磁信号。评估边界包括采样率、探头位置、环境噪声。防护目标是降低信噪比,使统计攻击所需轨迹数超过实际可行范围。
- 缓存攻击模型:攻击者与受害者在同一物理主机(如云环境)上运行。评估边界为缓存层级、共享内存大小、调度粒度。防护目标是消除秘密相关的缓存访问模式。
- 故障攻击模型:攻击者能够注入故障并观察错误输出。评估边界为故障注入精度、可控性。防护目标是检测故障并阻止错误输出。
评估边界的重要性:脱离威胁模型讨论“安全”没有意义。一个在远程计时攻击模型下安全的实现,可能在本地功耗攻击模型下完全暴露。PQC实现的安全评估必须明确:攻击者能力(远程/本地、是否可注入故障)、可观测物理量、以及可接受的攻击成本。
3.4 常数时间实现与掩码防护
针对侧信道攻击,PQC实现通常采用两类防护策略:
常数时间实现旨在消除时间侧信道。具体技术包括:避免秘密相关的条件分支,使用条件移动(conditional move)替代if-else;避免秘密相关的内存访问,使用线性扫描或 oblivious 访问模式;确保循环次数固定,如拒绝采样中采用固定迭代次数加掩码处理。例如,在Kyber的NTT实现中,蝶形运算的索引计算应完全由公开参数决定,不依赖私钥系数。
掩码防护旨在消除功耗与电磁侧信道。其核心思想是将秘密值拆分为多个份额(share),使得每个份额的功耗与秘密无关。例如,一阶布尔掩码将敏感变量x拆分为x⊕m和m,其中m为随机掩码。所有线性操作(如异或、加法)可分别对份额进行,非线性操作(如S盒、乘法)则需要额外的掩码刷新和域转换。对于PQC中的多项式乘法,掩码后的NTT需要处理份额间的交叉项,计算开销显著增加。
实践提示:常数时间与掩码防护可以叠加使用,但需注意掩码随机数生成器的质量。若随机数可预测或被重用,掩码防护将失效。此外,掩码阶数越高,防护越强,但面积和功耗开销也越大,需根据实际威胁模型权衡。
3.5 评估方法与工具
PQC实现的侧信道评估通常包括以下步骤:
- 泄漏建模:根据算法结构,确定可能泄漏秘密的中间值(如NTT输出、采样结果)。
- 轨迹采集:使用示波器、电磁探头等设备采集功耗或电磁轨迹,同步触发信号通常来自设备GPIO。
- 泄漏检测:采用TVLA(Test Vector Leakage Assessment)方法,通过Welch's t-test比较固定输入与随机输入下的轨迹分布,判断是否存在显著泄漏。|t| > 4.5通常认为存在泄漏。
- 攻击验证:在检测到泄漏后,实施CPA(相关功耗分析)或模板攻击,验证是否可恢复密钥。
- 防护迭代:根据评估结果调整实现,重新评估直至泄漏低于阈值。
常用工具包括:ChipWhisperer(开源功耗/电磁采集平台)、Riscure Inspector(商业侧信道分析工具)、以及自定义的Python分析脚本(基于NumPy/SciPy)。对于缓存攻击,可使用Cachegrind、Mastik等工具进行模拟与评估。
总之,PQC实现的安全不仅取决于算法本身,更取决于实现细节与威胁模型的匹配程度。理解计时、功耗、电磁、缓存、故障等攻击的原理,明确评估边界,并采用常数时间与掩码防护,是构建安全PQC系统的必要步骤。