《詳解比特幣白皮書》-摘要部分
詳解比特幣白皮書
Detailed Interpretation of Bitcoin White Paper
Master林
因為網上之前流傳的有些許不準確的地方,所以自己又和國外在做區塊鏈的朋友一起翻譯了一遍,力求精準。
Bitcoin: A Peer-to-Peer Electronic Cash System
注:Cash(現金):指立即可以投入流通的交換媒介。它具有普遍的可接受性,可以有效地立即用來購買商品、貨物、勞務或償還債務。
摘要:A purely peer-to-peer version of electronic cash would allow online payments to be sent directlyfrom one party to another without going through a financial institution.
一個純粹的點對點版本的電子現金 允許線上支付直接從一方發給另一方,而無需通過金融機構。
注:無需通過金融機構直接轉賬,這就是去中心化思想的由來。(再聯想到標題的電子現金,我們日常使用現金購買物品,也沒有通過銀行這樣的第三方機構,一手交錢,一手交貨,即完成購買。)
Digital signatures(數字簽名)provide part of the solution, but the main benefits are lost if a trusted third party(被信任的第三方機構) is still required to prevent(防止) double-spending.
數字簽名提供了部分解決方案,但是如果任然需要第三方機構來防止雙重支付問題的出現,那麼它主要的好處也失去了價值。
注:中本聰想要這套系統沒有第三方機構,全靠自身邏輯關係就能防止雙重支付。
We propose a solution to the double-spending problem using a peer-to-peer network.
對於雙重支付問題,我們提出了一個解決方案:運用點對點網路。
注:
double-spending,雙重支付,在電子現金領域也被稱為雙花攻擊,即指同一筆電子現金在兩個以上交易中同時被花掉的欺騙行為。雙花攻擊一般有三種形式:
a
b.甲支付給乙(或自己)後預留交易記錄,這筆交易未被確認前又支付給丙並立即獲得交換利益,再用預留的交易記錄覆蓋。
c.甲擁有超過51%的算力(或者在中心化體系中,甲就是控制100%算力的中心),那麼甲可以隨意篡改、反悔已發生的記錄。這就是傳說中的51%攻擊。
對於一個區中心化的數字貨幣,如果沒有一箇中心化機構,那麼就很難確定一筆錢是不是已經被花掉,因此可能出現我既轉給了A,也轉給了B的情況。中本聰在設計比特幣的時候,通過使用區塊鏈蓋時間戳併發布全網的方式,保證每筆幣被支付後,不能再用於其他支付。
當且僅當包含在區塊中的所有交易都是有效的且之前從未存在過的,其他節點才認同該區塊的有效性。
但是由於比特幣採用工作量證明的共識機制,雙花攻擊依然可能發生。如果A要發動雙花攻擊,進行交易1後併發送廣播,網上其他節點都記錄了這筆交易,但要生成6個區塊後才能真正確定這筆交易已經成功。在交易1廣播後,A卻在自己的區塊鏈記錄了交易2,重複利用交易1的幣。如果A掌握超過51%的算力,那麼A可以很大機率的挖出之後的6個區塊之後,然後再次廣播,此時交易2會被判定為成功,而交易1則失敗。也就是一筆錢花2次,但是交易1的收錢者最終並沒有收到錢,蒙受損失,這就是所謂的雙花攻擊。當然,如果算力不夠51%,也可以發動雙花攻擊,也有成功的可能。只是算力越低,發動雙花攻擊成功的機率會越越小。
點對點網路:對等式網路,P2P直接將人們聯絡起來,讓人們通過網際網路直接互動。P2P使得網路上的溝通變得容易、更直接共享和互動,真正地消除中間伺服器。P2P就是人可以直接連線到其他使用者的計算機、交換檔案,而不是像過去那樣連線到伺服器去瀏覽與下載。
一種對等(P2P)網路,其中互連節點(“對等”)彼此共享資源,而無需使用集中管理系統。
基於客戶端- 伺服器模型的網路,其中各個客戶端從集中式伺服器請求服務和資源。
The network timestamps(時間戳)transactionsby hashing them into an ongoing(不間斷的)chain of hash-based proof(證明)-of-work, forming a record that cannot be changed without redoing the proof-of-work.
點對點網路做了如下內容:這個網路給每筆交易打上時間戳,並進行雜湊計算,放進一條不斷增長的基於雜湊工作量證明的鏈,形成了一個不可改變的記錄,除非重做這些工作量。
注:雜湊加密 http://www.ttmd5.com/hash.php?type=9
SHA-256演算法:
SHA-256演算法的輸入是最大長度小於264位的訊息,輸出是256位的訊息摘要,輸入訊息以512位的分組為單位進行處理。演算法描述如下。
(1)訊息的填充:新增一個“1”和若干個“0”使其長度模512與448同餘。在訊息後附加64位的長度塊,其值為填充前訊息的長度。從而產生長度為512整數倍的訊息分組,填充後訊息的長度最多為264位。
(2)初始化連結變數:連結變數的中間結果和最終結果儲存於256位的緩衝區中,緩衝區用8個32位的暫存器A、B、C、D、E、F、G和H表示,輸出仍放在緩衝區以代替舊的A、B、C、D、E、F、G、H。首先要對連結變數進行初始化,初始連結變數儲存於8個暫存器A、B、C、D、E、F、G和H中:
初始連結變數是取自前8個素數(2、3、5、7、11、13、17、19)的平方根的小數部分其二進位制表示的前32位。
(3)處理主迴圈模組:訊息塊是以512位分組為單位進行處理的,要進行64步迴圈操作(如圖所示)。每一輪的輸入均為當前處理的訊息分組和得到的上一輪輸出的256位緩衝區A、B、C、D、E、F、G、H的值。每一步中均採用了不同的訊息字和常數,下面將給出它們的獲取方法。
上圖SHA-256的壓縮函式
(4)得出最終的Hash值:所有512位的訊息塊分組都處理完以後,最後一個分組處理後得到的結果即為最終輸出的256位的訊息摘要。
步函式是SHA-256中最為重要的函式,也是SHA-256中最關鍵的部件。其運算過程如圖所示。
上圖為SHA-256的步函式
根據T1、T2的值,對暫存器A、E進行更新。A、B、C、E、F、G的輸入值則依次賦值給B、C、D、F、G、H。
Kt的獲取方法是取前64個素數(2,3,5,7,……)立方根的小數部分,將其轉換為二進位制,然後取這64個數的前64位作為Kt。其作用是提供了64位隨機串集合以消除輸入資料裡的任何規則性。
對於每個輸入分組匯出的訊息分組Wt,前16個訊息字Wt(0≤t≤15)直接按照訊息輸入分組對應的16個32位字,其他的則按照如下公式來計算得出:
The longest chain not only serves as proof of the sequence(順序)of events witnessed, but proof that it came from the largest pool of CPU power.
最長的鏈不僅是充當見證序列的證明,還證明瞭它來自最大的CPU算力池。
As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers.
只要大部分由節點控制的CPU算力,沒有合作起來進攻網路。那麼他們將會生成最長的鏈並且算力超過攻擊者。
注:說明系統安全性。
The network itself requires minimal structure.
這個系統本身需要的基礎設施非常少。
Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone.
資訊盡最大努力在全網傳播即可,節點(nodes)可以隨時離開和重新加入網絡,並將最長的工作量證明鏈條作為在該節點離線期間發生的交易的證明。
小結
Bitcoin: A Peer-to-Peer Electronic Cash System的關鍵:
1.建立一個去中心化的電子現金系統。
2.雙重支付問題(信用問題)。
解決辦法:
- 時間戳
- 工作量證明
- 點對點網路