自动生成的密码中应避免使用的字符

时间:2020-03-05 18:51:09  来源:igfitidea点击:

我需要生成一些密码,我要避免可能使彼此混淆的字符。我应该避免使用明确的字符列表吗?我当前的清单是

il10o8B3Evu![] {}

还有其他容易混淆的字符对吗?对于特殊字符,我将自己限制为数字键下的字符,尽管我知道这取决于键盘国籍!

作为一个骑手的问题,我希望我的密码是" wordlike",我们对此有喜欢的算法吗?

谢谢 :)

解决方案

回答

我的首选方法是获取3、4和5个字母单词的单词列表。然后从中选择至少两个,并在每个单词之间放置一个随机的2位数字或者特殊符号(%&* @#$)。如果需要,我们可以随机将每个单词的大写字母大写。

根据强度要求,我们最终会得到易于记住的信息并传达密码,例如:

  • Lemon%desk
  • 纸&boy32hat

请记住,我们偶尔会得到有趣或者不恰当的单词组合(我会让我们发挥想象力)。我通常有一个按钮,如果不喜欢所提供的密码,则可以生成一个新密码。

通常,仅使用人们通常知道其名称的符号。在美国标准键盘上,我会避免〜`'/ \ ^

我想这比主要问题更能回答车手问题。 ..

祝你好运!

回答

要添加到吉姆的答案中,我们还可以使用单词列表,并用符号随机替换某些字符(@表示A,A表示0(零),O表示5),和/或者从单词中删除元音。

  • lmn%服务台
  • p @ per&b0y32H @ t

仍然大部分是人类可读的。

回答

这是Steve Gibson用于其" Perfect Paper Password"系统的字符集。它们是"允许使用的字符",而不是"避免使用的字符",但是对于我们想要的东西来说,它们似乎很合理:

标准的64个字符集

!#%+23456789:=?@ABCDEFGHJKLMNPRS
TUVWXYZabcdefghijkmnopqrstuvwxyz

更大的88个字符集

!"#$%&'()*+,-./23456789:;<=>?@ABCDEFGHJKLMNO
PRSTUVWXYZ[\]^_abcdefghijkmnopqrstuvwxyz{|}~

对于明显的密码,我对算法不熟悉,但是我们可能希望以APG和pwgen作为起点。

回答

作为另一种选择,我们可以使用等宽字体/终端字体(例如courier)来打印密码。相似的字符应该以这种方式更具区别性。

回答

阅读选择安全密码。

从那里开始,一个有趣的花絮:为了获得更安全的密码,请确保在中间出现一些数字和特殊字符。破解程序会在开始时检查它们,并尽快结束它们。

回答

我不喜欢单词表方法。例如,在OSX上的/ usr / share / dict / words中,有5110个4个字符的单词。将它们中的两个与分隔符一起使用会产生约600M的组合。但是,如果我们直接将字符集与强大的随机数生成器一起使用,则可能会有88 ^ 9个密码,3.16e + 17组合。

无论哪种方式,针对此系统的可能攻击都将针对随机数生成器,因此请确保我们使用的是加密强度高的密码。如果使用PHP的标准rand函数,则将通过注册和重置成千上万的密码来采样RNG状态然后预测剩余的RNG状态来对其进行攻击,这将减少攻击者需要测试的可能的密码数量。

回答

对于人类可读的密码,我最近使用了一个与以下脚本非常相似的PHP脚本。运作良好。诚然,密码并不会变得非常安全(因为它们容易受到字典攻击),但是对于可记忆或者至少可读的密码而言,它很好用。但是,此功能不应按原样使用,它比其他任何东西都更能说明问题。

function generatePassword($syllables = 2, $use_prefix = true)
{

    // Define function unless it is already exists
    if (!function_exists('arr'))
    {
        // This function returns random array element
        function arr(&$arr)
        {
            return $arr[rand(0, sizeof($arr)-1)];
        }
    }

    // Random prefixes
    $prefix = array('aero', 'anti', 'auto', 'bi', 'bio',
                    'cine', 'deca', 'demo', 'dyna', 'eco',
                    'ergo', 'geo', 'gyno', 'hypo', 'kilo',
                    'mega', 'tera', 'mini', 'nano', 'duo',
                    'an', 'arch', 'auto', 'be', 'co',
                    'counter', 'de', 'dis', 'ex', 'fore',
                    'in', 'infra', 'inter', 'mal', 
                    'mis', 'neo', 'non', 'out', 'pan',
                    'post', 'pre', 'pseudo', 'semi',
                    'super', 'trans', 'twi', 'vice');

    // Random suffixes
    $suffix = array('dom', 'ity', 'ment', 'sion', 'ness',
                    'ence', 'er', 'ist', 'tion', 'or',
                    'ance', 'ive', 'en', 'ic', 'al',
                    'able', 'y', 'ous', 'ful', 'less',
                    'ise', 'ize', 'ate', 'ify', 'fy', 'ly'); 

    // Vowel sounds 
    $vowels = array('a', 'o', 'e', 'i', 'y', 'u', 'ou', 'oo', 'ae', 'ea', 'ie'); 

    // Consonants 
    $consonants = array('w', 'r', 't', 'p', 's', 'd', 'f', 'g', 'h', 'j', 
                        'k', 'l', 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'qu');

    $password = $use_prefix?arr($prefix):'';
    $password_suffix = arr($suffix);

    for($i=0; $i<$syllables; $i++)
    {
        // selecting random consonant
        $doubles = array('n', 'm', 't', 's');
        $c = arr($consonants);
        if (in_array($c, $doubles)&&($i!=0)) { // maybe double it
            if (rand(0, 2) == 1) // 33% probability
                $c .= $c;
        }
        $password .= $c;
        //

        // selecting random vowel
        $password .= arr($vowels);

        if ($i == $syllables - 1) // if suffix begin with vovel
            if (in_array($password_suffix[0], $vowels)) // add one more consonant 
                $password .= arr($consonants);

    }

    // selecting random suffix
    $password .= $password_suffix;

    return $password;
}

回答

几年前,对于一个国际客户,我必须生成随机的安全密码,然后由我的客户将其邮件合并到文档中,然后通过邮寄给40个国家/地区的收件人。不知道文档中将使用哪种字体,我使用了像Steve Gibson 64个字符集这样的字符列表来消除相似字形之间的混淆。

为了使产生的密码清晰可辨,从而更容易记住,我将辅音和元音配对在一起,并在组合中添加了一些辅音字母(sh,th,wh等)。

为了减少产生不适当或者令人反感的单词(用英语或者用接收者的语言表示)的机会,我将连续的字母字符的行数限制为两个,并在数字或者标点符号之间加上两个字母:

Es4tU$sA6
wH@cY8Go2

现在回头看我的方法,我意识到不适当性算法还有改进的空间。使用上述规则,由于某些数字和标点符号可以代替字母,因此某些冒犯性的单词是可能的。

回答

一种开始的方法可能是生成最有效的英语音节,将它们混合,然后进行text-> l33t转换。关于代际自然语言语法的工作已经完成,因此其中之一可能会有所帮助。

例如。啊,所有都是有效的音节或者接近它的音节...将它们混合-> Ingulah ... l33t it-> 1ngu4h。是那里最好的吗?没事但是至少它是半读的(如果我们说的是33t),并且在计算上更安全。

回答

在我的(电气工程,技术)研究生院,我假设所有计算机帐户均使用由标准linux实用程序生成的密码初始化。它们由三个随机音节组成,每个音节中都有三个小写字母。结果是相当安全的(大约数十亿种可能的组合),而且非常明显,以至于十年后我仍然使用其中一些密码。詹姆斯的例子很好地说明了这一点。

网络安全专家对密码进行的一般评论:密码糟糕透顶,原因有几个,其中包括:

  • 通常,无论是通过社交工程还是使用攻击软件,都很容易损坏,特别是如果我们对目标有所了解时。示例1:我最近需要修改受密码保护的技术文档。查看日期,我知道当时我们的技术作家是谁,输入了我想到的第一个单词,然后立即将文档解锁。示例2:标准的密码破解程序允许破解者指定一组在用户提供的字典上运行的规则。用$ ymb01 $替换某些字母,或者将其转换为1337等,这很简单。
  • 不是"安全"密码。考虑到大多数人需要记住的大量密码,"记住"诸如" a4 $ N!8_q"之类的"强"密码的最常见方法是将其写在纸上(或者更糟的是将其存储在文本文件)。纳夫说。

如果我们需要真正安全的身份验证,则多因素(或者两因素)是行业认可的机制。 "两个因素"通常是我们拥有的东西(例如门禁卡)和我们知道能够启用它的东西(例如PIN)。任何一个都离不开另一个-我们需要两者。

另一方面,请考虑我们真正需要的安全级别。你在保护什么? "坏家伙"想要得到它的程度有多大,如果这样做会带来什么后果?可能是" Its @ Secret!"绰绰有余。 :-)

回答

如果我们想生成明显的密码,可以在以下位置找到Cport:
http://www.hoogervorst.ca/arthur/?attachment_id=1708

在代码中,我们将找到有用的链接以了解更多信息。
http://www.multicians.org/thvv/gpw.html

祝你好运。
詹姆士