3个不稳定版本
0.2.0 | 2023年8月31日 |
---|---|
0.1.1 | 2023年2月1日 |
0.1.0 | 2023年2月1日 |
#1917 in 加密学
115KB
3K SLoC
Dilithium
Dilithium是一个基于NIST后量子标准化项目的KEM标准的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是一种数字签名方案,它在基于模格子问题难度的选择消息攻击下具有很强的安全性。安全概念意味着一个可以访问签名或acles的对手不能生成他尚未看到的消息的签名,也不能生成已签名的不同消息的签名。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下双许可。
依赖项
~295–770KB
~13K SLoC