2 个版本
使用旧的 Rust 2015
0.1.1 | 2019 年 6 月 23 日 |
---|---|
0.1.0 | 2019 年 6 月 23 日 |
#1045 in 身份验证
33KB
728 行
dpg (diceware 密码生成器)
dpg 是一个简单的可执行程序,它帮助使用 diceware 方法生成强大且易于记忆的密码。
什么是 diceware?
强密码的常见问题是很难记忆。diceware 方法 () 旨在解决这个问题。这种方法基于生成包含几个单词(4 个或更多)的密码。与随机字母、特殊字符、数字等随机字符串相比,记住几个单词更容易,尤其是那些可以以某种方式可视化的单词。diceware 的一种很好的解释可以在 xkcd 的某个漫画中找到
Diceware 方法由其作者 Arnold G. Reinhold 详细描述: http://world.std.com/~reinhold/diceware.html
为什么是 dpg?
这个应用程序是为了熟悉 Rust 编程语言而创建的。这是我用 Rust 编写的第一个项目。我只是想检查一下这个语言在比 kata 稍微复杂一点的东西上怎么样。这个项目使我能够研究 Rust 项目的结构(将代码拆分为模块)、测试。
Diceware 列表
dpg 需要使用单词列表(diceware 单词列表)。目前应用程序有两个内置列表:一个是包含英语单词的列表(默认),另一个是包含波兰语的列表(必须明确指定)。
英语单词列表取自 FFI 网站: https://www.eff.org/deeplinks/2016/07/new-wordlists-random-passphrases 波兰语单词列表是我创建的( https://github.com/MaciekTalaska/diceware-pl ) - 这项工作基于 Piotr (DrFugazi) Tarnowski 创建的列表。
Mathias Gumz 的仓库 包含不同语言的 diceware 列表。
安全性
Dpg 使用来自 rand crate 的 OsRng(https://crates.io/crates/rand)。Rand crate 文档指出: "需要熵源进行加密目的的应用必须使用 OsRng,该随机数生成器从操作系统提供的数据源读取随机数(例如 Unix 的 /dev/urandom 或 Windows 的 CryptGenRandom())。此模块提供的其他随机数生成器不适用于此类目的。"
选项
-l:<language>
要使用的语言列表 - 目前仅支持 'en'(英语)或 'pl'(波兰语)。默认使用 'en',即生成由英语单词组成的密码时无需显式指定此选项
-w:<number>
要生成的单词数量(密码长度以单词计)。
最小值:1
最大值:255
-p:<number>
一次性生成的密码数量
默认值:1
最小值:1
最大值:255
-s:<character>
用于分隔单词的字符
默认值: -
(短横线)
标志
-c
将生成的密码复制到剪贴板
-d
模拟骰子选项。目前 dpg 可以在两种不同的模式下工作
a) '简化模式',其中只生成一个随机数,以从一个列表中获得单个单词
b) 'diceware 显式'模式,其中生成多个随机数,每个随机数相当于掷一个骰子,用于从列表中检索单个单词
这两种模式提供相同的安全性(因为使用相同的、加密安全的随机数生成方法),但显然第二种模式(可以通过使用 -d
开关来启用)要慢一些,因为需要更多的操作。除非生成大量非常长的密码,否则这不应该引起注意。待办事项:添加更多选项
-i:<file path>
外部单词列表文件的路径
安装/使用
dpg
可在 crates.io 上找到,因此安装它最简单的方法是使用 cargo: cargo install dpg
。
这将下载、编译并将二进制文件存储在 ~/.cargo/bin
目录中,这应该使 dpg
作为命令行工具对当前用户可用。
许可证
Diceware 是 Arnold G. Reinhold 的商标(™)(http://world.std.com/~reinhold/diceware.html)
所使用的英语单词列表是由电子前沿基金会(https://www.eff.org/about)创建并版权保护的。
波兰语单词列表是我自己创建的,但基于 Dr Piotr 'Fugazi' Tarnowski 的工作。
依赖关系
~0.3–1.2MB
~20K SLoC