起源:區塊鏈中的密碼學

買賣虛擬貨幣
前言:談區塊鏈離不開密碼學。通常來講,區塊鏈技術是利用塊鏈式資料結構來驗證與儲存資料、利用分散式節點公式演算法來生成和更新資料、利用密碼學的方式保證資料傳輸和訪問的安全、利用由自動化指令碼程式碼組成的智慧合約來程式設計和運算元據的一種全新的分散式基礎架構與計算正規化。區塊鏈的核心是它按照時間順序將資料區塊以順序相連的方式組合成的一種鏈式資料結構,並以密碼學方式保證的不可篡改和不可偽造的分散式賬本。我們對此做一個總結,可以發現區塊鏈中有四項不可缺的核心技術,分別是分散式儲存、共識機制、密碼學原理和智慧合約。而今天我們將主要從密碼學的角度聊一聊區塊鏈的起源問題。【愷撒密碼】密碼學作為一門古老的學科,有著悠久而奇妙的歷史。它用於保護軍事和外交通訊可追溯到幾千年前文字剛剛產生的上古時期。幾千年來,密碼學一直在不斷地向前發展。而隨著當今資訊時代的高速發展,密碼學的作用也越來越顯得重要。它已不僅僅侷限於使用在軍事、政治和外交方面,而更多的是與人們的生活息息相關:如人們在進行網上購物,與商務交流,使用信用卡等等,都需要密碼學的知識來保護人們的個人資訊和隱私,當然對於我們關注的區塊鏈技術,密碼學作為其基石而存在。凱撒(Caesar)是第一個把替換密碼用於軍事用途、並且記錄下來的人。在他的那本歌頌自己豐功偉績的《高盧記》裡,凱撒描述了他把密信送到正處於圍困之中、瀕臨投降的西塞羅手中。凱撒非常喜歡使用密文,後世的《凱撒傳》詳細地記錄了凱撒使用的一種密文。而這種加密方法,甚至沿用到今天。   凱撒密碼的表示方法是:將每個字母,用字母表中這個字母之後三位的那個字母替代。它是一種替換加密的技術,明文中的所有字母都在字母表上向後(或向前)按照一個固定數目進行偏移後被替換成密文。例,當偏移量是3的時候,所有的字母A將被替換成D,B變成E,以此類推。也就是字母A用字母D替代,字母B用字母E替代。比如Abroad,凱撒在用密文寫信的時候,就被替換為Deurdg。這樣就得到了敵人看不懂的密文。假如有這樣一條指令:RETURN TO ROME
用愷撒密碼加密後就成為:UHWXUQ WR URPH如果這份指令被敵方截獲,也將不會洩密,因為字面上看不出任何意義。現在看來這種加密方式可能稍顯幼稚,但作為歷史上文字記載的最早使用加密金鑰的案例:由發件人和收件人共享加密金鑰,標誌了現代密碼學的發端。可以說,從凱撒密碼,到20世紀公共金鑰被髮明之前的這幾千年時間裡,密碼學的原理都是一樣的。比特幣和區塊鏈的加密方式,跟凱撒密碼的原理區別,也就是多了公鑰而已。直到今天,我們在看很多諜戰片的時候,會發現不少特工和間諜還是採取這種方式傳輸情報。這裡有幾個術語,需要特別指出。密碼學家通常講用來書寫原始資訊的字母表,也就是正常的字母表,稱為明碼錶;而用來替換明碼字母的稱為密碼錶。這也是密碼這個詞的來歷。那麼往後移動三位,這個“三”則被稱為金鑰。當然,學過數學的人都明白,這裡有26個字母,僅僅按照順序移動,每個字母就有25個不同的替代方式,即25種金鑰,要是把字母順序打亂,金鑰就更多了。演算法則是透過各種嘗試,破譯密碼的過程。可以想象,在公元前100年左右,也就是相當於中國的西漢時期,要想破譯凱撒的密碼,那可能性幾乎為零。在密碼學中,愷撒密碼是一種最簡單且最廣為人知的加密技術。愷撒密碼還在現代的ROT13系統中被應用。但是和所有的利用字母表進行替換的加密技術一樣,愷撒密碼非常容易被破解,而且在實際應用中也無法保證通訊安全。
【多表代換】最早的古典密碼體制主要包含單表代換密碼體制和多表代換密碼體制。作為古典密碼中的兩種重要體制,一直在古代歷史上的全球各個區域廣泛地被使用。凱撒密碼就是一種典型的單表代換密碼。單表代換密碼在長達一千年的時間裡,被認為是無法破解的,因為存在著數量龐大的金鑰,依靠手工是根本計算不過來的。但是隨著社會的發展和技術的進步,來自東方的阿拉伯人,找到了更新的技術,從而發現了一條捷徑來破獲這個被認為是無解的密碼,這次勝利是由阿拉伯世界的語言學家、統計學家和宗教學家三者共同完成的。這還要間接感謝中國的造紙術的發明,伊斯蘭文明得以快速傳播。因為書籍需求量大增,那麼就需要有人來校對,最能勝任這個工作的自然是神學家。他們在校對的同時,還在統計默罕默德啟示錄的用詞頻率,如果這個啟示錄出現了新詞,那麼它出現的年份肯定就更往後等等。在梳理的過程中,他們也順道發現了一些字母出現的頻率就是比其他的字母要高得多。學習過英語的我們知道,字母e是最常見的,其次是字母t和a。如果按照凱撒密碼加密,一個密碼字母對應明碼字母,那麼密碼字母中出現次數最多的很有可能就應該對應明碼字母E,以此類推,很容易就可以排除掉大量的金鑰,從而快速地找到正確的破譯方法。現在無法考證究竟是誰把字母出現的頻率和破譯密碼聯絡在了一起,但是可以肯定的是,公元九世紀的時候,阿拉伯人就已經非常擅長破譯凱撒密碼了。阿拉伯人從公元7世紀到公元12世紀期間,建立了輝煌燦爛的文明,相比較而言,歐洲當時還是愚昧落後貧窮的地方。伊斯蘭文明的繁盛,不僅帶來了藝術、科學等文化的繁榮,社會的統治和管理也是非常有條理和高效的。當時的管理者,不僅在政府的關鍵事務上進行加密,而且記錄稅收的時候也採用了密碼術,他們在《大臣手冊》等管理文獻裡還在探討與密碼術有關的技術性問題。正是因為有了巨大的需求,再加上科學技術的進步,阿拉伯人終於有機會破譯替換密碼這道千年難題。
單表代換的破譯十分簡單,因為在單表代換下,除了字母名稱改變以外,字母的頻度、重複字母模式、字母結合方式等統計特性均未發生改變,依靠這些不變的統計特性就能破譯單表代換。相對單表代換來說,多表代換密碼的破譯要難得多。多表代換大約是在1467年左右由佛羅倫薩的建築師Alberti發明的。多表代換密碼又分為非週期多表代換密碼和週期多表代換密碼。在一個多表替換密碼中,會使用多個字母作為密碼。為了加快加密或解密速度,所有的字母通常寫在一張表格上,密碼學上稱作tableau。這種表格通常是26×26,因為這樣才能放下全部26個英文字母。填充表格及選擇下次使用的字母的方法,就是不同多字母替換密碼之間的定義。多字母替換密碼比單字母更難打破,因為其替換可能性多,密文要較長才可。其中最著名的一種為貝拉索於1585年推出的維吉尼亞密碼。它於1863年之前一直未被破解。法國人稱它作“不能破譯的密碼”(法語:le chiffre indéchiffrable)。此密碼曾被誤以為由布萊斯·德·維吉尼亞所創,所以才叫作維吉尼亞密碼。維吉尼亞密碼中,表格的第一行只需直接填上26個字母,然後以下每一行的字母都是向左偏移一格。(這叫作表格橫移,數學上每一列同餘26。)要用這種密碼需要使用一個關鍵字來作為金鑰。關鍵字每次用完就再次重複。假設關鍵字是“CAT”,明文的第一個字由“C”加密,第二個字由“A”加密,第三個則由“T”加密,然後再回到C加密,一直重複。然後按照右邊的密碼錶加密,例如BALL用CAT作關鍵字時會加密至DAEN,可見即使是同一個“L”亦會加密至另一個字母。現實中,維吉尼亞密碼的關鍵字非常長。非週期多表代換密碼,對每個明文字母都採用不同的代換表(或金鑰),稱作一次一密密碼,只要加密表夠長,這是一種在理論上唯一不可破的密碼。這種密碼可以完全隱蔽明文的特點,但由於需要的金鑰量和明文訊息長度相同而難於廣泛使用。為了減少金鑰量,在實際應用當中多采用週期多表代換密碼。在16世紀,有各種各樣的多表自動金鑰密碼被使用,最矚目的當屬法國人B.de Vigtnère的Vigenère密碼體制。有名的多表代換密碼有Vigenère、Beaufort、Running-Key、Vernam和轉輪機(rotor machine)。對於單表代換和多表代換密碼來說,唯密文分析是可行的。單表代換和多表代換密碼都是以單個字母作為代換物件的,而每次對多個字母進行代換就是多字母代換密碼。大約1854年L.Playfair在英國推廣Playfair密碼,它是由英國科學家C.Wheatstone發明的。這是第一種多字母代換密碼,在第一次世界大戰中英國人就採用這種密碼。多字母代換的優點是容易將字母的自然頻度隱蔽或均勻化而有利於抵抗統計分析。這種密碼主要有Playfair密碼、Hill密碼等。到二十世紀二十年代,人們發明了各種機械加密裝置用來自動處理加密。大多數是基於轉輪的概念。1918年美國人E.H.Hebern造出了第一臺轉輪機,它是基於一臺用有線連線改造的早期打字機來產生單字母表替代的,輸出是透過原始的亮燈式指示。最著名的轉輪裝置是Enigma,它是由德國人Scherbius發明並製造的。它在第二次世界大戰中由德國人使用。不過在第二次世界大戰期間,它就被破譯了。
【近代密碼學】近代密碼學研究資訊從發端到收端的安全傳輸和安全儲存,是研究“知己知彼”的一門科學。其核心是密碼編碼學和密碼分析學。前者致力於建立難以被敵方或對手攻破的安全密碼體制,即“知己”;後者則力圖破譯敵方或對手已有的密碼體制,即“知彼”。人類有記載的通訊密碼始於公元前400年。古希臘人是置換密碼的發明者。1881年世界上的第一個電話保密專利出現。電報、無線電的發明使密碼學成為通訊領域中不可迴避的研究課題。在第二次世界大戰初期,德國軍方啟用“恩尼格瑪”密碼機,盟軍對德軍加密的資訊有好幾年一籌莫展,“恩尼格瑪”密碼機似乎是不可破的。但是經過盟軍密碼分析學家的不懈努力,“恩尼格瑪”密碼機被攻破,盟軍掌握了德軍的許多機密,而德國軍方卻對此一無所知。太平洋戰爭中,美軍破譯了日本海軍的密碼機,讀懂了日本艦隊司令官山本五十六發給各指揮官的命令,在中途島徹底擊潰了日本海軍,導致了太平洋戰爭的決定性轉折,而且不久還擊斃了山本五十六。相反軸心國中,只有德國是在第二次世界大戰的初期在密碼破譯方面取得過輝煌的戰績。因此,我們可以說,密碼學在戰爭中起著非常重要的作用。編碼密碼學主要致力於資訊加密、資訊認證、數字簽名和金鑰管理方面的研究。資訊加密的目的在於將可讀資訊轉變為無法識別的內容,使得截獲這些資訊的人無法閱讀,同時資訊的接收人能夠驗證接收到的資訊是否被敵方篡改或替換過;數字簽名就是資訊的接收人能夠確定接收到的資訊是否確實是由所希望的發信人發出的;金鑰管理是資訊加密中最難的部分,因為資訊加密的安全性在於金鑰。歷史上,各國軍事情報機構在獵取別國的金鑰管理方法上要比破譯加密演算法成功得多。密碼分析學與編碼學的方法不同,它不依賴數學邏輯的不變真理,必須憑經驗,依賴客觀世界覺察得到的事實。因而,密碼分析更需要發揮人們的聰明才智,更具有挑戰性。
現代密碼學是一門迅速發展的應用科學。隨著因特網的迅速普及,人們依靠它傳送大量的資訊,但是這些資訊在網路上的傳輸都是公開的。因此,對於關係到個人利益的資訊必須經過加密之後才可以在網上傳送,這將離不開現代密碼技術。1976年Diffie和Hellman在《密碼新方向》中提出了著名的D-H金鑰交換協議,標誌著公鑰密碼體制的出現。 Diffie和Hellman第一次提出了不基於秘密通道的金鑰 分發,這就是D-H協議的重大意義所在。PKI(Public Key Infrastructure)是一個用公鑰概念與技術來實施和提供安全服務的具有普適性的安全基礎設施。PKI公鑰基礎設施的主要任務是在開放環境中為開放性業務提供數字簽名服務。二十世紀六七十年代以來計算機和通訊系統的普及,帶動了個人對數字資訊保護及各種安全服務的需求。IBM的Feistel在七十年代初期開始其工作,到1977年達到頂點:其研究成果被採納成為加密非分類資訊的美國聯邦資訊處理標準,即資料加密標準DES,歷史上最著名的密碼體制。1977年,美國國家標準局公佈實施了“美國資料加密標(DES)”,軍事部門壟斷密碼的局面被打破,民間力量開始全面介入密碼學的研究和應用中。民用的加密產品在市場上已有大量出售,採用的加密演算法有DES、IDEA、RSA等。DES至今依然是世界範圍內許多金融機構進行安全電子商務的標準手段,是迄今為止世界上最為廣泛使用和流行的一種分組密碼演算法。然而,隨著計算機硬體的發展及計算能力的提高,DES已經顯得不再安全。1997年7月22日電子邊境基金學會(EFF)使用一臺25萬美金的電腦在56小時內破譯了56位DES。1998年12月美國決定不再使用DES。美國國家標準技術研究所(NIST)現在已經啟用了新的加密標準AES,它選用的演算法是比利時的研究成果“Rijndael”。以上這兩個階段所使用的密碼體制都稱為是對稱密碼體制,因為這些體制中,加秘金鑰和解秘金鑰都是相同的,而進入密碼學發展的第三個階段,則出現了非對稱密碼體制——公鑰密碼體制。
現有的密碼體制千千萬萬,各不相同。但是它們都可以分為私鑰密碼體制(如DES密碼)和公鑰密碼(如公開金鑰密碼)。前者的加密過程和脫密過程相同,而且所用的金鑰也相同;後者,每個使用者都有公開秘金鑰。【多鏈與非對稱加密】對稱加密指的就是加密和解密使用同一個秘鑰,所以叫做對稱加密。對稱加密只有一個秘鑰,作為私鑰。 常見的對稱加密演算法:DES,AES,3DES等等。非對稱加密指的是:加密和解密使用不同的秘鑰,一把作為公開的公鑰,另一把作為私鑰。公鑰加密的資訊,只有私鑰才能解密。私鑰加密的資訊,只有公鑰才能解密。 常見的非對稱加密演算法:RSA,ECC。非對稱加密演算法需要兩個金鑰:公開金鑰(publickey)和私有金鑰(privatekey)。公開金鑰與私有金鑰是一對,如果用公開金鑰對資料進行加密,只有用對應的私有金鑰才能解密;如果用私有金鑰對資料進行加密,那麼只有用對應的公開金鑰才能解密。因為加密和解密使用的是兩個不同的金鑰,所以這種演算法叫作非對稱加密演算法。 非對稱加密演算法實現機密資訊交換的基本過程是:甲方生成一對金鑰並將其中的一把作為公用金鑰向其它方公開;得到該公用金鑰的乙方使用該金鑰對機密資訊進行加密後再傳送給甲方;甲方再用自己儲存的另一把專用金鑰對加密後的資訊進行解密。另一方面,甲方可以使用乙方的公鑰對機密資訊進行簽名後再傳送給乙方;乙方再用自己的私匙對資料進行驗籤。甲方只能用其專用金鑰解密由其公用金鑰加密後的任何資訊。 非對稱加密演算法的保密性比較好,它消除了終端使用者交換金鑰的需要。
非對稱密碼體制的特點:演算法強度複雜、安全性依賴於演算法與金鑰但是由於其演算法複雜,而使得加密解密速度沒有對稱加密解密的速度快。對稱密碼體制中只有一種金鑰,並且是非公開的,如果要解密就得讓對方知道金鑰。所以保證其安全性就是保證金鑰的安全,而非對稱金鑰體制有兩種金鑰,其中一個是公開的,這樣就可以不需要像對稱密碼那樣傳輸對方的金鑰了。這樣安全性就大了很多。在EKT中,我們就使用了公私鑰結合的非對稱加密和路由策略的機制實現拜占庭容錯。我們EKT的多鏈,採用“多鏈分而治之”的新方案重新設計了一個保障每個合約都能正常執行的公鏈,其中就使用到了非對稱加密對使用者的資訊進行儲存,同時主鏈和子鏈資訊共享但是功能隔離。這一創新極大程度上簡化了架構,降低了資料處理壓力,確保一條鏈上流量激增不會影響到另一條鏈的效率,在鏈上進行的任何業務都不會收到其他業務干擾,有效實現了資源隔離。在EKT中Token鏈是一個並行多鏈的結構,多鏈多共識,共享使用者基礎。EKT的Token是鏈上的一個屬性,就像使用了utxo模型的鏈utxo有其他Token一樣,我們的轉賬事件也是內建的。其實EKT解決的一個核心問題是,目前Dapp的開發難度的問題如果使用以太坊的Solidity開發,需要學習以太坊的一整套邏輯,在複雜應用開發的時候需要考慮各種最佳化方案,同一個功能使用傳統C/S結構一天寫完的,用以太坊可能要寫幾周時間,對開發者來說很不友好。例如針對C/S模型,要寫一個非對稱加密服務需要: 1. 設計一個服務端,可以計算出一對秘鑰pub/pri。將私鑰保密將公鑰公開。 
2. 設計一個客戶端請求服務端時,拿到服務端的公鑰pub。 3. 客戶端透過AES計算出對稱加密的秘鑰X。 然後使用pub將X進行加密。 4. 客戶端將加密後的密文傳送給服務端。服務端透過pri解密獲得X。 5. 最後還要設計兩邊通訊機制,透過對稱金鑰X以對稱加密演算法來加解密。這一套流程若要Dapp/公鏈開發者寫出來,勢必在真正開發區塊鏈功能之前就已經被這些繁瑣但其實通用的步驟耗費過多精力和資源。EKT的中心思想就是設計一個社羣的機制,讓開發者可以輕易的開發一個可以承載DAPP的主鏈,其他的交給EKT來處理, EKT 的“一鏈一主幣,多鏈多共識”的機制為後來的區塊鏈專案開發提供了很大的便利,可以使用於任何區塊鏈適用的應用場景。
EKT 提供了一套底層的區塊鏈機制,其他的區塊鏈專案可以很容易的基於 EKT 的主鏈程式碼部署一套自己的主鏈。在EKT上編寫的區塊鏈專案將無需過於擔心安全性問題,因為每一個介面都是非常簡單並且在許多條並行主鏈上部署和執行的。部署主鏈時可以靈活的發行自己主鏈的代幣以及選擇共識演算法。新部署的主鏈也可以加入到 EKT 的整個生態,共享 EKT 生態的使用者資源,代幣也可以和EKT 主幣以及其他主鏈的代幣進行交換和流通。EKT主鏈上每個DPoS節點的公鑰都是公開的。這是一種兼顧效率、安全和去中心化的解決方案。Token現在一般被定義成一個智慧合約,但如果把它變成一個預先定義好事件的“物件”,這個“物件”可以有自己的引數(比如總量、共識機制等等),則會帶來更好的安全體驗。接受token的地址可以有兩種:普通的使用者地址和合約地址,合約地址收到token之後可以執行非圖靈完備的合約語言,進行簡單的狀態計算和token轉移。【失靈的SHA-1】區塊鏈玩家應該都對一個詞非常的熟悉——雜湊Hash,一般學術界翻譯做“雜湊”,程式設計師直接音譯為“雜湊”,它的操作是把任意長度的輸入(又叫做預對映pre-image)透過雜湊演算法變換成固定長度的輸出,該輸出就是雜湊值。這種轉換是一種壓縮對映,也就是,雜湊值的空間通常遠小於輸入的空間,不同的輸入可能會雜湊成相同的輸出,所以不可能從雜湊值來確定唯一的輸入值。簡單的說就是一種將任意長度的訊息壓縮到某一固定長度的訊息摘要的函式 所有雜湊函式都有一個基本特性:如果兩個雜湊值是不相同的(根據同一函式),那麼這兩個雜湊值的原始輸入也是不相同的。這個特性是雜湊函式具有確定性的結果,具有這種性質的雜湊函式稱為單向雜湊函式。但另一方面,雜湊函式的輸入和輸出不是唯一對應關係的,如果兩個雜湊值相同,兩個輸入值很可能是相同的,但也可能不同,這種情況稱為“雜湊碰撞(collision)”,這通常是兩個不同長度的輸入值,刻意計算出相同的輸出值。輸入一些資料計算出雜湊值,然後部分改變輸入值,一個具有強混淆特性的雜湊函式會產生一個完全不同的雜湊值雜湊函式需要滿足下述條件
a.確定性:雜湊函式的演算法是確定性演算法,演算法執行過程不引入任何隨機量。這意味著相同訊息的雜湊結果一定相同b.高效性:給定任意一個訊息m,可以快速計算HASH(m) c.目標抗碰撞性:給定任意一個訊息m0 ,很難找到另一個訊息m1,使得HASH(m0)= HASH(m1)d.廣義抗碰撞性:很難找到兩個訊息m0不等於m1 ,使得HASH(m0)= HASH(m1) 在密碼學上,一般認為如果d條件不滿足,那麼此雜湊函式就不再安全。在實際中,一般認為如果在某種程度上c條件不滿足,那麼此雜湊函式就不再安全。當然了,如果c個條件完全不滿足,那麼此雜湊函式已經徹底不安全,應該被直接棄用。雜湊一般的實際應用被稱為安全雜湊演算法,(英語:Secure Hash Algorithm,縮寫為SHA),它是FIPS認證的安全雜湊演算法,是一個密碼雜湊函式家族。能計算出一個數字訊息所對應到的,長度固定的字串(又稱訊息摘要)的演算法。且若輸入的訊息不同,它們對應到不同字串的機率很高(以前被認為無限趨近於99.99999999%,為啥是以前,稍後解釋)密碼學作為一門古老的學科,有著悠久而奇妙的歷史。它用於保護軍事和外交通訊可追溯到幾千年前文字剛剛產生的上古時期。
幾千年來,密碼學一直在不斷地向前發展。從凱撒密碼開始,人們在發展新密碼學演算法的時候也在孜孜不倦的破解已有的密碼學演算法,因為對於破解者來說,密碼難度越高,意味著其背後守護的秘密價值就越大。SHA家族的五個演算法,分別是SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512,後幾個一般也可以統稱為SHA-2,由美國國家安全域性(NSA)所設計,並由美國國家標準與技術研究院(NIST)釋出;是美國的政府標準。也是眾多網際網路和電子產品的金鑰門神SHA系列Hash函式家族是最為知名的Hash函式家族,MD5,SHA-1和SHA-2都一直被廣泛的使用,比特幣使用的就是屬於SHA-2系列裡的SHA-256湊雜演算法。1990年MD4演算法被提出,但是被很快發現了嚴重的安全問題,在1992年被MD5演算法取代。MD5演算法在之後的十幾年內被軟體行業廣泛使用,直到2004年我國密碼學家王小云在國際密碼討論年會(CRYPTO)上展示了MD5演算法的碰撞並給出了第一個例項。該攻擊複雜度很低,在普通計算機上只需要幾秒鐘的時間。在2005年王小云教授與其同事又提出了對SHA-1演算法的碰撞演算法(Finding Collisions in the Full SHA-1, CRYPTO 2005),不過計算複雜度為2的69次方,在實際情況下難以實現直到去年(2017年)的2月24日,谷歌丟擲了他們驚人的實驗結果——公佈第了一例SHA-1雜湊碰撞例項,這項發表甚至使密碼學界最為著名的頂會CRYPTO為等其論文修改結果延期了19個小時。因為簡單來說,Google的工作基本宣判了SHA-1的死刑。在這項工作公佈前,大多數網站https的證書都涉及使用SHA-1演算法,包括GitHub在內的眾多版本控制工具以及各種雲同步服務都是用SHA-1來區別檔案,很多安全證書或是簽名也使用SHA-1來保證唯一性。長期以來,人們都認為SHA1是十分安全的,至少大家還沒有找到一次碰撞案例, 不過如今不得不為使用者安全考慮開始升級至SHA-2或者其他演算法了。CWI和Google的研究人員們成功找到了一例SHA1碰撞,而且很厲害的是,發生碰撞的是兩個真實的、可閱讀的PDF檔案。這兩個PDF檔案內容不相同,但SHA1值完全一樣。為什麼這一研究結果的發表如此引人注目?這是因為大家都知道雜湊演算法可能存在碰撞, 但只要這種碰撞難以創造,雜湊演算法所支撐的系統就是安全的——而大家之前一直認為SHA1的碰撞案例很難實現。

