如果你擁有比特幣,你可能最關心的是余額陌凳,而決定余額的是私鑰剥懒,所以你最應該關心的,其實是私鑰合敦。當我們談到比特幣安全相關的問題時初橘,我們也會提到私鑰,之前的文章《比特幣的助記符是什么》里提到的助記符充岛,其實也可以理解為私鑰的一種表現(xiàn)形式保檐,但私鑰究竟是什么?也許鮮有人知道裸准。
私鑰是什么
私鑰是一個256位的隨機數(shù)
私鑰的定義非常簡單展东,但其中有2個專業(yè)術語可能會使不了解計算機的同學感到困惑,一個是256位炒俱,另一個是隨機數(shù)盐肃,下面內(nèi)容是該定義的白話文解釋爪膊,已經(jīng)理解了的同學可以跳過:
256位 - 字面上很容易被理解為256個十進制數(shù)字,其實不是的砸王,因為計算機是用二進制來存儲和計算的推盛,所以256位指代的是256個二進制數(shù)字,下圖是一個例子
隨機數(shù) - 意思是這個數(shù)的產(chǎn)生沒有規(guī)律
所以
私鑰是一個數(shù)字谦铃,這個數(shù)字可以取從0到22??-1之間的任意值
私鑰可以被破解嗎
看到這里耘成,你可能也會產(chǎn)生和我一樣的疑惑——私鑰也太簡單了把,我隨便寫一個數(shù)驹闰,只要不超過最大值瘪菌,就可以用作私鑰,對嗎嘹朗?是這樣的师妙,沒錯。
那按照私鑰可以算出公鑰屹培,公鑰可以產(chǎn)生地址的邏輯默穴,豈不是我隨便選一個數(shù)作為私鑰,然后算出它的地址褪秀,如果這個地址上正好有未使用的比特幣蓄诽,是不是就代表我破解了別人的賬號呢?
年輕人媒吗,你說得沒錯仑氛,其實我一開始也是這樣想的,雖然現(xiàn)在回想起來覺得有點Naive……
雖然私鑰只是一個簡單的數(shù)字闸英,但它仍然很難被破解调衰,原因在于這個數(shù)字的集合足夠大,大到我們很難窮盡所有數(shù)字自阱,并對它們進行逐一的驗證。2的256次方近似于10的77次方米酬,10的77次方有多大沛豌,我再舉個例子你就清楚了
到目前為止,人類可觀測的宇宙中的原子數(shù)約為10的80次方
進一步赃额,因為這個數(shù)的范圍很大加派,所以我們能猜中一個正確私鑰的概率就變得非常低,假設地球上使用比特幣的人數(shù)達到100億跳芳,也就是10的10次方芍锦,則你猜中一個比特幣私鑰的概率是
這個概率到底有多小呢,我再給你舉兩個例子:
- "雙色球"一等獎的中獎概率是8×10ˉ?飞盆÷α穑——摘自《中國福利彩票的中獎概率》
- 從全世界范圍來看(假設全世界人口為70億)次乓,一年中每個人遭遇雷擊的概率是175萬分之一(5×10ˉ?)∧跛——摘自中國氣象局-《遭遇雷擊的概率有多高》
說明什么呢票腰?說明
被雷擊中的概率 > 抽中500萬的概率 >> 猜中比特幣私鑰的概率
上面的不等式中,我用了>>
這個符號表示遠遠大于
從概率的角度女气,我們確實很難破解私鑰杏慰,但此時你可能會問,彩票一等獎和被雷擊中很難發(fā)生炼鞠,在于它們發(fā)生的頻率很低缘滥,但計算機不一樣,計算機的計算速度很快谒主,我們可以很容易的利用計算機的處理速度朝扼,來提升猜中私鑰的可能性,也就是快速計算10的67次方個私鑰瘩将,總有一次猜中把吟税。
是的,通過這種暴力破解的方法確實可以實現(xiàn)破解比特幣的私鑰姿现,但它要付出的代價也是極其高昂的肠仪,下面我們就來做個試驗。
我在我的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
這條命令看不明白沒關系备典,我來介紹下它的功能:
這條命令會隨機產(chǎn)生10個比特幣的私鑰和地址异旧,并獲取它的余額,這是暴力破解的基本步驟(其實還差一步判斷余額是否大于0提佣,如果大于0就代表猜中了吮蛹,但我們這里只預估成本,可以省去這一步)拌屏,產(chǎn)生10個私鑰的目的是為了利用計算機的并行能力潮针,因為我的CPU有4個核心;這條命令還會輸出程序運行所需要的時間倚喂,可以看到最后一行的15表示運行了15秒
利用這個程序的輸出每篷,我們就可以計算出猜中一個私鑰需要花多長時間了,猜10個私鑰需要15秒端圈,那么10??次猜測焦读,需要
注意,經(jīng)過換算舱权,等式右邊的單位已經(jīng)是年了矗晃,通過簡單的實驗和計算,我們可以估算出宴倍,想要暴力破解比特幣私鑰张症,幾乎是不可能完成的任務仓技。
使用安全的算法產(chǎn)生私鑰
即便私鑰的設計已經(jīng)足夠安全,但如果使用不當吠冤,仍然會產(chǎn)生嚴重的后果浑彰,正如統(tǒng)計結果顯示:目前還是有很多人使用1234567
作為他們的賬戶密碼——就是一個典型的例子。
我們不要自己去生成私鑰拯辙,最好借用比特幣軟件郭变,例如錢包或bitaddress.org這樣的站點來幫你產(chǎn)生私鑰,這里簡單介紹下這些軟件產(chǎn)生私鑰的原理涯保,大致分為3個步驟:
- 產(chǎn)生一個很長的隨機字符串(隨機源)——例如bitaddress.org網(wǎng)站就是通過捕捉人們滑動鼠標的隨機行為來產(chǎn)生隨機源的诉濒。
- 將步驟1的數(shù)據(jù)輸入到SHA256 hash算法,輸出一個256位的數(shù)
- 確保產(chǎn)生的數(shù)在私鑰規(guī)定的范圍之內(nèi)夕春,否則重新回到第1步
通過這篇文章未荒,相信你對私鑰有了更深層次的認識,同時也對比特幣的安全性有了足夠的信心及志,如果這篇文章對你有幫助片排,作為反饋,你可以在文章后面留言速侈,或給我打賞一丁點代幣 :)
0xf7eA2c5C7cF4E3f384de97109685a02a8ED92BC6