当前位置:  开发笔记 > 开发工具 > 正文

是否可以使用ping到伪随机选择的IP地址生成真正的随机数?

如何解决《是否可以使用ping到伪随机选择的IP地址生成真正的随机数?》经验,为你挑选了6个好方法。

提出的问题出现在第二年的Comp Science讲座中,同时讨论了在确定性计算设备中生成数字的不可能性.

这是唯一不依赖于非商品级硬件的建议.

随后,没有人会把他们的名声放在最后,无论是支持还是反对.

任何人都愿意支持或反对.如果是这样,如何提及可能的实施?



1> Steve Jessop..:

我会把我的代表放在线上(每个downvote至少2点).

没有.

网络上的恶意计算机可以使用ARP欺骗(或许多其他技术)拦截您的ping并在特定时段后回复它们.然后他们不仅知道你的随机数是什么,他们还会控制它们.

当然,仍有一个问题是你的本地网络是多么具有确定性,所以它可能并不像实际中那么简单.但是,由于你没有从互联网上ping随机IP中获益,你也可以从以太网流量中汲取熵.

从连接到机器的设备中绘制熵是一个经过充分研究的原则,各种设备和测量方法的优缺点可以从例如/ dev/random的实现中窃取.

[ 编辑:作为一般原则,当从事安全基础工作(以及对大量真正随机数据的唯一实际需求是与安全相关的)时,你必须假设一个资源充足的,有决心的攻击者会在他们的破坏你的系统的力量.

为了实际的安全性,您可以假设没有人会非常想要您的PGP密钥,并且需要在安全性与成本之间进行权衡.但是在发明算法和技术时,您需要为他们提供他们可能面临的最强大的安全保障.因为我可以相信某个人,某个地方,可能会非常想要别人的私钥,所以建立这个小工具来打败你的提议,我不能接受它作为对当前最佳实践的推进.AFAIK/dev/random非常接近于在廉价家用PC上生成真正随机数据的最佳实践]

