4个版本

0.2.1 2023年9月11日
0.2.0 2023年3月6日
0.1.1 2023年1月4日
0.1.0 2022年12月30日

844密码学

Download history 109/week @ 2024-03-13 133/week @ 2024-03-20 138/week @ 2024-03-27 137/week @ 2024-04-03 214/week @ 2024-04-10 106/week @ 2024-04-17 82/week @ 2024-04-24 200/week @ 2024-05-01 93/week @ 2024-05-08 275/week @ 2024-05-15 453/week @ 2024-05-22 102/week @ 2024-05-29 96/week @ 2024-06-05 211/week @ 2024-06-12 174/week @ 2024-06-19 77/week @ 2024-06-26

每月564次下载
2个crate中使用(通过mithril-common

Apache-2.0

56KB
996

密钥演变签名 CI工作流 crates.io License

kes-sumed-ed25519 是密钥演变签名的纯Rust实现,遵循Malkin、Micciancio和Miner发表的论文 "Composition and Efficiency Tradeoffs for Forward-Secure Digital Signatures",特别是第3.1节中的 "sum" 组合。作为一个深度零签名算法,我们使用Ed25519,并采用来自 ed25519_dalekstrict 验证标准,这与当前在 libsodium 中使用的相同。

该库定义了宏来生成不同深度的KES算法。我们目前公开了深度高达7的KES算法。但是,如果您需要更高深度的密钥,请随时提交issue/PR。

库使用

该库为[2,7]范围内的X暴露了 SumXKes。深度为X的KES算法可以演变密钥 2^X。当密钥演变时,旧种子会被零覆盖。

use kes_summed_ed25519::kes::Sum6Kes;
use kes_summed_ed25519::traits::{KesSig, KesSk};

fn main() {
    let (mut skey, pkey) = Sum6Kes::keygen(&mut [0u8; 32]);
    let dummy_message = b"tilin";
    let sigma = skey.sign(0, dummy_message);

    assert!(sigma.verify(0, &pkey, dummy_message).is_ok());

    // Key can be updated 63 times                         
    for i in 0..63 {
        assert!(skey.update(i).is_ok());
    }
}                                                          

与Cardano的兼容性

我们提供了两个KES实现,以与Cardano的区块链兼容。Cardano目前使用 Sum6Kes。然而,那个实现关于签名大小并不优化。相反,我们提供了 SumCompact6Kes 的实现,它将签名大小提供了渐近的减半。我们提供使用Cardano代码生成的测试向量,以确保库的未来更改不会失去与Cardano的兼容性。这些测试向量可以在 ./tests/data 中找到,测试可以在 ./tests/interoperability.rs 中找到。

注意:本库的秘密密钥与用于cardano节点的KES密钥不兼容。在这个库中,我们将KES秘密密钥的周期作为其结构的一部分,而cardano实现则没有这样做。这个决定基于以下两个原因

  • 它极大地简化了API,使其使用更加直观。此外,周期是签名/更新skey所必需的知识,我们得出结论,秘密密钥应该包含它的周期。
  • 秘密密钥不会通过网络发送,这意味着使用此实现的节点不需要与cardano节点的序列化兼容。然而,如果出于某种原因,需要将cardano节点序列化的密钥用于此应用程序(或反之亦然),只需将周期作为4个大端字节表示的32位数字添加即可(或反过来,从序列化的签名中移除最后4个字节)。此程序的示例可以在本库的互操作性测试中找到。

代码的先前版本

此仓库是对kes-mmm-sumed25519的复制和修改。旧仓库保持不变,以供历史参考。

免责声明

本库未经过审计。使用风险自负。

贡献

除非您明确声明,否则任何有意提交以供包含在您的工作中的贡献,如Apache-2.0许可证中定义的,均应按上述方式许可,不附加任何额外条款或条件。

依赖项

~1.9–2.8MB
~59K SLoC