Google證明這一說法是站不住的,尤其是在現在GPU平行計算得到大範圍應用的情況下。Google使用110塊GPU,經過一年的計算,總共進行了9百億億次計算(總共9,223,372,036,854,775,808次)創造了這一碰撞案例——這一計算過程的時間開銷固然龐大,但就現在非常普遍的大規模計算中心來說,並不是難以實現的。這意味著目前實現對於SHA1的碰撞攻擊仍然需要海量的計算時間。

MD5和SHA-1雖然已經不建議被使用,但並不能說它們就已經完全過時。

事實上,現有的各種更優秀的密碼演算法都是在舊演算法的基礎上建立起來的,而舊的演算法體系往往也並不是因為存在固有漏洞而被人們拋棄——計算能力的飛速發展導致我們的基礎演算法必須不斷改進,才能適應生產環境的需要同時避免潛在的安全風險。我們也必須保持以最新的眼光來看待和處理工作,當新的技術突破出現時及時關注,切勿墨守成規,固步自封。

SHA-1和SHA-2是SHA演算法不同的兩個版本,它們的構造和簽名的長度都有所不一樣,但可以把SHA-2理解為SHA-1的繼承者。比特幣採用的SHA-256屬於SHA-2的256位用法,當年(2008年)中本聰構寫比特幣時,未曾考慮到SHA演算法這麼快就能被破解,不過所幸後來的各類數字貨幣採用了更多更難破解的加密演算法,具體大家可以往回翻翻我之前寫的《加密貨幣如何加密》系列。

