真随机数和伪随机数的区别 (True Random Number VS Pseudo-random number)
—撰文 | Cobo金库大掌柜
掌柜最近一直有强调安全芯片的重要性,今天就正儿八经的盘一盘安全芯片到底在保护什么。对数字货币原理稍有了解的人,可能都听说过“非对称加密”、“哈希算法”之类的加密学名词,但并不是所有人都知道,这些加密算法背后最重要的核心(没有之一)——随机数。
大家“随机”选择一把私钥,就可以通过私钥用密码学计算出地址,有了地址就能收取数字货币,私钥就能支配这个地址上的数字货币。所以,谁拥有私钥,谁就拥有对应地址在链上的资产。
那么,私钥会不会有一天耗尽?
要解答这个问题,先要看看私钥到底有多少“把”。理论上来说,私钥总共有大约 2 的 256 次方的可能性。这个数大约是 1 后面跟了 77 个零。与之对比,目前可见的宇宙,总共的原子数大概是 1 后面跟了 80 个零。
一篇视频生动解释2的256次方有多少
私钥的可能性有这么多,看来是不会被耗尽了。
可是,会不会碰巧两个人选到同一把私钥?从而 A 转到对应地址的钱,被 B 转走了?
这就引出了私钥随机性的重要性,也就是随机数的重要性。系统都是先得到随机数,然后从随机数再推导出私钥。
目前,林林总总的数字货币钱包,在随机数生成这件事上,逃不出两种方案——伪随机数生成器和真随机数生成器。
伪随机数生成器(pseudo-random number generator,PRNG)在维基百科上有一个更令人担忧的名字,确定性随机数生成器(deterministic-random bit generator ,DRBG)。为什么随机数还会有“确定性”这一说呢?因为伪随机数都来自于“随机种子”(Random Seed),而随机种子是由计算机自带的计数器或者其它数字逻辑产生。这些计数器或者数字逻辑是有一定概率分布的(可能性不是平均分布在 1 到 2 的 256 次方这个区间内)。
所以,在一定程度上,伪随机数是可预测的。
与之相对的,真随机数是由安全芯片通过物理方式生成的,其随机性是不可预测的。
来自维基百科的定义:真随机数生成器(True Random Number Generator, TRNG)是一种通过物理过程而不是计算机程序来生成随机数的设备。这样的设备通常是基于一些能生成低等级、统计学随机的“噪声”信号的微观现象,如热力学噪声、光电效应和量子现象等。这些物理过程在理论上是完全不可预测的,并且已经得到了实验的证实。
由此,我们得到了安全芯片的核心保护对象:私钥的真随机性。安全芯片可以生成真随机数,随机性(安全性)大于非安全芯片生成的伪随机数。
我们前面有反复提到的一个词组——“物理方式生成”。有些同学可能会问,能用“掷骰子”这种“物理”方法吗?答案是可以的。
基于以上,在选购数字货币硬件钱包时,仍有两个知识点需要普及:
- 除了要关注是否有安全芯片以外,还要关注安全芯片是否得到了相关机构的认证。常见的认证体系有两套:FIPS 和 AIS。
- 安全芯片的固件代码是否开源,也是要考察的点。目前已知的硬件钱包中,只有 Cobo 金库和 ColdCard 开源了安全芯片固件代码。Coldcard 的安全芯片固件代码甚至支持用户自行烧录,适合比较硬核的玩家,但是同时也放大了供应链攻击的可能性。出于供应链攻击等方面的考虑,Cobo 金库暂不支持用户自行烧录安全芯片固件。
- 应用安全芯片(保证私钥的真随机性)
- 且安全芯片得到相关机构的认证
- 且安全芯片固件开源
参考链接:
[1] https://en.wikipedia.org/wiki/Random_number_generation
[2] https://en.wikipedia.org/wiki/Pseudorandom_generator
[3] https://en.wikipedia.org/wiki/Hardware_random_number_generator
[4] https://github.com/bitcoinbook/bitcoinbook
本文链接:https://www.8btc.com/media/535013
转载请注明文章出处