#derivation #blake2b

no-std secret-tree

使用 Blake2b 的层次化密钥派生

8 个版本 (4 个重大更改)

0.5.0 2022年7月21日
0.4.1 2021年12月29日
0.4.0 2021年5月3日
0.3.0 2020年11月30日
0.1.1 2018年12月24日

#624 in 加密学

Download history 52/week @ 2024-03-14 60/week @ 2024-03-21 84/week @ 2024-03-28 42/week @ 2024-04-04 47/week @ 2024-04-11 44/week @ 2024-04-18 42/week @ 2024-04-25 45/week @ 2024-05-02 45/week @ 2024-05-09 43/week @ 2024-05-16 48/week @ 2024-05-23 54/week @ 2024-05-30 32/week @ 2024-06-06 33/week @ 2024-06-13 46/week @ 2024-06-20 17/week @ 2024-06-27

每月 135 次下载
13 个 crate 中使用 (通过 exonum-keys)

Apache-2.0

43KB
633

使用 Blake2b 的层次化密钥派生

Build Status License: Apache-2.0 rust 1.57+ required no_std supported

文档: Docs.rs crate docs (master)

secret-tree 允许以安全且向前兼容的方式从单个种子值派生出多个密钥。派生过程是层次化的:可以使用种子派生子种子,子种子与原始种子具有相同的功能。

特性

  • 紧凑:无论派生密钥的数量和大小如何,种子都占用 32 字节。
  • 向前兼容:可以在不重新生成种子或污染代码库的情况下添加新密钥或删除现有密钥。
  • 灵活:该 crate 提供了 API,可以派生出几乎无界的密钥数量(通过索引)以及具有复杂内部结构的密钥(得益于可以从种子派生的加密安全的伪随机数生成器)。

使用方法

将以下内容添加到您的 Crate.toml

[dependencies]
secret-tree = "0.5.0"

基本用法

use secret_tree::{SecretTree, Name};
use rand::{Rng, thread_rng};
use secrecy::Secret;

let tree = SecretTree::new(&mut thread_rng());
// Create 2 children from the tree: an ordinary secret
// and a CSPRNG with a fixed seed.
let secret: Secret<[u8; 32]> = tree
    .child(Name::new("secret"))
    .create_secret();
let other_secret_rng = tree
    .child(Name::new("other_secret"))
    .rng();

有关如何使用 crate 的更多详细信息,请参阅 crate 文档。

实现

使用 Blake2b 以与在 libsodium 中用于密钥派生类似(和大多数兼容)的方式派生密钥。派生的 CSPRNG 基于加密的 ChaCha 密文,ChaCha 密文已被广泛研究,并且状态大小比替代方案小得多(~160 字节与几个千字节相比),从而限制了状态泄露的风险。

Crate 文档提供了更多实现细节。

许可证

根据 Apache-2.0 许可证 许可。

依赖关系

~1MB
~19K SLoC