3 个版本 (稳定版)
使用旧的 Rust 2015
1.1.0 | 2020年3月18日 |
---|---|
1.0.0 | 2017年12月17日 |
0.0.1 | 2017年12月10日 |
#537 in 身份验证
每月 35 次下载
24KB
404 行
pw
pw
以无状态方式生成密码,类似于脑钱包。pw
提供了插入特殊字符、用于一次性垫模式、根据当前日期生成密码(适用于要求每 N 天重置密码的组织)或使用一些预共享密钥材料以及用户密钥生成密码的选项。所有这些选项都可以通过命令行访问,也可以通过配置文件,该配置文件可以通过原生 OS 密钥环加密。
安装
要使用 rust/cargo 的最新版本安装 pw,请执行:
cargo install pw
它还有一些其他依赖项,这些依赖项可能已在桌面系统上安装
dbus
在 Linux 上(Ubuntu 上的libdbus-1-dev
)gmp
(Ubuntu 上的libgmp-dev
)
分析
pw
使用 pbkdf2
与 sha512
来拉伸密码,以提供的实体作为盐。结果以 base58 编码,这意味着密码中的每个符号都有 ~5.86 的熵。默认情况下,pw 生成长度为 20 的密码,因此每个(默认)密码大约有 ~117 比特熵。相比之下,“correct horse battery staple” 只有 44 比特。
密码轮换
改变密码,记忆性强。《pw
》为给定盐和用户秘密组合生成密码提供了几个功能。例如,一些组织要求用户每90天更改密码。这是安全表演,但无论如何,用户必须合作。使用标准的密码生成器,用户可以无限期地将“2”和“3”(或“4”)添加到密码中;问题是这使某些明文输入的一部分变得已知。《pw
》使用一种新颖的方法来改变基于此类输入的pbkdf2
的迭代次数。--otp
可以直接用来改变迭代次数,从而改变生成的密码。--period
和--date
可以一起使用,以解决一些组织要求您每90天更改密码的问题。--period
单独计算基于当前日期的密码,而--date
允许您传递一个任意日期来计算密码。
添加特殊字符
默认情况下,base58编码仅包括字母数字字符。一些组织要求密码中包含特殊字符。用户可以通过向--special
提供参数来添加任意特殊字符。默认情况下,--special
包括25个通常允许的特殊字符。
盐推荐
盐对生成的密码非常重要。一个典型的建议是使用密码所属实体的域名,但问题是攻击者可能会偷取usbank.com的密码数据库,并只为usbank.com生成彩虹表。因此,建议使用一些个性化的盐版本。例如,我可能会选择tycho.usbank.com。一个额外的功能(在TODO中讨论)将是算法的全局偏移量,这样人们可以选择例如不使用默认的偏移量0,而为所有密码使用另一个值。
用法
pw
支持通过--{get,set,delete}}-keyring-password
将密码存储在操作系统原生密钥链中,这样用户不必在每次调用时输入密码。
还有Linux上的X11剪贴板支持,通过xclip
,因此用户可以将--clipboard
传递给pw
,它将自动将生成的密码复制到剪贴板。
最后,值得一提的是,pw
支持配置文件,允许一些其他功能,可以通过--{get,set,edit,delete}}-keyring-config
进行配置。例如,用户可以存储OTP偏移量、特殊字符集,甚至用于生成特定密码的预共享密钥材料(配置键preshared
,一个字符串)。目前此配置文件必须存储在密钥链中,因此不会暴露给未加密的访问。当然,这并不是无状态的,并且pw
可以在没有此配置的情况下完全运行,但对于某些用户来说可能很有用。
待办事项
- 加密配置文件。如果将配置文件放在您的密钥链中,这主要得到支持,所以不是优先级高的事情,尤其是在我没有看到真正的rust文件加密库的情况下。
- 为
--otp
提供全局设置,以进一步阻止彩虹表
依赖关系
~14MB
~330K SLoC