不過從SHA-1被Google攻破來看,所有承載巨大市值的加密貨幣都應該引起警覺,因為共利共識的維護,還是必須建立在加密演算法的基石之【量子計算的隱憂】但如果現有加密方式全部失靈,數字貨幣世界會變成什麼樣子?這個聽起來有點天方夜談的想法其實離我們並不遙遠。

當十幾年後實用量子計算機出現,算力大幅提升,現有的依靠數學複雜度來保證安全性的非對稱金鑰的加密方式很可能會全部失靈。郭光燦院士在演講中就曾提到,基於2000qubit的量子計算機使用shor演算法可以在1s完成RSA演算法安全性依賴的大數分解計算。首先簡單講一下什麼是量子計算。

量子位元可以製備在兩個邏輯態0和1的相干疊加態,換句話講,它可以同時儲存0和1。考慮一個 N個物理位元的儲存器,若它是經典儲存器,則它只能儲存2^N個可能資料當中的任一個,若它是量子儲存器,則它可以同時儲存2^N個數,而且隨著 N的增加,其儲存資訊的能力將指數上升,例如,一個250量子位元的儲存器(由250個原子構成)可能儲存的數達2^250,比現有已知的宇宙中全部原子數目還要多。 

由於數學操作可以同時對儲存器中全部的資料進行,因此,量子計算機在實施一次的運算中可以同時對2^N個輸入數進行數學運算。其效果相當於經典計算機要重複實施2^N次操作,或者採用2^N個不同處理器實行並行操作。可見,量子計算機可以節省大量的運算資源(如時間、記憶單元等)。

