你会记住的密码。

diceware的Python项目详细描述


骰子软件

要记住的密码短语…

构建状态 文档 问题

diceware 是遵循以下建议的密码短语生成器 Arnold G.Reinhold打开http://diceware.com。它生成密码短语 通过连接从单词列表中随机选取的单词。例如:

$ diceware
MyraPend93rdSixthEagleAid

默认情况下,密码短语包含六个单词(第一个字符 大写)没有任何分隔符。你可以选择让 Diceware 在密码短语中插入特殊字符。

Diceware 支持多种随机性来源(包括现实生活 骰子)和不同的单词表(包括加密签名的 有的)

安装

这个python包可以通过pip安装

$ pip install diceware

具体的方法取决于你您的操作系统。

用法

安装后,使用 --help 列出所有可用选项:

$ diceware --help
Create a passphrase

positional arguments:
  INFILE                Input wordlist. `-' will read from stdin.

optional arguments:
  -h, --help            show this help message and exit
  -n NUM, --num NUM     number of words to concatenate. Default: 6
  -c, --caps            Capitalize words. This is the default.
  --no-caps             Turn off capitalization.
  -s NUM, --specials NUM
                        Insert NUM special chars into generated word.
  -d DELIMITER, --delimiter DELIMITER
                        Separate words by DELIMITER. Empty string by default.
  -r SOURCE, --randomsource SOURCE
                        Get randomness from this source. Possible values:
                        `realdice', `system'. Default: system
  -w NAME, --wordlist NAME
                        Use words from this wordlist. Possible values: `en',
                        `en_eff', `en_orig', `en_securedrop'. Wordlists are
                        stored in the folder displayed below. Default: en_eff
  -v, --verbose         Be verbose. Use several times for increased verbosity.
  --version             output version information and exit.

Arguments related to `realdice' randomsource:
  --dice-sides N        Number of sides of dice. Default: 6

Wordlists are stored in <WORDLISTS-DIR>

使用 -n 您可以知道应该挑选多少单词 您的新密码短语:

$ diceware -n 1
Thud

$ diceware -n 2
KnitMargo

您还可以使用diceware生成特殊字符来替换 "普通"密码短语中的字符。特殊字符数 可以使用 -s 选项( 默认值为0 )来确定生成:

$ diceware -s 2
Heroic%unkLon#DmLewJohns

这里的 "%" "" 是特殊字符。

特殊字符取自以下列表:

~!#$%^&*()-=+[]\{}:;\"'<>?/0123456789

请注意,几个特殊字符可能会替换同一个原始字符 字符,导致密码短语的特殊字符数少于请求的字符数。

使用 -d 可以建议 diceware 放置分隔符字符串 在生成的单词之间:

$ diceware -d "_"
Wavy_Baden_400_Whelp_Quest_Macon

