區(qū)塊鏈技術(shù)是可以降低社會系統(tǒng)運作的信任成本。它用軟件的方式解決了信任問題,前提是要保證軟件的可信度。
同時軟件運行也需要高的性能,盡管目前的區(qū)塊鏈性能已經(jīng)足夠支撐我們?nèi)プ鲆恍?yīng)用和探索,但還不能替代中心化系統(tǒng)。
如果要將區(qū)塊鏈運用到社會的方方面面,還需要去打破目前區(qū)塊鏈性能、安全的瓶頸。
12月6日,《麻省理工科技評論》與螞蟻集團共同舉辦了“區(qū)塊鏈與數(shù)字經(jīng)濟發(fā)展論壇”,會議邀請到了美國西密西根大學(xué)計算機科學(xué)系正教授楊子江,中科院計算所研究員、博導(dǎo)孫毅,南開大學(xué)教授、博導(dǎo)、天津網(wǎng)絡(luò)與數(shù)據(jù)安全技術(shù)重點實驗室副主任汪定,他們分別從代碼、性能、口令等領(lǐng)域,分享了區(qū)塊鏈技術(shù)最前沿現(xiàn)狀。
“90%項目代碼高度相似度,市值半年后跌至10%”—楊子江(美國西密西根大學(xué)計算機科學(xué)系正教授、深信科創(chuàng)創(chuàng)始人兼CEO)
人類的信息發(fā)展非常快,從遠(yuǎn)古打繩結(jié)來記錄,到現(xiàn)代信息時代的電郵、手機,信息流轉(zhuǎn)的非常通順,信息量非常大。但是有一個問題始終沒有解決,就是信任問題。
為什么我們要在火車站排長隊?因為它不信任你有票可以上火車。相比之下,歐洲的火車站、地鐵站,是隨機抽查的機制,因為它假設(shè)你有票,它信任你已經(jīng)買了票。它不檢票,因此沒有時間成本。
可以看出,信任其實是有代價和成本的。我們每一天都在為信任付出高昂成本,不管是時間成本還是金錢成本。
區(qū)塊鏈解決了人類歷史上2000年來沒有解決的信任問題,至少從理論上解決了。
人類歷史依賴三個技術(shù)的進步,計算技術(shù),從算盤到計算機,計算速度增加了很多;通信技術(shù),從信鴿到互聯(lián)網(wǎng),信息在傳儲過程中的信息量以及信息的考核性都有很大的提升;但有一個技術(shù)始終沒有太多的進展,就是存儲技術(shù),以前是用書,現(xiàn)在記載到一個光盤、硬盤或者一個外置的云存儲項,但是它的信任問題沒有很好的解決。
區(qū)塊鏈技術(shù)是由多方共同記錄和維護的分布式數(shù)據(jù)庫,該數(shù)據(jù)庫通過哈希形成一種鏈狀結(jié)構(gòu),其中數(shù)據(jù)的記錄和維護通過密碼學(xué)技術(shù)來保證其完整性,使得任何一方難以篡改、抵賴、造假。
所以歸根到底這是一個數(shù)據(jù)庫技術(shù),是存儲技術(shù)。但區(qū)塊鏈?zhǔn)怯密浖懙?,這里有一個問題。
比爾·蓋茨曾說,人類歷史上所創(chuàng)造的最復(fù)雜的人造物是軟件,它復(fù)雜到?jīng)]有人能保證它的正確性。寫軟件與蓋摩天大樓不同,帝國大廈蓋起來時很復(fù)雜,因為它是第一個超過一百米的高樓,但是你蓋第二座時,有第一座的藍本,就會簡單很多。
但是軟件不一樣,每一次寫軟件都是第一次在寫,所以它里有很多很多的錯誤。工業(yè)級的軟件每千行有七個錯誤。
區(qū)塊鏈解決了信任問題,但是如果寫區(qū)塊鏈的軟件不安全,存在大量的漏洞,信任從何談起?
這里的安全風(fēng)險是很多的,比如說基礎(chǔ)設(shè)施里的區(qū)塊鏈時間,代碼的安全、共識機制、加密機制的安全等,再比如智能合約的安全,有溢出漏洞、時間漏洞等,有些是通用軟件的漏洞,有些是智能合約它獨特的漏洞。
2019年交易所的漏洞就占了黑客攻擊的61%。我們現(xiàn)在主要做的就是智能合約的漏洞檢查,這個占了大概12%的損失,錢包流動14%,供應(yīng)鏈漏洞占了8%等。
我們是如何做區(qū)塊鏈測試的呢?
目前我們采取一般性分析、靜態(tài)分析、模糊測試、并發(fā)安全等各種各樣的技術(shù)。因為每一種技術(shù)可能能發(fā)現(xiàn)錯誤,但不能發(fā)現(xiàn)所有的錯誤,要用不同的技術(shù)來盡量確保安全性。
一般性分析,比如說文檔的規(guī)范、社區(qū)的治理、項目的概況分析等,然后再用計算分析來掃描代碼,然后再加上模糊測試,模糊測試是一個動態(tài)技術(shù),最后還專門做一個并發(fā)安全的測試。因為區(qū)塊鏈里有大量并發(fā)的問題,并發(fā)導(dǎo)致軟件寫起來非常的復(fù)雜,并發(fā)軟件有很多難以讓人琢磨的漏洞,因為人的大腦不適合寫并發(fā)程序。
首先,行之有效的是模糊測試,因為模糊測試它能真的在跑你的程序,不像靜態(tài)分析有很多的錯誤它不是真的錯誤,并且靜態(tài)分析它經(jīng)過編譯器的優(yōu)化,可能和真實的錯誤不太一樣。我們在做模糊測試時,是真的把區(qū)塊鏈軟件跑起來,跑的過程中能反復(fù)檢測,并且試圖產(chǎn)生一個輸入,能讓它更趨近可能會發(fā)生錯誤的點。當(dāng)然這些都是概率問題,我們不能保證它一定能發(fā)生檢測到錯誤。
然后模糊引擎的測試,就是我們要做一個全自動的測試工具,不能用手工,所以我們要自動的創(chuàng)建一個測試網(wǎng)絡(luò),自動的部署被測試的智能合約,自動的挑選Papifashen,并且根據(jù)輸入類型產(chǎn)生輸入,然后它自動的進行執(zhí)行。
它要反復(fù)的跑,看里面有什么錯誤。過程中還要做監(jiān)控,比如說智能合約的哪一個部分被執(zhí)行過,我們要避免再執(zhí)行它。然后要記錄智能合約哪個部分被錯過了,需要什么樣的條件才能被執(zhí)行到的,錯過的某個部分具體的變量是怎么復(fù)制的?是否有已經(jīng)漏洞?所以觀測過程中,檢查有沒有碰到漏洞是一部分,更重要的是記錄我們哪些地方被執(zhí)行了,哪些地方?jīng)]有被執(zhí)行了,怎么樣改變輸入才能讓沒有被執(zhí)行的地方下次能被檢測到。
為了能進一步的近乎證明一個錯誤不會產(chǎn)生,我們用了另外一種算法就是符號執(zhí)行,符號執(zhí)行它的計算量是比較大的,但是它有一個好處,就是能系統(tǒng)地測試軟件中的每一條路徑。
我們在代碼分析時做了一些比較有意思的東西,對現(xiàn)有的開源項目代碼相似度進行統(tǒng)計,我們拿了2019年3月份的485個發(fā)幣項目,還有到了2019年的9月份又拿了500多個,66個項目做他們的代碼分析。平均每一個項目他們的代碼量是500、600行左右。
最后的結(jié)論是,超過90%的項目代碼相似度在80%以上,90%的項目的代碼和另外至少1個項目代碼相似度80%,自己寫代碼的項目非常少。
代碼相似度在80%以上,市值在發(fā)布半年后降到了發(fā)布時的10%的以下。如果一個項目的原創(chuàng)能力強,你市值不會那么容易掉下去,說明投資人也會看技術(shù),所以這其實還是技術(shù)實力的事情。
圖|楊子江博士
“用協(xié)同思維搞區(qū)塊鏈性能優(yōu)化”—孫毅(中科院計算所研究員、博導(dǎo))
我們主要聚焦于區(qū)塊鏈技術(shù)問題,底層技術(shù)尚未成熟,存在性能、安全性、互操作性、強化合約等一系列技術(shù)挑戰(zhàn)。性能挑戰(zhàn)是目前是非常受關(guān)注的議題。
為什么要用協(xié)同?因為區(qū)塊鏈的性能受到多種因素的制約,而這些因素實際上是相互關(guān)聯(lián)的,就像一個木桶里擱個板,當(dāng)我們把這塊短板彌補上以后,會發(fā)現(xiàn)另一塊可能會成為新的短板,所以我們要真正搞優(yōu)化時,是需要用協(xié)同的思想去考慮的。
怎么樣去做協(xié)同優(yōu)化?從三個層面分析:
第一,存儲計算和傳輸,存算傳的協(xié)同,這是在區(qū)塊鏈軟件的內(nèi)部。第二,軟硬件協(xié)同的思想,提升區(qū)塊鏈的性能。螞蟻其實也做了很多的軟硬件一體化的設(shè)計,這是非常好的一些思路。第三,作為一個分布式系統(tǒng)來講,區(qū)塊鏈很難在性能方面跟某些中心化的系統(tǒng)去做這種競爭,所以它更多是一個互補合作的關(guān)系。
第一部分,我們在計算傳輸存儲層面進行鏈內(nèi)優(yōu)化,在計算層上采用區(qū)塊鏈并行化架構(gòu)模型和算法,通過一條主鏈連接很多的分片、子鏈,然后讓分片和子鏈做并行化,通過主鏈來進行交互,來提升我們的性能。之后與創(chuàng)新工場的聯(lián)合實驗室提出了一個異步共識的算法,為了防止它的安全性不降低,我們還提出了一個連母共識的機制。通過把同步通信變成異步通信。
在性能研究的過程中,我們又初步提出了一個叫并行多鏈的架構(gòu),它不需要中間的,它不是把傳統(tǒng)的新型架構(gòu)打散成一個純網(wǎng)狀的架構(gòu),可以更進一步提升我們整個的性能。
除了計算層,存儲和傳輸同樣需要進行改進。我們提出了一個雙重的壓縮方法,對于K域提出了一個數(shù)據(jù)壓縮的方法,對于Y域我們也提出了一個兩層哈希壓縮的方法。這是基于數(shù)據(jù)壓縮的存儲方法BZIP,有效的解決了驗簽吞吐量瓶頸??梢燥@著的降低我們對于磁盤LO的訪問,然后使得我們的性能在存儲這個方面得到一系列的這種提升。
在傳輸層上,我們提出了一個層次化的傳輸協(xié)議,這是基于無連接數(shù)據(jù)傳播的低延遲區(qū)塊鏈的傳輸優(yōu)化算法,這個協(xié)議我們在現(xiàn)網(wǎng)上做了一些實驗,效果也很不錯。
第二部分,我們研究了面向區(qū)塊鏈的專用計算架構(gòu),提出了面向區(qū)塊鏈的專用計算架構(gòu)(KPU,Kernel Processing Unit)。它是一個專用計算芯片的思想,把我們區(qū)塊鏈上常用的操作,給它分裝了獨立的IP盒,然后我們再用軟件定義的思想,它需要時我們按需去組合這些IP盒組成一些區(qū)塊鏈需要的計算邏輯。
這一塊我們分了功能區(qū)和非功能區(qū),一部分實現(xiàn)計算的工作,一部分實現(xiàn)數(shù)據(jù)管理的這些工作。這一點上的話,軟硬件一體化的這些工作都是未來我們可以去大膽嘗試的。
第三部分,是區(qū)塊鏈鏈上鏈下系統(tǒng)的協(xié)調(diào),協(xié)同優(yōu)化的工作。我們主要做二層通道、二層網(wǎng)絡(luò)優(yōu)化的工作。比如我們把鏈外的支付通道網(wǎng)絡(luò)或者狀態(tài)通道網(wǎng)絡(luò)給它在路由上面去做了一些優(yōu)化。但目前我們的支付通道網(wǎng)絡(luò)里的路由算法跟互聯(lián)網(wǎng)的路由算法比起來顯得比較初步。所以我們借用了互聯(lián)網(wǎng)上的分域、分層路由的思想,通過一個定制化的標(biāo)簽,然后來實現(xiàn)了一個層次化的路由,有點類似于我們互聯(lián)網(wǎng)上的域間路由和域外路由,通過這種方法來去優(yōu)化我們的路由通道算法,這是我們在鏈外通道里所做的一些工作。
區(qū)塊鏈的性能優(yōu)化到底重要還是不重要?
目前對于我們區(qū)塊鏈正在探索的這些場景和應(yīng)用上來說,區(qū)塊鏈的性能已經(jīng)足夠支撐我們的區(qū)塊鏈在各個行業(yè)里,去做有意的部署和應(yīng)用探索。從這個層面上來講,性能的優(yōu)化可能沒有那么重要,但為什么我們又要去做它呢?
如果我們能把區(qū)塊鏈的性能做的更好的話,未來很多現(xiàn)在還很難在區(qū)塊鏈上去做的場景,未來可能就可以遷移到區(qū)塊鏈上。比如說每年雙十一我們大家都非常盼望著去看阿里、螞蟻發(fā)布的TPS能達到什么樣的量級,現(xiàn)在這么高性能的系統(tǒng)確實還是通過我們中心化的一些系統(tǒng)來實現(xiàn)的,但是未來如果我們的區(qū)塊鏈真的通過我們的努力也能打造每秒鐘幾十萬的這種吞吐量的話,那未來我們也就有可能把這方面的一些應(yīng)用,也嘗試著在我們分布式的區(qū)塊鏈系統(tǒng)上面做一些探索。所以,從這一點上來講,區(qū)塊鏈的性能優(yōu)化其實很重要。
區(qū)塊鏈的性能優(yōu)化一定不能是單點突破,一些重大的性能突破,往往是伴隨著底層技術(shù)的這種架構(gòu)層面、新的框架層面來出現(xiàn)的一些工作,而如果我們單純的就去做一個算法、做一個協(xié)議,我們能提升的空間不會很大。如果采用協(xié)同的方式,可以讓我們在更多的不同的層面,不同的架構(gòu)去做一些協(xié)同化優(yōu)化的思想,未來可能會是我們?nèi)〉眯阅軆?yōu)化突破的一個重要技術(shù)方向。
“誘餌口令技術(shù)是平衡安全性和效率的好辦法”—汪定(南開大學(xué)教授、博導(dǎo)天津網(wǎng)絡(luò)與數(shù)據(jù)安全技術(shù)重點實驗室副主任)
口令自誕生以來,始終面臨著可記憶和抗猜測的矛盾問題。
其中可記憶的口令要求口令有規(guī)律不復(fù)雜,但是抗猜測的口令剛好相反,口令盡量長,無規(guī)律,越復(fù)雜越好。并且現(xiàn)在這個形勢越來越嚴(yán)峻,我們?nèi)祟惖挠洃浤芰驼J(rèn)知能力非常有限,我們今天人類的記憶能力和2000年多年前的先輩比起來,并沒有增長多少。
但是攻擊者的能力現(xiàn)在是越來越強大,比如現(xiàn)在耳熟能詳?shù)脑朴嬎?,大?shù)據(jù)深度學(xué)習(xí)等,讓攻擊者能力越來越強大,口令安全這個問題越來越嚴(yán)峻,所以大家一直在尋找另一種身份認(rèn)證的方法替代口令。
口令這一塊實際上是老生常談的東西,我們天天都在用,但是長期以來,我們一直低估了它的問題難度和研究難度。
最早是在2004年,微軟那個時候還是比爾蓋茨擔(dān)任CEO,他提出使口令替代計劃,谷歌和其他很多大公司也跟進,但是后來這些計劃都悄無聲息的消失了。
從2000年開始,學(xué)術(shù)界也提出了大量的替代型的身份認(rèn)證方案,但是沒有一種身份認(rèn)證方案能取代口令的地位,時至今日口令依然統(tǒng)治我們身份認(rèn)證的世界。
這是有深層次原因的。身份認(rèn)證方法主要可以分為三類。
第一類是基于用戶所知,比如口令密碼這些,比如我們輸入的6位數(shù)字也是一種數(shù)字口令。
第二類是基于用戶所有,比如我們之前用過的銀行的U盾,USB Key,我們的智能卡片。
第三類是基于用戶所是,主要生物特征。既包括我們的指紋,人臉這種傳統(tǒng)的身份認(rèn)證的方法。也包括、手勢、敲擊鍵盤的頻率等,這種基于新型行為的身份認(rèn)證的方法。
后面兩種身份認(rèn)證方法不論是基于硬件還是基于生物特征,它都存在嚴(yán)重的問題,其中硬件成本比較高,另外他最大的問題是不具有可用性,用戶不可能隨身攜帶幾十個U盾。
而生物特征前幾年特別火,這一兩年大家慢慢的意識到它的問題,像很多城市前兩天剛出來禁止使用刷臉,法律明確規(guī)定禁止刷臉,不僅是刷臉,包括我們的指紋,包括我們的步態(tài)等這些身份認(rèn)證方法,都不適合用來做互聯(lián)網(wǎng)認(rèn)證,做網(wǎng)絡(luò)認(rèn)證。生物特征有它的好處,有它適用的地方,在現(xiàn)場認(rèn)證,比如做門禁是沒有問題的。
如果不連網(wǎng),比如解鎖我們的手機是沒有問題的,只要我們的生物特征不上傳到服務(wù)器當(dāng)中是沒有問題的。
但是在現(xiàn)實使用時,我們上傳自己的生物特征數(shù)據(jù),這里就存在一個巨大的問題,不具有可再生性。口令和生物特征都在我們的計算機當(dāng)中都是以01代碼存儲,口令會泄露,生物特征一樣能泄露。我們的口令能分分鐘改掉,但是我們的生物特征是改不掉的,我們?nèi)四樦挥幸粡?,我們的手指頭只有10個,一旦泄露將終身泄露。
圖|汪定博士
所以現(xiàn)在學(xué)術(shù)界逐漸形成了一個共識,在可預(yù)見的未來,口令仍將是最主要的身份認(rèn)證方法。
而近年來出現(xiàn)了數(shù)以百計“拖庫”事件,包括一些大型網(wǎng)站,Yahoo,Linkedin,Adobe,CSDN等。泄露大量用戶密碼,一些密碼貨幣交易所也遭遇此類危機,導(dǎo)致用戶的嚴(yán)重經(jīng)濟損失。
比起被“拖庫”,更可怕的是網(wǎng)站都沒發(fā)現(xiàn)自己被“拖庫”,直到N年后數(shù)據(jù)才浮出水面。如果說口令文件泄露時,網(wǎng)站及時發(fā)現(xiàn),并且通知用戶更新口令,還能挽回一些損失。但是現(xiàn)實當(dāng)中很多時候是網(wǎng)站不知道口令文件泄露了,包括數(shù)十家用戶量龐大的網(wǎng)站,都是泄露500萬以上的用戶帳號,而且往往是泄露了8年、4年等很長時間之后才知道文件被黑客竊走了。
如何降低用戶口令泄露帶來的危害?目前我們使用的主要有3種技術(shù)。
第一個,使用機器相關(guān)函數(shù)。比如口令猜測時一般涉及到哈希運算,可以使用一個只有特定服務(wù)器能計算的的哈希函數(shù),黑客竊取口令文件之后沒有這個服務(wù)器,無法計算機器相關(guān)哈希函數(shù),這是一種和機器相關(guān)的函數(shù)。
第二個,使用門限密碼學(xué),這個是比較經(jīng)典的,傳統(tǒng)的想法,把口令分成多份,分別存儲在不同的地方,不同的服務(wù)器。
第三個辦法就是放置假口令,做到以假亂真,欺騙迷惑,及時的檢測。
前面兩種技術(shù)往往對客戶端或者對服務(wù)器的影響比較大,需要對服務(wù)器端、客戶端進行修改,而放置假口令這種技術(shù)它不改變用戶,往往現(xiàn)在工業(yè)界有一句話:是什么樣的代價最大,改變用戶使用習(xí)慣的代價最大,所以盡量不去改變用戶的習(xí)慣。
所以使用分布式密碼學(xué)的這種技術(shù)往往現(xiàn)實當(dāng)中使用的可能性不大,而機器相關(guān)函數(shù)存在可擴展性問題,所以綜合來看放置假口令雖然不是最佳的方法,但是綜合安全性和效率來看,它是可以被接受的。