我经常看到.NET class Random用于生成密码。

一方面,this question I asked earlier显示使用class Random生成一堆“ secret ”数据会产生相当可预测的数据。另一方面,我目前正在尝试执行准确的预测,并且我的代码每天在单个内核上以大约六百万次种子猜测的速度运行-速度不是很快,枚举所有可能的种子值将花费大约一年的时间以这样的速度。

有没有更清晰,更快捷的方法来显示使用class Random()数据生成的密码比通常预期的要弱得多?

最佳答案

让我这样说:选择一个足以生成您要生成的密码数量的随机数生成器。
字母大小为36(数字和大写或小写字母)时,您只能提取RNG内部状态的一小部分。即使您以这种方式生成40000个字符,也仍然仅包含21位信息。
在另一个问题中,您的算法除前缀之外仅生成4个随机字符。攻击者更容易暴力破解所有可能的密码,而不是采用暴力破解RNG状态来确定要生成的下一个密码。

实际上,使用简单的RNG生成密码时,您可能犯的最严重错误是生成大量密码。如果仅按需生成它们,并且始终使用新播种的RNG,则攻击者将很难找出种子和密码。 System.Random的默认实现将自系统启动以来耗时(以毫秒为单位)作为种子。祝你好运。

09-25 22:31
查看更多