#内存保护 #内存 #保护 #加密密钥 #安全 #攻击

安全库

内存中存储的密钥包装器,旨在防止旁路和推测性攻击

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 加密学

Download history 330/week @ 2024-03-26 357/week @ 2024-04-02 170/week @ 2024-04-09 291/week @ 2024-04-16 160/week @ 2024-04-23 557/week @ 2024-04-30 198/week @ 2024-05-07 430/week @ 2024-05-14 272/week @ 2024-05-21 224/week @ 2024-05-28 160/week @ 2024-06-04 344/week @ 2024-06-11 609/week @ 2024-06-18 246/week @ 2024-06-25 237/week @ 2024-07-02 270/week @ 2024-07-09

每月 1,437 次下载
用于 gennaro-dkg

MIT/Apache

35KB
600

Soteria

Crate Docs Apache 2.0/MIT Licensed

该包实现了一个内存中存储的密钥包装器。

该库旨在简单易用(抗误用)且易于理解。

因此,只提供了一个结构体 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 许可证定义的,您提交给作品中的任何贡献,都应按上述方式双许可,而无需任何附加条款或条件。

依赖

~1.3–3.5MB
~69K SLoC