#encryption-key #key-management #lz4 #security #aes #xchacha20 #env-var

secret-keeper

使用强加密和密钥管理进行信封加密

5 个版本

0.3.5 2020年7月11日
0.3.4 2020年7月8日
0.3.2 2020年7月1日
0.3.1 2020年6月30日
0.3.0 2020年6月30日

#2459 in 密码学

27 每月下载量
4 crates 中使用

Apache-2.0 OR MIT

110KB
2K SLoC

Secret-Keeper

使用强加密和密钥管理进行信封加密。SecretKeeper 使用密钥加密密钥 (KEK) 加密数据加密密钥 (DEK),返回一个 WrappedKey。这个crate(和子crate)实现了多个SecretKeeper,以及三种内容加密算法

  • XCha20Cha20-Poly1305 与 AEAD
  • AES-GCM(256位)
  • 以及一个结合LZ4与XCha20-Poly1305的压缩算法

此crate中的API旨在提供良好的安全实践,同时最大限度地减少无意中开发者错误的机会,这些错误可能会降低安全性。其中一个原则是加密密钥始终以加密形式存储。

一些SecretKeeper实现已经开发完成。如果您创建了一个新的,请发送链接给我,我会从这里链接到它。

  • Env 从环境变量中存储的密码短语生成密钥,使用PBKDF2+HMAC+SHA256+SALT。 EnvKeeper

  • Prompt 在终端中提示用户输入密码短语。KEK 使用PBKDF2+HMAC+SHA256+SALT从密码短语生成。需要 secret-keeper-prompt crate。 PromptKeeper

  • Hashivault 使用 Vault 的 Transit 引擎,HashivaultKeeper 可以使用多种加密算法创建密钥(密钥加密密钥),包括 aes-gcm-256ed25519 以及其他几种。Vault 使用 KEK 加密或解密 DEK,KEK 由 Vault 管理并存储在 Vault 上。 Hashivault

  • CloudKMS CloudKmsKeeper 使用 Google CloudKMS 服务的密钥。 CloudKms

  • 1Password(仅限linux/mac)。1Password 包含在示例目录中,以显示如何使用 EnvKeeper 和 shell 脚本与外部程序结合使用;不需要额外的 rust 代码。使用免费的 1password op cli 工具

实现说明

使用的加密算法由其他包实现,特别是纯Rust实现的 RustCrypto

LZ4压缩是由lz_fear实现的纯Rust实现。

此库的概念基于谷歌云密钥保管库

状态

这是一个新的crate,应被视为alpha质量。

计划添加更多SecretKeeper实现。如果您创建了任何实现,请告诉我,我会从这里链接到它。

核心secret-keeper库编译成wasm没有错误,但我还没有在浏览器中测试过。

依赖项

~9.5MB
~180K SLoC