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

2024-03-02

提出的问题是在第二年的计算机科学讲座中提出的,当时讨论了在确定性计算设备中生成数字的不可能性。

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

随后,没有人愿意拿自己的声誉来明确支持或反对它。

任何人都愿意表达支持或反对的立场。如果是这样,是否提及可能的实施方式?


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,但它的熵仍然受到种子熵的限制。]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ping 伪随机选择的 IP 地址可以生成真正的随机数吗? 的相关文章

  • Codility 钉板

    尝试了解 Codility NailingPlanks 的解决方案 问题链接 https app codility com programmers lessons 14 binary search algorithm nailing pla
  • 检索受“rowspan”影响的行的列索引的最有效方法是什么?

    考虑下表 table thead tr th th th A th th B th th C th tr thead tbody tr th 1 th td Apples td td Oranges td td Pears td tr tb
  • 最慢的计算复杂度(Big-O)

    在这些算法中 我知道 Alg1 是最快的 因为它是 n 平方的 接下来是 Alg4 因为它是 n 的立方 然后 Alg2 可能是最慢的 因为它是 2 n 这应该具有非常差的性能 然而Alg3和Alg5在我的阅读速度方面还没有遇到过 这两种算
  • 有人可以解释以下异或属性

    我的一个论坛提到给定的数组n数字 arr 0 n 1 以下条件成立 is the xor运算符 f l r f 0 r f 0 l 1 where f l r arr l arr l 1 arr r 我检查了上面的数组数量和不同的值l an
  • 样本()和r样本()有什么区别?

    当我从 PyTorch 中的发行版中采样时 两者sample and rsample似乎给出了类似的结果 import torch seaborn as sns x torch distributions Normal torch tens
  • 在 C# 中生成随机浮点数的最佳方法[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在 C 中生成随机浮点数的最佳方法是什么 更新 我想要从 float Minvalue 到 float Maxvalue 的随机浮点数 我在一些
  • 快速约会算法

    我在一家咨询公司工作 大部分时间都在客户所在地 正因为如此 我很少见到同事 为了更好地了解彼此 我们将安排一个晚宴 会有很多小桌子 方便人们聊天 为了在聚会期间与尽可能多的不同的人交谈 每个人都必须每隔一段时间 比如每小时 换一张桌子 如何
  • 异或交换可以扩展到两个以上的变量吗?

    我一直在尝试将异或交换扩展到两个以上的变量 例如n变量 但我没有得到比这更好的地方3 n 1 对于两个整型变量x1 and x2你可以像这样交换它们 swap x1 x2 x1 x1 x2 x2 x1 x2 x1 x1 x2 所以 假设你有
  • 在常数空间中创建 1..N 的随机排列

    我正在寻找枚举固定空间中数字 1 N 的随机排列 这意味着我无法将所有数字存储在列表中 原因是 N 可能非常大 超过可用内存 我仍然希望能够一次遍历这样一个数字的排列 只访问每个数字一次 我知道对于某些 N 可以这样做 许多随机数生成器随机
  • C# 中的 strstr() 等效项

    我有两个byte 我想找到第二个的第一次出现byte 在第一个byte 或其中的一个范围 我不想使用字符串来提高效率 翻译第一个byte to a string会效率低下 基本上我相信就是这样strstr 在 C 中做 最好的方法是什么 这
  • 具有多个谓词的 C++11 算法

    功能如std find if来自algorithmheader 确实很有用 但对我来说 一个严重的限制是我只能为每次调用使用 1 个谓词count if 例如给定一个像这样的容器std vector我想同时应用相同的迭代find if 多个
  • shell脚本中关联数组的时间复杂度

    我想知道在 shell 脚本中使用关联数组时如何构造 实现 另外 我想知道基于 shell 脚本的关联数组的时间复杂度是否是最佳的 因为我们可以使用字母和数字作为它们各自的键 编辑 他们使用什么哈希函数 如果您使用关联数组 则不能通过 使用
  • 迭代任意大小的子集

    我可以迭代大小为 1 的子集 for int a 0 a lt size a 或大小为 2 的子集 for int a1 0 a1 lt size a1 for int a2 a1 1 a2 lt size a2 or 3 for int
  • 具有 2 个属性的背包算法。如何在 3d 数组中实现它?

    当有超过 1 个属性时 我无法理解背包问题 当有 1 个属性时 我必须编写一个使用具有 2 个属性的背包算法的程序 老师告诉我们 它必须在 3d 数组中完成 错误的实现将导致 O 2 n 处理时间 我无法想象这样的数组会是什么样子 假设这是
  • 在 O(n) 时间内排序?

    我被这个问题困扰了 2周 知道如何处理它吗 令 L 为 n 个不同整数的列表 假设 L 的 x 的元素在 1 750 范围内 设计线性排序算法对 L 的元素进行排序 我已经尝试过插入排序 但我不确定我的方法是否正确 Construct an
  • 用于开始和/或包含搜索的最快字符串集合结构/算法是什么

    我有以下情况 我有一个大的字符串集合 比如说 250 000 平均长度可能是 30 我要做的就是在这些搜索中进行许多搜索 大多数搜索都是 StartsWith 和 Contains 类型的 该集合在运行时是静态的 这意味着选择的集合的初始读
  • 以 O(1) 计算汉明权重 [重复]

    这个问题在这里已经有答案了 在二进制表示中 汉明权重是 1 的数量 我偶然发现了网络并找到了一个 O 1 的答案 v v v gt gt 1 0x55555555 v v 0x33333333 v gt gt 2 0x33333333 in
  • 如何用约束标记一大组“传递群”?

    在 NealB解决方案之后进行编辑 与以下解决方案相比 NealB的解决方案非常非常快任何另一个 https stackoverflow com q 18033115 answers and 提出了关于 添加约束以提高性能 的新问题 Nea
  • 每个术语出现的次数

    我得到了一个数组a n 2 where n can be 10 5最大时有n个科目和n个学生 全部编号为 1 2 n a i 0 and a i 1 1 lt i lt n 表示在第 i 个科目中 所有来自a i 0 to a i 1 通过
  • 二维滑动窗口最小值/最大值

    假设我们得到一个大小为 NxN 的像素整数矩阵和一个整数 k 窗口大小 我们需要使用滑动窗口找到矩阵中的所有局部最大值 或最小值 这意味着 如果某个像素与其周围窗口中的所有像素相比具有最小 最大 值 则应将其标记为最小 最大 有一种著名的滑

