Algorithm 语音记忆密码生成算法 背景

Algorithm 语音记忆密码生成算法 背景,algorithm,security,language-agnostic,passwords,Algorithm,Security,Language Agnostic,Passwords,前几天在健身房时,我正在使用我的组合锁,我意识到一些东西对我这个程序员来说是有用的。也就是说,我的组合是三组不同的数字,它们要么听起来相似,要么有其他关系,使它们易于记忆。例如,5-15-25,7-17-2,6-24-5。这些例子似乎很容易记住 问题: 我如何为密码实现类似的功能?是的,它们应该很难破解,但最终用户也应该很容易记住它们。组合锁通过混合具有相似声音的数字和具有相似属性的数字来实现这一点(7-17-23:全部素数,17在7之后从舌头上滚下来,23是另一个素数,并且(在该集合之外)是“

前几天在健身房时,我正在使用我的组合锁,我意识到一些东西对我这个程序员来说是有用的。也就是说,我的组合是三组不同的数字,它们要么听起来相似,要么有其他关系,使它们易于记忆。例如,5-15-25,7-17-2,6-24-5。这些例子似乎很容易记住

问题: 我如何为密码实现类似的功能?是的,它们应该很难破解,但最终用户也应该很容易记住它们。组合锁通过混合具有相似声音的数字和具有相似属性的数字来实现这一点(7-17-23:全部素数,17在7之后从舌头上滚下来,23是另一个素数,并且(在该集合之外)是“难以”记住的)

标准
  • 密码应该容易记住<代码>狗!Wolf很容易记住,但一旦攻击者知道您的网站提供了该组合,它就会使检查变得非常容易
  • 单词或字母大部分应跟随相同的发音(大部分)
  • 至少8封信
  • 不使用
    !@$%^&*();'{}}{+?,./
    这些标点符号虽然适用于“硬”密码,但没有“易于记忆”的声音
资源 这个问题与语言无关,但如果有C#的具体实现,我很乐意听到

更新 一些用户说“这是糟糕的密码安全性”不要假设这是针对网站的。这可能只是我为自己制作一个应用程序,根据这些规则生成密码。这里有一个例子

信件 A-C-L-I-M-O-P“流”,它们恰好是两个 规则词组合 (适应Mop)。进一步的 当用户说出这些字母时,或 用一个词来说,这是一个真实的故事 他们的话。容易记住,但是 难以破解(字典攻击, 显然)

这个问题有两个部分的目标:

  • 使用发音相似的字母(使用头韵)或
  • 构造与常用词相似的密码,以生成字典中没有的第三组字母

  • 您可以使用马尔可夫链生成听起来像英语(或您想要的任何其他语言)的单词,但它们不是实际单词

    容易记忆的问题是非常主观的,所以我不认为你能写出这样一个对每个人都有好处的算法


    为什么在网站/计算机应用程序上使用短密码而不是传递短语?它们很容易记住,但很难破解。

    首先要确保密码很长。考虑使用一个“通行短语”,而不是一个“通行字”。打破像“狗和狼互相憎恨”这样的口头禅是很难的,但它们很容易记住

    有些网站可能会给你一些有用的建议,比如(链接自,这本身就是一个有用的工具)


    此外,在某些情况下,一个更好的替代方法不是试图创建易于记住的密码,而是通过使用(并教育用户使用)一个好的密码管理实用程序(请参阅)来避免记住密码-在执行此操作时,剩下的唯一部分是创建一个很容易破解的密码(任何足够长的随机句子都可以)。

    看看。该软件包也可以在Debian/Ubuntu存储库中找到。

    您可能想看看:

    • 中使用并解释的可宣告密码生成算法

    我更喜欢给用户一个“硬”密码,要求他们在第一次使用时更改密码,并指导他们如何构造一个好的长密码短语。我还将结合合理的密码复杂性要求(8+字符、大小写混合、标点符号或数字)。我的理由是,人们更容易记住他们自己选择的东西,如果他们能记住的话,就不太可能把它写在某个地方。

    当你为用户生成密码并通过电子邮件发送时,如果强迫他们更改密码,你第一次登录时应该做的第一件事就是由系统创建的不需要容易记住,因为它们应该只需要一次

    易记、难猜的密码对用户来说是一个有用的概念,但系统不应以某种方式强制执行。假设您向用户的gmail帐户发送密码,而用户在登录后没有更改密码。如果gmail帐户的密码被泄露,则系统的密码m被破坏了


    因此,如果用户必须立即更改密码,那么为用户生成易于记忆的密码是没有帮助的。如果用户不立即更改密码,则会出现其他问题。

    FWIW我非常喜欢将单词音节混在一起,以获得一个简单但基本上是随机的密码。以“邦戈”为例例如,作为一个随机词。交换音节,你会得到“Gobong”。将o替换为顶部的零(或其他一些常见的替换),你会得到一个基本上随机的字符序列,带有一些线索,帮助你记住它


    现在,如何通过编程选择音节——这是一个完全不同的问题!

    系统生成的密码对于内部服务帐户或临时重置(等等)以外的任何东西都是一个坏主意

    你应该始终使用自己的“密码短语”,这些短语很容易记住,但几乎不可能猜测或使用暴力。例如,我以前大学帐户的密码是

    在这里再次学习!

    这是20个字符,使用上下两个字符
    "A specter is haunting Europe - the specter of communism."
    
    asihe-tsoc
    
    #! /bin/bash
    
    RANDOM=$$
    WORDSFILE=./simple-words
    DICTFILE=/usr/share/dict/words
    grep -ve '[^a-z]' ${DICTFILE} | grep -Ee '^.{4,6}$' > ${WORDSFILE}
    N_WORDS=$(wc -l < ${WORDSFILE})
    for i in $(seq 1 20); do
        password=""
        while [ ! "${#password}" -ge 8 ] || grep -qe"^${password}$" ${DICTFILE}; do
            while [ -z "${password}" ]; do
                password="$(sed -ne "$(( (150 * $RANDOM) % $N_WORDS + 1))p" ${WORDSFILE})"
                builtfrom="${password}"
            done
            word="$(sort -R ${WORDSFILE} | grep -m 1 -e "^..*${password:0:1}")"
            builtfrom="${word} ${builtfrom}"
            password="${word%${password:0:1}*}${password}"
        done
        echo "${password} (${builtfrom})"
    done
    
    perl -pe 's/[^a-z]+/\n/gi' ./624425.txt | tr A-Z a-z | sort -u > ./words
    ispell -l ./words | grep -Fvf - ./words > ./simple-words
    
    backgroundied (background died)
    soundecrazy (sounding decided crazy)
    aboupper (about upper)
    commusers (community users)
    reprogrammer (replacing programmer)
    alliterafter (alliteration after)
    actualetter (actual letter)
    statisticrhythm (statistical crazy rhythm)
    othereplacing (other replacing)
    enjumbling (enjoying jumbling)
    feedbacombination (feedback combination)
    rinstead (right instead)
    unbelievabut (unbelievably but)
    createdogso (created dogs so)
    apphours (applications phrase hours)
    chainsoftwas (chains software was)
    compupper (computer upper)
    withomepage (without homepage)
    welcomputer (welcome computer)
    choosome (choose some)
    
    "But I should have known this right from the start"
    
    ahmouryleg
    thasylecta
    tronicatic
    terstabble