随机数关乎比特币私钥安全

2019-03-16 19:46 栏目:经验之谈 来源: 查看()
比特币用户喜欢讨论诸如“非对称加密”,“椭圆曲线”和“量子计算机”等难以理解的主题,然后以一种非常难以理解的方式丢失硬币,例如“随机”。

之前发布的brainwallet.org网站用户的亏钱事件是由于随机功能的问题。

随机性很重要,特别是像比特币这样的加密电子货币。

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

随机数关乎比特币私钥安全

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

毫无疑问,任何知道算法和种子的人,或之前生成的随机数,都可能得到下一个随机数序列的信息。由于它们的可预测性,它们不具有加密安全性,因此我们将其称为“伪随机”。这种随机数用于使游戏中的小人物运行没有太大问题。如果它用于生成比特币私钥,则太不安全了。

我们来谈谈真正的随机数生成器。中文维基将“硬件随机数生成器”(HRNG)与真正的随机数生成器等同起来。这不是很准确。严格意义上的真正随机性可能只存在于量子力学中。我们想要的(或我们想要的)不是随机的。

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

随机数关乎比特币私钥安全

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

因此,在开发程序时,我们应该使用/dev/urandom作为/dev/random的副本,它不会阻塞,但是它的输出熵可能小于/dev/random。

在开发比特币应用程序时,我应该使用什么样的随机数生成器来生成私钥?
答案很简单:urandom。始终只使用urandom。

不要使用任何提供“非常安全”随机功能的第三方随机数解决方案,甚至是一些高级安全库。因为它们是用户模式加密随机数生成器,并且urandom是内核状态随机数生成器,所以内核可以访问原始设备的熵,并且内核可以确保应用程序之间不共享相同的状态。

从历史上看,无数随机数失败案例主要出现在用户状态随机数生成器中,而用户状态随机数生成器几乎总是依赖于内核状态随机数生成器(如果不依赖,那么风险甚至更大。简化了一些开发工作,您没有看到任何额外的好处。相反,它会增加引入第三方代码可能带来的安全风险。

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

微信二维码
售前客服二维码

文章均源于网络收集编辑侵删

提示:仅接受技术开发咨询!

郑重申明:资讯文章为网络收集整理,官方公告以外的资讯内容与本站无关!
NFT开发,NFT交易所开发,DAPP开发 Keywords: NFT开发 NFT交易所开发 DAPP开发