java - 如果在网络服务器上运行,rand(时间戳)如何工作?

标签 java php asp.net security webserver

在研究一些安全问题时,有一个问题是可以猜测网络服务器中运行的rand(时间戳)的某些序列的生成。他说我们的第一个目标应该使服务器崩溃(假设服务器将在 1 分钟内启动),我们可以将我们的生成器与服务器同步,然后网络服务器生成的 rand(时间戳)可以与我们的生成器相同。

我很困惑,如果我们有一个函数 rand(时间戳),它是否会依赖于系统时间戳或服务器“正常运行时间”时间戳?

附: 问一个一般性问题 - 如果它是在 JAVA/PHP/ASP 中,则不依赖。只是问网络服务器/编译器如何处理此类代码?

可能是它的模糊问题,但我想澄清一下。

最佳答案

许多 rand() 实现的默认行为是,如果未提供种子值,则使用系统时间作为种子。即使这不是默认行为,也几乎可以保证应用程序会将系统时间传递给 srand() ,作为随机序列的种子。

因此,如果您知道精确的系统时间,则可以生成与远程系统调用 rand() 生成的序列相同的序列。几年前,一家在线赌场遭到使用这种随机序列预测技术的攻击。<​​/p>

解决方案有两个方面:从不可预测的硬件源获取种子(有商业单位)并使用可用的最长伪数生成器。

关于硬件生成器的主题有很多问题,例如:

关于java - 如果在网络服务器上运行,rand(时间戳)如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2248858/

相关文章:

java - 动态继承命名空间的 XSL 元素

java - 立即属性的错误消息

java - 使用传递的泛型进行 GSON 反序列化

php - 如何将位置过滤器添加到 php/mysql web 应用程序

c# - 如何传递自定义查询结果以在asp.net中查看

html - 列宽不均

java - 删除/替换独生子后 JTree.expandPath 的奇怪问题

php - 为什么在 IIS7 Server 中上传大文件时会出现 Wordpress HTTP ERROR?

php - 监控专用网络网站的正常运行时间

jquery - 使用 iFrame 作为 ASP.NET 页面中的内容区域