dipanjanroy/SMT-Attack

GitHub: dipanjanroy/SMT-Attack

一个基于SMT求解器的硬件混淆密钥恢复框架,通过oracle引导的方式评估HLS阶段混淆设计的安全性。

Stars: 0 | Forks: 0

# SMT-Attack 一个基于可满足性模理论(SMT)的工具,通过恢复混淆密钥来评估在高级综合(HLS)阶段被混淆的硬件设计的安全性。 ## 仓库结构 ``` SMT Attack Code/ │── Obfuscated/ # Obfuscated Verilog designs _obfuscated_hls.v │── Oracle/ # Original (oracle) Verilog designs _hls.v │── Smt_Attack_Verilog.py # Main script for performing the SMT-based attack ``` ### Obfuscated/ 包含待分析的 HLS 混淆 Verilog 设计。 ### Oracle/ 包含在攻击过程中用作 oracle 的相应原始(未混淆)Verilog 设计。 ### Smt_Attack_Verilog.py 主要的 Python 脚本,通过生成 SMT 约束、查询 oracle 并恢复正确的混淆密钥,来执行基于 SMT 的密钥恢复攻击。 # 针对 High-Level-Synthesis 混淆的 SMT Attack 一个基于 SMT 的框架,用于通过密钥恢复分析在高级综合阶段应用的硬件混淆的安全性。给定一个锁定(混淆)的设计及其功能性 oracle,该框架能够恢复解锁该设计的密钥。它是 oracle 引导的,适用于在高级综合阶段混淆的任何设计,与具体的混淆技术无关。 ## 环境要求 - Python 3.8+ - [Z3](https://github.com/Z3Prover/z3):`pip install z3-solver` ## 用法 ``` python SMT_Attack_Verilog.py ``` 该脚本会列出 `Obfuscated Files/` 中的所有混淆设计,并询问要破解哪一个。然后,它会在 `Oracle/` 中查找匹配的 oracle(名称相同但去掉 `_obfuscated`,例如 `iirb_obfuscated_hls.v` → `iirb_hls.v`)。由于该攻击是 oracle 引导的,如果找不到 oracle,它将停止运行并输出提示信息。成功后,它会打印出恢复的密钥、使用的区分性输入数量以及运行时间。 可选的自检功能 —— 将恢复的密钥重新代入设计中,并在随机输入下根据 oracle 对其进行验证: ``` python SMT_Attack_Verilog.py --selfcheck ``` ## 工作原理 该攻击保留两个独立的符号化密钥副本,并搜索一个使它们产生分歧的输入(即区分性输入)。它向 oracle 查询该输入,并约束每一个候选密钥使其匹配。每一个这样的输入都会排除至少一个错误的密钥类别;当不再有区分性输入时,密钥即被唯一确定并输出。 ## 许可证 基于 MIT 许可证发布 —— 详见 [LICENSE](LICENSE)。 ## 免责声明 仅用于学术和研究目的:评估 HLS 阶段的硬件混淆安全性。
标签:SMT求解器, Z3, 密码分析, 形式化验证, 硬件安全, 逆向工具, 逻辑加密