主页 > imtoken里的ht > 科学:真随机数和伪随机数

科学:真随机数和伪随机数

imtoken里的ht 2023-05-29 07:29:25

比特币用户喜欢讨论“非对称加密”、“椭圆曲线”、“量子计算机”等高深莫测的话题,然后以一种非常莫名其妙的方式丢失他们的硬币,例如:“随机”。

科普:真随机数和伪随机数

历史上各种品牌的钱包用户丢币的案例很多,都是因为随机功能的问题。

比特币生成器工具

随机性非常重要,尤其是对于加密电子货币比特币。可惜社区里关于随机性的讨论不多,导致很多人缺乏正确的认识。因此,我们今天将与您聊聊随机性。

说到随机性,有两个概念是必须要理解的:“真随机数生成器”(TRNG)和伪随机数生成器(PRNG)。

大多数计算机程序和语言中的随机函数都是伪随机数生成器,它们都是由确定性算法通过“种子”(如“时间”)生成“外观”来生成的。随机”结果。

比特币生成器工具

毫无疑问,任何知道算法和种子,或者之前已经生成的随机数的人,都可以获得关于下一个随机数序列的信息。由于它们的可预测性,它们在密码学上并不安全比特币生成器工具,因此我们称它们为“伪随机”。这种随机数对于游戏中的反派逃跑来说不是什么大问题。如果用来生成比特币私钥,太不安全了。

我们来谈谈真正的随机数生成器。在中文维基中,“硬件随机数发生器”(HRNG)等于真随机数发生器,不是很准确。随机性可能只存在于量子力学中,而我们目前想要(或能够想要)的并不是这种随机性。

我们实际上想要一个不可预测的、统计的、加密安全的随机数,任何可以做到这一点的随机数生成器都可以称为真随机数生成设备。这种随机性不一定是专门设计的硬件。 Linux 操作系统内核中的随机数生成器(/dev/random)维护了一个熵池(收集硬件噪声,如键盘、鼠标操作、网络信号强度的变化等),使其能够提供最大可能随机数据熵,所以它也是一个高质量的真随机数生成器。

比特币生成器工具

但是 /dev/random 是阻塞的,也就是说,如果熵池是空的,对 /dev/random 的读取将被暂停,直到收集到足够的环境噪声。

所以在开发程序的时候,我们应该使用/dev/urandom,作为/dev/random的一个拷贝,它不会阻塞,但是它的输出熵可能比/dev/random少。

好吧,说了这么多,我们在开发比特币应用程序时应该使用什么随机数生成器来生成私钥?

比特币生成器工具

答案很简单:urandom。始终只使用 urandom。

不要使用任何声称“非常安全”的随机函数的第三方随机数解决方案,甚至是一些高级安全库。因为它们都是用户态的密码随机数生成器,而 urandom 是内核态的随机数生成器,内核可以访问原始设备的熵,内核可以保证相同的状态不会在应用程序之间共享。

历史上,随机数失败的案例数不胜数,大多发生在用户态随机数生成器中,而用户态随机数生成器几乎总是依赖内核态随机数生成。 (如果你不依赖它,风险更大),除了它可能会简化你的一些开发工作,根本没有额外的好处,反而增加了引入第三方带来的潜在安全风险——党的代码。 .

比特币生成器工具

因此比特币生成器工具,开发人员在需要加密安全随机数时应使用 urandom。

最后有小朋友问,你的BITHD硬件钱包生成的随机数是真的吗?

这里回答:当然是~

BITHD的芯片有一个硬件随机数发生器,它会通过获取物理噪声源来产生真正的随机数,这是不可能的。无法检测到的预测是随机性的真正来源。