量子計算機並不是一種更快的計算機。它在邏輯、輸出方式等方面與經典計算機根本不同,其中最本質的就是量子糾纏的存在。在量子資訊學的觀點中,量子糾纏是與物質、能量、資訊並列的一種自然資源,利用好這種資源能使量子計算機發揮出巨大威力。但是,如何用它設計更快的演算法,在理論上就是很大的挑戰。

目前,對絕大多數計算問題,理論家們都還沒有找到超過經典演算法的量子演算法;但在一些特殊問題上確實有了新的發現。哪些問題呢?最早發現的主要有兩類:一類可以歸結為質因數分解(Shor 演算法),比已知最快經典演算法有指數加速(準確說是超多項式加速);另一類可以歸結為無序搜尋(Grove 演算法),比經典演算法有多項式加速。

Shor 演算法和 Grove 演算法分別於1994年和1996年被提出,可以說是它們的發現引起了科學界對量子計算的真正重視——儘管量子計算的初步概念在80年代初就已出現,但十幾年來都只是很小圈子內的理論遊戲,被認為既無法實現也沒有用處;Shor 演算法和 Grove 演算法終於為量子計算機找到了可能的實際應用。

其中 Shor 演算法的影響尤其大——現代密碼學中,幾類常用的公鑰系統包括 RSA (Rivest–Shamir–Adleman) 和 ECC (elliptic-curve cryptography) 等的基本加密原理就是大數分解的計算複雜度。因此量子計算機一旦出現,將給現有的資訊保安帶來巨大威脅,加密貨幣現有的演算法也幾乎全部不堪一擊。

