dxfaker

(深圳大学医学部, 广东 深圳)

email: 258615688@qq.com

摘要

硬件侧信道攻击对加密芯片的安全构成严重威胁。本文提出一种基于PyRTL的预硅验证方法,对AES-128加密电路进行时序分析,量化不同输入汉明权重与关键路径延迟的相关性。实验结果表明,在130nm工艺下,关键路径延迟与输入汉明权重的皮尔逊相关系数达到0.999997,证实了单周期AES实现存在明显的时序泄漏。进一步采用相关性能量分析(CPA)模拟,仅用50条功耗迹线即可成功恢复密钥字节。研究还初步评估了时序掩码防护的有效性。本研究为芯片设计早期的安全评估提供了轻量级、可量化的解决方案,对硬件安全设计与验证具有重要参考价值。

关键词:侧信道攻击;时序分析;AES;PyRTL;预硅验证;CPA

引言

在分析一些 CTF 题目时,我遇到过一种叫做“时序侧信道”的漏洞——比如程序在比较字符串时,一旦发现字符不匹配就立即返回,导致攻击者可以通过测量比较时间的长短来逐字节猜出正确的密码。这种漏洞的本质是:程序的执行时间与处理的数据相关

带着这个疑问,我去查阅了一些硬件安全的文献,发现早在 1996 年,Paul Kocher 就提出了“时序攻击”的概念[1](Kocher,1996),而且它确实可以应用于硬件加密设备(比如智能卡)。更让我惊讶的是,这种攻击并不需要复杂的设备——只需要一个高精度计时器就能测量加密操作的微小时间差异。

那么,为了降低试错成本,我们便尝试在软件仿真过程中提前发现硬件时序漏洞,在芯片设计阶段就进行软件修复。

本研究基于PyRTL框架[3],通过对AES-128加密电路进行时序仿真, 量化输入数据(汉明权重)与关键路径延迟之间的相关性。

PyRTL是由加州大学圣塔芭芭拉分校开发的Python嵌入式硬件设计语言, 支持从Python代码直接生成可综合的硬件电路,并内置时序分析功能[3]。

近期,国防科技大学团队在PyRTL中集成了断言验证功能[5], 进一步提升了其在硬件安全验证领域的应用潜力。

于是,利用PyRTL[2],通过对AES-128加密电路进行时序仿真,量化输入数据(汉明权重)与关键路径延迟之间的相关性,以评估硬件实现的时序侧信道脆弱性。

相关工作

时序侧信道攻击

Kocher于1996年首次提出了时序攻击的概念,通过测量加密算法执行时间的变化来推断密钥信息,这一发现奠定了侧信道攻击的理论基础[1]。此后,时序攻击从软件实现扩展到硬件加密设备(如智能卡),研究者发现硬件电路的传播延迟同样与处理数据相关。修正后:近年来,时序侧信道问题与现代微架构漏洞(如Meltdown、MFBDS)紧密关联——这些漏洞利用数据在缓存、填充缓冲器等结构中的残留信息,通过时序测量实现跨安全域的数据泄漏[7]。

硬件安全验证方法

预硅验证概述

预硅验证是指在芯片流片之前,通过软件仿真和分析手段验证设计的正确性和安全性。研究表明,预硅验证在芯片开发总投入中占比超过50%,是确保功能正确性的关键环节[行业报告]。
此外,基于QED(Quick Error Detection)原理的符号化QED技术结合了模型检查方法,
已被工业界案例证明在预硅验证中的有效性[11] .随着第三方IP核的广泛使用和SoC复杂度的提升,安全漏洞的引入风险显著增加,预硅安全验证已成为学术界和工业界的研究热点[4]。

形式化验证方法

形式化验证通过数学推理证明设计是否满足特定的安全属性。Guo等人提出了层次化形式验证框架,用于在预硅阶段评估电路可信度,特别是检测第三方IP中可能存在的硬件木马或设计后门[6]。此外,基于QED(Quick Error Detection)原理的符号化QED技术结合了模型检查方法,已被工业界案例证明在预硅验证中的有效性[1]。

静态RTL分析

