每次有量子計算的新聞出現時,人們都要擔心一次比特幣。原因很簡單,比特幣是基于密碼學的,而密碼學之所以能夠成立,是基于某種計算上的不可能性。如果量子計算把原本不可能或難以實現的計算變成可以計算,那么這種密碼學的方法就會失效。
但這種擔心是多余的。原因同樣簡單:我們只要有量子計算也無法完成的計算,不就可以嗎?以這種計算為基礎構建的密碼學方法(量子安全密碼學),量子計算也就無法破解,然后把比特幣升級到該密碼學方法之下即可。
「格困難問題」就是典型的代表,即便對于量子計算,它也保持著計算上的不可能性。基于人類的「無知」,我們很大程度上總可以找到方法生活在密碼學的保護之下。
比特幣中的密碼算法
我們知道比特幣錢包地址對應一個公鑰和一個私鑰,只有擁有私鑰才能動用該錢包中的比特幣,但私鑰是安全的,它無法通過錢包地址或公鑰被計算出來。
這是如何實現的?讓我們從臺球廳開始。
你去臺球廳打臺球,把一個球放在臺球桌底邊的一個位置上,就叫它 A 點,然后你把這個球打出去,假設你擊球的力氣超級大,那么球從 A 點出發,總會撞到臺球桌某條邊上的一個點,然后又會從該點彈到臺球桌另一條邊上的另一個點……它可能這樣彈了 B 次(比如一萬次),最后停在了臺球桌某條邊的一個點上,就叫它 C 點。
這時候你的朋友來了,他能看見臺球在 C 點的位置,你告訴他這個球最初的位置 A 點和擊球的角度,問他這個球中間彈了多少次,也就是 B 是多少?你的朋友應該一時回答不上來。
這就是一個簡單的公、私鑰生成算法,C(位置)是公鑰,B(次數)是私鑰。在我們知道 A 點和 B 次彈跳的情況下,是能得到 C 點的;但如果我們只知道 A 點和 C 點,是很難算出彈跳次數 B 的。
在真正的密碼學中,臺球桌的邊被換成了橢圓曲線,A 是橢圓曲線(其實是橢圓群)上一個固定的點,它擊打自己(球從該點的切線位置被擊打出去),球在橢圓群里撞來撞去撞了 B 次,最后落在了橢圓群的一個點上,還要對該點再做一次映射,有了橢圓群上的一個點 C。C 是公鑰,B 是私鑰。
這就是著名的橢圓曲線算法,被用于生成公鑰、私鑰,是比特幣系統中的第一個密碼學方法。
橢圓曲線算法難以被破解(基于「離散對數困難問題」),但并非不能被破解,足夠強大的量子計算可以找到多項式算法,通過 A 和 C 計算出 B,也就是可以通過公鑰算出私鑰。所以,如果真的進入到量子計算時代,橢圓曲線算法是需要被新的抗量子計算的算法替換的。
量子計算與橢圓曲線算法
比特幣采用的橢圓曲線數字簽名算法的安全性是 2^128(secp256-k1 曲線群的階接近于 2^256,橢圓曲線攻擊算法的復雜度大約都是 O(sqrt(N)),對 2^256 開平方,得到2^128 )。這是個天文數字。
在量子計算的情況下,使用 Peter Shor 提出的 Shor 算法,它攻擊橢圓曲線的復雜度大概是 O(log(N)^3) ,對于比特幣而言,理論上的計算量級是 128^3 次。
相關論文研究顯示,構造一個攻擊 secp256-k1 曲線的量子計算機,假設該計算機能把比特錯誤率降低到 10^-4,那么有希望在使用 170 萬個量子比特的情況下,在 7 天之內完成計算。
在比特幣系統中,還有另一個密碼學方法,哈希函數 SHA-256,它被用于生成與公鑰對應的錢包地址。該算法很好理解,就是把一個輸入以一種不可逆的方式轉換成一個輸出,它有非常強的單向性,想通過輸出來計算輸入是不可能的。
因此,哈希函數只能通過暴力的方式破解,也就是變換輸入值一次次去試,直到可以用某個輸入值算出目標輸出值。
相較于經典計算機,量子計算機在暴力搜索上具有可觀的優勢,不過仍然是一種多項式級別的性能優化,我們可以通過加倍安全位數,比如采用 SHA-512 來維持安全性。
比特幣錢包地址是公鑰經過兩次哈希計算得到的,一次是 SHA-256,一次是RIPEMD-160(另一種哈希函數),量子計算很難攻破兩道哈希關口,通過錢包地址「撞」出公鑰。
量子計算與 SHA-256
目前在量子算法里可以加速計算SHA-256 的是Lov Grover 在1996年提出來的 Grover 算法,它可以將暴力搜索的性能提高到平方倍。假設我們要在一個 N× N 的巨大方格里尋找一根針,經典計算機需要逐一搜索每一個方格,最壞情況下需要搜索N×N 次;但Grover 算法即使是在最壞的情況下也只需要搜索 N 次。
總結一下:比特幣中有兩種基礎密碼算法,一是橢圓曲線算法,一是哈希函數 SHA-256。目前能夠找到前者的高效量子計算方法,實現破解;但并沒有找到后者的高效量子計算方法。當然,破解的前提是量子計算真的發展到足夠強大,要知道,谷歌最新的量子芯片只有 54 個量子比特。
我們的比特幣安全嗎?
如果進入到量子計算時代,我們只需要用抗量子計算的密碼學算法生成公鑰、私鑰、錢包地址即可。但假如用戶未能升級公鑰私鑰,他們錢包中的比特幣是否就一定會被竊取?答案是否定的。
大致有如下幾種情況:
1. 如果錢包地址中的比特幣從未被使用過,那么該地址的公鑰是不被人知曉的,其他人所知道的只有錢包地址(只有當我們花費某地址上的比特幣時才需要給出公鑰,不過哪怕只花費過一次,公鑰就會被廣播到全網)。
如前文所述,SHA-256 是難以被量子計算破解的,這意味著其他人是無法通過錢包地址算出公鑰的。所以,即使可以通過公鑰算出私鑰,那些沒有暴露過公鑰的錢包地址也是安全的。
2. 如果有好的比特幣使用習慣,一個錢包地址只使用一次,那么同理,新地址的公鑰也是不被人知曉的,新地址中的比特幣是安全的。
3. 如果用戶重復使用一個錢包地址,那么該地址對應的公鑰就處于暴露狀態;如果量子計算破解了橢圓曲線算法,那么該地址中的比特幣就面臨被竊取的危險。
據統計截止到當前,有將近 500 萬個比特幣是存放于公鑰暴露的地址中的,此外還有將近 177 萬個比特幣使用的是 P2PK 地址,這是最早期的比特幣賬戶格式,公鑰是公開的,其中就包括被認為是中本聰的賬戶。如果這些比特幣不更換地址,它們是在量子計算攻擊范圍內的。(數據來源:安比實驗室)
除了錢包地址,在比特幣系統中還有一個重要的地方使用到了 SHA-256,那就是挖礦。挖礦就是暴力破解哈希函數的過程,通過調整輸入值「撞」出落在目標區間的輸出值。
如前文所述,從理論上講,量子計算機芯片在暴力搜索時是可以「碾壓」經典計算機芯片的,但我們同樣需要考慮到它的技術發展水平和芯片制作工藝。此外,芯片本就是隨著技術的發展不斷升級的,量子計算對挖礦的影響更多的是芯片升級的經濟問題,而不是安全問題。
量子計算下的安全:格密碼
在量子計算發展的同時,量子安全密碼學也在飛速發展,這其中最具代表性的是「格密碼」,它是基于格的密碼體制(lattice-based cryptography)。
「格」是一個系數為整數的向量空間,可以把它理解成一個高維度空間,它有兩個基本的「格困難問題」,一是最短向量問題,一是最近向量問題,求解這類問題需要指數時間的復雜度,那么如果因子為多項式,這類問題就不存在多項式時間算法,對于量子計算也是一種計算上的不可能性。
這聽起來有些抽象,也許可以這么去理解:用筆在一張 A4 紙上畫出很多黑色的點,然后換支筆在紙上畫下一個紅色的點,我們需要做的是找到距離紅點最近的黑點,這很容易;現在從 A4 紙這個二維空間到一個三維空間,想象一下空間里漂浮著很多黑色的點,這時放一個紅色的點進去,同樣是去找距離紅點最近的黑點,這并不算很難,但相對于二維空間,其困難度已經不在一個級別了。
現在,我們把三維空間變成一個三百維的空間,給定一個紅點去找距離它最近的黑點,這個黑點一定存在,但想想看,找出它是不是幾乎不可能?這就是格困難問題。
格空間與橢圓曲線是相似的。在橢圓曲線上,可以有數學公式(橢圓曲線算法)把公鑰和私鑰放在一個等式的兩頭,在格空間里,也有數學公式(比如LLL算法)可以把類似黑點和紅點的東西放在一個等式的兩頭,那么我們就可以利用這類公式來生成公鑰和私鑰。
在橢圓曲線算法中,因為「離散對數困難問題」,傳統計算機無法通過私鑰計算出公鑰;在格密碼的算法中,因為「格困難問題」,量子計算機也無法通過私鑰算出公鑰。
格密碼發展很快,基于格我們不僅有抗量子計算的公鑰和私鑰,還有抗量子計算的對應于經典密碼概念的一系列密碼學算法或協議,它們可以被用于數字簽名、密鑰交換、零知識證明等等應用領域。
「宇宙相信加密。加密容易,解密難。」在可以預見的未來,依然如此。所以,不用擔心,對于比特幣是這樣,對于區塊鏈也是。
來源: 鏈聞ChainNews
評論
查看更多