【问题标题】:bash generate secure password with no special charactersbash 生成没有特殊字符的安全密码
【发布时间】:2019-09-03 16:51:25
【问题描述】:

我有一个每天需要使用新密码的 bash 进程。

为避免处理特殊字符,我使用两个$RANDOM 变量乘积的MD5 生成密码:

md5sum <<< $(($RANDOM * $RANDOM))

我的想法是:既然$RANDOM 生成一个介于 0 和 32,767 之间的随机整数,那么生成两个随机整数并将它们相乘会将搜索空间增加到 32,767^2 = 1,071,711,169

我不是安全专家,所以我很好奇我的方法是否相当安全,如果不是,有什么更好的方法?

【问题讨论】:

    标签: linux bash security random passwords


    【解决方案1】:

    生成任何所需长度(例如 20 个字符)且仅由字母数字字符组成的密码的安全方法是:

    cat /dev/random | tr -dc '[:alnum:]' | head -c 20
    

    如果/dev/random 对您的口味来说太慢了,那么以下是快速的并且可能已经足够好:

    cat /dev/urandom | tr -dc '[:alnum:]' | head -c 20
    

    这比 md5sum 有优势,因为 (a) 它使用所有字母字符,而不仅仅是 a-f,并且 (b) 它同时产生大写和小写。

    有关安全性和urandomrandom 的讨论,请参阅此帖子:"When to use /dev/random vs /dev/urandom"

    【讨论】:

      【解决方案2】:

      不,这不太安全。有几个问题:

      • Bash 使用简单的线性随机数生成器,因此它不是强随机数
      • 使用一天中的时间和 pid 对这个生成器进行 Bash 播种,因此,如果您大致知道密码的生成时间(即使只是年份),您的搜索空间已经大大减少了。
      • 从 0..n 乘以两个数字不会给出 n^2 种可能性,因为 1*16 = 2*8 = 4*4 = 8 * 2 = 16*1。一个快速程序显示,对于两个数字 0..32768,您有 232,483,839 种可能的产品。
      • 即使您修复了该问题并确实获得了 1,071,711,169 种可能性,也仅相当于 5 个字母数字字符,如果有人知道您的密码生成方案,也可以很快破解。

      【讨论】:

        猜你喜欢
        • 2015-09-24
        • 2011-09-06
        • 1970-01-01
        • 2023-03-13
        • 2020-10-16
        • 2017-01-15
        • 1970-01-01
        • 2017-09-09
        • 1970-01-01
        相关资源
        最近更新 更多