11 个不稳定版本 (4 个破坏性更新)
0.5.1 | 2024年4月29日 |
---|---|
0.5.0 | 2024年2月14日 |
0.4.0 | 2023年10月17日 |
0.3.1 | 2022年11月4日 |
0.1.1 | 2021年9月20日 |
#6 在 #password-manager
195KB
10K SLoC
简介
Napa 是一个用 Rust 编写的简单命令行密码管理器。Napa 应该被视为测试版本:它不应用于存储任何实际的密码,并且数据库格式可能在将来发生变化。目前 Napa 仅适用于 Linux,并需要 Wayland 以支持剪贴板。欢迎为其他 FOSS 操作系统提供补丁。
安装
静态链接的二进制文件发布在 发布页面[^1]。或者,如果您有 Rust 工具链,可以使用 cargo install napa
从源代码构建。
动机
今天最流行的命令行密码管理器可能是 pass,我愉快地使用了几年。然而,pass 使用 GPG 加密其机密信息,这需要维护 GPG 密钥才能访问您的密码。 GPG 也不太好,其过时的加密意味着 pass 易受此处描述的数据库攻击的影响。这里。Pass 还 在您的 GPG 密钥解锁后允许任意程序读取/写入您的密码,这在当今的 typosquatting 时代让我越来越担忧。因此诞生了 Napa,这是一个更简单且加密更强的密码管理器,适用于您不完全信任本地计算机时。
使用方法
可以使用 napa init
初始化新的数据库。这将生成来自 EFF 长单词列表 的六个单词密码短语。请记住这个密码短语,因为它不会再显示。
$ napa init my-passwords.napa
The new passphrase for this database file is: creme-customer-squad-persuader-wise-purveyor
Remember this passphrase! It will not be displayed again.
初始化后,可以使用 napa open
解锁数据库文件。这将缓存解密密钥在内存中,并将您放入一个类似 REPL 的接口,用于编辑密码条目。
$ napa open my-passwords.napa
Enter the passphrase:
> edit example-entry
# this will open the entry in $EDITOR
每个密码条目的名称可以是任意文本,这允许您按自己的喜好分组密码。密码条目也可以包含任意文本,没有预定义的布局。唯一的例外是以下以特殊前缀开始的行:domain:
、username:
和password:
。当这些前缀存在时,它们会在生成新密码或将其复制到剪贴板时使用。例如
domain: login.example.com, login.example.co.uk
username: my-username
password: my-awesome-password
Any extra information down here.
在REPL中运行help
可以查看所有可用的命令。每个命令也有文档,可以使用--help
访问,例如edit --help
。
最后,可以使用napa pass
命令更改数据库文件的密码短语。这将生成一个新的密码短语。
$ napa pass my-passwords.napa
Enter the passphrase:
Your new passphrase for this database file is: penalty-cement-legacy-surface-symphonic-confound
Remember this passphrase! It will not be displayed again.
安全性
Napa数据库文件设计为对数据库文档中描述的特定攻击具有免疫力。一旦数据库解锁,Napa将尽最大努力避免向任何外部进程暴露机密材料。例如,程序在分配内存时将所有内存清零。只有当以下情况发生时,系统其他部分才能访问机密信息:
- 将信息复制到剪贴板(虽然难以避免,但剪贴板在30秒超时后自动清除),
- 使用
$EDITOR
(该命令使用临时文件,尽管文件创建遵循最佳实践)编辑条目。
当可能时,应将Napa编译为静态链接的二进制文件,以防止LD_PRELOAD攻击。当然,这不会扩展到您的整个系统(例如您的终端模拟器),因此建议使用沙盒(如bubblewrap)和强制访问控制系统,如SELinux或AppArmor。
我创建的提交和标签使用我的SSH密钥签名。配置密钥后,可以使用git verify-commit
和git verify-tag
进行验证。2023-07-01之前的提交使用我的GPG密钥签名,但该密钥已过期,不再使用。
许可
Napa遵循MPL2许可。
致谢
Napa从几个其他加密程序中获得了灵感,包括
[^1]: 每个版本都是在SourceHut构建环境中构建的,可以通过计算b2sum
并将其与链接的构建页面进行比较来检查二进制文件的完整性。
依赖关系
~17–47MB
~755K SLoC