區塊鏈技術簡介

來源: 2019-11-02 09:08:43 [博客] [舊帖] [給我悄悄話] 本文已被閱讀:

區塊鏈直觀地說就是一個“智慧”賬本在互聯網上有多個等同的拷貝。當一份拷貝作出合法得變更時,其他拷貝可以驗證這個變更得合法性,作出相同的變更,使得所有的拷貝同步得一摸一樣。

區塊鏈實現技術實際上已很成熟,主要就是:

  1. Merkle Trees (默克爾樹)
  2. Schnorr Signatures (斯諾爾簽名)
  3. Fiat Shamir and Pedersen Commitments(菲亞特、沙米爾、佩德森承諾)
  4. Hash Cash (散列現金), 即為計算出某種散列值(或者說一個特定的值),計算機必須付出得計算量,即計算代價。

這些大都是上世紀80年代和90年代的技術。區塊鏈巧妙地把它們組合起來,為現代數字化社會提供新的應用。

以上的這些都是些數據安全(Data Security)的術語,區塊鏈的用戶不必知道技術細節。這些技術已經成功地用在了比特幣(BitCoin)上。十多年過去了(比特幣由中本聰發表於2008年10月31日,見“Satoshi Nakamoto, Bitcoin: A Peer-to-Peer Electronic Cash System, www.bitcoin.org, 31 Oct 2008”),比特幣的安全性可以說是很可靠的,實現比特幣的區塊鏈實際上經受了各種攻擊的考驗。

那麽,區塊鏈到底是什麽呢?這裏用一個“簡化版”來描述它的主要特性。細節得鑽研中本聰得文章。

這裏我們先用“電子幣”來描述區塊鏈的概念,然後在給出區塊鏈在電子幣以外的應用。

假設一個國家的公民和企業都使用電子幣。所有的電子幣的交易曆史,即從它開始的每次轉手,都記在一本有多個(數量可不等)等同拷貝的“公開賬本“上。這些拷貝有“智慧“,會做計算,實現我們前麵講的那些技術。這就是一個”電子幣區塊鏈“。

假定每個電子幣的原始出處可以被驗證的,比如說是國家銀行發的,帶有國家銀行的電子簽名,大家都接受。國家在開始發行電子幣時把不同的電子幣發給了一些個人和企業。這裏所謂的“發給“指的是把每個電子幣的歸屬記在”公開賬本“的每個拷貝上。如

 

時間點0:

    電子幣#1:張先生

    電子幣#2:張先生

    電子幣#3:張先生

    電子幣#4:王女士

    電子幣#5:王女士

    …

    電子幣#500 - #999:李超市

    … 其它

 

這本“公開賬本“在網上有許多等同的拷貝,供人們隨時隨地查詢。

從上麵這個“公開賬本“,我們可以很清楚地看到,張先生有3個電子幣,王女士有2個,李超市有500個,等等。

假如張先生要用一個電子幣在李超市采購(這裏用“一個電子幣“是為了方便描述,可以用0.1個,也可用1.1個,原理是一樣的),他可以寫一張交易單,如“轉電子幣#1給李超市,張先生簽”。

李超市當然可以驗證這張交易單的真實性,因為上麵有張先生不可更改的電子簽名。但要讓這份交易合法,即李超市“拿到”電子幣#1,這筆交易必須記到這本“公開賬本”上,成這樣:

時間點1:

電子幣#1:張先生 + [轉給李超市交易單][年月日時秒分]

電子幣#2:張先生

電子幣#3:張先生

電子幣#4:王女士

電子幣#5:王女士

電子幣#500 - #999:李超市

… 其它

再看這個“公開賬本”,稍加計算,我們可以得到,張先生有2個電子幣,王女士2個,李超市501個。

我們上麵談到,這個“公開賬本”有很多拷貝,它們是怎麽“同時”更改的呢?

實際上,每個拷貝就是在一個網絡計算機(服務器)的數據庫上。這些計算機就是所說的“挖礦機”,它們會把一個交易合法地加到它的“公開賬本”的拷貝上來掙前麵講的“散列現金 (Hash Cash)”。“散列現金”的來源,可以是多樣的,為簡單起見,我們假設國家獎勵0.1個電子幣給加上一個合法交易“挖礦機”的擁有者。一個“挖礦機”的擁有者,也能是公司,甚至就是國家本身。 一個區塊鏈有很多“挖礦機”。

當一個交易在“公開賬本”的一個拷貝上被成功地加上後,這台“挖礦機”就通知其它的“挖礦機”:“賬本已被成功更改。” 其它“挖礦機”做下麵幾件事:

  1. 驗證這份交易的真偽:這個可以驗證一下張先生的電子簽名。
  2. 驗證成功“挖礦機”賬本的完整性:檢查這台“挖礦機”掙到合法的“散列現金”沒有。
  3. 驗證自己的拷貝是否與送來的拷貝前一時間點是否一致,即檢查送來的拷貝在成功更改前與自己現在的拷貝是一樣的
  4. 然後更改自己的拷貝,使得它與成功“挖礦機”上的拷貝一致。

這樣,大家就有了個一致的“公開賬本”。這個“電子幣區塊鏈就被合法“地跟新了。

