本文来自 Decentralize.today,原文作者:Sean
Odai** 星球日报译者 | Moni
2²⁵⁶ 是 2 的 256 次方。
对于区块链和加密行业来说,这个数字又代表了什么意义呢?
我们知道,计算机都是基于二进制数字计算的。下面是一个示例,如果以两位数字表示的话,每位上的数字只能用“0”或“1”,那么我们可以产生下面四种可能的组合(注意我们计数是从 0 开始的):
00 = 0
01 = 1
10 = 2
11 = 3
如果以位数是 3,那么可能的二进制组合就有九种,即“2 的 3 次方”,如下所示:
000 = 0
001 = 1
010 = 2
011 = 3
100 = 4
101 = 5
110 = 6
101 = 7
111 = 8
如果位数有 256 个,那么就意味着有“2 的 256 次方”种可能的二进制组合,这也是一个非常非常大的数字组合!那么,“2 的 256 次方”在十进制中是什么样子呢?请不要眨眼,**就是:
115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,936
简单表示的话,就是 1.158×10⁷⁷(也就是 1158 后面有 74 个 0),即“1.158 乘 10 的 77 次方”。
如果你无法直观了解“2 的 256 次方”——即“1.158 乘 10 的 77 次方”有多大的话,我们在此做一个比较,或许能让你更清楚地了解这个数字的“可怕”,相比之下:
1、地球上的沙子总数量只有为“7.5乘 10 的 15 次方”;
2、在“可观察”的宇宙里,估计有“30 乘 10 的 21 次方”到“70 乘 10 的 21 次方”或“10 乘 10 的 23 次方”颗恒星;
3、在“可观察”的宇宙里,估计有“1 乘 10 的 78 次方”到“1 乘 10 的 83 次方”个原子。
所以,“2 的 256 次方”是可观察的宇宙中所有恒星总量的 3.5 倍,仅比可观察宇宙中的原子总量“少几个零”。
“2 的 256 次方”非常重要,因为它是加密技术在区块链中可能使用的私钥值的全部“感知”范围。
在加密货币世界里,如果要破解一个 256 位的加密安全系统,就必须要猜对一个 256 位的比特串,而且还要猜对两次,第一次要在电子签名的时候,第二次是在解密码哈希函数的时候。
举个例子,如果你想找到一条信息,让它的 SHA256 哈希值等于某个 256 位比特串的话,基本上没有别的好办法,只能随机猜测并检验结果——这意味着,平均下来,你需要尝试“2 的 256 次方”次!(除非你的运气非常非常非常…好,好到拥有了“2 的 256 次方”分之一次的运气)
“2 的 256 次方”这个数字比我们通常遇到的数字都要大得多,因此很难去体会它的规模,但你可以把它看作是“2 的 32 次方和自己相乘 8 次”,这样想会让你容易理解,因为“2 的 32 次方”大约等于 40 亿(4,294,967,296)。现在,我们要做的就是去体会一下 40 亿连续乘 8 次是怎样的概念:
相信我们大多数人都知道,计算机里的 GPU 可以飞快地进行大量并行计算,因此要是你专门让 GPU 反复计算密码哈希函数,一个性能很好的 GPU 每秒也许能算出接近 10 亿个哈希值,假如你拥有一堆这样的 GPU,然后全部塞进计算机里,让你的计算机每秒能计算出 40 亿个哈希值,那么最开始的 40 亿就代表了每台计算机每秒算出的哈希值数目,想象一下 40 亿台这样满载 GPU 的计算机——对比一下,虽然谷歌没有对外公布他们的服务器数量,但有人估算大约有几百万台,而现实中谷歌的大部分服务器算力都不如我们满载 GPU 的电脑,不过我们假设谷歌把上百万个服务器全部换成满载 GPU 的计算机,那么 40 亿台计算机大概就相当于 1000 个这种“打了鸡血”的谷歌,为了更好地解释,我们暂时把这种算力成为“千谷歌(thousand Google)”。
现在,全世界人口总数大约有 73 亿,接下来,我们假设有 40 亿人人手都拥有一台这样的“千谷歌”计算机。然后,再想象一下有 40亿 个地球(作为对比,银河系检测到的恒星数量大约为 1000-4000 亿颗,虽然不太确定,但估算大致就在这个范围),所以相当于银河系 1% 的恒星会有一个地球,并且这个地球上超过一半的人口都拥有自己的“千谷歌”计算机。
接着想象有 40 亿个这样的银河系,我们把它叫做“亿万星系超级计算机”,每秒能猜“2 的 160 次方”次。下面,40 亿秒大概是 126.8 年,而它的 40 亿倍就是 5070 亿年,差不多是宇宙年龄的 37 倍,所以就算你有——满载 GPU 的 40 亿台计算机 40 亿人手一台“千谷歌”计算机 40 亿个像地球一样的行星 亿万星系超级计算机,再花上 37 倍宇宙年龄的时间,也只有 40 亿分之一的可能性得到密钥的正确**。
顺便提一下,目前比特币的哈希算力——把所有矿工都加起来,每秒能猜测并检验 500 亿亿个哈希值,只相当于之前提到的“千谷歌”计算机算力的三分之一。当然这并不是因为真的有几十亿台满载 GPU 的计算机,而是因为矿工使用的是比 GPU 算力强 1000 倍左右的芯片,它叫做“专用集成电路(ASIC)”,这些硬件是为比特币挖矿量身定做的,但这种芯片什么都不会做,只会计算基于 SHA256 算法的哈希值。换句话说,如果你想获得庞大的算力,就不得不放弃一般的计算需求,去设计一个只能执行一个单一任务的集成电路。
难道每个加密货币都有“2 的 256 次方”个可能的私钥吗?
不完全是这样,并非所有“2 的 256 次方”范围内的数字都会用在查找匹配公钥的数字曲线上。比特币和以太坊(以及其他许多加密货币)使用的是 secp256k1 椭圆曲线,该区先定义的公钥匹配范围略小于“2 的 256 次方”。如果再略微准确地表达 secp256k1 椭圆曲线数字范围的话,可能这个结果是:
432420386565659656852420866394968145599
按照 SEC2 标准的定义,其密钥数值范围是从“0”到 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141,假设我们用“N”来代表这个数值,那么用十进制表达N的话:
N=115792089237316195423570985008687907852837564279074904382605163141518161494336
2²⁵⁶-N = 432420386565659656852420866394968145599
在数学上,这是一个近似值的问题,就好像我们会把100亿减10的结果看作仍是100亿一样。
(星球君 o-dai** 注:简单解释一下“secp256k1”的含义,它其实是“SEC”、“P”、“256”、“K”和“1”这几个字母和数字的组合,每个都有不同的含义:其中“SEC”代表了 SEC2 高效密码学的标准,“P”代表曲线坐标是素数域,“256”表示素数是 256 位长,“K”表示它是所谓 Koblitz 曲线的变量,“1”表示它是该类型的第一个、也是唯一的曲线标准。)
稍等,除了比特币,我们再来看看以太坊的密钥
比特币地址是公共地址的 RIPEMD-160,RIPEMD是一种加密哈希函数,由鲁汶大学 Hans Dobbertin,Antoon Bosselaers 和 Bart Prenee 组成的 COSIC 研究小组于 1996 年发布的。 RIPEMD 是以 MD4 为基础原则所设计,而且其表现与更有名的 SHA-1 类似。RIPEMD-160 是以原始版 RIPEMD 所改进的 160 位元版本,而且是 RIPEMD 系列中最常见的版本。 RIPEMD-160 是设计给学术社群所使用的,刚好相对于 SHA-1 和 SHA-2 算法。 另一方面,RIPEMD-160 比 SHA-1 较少使用,所以可能时候 RIPEMD-160 比 SHA 不常被审查的原因之一。另外,RIPEMD-160 并没有任何专利所限制。
同时也存在着 128,256,320 位元的这种算法,称为 RIPEMD-128、RIPEMD-256 和 RIPEMD-320。 128 位版本的用意仅是取代原始版RIPEMD,因为原版也同样是 128 位元,并且被发现有潜在的安全问题。 而 256 和 320 位版本只有减少碰撞发生的机率,但没有提升安全等级。不过,RIPEMD 的设计者们没有真正设计 256 和 320 位元这两种标准,他们只是在 128 位元和 160 位元的基础上,修改了初始参数和 s-box 来达到输出为 256 和 320 位元。所以,256 位的强度和 128 相当,而 320 位的强度和 160 位相当,且 RIPEMD 建立在 md 的基础之上,所以其添加数据的方式和 md5 完全一样。
以太坊将密钥长度减少到 160 位,这仍然是一个非常大的数字,以十进制表示的话,就是:
2¹⁶⁰= 1.46×10⁴⁸或1461501637330902918203684832716283019655932542976。
这个数字有多大呢?目前我们可观测的宇宙宽度为 8.8 x 10²⁶ 或 8.8 x 10²⁹ 毫米,如果我们把一个比特币或以太坊地址看作为 1 毫米,那么其密钥长度相当于超过了可观察宇宙长度的两倍。
对于以太坊来说,其唯一钱包地址实际总量可能是 1.46 x 10⁴⁸,这也引发了一个棘手的问题:我们有 2²⁵⁶ 个可能的私钥却要映射到 2¹⁶⁰ 个可能的公钥上,逻辑告诉我们,每个公钥都可能会有超过 1 个私钥。但即便如此,这也意味着你需要在 2⁹⁶ 个私钥(假设每两个私钥映射一个公钥)中找到能够对应某个地址的公钥哈希——在此,我也许只能祝你好运了!
总结
加密货币私钥的可能值范围非常非常大,即便其可能会略低于 SEC2 标准中定义的“2 的 256 次方”,但仍然是一个异常庞大的数字,所以两个私钥相同的可能性超级低,除非有骗子要做坏事。