順帶一提,ECC就是比特幣使用的加密方式。滑鐵盧大學量子計算學院的聯合創始人Michele Mosca(也是圓周理論物理研究所的研究人員)認為我們現在所用的部分加密工具,到2026年就有1/7的概率遭破解;到了2031年,這個數字又會上升到50%。也就是說,到那個時候,如果我們還在用現在的加密機制,那麼即便網路傳輸的資料經過了加密,也可透過暴力破解來解密——這也是量子計算能夠帶來的“便利”。有人想到既然量子計算可以帶來算力提升破解加密演算法,那麼可不可以用量子演算法來直接加密呢?答案是可行但目前一切未知。

量子加密裝置中必不可少的、同時也是最昂貴的部件是光子探測器,在現有(或者不遠的將來)條件下,發起一次量子計算攻擊可以帶來巨大收益而有人願意為此買單,但如果說使用量子加密演算法的數字貨幣都採用這個型別的礦機,那又是不可能承受的成本之痛了,不過未來一二十年會發什麼樣神奇的事情,誰又能預

【EKT的思考】

在20世紀70年代,英國情報部門和學術機構的研究人員各自獨立發明了非對稱加密方法。

它使用兩個不同的金鑰:一個公鑰和一個私鑰。

在一次交易的加密過程中,兩個金鑰都是必需的。例如,在進行線上購物時,供應商的伺服器把公鑰傳送到消費者的電腦,這個金鑰是公開的,可以被所有消費者獲取並使用。消費者的電腦用該公鑰加密一個金鑰,後者將作為與供應商共享的對稱金鑰。在收到經過加密的對稱金鑰之後,供應商的伺服器將用一個自己獨有的私鑰對之進行解密。一旦雙方安全地共享了對稱金鑰,就可以用其完成後續交易的加解密。