[ 另一个编辑:它在评论中建议:(1)任何TRNG都可以影响物理过程,以及(2)无论如何安全问题都不适用于此.

(1)的答案是,任何现实硬件都可以比ping响应时间更好,并且更快地收集更多熵,这个提议是一个非解决方案.在CS术语中,显然你不能在确定性机器上生成随机数,这就是引发问题的原因.但是在CS术语中,根据定义,具有任何外部输入流的机器是不确定的,所以如果我们谈论ping,那么我们不是在谈论确定性机器.因此,查看真实机器所具有的实际输入是有意义的,并将它们视为随机性的来源.无论您的机器是什么,原始ping时间在可用来源列表中并不高,因此可以排除它们之前可以担心好的更好.

(2)的答案是哲学的.如果你不介意你的随机数具有可以随心所欲而不是偶然选择的属性,那么这个提议就可以了.但这并不是我所理解的"随机"一词.仅仅因为某些东西不一致并不意味着它必然是随机的.

最后,要按要求解决提案的实施细节:假设您接受ping时间为随机,您仍然不能将未处理的ping时间用作RNG输出.你不知道它们的概率分布,它们肯定不是均匀分布的(这通常是人们对RNG的期望).

因此,您需要确定您愿意依赖的每个ping的熵数.熵是随机变量的精确定义的数学属性,可以合理地将其视为实际上"随机"的度量.在实践中,你会找到一个你满意的下限.然后将多个输入散列在一起,并将其转换为小于或等于输入的总依赖熵的多个输出位."总计"并不一定意味着总和:如果输入在统计上是独立的,则它是总和,但这不太可能是ping,因此熵估计的一部分将用于解释相关性.这个哈希操作的老太太被称为"熵收集器",所有优秀的操作系统都有一个.

但是,如果您正在使用数据为PRNG播种,并且PRNG可以使用任意大的种子输入,那么您不必哈希,因为它会为您做到这一点.如果你想知道你的种子价值是多么"随机",你仍然需要估算熵 - 你可以使用世界上最好的PRNG,但它的熵仍然受到种子熵的限制.



2> 小智..:

随机数太重要了,不值一提.

或外部影响/操纵.


+1"随机数太重要了,不值得冒险." 可能是有史以来最好的答案.
"随机数字的产生太重要了,不值得冒险." - 约翰冯诺伊曼

3> Hamish Downe..:

简短的回答

使用ping定时数据本身并不是真正随机的,但它可以用作熵源,然后可以用来生成真正的随机数据.

更长的版本

ping时间有多随机?

就其本身而言,来自网络操作(例如ping)的定时数据将不会均匀分布.(选择随机主机的想法并不实际 - 许多人根本不会做出反应,主机之间的差异可能很大,响应时间范围之间存在差距 - 想想卫星连接).

然而,虽然时间分配不均匀,但数据中会有一定程度的随机性.或者换句话说,存在一定程度的信息熵.将定时数据提供给随机数生成器以播种它是一个好主意.那么存在什么级别的熵?

对于大约50ms的网络定时数据,测量到最接近的0.1ms,扩展值为2ms,您有大约20个值.向下舍入到最接近的2的幂(16 = 2 ^ 4),每个定时值有4位熵.如果它适用于任何类型的安全应用程序(例如生成加密密钥),那么我会保守并且说每次读取只有2或3位熵. (请注意,我在这里做了一个非常粗略的估计,并忽略了攻击的可能性).

如何生成真正的随机数据

对于真正的随机数,您需要将数据发送到根据/ dev/random设计的内容,这些内容将收集熵,将其分布在数据存储中(使用某种散列函数,通常是安全函数).同时增加熵估计.因此,对于128位AES密钥,在熵池具有足够的熵之前将需要64个ping定时.

为了更加健壮,您可以添加键盘和鼠标使用时间数据,硬盘响应时间,主板传感器数据(例如温度)等.它会增加熵收集率,并使攻击者难以监控所有来源熵.事实上,这就是现代系统所做的.MS Windows熵源的完整列表在本文的第二条评论中列出.

更多阅读

对于(计算机安全)的讨论随机数生成器的攻击,以及加密安全随机数生成器的设计,你可以做的不如看的蓍草纸由布鲁斯和约翰·凯尔西.(Yarrow由BSD和Mac OS X系统使用).


"真正随机"与"均匀分布"不同.

4> dbr..:

没有.

拔下网线(或/etc/init.d/networking stop),熵基本上降为零.

在正在ping的计算机上执行拒绝服务攻击,您还可以获得可预测的结果(ping超时值)



5> DGentry..:

我想你可以.有几点需要注意:

即使ping随机IP地址,前几个跳(从您到ISP网络中的第一个真正的L3路由器)对于每个数据包都是相同的.即使您在第一个存在点的数据中心中ping某些内容,这也会使往返时间成为下限.因此,你必须小心规范时间,往返有一个下限.

您还必须小心网络中的流量整形.路由器中的典型漏桶实现每M微秒释放N个字节,这有效地将您的时序扰乱到特定的时隙而不是连续的时间范围.因此,您可能需要丢弃时间戳的低位.

但是,我不同意商品硬件中没有良好的熵源的前提.过去几年中,许多x86芯片组都包含随机数生成器.我熟悉的那些使用相对敏感的ADC来测量芯片上两个不同位置的温度,然后减去它们.可以显示该温差的低阶位(通过卡方分析)是强随机的.当您增加系统的处理负荷时,整体温度会上升,但模具两个区域之间的差异仍然是不相关且不可预测的.



6> 小智..:

我见过的商品硬件随机性的最佳来源是一个从他的网络摄像头上移除过滤器或其他东西的人,在镜头上涂上不透明的胶水,然后能够轻易地检测到撞击CCD的宇宙射线中的单个白色像素.它们尽可能接近完全随机,并通过量子效应保护免受外部窥探.


你认为随机噪音来自何处?
推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有