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 次下载
40KB
551 行代码
Cellar
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