密码生成器结合实际单词

我受到了这个xkcd webcomic的启发:

这里还讨论了这个主题: https : //www.ted.com/talks/lorrie_faith_cranor_what_s_wrong_with_your_pa_w0rd

现在我想知道:
如何在使用互联网的情况下从四个随机字典单词中创建密码?

计算机方面

使用一种方法,该方法提供足够的随机别名熵,通常以位为单位进行测量。

接受随机过程中的第一个提供的选择。 否则熵会降低(通常比你想象的要大),你的安全级别会降低。

人的方面

考虑到人的方面,你可以做到这一点很重要

  • 接受

  • 记得

  • 拼写

密码/密码中的单词。

为了保持随机性,熵,你接受第一个提供的选择是非常重要的,单词列表可以有所作为。

使用大单词列表可以为每个单词提供更多的熵,但是您或组中的用户(您正在管理其IT安全性)拒绝使用第一个提供的密码/密码短语。 在极少数情况下,您可能会从单词列表中选择您的姓名,城市或其他个人数据,但更多时候您可能会被政治,种族,宗教,性或粗俗的词语所冒犯。 当然,如果您喜欢这样的单词,可以将它们添加到您自己的单词列表中;-)但不要强迫它们使用其他人。

如果您使用最常用单词列表,则会更容易接受,记住和拼写密码/密码短语,其中单词是为此特定目的而选择的

自己创建一个单词列表

您可以自己创建这样的列表(并使用您自己的语言,并删除带有特殊字符的单词,因为它们可能会导致某些软件出现问题)。

以下的shellcript pruner可能有所帮助。 你只得到小写单词,这使得输入更容易(删除特殊字符),只有区间[4,10]字母中的单词(不太短,不太长)。 但是根据它们的容易接受程度,没有对这些文件进行排序。 您需要其他信息来删除不常见,困难且可能令人反感的词语,或者您可以手动执行此操作。

 #!/bin/bash LANG=C for wordlist in \ $(find /usr/share/dict/ /usr/lib/python3/dist-packages/xkcdpass/static -type f -size +10k) \ $(ls -1 word-list.txt 2> /dev/null) do # prunedlist="${wordlist##*/}" prunedlist="${wordlist//\//_}" prunedlist="${prunedlist/.txt}-pruned.txt" echo "source: $wordlist" echo -n "Total number of words in list: " < "$wordlist" wc -l echo "target: $prunedlist" echo -n "Used lower case words ( 4 < length < 10 ): " < "$wordlist" tr -d '\015'| \ grep '^[az]\{4,10\}$' | \ tee "$prunedlist" | \ wc -l echo "-------" done 

如果安装了cracklib ,它将找到默认的单词列表以及xkcdpasscracklib单词列表。

现在,您可以运行shuf命令行来测试已修剪的单词列表,

 $ for i in *pruned*; do echo "$i:";shuf -n4 "$i"| awk NF=NF RS= OFS=' ';echo "-----";done 

但我更喜欢xkcdpass

下载单词列表

你可以下载这样一个列表(检查它是否由唯一的单词组成并且足够长,至少2048个单词= 2 ^ 11个单词,相当于11位熵)。

从互联网上下载,检查和使用这样的文件应该是安全的。 像往常一样,您应该只使用可靠的网站。

对于安全性而言,重要的不是单词本身,而是让一个随机过程 (例如骰子)或一个好的伪随机计算机进程选择单词 。 不要通过手动选择或修改密码来篡改随机过程。

在这个Ubuntu帮助维基页面:XKCD方法 - xkcdpass你可以找到一个

自定义单词列表 - 'word-list.txt'

使用xkcdpass的有用命令行

确定哪种方法最适合您在特定情况下所需的安全级别,

  • 较少的单词是奇怪和复杂的
  • 更多的单词是常见且容易的

如果您正在考虑如何为组织设置策略或自定义工具,则可能因人而异(以及人群)。

您可以通过添加详细程度选项-V 来让xkcdpass以位为xkcdpass计算随机性别名熵 。 这些示例使用默认单词列表和Ubuntu帮助页面word-list.txt的自定义单词列表,

 xkcdpass -V -n 3 xkcdpass -V -n 4 --min 4 --max 10 -d . -w word-list.txt 

使用默认的单词文件:较低的单词数量是奇怪和复杂的

 # Normal security level at home, entropy = 45 bits; $ xkcdpass -n 3 demeanour basely extrude # Next security level, entropy = 60 bits: $ xkcdpass -n 4 metal cottager advocacy soursop # High security level, entropy = 76 bits: $ xkcdpass -n 5 hostile impounder Caledonia ramie Goddard # Very high security level, entropy = 91 bits: $ xkcdpass ambrosia Cossack vivify Barbudan royal Campinas 