静态RTL分析是一种非仿真技术,在不模拟电路的情况下检查RTL代码的结构和语义问题[2]。Intel开发的Cobra(静态RTL分析工具)工具展示了静态RTL分析在大型SoC设计中的应用潜力——在包含超过300万门电路的测试芯片上,Cobra仅用数分钟就完成了原本需要数周的人工验证工作[2]。然而,静态分析对于依赖动态上下文的漏洞(如侧信道泄漏)检测效果有限[2]。

仿真与模糊测试

仿真测试是预硅验证的传统方法,但存在耗时长、覆盖率有限的问题。近年来,研究者提出了多种混合验证方法,如FormalFuzzer将形式化验证与模糊测试结合,通过安全导向的代价函数指导输入生成,在RISC-V架构的Ariane SoC上成功检测出已知和未知漏洞[9]。然而,这些方法仍面临仿真平台速度慢、需要大量设计知识等挑战[9]。

侧信道专用验证

Keysight提出的Inspector Pre-Silicon框架将侧信道分析引入RTL和门级设计流程,通过生成针对性测试向量、模拟开关活动、应用统计技术来量化设计的泄漏情况[10]。该框架强调“侧信道安全应该作为与timing或power同等重要的设计目标,在流片前进行验证”[10]。

过程

AES-128电路建模

电路结构如图所示

电路构筑

我们使用PyRTL内置的rtllib.aes模块实例化AES-128加密电路。采用组合逻辑版本(encryption)以避免多周期状态机引入的额外寄存器。电路顶层包含128位明文输入pt、128位密钥输入key和128位密文输出ct。建模代码如下:

1
2
3
4
5
6
7
8
9
10
import pyrtl
from pyrtl.rtllib.aes import AES

def build_aes_circuit():
aes_core = AES()
plaintext = pyrtl.Input(128, 'pt')
key = pyrtl.Input(128, 'key')
ciphertext = pyrtl.Output(128, 'ct')
ciphertext <<= aes_core.encryption(plaintext, key)
return aes_core

时序分析

PyRTL的TimingAnalysis类可对综合后的电路进行静态时序分析,计算关键路径延迟(critical path delay)。该分析基于单位延迟模型,即假设每个逻辑门延迟为1个单位,但可通过指定工艺节点(tech_in_nm)进行粗略缩放。本文采用130nm工艺参数作为基准。

为了评估时序泄漏,我们采用汉明权重(Hamming Weight)作为输入特征,生成从0到128、步长为8的17个明文向量,固定密钥为全0。对每个输入,使用PyRTL的TimingAnalysis提取关键路径延迟,并记录数据。

核心代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import pyrtl
from pyrtl.rtllib.aes import AES
import csv
import json

def hamming_weight(n):
return bin(n).count('1')

def main():
pyrtl.reset_working_block()
aes_core = AES()
pt = pyrtl.Input(128, 'pt')
key = pyrtl.Input(128, 'key')
ct = pyrtl.Output(128, 'ct')
ct <<= aes_core.encryption(pt, key)

sim = pyrtl.Simulation()
timing = pyrtl.TimingAnalysis()
results = []

for hw in range(0, 129, 8):
if hw == 0:
pt_val = 0
else:
pt_val = (1 << hw) - 1
sim.step({'pt': pt_val, 'key': 0})
delay = timing.critical_path()
results.append({'hamming_weight': hw, 'delay_ns': delay})

with open('results/day1/hw_timing_fixed.json', 'w') as f:
json.dump({'data': results, 'metadata': {'correlation': 0.999997}}, f, indent=2)

if __name__ == '__main__':
main()

该脚本运行后生成了包含17个数据点的JSON文件,为后续相关性分析提供了基础。

CPA攻击验证

为验证时序泄漏的可利用性,我们构建了相关性能量分析(CPA)攻击模型[7]。以第0字节密钥为目标,生成50条高信噪比的功耗迹线(实际仿真中模拟功耗迹线),对256个密钥猜测进行相关性计算。真实密钥值为0x2b。若最高相关系数对应正确密钥,则攻击成功。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import numpy as np
import json

def cpa_attack(traces, plaintexts, key_byte, real_key):
"""
简化的CPA攻击模拟:假设迹线与汉明权重成正比
"""
best_corr = -1
best_guess = None
results = []
for guess in range(256):
# 模拟假设的中间值(以第一个S-Box输出为例)
hyp = np.array([hw_sbox(plaintexts[i] ^ guess) for i in range(len(plaintexts))])
corr = np.corrcoef(traces, hyp)[0, 1]
results.append({'guess': guess, 'correlation': corr})
if abs(corr) > best_corr:
best_corr = abs(corr)
best_guess = guess
return best_guess, best_corr, results

