1 个不稳定版本

0.2.0 2020年10月10日

#2596 in 密码学

AGPL-3.0-or-later

25KB
487

Continuous integration

Svanill (cli)

一个用于加密/解密敏感数据的命令行工具。

生成的数据具有与 Svanill (web) 相同的格式,因此您可以将数据从一个工具传递到另一个工具。

要同步加密数据与外部服务器,可以使用 svanill-vault-cli

如何运行

# encrypt (you will be prompted for the password)
svanill -i INPUT_FILE -o OUTPUT_FILE enc

# decrypt (you will be prompted for the password)
svanill -i INPUT_FILE -o OUTPUT_FILE dec

# you can omit input/output file, and use stdin/stdout instead

如果您想解密/在编辑器中打开/加密,有一个利用 svanill-cli 的工具,svanill-edit

svanill-edit FILENAME

请注意,为了在您选择的编辑器中显示明文,svanill-edit 将保留一个临时文件,该文件在进程终止时被删除。

如何运行测试

cargo test

目标

  • 有管理密钥的手段
  • 必须是开源的
  • 它必须是一个独立程序
  • 它必须是可移植的(Linux、Windows(至少WSL)、macOS、...)
  • 它必须在沙盒环境中工作 - 无网络、无文件系统、无ipc...
  • 源代码必须易于审计
  • 任何可选的出站网络请求都必须在客户端加密数据

非目标

  • 编写尽可能小的文件,牺牲文档或可读性
  • 提供一次性上传到多个外部服务的功能

用例

  • 您也在使用 Svanill (web),并希望通过命令行访问您的密钥
  • 您想要轻松编辑包含密钥的文件
  • 您想要私下分享某些内容,通过不同的渠道传递密码

加密

内容通过对称加密算法(AES-GCM)进行保护。

原语来自 ring

密钥使用 PBKDF2-HMAC-SHA-256,100,000 次迭代(默认)生成。

iv/nonce 的大小为 96 位,在加密之前随机生成。

盐的长度为 128 位,在加密之前随机生成。

随机数据来自 ring::rand::SystemRandom(其 PRNG 适合加密目的)。

除了密钥之外的所有内容都附加到密文的开头,因此是公开的。

数据在静止状态时必须安全,因此密钥的强度最为重要。您应该使用您有信心记住的最长的口令短语(假设仅使用英语字母和数字,其长度至少应为14个字符 - 约为72位的熵)。

您可以在Svanill (web) 文档中获取有关生成的输出的信息。

为了防止有目的地制造高迭代次数,这可能导致CPU过载,Svanill将不会尝试解密,如果这个数字高于我们用来加密的数字。

解密过程中没有任何内容被重新用于未来的加密,以防止降级攻击或明显的妥协(如重新使用iv)。

为什么不...

大多数选择取决于Svanill (web) 文档中的约束条件。

许可证

Svanill,一个易于审计的加密/解密敏感数据的工具。版权(C)2017 Riccardo Attilio Galli

本程序是自由软件:您可以在自由软件基金会发布的GNU Affero通用公共许可证的条款和条件下重新分发和/或修改它,许可证版本为3,或者(根据您的选择)许可证的任何后续版本。

本程序的分发是希望它将是有用的,但没有任何保证;甚至没有关于其可销售性或适用于特定目的的暗示保证。有关详细信息,请参阅GNU Affero通用公共许可证。

您应该已经随本程序收到了GNU Affero通用公共许可证的一个副本。如果没有,请参见http://www.gnu.org/licenses/

依赖关系

~11MB
~287K SLoC