#密码 #安全 #密码生成器 #生成密钥 #用户密钥 #密码学 #字符集

app cellar

一个密码工具,用户可以基于密钥短语,确定性生成大量应用程序密码。具有强密码学。

8 个版本 (4 个重大更新)

0.5.1 2023年1月11日
0.5.0 2022年12月14日
0.4.1 2022年12月4日
0.4.0 2022年11月30日
0.1.0 2019年12月23日

#2093 in 命令行工具

每月 27 次下载

MIT 许可证

40KB
551 行代码

Cellar

Build Action Release Action Docs crates.io

Cellar 是一个简单的密码生成/检索工具,灵感来源于 安全值恢复技术预览。主要算法(略作调整)

salt            = Secure-Random(output_length=32)
stretched_key   = Argon2(passphrase=user_passphrase, salt=salt)

auth_key        = HMAC-BLAKE2s(key=stretched_key, "Auth Key")
c1              = HMAC-BLAKE2s(key=stretched_key, "Master Key")
c2              = Secure-Random(output_length=32)
encrypted_c2    = ChaCha20(c2, key=auth_key, nonce=salt[0..CHACHA20_NONCE_LENGTH])

master_key      = HMAC-BLAKE2s(key=c1, c2)
application_key = HMAC-BLAKE2s(key=master_key, "app info, e.g. [email protected]")

地下室的主要目的是允许人们只记住一个密码,并通过使用上述算法,可以创建大量具有强密码学的应用程序密码。用户只需在本地磁盘和云端存储随机生成的盐和加密的_c2,当需要生成或检索应用程序密码时,可以使用密钥短语,加上盐和加密的_c2 来恢复主密钥,然后派生应用程序密码。只要用户将密钥短语保密在心中,所有应用程序密码都是安全的。即使盐和加密的_c2 泄露,黑客仍然需要暴力破解主密钥。

使用 Cellar,您无需信任云服务提供商来存储您的密码,也无需麻烦地记住不同站点/应用程序的大量密码。

目前 Cellar 是一个最小化可行产品。一些未来功能

  • 支持分层密钥
  • 为了安全起见,对密钥进行零化
  • 根据一组规则(最小值/最大值/字符集)生成密码
  • 在加密文件中记录 app_info 和使用的规则
  • 提供 WebUI 以便于使用

用法

cellar init

初始化地下室(默认:$HOME/.cellar/default.toml

$ cellar init
Creating cellar "$HOME/.cellar/default.toml"
Password: [hidden]
Your cellar "$HOME/.cellar/default.toml" is created! Feel free to use `cellar generate` to create or display your application password.

初始化后,将生成一个 ~/.cellar/default.toml 文件。此文件存储随机盐和加密的随机种子,如下所示

$ cat ~/.cellar/default.toml
salt = "C6TQW8joYp2XoIkvaCNfo0ihJ3OacxlTbx68_oW8pF4"
encrypted_seed = "bHn5Lu3yX0g68rRJ4lTOwAvx_uMDFaBnZ_WMkJSU8TM"

请注意,即使您使用相同的密码重新生成地下室,也会得到非常不同的主密钥和派生的应用程序密钥。因此,请确保将此文件备份到您的私人云中。

cellar generate

生成应用程序密码

$ cellar generate --app-info "[email protected]"
Password: [hidden]
Password for [email protected]: FLugCDPDQ5NP_Nb0whUMwY2YD3wMWqoGcoywqqZ_JSU

生成分层密钥

# generate parent key
$ cellar generate -i "apps"
Password: [hidden]
Key for apps: 6CAakhEv_L2purgTfUasrvA9qgRZrQGdETDohSbBvNI

# generate app key by using parent key
$ cellar generate -i "my/awesome/app" --use-parent-key
Parent Key: [hidden]
Key for my/awesome/app: ZFqgQZK4Sx4GgwLn9D-qmhYE5gw0QbUSl4I8HaTseZs

# it would be the same as generate the whole hierarchical key with master password
$ cellar generate -i "apps/my/awesome/app"
Password: [hidden]
Key for apps/my/awesome/app: ZFqgQZK4Sx4GgwLn9D-qmhYE5gw0QbUSl4I8HaTseZs

基准测试

如果您要为酒窖运行基准测试,请使用 make bench_cellar。Argon2会故意使拉伸密钥的生成变慢,默认样本大小会使基准测试变得非常慢。在我的2017年mbp上,应用密码生成大约需要18ms。

$ make bench_cellar
cargo bench --bench bench_cellar --  --sample-size 10
   Compiling cellar-core v0.1.0 (/Users/tchen/projects/mycode/cellar/cellar-core)
    Finished bench [optimized] target(s) in 3.92s
     Running /Users/tchen/.target/release/deps/bench_cellar-f87c142f98bb458c
app key                 time:   [17.812 ms 17.970 ms 18.161 ms]
                        change: [-1.8875% -0.3966% +1.2260%] (p = 0.65 > 0.05)
                        No change in performance detected.

依赖项

~16–27MB
~485K SLoC