邱智
摘 要:區(qū)塊鏈被稱為是一種“構建信任”的技術。本文以銀行系統(tǒng)為例,講述了去中心化的含義,并解釋了哈希算法以及數(shù)字簽名的技術原理,以及其在區(qū)塊鏈中的具體作用,使讀者能進一步了解區(qū)塊鏈是如何在一個不可信的環(huán)境下,使眾多的平等參與者能夠達成可信的共識,從而實現(xiàn)去中心化。
關鍵詞:區(qū)塊鏈;去中心化;技術基礎
近年來,隨著比特幣行情的火爆,區(qū)塊鏈作為一個新興的技術名詞,也逐漸地地為人們所知。但是對多數(shù)普通民眾而言,到底什么是區(qū)塊鏈并不是太清楚,認為比特幣就是區(qū)塊鏈。其實區(qū)塊鏈技術最有價值之處就是提供了一種去中心化的數(shù)據(jù)記錄系統(tǒng),甚至可以說是去中心化成就了區(qū)塊鏈。本文嘗試運用相關的知識,解釋一下區(qū)塊鏈和去中心化的含義,以及區(qū)塊鏈是如何實現(xiàn)去中心化的。
一、什么是區(qū)塊鏈
2008年10月31日,一個署名為中本聰(Satoshi Nakamoto)的人在互聯(lián)網(wǎng)上發(fā)表了一篇名為《Bitcoin:A Peer-to-Peer Electronic Cash System》(比特幣:一種點對點的電子現(xiàn)金系統(tǒng))的論文,文章描述了一種完全脫離各國中央銀行的電子貨幣系統(tǒng)——比特幣。而作為比特幣的底層技術支撐,區(qū)塊鏈(Blockchain)也隨之進入了人們的視野。區(qū)塊鏈從字面看,區(qū)塊(Block),就是包含有數(shù)據(jù)記錄的模塊,而所謂的鏈(Chain),就是把這些數(shù)據(jù)模塊串聯(lián)在一起的某種邏輯關系。
如果拋開這些晦澀難懂的計算機術語,我們可以把區(qū)塊鏈技術通俗地理解為一種數(shù)據(jù)記錄方式。當今信息社會,我們無時無刻不在與數(shù)據(jù)打交道,我們的銀行存款、房產(chǎn)信息、個人信用記錄、微信、支付寶……等等,所有的這些數(shù)據(jù)都記錄在相應數(shù)據(jù)庫中,你可以把數(shù)據(jù)庫看成是一個大賬本,那么由誰來記錄并管理這個賬本就變得非常重要。目前的情況是系統(tǒng)是誰的就由誰來管理記賬,銀行存款由相應的銀行負責記賬,房產(chǎn)信息由房地局負責記賬,微信由騰訊記賬,支付寶由阿里記賬……等等,我們早已習以為常了。這些記賬方式都有一個共同的特點,即都有一個中心機構如政府部門、銀行或企業(yè)負責記賬管理,我們稱這種方式為中心化的記賬方式。而區(qū)塊鏈其實就是一種去中心化的分布式記賬系統(tǒng)。
二、什么是去中心化
那么什么是去中心化呢?所謂的去中心化是相對于傳統(tǒng)的中心化而言的。自從人類有了文字記錄以來,我們早已經(jīng)習慣于由專門的人或機構記錄信息,這就形成了信息記錄的中心化。
拿銀行存款和轉賬為例,通常的流程是:
你到銀行存款100元→銀行收款100元→銀行在你的賬戶中增加100元→存款完成。
張三到銀行提出向李四轉賬100元→銀行在張三的賬戶中減去100元→銀行在李四賬戶中增加100元→轉賬完成。
在這個交易過程中我們可以看到,銀行就是交易雙方共同選擇的可信任機構,我們所有的交易流程都要通過銀行這樣的一個信息中心進行記錄和管理,所有的賬目交易信息都存儲在銀行,銀行就成為了交易中心,也就構成了一個以銀行為核心的中心化記賬系統(tǒng)。
中心化記賬有很多好處,但也有很明顯的缺陷:如果記賬中心出現(xiàn)問題,例如銀行的信息系統(tǒng)被黑客攻擊或者系統(tǒng)產(chǎn)生錯誤,導致系統(tǒng)中的數(shù)據(jù)被篡改或損壞,就可能導致整個系統(tǒng)的出現(xiàn)危機甚至崩潰。雖然銀行的數(shù)據(jù)系統(tǒng)一般都有非常完備的安全措施,但也不可能保證百分之百的安全可靠。
另外,由于這種中心化的記賬方式的賬本是唯一的,它的運行是建立在記賬中心(比如銀行)的可信賴基礎之上,如果這個記賬中心自身信用出現(xiàn)問題,比如銀行內(nèi)部人員篡改數(shù)據(jù),甚至銀行由于經(jīng)營不善發(fā)生破產(chǎn)倒閉,那么廣大儲戶的多年積蓄也可能毀于一旦,中外歷史上已經(jīng)多次發(fā)生過這種事件。雖然現(xiàn)在有存款保險基金和銀保監(jiān)會等監(jiān)管機構和制度能對這種風險進行監(jiān)管和防范,但同樣不能保證百分之百的安全可靠。所以,這種中心化記賬方式對記賬中心本身的可靠性、相應的監(jiān)管制度都有著很高的要求。
針對中心化記賬的缺陷,人們又提出了另一種解決方案,即去中心化的記賬系統(tǒng),可望很好地解決這個問題。所謂去中心化就是就是系統(tǒng)舍去記賬中心,系統(tǒng)中沒有一個固定記賬中心進行統(tǒng)一的記賬,而是由系統(tǒng)中的全體參與者共同記賬。
還是以銀行為例,一個去中心化銀行系統(tǒng)是由全體儲戶共同創(chuàng)辦的,資金的存貸賬本在全體儲戶手中都有一份,每個儲戶都參與存貸資金的記賬。
還是拿銀行轉賬為例,在一個去中心化的銀行系統(tǒng)的轉賬流程是:
張三向銀行提出轉賬100元給李四→銀行在張三的賬戶中減掉100元→銀行在李四的賬戶中增加100元→銀行向全體用戶公告:(張三向李四轉賬100元)→所有用戶都在自己的賬本中記錄:張三向李四轉賬100元?!D賬完成。
由于賬目是由全體用戶自己記錄,并且賬本在全體用戶手中人手一份,這樣就不存在記賬中心人員徇私舞弊的情況,同時也規(guī)避了記賬中心崩潰和倒閉風險,這就是去中心化的意義所在。
三、區(qū)塊鏈如何實現(xiàn)去中心化
在傳統(tǒng)的中心化的記賬系統(tǒng)中,交易的可信度是由記賬中心(如銀行)的權威性所背書的,一般沒有人會質疑銀行出具的資產(chǎn)證明的可靠性,也沒有人會懷疑銀行出具的交易記錄的真實性。但是在一個去中心化的計算系統(tǒng)中,沒有一個這樣的權威的記賬中心,那么眾多互不相識的參與者該如何達成互相信任并產(chǎn)生一個獲得一致信任的賬本呢?
區(qū)塊鏈主要使用了哈希算法和數(shù)字簽名這兩種傳統(tǒng)密碼學的技術,使得在一個不可信的環(huán)境中的眾多平等參與者達成了可信任的共識。
1.哈希算法(Hash)
哈希也被稱為“散列”,是指對任意大小的輸入數(shù)據(jù),通過某種算法產(chǎn)生一個固定長度的輸出數(shù)據(jù)的過程。哈希算法的輸入數(shù)據(jù)可以是任意類型,可以一個word文檔,也可以是一個MP3音樂,甚至是整部高清電影,都可以根據(jù)需要選擇合適的哈希算法(如:MD5),對其進行變換,然后輸出一個固定長度的值。例如MD5算法會輸出一個128位的字符串。
哈希算法并不是簡單的在輸入數(shù)據(jù)中截取一段固定長度的值,而是將輸入數(shù)據(jù)壓縮到某一固定長度的摘要的算法?,F(xiàn)在常用的哈希算法有很多,例如MD5、SHA1、SHA2等,但任何哈希算法都應該具備以下特征:
正向便捷:對于任意給定的原數(shù)據(jù)X,可以較容易的算出哈希值Y。
逆向困難:很難通過哈希值Y反推出原數(shù)據(jù)X。
輸入敏感:原數(shù)據(jù)X的微小變化會使得哈希值Y產(chǎn)生很大的變化。
避免碰撞:很難找到兩個不同的原數(shù)據(jù)M和N,使得哈希值Hash(M)=Hash(N)。
哈希算法看起來很復雜,它到底有什么用呢?其實,正由于哈希算法具備的以上四個特點,哈希算法常用于校驗文件的真實性,也就是說我們可以使用哈希算法來驗證我們收到的文件是否被非法篡改。例如,在一個去中心化的銀行系統(tǒng)中,系統(tǒng)對所有用戶發(fā)布了一個新記錄的帳本,并公布了該賬本的哈希值,則每個下載這新賬本的用戶都可以通過計算下載賬本文件的哈希值,并用它與系統(tǒng)公告的哈希值進行比對,如果兩個值不相同,用戶便可以知道該賬本文件已經(jīng)被篡改,從而保證了每個用戶都能得到一個完全一致的賬本。
2.數(shù)字簽名(Digital Signature)
哈希算法解決了用戶賬本的一致性的問題,那么對于賬本中的記載的交易記錄來說,如何確保它是真實有效性的呢?在傳統(tǒng)的中心化的銀行系統(tǒng)中,用戶通過到銀行柜臺或在支票上簽名來確認交易的有效性。真實的簽名其實有兩方面的作用:其一,確認文件上的內(nèi)容是經(jīng)過我本人認可的,即防冒充;其二,我也不能否認文件的內(nèi)容經(jīng)過了我的認可,即防抵賴。
手寫簽名之所以能起到防假冒和防抵賴的作用,是因為我們每個人的簽名都包含了自己的書寫特征,別人很難模仿。因此,親筆簽名在古今中外的日常生活中被廣泛接受,比如簽署法律文書、合同等等。但是手寫簽名也有所不足,比如,簽名和文件的內(nèi)容沒有強相關性,可能簽名是真的,但文件的內(nèi)容卻經(jīng)過了篡改。另外,簽名通常只有為數(shù)不多的幾個字符,一般人很難辨別其真實性。有時候,即便是不同的筆跡專家也往往會得出不同的結論。
在一個去中心化的系統(tǒng)中,顯然需要一種更好的方式實現(xiàn)簽名的功能。因此區(qū)塊鏈選擇了數(shù)字簽名技術來解決這一問題。數(shù)字簽名與真實簽名一樣,也是一種驗證身份的方式,不同之處在于數(shù)字簽名應用了密碼學原理,比手寫簽名更加安全可靠,并且更加便于驗證真?zhèn)巍?/p>
數(shù)字簽名是如何實現(xiàn)防止冒充和防止抵賴兩個功能的呢?答案就是非對稱加密算法,常用的有RSA,DSA等。在非對稱加密系統(tǒng)中,我們使用某種算法(如RSA)可生成兩把具有特定數(shù)學關系的密鑰,一把對外公開,我們稱其為公鑰;一把對外保密,我們稱其為私鑰。通過公鑰加密的信息,只能用私鑰加以解密,通過私鑰加密的信息,也只能通過公鑰加以解密。
如果用戶用自己的私鑰對交易內(nèi)容進行加密,將得到一段密文,其他人只能用該用戶公布的公鑰對這段密文進行解密,才能看到交易的內(nèi)容。因為私鑰是唯一的,并且只有該用戶自己知道,其他人是無法生成一個能用其公鑰解密的交易信息的,這樣就實現(xiàn)了不可假冒。同時,由于每個人都知道該用戶的公鑰,能用該用戶的公鑰解密得到的交易內(nèi)容,必然是用該用戶的私鑰加密的,而私鑰是唯一只有該用戶自己知道,因此該用戶也無法對交易內(nèi)容進行抵賴。這樣就保證了賬本中交易記錄的真實有效性,我們把這個技術稱為數(shù)字簽名。
在一個去中心化的銀行系統(tǒng)中,我們并不需要對原始交易記錄進行保密,并且有時候原始數(shù)據(jù)比較大,全部用RSA算法進行加密會影響效率,所以我們一般使用哈希算法得到原始數(shù)據(jù)的哈希值,然后用私鑰對該哈希值進行簽名,這樣既保證了該交易數(shù)據(jù)不可篡改,又同時保證了該交易的不可假冒和不可抵賴。
3.哈希指針(Hash Pointer)
在數(shù)據(jù)結構里,指針是一個指向目標數(shù)據(jù)位置的地址,而哈希指針不僅是指向目標數(shù)據(jù)存儲位置的地址,而且還包含了該目標數(shù)據(jù)的哈希值。區(qū)塊鏈正是應用了哈希指針,使每一個新生成的區(qū)塊都包含了上一個區(qū)塊數(shù)據(jù)的哈希值,從而把一個個分散的數(shù)據(jù)塊鏈接成了一串“珍珠鏈”。
通過前面講的哈希算法的作用,我們就可以知道,任何人都可以從最新的區(qū)塊向上追溯整個鏈條上的區(qū)塊,并且通過校驗哈希值確定區(qū)塊中的數(shù)據(jù)是否被篡改。除非有人能掌握全系統(tǒng)51%以上的節(jié)點(這在通常的情況下是幾乎不可能做到),否則區(qū)塊鏈上的所有區(qū)塊一旦生成就不可更改,從而在沒有一個權威記賬中心的情況下,得到了一個不可篡改、不可假冒、不可抵賴、可被全體參與者廣泛信任的去中心化記賬系統(tǒng)。
綜上所述,哈希算法為區(qū)塊鏈上的每位參與者提供一種就當前記錄狀態(tài)達成一致的方法,而數(shù)字簽名則為系統(tǒng)中記錄的每筆交易提供了一種確保其真實有效的手段,區(qū)塊鏈依靠這兩個技術來確保系統(tǒng)中的數(shù)據(jù)不能被輕易破壞,從而在一個不可信的環(huán)境下,使眾多的平等參與者達成了可信的共識,實現(xiàn)了去中心化。
參考文獻:
[1]中本聰.比特幣:一種點對點的電子現(xiàn)金系統(tǒng),2008-10-31
[2]項銀濤.區(qū)塊鏈技術及其在金融領域的應用前景分析[N].上海證券報,2018-06-06
[3]李奕杭.基于區(qū)塊鏈的數(shù)字簽名系統(tǒng)的設計與實現(xiàn)[D].北京交通大學,2018
[4]本刊編輯部.區(qū)塊鏈剖析:基本結構、關鍵機制與核心性質[J].中國總會計師,2019(11)