北大肖臻老師《區塊鏈技術與應用》課程鏈接:點擊這里
全系列文章鏈接:點擊這里
主要補充內容及圖片來源:《區塊鏈:技術驅動金融》
該系列文章如中有任何侵權內容,或者有鏈接無法打開、圖片加載上傳失敗等情況,請及時與我個人聯系洗掉或修改,
一、雙花攻擊(double spending attack)
怎么設計出一個加密貨幣出來?
假設央行發行數字貨幣,我們知道,央行發的人民幣上有各種防偽標志,同樣,央行發的數字貨幣上也要有央行的私鑰簽名,而央行公鑰是公開的,我們用密碼學中的公私鑰原理,就可以驗證數字貨幣是不是真的,
大家覺得上面這個方案怎么樣?但其實這個例子根本沒用到區塊鏈,
而且問題在于:私鑰容易泄露,如果央行私鑰都發生泄露,那普通百姓的私鑰更容易泄露,這樣位元幣就沒法用,
數字貨幣其實就是個檔案,雖然檔案上有央行的簽名,100元面值就是100元,但數字貨幣是可以復制的,它可以無限復制下去,這一點和人民幣不一樣,
A把人民幣給B,A的那張錢就沒了,沒辦法再花一次,但如果A花出去一個數字貨幣,他可以再復制第二次,再花一次,這就叫“雙花攻擊”,
數字貨幣主要挑戰就是怎么防止雙花攻擊,
舉例
央行發行的每個數字貨幣上都有一個編號,就和人民幣一樣,比如017、092等,此外,央行還要維護一個資料庫,上面記錄著每個編號的數字貨幣在誰手里,
比如017在A手里,A把017給B,B不僅需要驗證這個數字貨幣有沒有央行簽名(即驗證下幣的真偽),還要跟央行核實一下017這個數字貨幣,A之前有沒有花出去過,
央行確認后說017之前確實是在A手里,所以A支付017給B是合法的,交易發生后,央行的資料庫也需要改一下,將幣改為017-B.
此時,如果A想再花一次017,想把它支付給C,C就能跟央行核實查到017已經花出去,已經在B手里了,此時這個交易就不能成立,這樣就能防止017花兩次,
以上交易方法,正確性沒問題,實踐中也可操作,但這是中心化的方案,由央行統一控制,而且每次交易都需要央行確認其合法性,這就太慢了,
我們需要一個去中性化的方案,讓所有用戶共同承擔央行的職能,用一個資料結構來檢測位元幣交易,這個資料結構就是區塊鏈,
區塊鏈有兩個核心問題:①數字貨幣的發行;②如何驗證交易的有效性,
如何驗證交易的有效性,實際就是怎么防范雙花攻擊,
舉例

(4.1 小型區塊鏈,source: 課程截圖)
位元幣每個交易都包含輸入和輸出兩部分,輸入要說明幣的來源,輸出要給出收款人的公鑰的哈希,
假設,A獲得鑄幣權(CreateCoin),A發行10個位元幣,
A把錢平均分給B和C,一人5個位元幣,這個交易需要有A的簽名,證明是經過A同意的,
同時這個交易還要說明花掉的10個位元幣從哪兒來,這里A花掉的幣是由鑄幣交易來的,
A轉給B,要說明B公鑰哈希是什么,B又把錢轉給C和D,也要說明幣的來源,
此時,C一共有7個位元幣,C又決定把7個幣給E,
...
這就是構成了一個小型的區塊鏈,
這里有兩種哈希指標,一種把區塊串起來構成一個鏈表,另一種指向前面某個交易來說明幣的來源,這樣就能證明這個幣不是憑空捏造,并且防止雙花,
比如B要轉給F5個幣
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/294767.html
標籤:區塊鏈