随机推荐

  • C++代码可视化

    一种后续 相关问题this https stackoverflow com questions 27857 c c source code visualization 我试图掌握一个拥有数百个类和一个大型继承层次结构的大型代码库 我希望能够
  • 为什么我无法从我的 GitLab 作业连接到 selenium docker-compose 服务?

    我正在 Gitlab CI 中运行 selenium 测试 但在使用 gitlab 运行程序而不是我的计算机时 无法正确设置远程 URL 跑步者的IP地址是192 168 xxx xxx 当我运行管道时 我得到的 selenium hub
  • Webstorm 无法识别 Grunt

    所以我搞砸了删除和安装节点和 npm 来安装没有 sudo 的软件包 现在我无法在 Webstorm 中使用 Grunt 面板 消息是 grunt no color gruntfile Users max repos cb Gruntfil
  • 将布尔值保存在 nsuserdefaults 中

    当我的应用程序启动时 正在播放音乐 void playBgMusic NSString path NSBundle mainBundle pathForResource bgmusic ofType aif theAudio AVAudio
  • 无法通过输入导入协议

    我在 Windows 10 上全新安装了 Python 3 7 32 我想尝试 Protocols python 方法 接下来我会这样做 文件 test protocols py 只有一行 from typing import Protoc
  • Asyncio 协程从未等待错误

    我无法解决和理解这里的问题 我正在使用一个示例来学习 Asyncio 但我使用的代码与我的代码类似 但我的代码给出了一条错误消息 sys 1 运行时警告 从未等待协程 run script 请提供任何帮助 我们将不胜感激 下面是我的代码 a
  • 区分大小写的连接 SQL

    我在这里有点停滞不前 我有一个简单的左外连接到一个返回 ID 的表 我的代码是 Select distinct TenantID Name Name2 TenantNumber Cashname From Tenants LEFT OUTE
  • 如何确定 nsstring 的哪一部分适合矩形?

    这是关于使用核心图形进行 PDF 格式化 但当涉及到在两页上打印字符串时 它可能涉及任何类型的分页 我需要将一个字符串分散到几页上 对于较小的字符串 这不是真正的问题 对于那些我使用 NSString UIKit 扩展的人sizeWithF
  • 在 stat 方法之前检查权限以避免错误

    我第一次尝试遍历目录 但是stat由于似乎缺乏权限 某些目录会抛出错误 Error EPERM operation not permitted stat K System Volume Information 我想避免打电话stat首先在给
  • Rxjs 基于条件的条件 switchMap

    我有这样的情况 myObservable1 pipe switchMap result1 MyObservable1 gt if condition return myObservable2 else return of null subs
  • 通过 PhpMyAdmin 复合外键约束?

    有没有办法通过 PhpMyAdmin 界面向 InnoDB 表添加复合 多列 外键 我已经在目标表中拥有适当的复合主键 并且可以使用单列外键约束 但我无法在界面中找到一种方法来执行复合主键 Table Log Date Service PR
  • 如何通过 API 了解谁在 Google 云端硬盘的共享云端硬盘(团队云端硬盘)中创建了该文件

    所有有权访问共享云端硬盘 团队云端硬盘 的用户都可以访问 Google 云端硬盘中的共享云端硬盘 团队云端硬盘 中的所有文件 默认情况下 在共享云端硬盘 团队云端硬盘 中创建新文件时 所有有权访问共享云端硬盘 团队云端硬盘 的用户也将成为所
  • 带有字符串键的 ASP.Net OData

    我正在尝试使用 ASP Net OData v4 例如 ODataController 来允许访问密钥为字符串的位置 95 的示例使用整数作为键 而我发现讨论使用字符串作为键的步骤的几篇文章对我来说不起作用 在所有情况下 我都尝试使用以下
  • 带零填充数字的 Matlab 文件名

    我有 11x11 矩阵 我将它们保存为 mat文件来自F01 01 to F11 11 我必须运行一个函数Func在每个文件上 由于需要很长时间 我想编写一个脚本来自动运行该函数 for i 01 11 for j 01 11 filena
  • 为属性设置默认值

    是否可以在没有属性主体的情况下设置默认值 最好有注释 SetTheDefaultValueTo true public bool IsTrue get set SetTheDefaultValueTo false public bool I
  • Swift3 sqlite3_open() 打开现有文件

    let file url try FileManager default url for documentDirectory in userDomainMask appropriateFor nil create false appendi
  • 数据帧的频率

    我有一个用日期索引的数据框 Python 日期时间对象 如何找到数据框中数据的月数频率 我尝试了属性data frame index freq 但它返回无值 我也尝试过asfreq函数使用data frame asfreq M how st
  • 防止 Emacs 滚动到缓冲区末尾

    当我用鼠标或滚动条滚动到缓冲区末尾时 是否可以添加任何内容到 emacs 文件中 以防止 emacs 添加新行 我已经有了 setq next line add newlines nil 但这似乎只适用于我用键盘移动时 我对此主题进行了多次
  • 如何通过单击图标更改 font-awesome 图标的颜色

    var garbage document getElementById garbage garbage addEventListener click function garbage style color 66c144 div i cla
  • 使用 ping 伪随机选择的 IP 地址可以生成真正的随机数吗?

    提出的问题是在第二年的计算机科学讲座中提出的 当时讨论了在确定性计算设备中生成数字的不可能性 这是唯一不依赖于非商品级硬件的建议 随后 没有人愿意拿自己的声誉来明确支持或反对它 任何人都愿意表达支持或反对的立场 如果是这样 是否提及可能的实