
随着量子计算的不断进步,加密社区积极开发被认为可以抵御量子攻击的算法——即后量子密码学(PQC)。在这些算法中,格子基础的加密系统由于其强大的安全基础和高效的性能脱颖而出。
然而,即使是最复杂的数学难题也可能被攻击,如果实现过程中泄露了旁路信息。旁路分析和攻击(SCA)是一类通过利用例如功耗、电磁辐射和时间变化等物理现象来提取密钥的实施攻击方法,绕过数学理论。
本文提供了对如何旁路攻击威胁格子基础后量子方案的深入分析。涵盖了基础的SCA概念、PQC如何暴露的方式、近期研究亮点以及动手例子——将初学者概念与高级实践者的知识结合。
旁路攻击是一类安全攻击,攻击者通过测量设备在计算过程中某些物理参数,获取关于加密操作的信息。
示例:如果一个加密设备在密钥位为‘0’时的时间比为‘1’时短,攻击者可能连续测量已知输入的计算时间以重构密钥。
实现量子计算机后,它可以利用Shor算法破坏传统的公钥方案(如RSA,ECC)。后量子密码学是一项致力于设计抵御量子攻击的加密/签名方案的努力。
一个格子是在n维空间中具有规则模式的点阵网格。加密系统使用难的格子问题:
NIST PQC 项目选择基于格子的方案,因为它们具有效率和可扩展性。
尽管在数学上有较强的稳定性,格子基础方案被实现于物理硬件上——对SCA敏感。不同于传统方案,格子密码使用如多项式乘法、离散高斯采样和模算术等操作,如果实现不慎,它们都可能泄露信息。
Kyber密钥封装机制依赖多项式算术和模约减。研究(ACM, 2022)显示:
在Dilithium签名中,当采样器的决策逻辑依赖于秘密数据且非恒时,会观察到拒绝采样泄露。
传统的SCA分析需要大量专业知识。通过机器学习(ML),攻击者可以自动化特征提取和分类过程——潜在地破解更复杂或噪声大的实现。
假设您有PQC KEM采样步骤期间的功耗轨迹数据集:
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
# 假设 `traces` 是一个NxT矩阵 (N=样本数, T=时间点数)
# 假设 `labels` 是一个N维数组,表示密钥位(0或1)
traces, labels = np.load('power_traces.npy'), np.load('labels.npy')
X_train, X_test, y_train, y_test = train_test_split(traces, labels, test_size=0.2)
clf = RandomForestClassifier(n_estimators=100)
clf.fit(X_train, y_train)
print("Test accuracy:", clf.score(X_test, y_test))
这种方法可以揭示秘密系数位(例如,二进制秘密向量片段)从多项式或LWE秘值。
动手的旁路分析展示了真实的风险。让我们大概了解一下典型的SCA工具链和代码。
# 安装ChipWhisperer软件工具包
pip install chipwhisperer
用Python脚本从运行Kyber解密的微控制器获取轨迹:
import chipwhisperer as cw
scope = cw.scope()
target = cw.target(scope, cw.targets.SimpleSerial)
traces = []
for i in range(100):
scope.arm()
target.simpleserial_write('d', b'\x00' * 32) # 发送虚拟密文
ret = scope.capture()
if ret:
traces.append(scope.get_last_trace())
保存到磁盘以供后续ML分析。
假设您已导出原始轨迹数据。
Bash:从轨迹中提取平均电流:
grep -oP 'Trace: \K[0-9 .]+' traces.log | awk '{total += $1; count += 1} END {print total/count}'
Python:解析CSV轨迹进行绘图/分析:
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv('traces.csv')
plt.plot(df['time'], df['power'])
plt.title('功率轨迹 - 基于格子的PQC解密')
plt.xlabel('时间(ns)')
plt.ylabel('功率(毫安)')
plt.show()
在真实世界中,攻击者可能会获取大量轨迹并使用统计工具或ML来提取密钥位。
CPA 示例(Python):
import numpy as np
from scipy.stats import pearsonr
# traces: NxT矩阵;hypotheses: 可能的密钥猜测,input_data: 明文/密文
def cpa(traces, input_data, key_guesses):
max_corr = -1
best_guess = None
for k in key_guesses:
hyp = hamming_weight(pqc_operation(input_data, k)) # 为猜测建模功耗
corrs = [pearsonr(traces[:, t], hyp)[0] for t in range(traces.shape[1])]
if max(abs(corrs)) > max_corr:
max_corr = max(abs(corrs))
best_guess = k
return best_guess, max_corr
鉴于所展示的风险,实施者如何保护基于格子的PQC免受SCA?
对于Kyber,选择使用基于AVX2的恒定时间多项式算法例程(参见官方PQClean仓库)。对于随机采样,使用加固的恒定时间采样器,而不是简单的表格法。
随着PQC的广泛应用:
虽然基于格子的后量子密码学在理论上对量子对手提供了安全性,旁路分析揭示了深刻的实际风险。特定实现的物理泄漏——功耗、EM、时间——可以通过仔细的分析,让攻击者恢复密钥。新的机器学习方法可以自动化和改进这些攻击。稳健的、旁路安全的实现需要仔细斟酌、恒定时间的代码、硬件/固件设计以及严格的测试。
随着后量子方案在智能卡、移动芯片和云端的部署中,旁路攻击的抵御能力必须与核心算法的加密强度同样重要。
基于格子的后量子原语的旁路分析
https://dl.acm.org/doi/10.1145/3569420
后量子密码学的旁路攻击风险
https://www.ledger.com/blog-risk-side-channel-attacks-post-quantum-cryptography
机器学习与后量子密码学的旁路攻击
https://eprint.iacr.org/2025/1754
NIST PQC 项目
https://csrc.nist.gov/Projects/post-quantum-cryptography
PQClean: 干净和旁路安全的参考实现
https://github.com/PQClean/PQClean
ChipWhisperer: 开源SCA/FI工具
https://chipwhisperer.io/