#加密密钥 #安全 #密钥管理 #加密

secret-keeper-prompt

Prompt SecretKeeper,为https://crates.io/crates/secret-keeper提供的信封加密插件

2个版本

0.3.4 2020年7月8日
0.3.0 2020年6月30日

#43 in #密钥管理


用于encrypt-rs

Apache-2.0 OR MIT

115KB
2K SLoC

Secret-Keeper

使用强加密和密钥管理的信封加密。SecretKeeper使用密钥加密密钥(KEK)加密数据加密密钥(DEK),返回一个WrappedKey。此crate(及其子crate)实现了多个SecretKeeper,以及三个内容加密加密器

  • XCha20Cha20-Poly1305与AEAD
  • AES-GCM(256位)
  • 以及一个结合LZ4和XChaCha20-Poly1305的压缩加密器

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

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

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

  • Prompt 在终端提示用户输入密码短语。KEK通过PBKDF2+HMAC+SHA256+SALT从密码短语生成。需要secret-keeper-promptcrate。 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工具

实现说明

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

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

存在一种使用'unsafe'为在填充文件读取之前分配未初始化缓冲区的情况。如果禁用了 fileio 功能(使用 --no-default-features --features=slim 编译),则 secret-keeper crate 不会直接使用 unsafe 代码。

这个库的概念基于 google cloud secret-keeper 库。

状态

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

计划实现更多的 SecretKeeper。如果您创建了任何,请告诉我,我将在这里链接到它。

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

构建和测试

这个 crate 包含核心库的子 crate、可选的 secret keeper 实现和一个命令行加密程序(examples/encrypt-rs)。您可以使用 cargo build 构建所有内容。

examples/encrypt-rs 文件夹包含一些用于测试使用各种 secret keepers 的 encrypt 命令行程序的 shell 脚本。可以使用 cargo install encrypt-rs 独立安装二进制文件。

测试 hashivault

要运行 hashivault 测试,您需要一个已安装的 hashivault vault 实例。

要在 docker 容器中设置和初始化 vault 实例以进行开发和测试,请运行以下三个命令

examples/hashivault/scripts/create-vault-docker.sh
examples/hashivault/scripts/make-app-token.sh
source examples/hashivault/secret.env

最后一个命令设置了 VAULT_TOKEN 环境变量,该变量是运行 hashivault keeper 测试和其他 vault 命令行程序所必需的。文件 examples/hashivault/README.md 包含有关这些脚本的更多信息。

测试 cloudkms

有关测试 cloudkms keeper 的说明,请参阅 keepers/cloudkms/README.md。

依赖关系

~9.5MB
~181K SLoC