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