使用diceware构造好的密码
一般来说,一个安全的密码需要具备以下条件:
1. 足够长,否则容易被暴力破解
2. 避免常见单词/组合/变化,否则容易被字典攻击
3. 避免带有个人信息,比如生日,电话,住址,单位,爱好等信息
4. 只在一个网站上使用
现在各大网站推荐用户使用大小写+数字+字符的组合,加上日常中要记的密码不止一个,很多人会倾向于选择"人难记,计算机容易猜"密码。
那么如何得到一个"人好记,计算机难猜"的密码呢?可以考虑采用diceware的方法:在一个巨大的词典中随机抽取数个单词组成密码。
具体操作:
1. 去下载diceware提供的一张具有7776个单词的词典
英文版词典:https://world.std.com/%7Ereinhold/diceware.wordlist.asc
中文版词典:https://github.com/cfbao/chinese-diceware (内含拼音版和五笔版)
字典长得像这样:
---------------
16666 clerk
21111 cliche
21112 click
21113 cliff
21114 climb
21115 clime
21116 cling
21121 clink
21122 clint
21123 clio
21124 clip
---------------
2. 决定要多少个单词。diceware推荐5个单词对于一般应用来说已经足够;对于GPG,文件加密,WIFI等应该使用至少6个单词;对于全盘加密,比特币帐号等推荐至少7个单词。
3. 随机抽取单词。由于diceware方法的安全性依赖于随机性,所以不要凭感觉去选单词。如果你想要真随机,可以去买几个好一点的色子,通过掷色子的方式得到5个数并选取词典上的对应单词(即diceware名字由来),例如得到 2 1 1 2 4 就表示选取 "clip" 。如果觉得色子太麻烦,也可以使用计算机上靠谱的随机数生成器(操作系统都会自带一个,比如linux上的/dev/random),得到随机数后对7776求余并找对应行数的单词。
4. 重复步骤3数次
5. 如果要进一步提高安全性可以在密码上某处加个字符。搞定以后,不断练习输入直到记住为止。
安全性分析:
每个单词有7776种选择,假如你的密码用的是5个单词,没有添加其他任何符号,密码有大概7776^5=28,430,288,029,929,701,376种不同选择。
相比之下11位随机大小写字母有52^11=7,516,865,509,350,965,248种不同选择。
目前一个小型GPU集群可以做到每秒 3.5 * 10^11 hash(https://gist.github.com/epixoip/a83d38f412b4737e99bbef804a270c40/revisions),像NSA这样的国家机构可能可以做到每秒 10^15 hash(https://pthree.org/2013/04/16/password-attacks-part-i-the-brute-force-attack/),斯诺登大神也曾表示要准备好应对每秒 10^12 hash 的攻击(https://www.nytimes.com/2013/08/18/magazine/laura-poitras-snowden.html?pagewanted=all&_r=0)
假如攻击者知道你设置密码用了上述规则,并且每秒能计算 1,000,000,000,000 次hash(10^12),要遍历50%的密码选项,大概要耗费165 天的时间。如果加上某个随机字符,相对于耗费这么多时间破解,别人估计直接找你要密码了。
总的来说,diceware具有以下优点:
1. 足够长,即便只有小写字母,纯暴力破解也是不可能的。
2. 无法被字典攻击破解,字典足够大
3. 无法被社会工程破解,某种意义上是随机生成的
4. 如果你买了色子的话,无法被计算机漏洞或者算法后门破解
5. 容易记忆,"livable these gre*edy gilled sharply" 总比11位随机大小写好记得多
6. 好输入,基本上只有小写字母单词(以及你追加的符号)。英文不熟悉的话可以去使用拼音版
7. 安全性比较好评估
注意如果你想要自己编写一个diceware程序,那么最好先对你要使用的密码学库进行评估,并且最好不要使用编程语言标准库里的随机数生成器。
最后推荐与bitwarden等密码管理工具一起使用。
推荐:
https://world.std.com/~reinhold/diceware.html
Diceware主页
https://world.std.com/%7Ereinhold/diceware.wordlist.asc
Diceware英文词典
https://world.std.com/~reinhold/diceware.html#Diceware%20in%20Other%20Languages|outline
Diceware多国语言词典
https://www.rempe.us/diceware/#eff
Diceware网页版,github上开源,可以去下载离线版,还包括对生成密码的强度计算,但只有英文词表(也可以根据网页上给出的随机数出找对应的中文单词)。
随机数生成器是用的是js的 window.crypto.getRandomValues(),在靠谱的浏览器上这个应该是比较安全的,可以参考 https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues
https://www.privacytools.io/software/passwords/
密码管理器推荐
https://www.youtube.com/watch?v=3NjQ9b3pgIg
How to Choose a Password - Computerphile
https://www.youtube.com/watch?v=Pe_3cFuSw1E
Diceware & Passwords - Computerphile
https://www.youtube.com/watch?v=yzGzB-yYKcc
Edward Snowden on Passwords: Last Week Tonight with John Oliver (HBO)
1. 足够长,否则容易被暴力破解
2. 避免常见单词/组合/变化,否则容易被字典攻击
3. 避免带有个人信息,比如生日,电话,住址,单位,爱好等信息
4. 只在一个网站上使用
现在各大网站推荐用户使用大小写+数字+字符的组合,加上日常中要记的密码不止一个,很多人会倾向于选择"人难记,计算机容易猜"密码。
那么如何得到一个"人好记,计算机难猜"的密码呢?可以考虑采用diceware的方法:在一个巨大的词典中随机抽取数个单词组成密码。
具体操作:
1. 去下载diceware提供的一张具有7776个单词的词典
英文版词典:https://world.std.com/%7Ereinhold/diceware.wordlist.asc
中文版词典:https://github.com/cfbao/chinese-diceware (内含拼音版和五笔版)
字典长得像这样:
---------------
16666 clerk
21111 cliche
21112 click
21113 cliff
21114 climb
21115 clime
21116 cling
21121 clink
21122 clint
21123 clio
21124 clip
---------------
2. 决定要多少个单词。diceware推荐5个单词对于一般应用来说已经足够;对于GPG,文件加密,WIFI等应该使用至少6个单词;对于全盘加密,比特币帐号等推荐至少7个单词。
3. 随机抽取单词。由于diceware方法的安全性依赖于随机性,所以不要凭感觉去选单词。如果你想要真随机,可以去买几个好一点的色子,通过掷色子的方式得到5个数并选取词典上的对应单词(即diceware名字由来),例如得到 2 1 1 2 4 就表示选取 "clip" 。如果觉得色子太麻烦,也可以使用计算机上靠谱的随机数生成器(操作系统都会自带一个,比如linux上的/dev/random),得到随机数后对7776求余并找对应行数的单词。
4. 重复步骤3数次
5. 如果要进一步提高安全性可以在密码上某处加个字符。搞定以后,不断练习输入直到记住为止。
安全性分析:
每个单词有7776种选择,假如你的密码用的是5个单词,没有添加其他任何符号,密码有大概7776^5=28,430,288,029,929,701,376种不同选择。
相比之下11位随机大小写字母有52^11=7,516,865,509,350,965,248种不同选择。
目前一个小型GPU集群可以做到每秒 3.5 * 10^11 hash(https://gist.github.com/epixoip/a83d38f412b4737e99bbef804a270c40/revisions),像NSA这样的国家机构可能可以做到每秒 10^15 hash(https://pthree.org/2013/04/16/password-attacks-part-i-the-brute-force-attack/),斯诺登大神也曾表示要准备好应对每秒 10^12 hash 的攻击(https://www.nytimes.com/2013/08/18/magazine/laura-poitras-snowden.html?pagewanted=all&_r=0)
假如攻击者知道你设置密码用了上述规则,并且每秒能计算 1,000,000,000,000 次hash(10^12),要遍历50%的密码选项,大概要耗费165 天的时间。如果加上某个随机字符,相对于耗费这么多时间破解,别人估计直接找你要密码了。
总的来说,diceware具有以下优点:
1. 足够长,即便只有小写字母,纯暴力破解也是不可能的。
2. 无法被字典攻击破解,字典足够大
3. 无法被社会工程破解,某种意义上是随机生成的
4. 如果你买了色子的话,无法被计算机漏洞或者算法后门破解
5. 容易记忆,"livable these gre*edy gilled sharply" 总比11位随机大小写好记得多
6. 好输入,基本上只有小写字母单词(以及你追加的符号)。英文不熟悉的话可以去使用拼音版
7. 安全性比较好评估
注意如果你想要自己编写一个diceware程序,那么最好先对你要使用的密码学库进行评估,并且最好不要使用编程语言标准库里的随机数生成器。
最后推荐与bitwarden等密码管理工具一起使用。
推荐:
https://world.std.com/~reinhold/diceware.html
Diceware主页
https://world.std.com/%7Ereinhold/diceware.wordlist.asc
Diceware英文词典
https://world.std.com/~reinhold/diceware.html#Diceware%20in%20Other%20Languages|outline
Diceware多国语言词典
https://www.rempe.us/diceware/#eff
Diceware网页版,github上开源,可以去下载离线版,还包括对生成密码的强度计算,但只有英文词表(也可以根据网页上给出的随机数出找对应的中文单词)。
随机数生成器是用的是js的 window.crypto.getRandomValues(),在靠谱的浏览器上这个应该是比较安全的,可以参考 https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues
https://www.privacytools.io/software/passwords/
密码管理器推荐
https://www.youtube.com/watch?v=3NjQ9b3pgIg
How to Choose a Password - Computerphile
https://www.youtube.com/watch?v=Pe_3cFuSw1E
Diceware & Passwords - Computerphile
https://www.youtube.com/watch?v=yzGzB-yYKcc
Edward Snowden on Passwords: Last Week Tonight with John Oliver (HBO)