#memory #private-key #security #constant-time #passwords #automatic #mlock

secstr

一种适合在内存中存储敏感信息(如密码和私钥)的数据类型,具有恒等时间比较、mlock和清零功能

9 个不稳定版本

0.5.1 2022 年 10 月 2 日
0.5.0 2022 年 3 月 13 日
0.4.0 2020 年 2 月 8 日
0.3.2 2019 年 5 月 23 日
0.1.0 2015 年 9 月 9 日

#775 in 密码学

Download history 5171/week @ 2024-03-15 4757/week @ 2024-03-22 4930/week @ 2024-03-29 5089/week @ 2024-04-05 4752/week @ 2024-04-12 4508/week @ 2024-04-19 4722/week @ 2024-04-26 6684/week @ 2024-05-03 5955/week @ 2024-05-10 5781/week @ 2024-05-17 4752/week @ 2024-05-24 6065/week @ 2024-05-31 5917/week @ 2024-06-07 4964/week @ 2024-06-14 5982/week @ 2024-06-21 3442/week @ 2024-06-28

21,363 每月下载量
40 个crate(21 个直接)中使用

Unlicense

47KB
959

crates.io API Docs Build Status unlicense

secstr

一个 Rust 库,实现了适合在内存中存储敏感信息(如密码和私钥)的数据类型(封装在 Vec<u8> 中的包装器)。受 Haskell securemem 和 .NET SecureString 启发。

特性

  • 恒等时间比较(不在第一个不同字符时短路;但如果有不同长度的字符串则立即终止)
  • 在析构函数中自动清零
  • 如果可能,提供 mlockmadvise 保护
  • 格式化为 ***SECRET*** 以防止泄露到日志中
  • (可选)通过 sodiumoxidelibsodium-sys 使用libsodium进行清零、比较和散列(std::hash::Hash
  • (可选)将序列化/反序列化到 Serde 支持的任何字节字符串
  • (可选)编译时检查公共 unsafe API 的 preconditions

用法

extern crate secstr;
use secstr::*;

let pw = SecStr::from("correct horse battery staple");

// Compared in constant time:
// (Obviously, you should store hashes in real apps, not plaintext passwords)
let are_pws_equal = pw == SecStr::from("correct horse battery staple".to_string()); // true

// Formatting, printing without leaking secrets into logs
let text_to_print = format!("{}", SecStr::from("hello")); // "***SECRET***"

// Clearing memory
// THIS IS DONE AUTOMATICALLY IN THE DESTRUCTOR
// (but you can force it)
let mut my_sec = SecStr::from("hello");
my_sec.zero_out();
// (It also sets the length to 0)
assert_eq!(my_sec.unsecure(), b"");

小心使用 SecStr::from:如果您有一个借用字符串,它将被复制。
如果有一个 Vec<u8>,请使用 SecStr::new

贡献

请随时提交拉取请求!

通过参与此项目,您同意遵守 贡献者行为准则 并在 Unlicense 下发布您的贡献。

贡献者名单可在 GitHub 上找到.

许可

这是一款免费且不受限制的软件,已发布到公共领域。
如需更多信息,请参阅 UNLICENSE 文件或访问 unlicense.org

依赖项

~0–4.5MB
~25K SLoC