Wave Forest's Blog

正直、善良、寬厚、心存感激、珍重友誼。嗯,還有,當過很長一段時間的海盜 ...
個人資料
正文

區塊鏈技術簡介

(2019-11-02 09:08:43) 下一個

 

【這篇博文發到論壇上去後,見https://bbs.wenxuecity.com/currentevent/1903301.html

在兩天內有1萬5千多的點擊。也有人問了一些問題。我把第一版(見上麵的鏈接)重新整理了一下。】

區塊鏈(Blockchain)從字麵上說就是由一組“區塊”(Block)組成的“鏈“(Chain)。但現在區塊鏈有著更廣泛的含義。本文把區塊鏈直觀地定義為:

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

區塊鏈由一個很重要的特點:它能被合法地更新,一旦更新後,其內容就不能再被更改了。任何非法的篡改,要麽技術上不可行,要麽被立刻察覺到。

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

  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:李超市] +

其它(時間點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個電子幣給加上一個合法交易“挖礦機”的擁有者。一個“挖礦機”的擁有者,也能是公司,甚至就是國家本身。 一個區塊鏈有很多“挖礦機”。

 

=====================================================

技術注解:比特幣的設計是使得一個“挖礦機”做“合法的”區塊鏈更新(即掙合法的散列現金)或發現一個新的比特幣比幹非法的攻擊更有利可圖,使得黑客沒有攻擊比特幣的動機。詳見中本聰原文。

=====================================================

 

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

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

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

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

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

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

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

時間點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:

  1. 問:區塊鏈安全嗎?答:有安全的把握,盡管沒有絕對的事,但比特幣給大家樹立了一個正麵的技術先例。
  2. 問:區塊鏈能提供私密性嗎,比如,不被監視?答:這要看用什麽模式了。如果采用比特幣這種“開放匿名“模式, 個人隱私沒問題,但這會導致“去中心化”。有些組織是不願意看到的。當然,也可用一個機構來統一管理,這樣做的優點是區塊鏈更新可以做得很快(挖礦機不用費力地去掙“散列現金”),甚至能進行有限的脫線(offline)交易(傳說中的“兩個手機一碰“)。但這個機構最終能監控每一筆交易。匿名技術細節在中本聰的文章有詳細介紹。
  3. 問:量子計算機會擊破區塊鏈係統嗎?答:量子計算機的發展對現在基於橢圓曲線上離散對數的密碼係統肯定有影響。但現在“後量子密碼”(Post Quantum Crypto)日臻完善。新的區塊鏈係統應該會考慮到這一點。

=====================================================

[ 打印 ]
閱讀 ()評論 (0)
評論
目前還沒有任何評論
登錄後才可評論.