非對稱加密演算法需要兩個金鑰: 公開金鑰(publickey)和私有金鑰(privatekey)。

公開金鑰與私有金鑰是一對,如果用公開金鑰對資料進行加密,只有用對應的私有金鑰才能解密;如果用私有金鑰對資料進行加密,那麼只有用對應的公開金鑰才能解密。因為加密和解密使用的是兩個不同的金鑰,所以這種演算法叫作非對稱加密演算法。 

非對稱加密演算法實現機密資訊交換的基本過程是:  甲方生成一對金鑰並將其中的一把作為公用金鑰向其它方公開;得到該公用金鑰的乙方使用該金鑰對機密資訊進行加密後再傳送給甲方;甲方再用自己儲存的另一把專用金鑰對加密後的資訊進行解密另一方面,甲方可以使用乙方的公鑰對機密資訊進行簽名後再傳送給乙方;乙方再用自己的私匙對資料進行驗籤。

甲方只能用其專用金鑰解密由其公用金鑰加密後的任何資訊。 非對稱加密演算法的保密性比較好,它消除了終端使用者交換金鑰的需要在EKT中,我們就使用了公私鑰結合的非對稱加密和路由策略的機制實現拜占庭容錯。我們EKT的多鏈,採用“多鏈分而治之”的新方案重新設計了一個保障每個合約都能正常執行的公鏈,其中就使用到了非對稱加密對使用者的資訊進行儲存,同時主鏈和子鏈資訊共享但是功能隔離。

