如何演示.NET类Random不适合生成密码?

sha*_*oth 5 .net c# random

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

一方面,我之前提到的这个问题表明,使用class Random产量而非可预测的数据生成一堆"秘密" 数据.另一方面,我目前正在尝试执行那个确切的预测,我的代码在一个核心上以每天大约六百万个种子猜测的速度运行 - 不是非常快,所以可能需要将近一年的时间来枚举所有可能的种子值以这个速度.

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

Lia*_*iam 0

根据我的理解,该类Random根据“伪随机算法”生成随机值,因此实际上它们并不是随机的。它们基于数学算法的具体实现,因此结果是可预测的。

因此,如果我试图打破这个算法,为了安全漏洞,而不是我愿意,我需要知道某些信息:我知道该算法是什么,它可以通过 .Net 框架公开访问,输入值是什么(种子)?

同样,您不能只是对这些输入值进行魔法,它们必须基于某些东西,那又怎样呢?

在您的示例中,据我了解,您尝试生成所有可能的种子值。像你说的这个需要很长时间!

但我为什么要这样做呢?最聪明的方法是尝试猜测您使用什么来生成输入值?即你在利用时间吗?密码什么时候重置?这个密码是什么时候生成的?这给了我什么价值子集?你用的是多大的号码?

如果您可以在一天内测试 600 万颗种子,那么应用某种逻辑可以将可能值集缩小到多少个值?如果小于 600 万,我可以在 24 小时内破解你的密码。

也就是说,如果你能让你的种子子集足够大并且足够不可预测,那么这就很难了。所以问题是,就像安全领域的许多事情一样,这需要有多安全?没有什么是100%的!