在研究一些安全问题时,有一个问题是可以猜测网络服务器中运行的rand(时间戳)的某些序列的生成。他说我们的第一个目标应该使服务器崩溃(假设服务器将在 1 分钟内启动),我们可以将我们的生成器与服务器同步,然后网络服务器生成的 rand(时间戳)可以与我们的生成器相同。
我很困惑,如果我们有一个函数 rand(时间戳),它是否会依赖于系统时间戳或服务器“正常运行时间”时间戳?
附: 问一个一般性问题 - 如果它是在 JAVA/PHP/ASP 中,则不依赖。只是问网络服务器/编译器如何处理此类代码?
可能是它的模糊问题,但我想澄清一下。
最佳答案
许多 rand()
实现的默认行为是,如果未提供种子值,则使用系统时间作为种子。即使这不是默认行为,也几乎可以保证应用程序会将系统时间传递给 srand() ,作为随机序列的种子。
因此,如果您知道精确的系统时间,则可以生成与远程系统调用 rand()
生成的序列相同的序列。几年前,一家在线赌场遭到使用这种随机序列预测技术的攻击。</p>
解决方案有两个方面:从不可预测的硬件源获取种子(有商业单位)并使用可用的最长伪数生成器。
关于硬件生成器的主题有很多问题,例如:
关于java - 如果在网络服务器上运行,rand(时间戳)如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2248858/