默认情况下,我们使用空字符串作为分隔符,这对于 通过双击Linux系统进行复制。但其他分隔符可能 使您的密码更可读(和更安全,请参阅 安全陷阱 如下。

默认情况下,单短语单词大写,即第一个 每个字的字符都是大写的。这不一定给 更好的熵(但可防止因前缀非前缀而导致的熵损失 代码,请参见下面的安全陷阱 提高短语的可读性。

不过,您仍然可以使用 --no caps选项禁用caps

$ diceware --no-caps
oceanblendbaronferrylistenvalet

这将使输入字保持不变(大写保持大写, 小写保持小写)。它并不意味着,所有输出的单词 小写(除非单词列表中的所有单词都是小写)。

由于默认的diceware列表只包含小写的术语,这里 --没有大写 实际上意味着只输出小写,这可能更容易 在智能手机和类似设备上输入。

Diceware 还支持不同的随机性来源,这些随机性来源可以是 用 -r <;sourcename>; --随机源选择 选择权。使用 --help选项列出此项的所有有效值 选项. < /P>

默认情况下,我们使用标准python的类 但你也可以带上自己的骰子来创建随机性:

$ diceware -r realdice --dice-sides 6
Please roll 5 dice (or a single dice 5 times).
What number shows dice number 1? 2
What number shows dice number 2? 3
...
DogmaAnyShrikeSageSableHoar

通常骰子有六个面。这也是 如果不使用骰子边,则使用骰子软件。但如果你这样做了,你可以 告诉你的骰子有多少边。更多的边会导致更少的 需要卷纸。

我们甚至支持来自其他包的随机性源。见 文档 了解更多详细信息。

Diceware 附带了由eff提供的英文单词列表,它将是 默认使用,包含7776(=6^5)个不同的单词。这个列表是 注册为 en_eff

此外,Diceware还提供了一个英文单词表,由 @heartsucker ,其中包含8192个不同的单词。这个名单是根据 arnold g.reinhold编写的原始骰子清单。

提供了Reinhold先生的原始和8K Diceware单词表。 您可以使用 -w 选项启用特定(已安装的)字表:

$ diceware
MyraPend93rdSixthEagleAid
0

有关所有已安装单词列表的列表,请参见Diceware --help

如果您不喜欢提供的单词表,可以使用自己的 一。提供的任何填充都将逐行分析 考虑了一个可能的词。例如:

$ diceware
MyraPend93rdSixthEagleAid
1

使用破折号( - )作为文件名,您可以在单词列表中插入管道:

$ diceware
MyraPend93rdSixthEagleAid
2

在自定义单词表中,我们将每一行作为一个有效单词并忽略 空行(即仅包含空白字符的行)。哦, 我们甚至处理PGP签名的单词列表。

可以在配置文件中设置自定义默认值 .diceware.ini(注意前导点)放在家中 目录。此文件可能如下所示:

$ diceware
MyraPend93rdSixthEagleAid
3

选项名必须与长参数名匹配,输出方式为 --帮助 。设置的值必须满足 命令行用法。必须在节中设置所有选项 [骰子软件]

有什么好处?

通常, diceware 密码比短密码更容易记住 密码的构造或多或少有些怪异。但同时 time diceware 密码短语提供了更多的熵,因为xkcd可以显示 用著名的"936"证明:

http://imgs.xkcd.com/comics/password_strength.png

这个diceware实现的标准英文单词表包含7776= 6^5个不同的英语单词。它是官方的effwordlist。编译通过 约瑟夫·邦neau 。因此,从这个列表中随机选择一个单词可以得到 熵接近12.9位。选择六个单词意味着6 x 12.9的熵= 77.54位。

替换最初创建的密码短语的特殊字符 赋予更多的熵(你拥有的越多,附加的越多 熵),但不多。例如,一个十六个字符的短语 有16种可能性放置36个特殊字符之一。那 使36 x 16的可能性或熵约为9.17,你可以添加。 若要使熵增加至少10位,必须将 短语中至少有29个字符的特殊字符(同时 一个额外的单词会给你额外的13位 熵)。因此,您可能会再次考虑在 您的密码。

是否安全?

Diceware提供的安全级别在很大程度上取决于 随机的来源。如果传递的随机性是好的,那么 密码短语将非常强。如果有人能预见 由随机数生成器生成的数字,您的密码短语将 非常虚弱。

这个python实现(默认情况下)使用 python提供的源代码。在UN*X系统上 访问 /dev/urandom 。你可能想关注关于 在操作系统中密切操作随机数生成器。

这个包的python api允许使用 生成密码短语时的随机性。这包括真骰子。见 -r 选项。

安全陷阱

有些问题可能会降低密码短语的熵 生成。其中之一是前缀代码问题:

前缀代码

例如,如果单词列表包含以下单词:

$ diceware
MyraPend93rdSixthEagleAid
4

我们关闭了caps 和分隔符,然后diceware 可能 生成包含以下内容的密码短语:

$ diceware
MyraPend93rdSixthEagleAid
5

这可能来自便携式飞机或机场专用飞机。我们不能 tell和攻击者可以猜测的组合较少。

为了避免出现这种情况,您可以将caps保留为启用状态(默认设置),使用任何单词 分隔符(空字符串除外)或使用 en_eff wordlist, 已检查为前缀代码(即不包含 以列表中其他单词开头的单词)。

这些措施足以保护你免受 前缀代码 问题。

减少的熵

总的来说,diceware是一种映射输入值,dice抛出 实例,在wordlist条目上。我们通常希望 以相同的概率为密码短语选择单词列表。

但是,如果wordlist条目的数量不是 骰子边的力量。在这种情况下,我们从单词表中删去一些单词并通知 关于这件事的用户。通过这种方法减少单词的数量 攻击者更容易猜到所选短语。

您可以使用更长的单词表来解决这个问题。

开发人员安装

开发人员希望在github上使用fork me

$ diceware
MyraPend93rdSixthEagleAid
6

我们建议首先创建并激活a virtualenv

$ diceware
MyraPend93rdSixthEagleAid
7

我们支持python版本2.6、2.7、3.3到3.7以及pypy。

现在您可以创建devel环境:

$ diceware
MyraPend93rdSixthEagleAid
8

这将获取测试包( py.test )。你应该能跑 立即测试:

$ diceware
MyraPend93rdSixthEagleAid
9

如果您还安装了不同的python版本,则可以使用tox 全部用于测试:

$ pip install diceware
0

应该在所有受支持的python版本中运行测试。

文档安装

可以使用sphinx生成文档。需要的包裹是 安装方式:

$ pip install diceware
1

要创建html,您必须转到 docs/ 目录并使用 准备好生成文件

$ pip install diceware
2

这将在 docs/\u build/html/ 中生成文档

创建手册页

我们提供了一个模板来创建手册页。当 安装了文档引擎(sphinx,请参见上文),然后可以创建 手册页正在执行:

$ pip install diceware
3

提供这个模板主要是为了简化debian维护人员的工作。 目前,它不会自动更新。日期、作者、概要等 手动更新。因此,手册页中的信息可能是错误的, 过时,或只是误导。

积分

阿诺德雷因霍尔德应该为 骰子软件 。非工作部件肯定我的错。

帮助发现错误、提供解决方案等的人员:

< Buff行情>

非常感谢他们!

链接

字表:

许可证

Diceware的python实现(c)2015-2018 uli fouquet,是 根据GPLv3+授权。有关详细信息,请参阅文件许可证。

"Diceware"是Arnold G Reinhold的商标,经允许使用。

diceware8k列表的版权归arnold g reinhold所有。 diceware securedrop列表的版权归 @heartsucker 。约瑟夫·邦尼奥和 eff 。有关详细信息,请参阅文件版权。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java我的int值在SharedReferences中不被记住   java如何编辑Spring可分页对象?   java如何在gradle中单独调用任务   jvm以编程方式设置最大java堆大小   java如果满足多个条件,如何使用If语句计算数字?   如何在java中从json文件中获取特定值   如何在Sphinx4中为Java语音识别添加自定义语法?   java int[]copy=data;//当数据是数组时会发生什么?   java豪猪管理器。停下来。destroy()不起作用   安卓在API级别28中找不到画布变量   基于SOLID的java冗余   用于talend作业的java Liferay和portlet   从java到安卓的视频流   java获取在控件的类定义中添加自定义控件的场景大小   awt Java IndexOutOfBoundsException   java如何使用Spring JmsTemplate更改MQ头   java遍历数组并打印每个对象   java Google Map api v2标记在我旋转手机和地图“刷新”之前不会移动