注意:任何人可以在任何時候看到所有的“公開賬本”拷貝。另外,我們也可想象每個人都有自己賬戶,知道自己有多少錢在賬上。比如說前麵的張先生,他隻知道自己的賬上還有2個電子幣,至於是幾號幣,他可能並不關心,就像大多數人不關心紙幣上的編號,隻要不是假幣就行了。

到這我們可以看到,區塊鏈就是一個記賬係統,它可以把合法的交易記上去,一旦記上去後就,任何非法篡改會立刻被檢測出來。

我們來看幾種可能的情況:

  1. 黑客進入一個“挖礦機X”,想在電子幣#2上加上一條“轉電子幣#2給孫假藥,張先生簽“這樣的交易。但黑客無法得到張先生得電子簽名,這條交易一上去,所有其它”挖礦機“都知道這個交易是假的,馬上通知”挖礦機X“。這種直接進入係統搞數據篡改在技術上是行不通的。
  2. 假如“挖礦機H”的主人是張先生,而張先生是個隱藏的黑客。他能把時間點1做的交易變掉嗎?假如現在是時間點2,電子幣#1已被轉手了幾次,為簡單起見,我們假設就一次(沒有轉手的情況也是一樣的):“轉電子幣#1給蔡市場李超市,李超市簽””,這時 的“公開賬本”看起來像這樣:

 

時間點2:

電子幣#1:張先生 + [轉給李超市交易單][年月日時分秒] + [轉給蔡市場交易單][年月日時分秒]

電子幣#2:張先生

電子幣#3:張先生

電子幣#4:王女士

電子幣#5:王女士

電子幣#500 - #999:李超市

… 其它

 

黑客張先生不能在“挖礦機H”上簡單地去掉[轉給李超市交易單]以及以後的交易。這樣電子幣#1又回到了時間點0,馬上就被發現。

他可已試試把[轉給李超市交易單]改成“轉0.1個電子幣#1給李超市,張先生簽“。張先生有自己的電子簽名,他可以改,改完後在自己加上去,不掙”散列現金“。但他光改自己的交易單是不夠的,因為電子幣#1的交易曆史在”挖礦機H“上的完整性被破壞了,他必須自己把所有後麵的合法交易全取下來,這裏是[轉給蔡市場交易單][年月日時秒分],再重新”合法“地加上去,以保持電子幣#1的交易曆史在”挖礦機H“上的完整性。他這樣做一是要損失很多”散列現金“,二是,他的”合法“賬本沒人承認,因為跟大家的都不一樣。而他改了以前的曆史實施大家都能看出來,隻有他能改,因為他有張先生的電子簽名。

在中本聰的文章裏(Satoshi Nakamoto, Bitcoin: A Peer-to-Peer Electronic Cash System, www.bitcoin.org, 31 Oct 2008”),還討論了許多其它更為複雜的攻擊情形比如說多個“挖礦機“黑客合作的情形,但都證明不是可行的,無論是在理論上還是在比特幣的實踐上。

如果把電子幣匿名,我們就有了密碼幣。比特幣就是個很好的例子,這裏就不多說了。

所以,區塊鏈可以看作一個數據庫的相同版本分布在互聯網上。它們可以被同步地合法地更改,但不能被非法地篡改。

區塊鏈除了在電子幣上有許多應用外,還有許多其它應用。如防假貨。我們可用下麵王女士買LV包來說明一下區塊鏈在物流市場裏的應用。

當LV生產出一個包後,它就給這個包的唯一的標識碼,並把這個包的標識碼和特征登記在一個“貴重品區塊鏈”裏。當然,就跟我們前麵電子幣區塊鏈的例子一樣,一旦登錄進去,這個LV包的曆史就不會再改變了。

王女士在付款前,先看看這個包是否已經賣出去了(她實際上不用自己看,她的購物應用程序會幫她查好),因為市場上不會有兩個包具有一樣的標識碼。王女士用她的電子幣付款,買下這個包,“貴重品區塊鏈”就記下這筆交易,這個LV包賣給了王女士。

這樣商家還會賣一個假LV包嗎?如果商家賣個假包,真包他會怎麽辦?肯定沒法再賣了,因為真包的標識符已進了“貴重品區塊鏈“。自己用?何必賣假包呢,不光自己還要花錢買假包,還要冒丟了做LV生意的風險,不如真包自己用,用完後二手賣掉,還省了買假包的錢。另外,這個真包沒有了LV的唯一標識符,真的也成了假的。

至於直接賣假貨,幾乎是不可能的事,因為一個假貨無法當真貨登記到“貴重品區塊鏈”裏。假LV包的標識符不會有LV的簽名的。

區塊鏈還有許多其它的應用,如個人履曆,智能合同(Smart Contract),法律文件、有機食品管理與跟蹤等。這裏就不一一列舉了。比特幣的成功,讓人們相信區塊鏈的技術是可行的,盡管要做到這一點,需要大量的計算資源和高速通信設施。

總結一下,從用戶的角度看,區塊鏈就是一個能夠被隨時隨地查詢、能夠被合法地更改,但不能被非法篡改、也不能輕易摧毀的網絡數據庫。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


更多我的博客文章>>>