3个版本
0.1.1 | 2023年5月17日 |
---|---|
0.1.0 | 2022年1月4日 |
0.1.0-alpha.5 | 2021年12月4日 |
0.1.0-alpha.4 |
|
0.1.0-alpha.1 |
|
在密码学类别中排名第1090
175KB
4K SLoC
包含 (ELF exe/lib, 82KB) tests/demo
Leighton-Micali基于散列的签名
Rust中根据IETF RFC 8554实现的LMS。此实现与此处找到的参考实现二进制兼容:hash-sigs。
此crate不需要标准库(即no_std支持),可以很容易地用于裸机编程。
演示
演示应用程序位于examples
文件夹中,以演示库的使用。此演示应用程序可以在控制台中使用,如下所示
# Key generation
# Generates `mykey.priv`, `mykey.pub` with merkle tree height 10 and winternitz parameter 2
cargo run --release --example lms-demo -- genkey mykey 10/2 --seed 0123456701234567012345670123456701234567012345670123456701234567
# Signing
# Generates `message.txt.sig`
cargo run --release --example lms-demo -- sign mykey message.txt
# Signing (fast_verification)
# Generates `message.txt_mut`, `message.txt_mut.sig`
HBS_LMS_MAX_HASH_OPTIMIZATIONS=1000 HBS_LMS_THREADS=2 cargo run --release --example lms-demo \
--features fast_verify -- sign_mut mykey message.txt
# Verification
# Verifies `message.txt` with `message.txt.sig` against `mykey.pub`
cargo run --release --example lms-demo -- verify mykey message.txt
关于IETF RFC的命名约定
RFC中的命名是通过使用单个字符完成的。为了更好地理解实现,我们决定使用更具描述性的名称。以下表格显示了RFC与库命名之间的映射,包括简短说明。
RFC命名 | 库命名 | 含义 |
---|---|---|
I | lms_tree_identifier | 用于标识单个LMS树的16字节随机值 |
q | lms_leaf_identifier | 用于标识单个LMS树中所有叶子的4字节值 |
C | signature_randomizer | 添加到每个签名的32字节随机值 |
Q | message_hash | I、q、D_MESG和C一起输出的散列消息输出 |
y | signature_data | 签名的实际数据 |
p | hash_chain_count | 对于特定W参数的哈希链数量 |
ls | checksum_left_shift | 校验和被移入系数值中的位数 |
n | hash_function_output_size | lm_ots哈希函数生成的字节数 |
m | hash_function_output_size | lms哈希函数生成的字节数 |
最小支持的Rust版本
此存储库中的crate支持Rust 1.57或更高版本。
最小支持的Rust版本未来可能会更改,但将通过增加小版本号来完成。
许可
本作品根据Apache-2.0许可证的条款授权(见许可证文件)。
贡献
根据Apache-2.0许可证定义,您有意提交给作品中的任何贡献,应按照上述方式授权,不附加任何额外条款或条件。
依赖项
~1.8–2.5MB
~41K SLoC