這一創新極大程度上簡化了架構,降低了資料處理壓力,確保一條鏈上流量激增不會影響到另一條鏈的效率,在鏈上進行的任何業務都不會收到其他業務干擾,有效實現了資源隔離在EKT中Token鏈是一個並行多鏈的結構,多鏈多共識,共享使用者基礎。

EKT的Token是鏈上的一個屬性,就像使用了utxo模型的鏈utxo有其他Token一樣,我們的轉賬事件也是內建的其實EKT解決的一個核心問題是,目前Dapp的開發難度的問題如果使用以太坊的Solidity開發,需要學習以太坊的一整套邏輯,在複雜應用開發的時候需要考慮各種最佳化方案,同一個功能使用傳統C/S結構一天寫完的,用以太坊可能要寫幾周時間,對開發者來說很不友好。

這一套流程若要Dapp/公鏈開發者寫出來,勢必在真正開發區塊鏈功能之前就已經被這些繁瑣但其實通用的步驟耗費過多精力和資源在EKT中,堅持了這樣一個理念,一個貨幣系統中不需要圖靈完備的開發語言,不同的應用間儘可能實現隔離的原則。因此我們在設計的時候,把token的處理和DApp的處理分開了,也就是說在EKT上存在兩種型別的鏈:token鏈和DApp鏈token鏈就是專門用於處理token交易的一條鏈,鑑於ERC20代幣不斷曝出的各種漏洞(雖然漏洞的產生是智慧合約開發者的問題,但是我們認為是有更好的方案來實現的),在EKT上內建了token物件,開發者只需要定義自己要發的token的數量即可。

