nixprotocol/pqe-hawk
GitHub: nixprotocol/pqe-hawk
一个纯 Rust 的后量子签名方案,提供与 C 参考实现的字节级等价验证,聚焦 NIST Level I 的 HAWK-512。
Stars: 0 | Forks: 0
# pqe-hawk
纯 Rust 端口实现 [HAWK](https://hawk-sign.info/) 后量子签名方案,采用 HAWK-512 参数集(NIST Level I)。
## 状态
**测试网可用,尚未审计。** 该 crate 是上游参考 C 实现(github.com/hawk-sign/dev@1b9fef5,MIT 许可)的忠实 Rust 端口。完整的密钥生成、签名与验证流程已通过 FFI 交叉验证,与 C 参考实现逐字节比对。
- **51 个 FFI 交叉验证属性测试**(每个用例 256 组)验证与 C 在原始层面的等价性:模运算、NTT、大整数运算、固定点 FFT、高斯采样器、NTRU 求解器、密钥生成、签名、验证。
- **自一致性属性测试**验证密钥生成的确定性、密钥/签名序列化往返以及签名/验证往返。
- **NIST KAT 固定点**对照提交的 `PQCsignKAT_HAWK-512.rsp`:用例 0 的公钥(1024 字节)和私钥(184 字节)逐字节匹配。
- **密钥零化**通过 `zeroize::ZeroizeOnDrop` 实现;公钥常量时间相等性通过 `subtle::ConstantTimeEq` 保证。
- **模糊测试目标**(`cargo-fuzz`):解码与验证流程对任意输入永不 panic。稳定的 Rust 属性测试与恶意输入测试(破坏合法公钥/签名编码的尾部填充区域)与其相互印证。
- **时序冒烟测试**断言两个密钥的 `sign` 执行时间保持在 20% 以内。
**尚未审计。** 请勿用于保护真实资金、生产身份认证或任何一旦泄露会造成实质后果的场景。完整的安全立场请参见 SECURITY.md。
## 用法
```
use pqe_hawk::HawkKeypair;
use rand::rngs::OsRng;
let kp = HawkKeypair::generate(&mut OsRng);
let msg = b"hello world";
let sig = kp.secret.sign(msg, &mut OsRng).unwrap();
assert!(kp.public.verify(msg, &sig).is_ok());
```
## 参数集
仅支持 HAWK-512(NIST Level I):
| 参数 | 值 |
|--------------------|---------|
| 环维度 `n` | 512 |
| 模数 `q` | 18433 |
| 公钥大小 | 1024 字节 |
| 私钥大小 | 184 字节 |
| 签名大小 | 555 字节 |
| 盐大小 | 24 字节 |
目前未实现 HAWK-256 和 HAWK-1024。
## 功能标志
- `default`:纯 Rust 实现,构建时无需依赖 C。
- `cross-check-reference-c`:构建并引入 vendored C 参考实现以启用 FFI 字节差分测试。构建时需要 C 工具链(cc)。开发专用。
## 确定性签名
除了 `sign(msg, rng)` 之外,该 crate 还提供了 `sign_deterministic(msg, nonce_seed)` 用于崩溃恢复场景:
```
let sig = kp.secret.sign_deterministic(b"hello", &[42u8; 32]).unwrap();
// Same inputs always produce the same signature bytes.
```
“随机性”来源于对 `sk_bytes || nonce_seed || msg` 的 SHAKE-256 哈希。
## 运行测试
```
# Self-consistency tests (no C toolchain required)
cargo test
# Full FFI cross-check against reference C (requires cc)
cargo test --features cross-check-reference-c
# Slow / expensive proptests (keygen-heavy fuzz cases, padding corruption,
# statistical timing smoke)
cargo test --features slow-tests
```
## 许可证
采用 Apache-2.0 或 MIT 双重许可。详见仓库根目录下的 LICENSE-APACHE 与 LICENSE-MIT。
`c-reference/hawk-512/` 中的嵌入式 C 参考实现采用 MIT 许可(源自 github.com/hawk-sign/dev@1b9fef5)。
标签:cross-language, C语言端口, FFI交叉验证, HAWK, KAT测试向量, NIST Level I, NTRU求解器, NTT, Rust密码库, 内存安全, 可视化界面, 后量子密码, 固定点FFT, 大整数运算, 字节精确, 安全密钥销毁, 定时抗性, 密钥生成, 常数时间, 序列化往返, 抗量子签名, 未审计, 模块化算术, 测试网就绪, 确定性密钥, 签名算法, 签名验证, 纯Rust实现, 通知系统, 零化, 零知识签名, 高斯采样器