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