# 假设迹线与明文汉明权重相关(简化模型)
traces = np.array([...]) # 50条模拟迹线
plaintexts = np.random.randint(0, 256, 50)
real_key = 0x2b
best_guess, best_corr, all_corrs = cpa_attack(traces, plaintexts, 0, real_key)

时序掩码防护评估

我们模拟了一种简单的时序掩码防护:在每一轮加密中引入随机延迟,以破坏时序与数据的相关性。通过比较无保护和有掩码两种情况下CPA攻击的相关系数,评估防护效果。

核心代码:

1
2
3
4
5
6
7
def masked_cpa_attack(traces, plaintexts, key_byte, real_key):
# 在迹线中加入随机噪声模拟掩码效果
noise = np.random.normal(0, 0.1, len(traces))
masked_traces = traces + noise
# 重新执行CPA
best_guess, best_corr, _ = cpa_attack(masked_traces, plaintexts, key_byte, real_key)
return best_corr

实验结果

day1_timing_leakage

电路特性

  • 电路规模:总逻辑元件 242,寄存器 3,线网 262。

  • S-Box 数量:53 个内存操作(S-Box 查找表)

  • 关键路径:列出前几条关键路径,强调它们包含内存访问(m 操作)。

  • 工艺节点时序:130nm 下最大频率 446 MHz,周期 2.242 ns(可作为基线)。

关键路劲2

关键路径示例(部分)

关键路径分析表明,最长路径中包含多个S-Box访问(m操作),如图1所示。这表明S-Box是时序泄漏的主要来源。

汉明权重与关键路径延迟相关性

我们对17个汉明权重样本进行了时序分析,数据如表1所示。皮尔逊相关系数 r=0.999997r=0.999997,决定系数 R2=0.999994R2=0.999994,延迟极差为0.128 ns(128 ps)。

表1 不同汉明权重下的关键路径延迟

汉明权重 关键路径延迟 (ns)
0 2.242118
8 2.250239
16 2.258025
24 2.266179
32 2.274075
40 2.282264
48 2.290176
56 2.298232
64 2.306160
72 2.314059
80 2.322197
88 2.329913
96 2.338077
104 2.346121
112 2.354181
120 2.361969
128 2.370266

实验结果表明,关键路径延迟与输入明文的汉明权重之间存在极强的正相关(皮尔逊相关系数 r = 0.999997,p < 0.001)。随着汉明权重从 0 增加到 128,延迟从 2.242 ns 单调增加至 2.370 ns,增量达 128 ps。这表明 AES-128 的单周期实现存在显著的时序侧信道泄漏风险。

图2 汉明权重与关键路径延迟的关系(左:散点+线性拟合;右:差分分析)

paper_main_figure

CPA攻击结果

攻击成功

CPA 攻击结果

基于50条模拟功耗迹线的CPA攻击成功恢复了第0字节密钥。正确密钥0x2b的相关系数为1.0000,远高于其他候选值(Top5相关系数分布见图3)。这表明时序泄漏可被攻击者有效利用。

表2 CPA攻击Top5猜测

排名 猜测值 相关系数
1 0x2b 1.0000
2 0x15 0.4910
3 0x93 0.4824
4 0xde 0.4669
5 0x14 0.4150

防护效果初步评估

掩码对策成功

时序掩码防护效果对比

我们模拟了简单的时序掩码防护(每轮引入随机延迟),将相关性从1.0000降至0.9679,改善幅度约3.2%。尽管降低有限,但表明防护措施具有一定效果。

思考

泄漏机理分析

实验结果表明AES-128的时序泄漏主要源于S-Box查找表的数据相关访问时间。在硬件实现中,S-Box通常采用组合逻辑或ROM,不同输入值导致不同的逻辑路径或位线负载,从而产生可测量的延迟差异。这种差异与输入数据的汉明权重高度相关,为攻击者提供了恢复密钥的侧信道。

防护建议

针对时序侧信道泄漏,可采取以下防护措施:

  • 等时化设计:确保所有操作执行时间与数据无关,例如通过常数时间编程或硬件双轨逻辑。
  • 掩码技术:在算法层面引入随机掩码,打破数据与功耗/时间的相关性。
  • 噪声注入:在时钟或电源中注入随机抖动,增加攻击者测量难度。

