今年初我偶然跟一個朋友討論到比特幣這個話題,這個朋友沒有接觸過密碼學也沒有任何技術背景,所以認為比特幣的製造跟隨便印錢一樣可以超發,仿佛會無中生有,其實大部分人平常所接觸的虛擬貨幣類似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年也足夠長了,且慢,你還沒考慮到專門針對破解用的硬體。顯卡和專用集成電路製造的礦機能用來挖礦,為什麼不能用來破解?
政府的政策雖然比特幣等基於密碼學的貨幣的一個功能就是抗來自政府的通脹,但是千萬別以為政府的措施會很有限,如果需要剿滅(或者在某一地區剿滅)比特幣,只需要在比特幣賴以生存的介質–網絡上下手即可。在比特幣找到更加難以封鎖的介質之前,來自政府的態度也是不容忽視的。
點擊「閱讀原文」進入「哈工大出版社—微店」了解編輯室所有圖書
點擊題目下方的培傑國際數學文化,即可關注
加微信公眾號「培傑國際數學文化」,更多精彩內容看不完。
感謝您的一路陪伴和認可!
小編微信:zhy0593
培傑國際數學文化QQ群:261842453
我們歡迎數學愛好者投稿
本平臺免費為您展示、分享。