跳转到主要内容

生成diceware词表。

项目描述

diceware-list

构建状态 源代码 | 问题

为使用diceware创建和检查词表。

这不是一个diceware实现,而是一个创建和检查适当词表的辅助工具。

目前,我们提供了三个脚本

  • diceware-list 基于输入列表创建词表

  • wlflakes 检查现有词表是否存在错误

  • wldownload 下载Android词表

安装

pypi安装最新版本

(venv) $ pip install diceware-list

或从github克隆仓库

$ git clone https://github.com/ulif/diceware-list.git

请考虑使用virtualenv进行部署。

在活动 virtualenv 中,您可以安装并运行 diceware-list 的可执行脚本

(venv) $ python setup.py install
(venv) $ diceware-list --help
usage: diceware-list [-h] [-l LENGTH] [-n] [--ascii] [-d SIDES] [-k]
                     [--use-416] [-p {none,short,long}] [-v] [--version]
                     DICTFILE [DICTFILE ...]

创建词表: diceware-list

diceware-list 脚本可以从给定的列表中创建新列表

$ diceware-list -n -l 7776 /usr/share/dict/words
11111 a
11112 a's
...
12353 capt
12354 cara
12355 carl
...
66663 zoos
66664 éclat
66665 élan
66666 épée

《diceware-list》的主要目标是提供“良好”的单词列表。如果单词列表满足以下条件,则被认为是“良好”的:

  • 包含足够数量的术语,可用于特定的diceware应用程序(例如,使用六个六面骰子时,6^6 = 7776个术语)

  • 包含尽可能短的术语(以减少打字)

  • (可选)不包含非ASCII字符的单词(以便能够与非本地化键盘一起使用)

  • (可选)是一个前缀码,即列表中的任何完整单词都不是列表中另一个单词的前缀。

  • 不包含冒犯性术语

最后一个问题在技术上很难解决(欢迎提供提示!),但《diceware-list》可以帮助遵循其他设计规则。

《diceware-list》生成的单词列表不是为了保密。您可以将它们放在互联网上,发布在Facebook上或在《纽约时报》上印刷。相反,《diceware》技术的安全性依赖于您的骰子、计算机等设备的熵或(在这种情况下)“随机性”。

换句话说:您的密码短语的安全性不是因为隐藏您的单词列表。它们之所以安全,是因为您可以从单词列表中选择许多可能的组合。这意味着:较长的列表比较短的列表更安全(如果您的随机源真正使用《diceware》),但隐藏的列表与公开的列表相比并没有更安全。

使用方法

首先,您需要一个包含单词作为“字典”的文件。在典型的Debian系统上,此类文件可以在/usr/share/dicts/中找到。

然后,您可以将此文件输入到《diceware-list》中,以创建适合与diceware一起使用的单词列表。

$ diceware-list /usr/share/dict/words
!
!!
!!!
...
alan
alana
alar
...
zzz
zzzz

默认情况下,所有输入单词都会被过滤并输出。使用-l选项,您可以要求输出单词列表的特定长度。如果输入列表提供的术语多于所需,我们将选择子集。如果输入列表中的术语不足,将引发错误。

使用-n,您可以告诉《diceware-list》将数字放入每一行,表示骰子投掷[1]

$ diceware_list -n -l 7776 /usr/share/dict/words
11111 !
11112 !!
...
12353 alan
12354 alana
12355 alar
...
66665 zzz
66666 zzzz

如果您为非标准骰子创建单词列表,例如10面骰子,则可以使用以下方式使用-d

$ diceware_list -n -d 10 -l 10000 /usr/share/dict/words
1-1-1-1 aol
1-1-1-2 aachen
1-1-1-3 aaron
...
10-10-10-8 zoomed
10-10-10-9 zooms
10-10-10-10 zoos

–ascii选项会过滤掉包含非ASCII字符的术语。这有助于生成可使用常规英文键盘的英文单词列表。

详细选项–verbose可以多次给出以提高详细程度。

有关其他选项,请参阅–help。

《diceware-list》大致遵循Reinhold先生在http://diceware.com/上给出的建议。

检查单词列表:wlflakes

在单词列表中查找碎片。

::

$ wlflakes mywordlist.txt

无输出表示:未检测到问题。

我们可以查找前缀碎片。即,我们检查,给定文件中的任何一行是否是任何其他行的开始。

::

$ cat wordlist.txt air port airport

$ wlflakes wordlist.txt wordlist.txt:3: E1 “air” from line 1 is a prefix of “airport”

也会显示重复条目

::

$ cat wordlist.txt air port air

