3 个不稳定版本
0.2.0 | 2021 年 4 月 15 日 |
---|---|
0.1.1 | 2020 年 6 月 22 日 |
0.1.0 | 2020 年 6 月 21 日 |
1842 在 密码学
120KB
2K SLoC
🇨🇭 Helvetia
一个库和 API 服务器,允许匿名存储秘密,遵循简单规则;任何用户都可以使用令牌创建秘密,并且只能使用相同的令牌来访问它。Helvetia 将竭尽全力确保秘密的安全,甚至包括自身。
概述
Helvetia 可以用作独立的 API 服务器或作为库。在前一种情况下,您可以使用其 REST API 与之交互,而在后一种情况下,您可以通过其 vault
模块与之交互。
Helvetia 的工作方式非常简单。用户首先需要创建一个秘密,它由以下部分组成
- 名称
- 数据,包含用户想要存储的秘密
- [可选] 元数据,可以是与秘密相关的任何类型的数据,但可能不那么敏感。
- 令牌,可用于完全访问秘密。
- [可选] 元数据令牌,可用于仅检索元数据。
然后 Helvetia 将执行以下操作以确保秘密安全存储
- 哈希秘密的名称和令牌。
- 使用 Helvetia 的加密密钥和秘密的名称派生的单次使用密钥加密秘密。
- 将键值对存储到底层键值存储中。
Helvetia 尚未经过安全审计,并且尚未准备好在生产环境中使用。如果您有需要此类保证的使用案例,请优先考虑使用其他服务,如 Hashicorp 的 Vault。如果您喜欢以下功能并想尝试 Helvetia,我们非常欢迎
- 无账户;允许每个人仅使用令牌创建秘密。
- 可选地通过更有限的令牌提供对秘密元数据的访问。
- 使用名称哈希的静态加密。
- 无依赖的单个二进制文件,易于部署。
- 允许用户使用易于记忆的名称创建秘密。
- 弱完美前向安全性;如果加密密钥在秘密存储后遭到泄露,则只有攻击者猜出秘密的名称才能解密秘密。
- 每次访问秘密时都提供数据完整性保证,因为它必须先进行解密。
- 使用 Rust 编写,因此我们可以避免一类问题。
- 即使存储后端遭到破坏,也易于通过简单地删除加密密钥来加密存储的秘密。
- 支持易于扩展的加密算法列表(通过 Tindercrypt)和存储后端(通过 Caves)。
- 允许限制上传秘密的大小。
用法
为了运行 Helvetia API 服务器,您需要创建一个加密密钥并提供一个目录来存储加密的秘密。例如,您可以这样做:
$ mkdir ~/.helvetia
$ cd ~/.helvetia
$ head -c 32 /dev/urandom > key
$ helvetia -k key --store-dir data
默认情况下,Helvetia 将在 RocksDB 数据库中存储秘密,并使用 AES-256-GCM 进行加密。要查看其他可用选项,可以执行 helvetia --help
。
文档
您可以在 https://docs.rs/helvetia 中阅读最新文档。以下部分可能对您感兴趣:
安装
作为一个库
在将此存储库添加到您的 Cargo.toml
时,使用 default-= false
将其添加,以确保不会将 CLI 特定依赖项添加到您的依赖项树中
helvetia = { version = "x.y.z", default-features = false }
如果您想要 RocksDB 支持,可以使用以下命令启用它:
helvetia = { version = "x.y.z", default-features = false, features = ["with-rocksdb"] }
作为一个二进制文件
您可以使用 稳定发布版 之一或 夜间构建 来运行 Helvetia。或者,您可以使用以下方法之一安装它:
-
从 cargo
$ cargo install helvetia
-
从源代码
$ git clone https://github.com/apyrgio/helvetia $ cd helvetia $ cargo build --release $ ./target/release/helvetia --help Helvetia: Anonymous and secure storage of secrets...
如果您想要启用 RocksDB 支持,可以在上述命令中添加 --features with-rocksdb
标志。
贡献
您可以阅读 CONTRIBUTING.md
指南以获取有关如何为此项目做出贡献的更多信息。
法律
依赖项
~18–35MB
~654K SLoC