編者按:本文來自36氪戰略合作區塊鏈媒體「Odaily星球日報」(公眾號ID:o-daily,APP下載)
本文來自 Decentralize.today,原文作者:Sean
Odaily 星球日報譯者 | 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.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 位的加密安全系統,就必須要猜對一個 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 次方」範圍內的數字都會用在查找匹配公鑰的數字曲線上。比特幣和以太坊(以及其他許多加密貨幣)使用的是 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 次方」,但仍然是一個異常龐大的數字,所以兩個私鑰相同的可能性超級低,除非有騙子要做壞事。