比特幣數學原理與潛在安全問題

 數學
  今年初我偶然跟一個朋友討論到比特幣這個話題,這個朋友沒有接觸過密碼學也沒有任何技術背景,因此認爲比特幣的製造跟隨便印錢同樣能夠超發,彷彿會無中生有,其實大部分人日常所接觸的虛擬貨幣相似Q幣之類的,由某個運營商或平臺髮型做爲交換服務的憑證,而該虛擬貨幣的發行徹底就被該公司控制,現實世界中由政府發行的貨幣實際上跟這些傳統虛擬貨幣同樣,超發與否、價值漲跌徹底由該平臺運行者或政府徹底控制。如今咱們經過各類解讀知道了比特幣並不會平白無故地超發,那麼究竟是什麼保證了它與「普通」虛擬貨幣不一樣的特性呢?
  答案就是數學。
散列
    首先從散列講起,散列又叫「雜湊」,國內也有根據其英文(Hashing)譯爲哈希,其實從名字的「零散地列出來」、「雜亂地湊起來」來看就知道,這是一種信息摘要算法,而摘要的意思和小學語文的把一段文章的中心大意提取出來相似。在計算機中,散列一般是通過某些特定的手段(例如通過一系列複雜的位運算)提取出某段數據的特徵、該特徵用來校驗(好比驗證從網絡上下載的一個很大的文件的正確性)。語文課上的歸納中心大意是根據歸納的內容,你能還原出這段講的內容是什麼,而密碼學級別的散列則偏偏相反,它使得你提取出來的表示數據特徵的代碼毫不能還原(或輕易還原)爲原來的數據。   舉例,如今流行的一種散列函數叫SHA-1,當你提交一個字符串: 「The quick brown fox jumps over the lazy dog」   做爲SHA-1的參數時,獲得以下摘要信息: 2fd4e1c6 7a2d28fc ed849ee1 bb76e739 1b93eb12   可是哪怕你修改了一個字符: 「The quick brown fox jumps over the lazy cog」   獲得的結果也會發生翻天覆地的變化: de9f2c7f d25e1b3a fad3e85a 0bd17d9b 100db4b3   散列函數的這些特性保證了它不會輕易地經過小的修改和得到摘要的差異分析出算法的漏洞,以保證原始數據的安全。   那麼散列函數該怎麼用呢?它一般以「證實」的工具用。好比說Alice有一個字符串: 「The quick brown fox jumps over the lazy dog」   Bob說我也有那麼一個字符串和 Alice 同樣,可是Bob並不信任 Alice,萬一Alice是假裝那就會把本身真實的字符串泄漏給假 Alice;同時Alice也不信任Bob,由於若是Bob是冒牌的本身同樣會把真實的字符串泄漏給假Bob;更可怕的是旁邊站着一個間諜Eve時刻監聽着Alice和Bob進行字符串交換的過程而且得到該字符串。那麼如何讓Alice和Bob兩人互相相信對方不是冒牌貨呢?簡單的方法是兩人將本身的字符串進行散列運算,而後比對便可。這樣就算有人監聽或者對方是冒牌貨也不會泄漏原始數據。   這些相似SHA-1的散列函數是怎麼來的呢?是通過美國國家安全局 (NSA) 設計美國國家標準技術研究院 (NIST) 發佈的。而一個著名的散列標準(包括其餘的加密標準)公開招標的過程是徹底公開的,全部提交的算法和標準都會通過來自全世界無數頂級的密碼學家的檢驗,因此能夠基本認爲「同時期」流行的散列算法(包括其餘加密算法)是安全的。   從以上討論能夠看出散列的過程是不可逆的,因此具有證實原始數據同時保護原始數據的能力。最近不少網站爆出明文密碼讓衆人譁然,由於對密碼進行不可逆的散列運算是保證用戶信息安全的最最基本的措施之一,而這些網站居然都沒有作該措施(想象一下明文密碼泄漏後被人利用會用來嘗試登陸受害者的郵箱等其餘賬號)。   工做證實   那麼比特幣從哪來呢?就從這些散列函數的運算結果來。想象一下咱們計算這麼一道題,到底輸入什麼樣的字符串,會獲得一個散列結果開頭是0?有人說我把該函數反向推導獲得一個反函數不就能夠得到原始結果嗎?那可不行,由於這些散列函數是很是嚴密的通過無數數學家檢驗的,具備「密碼學」級別安全度的,絕非輕易推導就能推導出來的,得到一個未知的原始結果的方法只能是窮舉,換一句話說就是猜,把全部可能的結果一個個代入散列函數進行嘗試,若是你敲得到了開頭爲0的結果,恭喜你,你解出了該「數學題」,獎勵比特幣若干,該解題的過程就叫作挖礦(Mining)。剛開始這樣的工做是很是簡單的,一道題只須要普通我的電腦的 CPU 就能快速解出最初的幾道題,隨着挖礦的人數增長題目會越變越難同時得到的收益會愈來愈低,由於一樣的時間內只會產生必定數量的比特幣,而分配的過程只會根據按而解出題目的個數。爲了得到更多的比特幣,有的人把解題的過程編制爲顯卡的GPU程序,由於顯卡的特色你們都知道,就是有不少流處理器能夠短期內作大量運算。買了高性能的顯卡的人愈來愈多,用顯卡挖礦的收益愈來愈少,因而一些人則乾脆本身設計硬件,用專用的集成電路(ASIC)進行該解題過程,這類擁有大量專用挖礦集成電路的機器就叫作「礦機」。   分佈式   那麼有人說,假如本身反覆給本身出一些本身早就找到答案的「數學題」而後本身快速解答,豈不是能隨意得到比特幣?固然不行。比特幣設計精妙的地方、同時也是區別於其餘傳統貨幣的地方就在這裏。「數學題」的產生並不是本身說了算,而是全部人一同採礦而且每一個人都存儲着一份採礦得到的結果比特幣的交易記錄,本身製造的假的結果不算數,還得必須獲得全網的其餘人的承認。這麼設計的結果就是,一我的不能隨意僞造本身的財富,而本身已有的財富則會獲得全網全部人的證實而不會被輕易剝奪。   證實力?   這些密碼學支撐的虛擬貨幣到底安全嗎?「   從技術的角度來講,一般來講(下文會詳細解釋)」是安全的,實際上咱們平常上網、銀行、軍事等活動中都是靠密碼學來支撐,如今已經沒法想象沒有這一系列密碼學保障,咱們日常的生活會變得怎麼樣,而密碼學歸根結底就是數學。 這裏咱們看到,實際上數學已經徹底做爲一種天然元素而非人造的產品支撐着各類基於密碼學的貨幣,它的證實力甚至強於黃金。   而單單有數學的保證還不行,還得從社會的角度獲得證實,也就是足夠多的人相信比特幣能改變他們的生活,能提供一種便攜的支付手段,甚至僅僅相信它能做爲炒做的工具而使用,這些通過大量散列運算獲得的數據塊就是有價值的。   安全性   對於安全性方面咱們還須要進一步討論。首先說明,安全並非一個數學公式、或一個算法的採用,更不多是一個所謂的「安全產品」能保證的,安全是一系列正確實施的過程的組合。   舉例,某公司爲了保證本身產品的設計圖紙或者源代碼的安全,給公司每臺機器安裝了殺毒軟件,公司部署了最好的防火牆,進門出門須要驗證指紋,同時每一個人不能攜帶存儲設備出入也不能鏈接Internet。最後該公司的設計圖紙和源代碼仍是被對手公司的間諜獲取了,獲取的方法很簡單,該間諜賄賂了公司主管,讓該主管複製了一份設計圖紙和源代碼帶出公司交給間諜……   比特幣也是同樣,你說不能簡單用安全或者不安全來歸納,而應該考慮與比特幣相關的全部環節,同時每一個環節的安全措施都要作到位才能減小損失。   下面我根據發生的機率從高到低把一些可能威脅到比特幣安全的事件列出來:   交易平臺   毫無疑問交易平臺是最脆弱的環節之一,你將各類虛擬貨幣保存在交易平臺(或者說託管在交易平臺)那麼你對該貨幣安全性的惟一措施幾乎就剩下登陸和交易密碼的保護了。交易平臺被攻擊或被入侵的時間層出不窮,而損失也是慘重的,舉幾個例子:   10月23日,web比特幣錢包Inputs.io被入侵,價值120萬美圓比特幣被盜竊; 10月26日,比特幣交易平臺GBL攜客戶存款跑路; 4月三日,交易所 Mt.GOX被DDOS攻擊,比特幣價格大幅下跌; ……   確保交易平臺的安全性的方法除了制定良好的登陸和交易密碼以外,最好的方法是把一部分比特幣轉移到本身私有的錢包,本身的安全性由本身保證,這樣無論交易平臺是跑路仍是被攻擊也不至於損失所有。   本地錢包的安全   錢包文件記錄着證實本身對該錢包全部的私鑰等重要信息,因此本地錢包必定要安全保管而且妥善備份。保護本地錢包同時意味着必須保證本身的電腦上有足夠的安全措施,包括操做系統(尤爲是Windows這樣的大衆操做系統)必須及時更新(包括升級到較新的版本,好比2013年來講應該升級到 Windows 7 或 Windows 8 ),使用自帶的更新功能(好比 Windows Update )打上最新的補丁,若是有必要的話裝一些安全軟件,例如防火牆和殺毒軟件也是不錯的選擇。   山寨幣上位   隨着比特幣的流行,無數的山寨幣也被強勢推出,聽說創造一個新的山寨幣只須要1個比特幣。這些山寨幣中抱着撈一把就走,改改比特幣客戶端參數的大有人在,可是其中一些也提出了必定的改進(好比性能、交易時間等),這些改進中不乏有價值的改進。能夠碰見一旦一個新的山寨幣提供了足夠吸引人的特性或者解決了比特幣面臨的一些嚴重的問題,將會迅速上位而且壓過比特幣的先發優點。   密碼學級別的破解   比特幣使用的算法遭到破解,雖說起來好像天方夜譚可是不是沒有可能發生,好比歷史上曾經流行過的對稱加密算法DES由於密鑰太短早就推薦不使用,而轉爲用3DES、AES以及Blowfish等替代;曾經流行的流加密算法RC4由於強度不夠也遭到各類有效的攻擊;而流行的散列算法MD5在2004年被山東大學數學系教授王小云發現了快速碰撞的方法把產生碰撞的步數從以前的2的80次方前後下降到2的69次方和2的63次方(這個下降的級別在計算機的角度是驚人的)。   咱們能夠看看一些著名的加密算法提出的時間以及到被不推薦使用甚至廢棄(遭到很是有效的攻擊)的時間:   MD5(1992-2004),12年;   SHA-1(1995-2013),18年;   DES(1976-1999),23年;   如今的產品中MD5和SHA-1還在大量使用,微軟官方博客就宣佈在2016年以前廢棄SHA-1和RC4了。   比特幣設計比較領先,2009年產生時已經使用了當時已經確立標準的最新的[SHA-256](http://en.wikipedia.org/wiki/SHA-2)以及RIPEMD-160散列算法,同時還選擇了很是先進的採用secp256k1曲線的橢圓曲線公鑰算法。這些密碼學的基礎措施在目前(2013年)看來依然十分安全,可是隨着密碼學家進一步的研究配合更加高性能的機器的暴力破解,這些算法會變得愈來愈脆弱,此時不管是遷移到新算法仍是增強現有算法都會變得很是困難。   大運算力的暴力破解   有人計算過,一個比特幣私鑰的長度是256 bits,要窮舉全部的可能來破解該私鑰須要:   pow(2,128) / (15 * pow(2,40)) / 3600 / 24 / 365.25 / 1e9 / 1e9 = 0.6537992112229596   也就是650000000000000000年。看上去好像比特幣絕對安全了,可是若是考慮摩爾定律,每18個月計算機的性能提升一倍,兩個十八個月就變成了原先的四倍,這樣的增加其實是很是驚人的。計算下來的結果就是隻要59年後,計算機就可以在有意義的時間(好比1.13年內)破解一個私鑰,也就是破解了某人的錢包,這是很是危險的。   你可能會說59年也足夠長了,且慢,你還沒考慮到專門針對破解用的硬件。顯卡和專用集成電路製造的礦機能用來挖礦,爲何不能用來破解?   政府的政策   雖然比特幣等基於密碼學的貨幣的一個功能就是抗來自政府的通脹,可是千萬別覺得政府的措施會頗有限,若是須要剿滅(或者在某一地區剿滅)比特幣,只須要在比特幣賴以生存的介質網絡上下手便可。在比特幣找到更加難以封鎖的介質以前,來自政府的態度也是不容忽視的。
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息