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