#signature-scheme #signature #post-quantum #lms #crypto #ietf-rfc

no-std hbs-lms

Leighton Micali签名方案的纯Rust实现,支持密钥生成、签名生成和验证

3个版本

0.1.1 2023年5月17日
0.1.0 2022年1月4日
0.1.0-alpha.52021年12月4日
0.1.0-alpha.4 2021年11月25日
0.1.0-alpha.1 2021年10月15日

密码学类别中排名第1090

Apache-2.0

175KB
4K SLoC

包含 (ELF exe/lib, 82KB) tests/demo

Leighton-Micali基于散列的签名

crate Docs Apache2/MIT licensed Rust Version Build Status

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