$ wlflakes wordlist.txt wordlist.txt:1: E1 “air” from line 1 is a prefix of “air” wordlist.txt:1: E2 “air” appears multiple times

wlflakes提供的更多检查

警告:- 显示包含非ASCII字符的术语 - 太短的列表条目(比猜测更容易暴力破解)

wlflakes还支持--help-h列出所有支持选项。

处理Android单词列表:wldownload

Android单词列表是单词列表的良好来源。可以从公共仓库下载。

$ wldownload --raw -v
Starting download of Android wordlist file.
Fetching wordlist from https://android.googlesource.com/platform/pack...
Done.

wldownload 下载这些列表并帮助将它们转换为可用于 diceware 的列表。请注意,默认情况下,列表术语输出到 stdout(Android 单词列表可能包含超过 100,000 个术语)

$ wldownload > mylist
$ cat mylist
the
to
...
yt
yuk

默认情况下,术语输出到 stdout(使用 shell 重定向或 --outfile 来更改此行为)。

您可以使用 --lang-l 与语言代码(如 csde)一起请求非英语单词列表。使用 --lang-codes 列出所有受支持的语言代码。

--no-offensive 标志抑制标记为可能冒犯性的术语。

测试

在源代码的克隆中,您可以运行如下测试:

(venv) $ python setup.py test

此命令将下载所有必需的包,特别是 py.test

您还可以使用 pip 手动安装 py.test

(venv)$ pip install pytest
(venv)$ pip install -e .

然后运行测试如下:

(venv)$ py.test

如果您还安装了 tox

(venv)$ pip install tox

那么您可以一次性运行所有支持平台的测试

(venv)$ tox

覆盖率

要获取覆盖率报告,您可以使用相应的 tox 目标

(venv)$ tox -e cov

或者您可以使用通用的 coverage 工具

(venv)$ pip install coverage
(venv)$ coverage run setup.py test
(venv)$ coverage report --include="diceware_list.py,libwordlist.py"

变更

2.1.dev0(未发布)

  • 支持 Python 3.6、3.7 和 pypy3

  • diceware-list 允许限制允许的字符集(使用 -c--chars)。

  • diceware-list 现在允许在请求时使用大写字母(使用 -u--allow-uppercase)。

  • wlflakes 现在检查列表和术语中的非 ASCII 字符以及太短且因此容易被破解的术语。

  • 添加了计算单词列表及其字母表字符的熵的函数。

  • 修复了 #4:仅在大小写上不同的术语导致结果列表中的重复条目。

2.0 (2018-01-23)

  • 添加了新的 wldownload 命令。这是一个用于处理 Android 单词列表的工具(下载、解压缩、解析)。

  • 添加了新的 wlflakes 命令。这是一个用于检查现有单词列表的一致性、密码碎片等的工具。

  • diceware-list-l 选项不再包含默认值。如果未设置此选项,则输出所有合适的术语。

1.0 (2017-02-09)

  • 从现在起,默认情况下不再将 dicewarekit.txt 列表包含在生成的列表中。您可以使用新选项 use-kit 请求包含。不再支持旧选项 no-kit

  • 在编号输出中,使用 - 将数字分开以区分多位数。当生成包含超过 9 个面的骰子的单词列表时至少需要这样做。

  • -s 选项重命名为 -d(如 dice-sides)。

  • 日志输出现在注册为 libwordlist 名称。

  • 添加了新的模块 libwordlist,其中包含 diceware-list 的 API 部分。

  • 新的 –version 选项。

  • 新的 –prefix 选项。如果设置前缀代码,则生成前缀代码,即不包含另一个列表项的前缀的列表。

  • 声称为 Python 3.6 提供支持。

  • 重构包:所有单个脚本现在都是包的一部分。

0.3 (2016-07-25)

  • 将安装脚本作为 diceware-list 而不是 diceware_list 安装。

  • 允许 –sides 选项支持没有六面的骰子。

0.2 (2016-03-18)

  • 允许 -v 选项多次使用以增加详尽程度。

  • 随机选择最大宽度的词条。在此更改之前,我们包含了所有较短的条目以及最大宽度(按字母顺序)的第一条条目。现在,我们从这些最大宽度的条目中随机选择一组作为结果列表。

  • 声明支持 Python 3.5。

0.1 (2016-02-09)

  • 初始发布。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

diceware_list-2.1.tar.gz (55.8 kB 查看散列)

上传时间

构建分布

diceware_list-2.1-py2.py3-none-any.whl (22.5 kB 查看散列)

上传时间 Python 2 Python 3

由以下机构支持