3个版本
0.3.5 | 2020年7月11日 |
---|---|
0.3.4 | 2020年7月8日 |
0.3.0 | 2020年6月30日 |
#2390 in 加密学
在 2 个库中使用
7KB
80 行
Secret-Keeper
使用强加密和密钥管理进行信封加密。SecretKeeper使用密钥加密密钥(KEK)加密数据加密密钥(DEK),返回一个WrappedKey
。这个库(及其子库)实现了多个SecretKeeper,以及三个内容加密加密器
- XCha20Cha20-Poly1305与AEAD
- AES-GCM(256位)
- 以及一个结合LZ4和XChaCha20-Poly1305的压缩加密器
这个库中的API旨在提供良好的安全实践,同时最大限度地减少无意中导致安全降低的开发者错误的机会。一个这样的原则是,加密密钥总是以加密的形式存储。
一些SecretKeeper实现已经开发出来。如果你创建了一个新的,请发送链接给我,我会从这里链接到它。
-
Env 从环境变量中存储的口令短语生成密钥,使用PBKDF2+HMAC+SHA256+SALT。 EnvKeeper
-
Prompt 在终端提示用户输入口令短语。使用PBKDF2+HMAC+SHA256+SALT从口令短语生成KEK。需要
secret-keeper-prompt
库。 PromptKeeper -
Hashivault 使用Vault的Transit引擎,HashivaultKeeper可以创建使用各种加密算法的密钥(密钥加密密钥),包括
aes-gcm-256
,ed25519
和几个其他算法。使用Vault和由Vault管理的KEK加密或解密DEK。 Hashivault -
CloudKMS CloudKmsKeeper使用Google CloudKMS服务中的密钥。 CloudKms
-
1Password(仅限linux/mac)。1Password包含在示例目录中,以展示如何使用EnvKeeper和shell脚本与外部程序一起使用;不需要额外的rust代码。使用免费的1password
op cli tool
,
实现说明
使用的加密算法由其他包实现,特别是RustCrypto,一个纯Rust实现。
LZ4压缩是一个由lz_fear
实现的纯Rust版本。
在用文件读取填充未初始化的缓冲区之前,有一个'unsafe'的使用。如果禁用了fileio
特性(使用--no-default-features --features=slim编译),则secret-keeper crate不会直接使用unsafe代码。
这个库的概念基于谷歌云secret-keeper库。
状态
这是一个新的crate,应该被视为alpha质量。
计划有额外的SecretKeeper实现。如果您创建了任何,请让我知道,我会从这里链接到它。
核心secret-keeper库编译成wasm没有错误,但我还没有在浏览器中测试过。
构建和测试
这个crate包含核心库的子crate、可选的secret keeper实现和一个命令行加密程序(examples/encrypt-rs)。您可以使用cargo build
构建一切。
examples/encrypt-rs
文件夹包含一些shell脚本,用于测试各种secret keepers与encrypt
cli程序。可以使用cargo install encrypt-rs
独立安装二进制文件。
测试hashivault
要运行hashivault测试,您需要一个安装的hashiorp 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
cli命令所必需的。文件examples/hashivault/README.md
包含有关这些脚本的更多信息。
测试cloudkms
有关测试cloudkms keeper的说明,请参阅keepers/cloudkms/README.md。
依赖关系
~4MB
~57K SLoC