如果你擁有比特幣,你可能最關心的是余額,而決定余額的是私鑰,所以你最應該關心的,其實是私鑰。當我們談到比特幣安全相關的問題時,我們也會提到私鑰,之前的文章《比特幣的助記符是什么》里提到的助記符,其實也可以理解為私鑰的一種表現形式,但私鑰究竟是什么?也許鮮有人知道。
私鑰是什么
私鑰是一個256位的隨機數
私鑰的定義非常簡單,但其中有2個專業術語可能會使不了解計算機的同學感到困惑,一個是256位,另一個是隨機數,下面內容是該定義的白話文解釋,已經理解了的同學可以跳過:
256位 - 字面上很容易被理解為256個十進制數字,其實不是的,因為計算機是用二進制來存儲和計算的,所以256位指代的是256個二進制數字,下圖是一個例子
隨機數 - 意思是這個數的產生沒有規律
所以
私鑰是一個數字,這個數字可以取從0到22??-1之間的任意值
私鑰可以被破解嗎
看到這里,你可能也會產生和我一樣的疑惑——私鑰也太簡單了把,我隨便寫一個數,只要不超過最大值,就可以用作私鑰,對嗎?是這樣的,沒錯。
那按照私鑰可以算出公鑰,公鑰可以產生地址的邏輯,豈不是我隨便選一個數作為私鑰,然后算出它的地址,如果這個地址上正好有未使用的比特幣,是不是就代表我破解了別人的賬號呢?
年輕人,你說得沒錯,其實我一開始也是這樣想的,雖然現在回想起來覺得有點Naive……
雖然私鑰只是一個簡單的數字,但它仍然很難被破解,原因在于這個數字的集合足夠大,大到我們很難窮盡所有數字,并對它們進行逐一的驗證。2的256次方近似于10的77次方,10的77次方有多大,我再舉個例子你就清楚了
到目前為止,人類可觀測的宇宙中的原子數約為10的80次方
進一步,因為這個數的范圍很大,所以我們能猜中一個正確私鑰的概率就變得非常低,假設地球上使用比特幣的人數達到100億,也就是10的10次方,則你猜中一個比特幣私鑰的概率是
這個概率到底有多小呢,我再給你舉兩個例子:
- "雙色球"一等獎的中獎概率是8×10ˉ?。——摘自《中國福利彩票的中獎概率》
- 從全世界范圍來看(假設全世界人口為70億),一年中每個人遭遇雷擊的概率是175萬分之一(5×10ˉ?)。——摘自中國氣象局-《遭遇雷擊的概率有多高》
說明什么呢?說明
被雷擊中的概率 > 抽中500萬的概率 >> 猜中比特幣私鑰的概率
上面的不等式中,我用了>>
這個符號表示遠遠大于
從概率的角度,我們確實很難破解私鑰,但此時你可能會問,彩票一等獎和被雷擊中很難發生,在于它們發生的頻率很低,但計算機不一樣,計算機的計算速度很快,我們可以很容易的利用計算機的處理速度,來提升猜中私鑰的可能性,也就是快速計算10的67次方個私鑰,總有一次猜中把。
是的,通過這種暴力破解的方法確實可以實現破解比特幣的私鑰,但它要付出的代價也是極其高昂的,下面我們就來做個試驗。
我在我的Macbook Pro 2015版
上運行了一條命令
$ begin=`date +%s`; for ((i=0;i<10;i++));do bx seed | bx ec-new | bx ec-to-public | bx ec-to-address | xargs -I@ ./btc_balance -addr @ > /dev/null; done; end=`date +%s` ; echo `echo "scale=2;$end-$begin" | bc`
15
這條命令看不明白沒關系,我來介紹下它的功能:
這條命令會隨機產生10個比特幣的私鑰和地址,并獲取它的余額,這是暴力破解的基本步驟(其實還差一步判斷余額是否大于0,如果大于0就代表猜中了,但我們這里只預估成本,可以省去這一步),產生10個私鑰的目的是為了利用計算機的并行能力,因為我的CPU有4個核心;這條命令還會輸出程序運行所需要的時間,可以看到最后一行的15表示運行了15秒
利用這個程序的輸出,我們就可以計算出猜中一個私鑰需要花多長時間了,猜10個私鑰需要15秒,那么10??次猜測,需要
注意,經過換算,等式右邊的單位已經是年了,通過簡單的實驗和計算,我們可以估算出,想要暴力破解比特幣私鑰,幾乎是不可能完成的任務。
使用安全的算法產生私鑰
即便私鑰的設計已經足夠安全,但如果使用不當,仍然會產生嚴重的后果,正如統計結果顯示:目前還是有很多人使用1234567
作為他們的賬戶密碼——就是一個典型的例子。
我們不要自己去生成私鑰,最好借用比特幣軟件,例如錢包或bitaddress.org這樣的站點來幫你產生私鑰,這里簡單介紹下這些軟件產生私鑰的原理,大致分為3個步驟:
- 產生一個很長的隨機字符串(隨機源)——例如bitaddress.org網站就是通過捕捉人們滑動鼠標的隨機行為來產生隨機源的。
- 將步驟1的數據輸入到SHA256 hash算法,輸出一個256位的數
- 確保產生的數在私鑰規定的范圍之內,否則重新回到第1步
通過這篇文章,相信你對私鑰有了更深層次的認識,同時也對比特幣的安全性有了足夠的信心,如果這篇文章對你有幫助,作為反饋,你可以在文章后面留言,或給我打賞一丁點代幣 :)
0xf7eA2c5C7cF4E3f384de97109685a02a8ED92BC6