bash生成没有特殊字符的安全密码

问题描述 投票:0回答:2

我有一个每日bash过程,需要每天使用一个新密码。

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

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

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

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

linux bash security random passwords
2个回答
3
投票

生成任意长度(例如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"


3
投票

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

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