1 个不稳定版本
0.2.0 | 2023年10月15日 |
---|
#2167 in 加密学
每月 55 次下载
115KB
3K SLoC
Dilithium
Dilithium 是 NIST 后量子标准化项目标准化的密钥封装机制的 Rust 实现。
请参阅特性部分,了解有关安全级别和操作模式的选项。默认安全设置是 Dilithium3。
建议在与传统的签名算法(如 ed25519)一起的混合系统中使用 Dilithium。
最低支持的 Rust 版本:1.50.0
安装
cargo add pqc_dilithium
用法
use pqc_dilithium::*;
密钥生成
let keys = Keypair::generate();
assert!(keys.public.len() == PUBLICKEYBYTES);
assert!(keys.expose_secret().len() == SECRETKEYBYTES);
签名
let msg = "Hello".as_bytes();
let sig = keys.sign(&msg);
assert!(sig.len() == SIGNBYTES);
验证
let sig_verify = verify(&sig, &msg, &keys.public);
assert!(sig_verify.is_ok());
AES 模式
Dilithium-AES,它使用 AES-256 计数器模式而不是 SHAKE 来扩展矩阵和掩码向量,以及采样秘密多项式。这在某些平台上提供了硬件加速。
随机签名
在某些情况下,可能会考虑使用随机签名,例如当 [SBB+18, PSS+18] 利用确定性的旁路攻击时。另一个可能想要避免确定性的情况是当签名者不希望泄露被签名的消息时。尽管没有秘密密钥的时间泄漏,但如果方案是确定的,则消息存在时间泄漏。由于方案的随机性来自消息,因此特定消息的终止次数始终相同。
特性
默认情况下,此库使用 Dilithium3
名称 | 描述 |
---|---|
mode2 | 使用 Dilithium2 |
mode5 | 使用 Dilithium5 |
aes | 使用 AES256-CTR 而不是 SHAKE |
random_signing | 启用消息的随机签名 |
wasm | 用于编译到 WASM 目标 |
测试
要运行已知答案测试,您需要在 dilithium_kat
中启用 RUSTFLAGS
,例如。
RUSTFLAGS="--cfg dilithium_kat" cargo test
要运行所有可能的特性,请使用 test_matrix.sh
脚本。
基准测试
此库使用 criterion 基准测试套件。要使用它,您必须启用 bench
,例如。
RUSTFLAGS="--cfg bench" cargo bench
WebAssembly
要自己编译wasm文件,您需要启用wasm
功能。
例如,使用wasm-pack
wasm-pack build -- --features wasm
它将wasm、javascript和typescript文件导出到./pkg/
。
要将不同的变体编译到单独的文件夹
wasm-pack build --out-dir pkg_mode5/ -- --features "wasm mode5"
在www
文件夹中也有一个基本的HTML演示。
从www文件夹运行
npm install
npm run start
替代方案
PQClean项目为他们基于模块格的C后量子库提供了Rust绑定。
https://github.com/rustpq/pqcrypto/tree/main/pqcrypto-dilithium
关于
Dilithium是一种基于模块格问题难度的数字签名方案,在选择的攻击下具有很强的安全性。安全性概念意味着一个可以访问签名预言机的对手无法生成他尚未看到的消息的签名,也不能生成已签名的不同消息的签名。Dilithium已被NIST后量子密码学项目标准化。
官方网站:https://pq-crystals.org/dilithium/
Dilithium算法的作者
- Roberto Avanzi, ARM Limited (DE)
- Joppe Bos, NXP Semiconductors (BE)
- Léo Ducas, CWI Amsterdam (NL)
- Eike Kiltz, Ruhr University Bochum (DE)
- Tancrède Lepoint, SRI International (US)
- Vadim Lyubashevsky, IBM Research Zurich (CH)
- John M. Schanck, University of Waterloo (CA)
- Peter Schwabe, Radboud University (NL)
- Gregor Seiler, IBM Research Zurich (CH)
- Damien Stehle, ENS Lyon (FR)
贡献
欢迎贡献。为了创建功能分支,通过提交PR,您同意代码在MIT/Apache 2.0双重许可下使用
依赖关系
~90–255KB