5 个不稳定版本
0.3.1 | 2023 年 8 月 29 日 |
---|---|
0.3.0 | 2023 年 8 月 29 日 |
0.2.0 | 2023 年 8 月 28 日 |
0.1.1 | 2023 年 8 月 28 日 |
0.1.0 | 2023 年 8 月 28 日 |
#1835 in 加密学
每月 1,437 次下载
用于 gennaro-dkg
35KB
600 行
Soteria
该包实现了一个内存中存储的密钥包装器。
该库旨在简单易用(抗误用)且易于理解。
因此,只提供了一个结构体 Protected
。该结构体封装了密钥,使其在内存中加密,并且可以被放置它的相同应用程序解密。
Protected
允许程序在内存中存储加密密钥。密钥使用 XChaCha20Poly1305 加密。加密密钥足够大,可以减轻 Spectre、Meltdown、Rowhammer 和 RamBleed 等内存旁路攻击。
有一个预密钥和一个nonce,每个都足够大,以限制这些攻击。预密钥和nonce 被送入merlin 转录以与其他数据混合并派生实际的加密密钥。该值在丢弃或解密时从内存中擦除。
文档
可以使用 Protected
结构体创建密钥
use soteria_rs::*;
let mut protected = Protected::new(b"top secret");
assert_ne!(p.value, password);
assert_eq!(p.value.len(), password.len() + 16);
assert_ne!(p.pre_key, [0u8; DEFAULT_BUF_SIZE]);
assert_ne!(p.nonce, [0u8; DEFAULT_BUF_SIZE]);
let password2 = p.unprotect();
assert!(password2.is_some());
assert_eq!(password2.unwrap().as_ref(), password.as_slice());
let str_pass = password2.str();
assert_eq!("top secret", str_pass);
Protected
提供了方便的方法来封装来自字符串、字节切片和可序列化类型的各种类型的密钥。
使用 serde
功能来启用对受保护类型的序列化和反序列化。
许可
根据您的选择,许可如下
- Apache 许可证版本 2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
贡献
除非您明确声明,否则根据 Apache-2.0 许可证定义的,您提交给作品中的任何贡献,都应按上述方式双许可,而无需任何附加条款或条件。
依赖
~1.3–3.5MB
~69K SLoC