40

加密世界里最强大的数字:2²⁵⁶

 5 years ago
source link: https://36kr.com/p/5194399?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

编者按:本文来自36氪战略合作区块链媒体 “Odaily星球日报 ”(公众号ID:o-daily, APP下载

本文来自 Decentralize.today ,原文作者:Sean

Odaily 星球日报译者 | Moni

NFnuY3J.jpg!web

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.158x10⁷⁷(也就是 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 位加密私钥安全可能是天文级的

qIbEzem.jpg!web

“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-daily 注:简单解释一下“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.46x10⁴⁸或1461501637330902918203684832716283019655932542976。

这个数字有多大呢?目前我们可观测的宇宙宽度为 8.8 x 10²⁶ 或 8.8 x 10²⁹ 毫米,如果我们把一个比特币或以太坊地址看作为 1 毫米,那么其密钥长度相当于超过了可观察宇宙长度的两倍。

对于以太坊来说,其唯一钱包地址实际总量可能是 1.46 x 10⁴⁸,这也引发了一个棘手的问题:我们有 2²⁵⁶ 个可能的私钥却要映射到 2¹⁶⁰ 个可能的公钥上,逻辑告诉我们,每个公钥都可能会有超过 1 个私钥。但即便如此,这也意味着你需要在 2⁹⁶ 个私钥(假设每两个私钥映射一个公钥)中找到能够对应某个地址的公钥哈希——在此,我也许只能祝你好运了!

总结

加密货币私钥的可能值范围非常非常大,即便其可能会略低于 SEC2 标准中定义的“2 的 256 次方”,但仍然是一个异常庞大的数字,所以两个私钥相同的可能性超级低,除非有骗子要做坏事。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK