#signature-scheme #post-quantum-cryptography #signature #post-quantum #signing

pqc_dilithium

基于模块格上的 lattice 问题难度的后量子加密签名方案

3个不稳定版本

0.2.0 2023年8月31日
0.1.1 2023年2月1日
0.1.0 2023年2月1日

#1917 in 加密学

MIT/Apache

115KB
3K SLoC

Rust 2.5K SLoC // 0.0% comments JavaScript 366 SLoC // 0.1% comments TypeScript 34 SLoC // 0.5% comments

Dilithium

Build Status Crates License License

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