des*_*ert 5 security command-line scripts password
我受到了这个 xkcd 网络漫画的启发:
该主题也在此处讨论:https : //www.ted.com/talks/lorrie_faith_cranor_what_s_wrong_with_your_pa_w0rd
现在我想知道:
如何在不使用互联网的情况下从四个随机字典单词中 创建密码?
本地安装的字典存储在/usr/share/dict/
,例如:
$ ls -1 /usr/share/dict/
american-english
british-english
cracklib-small
README.select-wordlist
words
words.pre-dictionaries-common
Run Code Online (Sandbox Code Playgroud)
前两个很有趣,这些词典是简单的单词列表,每行一个单词。我们可以使用从其中之一shuf
输出4
随机行(并awk
用空格替换换行符):
shuf -n4 /usr/share/dict/american-english | awk NF=NF RS= OFS=' '
Run Code Online (Sandbox Code Playgroud)
这是一些示例输出:
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
Run Code Online (Sandbox Code Playgroud)
使用一种提供足够随机性别名熵的方法,通常以位为单位进行测量。
接受随机过程中第一个提供的选择。否则,熵会减少(通常比您想象的要多),您的安全级别也会降低。
考虑到人的方面,重要的是你可以
接受
记住
拼写
密码/密码短语中的单词。
为了保持随机性和熵,接受第一个提供的选择非常重要,并且单词列表可以发挥作用。
使用大的单词列表可以为每个单词提供更多的熵,但您或您正在管理其 IT 安全的组中的用户很可能拒绝使用第一个提供的密码/密码短语。在极少数情况下,您的姓名、城市或其他个人数据可能会从单词列表中选择,但更常见的是,您可能会被政治、种族、宗教、性或一般粗鲁的单词冒犯。当然,如果您喜欢这些单词,您可以将它们添加到您自己的单词列表中;-),但不要将它们强加给其他人。
如果您使用最常用单词的列表(其中这些单词是为此特定目的而选择的),则可以更轻松地接受、记住和拼写密码/密码短语。
您可以自己创建这样的列表(使用您自己的语言,并删除带有特殊字符的单词,因为它们可能会导致某些软件出现问题)。
以下 shell 脚本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 '^[a-z]\{4,10\}$' | \
tee "$prunedlist" | \
wc -l
echo "-------"
done
Run Code Online (Sandbox Code Playgroud)
shellscript 将找到默认的单词列表以及 和 的单词列表(xkcdpass
如果cracklib
已安装)。
现在您可以运行shuf
命令行来测试修剪后的单词列表,
$ for i in *pruned*; do echo "$i:";shuf -n4 "$i"| awk NF=NF RS= OFS=' ';echo "-----";done
Run Code Online (Sandbox Code Playgroud)
但我更愿意xkcdpass
。
你可以下载这样一个列表(检查它是否由唯一的单词组成并且足够长,至少2048个单词= 2^11个单词,对应于11位熵)。
从互联网下载、检查和使用此类文件应该是安全的。像往常一样,您应该只使用可靠的网站。
对于安全性而言,重要的不是单词本身,而是让随机进程(例如骰子)或良好的伪随机计算机进程选择单词。请勿通过手动选择或修改密码来篡改随机过程。
在这个Ubuntu 帮助 wiki 页面:XKCD 方法 - xkcdpass你可以找到一个
确定最适合您特定情况下所需的安全级别的方法,
它可能因人(以及人群,如果您正在考虑如何为组织设置策略或自定义工具)而有所不同。
您可以xkcdpass
通过添加 verbosity 选项来计算随机性别名熵(-V
以位为单位) 。这些示例使用 Ubuntu 帮助页面中的默认单词列表和自定义单词列表word-list.txt
,
xkcdpass -V -n 3
xkcdpass -V -n 4 --min 4 --max 10 -d . -w word-list.txt
Run Code Online (Sandbox Code Playgroud)
使用默认的word文件:减少奇怪和复杂的单词数量
# 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
Run Code Online (Sandbox Code Playgroud)
请注意,这是默认设置。但只有当用户
使用自定义单词文件:常见且简单的单词数量较多
# 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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2566 次 |
最近记录: |