【這篇博文發到論壇上去後,見https://bbs.wenxuecity.com/currentevent/1903301.html
在兩天內有1萬5千多的點擊。也有人問了一些問題。我把第一版(見上麵的鏈接)重新整理了一下。】
區塊鏈(Blockchain)從字麵上說就是由一組“區塊”(Block)組成的“鏈“(Chain)。但現在區塊鏈有著更廣泛的含義。本文把區塊鏈直觀地定義為:
區塊鏈就是一個“智慧”賬本,它在互聯網上有多個等同的拷貝。當一份拷貝作出合法的變更時,其他拷貝可以驗證這個變更的合法性,作出相同的變更,使得所有的拷貝同步得一摸一樣。
區塊鏈由一個很重要的特點:它能被合法地更新,一旦更新後,其內容就不能再被更改了。任何非法的篡改,要麽技術上不可行,要麽被立刻察覺到。
區塊鏈實現技術實際上已很成熟,主要就是:
這些大都是上世紀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:李超市] +
其它(時間點0)
=========================================================
技術注解:
每個區塊的尾部都有一個“區塊編號”, 每個區塊的首部有個“區塊幸運號”。技術上,[電子幣#1:張先生] 應該為:[電子幣#1:區塊幸運號,張先生交易內容,區塊編號]。
實際上還要複雜,如,“區塊編號”有一規定的格式,比如,它要以20個0開頭,“區塊幸運號”是個隨機數,它使得上一區塊編號與本區快的散列值為本區快編號。
本文是簡化版,細節請閱讀中本聰的原文。
=====================================================
這本“公開賬本“在網上有許多等同的拷貝,供人們隨時隨地的查詢。如果有一份賬本的拷貝與別人的不一樣,這就是本假賬。在後麵我們會看到,在區塊鏈裏作假不容易,好不容易作假成功又很容易被抓到。
從上麵這個“公開賬本“,我們可以很清楚地看見,張先生有3個電子幣,王女士有2個,李超市有500個,等等。
假如張先生要用一個電子幣在李超市采購(這裏用“一個電子幣“是為了方便描述,可以用0.1個,也可用1.1個,原理是一樣的),他可以寫一張交易單,如“轉電子幣#1給李超市,張先生簽”。
李超市當然可驗證這張交易單的真實性,因為上麵有張先生不可更改的電子簽名。但要讓這份交易合法,即李超市“拿到”電子幣#1,這筆交易必須記到這本“公開賬本”上,成這樣:
時間點1:
[電子幣#1:張先生] + [電子幣#2:張先生] + [電子幣#3:張先生] +
[電子幣#4:王女士] + [電子幣#5:王女士] +
… +
[電子幣#500:李超市] + … 全是李超市的電子幣 + [電子幣#999:李超市] +
其它(時間點1,與時間點0的“其它”已不一樣) +
[電子幣#1:轉給李超市]
再看這個“公開賬本”,稍加計算,我們可以得到,張先生有2個電子幣,王女士2個,李超市501個。
我們上麵談到,這個“公開賬本”有很多拷貝,它們是怎麽“同時”更改的呢?
實際上,每個“公開賬本”的拷貝就是在一個網絡計算機(服務器)的數據庫上。這些計算機就是所說的“挖礦機”,它們會把一個交易合法地加到它的“公開賬本”的拷貝上。
那什麽又是‘合法地加到它的“公開賬本”的拷貝上’呢?這就是一個“挖礦機”得找到“本次交易區塊的幸運號”以產生一個符合要求的“本次交易區塊編號”。
為什麽”挖礦機“願意做這個費力的事呢?因為他可以掙前麵提到的“散列現金 (Hash Cash)”。
“散列現金”的來源,可以是多樣的,為簡單起見,我們假設國家獎勵0.1個電子幣給加上一個合法交易“挖礦機”的擁有者。一個“挖礦機”的擁有者,也能是公司,甚至就是國家本身。 一個區塊鏈有很多“挖礦機”。
=====================================================
技術注解:比特幣的設計是使得一個“挖礦機”做“合法的”區塊鏈更新(即掙合法的散列現金)或發現一個新的比特幣比幹非法的攻擊更有利可圖,使得黑客沒有攻擊比特幣的動機。詳見中本聰原文。
=====================================================
當一個交易在“公開賬本”的一個拷貝上被成功地加上後,這台“挖礦機”就通知其它的“挖礦機”:“賬本已被成功更改” 。其它“挖礦機”做下麵幾件事:
這樣,大家就有了個一致的“公開賬本”。這個“電子幣區塊鏈”就被“合法”地更新了。
注意:任何人可以在任何時候看到所有的“公開賬本”拷貝。另外,我們也可想象每個人都有自己賬戶,知道自己有多少錢在賬上。比如說前麵的張先生,他隻知道自己的賬上還有2個電子幣,至於是幾號幣,他可能並不關心,就像大多數人不關心紙幣上的編號,隻要不是假幣就行了。
到這我們可以看到,區塊鏈就是一個記賬係統,它可以把合法的交易記上去,一旦記上去後就,任何非法篡改會立刻被檢測出來。
我們來看幾種可能的攻擊情況:
時間點2:
[電子幣#1:張先生] + [電子幣#2:張先生] + [電子幣#3:張先生] +
[電子幣#4:王女士] + [電子幣#5:王女士] +
… +
[電子幣#500:李超市] + … 全是李超市的電子幣 + [電子幣#999:李超市] +
其它(時間點1) +
[電子幣#1:轉給李超市] + … +
[電子幣#1:轉給蔡市場交易單] +
其它 (時間點2)
黑客張先生不能在“挖礦機H”上簡單地去掉 [電子幣#1:轉給李超市] 以及以後的交易。這樣電子幣#1又回到了時間點0,他的區塊鏈被大大縮減了,馬上就被發現。
他可已試試把[轉給李超市交易單]改成“轉0.1個電子幣#1給李超市,張先生簽”。張先生有自己的電子簽名,他可以改,改完後再自己加上去,不掙”散列現金”。但他光改自己的交易單是不夠的,因為電子幣#1的交易曆史在“挖礦機H”上的完整性被破壞了,他必須自己把所有後麵的合法交易全取下來,即,把 [電子幣#1:轉給蔡市場交易單] + 其它 (時間點2),全部拿下來,再重新”合法“地加上去,以保持電子幣#1的交易曆史在”挖礦機H“上的完整性。這樣做,他一是要損失很多”散列現金“,二是他要有比所有其它挖礦機合起來都要大他的計算能力,三是他得”合法“賬本沒人承認,因為跟大家的都不一樣。而他改了以前的曆史事實大家一眼就能看出來,因為隻有他能改,他有張先生的電子簽名。
在中本聰的文章裏(Satoshi Nakamoto, Bitcoin: A Peer-to-Peer Electronic Cash System, www.bitcoin.org, 31 Oct 2008”),還討論了許多其它更為複雜的攻擊情形,比如,多個“挖礦機“黑客合作的情形,但都證明不是可行的,無論是在理論上還是在比特幣的實踐上。他也討論了兩台”挖礦機“同時成功地把同一個交易加在自己”公開賬本“拷貝的情形,這也有解決方案。
如果把電子幣匿名,我們就有了密碼幣。比特幣就是個很好的例子。
所以說,區塊鏈可以看作一個數據庫的相同版本分布在互聯網上。它們可以被同步地合法地更改,但不能被非法地篡改。
區塊鏈除了在電子幣上有許多應用外,還有許多其它應用。如防假貨。我們可用下麵王女士買LV包做為一個例子來說明一下區塊鏈在物流市場裏的應用。這個例子純屬虛構,用以解說區塊鏈可能的應用。
當LV為商家A生產出一個包後,它就賦予這個包一個唯一的標識碼,比如LV#1,並把LV#1和這個包的特征登記在一個“貴重品區塊鏈”裏, 如
時間點0:
[LV#1:賣給商家A] + [LV#2:賣給商家A] + … + [LV#100:賣給商家A]
[LV#101:賣給商家B] + [LV#102:賣給商家B] + …
這裏我們必須強調,LV賣給商家A的包是真實的。
跟我們前麵的“電子幣區塊鏈”的例子一樣,一旦登錄進去,這個LV包的曆史,比如“LV#1賣給商家A”,就無法再改變了。
王女士在購貨前,先在“貴重品區塊鏈“上查一下,比如這個包是否已經賣出去了(她實際上不用自己看,她的購物應用程序會幫她查好),因為市場上不會有兩個包具有一樣的標識碼。
當王女士確認商家A和LV#1的真實性後,用她的電子幣付款,買下這個包,“貴重品區塊鏈”就記下這筆交易,“LV#1被商家A賣給王女士“,這個包就是王女士的了。
時間點1:
[LV#1:賣給商家A] + [LV#2:賣給商家A] + … + [LV#100:賣給商家A]
[LV#101:賣給商家B] + [LV#102:賣給商家B] + … +
[LV#1:商家A賣給王女士]
這樣商家還會賣一個假LV包嗎,假如調包?如果商家賣個假包,真包他會怎麽辦?肯定沒法再賣了,因為真包的標識符,LV#1,已進了“貴重品區塊鏈“,在 [賣給王女士] 的區塊裏。
自己用?那又何必賣假包呢,不光自己還要花錢買假包,還要冒丟了做LV生意的風險。不如真包就自己用,用完後二手賣掉,還省了買假包的錢。
轉賣掉?這個真包沒有了LV的唯一標識符,真的也隻能當成假的賣。
當假貨送人?那就成了花大錢買假貨。
當然,如果商家A鐵了心就要這麽幹,別人也無奈。他自己祈求別被發現,鐵了心冒丟了做LV生意的風險。
另外一種情況,商家X做假LV包,並標記他的假包為LV#1,因為他知道LV#1是個合法標識符。王女士上網,看到商家X在賣LV#1,價格更合理。她會買嗎?她一查,商家不對,是假的。她不會在商家X那兒買標有LV#1的包。商家X作假就暴露了。
至於直接賣假貨,是不可能的事,因為一個假貨無法當真貨登記到“貴重品區塊鏈”裏。假LV包的標識符不會有LV的簽名的。
區塊鏈還有許多其它的應用,如個人履曆,智能合同(Smart Contract),法律文件、有機食品管理與跟蹤等。這裏就不一一列舉了。比特幣的成功,讓人們相信區塊鏈的技術是可行的,盡管要做到這一點,需要大量的計算資源和高速通信設施。
總結一下,從用戶的角度看,區塊鏈就是一個能夠被隨時隨地查詢、不能被非法篡改、也不能輕易摧毀的數據庫。
=====================================================
Q&A:
=====================================================