
像 IBM Quantum 这样的云量子计算平台开创了量子研究和实验的新纪元,为用户提供了对量子硬件的远程访问。然而,这种可访问性也带来了独特的安全问题,特别是以侧信道攻击的形式。这篇长文深入探讨了 IBM 量子服务上基于时间的侧信道漏洞,这在量子泄漏攻击中已得到强调,并扩展了核心侧信道分析概念、机器学习增强以及现实的缓解策略。
我们涵盖了侧信道分析的基础和历史实践、现实世界中的漏洞、使用机器学习的进展,并提供了说明检测和取证的代码示例。这份指南将使研究人员、安全工程师、学生和企业利益相关者受益,帮助他们理解或防御现代侧信道在量子和经典环境下的威胁。
侧信道分析(SCA)是一种安全评估技术,通过测量设备的物理特性或操作行为的“泄漏”来发现隐藏信息或秘密(如加密密钥)。侧信道分析不是攻击算法的核心数学弱点,而是利用间接信息,如时间、功耗、电磁发射,甚至声学信号。是德科技侧信道分析概述概述了关键泄漏向量:
如果加密算法在处理某些秘密密钥或数据时耗时稍长,那么拥有高精度时间数据的攻击者可以在不直接访问密钥的情况下重建敏感密钥。
侧信道分析曾攻破DES、AES、RSA、ECC的实现,并从隔离空气的硬件钱包、智能卡中恢复密钥等秘密。
基于云的量子服务如IBM Quantum和Google Quantum AI已经普及了量子硬件的访问。在多租户云环境中,用户远程提交量子电路。云提供商负责管理这些电路在共享量子处理器上的调度、排队和执行。
量子泄漏攻击,详细描述在这篇ACM论文中,展示了如何在 IBM 的云量子平台上通过恶意用户滥用时间侧信道来提取关于同驻工作负载的信息。
1. 测量排队和执行时间: 攻击者提交精心设计的作业并记录作业接受、排队和完成的精确时间。
2. 关联波动: 作业执行时间的微小波动可能与其他租户活动相关(例如,作业队列长度、电路复杂度,甚至电路结构)。
3. 推断敏感信息: 通过足够多的时间样本和统计分析,攻击者可以推断:
┌──────────────┐ ┌─────────────┐
│ 攻击者 │─────►│ 云端队列 │
└──────────────┘ └─────────────┘
▲ │
│ 共驻 ▼
┌──────────────┐ ┌─────────────┐
│ 受害用户 │─────►│量子芯片 │
└──────────────┘ └─────────────┘
攻击者根据受害者的活动观察时间变化。
时间侧信道破坏了云量子计算中的资源隔离,允许恶意租户隐秘地了解(甚至与)同一量子设备上的共驻用户沟通。
*机器学习(ML)*通过自动从嘈杂的测量数据中提取有意义 的特征,增强了现代侧信道分析。在复杂的高维空间中(如差分功耗分析或时间噪声),机器学习模型如卷积神经网络(CNN)、决策树或无监督聚类在识别细微模式上非常出色,这些模式暗示了与秘密相关的操作。
IA Cryptology ePrint Archive (2025/1754)调查了针对后量子密码(PQC)方案的最新机器学习侧信道攻击,如基于格子的加密和基于哈希的签名。
以下是一个简化的实现,使用 scikit-learn,基于合成时间数据对两个密钥进行分类:
import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
# 两个键值的伪时间痕迹
n_samples = 300
key0_traces = np.random.normal(loc=0.030, scale=0.002, size=(n_samples, 1)) # 键=0
key1_traces = np.random.normal(loc=0.035, scale=0.002, size=(n_samples, 1)) # 键=1
X = np.vstack([key0_traces, key1_traces])
y = np.array([0]*n_samples + [1]*n_samples)
# 训练/测试分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
clf = RandomForestClassifier(n_estimators=100)
clf.fit(X_train, y_train)
print("测试准确率:", clf.score(X_test, y_test))
尽管分离最小,分类器将以高可靠性恢复秘密比特。
# 在模拟的作业调度器中随机注入延迟
import time, random
def execute_job(job):
r_delay = random.uniform(0.01, 0.05)
time.sleep(r_delay) # 为每个作业添加可变噪声
# ... 执行量子电路 ...
让我们展示在云(或远程)服务上使用时间攻击进行检测和基础实验。
您可以使用 time 命令或 Python 测量作业提交或 API 调用的精确时间。
for i in {1..100}; do
start=$(date +%s%N)
curl -s https://some.quantum.api/submit_job > /dev/null
end=$(date +%s%N)
duration=$(( (end - start)/1000000 ))
echo "$duration" >> timings.log
done
这会记录用于后续分析的毫秒响应时间。
import requests, time
timings = []
for i in range(100):
t0 = time.perf_counter()
requests.get('https://some.quantum.api/submit_job')
t1 = time.perf_counter()
timings.append(t1 - t0)
with open('timings.csv', 'w') as f:
for t in timings:
f.write(f"{t}\n")
在收集时间数据后,使用 Python 或 Bash/awk 分析结果。
awk '{ total += $1; count++ } END { print "平均值:",total/count }' timings.log
awk '{ sum+=$1; sumsq+=$1*$1 } END { print "标准差:", sqrt(sumsq/NR - (sum/NR)**2) }' timings.log
import matplotlib.pyplot as plt
import numpy as np
data = np.loadtxt('timings.csv')
plt.hist(data, bins=40)
plt.title("作业时间直方图")
plt.xlabel("时间(秒)")
plt.ylabel("频率")
plt.show()
# 简单的异常检测(三西格玛规则)
outliers = data[abs(data - data.mean()) > 3 * data.std()]
print("检测到的异常值:", len(outliers))
基于时间的侧信道攻击,长期以来在嵌入式和密码领域被实践,如今威胁着云量子计算的安全承诺,尤其是在多租户下。正如量子泄漏攻击在 IBM Quantum 中所展示的,即使最复杂的后端也可能通过细微的时间变异意外泄露敏感的工作负载信息。
机器学习算法进一步放大了这些威胁,使对手能够从嘈杂的侧信道数据中准确提取秘密。因此,未来证明经典和量子云基础设施的持续警惕、检测和稳健的缓解工程是必不可少的。
安全利益相关者必须在设计云量子服务时将侧信道弹性视为一项至关重要的考虑因素。