请注意,这是默认设置。 但是只有用户才能获得非常高的安全级别

  • 可以接受提供的第一个密码/密码,
  • 可以记住它没有显示器/笔记本电脑上的贴纸(或其他“快捷方式”),
  • 没有贴在显示器/笔记本电脑上的贴纸(或其他“快捷方式”)就能拼写它。

使用自定义单词文件:更常见且容易的单词数量

 # Normal security level at home, entropy = 47 bits: $ xkcdpass -n 4 --min 4 --max 10 -d . -w word-list.txt sharp.hockey.steal.backyard # Next security level, entropy = 59 bits: $ xkcdpass -n 5 --min 4 --max 10 -d . -w word-list.txt initially.assistant.barely.framework.regional # Next security level, entropy = 71 bits: $ xkcdpass -n 6 --min 4 --max 10 -d . -w word-list.txt snake.food.dress.perception.club.waste # High security level, entropy = 83 bits: $ xkcdpass -n 7 --min 4 --max 10 -d . -w word-list.txt stand.mentor.know.cream.automatic.treatment.effect 

本地安装的词典存储在/usr/share/dict/ ,例如:

 $ ls -1 /usr/share/dict/ american-english british-english cracklib-small README.select-wordlist words words.pre-dictionaries-common 

这里的前两个很有意思,那些词典是简单的单词列表,每行一个单词。 我们可以使用shuf从其中一个输出4随机行(和awk用空格替换换行符):

 shuf -n4 /usr/share/dict/american-english | awk NF=NF RS= OFS=' ' 

这是一些示例输出:

 contributions autumn's catalepsy's hemline's footlights Levi's awfuller rascals fogies flavoring preregistering requital's Coleman's cartel halfpennies Williamson étude's maintainers reviler's dapperest pizazz Galahads McDowell derby corroborate bureaucracies anchovy meager filet Tawney feudalistic backstabbing Beatriz sitcom surpasses guttural's warehouse's unfamiliarity's Ashlee's sanguinary 

可能有任意数量的XKCD密码生成器实现:

  • xkcdpass ,可从xkcdpass包获得,Python(似乎不使用CSPRNG)

     $ xkcdpass baroque viand blindfold hooch notion ravening $ xkcdpass -n4 useless elated liveable overfly 
  • xkcd-password ,NodeJS模块
  • 几十个网站
  • diceware ,遵循类似的过程,但使用网站

选择你的毒药。

另见:

  • “常被引用的XKCD计划[…]不再是好建议吗?” 在安全堆栈交换

请不要这样做。

  • 也许有些工具只能使用字符来猜测密码,但有些工具很快会猜到多个常用字。
  • 如果你记得你的密码,你几乎肯定会为不同的网站重复使用它们(可能有变化)。 如果您在互联网上有30个帐户,我敢打赌每年至少有一个密码被泄密。 在某个网站上使用您的密码的人会尝试使用其他帐户的变体。 所以你的horseBatteryStapleLinkedIn密码允许有人猜测你的gmail密码是horseBatteryStapleGoogle,horseBatteryStapleGmail,horseBatteryStapleLiamg(Gmail拼写向后)。 如果你能想到它,其他人也可以。

我知道这很痛苦,但请使用密码管理器。 让它为每个站点生成唯一的随机密码。 如果你像我一样偏执,你可以在建议的密码中更改几个字符,以防生成器的(伪)随机算法受到损害。 我喜欢在DropBox中备份数据库的KeePassX,但LastPass更容易让一些人使用。 还有许多付费密码管理器。

好消息

人脑很擅长强加秩序,即使没有。 您可以通过盯着它们来记住随机字符,直到您在混乱中感知顺序。 没有订单。 这正是你的大脑所做的。 例如:

 bJbRpZ2S9 

对你意味着什么。 如果你键入足够的次数,你会想出这样的东西来记住它:

 black Jack beyond Re post Zaps 2 Surly 9's 

你最终可以记住2或3个主密码。 一个用于您的操作系统,另一个用于您的密码管理器。 这就是你所需要的一切。

PS使用密码管理器时,请定期打印出您的密码,并将其放在防盗信封中,放在保险箱的某处,这样您就不会丢失密码。 理想情况下,如果你发生了什么事情,你的亲属可以得到它们,比如保险箱。