作者:上海交大教授、密碼學家 來學嘉
與密碼算法密不可分的區(qū)塊鏈
首先,區(qū)塊鏈是密碼算法搭起來的,所以說它和密碼算法是不可分割的。另一方面,反過來區(qū)塊鏈又對密碼學有貢獻,它對密碼學的發(fā)展提供了一些新的思路或者新的方向。最后捎帶提一些我們常用的術(shù)語,應(yīng)該怎么樣建立正確的認識。
區(qū)塊鏈本質(zhì)是什么呢,是全局分布而且同步的賬本,大家都有一個一樣的東西。這套東西能驗證賬本內(nèi)容,而這些內(nèi)容是每個人都可以驗證的。同時還能保證賬本中放的是交易,你又能驗證交易是不是合法。
說到區(qū)塊鏈不得不提到比特幣,因為區(qū)塊鏈是從比特幣來的。比特幣是分布式電子系統(tǒng),利用網(wǎng)絡(luò)在沒有事先信任情況下實現(xiàn)交易支付。
比特幣的交易通過數(shù)字簽名鏈來實現(xiàn),然后把這些交易記錄放到一個數(shù)據(jù)庫,一個共同驗證的數(shù)據(jù)庫,就是區(qū)塊鏈。密碼里有幾個基本的密碼函數(shù),數(shù)字簽名、Hash函數(shù)還是最常用的,其中最古老的叫做加密,但比特幣沒有加密。
比特幣是什么東西,其實就是我們常說的地址。誰知道私鑰誰就擁有比特幣,因為我有私鑰,可以對它做操作,做支付,這就是交易。
支付就是很簡單,因為我有私鑰,可以選一個想給的人,把他的地址拿過來,把我的簽名和地址、錢綁到一起,就表明轉(zhuǎn)到他那兒。因為他有他的私鑰,可以用他的私鑰接著往下做交易。
持有者對前期交易和收款人的地址做簽名,就是交易。這個過程是可以公開驗證的,因為數(shù)字簽名的一個特性就是只有知道私鑰的人,才能夠生成簽名,而其他人都可以驗證,而且只能驗證,這樣的話就有一種抗抵賴的功能。
數(shù)字貨幣有一個很大的問題,就是copy的問題,因為一個文件和它的拷貝件是不可區(qū)分的,這樣的話,電子貨幣原則上完全可以重復(fù)使用。這樣的貨幣系統(tǒng)就失去了它的意義,所以需要一個方法防止雙花問題。
傳統(tǒng)解決方案是靠一個第三方,必須經(jīng)過銀行檢查這個錢是否用過。比特幣想了一個更好的辦法,為了防止重復(fù)花費,就把所有用過記錄全部公開,這樣的話就無法重復(fù)使用了。公開記錄的數(shù)據(jù)庫就叫做賬本,或者Blockchain,區(qū)塊鏈就是這樣來的。也就是說,區(qū)塊鏈是比特幣為了防止雙花,而提出的一種系統(tǒng)。
這個記賬的過程我們把它叫做挖礦,其實挖礦這個東西比較有意思在于,它做了好幾件事:
一,挖礦要驗證新出現(xiàn)的交易是合法的;
二,要把這些驗證過的交易記錄下來,放到賬本里面進行記賬,產(chǎn)生一個新的區(qū)塊鏈。
在產(chǎn)生新區(qū)塊的同時,實際上又生成新的貨幣。挖礦從密碼學角度講,它是很有意思的一個過程。最后,它又運用一個密碼函數(shù),Hash函數(shù)單向性控制挖礦的速度。用代碼控制了挖礦的難度,實際上是控制Hash函數(shù),函數(shù)碼0的個數(shù),因為Hash是單向函數(shù),計算的過程實際上是破譯的過程。破譯的難度可以控制,每10分鐘生成一個新的區(qū)塊。
密碼學——因為區(qū)塊鏈而更加“值錢”
看下來就知道了,區(qū)塊鏈就是用密碼算法搭起來的。經(jīng)過數(shù)字簽名的鏈保證交易正確,然后Hash函數(shù)保證完整性和不可篡改,保證數(shù)據(jù)可以驗證及其可信性。Hash函數(shù)單向性可以用來控制貨幣的生成速度,這是一方面。另一方面,區(qū)塊鏈的形成對密碼學又產(chǎn)生新的貢獻,做出我們一些過去做不到的事情。
有了區(qū)塊鏈以后,密碼學“值錢”了,過去密碼學是賠錢的,密碼是保護數(shù)據(jù)用的,成本比較高。但有了區(qū)塊鏈后,密碼學就變成值錢的東西。因為我們通過生成符合某些條件的Hash碼,經(jīng)過一些密碼函數(shù)計算結(jié)果變成了錢。同時,有了區(qū)塊鏈,有了比特幣這類應(yīng)用后,這些做密碼的人突然好像吃得開了,所以說密碼學“值錢”了。密碼函數(shù)還有勒索軟件,勒索軟件是什么東西,就是把密碼函數(shù)算一下,把你的文件變成一個密文,問你要比特幣。
真正從學術(shù)和技術(shù)上來講,密碼學真正貢獻在哪里呢,就是Non-Repudiation(不可否認性)。圖示這五個性質(zhì)是ISO定義的安全服務(wù)要素。保密性就是加密,認證真實性就是數(shù)字簽名,完整性就是Hash函數(shù)。Non-Repudiation是不可否認性、抗抵賴,數(shù)據(jù)函數(shù)只有一個性質(zhì),其他人只能驗證。數(shù)字簽名為抗抵賴提供一個證據(jù)。
密碼學過去實現(xiàn)不了抗抵賴,區(qū)塊鏈出來之后就有意思了,你就發(fā)現(xiàn)區(qū)塊鏈本身提供了抗抵賴的平臺,因為區(qū)塊鏈就是我們現(xiàn)在可信第三方,大家都服從它。鏈上說什么就是什么,很自然就可以起到抗抵賴的作用,這也是比特幣中的雙花問題。
還有一種,我們過去做不到的事情是抗捏造。這件事情過去密碼算法也做不到,因為密碼學里用的是單向函數(shù),必須已經(jīng)有了數(shù)據(jù)之后才能實現(xiàn)某些功能。區(qū)塊鏈就把你過去做的事情全部記下來,你想捏造,捏造不出來,大家只認賬上的東西??傊畞碚f,區(qū)塊鏈就給密碼學中或者安全中需要的抗抵賴、抗捏造,從這個角度講提供了一套完整的解決方案。
安全服務(wù)里這一大塊實際上是密碼的東西,但有了區(qū)塊鏈后密碼學的作用又能更多一點,因為區(qū)塊鏈是由密碼函數(shù)構(gòu)造,對密碼學起了促進作用,在抗抵賴、抗捏造方面有了新的方法。
常用術(shù)語的正確理解
看了比特幣構(gòu)造之后,用了簽名、Hash就是沒有用加密,不管怎么說,首先基本的區(qū)塊鏈、比特幣沒有加密,盡量避免用加密貨幣這個詞。但是另一方面完全公開的內(nèi)容又讓區(qū)塊鏈應(yīng)用受到限制,很多人不愿意把他干的事情全部公開,讓每個人知道。我們現(xiàn)在干的事情就是把加密功能放到區(qū)塊鏈里,但這就麻煩了,區(qū)塊鏈特性是公開可驗證,參與人都可以驗證這件事情,我接受記賬才有效。
這時候用了保密,就是說驗證人看不到內(nèi)容,還要承認他,怎么辦呢,密碼學的方法就是零知識證明、環(huán)簽名等等,過去我們認為高精尖技術(shù)都堆到這里來了,雖然比較困難,但它又解決了很多實際問題。
很多人都在說區(qū)塊鏈的去中心化,仔細想想,區(qū)塊鏈根本沒有去中心,而是重新建立了一個中心,大家就認這個唯一的中心,更強的中心,就是鏈本身,大家只認數(shù)據(jù)。
或者說我們重新造一個上帝作為中心,所謂去中心,理解的角度是從比特幣來講。比特幣去掉了發(fā)行貨幣的銀行作為中心,也就是在交易時沒有中心了。但真正用區(qū)塊鏈實際上是創(chuàng)造出了一個中心。所以“去中心化”這個詞用起來也要當心。
無論是POW還是POS,真正共識、唯一的共識,就是我們參與者只認可最長鏈的內(nèi)容。POW、POS等等本質(zhì)上是記賬權(quán),是在比特幣中挖礦的結(jié)果,挖礦的目的是為了驗證交易,同時因為驗證交易的行為獲取獎勵,就是創(chuàng)造新的比特幣。
什么叫公有鏈呢,公有鏈就是每個人都有記賬權(quán),全民投票。聯(lián)盟鏈是只有大股東才有投票權(quán)、記賬權(quán)。私有鏈是老板記賬,回到中心化。有了這些東西后,再來看看公有、聯(lián)盟、私有角度,看看區(qū)塊鏈什么地方能用。從區(qū)塊鏈角度講,記賬功能和交易功能是相對獨立的兩件事情,也就是這邊記賬,那邊是賬本里交易。如果是公有鏈,交易也是公開的,那就是比特幣。
如果是私有鏈,交易也是私有,只有特定人才能干,其實就是數(shù)據(jù)庫,沒什么新鮮的。用得最多是聯(lián)盟鏈,有權(quán)限限制的各種交易和有權(quán)限限制的記賬功能。從應(yīng)用角度講,這句話很重要,即區(qū)塊鏈真正意義是什么,它重建了信任機制。
上個月天津海關(guān)的一個區(qū)塊鏈跨境貿(mào)易平臺上線,用的就是平安壹賬鏈,我剛好參與這個項目。這個項目干了什么事情呢,就是把境內(nèi)境外買方賣方,還有銀行、物流這些都放到一個鏈上。通過這個鏈,任何一方都可以看看相關(guān)的內(nèi)容是否可信。比如賣方,從買方購買記錄、物流記錄、銀行記錄等看出是否相信他,銀行也從記錄里看出是否給他貸款。
總結(jié)一下,密碼學搭建了區(qū)塊鏈,區(qū)塊鏈反過來給密碼學增加了新功能,以及從這個角度理解,一些常用的詞要如何正確使用。