加密世界裡最強大的數字:2²⁵⁶
編者按:本文來自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 位加密私鑰安全可能是天文級的
“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 次方”,但仍然是一個異常龐大的數字,所以兩個私鑰相同的可能性超級低,除非有騙子要做壞事。