3个版本

0.1.2 2024年1月31日
0.1.1 2024年1月21日
0.1.0 2023年12月31日

#1708 in 密码学

MIT许可证

465KB
10K SLoC

飞鹰-Rust

飞鹰后量子数字签名方案的非官方Rust实现。

飞鹰已提交给NIST PQC标准化项目,并被选中进行标准化。最终标准尚未公布。我们预计标准与提交之间可能存在细微差异,这些差异可能会导致兼容性问题。

飞鹰有两种变体。Falcon512声称至少提供108位的安全性,而Falcon1024声称至少提供252位的安全性,都是针对量子计算机的。

此实现遵循规范。最初是根据官方的Python实现编写的,但后来有所偏离。

示例

let mut rng = thread_rng();
let mut msg : [u8; 5] = rng.gen();
let (sk, pk) = falcon512::keygen(rng.gen());
let sig = falcon512::sign(&msg, &sk);
assert!(falcon512::verify(&msg, &sig, &pk));

性能

性能仍然低于通过rust的外部函数接口 "pqcrypto-falcon"可访问的优化C代码。这些测量是在我的Intel(R) Core(TM) i7-10750H CPU @ 2.60GHz(支持AVX2)上进行的。你可以通过运行cargo bench来自定义。

密钥生成 签名 验证
falcon-rust 512 419.18 ms 692.68 µs 41.668 µs
falcon-rust 1024 2.4038 s 1.3891 ms 86.385 µs
pqcrypto-falcon 512 7.5356 ms 253.44 µs 48.065 µs
pqcrypto-falcon 1024 21.454 ms 510.43 µs 94.669 µs

特性

  • 密钥生成
  • 签名生成
  • 签名验证
  • 去随机化算法
  • 序列化和反序列化
  • 更好的算法(例如RNS)
  • 非压缩签名格式
  • 签名消息接口
  • 硬件优化
  • 消息恢复模式
  • 恒等时间(?)

待办事项

  • NIST KATs
  • 使LdlTree更直观
  • 优化密钥、签名、公钥的表示
  • 测试与参考实现的互操作性
  • 负面测试
  • 性能分析,并解决瓶颈
  • 字段元素的Montgomery表示
  • 大整数算术的余数数制(RNS)
  • 流式(反)序列化
  • 研究基于密钥的时间变化性

贡献

欢迎贡献!如果被接受,贡献将根据相同的许可证发布。

依赖关系

~5MB
~79K SLoC