#后量子密码学 #签名方案 #签名 #后量子 #签名

pqc_dilithium_edit

修改版本。一种基于模块格上的难题硬度的后量子加密签名方案

1 个不稳定版本

0.2.0 2023年10月15日

#2167 in 加密学

Download history 5/week @ 2024-03-27 9/week @ 2024-04-03 2/week @ 2024-04-10 14/week @ 2024-04-17 2/week @ 2024-06-05 13/week @ 2024-06-12 22/week @ 2024-06-19 18/week @ 2024-06-26

每月 55 次下载

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 后量子标准化项目标准化的密钥封装机制的 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