廣義的工作量證明指,某個人通過耗時運算產生滿足預定條件的一個值,其他人又能夠根據這個條件很快速地驗證這個值是否正確。
比特幣系統中的工作量證明指,一個比特幣節點要用循環運算找到一個隨機數,這個隨機數和節點接收到的交易信息一起被哈希後的值首部有若干個 0。
下面我會用給一個小例子解釋工作量證明。
假定交易信息是 “Hello World!”,我們要找的隨機數是 nonce,要滿足的條件是 “Hello World!” 與 nonce 拼接結果的哈希值首部有3個0。
我們從 nonce 等於 0 開始。 此時需要進行哈希運算的是 “Hello World!0″。 比特幣工作量證明中使用 SHA-256 哈希函數。
用 SHA-256 計算 “Hello World!0” 的哈希值為 “1312af178c25…”(共64個字符),不滿足首部有3個0的條件。
然後我們採取每次對 nonce 加 1 的方法,來找到滿足條件的 nonce。 因此第二次運算中 nonce 為 1,用 SHA-256 計算 “Hello World!1” 的哈希值為 “e9afc424b79e…”,也不滿足首部有3個0的條件,我們需要繼續嘗試。
這樣經過 4000 多次循環後,我們會得到一個滿足條件的 nonce 值為 4250。 用 SHA-256 計算 “Hello World!4250” 的哈希值為 “0000c3af42fc…”。
此時循環終止,我們完成了一次工作量證明。
02
—
比特幣網絡節點上的工作量證明
理解了工作量證明核心步驟後,我們來看看比特幣節點完成工作量證明的細節。
這個完成過程又被稱為“挖礦”,可以劃分為 5 步。
第一步:節點將其他節點發送來的交易信息組合成一個默克爾樹,併計算出默克爾樹根節點的哈希值。
第二步:比特幣挖礦使用 hashcash 工作量證明算法。 該算法需要一個原始字串、隨機值 nonce 和計數器。 原始字串由區塊頭部生成。 區塊頭部包含了區塊版本、前一個區塊的哈希值、本區塊默克爾樹哈希值、當前時間戳、難度目標值、隨機值 nonce。
第三步:隨機值 nonce 為 4 個字節。 原始字串由區塊頭部的 6 個部分構建拼接而成。 節點從 nonce 為 0 開始嘗試計算區塊頭部(原始字串)的哈希值。
第四步:如果節點計算出的區塊頭部哈希值小於區塊頭部的難度目標值,則表示該 nonce 符合要求,完成 POW。 為了簡化計算,區塊頭部哈希值小於目標值這一條件能夠轉化為,區塊頭部哈希值首部 。
第五步:如果節點計算出了一個這樣的 nonce,那麼它會將整個區塊發送給盡可能多的節點進行結果驗證。 一旦驗證完成,它會得到一定量的比特幣作為獎勵。 目前是 12.5 個(每 4 年減半)再加上區塊中的交易手續費。
可以看到整個過程並不復雜,其中的關鍵是 SHA-256 哈希算法。 其中,
SHA-256 是一種 SHA-2(安全哈希算法-2)加密算法。 它能夠將任意長度的輸入加密為固定長度(256 比特)的輸出。 人們很容易從輸入得到輸出,但很難從輸出反推出輸入。 通過對比輸出,人們也能夠很容易地確認輸入的完整性。 為了增加計算區塊頭部哈希值過程的安全性,比特幣中實際使用了兩次 SHA256 算法。
03
—
算力軍備競賽
中本聰剛剛發布比特幣的年代,整個比特幣網絡的算力很低,因此完成工作量證明的難度很低。 通過個人電腦的 CPU 就能挖到比特幣。
挖礦的核心在於 SHA-256 哈希計算,相對於 CPU,GPU 更適合數學計算與並行計算。 因此,在 2010 年左右,基於 GPU 的礦機慢慢地多了起來。
隨後出現了專門為挖礦定制的可編程門陣列(FPGA)。 其單片哈希計算速度更高,冷卻更簡單。 但是因為容易出現硬件錯誤,它很快就被集成電路(ASIC)替代了。
集成電路(ASIC)首次出現於2013年。 ASIC 要求開發人員針對特定的哈希函數進行電路定制。 因此算力更高,功耗更低。 缺點是不夠靈活,通常只能挖特定的幣。
類似 Google Cloud 的雲計算平台不適合挖比特幣。 因為這些雲平台是由普通的服務器搭建起來的,其 CPU 運算能力和個人電腦類似,租用更多的雲計算資源也不會的帶來太多的收益。
最近由於量子計算機的發展,有人以為量子計算機會威脅比特幣的安全性。
但量子計算機不代表“更快的計算機”。 只是在解決特定的問題時,量子計算機能讓人們設計出更快的算法。
目前量子計算機有可能威脅到比特幣安全的地方在於它更容易攻破比特幣基於橢圓曲線數字簽名算法的公鑰加密體系,可以從公鑰中計算出私鑰。 破解公鑰加密體系需要普通計算機進行 2^128 次的運算,一個足夠大的量子計算機(1500量子位)需要 128^3 次的運算。 但這樣多量子位的量子計算機還尚未出現。 據專家估計,2027年的量子計算機有望在10分鐘內破解橢圓曲線數字簽名算法,對比特幣的安全性構成巨大威脅。
另外,量子計算在未來十年內幾乎不可能影響到比特幣的工作量證明,想用量子計算機挖礦的人要失望了。 用量子計算機計算 SHA-256 也需要 2^128 次運算。 鑑於目前的量子計算機速度很慢,用量子計算機挖礦還是個低收益的事情。
此外,比特幣系統還可以通過改進算法等方法防禦量子計算機攻擊。
調查問卷
—
區塊鏈時代,你不願錯過的機會
本次問卷針對周四晚的直播課程,無論你是否已經報名,你只需花1分鐘的時間,講講你對本次直播的期待或想法,我們定會逐份認真採納。
另,每份問卷完成都有紅包哦~同時我們會根據大家的反饋,相繼推出更多的干貨課程。 您的每一個寶貴意見對我們都非常重要! 當然,重點是紅包! 掃碼完成問卷,或者點擊【閱讀原文】。