繁体   English   中英

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

[英]bash generate secure password with no special characters

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

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

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

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

我不是安全专家,所以我很好奇我的方法是否安全,如果没有,哪种更好的方法呢?

生成任意长度(例如20个字符)且仅包含字母数字字符的密码的安全方法是:

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

如果/dev/random对于您的口味来说太慢,那么以下方法很快,可能已经足够了:

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

与md5sum相比,它具有优势,因为(a)使用所有字母字符,而不仅是af,并且(b)生成大写和小写字母。

有关安全性和urandomrandom的讨论,请参见这篇文章: “何时使用/ dev / random与/ dev / urandom”

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

  • 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个字母数字字符,并且如果有人知道您的密码生成方案,它可能会很快被破解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM