Add complete French (fr) and Chinese (zh) translations for all documentation: - Root files: README, CHANGELOG, SECURITY, BETA-RELEASE - docs/: All 16 core documentation files - DOCS/: All 19 deep-dive documents including embedded/ and archive/ - package/secubox/: All 123+ package READMEs - Misc: secubox-tools/, scripts/, EXAMPLES/, config-backups/, streamlit-apps/ Total: 346 translation files created Each file includes language switcher links for easy navigation between English, French, and Chinese versions. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
3.9 KiB
3.9 KiB
ZKP Hamiltonian
基于哈密顿回路问题(Blum 1986)的零知识证明(ZKP)库,通过 Fiat-Shamir 启发式实现 NIZK 转换。
CyberMind.FR / SecuBox — 版本 0.1.0
概述
该库实现了一个零知识证明(ZKP)协议,允许证明者向验证者证明其知道图中的哈密顿回路,而无需透露回路本身。
安全属性
- 完备性:诚实的证明者拥有 H 的知识时总能说服验证者
- 可靠性:欺骗者失败的概率 >= 1 - 2^(-128)
- 零知识性:验证者不会了解到关于 H 的任何信息
构建
前提条件
- CMake >= 3.16
- OpenSSL(用于 SHA3-256)
- C99 编译器
构建命令
mkdir build && cd build
cmake ..
make
# 运行测试
ctest --output-on-failure
# 或单独运行测试
./test_crypto
./test_graph
./test_protocol
./test_nizk
OpenWrt 构建
make package/zkp-hamiltonian/compile V=s
使用方法
CLI 工具
生成密钥对
zkp_keygen -n 50 -r 1.0 -o identity
# 创建:identity.graph(公开)、identity.key(保密!)
生成证明
zkp_prover -g identity.graph -k identity.key -o auth.proof
验证证明
zkp_verifier -g identity.graph -p auth.proof
# 退出码:0=接受,1=拒绝,2=错误
C API
#include "zkp_hamiltonian.h"
// 生成密钥对
Graph G;
HamiltonianCycle H;
zkp_generate_graph(50, 1.0, &G, &H);
// 证明者:生成证明
NIZKProof proof;
zkp_prove(&G, &H, &proof);
// 验证者:验证证明
ZKPResult result = zkp_verify(&G, &proof);
if (result == ZKP_ACCEPT) {
// 已认证!
}
协议概述
- 设置:证明者生成 (G, H),其中 H 是 G 中的哈密顿回路
- 证明生成:
- 生成随机排列 pi
- 计算 G' = pi(G)
- 使用 SHA3-256 对 G' 中的每条边进行承诺
- 通过 Fiat-Shamir 计算挑战:c = H(G, G', 承诺)
- 如果 c=0:揭示 pi 和所有 nonce(同构证明)
- 如果 c=1:揭示 pi(H) 和回路边的 nonce(哈密顿证明)
- 验证:
- 重新计算 Fiat-Shamir 挑战
- 验证响应是否匹配承诺
文件结构
zkp-hamiltonian/
├── include/
│ ├── zkp_types.h # 类型定义
│ ├── zkp_crypto.h # 密码学原语
│ ├── zkp_graph.h # 图操作
│ └── zkp_hamiltonian.h # 主 API
├── src/
│ ├── zkp_crypto.c # SHA3-256、承诺、RNG
│ ├── zkp_graph.c # 图操作
│ ├── zkp_prove.c # NIZK 证明生成
│ ├── zkp_verify.c # NIZK 证明验证
│ └── zkp_serialize.c # 二进制序列化
├── tests/
│ ├── test_crypto.c # 密码学原语测试
│ ├── test_graph.c # 图操作测试
│ ├── test_protocol.c # 协议完备性/可靠性
│ └── test_nizk.c # 完整 NIZK 测试 + 基准测试
├── tools/
│ ├── zkp_keygen.c # 密钥生成 CLI
│ ├── zkp_prover.c # 证明生成 CLI
│ └── zkp_verifier.c # 证明验证 CLI
├── CMakeLists.txt
└── README.md
配置
构建选项(CMake)
| 选项 | 默认值 | 描述 |
|---|---|---|
OPENWRT_BUILD |
OFF | 启用 OpenWrt 优化 |
BUILD_TESTS |
ON | 构建测试可执行文件 |
BUILD_TOOLS |
ON | 构建 CLI 工具 |
BUILD_SHARED_LIBS |
OFF | 构建共享库 |
ZKP_MAX_N |
128 | 最大图节点数 |
推荐参数
| 参数 | 推荐值 | 描述 |
|---|---|---|
| n(节点) | 50-80 | 图大小 |
| extra_ratio | 0.5-1.5 | 诱饵边比例 |
SecuBox 集成
详见 SECUBOX_INTEGRATION.md:
- 与
secubox-auth集成 - 网络协议(ZKP_HELLO、ZKP_PROOF 等)
- UCI 配置
- LuCI 仪表板
许可证
GPL-2.0-or-later
Copyright (C) 2026 CyberMind.FR / SecuBox