另外,EKT的token鏈是一個多鏈多共識的結構,也就是說不同的token可以放在不同的token鏈上進行打包,多鏈並行極大提高交易處理速度EKT的DApp鏈是供不同開發者開發DApp的一條鏈。我們從智慧合約開發語言、資料儲存(帶有默克爾證明的和私有的不帶默克爾證明的儲存空間)、效率三個方面進行了最佳化。

EKT的DApp鏈基本上可以實現與現在的網際網路應用相同甚至更快的開發速度,可實現的功能性也與網際網路應用沒有太大差異,最重要的是,我們可以實現大部分事件的1秒執行和確認,安全性要求比較高的事件可以實現3秒的確認EKT的中心思想就是設計一個社羣的機制,讓開發者可以輕易的開發一個可以承載DAPP的主鏈,其他的交給EKT來處理, EKT 的“一鏈一主幣,多鏈多共識”的機制為後來的區塊鏈專案開發提供了很大的便利,可以使用於任何區塊鏈適用的應用場景。 

EKT 提供了一套底層的區塊鏈機制,其他的區塊鏈專案可以很容易的基於 EKT 的主鏈程式碼部署一套自己的主鏈。在EKT上編寫的區塊鏈專案將無需過於擔心安全性問題,因為每一個介面都是非常簡單並且在許多條並行主鏈上部署和執行的。

部署主鏈時可以靈活的發行自己主鏈的代幣以及選擇共識演算法。新部署的主鏈也可以加入到 EKT 的整個生態,共享 EKT 生態的使用者資源,代幣也可以和EKT 主幣以及其他主鏈的代幣進行交換。

在設計EKT的加密制度時,我們團隊也曾經認真考慮過SHA-1破解以及未來量子計算技術大發展之後對區塊鏈世界的影響,甚至一度想要立馬著手實現這個看似fancy的功能。不過經過深思熟慮之後,我們團隊還是決定將現在有限的資源儘可能投入到平臺的開發工作當中,同時我以及幾個同事都會密切關注加密貨幣安全方面的進展,保持可以參考和跟緊最新最安全的學術界新動向。以上就是我對區塊鏈密碼學的一些思考,和一些在設計EKT的多鏈多共識時對建設非對稱加密底層的考慮。


參考閱讀:
20160519 計算檔案SHA-1值原理
20161225 加密演算法之:對稱加密與非對稱加密掃盲貼
20170119 區塊鏈 - 比特幣的共識機制
20170223密碼學大事件!研究人員公佈第一例SHA-1雜湊碰撞例項
20170313 比特幣中的SHA256是何方神聖?
20170418 Hash演算法總結
20170919 雜湊演算法:SHA-1,SHA-2和SHA-256之間的區別
20180414詳解“多鏈多共識”機制
20180202 區塊鏈和比特幣 不過是密碼學歷史上的一次小高潮?《History of cryptography》《BTC whitepaper》《EKT whitepaper》

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;