近來不斷有「錢包私鑰暴力破解程式」的傳聞,而比特幣(BTC)從09年誕生至今,已經過去13年了,比目前安全性是否真的沒問題,持有比特幣會被其他人破解後偷走嗎?
(前情提要:慢霧|做市商Wintermute被盜,推導Vanity生成器Profanity私鑰破解 )
(背景補充:MetaMask宣布棄用 2 種生成私鑰 API 方式,打算推出更安全方法 )
最近,朋友圈傳出私鑰探測器的出現,可以碰撞出一個錢包的私鑰,甚至蹭到幣安被盜事件,一些剛接觸web3的用戶,瞬間覺得區塊鏈不安全了,擔心自己的資產安全問題。
真的是這樣嗎?其實幣安被盜,是因為橋的問題,和私鑰洩漏沒有關係。今天,我們來簡單了解下區塊鏈的安全性到底如何。
比特幣從09年誕生至今,已經過去13年了,從一文不值到目前的近2萬美金一枚,總市值3600多億美金。已經完全成長為一個龐然大物,那麼,比特幣目前安全性究竟怎樣,持有比特幣會被其他人偷走嗎?
01私鑰、公鑰、地址
就像銀行取款、網銀轉帳需要輸入密碼一樣,動用錢包裡的比特幣也需要密碼,這個密碼被稱之為「私鑰」。
與「私鑰」對應的是「公鑰」,「公鑰」就像你的銀行帳戶。每個銀行帳戶都有唯一的帳戶編號,也就是銀行卡號。在比特幣網路中,這個銀行卡號就是「地址」。別人只要知道你的「銀行卡號」(即地址),就可以給你轉比特幣了。
在銀行,開戶流程基本是「開設銀行帳戶——給銀行卡號——設置銀行卡密碼——開戶成功」。但在區塊鏈世界裡,是先設置「密碼」(私鑰),再開設「銀行帳戶」(公鑰),最後給「銀行卡號」(地址)。
如果你路上撿到了一張紙條,上面只寫著銀行卡密碼,但沒寫銀行卡號,即便這個銀行卡密碼是真的,你也無法取走相關帳戶裡的錢。
但在區塊鏈世界,你只要知道了別人的「銀行卡密碼」(私鑰),就可以知道別人的「銀行帳戶」(公鑰)和「銀行卡號」(地址),可以取走裡面的幣。
為什麼會這樣呢?
這是因為在區塊鏈中,私鑰通過加密生成公鑰,公鑰轉換一下格式生成地址。也就是說,私鑰可以推導出公鑰,公鑰可以推導出地址。
02 反向推導?沒門!
既然「私鑰可以推導出公鑰,公鑰可以推導出地址」,動用帳戶裡的比特幣又必須輸入「密碼(私鑰)」,那駭客要竊取你錢包裡的比特幣,必須、也只需拿到「私鑰」即可。
理論上,駭客有2種方法竊取你的私鑰:
- 通過地址/公鑰,反向推導出私鑰。
- 一個一個地去試私鑰,也就是暴力破解。
第一種方法並不可行,因為比特幣採用的加密算法,「失之毫釐,差之千里!」。輸入的內容,稍稍變動哪怕一丁點的東西,加密後輸出的結果和之前輸出的結果也有天壤之別,而且這些結果沒有規律可循。
所以,這種加密算法是「單向的」、「不可逆的」,駭客無法通過輸出(地址/公鑰)推導出輸入(私鑰)。
03 暴力破解比特幣私鑰有多難?
既然第一種方法不可行,那第二種方法如何?在回答這個問題之前,我們先看下私鑰是怎麼產生的。
假設你拋硬幣,正面朝上為1,反面朝上為0,連續拋256次,把每次拋的結果記錄下來,再轉換成十六進制數,就是一個比特幣私鑰。
What? 這麼簡單?這麼任性?
沒錯,比特幣的私鑰就是通過程式「拋256次硬幣」,隨機生成的。所以,比特幣私鑰的本質是256位二進制數。
每次拋硬幣,都有正反2面,所以拋256次,一共可以出現「2 x 2 x2 x 2……2 x 2×2」,即256個2相乘,也就是「2的256次方」種結果。所以,比特幣的私鑰總數,理論上有「2的256次方」個。
「2的256次方」是多大呢?它約等於「10的77次方」。那「10的77次方」又是多大呢?
如果我們居住的這個地球,海洋、岩石、地底下的岩漿全部用沙子來填充的話,整個地球的沙子數量大概是「10的30次方」。也就是說,一個和地球一樣大,全部由沙子組成的星球,需要用到「10的30次方」粒沙子。
「10的77次方」比「10的30次方」大「10的37次方」倍,整整37個0。在比一個地球的沙子數量還要多「10的37次方」倍的比特幣私鑰集裡,一個一個地試,破解出某個地址對應的私鑰,簡直比大海撈針還難。
所以,即便駭客有超級電腦,都無法暴力破解比特幣私鑰。
這就是為什麼很多人說,「比特幣第一次通過技術手段,保證了個人的私有財產神聖不可侵犯」。
延伸閱讀:FBI 如何破獲 DarkSide 勒索贖金 , 比特幣私鑰真能被攻破?業內專家給出可能解釋
04 如果比超級電腦還要厲害?
雖然未來的科技如何發展誰都無法準確預測,但如果有一天,人類發明了比超級電腦、量子電腦還要厲害的電腦,比特幣私鑰不就不安全了嗎?
確實,很多人想知道量子電腦到底對比特幣的安全性有沒有威脅,如果有威脅,比特幣有哪些措施可以應對。
鑑於這個問題不是三言兩語能解釋清楚,後面我們會單獨開一篇文章,探討這個問題,敬請期待。
05 結語
當然,安全問題不僅僅牽涉到技術問題,也牽涉到私鑰的保存,錢包授權等問題。如果是因為自己私鑰保存不當,或是電腦中了病毒,或是使用的錢包軟體有漏洞或是有後門,導致私鑰被駭客竊走,那錢包裡的比特幣安全性就無從談起了。
但是,因為自己的失誤導致私鑰被盜,這鍋不能讓比特幣背,不是嗎?
所以,如果有人拿比特幣被盜事件來質疑比特幣的安全性,你會怎麼回答他呢?