#secret #data-structures #values #encryption #secure #security #serde

secret-vault-value

库提供了一个简单的实现,用于存储和控制秘密/敏感值

16 个版本

0.3.9 2024年7月12日
0.3.8 2023年10月1日
0.3.7 2023年1月27日
0.3.6 2022年9月18日
0.1.1 2022年7月21日

#332加密

Download history 7516/week @ 2024-04-26 7024/week @ 2024-05-03 6469/week @ 2024-05-10 7429/week @ 2024-05-17 6761/week @ 2024-05-24 7098/week @ 2024-05-31 7794/week @ 2024-06-07 7551/week @ 2024-06-14 7485/week @ 2024-06-21 5447/week @ 2024-06-28 5894/week @ 2024-07-05 6578/week @ 2024-07-12 5675/week @ 2024-07-19 7589/week @ 2024-07-26 6803/week @ 2024-08-02 6348/week @ 2024-08-09

27,515 每月下载量
17 个crate(4 个直接) 中使用

Apache-2.0

29KB
556

Cargo tests and formatting security audit unsafe license

秘密值类型

任何类型秘密的安全和可序列化(serde 和 proto)类型的简单实现

  • 使用 zeroize 在内存销毁后自动清理其值;
  • 防止在日志和堆栈跟踪中泄露;
  • 存储为字节数组,适合二进制秘密;
  • 引入了额外的带有谓词的函数,以控制暴露的边界;暴露的秘密值和清理:exposed_in_*
  • 安全地将 hex/base64 格式编码/解码;

与类型一起工作

use secret_vault_value::*;

// Creating from string
let secret_value: SecretValue = "test".into();

// Creating from vec
let secret_value: SecretValue = vec![4,2].into();

// Creating from BytesMut
let secret_value: SecretValue = bytes::BytesMut::from("test").into();

// Reading as string
let secret_value: &str = secret_value4.as_sensitive_str();

// Reading as bytes
let secret_value: &[u8] = secret_value.as_sensitive_bytes();

// Reading as hex string
let secret_value: Zeroizing<String> = secret_value.as_sensitive_hex_str();

// Reading as base64 string
let secret_value: Zeroizing<String> = secret_value.as_sensitive_base64_str();

// Controlling the exposed value with closures/lambdas
let your_result = secret_value.exposed_in_as_zstr(|secret_value|{
    todo!()
});

// Controlling the exposed value with async closures/lambdas
let your_result = secret_value.exposed_in_as_zstr_async(|secret_value| async {
    todo!()
}).await;

// Deserialize embedded string value from JSON and expose it as zeroizable structure:
#[derive(Deserialize, Zeroize)]
struct YourType {
    _some_field: String
}

let your_result_json: YourType = secret_value.expose_json_value_as::<YourType>().unwrap();

快速入门

Cargo.toml

[dependencies]
secret-vault-type = { version = "0.3.<x>", features=["..."] }

请参阅以下关于版本的安全考虑。

秘密值类型可用的可选功能

  • serde 用于 serde 序列化支持
  • prost 用于 protobuf 序列化支持
  • bytes 用于字节转换支持
  • hex 用于 hex 转换支持
  • base64 用于 base64 转换支持

安全考虑和风险

OSS

开源代码是通过软件开发者的自愿协作创建的。原始作者许可代码,以便任何人都可以查看、修改并分发新版本。您应使用与您用于商业产品的相同程序和工具来管理所有 OSS。始终培训您的员工进行网络安全最佳实践,以帮助他们安全地使用和管理软件产品。您不应仅依赖个人,特别是像这种阅读敏感信息的项目。

版本管理

请勿使用宽泛的版本依赖管理,以避免在没有您审核更改的情况下自动包含新版本的依赖项。

归零、保护内存和加密不能提供 100% 的安全性

协议层上仍然有分配,内存中有可用的会话密钥,操作系统上的特权用户仍然有广泛访问权限等。因此,不要认为这是一个针对所有可能攻击的完全安全解决方案。没有在硬件/操作系统级别实现额外支持(例如,Intel SGX 项目),就无法缓解一些攻击。

许可证

Apache 软件许可证 (ASL)

作者

Abdulla Abdurakhmanov

依赖

~0.3–1.1MB
~24K SLoC