Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
quantum-zk-proof-poc — 针对破解Google的ZK量子密码分析证明的概念验证代码 | Kitploit
工具/GitHubGitHub/trailofbits/quantum-zk-proof-poc
漏洞分析漏洞利用逆向工程密码学论文与研究学习与教育
GitHubtrailofbits/quantum-zk-proof-poc

quantum-zk-proof-poc

针对破解Google的ZK量子密码分析证明的概念验证代码

查看仓库
154个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

破解Google量子密码分析零知识证明的概念验证

本仓库包含了Trail of Bits博客文章的资源,该文章详细介绍了我们如何破解Google声称拥有用于椭圆曲线密码分析的高效量子电路的零知识证明。它包含我们的伪造证明、验证说明以及生成量子电路的代码,该代码利用了未修补的zkVM模拟器代码中的漏洞。

完整的证明二进制文件位于此处,以下是Google的证明与我们的证明的结果对比。

资源类型Google低门数Google低量子比特我们的证明
总操作数17,000,00017,000,0008,300,000
量子比特数量1,4251,1751,164
Toffoli门计数2,100,0002,700,0000

证明摘要如下。

电路SHA-256哈希: 0x7efe1f62bb14a978322ab9ed41d670fc0fe0f211331032615c910df5a540e999

Groth16证明字节: 0x0e78f4db0000000000000000000000000000000000000000000000000000000000000000008cd56e10c2fe24795cff1e1d1f40d3a324528d315674da45d26afb376e8670000000000000000000000000000000000000000000000000000000000000000024ac7f8dd6b1de6279bcce54e8840d8eb20d522bf27dedd776046f6590f33add217db465201c63724e6b460641985543d2b79c3c54daeea688581676a786aafc1dba8604a361acdd9809e268b6d8bc73943a713bb0ed0d96221f73d26def6ea4041d05b077523d9351a48b2ecd984c686b6473df69d20a24296d0a1cba3cdbe92eb13a7cc0ecd92f27f7bf23f9ac859d4293e17216dcbd85d1c7f60a52f65a9d02faef077336acd39e845d534200b575b029d6e3f0afb4f90815557233eab70b0fe88919834dd9beb90d47241f1490dc202e0dce44e4894982b07073c8d4426513732d79e9af9913b254aa29471e1a98fa1b43a1886afb5dbd36988153217aa2

验证密钥: 0x00ca4af6cb15dbd83ec3eaab3a0664023828d90a98e650d2d340712f5f3eb0d4

验证步骤

Google在一个Zenodo数据集中提供了用于验证其ZK证明的脚本。我们的攻击针对的是版本1,而版本2包含了补丁。安装依赖的说明位于docs/getting_started.md中。环境需要Rust、Go,以及可选的Docker。验证命令在run_proofs.sh的末尾提供。Google的证明工件位于proofs/目录下,我们的证明工件位于proof_trailofbits.bin。

root@kitploit:~
# 验证Google的证明
cargo run --release -p verifier -- \
    --vkey proofs/vkey.bin --proof proofs/low_toffoli/proof_9024.bin
cargo run --release -p verifier -- \
    --vkey proofs/vkey.bin --proof proofs/low_qubits/proof_9024.bin
# 验证我们的证明
cargo run --release -p verifier -- \
    --vkey proofs/vkey.bin --proof proof_trailofbits.bin

最后一个命令的输出包含以下内容。

root@kitploit:~
Successfully verified Groth16 SNARK proof.
Circuit hash commitment: 0x7efe1f62bb14a978322ab9ed41d670fc0fe0f211331032615c910df5a540e999
Demanded Number of tests: 9024
Demanded Qubit count: 1164
Demanded Average non-Clifford count: 0
Demanded Total ops: 8300000

验证命令将ZK证明与验证密钥进行比对,验证密钥是zkVM客户程序的简洁密码学表示。或者,你可以使用--elf proofs/zkp_ecc-program向验证器提供客户程序的ELF二进制文件。如果你完全省略此标志,验证器会使用Docker容器从program/中的源代码重建客户程序二进制文件。

利用步骤

运行gen_secp256k1_tob.py会生成一个142MB的kickmix脚本,名为ec_secp256k1_add_into.kmx。为了实现0-Toffoli证明,使用prove.rs.diff来修补Zenodo仓库中的prover/prove.rs。这会修改在zkVM外部运行的非信任代码,以操控kickmix电路的序列化。

证明生成说明位于Zenodo仓库中。我们按照docs/sp1_cluster_deployment_guide.md中的说明,在一台拥有4块NVIDIA H100 GPU的云机器上运行了以下命令来生成证明。

root@kitploit:~
./run_proofs.sh --num-tests 9024 --kmx "ec_secp256k1_add_into.kmx" --qubit-counts 1164 --toffoli-counts 0 --total-ops 8300000 --proving-mode "multi-gpu" > proofs/ec_secp256k1_add/log_run.out 2>&1 &

伪造的证明大约用了4小时生成。

下载工具