2个版本
0.3.4 | 2020年7月8日 |
---|---|
0.3.0 | 2020年6月30日 |
#43 in #密钥管理
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-prompt
crate。 PromptKeeper -
Hashivault 使用Vault的Transit引擎,HashivaultKeeper可以创建使用多种加密算法的密钥(密钥加密密钥),包括
aes-gcm-256
、ed25519
等。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