没有。
您网络上的恶意机器可能会使用 ARP 欺骗(或许多其他技术)来拦截您的 ping,并在特定时间后回复它们。然后他们不仅会知道你的随机数是什么,而且还会控制它们。
当然,您的本地网络的确定性仍然存在问题,因此在实践中可能并不那么容易。但是,由于在互联网上 ping 随机 IP 没有任何好处,因此您不妨从以太网流量中获取熵。
从连接到机器的设备中提取熵是一个经过充分研究的原理,各种设备和测量方法的优缺点可以是例如从 /dev/random 的实现中窃取。
[编辑:作为一般原则,在从事安全基础工作时(并且对大量真正随机数据的唯一实际需求是与安全相关的),您必须假设一个非常好的- 资源丰富、意志坚定的攻击者将竭尽全力破坏您的系统。
为了实际的安全性,您可以假设没有人那么想要您的 PGP 密钥,并在安全性与成本之间进行权衡。但是在发明算法和技术时,你需要给他们最强大的安全保证,这是他们可能面临的。因为我可以相信某个地方的某个人可能非常想要别人的私钥来构建这个工具包来击败你的提议,所以我不能接受它作为对当前最佳实践的进步。 AFAIK /dev/random 非常接近在廉价家用 PC 上生成真正随机数据的最佳实践]
[另一个编辑:它在 cmets 中建议 (1) 任何 TRNG 都可能影响物理过程,并且 (2) 安全问题无论如何都不适用于这里.
(1) 的答案是,在任何实际硬件上都可能比 ping 响应时间好得多,并且可以更快地收集更多熵,因此该提议不是解决方案。在 CS 术语中,很明显您无法在确定性机器上生成随机数,这就是引发问题的原因。但是在 CS 术语中,具有外部输入流的机器在定义上是不确定的,所以如果我们谈论 ping,那么我们就不是在谈论确定性机器。因此,有必要查看真实机器的真实输入,并将它们视为随机性的来源。无论您的机器是什么机器,原始 ping 时间在可用资源列表中都不高,因此可以在担心更好的资源有多好之前排除它们。与假设您自己的硬件没有被破坏相比,假设网络没有被破坏是一个更大(也是不必要的)假设。
(2)的答案是哲学的。如果您不介意您的随机数具有可以随心所欲而不是偶然选择的属性,那么这个建议是可以的。但这不是我对“随机”一词的理解。仅仅因为某些东西不一致并不意味着它一定是随机的。
最后,按照要求解决提案的实施细节:假设您接受随机 ping 时间,您仍然不能使用未处理的 ping 时间作为 RNG 输出。你不知道它们的概率分布,而且它们肯定不是均匀分布的(这通常是人们希望从 RNG 获得的)。
因此,您需要确定您愿意依赖的每个 ping 的熵位数。熵是随机变量的精确定义的数学属性,可以合理地被认为是衡量它实际上有多“随机”的量度。在实践中,您会找到一个您满意的下限。然后将许多输入散列在一起,并将其转换为小于或等于输入的总依赖熵的输出位数。 “总计”并不一定意味着总和:如果输入在统计上是独立的,那么它就是总和,但对于 ping 而言,这不太可能是这种情况,因此您的熵估计的一部分将考虑相关性。这种散列操作的老大哥被称为“熵收集器”,所有好的操作系统都有一个。
但是,如果您使用这些数据来为 PRNG 播种,并且 PRNG 可以使用任意大的种子输入,那么您就不必进行哈希处理,因为它会为您执行此操作。如果你想知道你的种子值有多“随机”,你仍然需要估计熵——你可以使用世界上最好的 PRNG,但它的熵仍然受到种子熵的限制。]