主页 > imtoken不让安装 > 随机数_科普:真随机数与伪随机数

随机数_科普:真随机数与伪随机数

imtoken不让安装 2024-01-26 05:15:43

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

4d58bf5bc52369f42709e1adc418a136.png

历史上发生过多起各品牌钱包用户丢币的事件,都是因为随机功能出现问题。

随机性非常重要,尤其是比特币这种加密电子货币。 遗憾的是,社区对随机性的讨论不多,导致很多人缺乏正确的认识。 所以,今天我们就和大家聊聊随机性。

说到随机性,有两个概念必须要弄清楚:“真随机数发生器”(TRNG)和伪随机数发生器(PRNG)。

计算机程序和语言中的随机函数大多是伪随机数发生器,它们都是利用一个“种子”(如“时间”)通过确定性算法产生一个“看似随机”的结果。

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

让我们谈谈真正的随机数生成器。 在中文wiki中,将“硬件随机数生成器”(HRNG)等同于真正的随机数生成器是不太准确的。 严格意义上的真正随机性可能只存在于量子力学之中,我们目前想要(或能够想要)的并不是这种随机性。

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

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

因此比特币交易生成器app,在开发程序时,我们应该将/dev/urandom作为/dev/random的一个副本,它不会阻塞,但它的输出熵可能小于/dev/random。

好吧,说了那么多,我们在开发比特币应用的时候应该用什么样的随机数生成器来生成私钥呢?

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

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

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

因此,开发人员在需要加密安全随机数时应使用 urandom。

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

答案是:当然是

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