AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 976808
Accepted
dessert
dessert
Asked: 2017-11-16 12:48:08 +0800 CST2017-11-16 12:48:08 +0800 CST 2017-11-16 12:48:08 +0800 CST

结合实际单词的密码生成器

  • 772

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

该主题也在此处讨论:https ://www.ted.com/talks/lorrie_faith_cranor_what_s_wrong_with_your_pa_w0rd

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

command-line
  • 4 4 个回答
  • 3061 Views

4 个回答

  • Voted
  1. dessert
    2017-11-16T12:48:08+08:002017-11-16T12:48:08+08:00

    本地安装的字典存储在 中/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
    
    • 5
  2. Best Answer
    sudodus
    2017-11-17T06:56:59+08:002017-11-17T06:56:59+08:00

    计算机方面

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

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

    人性方面

    考虑到人的方面,重要的是你可以

    • 接受

    • 记住

    • 拼写

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

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

    使用大的单词列表可以为每个单词提供更多的熵,但您或您正在管理其 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 将找到默认的单词列表以及 and 的单词列表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 位熵)。

    从 Internet 下载、检查和使用此类文件应该是安全的。像往常一样,您应该只使用可靠的网站。

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

    在这个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
    

    使用默认单词文件:减少奇怪和复杂的单词数量

    # 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
    
    • 4
  3. muru
    2017-11-16T17:05:50+08:002017-11-16T17:05:50+08:00

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

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

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

    选择你的毒药。

    另见:

    • “经常被引用的 XKCD 方案 [...] 不再是好建议”?在安全堆栈交换上
    • 3
  4. GlenPeterson
    2017-11-17T08:24:57+08:002017-11-17T08:24:57+08:00

    请不要这样做。

    • 也许有些工具只使用字符来猜测密码,但有些工具很快就会猜出多个常用词,如果他们还没有的话。
    • 如果您记住了您的密码,那么您几乎可以肯定会在不同的网站上重复使用它们(可能有变体)。如果您在互联网上有 30 个帐户,我敢打赌,您每年至少有一个密码被泄露。来自一个站点的具有您密码的人会尝试使用您的其他帐户的变体。所以你的 horseBatteryStapleLinkedIn 密码可以让别人猜到你的 gmail 密码是 horseBatteryStapleGoogle、 horseBatteryStapleGmail、 horseBatteryStapleLiamg(Gmail 的拼写倒过来)。如果你能想到,别人也能想到。

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

    好消息

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

    bJbRpZ2S9
    

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

    black Jack beyond Re post Zaps 2 Surly 9's
    

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

    PS 使用密码管理器时,请定期打印出您的密码,并将其放入安全的防篡改信封中,以免丢失。理想情况下,如果您发生什么事,您的近亲可以拿到它们,例如保险箱。

    • 2

相关问题

  • 如何从命令行仅安装安全更新?关于如何管理更新的一些提示

  • 如何从命令行刻录双层 dvd iso

  • 如何从命令行判断机器是否需要重新启动?

  • 文件权限如何工作?文件权限用户和组

  • 如何在 Vim 中启用全彩支持?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve