计算机方面

计算机方面

我受到了这个 xkcd 网络漫画的启发:

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

现在我想知道:
如何用四个密码创建一个密码随机字典单词 没有使用因特网?

答案1

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

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

这里前两个比较有趣,这些词典是简单的单词列表,每行一个单词。我们可以用来从其中一个词典中shuf输出随机行(并用空格替换换行符):4awk

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

答案2

计算机方面

使用一种方法,提供足够的随机性别名熵,通常以位为单位来衡量。

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

人性化方面

考虑到人性化因素,重要的是你可以

  • 接受

  • 记住

  • 拼写

密码/密码短语中的单词。

为了保持随机性和熵,接受第一个提供的选择非常重要,而且单词列表可能会产生影响。

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

如果您使用最常用单词列表,其中的单词是为此特定目的而选择的

自己创建单词表

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

以下 shellscriptpruner可能会有所帮助。您只会得到小写单词,这会使输入更容易(删除了特殊字符),并且只会得到 [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

如果安装了,shellscript 将查找默认单词列表以及 和 的单词xkcdpass列表cracklib

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

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

但我更喜欢xkcdpass

下载单词表

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

从互联网上下载、检查和使用此类文件应该是安全的。通常,您应该只使用可靠的网站。

对于安全来说,重要的不是词语本身,而是你让随机过程(例如骰子)或良好的伪随机计算机过程选择单词. 请勿通过手动选择或修改密码来篡改随机过程。

在这Ubuntu 帮助 wiki 页面:XKCD 方法 - xkcdpass你可以找到

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

xkcdpass 的有用命令行

确定最适合您特定情况所需的安全级别,

  • 奇怪而复杂的单词数量较少
  • 较多常见且易懂的单词

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

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

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

使用默认的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

请注意,这是默认设置。但只有当用户

  • 可以接受提供的第一个密码/密码短语,
  • 无需在显示器或笔记本电脑上贴便利贴(或其他“快捷方式”)就能记住它,
  • 无需在显示器/笔记本电脑上贴便利贴(或其他“快捷方式”)即可拼写出来。

使用自定义单词文件:更多常用且易用的单词

# 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

答案3

可能存在许多 XKCD 密码生成器实现:

  • xkcdpass,可从xkcdpassPython 包中获得(似乎没有使用 CSPRNG)

    $ xkcdpass
    baroque viand blindfold hooch notion ravening
    $ xkcdpass -n4
    useless elated liveable overfly
    
  • xkcd-password、NodeJS 模块
  • 数十个网站
  • diceware,其流程类似,但使用网站
  • ...

选择你的毒药。

另请参阅:

答案4

请不要这样做。

  • 也许有些工具只能使用字符来猜测密码,但是有些工具很快就会猜出多个常用单词(如果还没有的话)。
  • 如果您记得自己的密码,那么您几乎肯定会在不同网站上重复使用这些密码(可能还有些变化)。如果您在互联网上有 30 个帐户,我敢打赌,每年至少有一个密码会被泄露。有人知道您在某个网站上的密码,然后尝试在您的其他帐户上使用不同的密码。因此,您的 horseBatteryStapleLinkedIn 密码可以让别人猜出您的 gmail 密码是 horseBatteryStapleGoogle、horseBatteryStapleGmail、horseBatteryStapleLiamg(Gmail 的反向拼写)。如果您能想到,别人也能想到。

我知道这很麻烦,但还是用密码管理器吧。让它为每个网站生成唯一的随机密码。如果你和我一样偏执,你可以更改建议密码中的几个字符,以防生成器的(伪)随机算法被破解。我喜欢 KeePassX,它的数据库备份在 DropBox 中,但对于某些人来说,LastPass 更容易使用。也有许多付费密码管理器。

好消息

人类大脑擅长建立秩序,即使没有秩序。你可以盯着随机字符,直到你在混乱中感知到秩序,从而记住它们。没有秩序。这就是你的大脑所做的。例如:

bJbRpZ2S9

对你来说有一定意义。如果你输入足够多的次数,你就会想出类似这样的句子来记住它:

black Jack beyond Re post Zaps 2 Surly 9's

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

PS 使用密码管理器时,请定期打印密码并将其放在防篡改信封中,然后将其放在保险箱中,以免丢失。最好放在您发生意外时您的近亲可以拿到的地方,例如保险箱。

相关内容