aszepieniec/falcon-rust
GitHub: aszepieniec/falcon-rust
一个用 Rust 实现的后量子签名算法 Falcon,提供抗量子计算的签名与验证能力。
Stars: 27 | Forks: 7
# Falcon-Rust
Falcon 的非官方 Rust 实现。
Falcon 已提交至 [NIST PQC](https://csrc.nist.gov/projects/post-quantum-cryptography)
标准化项目,并已被 [选中](https://csrc.nist.gov/Projects/post-quantum-cryptography/selected-algorithms-2022)
用于标准化。最终标准尚未公布。我们预期标准与提交版本之间会有细微差异,这些差异可能会破坏兼容性。
Falcon 有两个变体。Falcon512 声称至少提供 108 位的安全性,
Falcon1024 声称至少提供 252 位的安全性,两者均针对量子计算机。
本实现遵循 [规范](https://falcon-sign.info/falcon.pdf)。它最初是根据官方的 [Python 实现](https://github.com/tprest/falcon.py) 编写,但此后已有所偏离。
## 示例
```
use rand::rng;
use falcon_rust::falcon512;
let mut rng = rng();
let mut msg : [u8; 5] = rng.random();
let (sk, pk) = falcon512::keygen(rng.random());
let sig = falcon512::sign(&msg, &sk);
assert!(falcon512::verify(&msg, &sig, &pk));
```
## 性能
如果你追求性能,你可能更适合使用发明者之一的实现,要么是使用优化 C 代码的外交函数接口(FFI)([`pqcrypto-falcon`](https://crates.io/crates/pqcrypto-falcon)),要么是优化的 Rust crate([`fn-dsa`](https://crates.io/crates/fn-dsa))。以下基准测试在我的 12 代英特尔酷睿 i9-12900K(支持 AVX2)上生成。你可以运行 `cargo bench` 来生成自己的测试结果。
| | 密钥生成 | 签名 | 验证 |
|----------------------|-----------------|-----------|-----------|
| falcon-rust 512 | 226.84 ms | 329.26 µs | 20.277 µs |
| falcon-rust 1024 | 1.3106 **s** | 665.00 µs | 41.933 µs |
| C FFI 512 | 4.0688 ms | 129.49 µs | 25.555 µs |
| C FFI 1024 | 12.048 ms | 255.59 µs | 50.142 µs |
| FN DSA 512 | 2.0587 ms | 143.86 µs | 10.486 µs |
| FN DSA 1024 | 9.0216 ms | 278.71 µs | 20.793 µs |
## 功能特性
- [x] 密钥生成
- [x] 签名生成
- [x] 签名验证
- [x] 去随机化算法
- [x] (去)序列化
- [ ] 更优算法(例如 RNS)
- [ ] 未压缩签名格式
- [ ] 签名消息接口
- [ ] 硬件优化
- [ ] 消息恢复模式
- [ ] 常时性(?)
## 待办事项
- [ ] NIST KATs
- [ ] 使 LdlTree 更直接明了
- [ ] 优化秘密密钥、签名和公钥的表示
- [ ] 与参考实现测试互操作性
- [ ] 负向测试
- [ ] 性能分析并修复瓶颈
- [ ] 域元素的 Montgomery 表示
- [ ] 大整数运算的剩余数系统(RNS)
- [ ] 流式(去)序列化
- [ ] 调查秘密依赖的时间可变性
## 贡献
欢迎贡献!如果被接受,贡献将采用相同的
许可证发布。
标签:CVE, Falcon, Falcon1024, Falcon512, NIST PQC, NIST 标准化, Post-Quantum Cryptography, Rust crypto, Rust 实现, Rust 密码库, 代码实现, 兼容性问题, 可视化界面, 后量子密码, 安全协议, 密码协议, 密码学, 密钥生成, 开源密码, 手动系统调用, 抗量子计算机, 数字签名, 签名算法, 签名验证, 通知系统, 量子安全, 高性能密码