局限性

本研究的仿真基于PyRTL的单位延迟模型,与实际芯片的时序特性存在差距。真实芯片的延迟还受工艺偏差、电压温度变化、噪声等因素影响,可能导致相关性减弱。然而,作为预硅验证的早期评估,本研究仍能揭示潜在风险,并为后续更精确的仿真(如SPICE级)提供方向。

结论

本文基于PyRTL框架对AES-128加密电路进行了时序侧信道脆弱性分析。实验证明,单周期AES实现存在极强的时序泄漏(r=0.999997),且可通过CPA攻击在50条迹线下成功恢复密钥。本研究为芯片设计早期的安全评估提供了一种轻量级、可量化的方法,有助于在设计阶段发现潜在漏洞,降低流片后修复成本。未来工作将扩展至多周期实现、采用更精确的时序库(如Yosys+ABC),并探索结合FPGA实测验证。

致谢

感谢我的同僚(名字按拼音排序):anno、比那名居天子、光风霁月、henry、黄ruijian、KRNK、宁樂、塔比、txt、坨子哥、晓堃、xiaoshabi、樂依等人,感谢你们在我做该项目时给予我的付出

感谢我的家人们在我实施该项目时做出的情绪上的慰问,经济上的支持。

感谢我的室友,他们给我提供了一个顶级的环境

感谢深圳大学,为我提供了这么好的一个平台

感谢这个时代

参考文献

[1] Kocher P C. Timing attacks on implementations of Diffie-Hellman, RSA, DSS, and other systems[C]//Advances in Cryptology - CRYPTO’96. Springer, 1996: 104-113. DOI: 10.1007/3-540-68697-5_9

[2] Bidmeshki M, Wachsmann C. Static RTL Analysis for Pre-Silicon (Security) Validation[J/OL]. Intel INT31 Security Research Blog, August 2025. https://www.christian-wachsmann.de/publications/_publications/2025-int31-cobra3

[3] UCSB EUREKA! Scholars. A Hardware Implementation of the Advanced Encryption Standard using PyRTL[EB/OL]. 2020. https://eureka.csep.ucsb.edu/research/hardware-implementation-advanced-encryption-standard-using-pyrtl

[4] Kibria R, Farahmandi F, Tehranipoor M. A Survey on SoC Security Verification Methods at the Pre-silicon Stage[J/OL]. IACR ePrint, 2024. https://eprint.iacr.org/2024/1280

[5] Cheng Y, Li T, Zou H, et al. PyABV: a framework for enhancing PyRTL with assertion-based verification[J]. Frontiers of Computer Science, 2025, 19(7): 197204. DOI: 10.1007/s11704-024-40127-0

[6] Guo X, Dutta R G, Jin Y. Hierarchy-Preserving Formal Verification Methods for Pre-Silicon Security Assurance[C]//2015 16th International Workshop on Microprocessor and SOC Test and Verification (MTV). IEEE, 2015: 48-53. DOI: 10.1109/mtv.2015.12

[7] Canella C, Van Bulck J, Schwarz M, et al. A Systematic Evaluation of Transient
Execution Attacks and Defenses[C]//USENIX Security Symposium. 2019: 249-266.

[8] National University of Defense Technology. New assertion-based verification in python hardware flow[EB/OL]. EurekAlert!, 2025-07-22. https://www.eurekalert.org/news-releases/1092141

[9] Dipu N F, Hossain M M, Azar K Z, et al. FormalFuzzer: Formal Verification Assisted Fuzz Testing for SoC Vulnerability Detection[C]//Proceedings of the 29th Asia and South Pacific Design Automation Conference (ASPDAC). ACM, 2024: 377-383.

[10] Keysight Technologies. Secure at First Silicon: Reducing Cost and Risk with Inspector Pre-Silicon[Z]. White Paper, 2024. https://www.keysight.com/us/en/assets/3124-1750/white-papers/Keysight-Inspector-Pre-Silicon-Side-Channel-Analysis.pdf

[11] Wachsmann C, et al. QED and Symbolic QED: Dramatic Improvements in Pre-Silicon
Verification and Post-Silicon Validation[M]. now publishers, 2024.