前言:談區(qū)塊鏈離不開密碼學(xué)。通常來講,區(qū)塊鏈技術(shù)是利用塊鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu)來驗(yàn)證與存儲(chǔ)數(shù)據(jù)、利用分布式節(jié)點(diǎn)公式算法來生成和更新數(shù)據(jù)、利用密碼學(xué)的方式保證數(shù)據(jù)傳輸和訪問的安全、利用由自動(dòng)化腳本代碼組成的智能合約來編程和操作數(shù)據(jù)的一種全新的分布式基礎(chǔ)架構(gòu)與計(jì)算范式。區(qū)塊鏈的核心是它按照時(shí)間順序?qū)?shù)據(jù)區(qū)塊以順序相連的方式組合成的一種鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu),并以密碼學(xué)方式保證的不可篡改和不可偽造的分布式賬本。我們對此做一個(gè)總結(jié),可以發(fā)現(xiàn)區(qū)塊鏈中有四項(xiàng)不可缺的核心技術(shù),分別是分布式存儲(chǔ)、共識機(jī)制、密碼學(xué)原理和智能合約。而今天我們將主要從密碼學(xué)的角度聊一聊區(qū)塊鏈的起源問題。
密碼學(xué)作為一門古老的學(xué)科,有著悠久而奇妙的歷史。它用于保護(hù)軍事和外交通信可追溯到幾千年前文字剛剛產(chǎn)生的上古時(shí)期。幾千年來,密碼學(xué)一直在不斷地向前發(fā)展。而隨著當(dāng)今信息時(shí)代的高速發(fā)展,密碼學(xué)的作用也越來越顯得重要。它已不僅僅局限于使用在軍事、政治和外交方面,而更多的是與人們的生活息息相關(guān):如人們在進(jìn)行網(wǎng)上購物,與商務(wù)交流,使用信用卡等等,都需要密碼學(xué)的知識來保護(hù)人們的個(gè)人信息和隱私,當(dāng)然對于我們關(guān)注的區(qū)塊鏈技術(shù),密碼學(xué)作為其基石而存在。
凱撒(Caesar)是第一個(gè)把替換密碼用于軍事用途、并且記錄下來的人。在他的那本歌頌自己豐功偉績的《高盧記》里,凱撒描述了他把密信送到正處于圍困之中、瀕臨投降的西塞羅手中。凱撒非常喜歡使用密文,后世的《凱撒傳》詳細(xì)地記錄了凱撒使用的一種密文。而這種加密方法,甚至沿用到今天。
凱撒密碼的表示方法是:將每個(gè)字母,用字母表中這個(gè)字母之后三位的那個(gè)字母替代。它是一種替換加密的技術(shù),明文中的所有字母都在字母表上向后(或向前)按照一個(gè)固定數(shù)目進(jìn)行偏移后被替換成密文。例,當(dāng)偏移量是3的時(shí)候,所有的字母A將被替換成D,B變成E,以此類推。也就是字母A用字母D替代,字母B用字母E替代。比如Abroad,凱撒在用密文寫信的時(shí)候,就被替換為Deurdg。這樣就得到了敵人看不懂的密文。
假如有這樣一條指令:RETURN TO ROME
用愷撒密碼加密后就成為:UHWXUQ WR URPH
如果這份指令被敵方截獲,也將不會(huì)泄密,因?yàn)樽置嫔峡床怀鋈魏我饬x。
現(xiàn)在看來這種加密方式可能稍顯幼稚,但作為歷史上文字記載的最早使用加密密鑰的案例:由發(fā)件人和收件人共享加密密鑰,標(biāo)志了現(xiàn)代密碼學(xué)的發(fā)端??梢哉f,從凱撒密碼,到20世紀(jì)公共密鑰被發(fā)明之前的這幾千年時(shí)間里,密碼學(xué)的原理都是一樣的。比特幣和區(qū)塊鏈的加密方式,跟凱撒密碼的原理區(qū)別,也就是多了公鑰而已。直到今天,我們在看很多諜戰(zhàn)片的時(shí)候,會(huì)發(fā)現(xiàn)不少特工和間諜還是采取這種方式傳輸情報(bào)。
這里有幾個(gè)術(shù)語,需要特別指出。密碼學(xué)家通常講用來書寫原始信息的字母表,也就是正常的字母表,稱為明碼表;而用來替換明碼字母的稱為密碼表。這也是密碼這個(gè)詞的來歷。那么往后移動(dòng)三位,這個(gè)“三”則被稱為密鑰。當(dāng)然,學(xué)過數(shù)學(xué)的人都明白,這里有26個(gè)字母,僅僅按照順序移動(dòng),每個(gè)字母就有25個(gè)不同的替代方式,即25種密鑰,要是把字母順序打亂,密鑰就更多了。算法則是通過各種嘗試,破譯密碼的過程。
可以想象,在公元前100年左右,也就是相當(dāng)于中國的西漢時(shí)期,要想破譯凱撒的密碼,那可能性幾乎為零。在密碼學(xué)中,愷撒密碼是一種最簡單且最廣為人知的加密技術(shù)。愷撒密碼還在現(xiàn)代的ROT13系統(tǒng)中被應(yīng)用。但是和所有的利用字母表進(jìn)行替換的加密技術(shù)一樣,愷撒密碼非常容易被破解,而且在實(shí)際應(yīng)用中也無法保證通信安全。
最早的古典密碼體制主要包含單表代換密碼體制和多表代換密碼體制。作為古典密碼中的兩種重要體制,一直在古代歷史上的全球各個(gè)區(qū)域廣泛地被使用。凱撒密碼就是一種典型的單表代換密碼。
單表代換密碼在長達(dá)一千年的時(shí)間里,被認(rèn)為是無法破解的,因?yàn)榇嬖谥鴶?shù)量龐大的密鑰,依靠手工是根本計(jì)算不過來的。但是隨著社會(huì)的發(fā)展和技術(shù)的進(jìn)步,來自東方的阿拉伯人,找到了更新的技術(shù),從而發(fā)現(xiàn)了一條捷徑來破獲這個(gè)被認(rèn)為是無解的密碼,這次勝利是由阿拉伯世界的語言學(xué)家、統(tǒng)計(jì)學(xué)家和宗教學(xué)家三者共同完成的。
這還要間接感謝中國的造紙術(shù)的發(fā)明,伊斯蘭文明得以快速傳播。因?yàn)闀枨罅看笤?,那么就需要有人來校對,最能勝任這個(gè)工作的自然是神學(xué)家。他們在校對的同時(shí),還在統(tǒng)計(jì)默罕默德啟示錄的用詞頻率,如果這個(gè)啟示錄出現(xiàn)了新詞,那么它出現(xiàn)的年份肯定就更往后等等。在梳理的過程中,他們也順道發(fā)現(xiàn)了一些字母出現(xiàn)的頻率就是比其他的字母要高得多。
學(xué)習(xí)過英語的我們知道,字母e是最常見的,其次是字母t和a。如果按照凱撒密碼加密,一個(gè)密碼字母對應(yīng)明碼字母,那么密碼字母中出現(xiàn)次數(shù)最多的很有可能就應(yīng)該對應(yīng)明碼字母E,以此類推,很容易就可以排除掉大量的密鑰,從而快速地找到正確的破譯方法?,F(xiàn)在無法考證究竟是誰把字母出現(xiàn)的頻率和破譯密碼聯(lián)系在了一起,但是可以肯定的是,公元九世紀(jì)的時(shí)候,阿拉伯人就已經(jīng)非常擅長破譯凱撒密碼了。
阿拉伯人從公元7世紀(jì)到公元12世紀(jì)期間,建立了輝煌燦爛的文明,相比較而言,歐洲當(dāng)時(shí)還是愚昧落后貧窮的地方。伊斯蘭文明的繁盛,不僅帶來了藝術(shù)、科學(xué)等文化的繁榮,社會(huì)的統(tǒng)治和管理也是非常有條理和高效的。當(dāng)時(shí)的管理者,不僅在政府的關(guān)鍵事務(wù)上進(jìn)行加密,而且記錄稅收的時(shí)候也采用了密碼術(shù),他們在《大臣手冊》等管理文獻(xiàn)里還在探討與密碼術(shù)有關(guān)的技術(shù)性問題。正是因?yàn)橛辛司薮蟮男枨?,再加上科學(xué)技術(shù)的進(jìn)步,阿拉伯人終于有機(jī)會(huì)破譯替換密碼這道千年難題。
單表代換的破譯十分簡單,因?yàn)樵趩伪泶鷵Q下,除了字母名稱改變以外,字母的頻度、重復(fù)字母模式、字母結(jié)合方式等統(tǒng)計(jì)特性均未發(fā)生改變,依靠這些不變的統(tǒng)計(jì)特性就能破譯單表代換。相對單表代換來說,多表代換密碼的破譯要難得多。
多表代換大約是在1467年左右由佛羅倫薩的建筑師Alberti發(fā)明的。多表代換密碼又分為非周期多表代換密碼和周期多表代換密碼。在一個(gè)多表替換密碼中,會(huì)使用多個(gè)字母作為密碼。為了加快加密或解密速度,所有的字母通常寫在一張表格上,密碼學(xué)上稱作tableau。這種表格通常是26×26,因?yàn)檫@樣才能放下全部26個(gè)英文字母。填充表格及選擇下次使用的字母的方法,就是不同多字母替換密碼之間的定義。多字母替換密碼比單字母更難打破,因?yàn)槠涮鎿Q可能性多,密文要較長才可。
其中最著名的一種為貝拉索于1585年推出的維吉尼亞密碼。它于1863年之前一直未被破解。法國人稱它作“不能破譯的密碼”(法語:le chiffre indéchiffrable)。此密碼曾被誤以為由布萊斯·德·維吉尼亞所創(chuàng),所以才叫作維吉尼亞密碼。
維吉尼亞密碼中,表格的第一行只需直接填上26個(gè)字母,然后以下每一行的字母都是向左偏移一格。(這叫作表格橫移,數(shù)學(xué)上每一列同余26。)要用這種密碼需要使用一個(gè)關(guān)鍵字來作為密鑰。關(guān)鍵字每次用完就再次重復(fù)。假設(shè)關(guān)鍵字是“CAT”,明文的第一個(gè)字由“C”加密,第二個(gè)字由“A”加密,第三個(gè)則由“T”加密,然后再回到C加密,一直重復(fù)。然后按照右邊的密碼表加密,例如BALL用CAT作關(guān)鍵字時(shí)會(huì)加密至DAEN,可見即使是同一個(gè)“L”亦會(huì)加密至另一個(gè)字母?,F(xiàn)實(shí)中,維吉尼亞密碼的關(guān)鍵字非常長。
非周期多表代換密碼,對每個(gè)明文字母都采用不同的代換表(或密鑰),稱作一次一密密碼,只要加密表夠長,這是一種在理論上唯一不可破的密碼。這種密碼可以完全隱蔽明文的特點(diǎn),但由于需要的密鑰量和明文消息長度相同而難于廣泛使用。為了減少密鑰量,在實(shí)際應(yīng)用當(dāng)中多采用周期多表代換密碼。在16世紀(jì),有各種各樣的多表自動(dòng)密鑰密碼被使用,最矚目的當(dāng)屬法國人B.de?Vigtnère的Vigenère密碼體制。有名的多表代換密碼有Vigenère、Beaufort、Running-Key、Vernam和轉(zhuǎn)輪機(jī)(rotor?machine)。對于單表代換和多表代換密碼來說,唯密文分析是可行的。單表代換和多表代換密碼都是以單個(gè)字母作為代換對象的,而每次對多個(gè)字母進(jìn)行代換就是多字母代換密碼。大約1854年L.Playfair在英國推廣Playfair密碼,它是由英國科學(xué)家C.Wheatstone發(fā)明的。這是第一種多字母代換密碼,在第一次世界大戰(zhàn)中英國人就采用這種密碼。多字母代換的優(yōu)點(diǎn)是容易將字母的自然頻度隱蔽或均勻化而有利于抵抗統(tǒng)計(jì)分析。這種密碼主要有Playfair密碼、Hill密碼等。
到二十世紀(jì)二十年代,人們發(fā)明了各種機(jī)械加密設(shè)備用來自動(dòng)處理加密。大多數(shù)是基于轉(zhuǎn)輪的概念。1918年美國人E.H.Hebern造出了第一臺(tái)轉(zhuǎn)輪機(jī),它是基于一臺(tái)用有線連接改造的早期打字機(jī)來產(chǎn)生單字母表替代的,輸出是通過原始的亮燈式指示。最著名的轉(zhuǎn)輪裝置是Enigma,它是由德國人Scherbius發(fā)明并制造的。它在第二次世界大戰(zhàn)中由德國人使用。不過在第二次世界大戰(zhàn)期間,它就被破譯了。
【近代密碼學(xué)】
近代密碼學(xué)研究信息從發(fā)端到收端的安全傳輸和安全存儲(chǔ),是研究“知己知彼”的一門科學(xué)。其核心是密碼編碼學(xué)和密碼分析學(xué)。前者致力于建立難以被敵方或?qū)κ止テ频陌踩艽a體制,即“知己”;后者則力圖破譯敵方或?qū)κ忠延械拿艽a體制,即“知彼”。人類有記載的通信密碼始于公元前400年。古希臘人是置換密碼的發(fā)明者。1881年世界上的第一個(gè)電話保密專利出現(xiàn)。電報(bào)、無線電的發(fā)明使密碼學(xué)成為通信領(lǐng)域中不可回避的研究課題。
在第二次世界大戰(zhàn)初期,德國軍方啟用“恩尼格瑪”密碼機(jī),盟軍對德軍加密的信息有好幾年一籌莫展,“恩尼格瑪”密碼機(jī)似乎是不可破的。但是經(jīng)過盟軍密碼分析學(xué)家的不懈努力,“恩尼格瑪”密碼機(jī)被攻破,盟軍掌握了德軍的許多機(jī)密,而德國軍方卻對此一無所知。
太平洋戰(zhàn)爭中,美軍破譯了日本海軍的密碼機(jī),讀懂了日本艦隊(duì)司令官山本五十六發(fā)給各指揮官的命令,在中途島徹底擊潰了日本海軍,導(dǎo)致了太平洋戰(zhàn)爭的決定性轉(zhuǎn)折,而且不久還擊斃了山本五十六。相反軸心國中,只有德國是在第二次世界大戰(zhàn)的初期在密碼破譯方面取得過輝煌的戰(zhàn)績。因此,我們可以說,密碼學(xué)在戰(zhàn)爭中起著非常重要的作用。
編碼密碼學(xué)主要致力于信息加密、信息認(rèn)證、數(shù)字簽名和密鑰管理方面的研究。信息加密的目的在于將可讀信息轉(zhuǎn)變?yōu)闊o法識別的內(nèi)容,使得截獲這些信息的人無法閱讀,同時(shí)信息的接收人能夠驗(yàn)證接收到的信息是否被敵方篡改或替換過;數(shù)字簽名就是信息的接收人能夠確定接收到的信息是否確實(shí)是由所希望的發(fā)信人發(fā)出的;密鑰管理是信息加密中最難的部分,因?yàn)樾畔⒓用艿陌踩栽谟诿荑€。歷史上,各國軍事情報(bào)機(jī)構(gòu)在獵取別國的密鑰管理方法上要比破譯加密算法成功得多。
密碼分析學(xué)與編碼學(xué)的方法不同,它不依賴數(shù)學(xué)邏輯的不變真理,必須憑經(jīng)驗(yàn),依賴客觀世界覺察得到的事實(shí)。因而,密碼分析更需要發(fā)揮人們的聰明才智,更具有挑戰(zhàn)性。
現(xiàn)代密碼學(xué)是一門迅速發(fā)展的應(yīng)用科學(xué)。隨著因特網(wǎng)的迅速普及,人們依靠它傳送大量的信息,但是這些信息在網(wǎng)絡(luò)上的傳輸都是公開的。因此,對于關(guān)系到個(gè)人利益的信息必須經(jīng)過加密之后才可以在網(wǎng)上傳送,這將離不開現(xiàn)代密碼技術(shù)。
1976年Diffie和Hellman在《密碼新方向》中提出了著名的D-H密鑰交換協(xié)議,標(biāo)志著公鑰密碼體制的出現(xiàn)。?Diffie和Hellman第一次提出了不基于秘密信道的密鑰?分發(fā),這就是D-H協(xié)議的重大意義所在。
PKI(Public Key Infrastructure)是一個(gè)用公鑰概念與技術(shù)來實(shí)施和提供安全服務(wù)的具有普適性的安全基礎(chǔ)設(shè)施。PKI公鑰基礎(chǔ)設(shè)施的主要任務(wù)是在開放環(huán)境中為開放性業(yè)務(wù)提供數(shù)字簽名服務(wù)。
二十世紀(jì)六七十年代以來計(jì)算機(jī)和通信系統(tǒng)的普及,帶動(dòng)了個(gè)人對數(shù)字信息保護(hù)及各種安全服務(wù)的需求。IBM的Feistel在七十年代初期開始其工作,到1977年達(dá)到頂點(diǎn):其研究成果被采納成為加密非分類信息的美國聯(lián)邦信息處理標(biāo)準(zhǔn),即數(shù)據(jù)加密標(biāo)準(zhǔn)DES,歷史上最著名的密碼體制。
1977年,美國國家標(biāo)準(zhǔn)局公布實(shí)施了“美國數(shù)據(jù)加密標(biāo)(DES)”,軍事部門壟斷密碼的局面被打破,民間力量開始全面介入密碼學(xué)的研究和應(yīng)用中。民用的加密產(chǎn)品在市場上已有大量出售,采用的加密算法有DES、IDEA、RSA等。
DES至今依然是世界范圍內(nèi)許多金融機(jī)構(gòu)進(jìn)行安全電子商務(wù)的標(biāo)準(zhǔn)手段,是迄今為止世界上最為廣泛使用和流行的一種分組密碼算法。然而,隨著計(jì)算機(jī)硬件的發(fā)展及計(jì)算能力的提高,DES已經(jīng)顯得不再安全。1997年7月22日電子邊境基金學(xué)會(huì)(EFF)使用一臺(tái)25萬美金的電腦在56小時(shí)內(nèi)破譯了56位DES。1998年12月美國決定不再使用DES。美國國家標(biāo)準(zhǔn)技術(shù)研究所(NIST)現(xiàn)在已經(jīng)啟用了新的加密標(biāo)準(zhǔn)AES,它選用的算法是比利時(shí)的研究成果“Rijndael”。以上這兩個(gè)階段所使用的密碼體制都稱為是對稱密碼體制,因?yàn)檫@些體制中,加秘密鑰和解秘密鑰都是相同的,而進(jìn)入密碼學(xué)發(fā)展的第三個(gè)階段,則出現(xiàn)了非對稱密碼體制——公鑰密碼體制。
現(xiàn)有的密碼體制千千萬萬,各不相同。但是它們都可以分為私鑰密碼體制(如DES密碼)和公鑰密碼(如公開密鑰密碼)。前者的加密過程和脫密過程相同,而且所用的密鑰也相同;后者,每個(gè)用戶都有公開秘密鑰。
【多鏈與非對稱加密】
對稱加密指的就是加密和解密使用同一個(gè)秘鑰,所以叫做對稱加密。對稱加密只有一個(gè)秘鑰,作為私鑰。 常見的對稱加密算法:DES,AES,3DES等等。
非對稱加密指的是:加密和解密使用不同的秘鑰,一把作為公開的公鑰,另一把作為私鑰。公鑰加密的信息,只有私鑰才能解密。私鑰加密的信息,只有公鑰才能解密。 常見的非對稱加密算法:RSA,ECC。
非對稱加密算法需要兩個(gè)密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,如果用公開密鑰對數(shù)據(jù)進(jìn)行加密,只有用對應(yīng)的私有密鑰才能解密;如果用私有密鑰對數(shù)據(jù)進(jìn)行加密,那么只有用對應(yīng)的公開密鑰才能解密。因?yàn)榧用芎徒饷苁褂玫氖莾蓚€(gè)不同的密鑰,所以這種算法叫作非對稱加密算法。 非對稱加密算法實(shí)現(xiàn)機(jī)密信息交換的基本過程是:甲方生成一對密鑰并將其中的一把作為公用密鑰向其它方公開;得到該公用密鑰的乙方使用該密鑰對機(jī)密信息進(jìn)行加密后再發(fā)送給甲方;甲方再用自己保存的另一把專用密鑰對加密后的信息進(jìn)行解密。
另一方面,甲方可以使用乙方的公鑰對機(jī)密信息進(jìn)行簽名后再發(fā)送給乙方;乙方再用自己的私匙對數(shù)據(jù)進(jìn)行驗(yàn)簽。甲方只能用其專用密鑰解密由其公用密鑰加密后的任何信息。 非對稱加密算法的保密性比較好,它消除了最終用戶交換密鑰的需要。
非對稱密碼體制的特點(diǎn):算法強(qiáng)度復(fù)雜、安全性依賴于算法與密鑰但是由于其算法復(fù)雜,而使得加密解密速度沒有對稱加密解密的速度快。對稱密碼體制中只有一種密鑰,并且是非公開的,如果要解密就得讓對方知道密鑰。所以保證其安全性就是保證密鑰的安全,而非對稱密鑰體制有兩種密鑰,其中一個(gè)是公開的,這樣就可以不需要像對稱密碼那樣傳輸對方的密鑰了。這樣安全性就大了很多。
在EKT中,我們就使用了公私鑰結(jié)合的非對稱加密和路由策略的機(jī)制實(shí)現(xiàn)拜占庭容錯(cuò)。我們EKT的多鏈,采用“多鏈分而治之”的新方案重新設(shè)計(jì)了一個(gè)保障每個(gè)合約都能正常運(yùn)行的公鏈,其中就使用到了非對稱加密對用戶的信息進(jìn)行保存,同時(shí)主鏈和子鏈信息共享但是功能隔離。這一創(chuàng)新極大程度上簡化了架構(gòu),降低了數(shù)據(jù)處理壓力,確保一條鏈上流量激增不會(huì)影響到另一條鏈的效率,在鏈上進(jìn)行的任何業(yè)務(wù)都不會(huì)收到其他業(yè)務(wù)干擾,有效實(shí)現(xiàn)了資源隔離。
在EKT中Token鏈?zhǔn)且粋€(gè)并行多鏈的結(jié)構(gòu),多鏈多共識,共享用戶基礎(chǔ)。EKT的Token是鏈上的一個(gè)屬性,就像使用了utxo模型的鏈utxo有其他Token一樣,我們的轉(zhuǎn)賬事件也是內(nèi)置的。
其實(shí)EKT解決的一個(gè)核心問題是,目前Dapp的開發(fā)難度的問題如果使用以太坊的Solidity開發(fā),需要學(xué)習(xí)以太坊的一整套邏輯,在復(fù)雜應(yīng)用開發(fā)的時(shí)候需要考慮各種優(yōu)化方案,同一個(gè)功能使用傳統(tǒng)C/S結(jié)構(gòu)一天寫完的,用以太坊可能要寫幾周時(shí)間,對開發(fā)者來說很不友好。
例如針對C/S模型,要寫一個(gè)非對稱加密服務(wù)需要:
1. 設(shè)計(jì)一個(gè)服務(wù)端,可以計(jì)算出一對秘鑰pub/pri。將私鑰保密將公鑰公開。
2. 設(shè)計(jì)一個(gè)客戶端請求服務(wù)端時(shí),拿到服務(wù)端的公鑰pub。
3. 客戶端通過AES計(jì)算出對稱加密的秘鑰X。 然后使用pub將X進(jìn)行加密。
4. 客戶端將加密后的密文發(fā)送給服務(wù)端。服務(wù)端通過pri解密獲得X。
5. 最后還要設(shè)計(jì)兩邊通訊機(jī)制,通過對稱密鑰X以對稱加密算法來加解密。
這一套流程若要Dapp/公鏈開發(fā)者寫出來,勢必在真正開發(fā)區(qū)塊鏈功能之前就已經(jīng)被這些繁瑣但其實(shí)通用的步驟耗費(fèi)過多精力和資源。
EKT的中心思想就是設(shè)計(jì)一個(gè)社區(qū)的機(jī)制,讓開發(fā)者可以輕易的開發(fā)一個(gè)可以承載DAPP的主鏈,其他的交給EKT來處理, EKT 的“一鏈一主幣,多鏈多共識”的機(jī)制為后來的區(qū)塊鏈項(xiàng)目開發(fā)提供了很大的便利,可以使用于任何區(qū)塊鏈適用的應(yīng)用場景。
EKT 提供了一套底層的區(qū)塊鏈機(jī)制,其他的區(qū)塊鏈項(xiàng)目可以很容易的基于 EKT 的主鏈代碼部署一套自己的主鏈。在EKT上編寫的區(qū)塊鏈項(xiàng)目將無需過于擔(dān)心安全性問題,因?yàn)槊恳粋€(gè)接口都是非常簡單并且在許多條并行主鏈上部署和運(yùn)行的。部署主鏈時(shí)可以靈活的發(fā)行自己主鏈的代幣以及選擇共識算法。新部署的主鏈也可以加入到 EKT 的整個(gè)生態(tài),共享 EKT 生態(tài)的用戶資源,代幣也可以和EKT 主幣以及其他主鏈的代幣進(jìn)行交換和流通。
EKT主鏈上每個(gè)DPoS節(jié)點(diǎn)的公鑰都是公開的。這是一種兼顧效率、安全和去中心化的解決方案。Token現(xiàn)在一般被定義成一個(gè)智能合約,但如果把它變成一個(gè)預(yù)先定義好事件的“對象”,這個(gè)“對象”可以有自己的參數(shù)(比如總量、共識機(jī)制等等),則會(huì)帶來更好的安全體驗(yàn)。接受token的地址可以有兩種:普通的用戶地址和合約地址,合約地址收到token之后可以執(zhí)行非圖靈完備的合約語言,進(jìn)行簡單的狀態(tài)計(jì)算和token轉(zhuǎn)移。
【失靈的SHA-1】
區(qū)塊鏈玩家應(yīng)該都對一個(gè)詞非常的熟悉——哈希Hash,一般學(xué)術(shù)界翻譯做“散列”,程序員直接音譯為“哈希”,它的操作是把任意長度的輸入(又叫做預(yù)映射pre-image)通過散列算法變換成固定長度的輸出,該輸出就是散列值。這種轉(zhuǎn)換是一種壓縮映射,也就是,散列值的空間通常遠(yuǎn)小于輸入的空間,不同的輸入可能會(huì)散列成相同的輸出,所以不可能從散列值來確定唯一的輸入值。
簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數(shù) 所有散列函數(shù)都有一個(gè)基本特性:如果兩個(gè)散列值是不相同的(根據(jù)同一函數(shù)),那么這兩個(gè)散列值的原始輸入也是不相同的。這個(gè)特性是散列函數(shù)具有確定性的結(jié)果,具有這種性質(zhì)的散列函數(shù)稱為單向散列函數(shù)。
但另一方面,散列函數(shù)的輸入和輸出不是唯一對應(yīng)關(guān)系的,如果兩個(gè)散列值相同,兩個(gè)輸入值很可能是相同的,但也可能不同,這種情況稱為“散列碰撞(collision)”,這通常是兩個(gè)不同長度的輸入值,刻意計(jì)算出相同的輸出值。輸入一些數(shù)據(jù)計(jì)算出散列值,然后部分改變輸入值,一個(gè)具有強(qiáng)混淆特性的散列函數(shù)會(huì)產(chǎn)生一個(gè)完全不同的散列值哈希函數(shù)需要滿足下述條件
a.確定性:哈希函數(shù)的算法是確定性算法,算法執(zhí)行過程不引入任何隨機(jī)量。這意味著相同消息的哈希結(jié)果一定相同
b.高效性:給定任意一個(gè)消息m,可以快速計(jì)算HASH(m)
c.目標(biāo)抗碰撞性:給定任意一個(gè)消息m0 ,很難找到另一個(gè)消息m1,使得HASH(m0)= HASH(m1)
d.廣義抗碰撞性:很難找到兩個(gè)消息m0不等于m1 ,使得HASH(m0)= HASH(m1) 在密碼學(xué)上,一般認(rèn)為如果d條件不滿足,那么此哈希函數(shù)就不再安全。
在實(shí)際中,一般認(rèn)為如果在某種程度上c條件不滿足,那么此哈希函數(shù)就不再安全。當(dāng)然了,如果c個(gè)條件完全不滿足,那么此哈希函數(shù)已經(jīng)徹底不安全,應(yīng)該被直接棄用。
哈希一般的實(shí)際應(yīng)用被稱為安全散列算法,(英語:Secure Hash Algorithm,縮寫為SHA),它是FIPS認(rèn)證的安全散列算法,是一個(gè)密碼散列函數(shù)家族。能計(jì)算出一個(gè)數(shù)字消息所對應(yīng)到的,長度固定的字符串(又稱消息摘要)的算法。且若輸入的消息不同,它們對應(yīng)到不同字符串的機(jī)率很高(以前被認(rèn)為無限趨近于99.99999999%,為啥是以前,稍后解釋)密碼學(xué)作為一門古老的學(xué)科,有著悠久而奇妙的歷史。它用于保護(hù)軍事和外交通信可追溯到幾千年前文字剛剛產(chǎn)生的上古時(shí)期。
幾千年來,密碼學(xué)一直在不斷地向前發(fā)展。從凱撒密碼開始,人們在發(fā)展新密碼學(xué)算法的時(shí)候也在孜孜不倦的破解已有的密碼學(xué)算法,因?yàn)閷τ谄平庹邅碚f,密碼難度越高,意味著其背后守護(hù)的秘密價(jià)值就越大。SHA家族的五個(gè)算法,分別是SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512,后幾個(gè)一般也可以統(tǒng)稱為SHA-2,由美國國家安全局(NSA)所設(shè)計(jì),并由美國國家標(biāo)準(zhǔn)與技術(shù)研究院(NIST)發(fā)布;是美國的政府標(biāo)準(zhǔn)。也是眾多互聯(lián)網(wǎng)和電子產(chǎn)品的密鑰門神SHA系列Hash函數(shù)家族是最為知名的Hash函數(shù)家族,MD5,SHA-1和SHA-2都一直被廣泛的使用,比特幣使用的就是屬于SHA-2系列里的SHA-256湊雜算法。
1990年MD4算法被提出,但是被很快發(fā)現(xiàn)了嚴(yán)重的安全問題,在1992年被MD5算法取代。MD5算法在之后的十幾年內(nèi)被軟件行業(yè)廣泛使用,直到2004年我國密碼學(xué)家王小云在國際密碼討論年會(huì)(CRYPTO)上展示了MD5算法的碰撞并給出了第一個(gè)實(shí)例。該攻擊復(fù)雜度很低,在普通計(jì)算機(jī)上只需要幾秒鐘的時(shí)間。
在2005年王小云教授與其同事又提出了對SHA-1算法的碰撞算法(Finding Collisions in the Full SHA-1, CRYPTO 2005),不過計(jì)算復(fù)雜度為2的69次方,在實(shí)際情況下難以實(shí)現(xiàn)直到去年(2017年)的2月24日,谷歌拋出了他們驚人的實(shí)驗(yàn)結(jié)果——公布第了一例SHA-1哈希碰撞實(shí)例,這項(xiàng)發(fā)表甚至使密碼學(xué)界最為著名的頂會(huì)CRYPTO為等其論文修改結(jié)果延期了19個(gè)小時(shí)。因?yàn)楹唵蝸碚f,Google的工作基本宣判了SHA-1的死刑。在這項(xiàng)工作公布前,大多數(shù)網(wǎng)站https的證書都涉及使用SHA-1算法,包括GitHub在內(nèi)的眾多版本控制工具以及各種云同步服務(wù)都是用SHA-1來區(qū)別文件,很多安全證書或是簽名也使用SHA-1來保證唯一性。
長期以來,人們都認(rèn)為SHA1是十分安全的,至少大家還沒有找到一次碰撞案例, 不過如今不得不為用戶安全考慮開始升級至SHA-2或者其他算法了。CWI和Google的研究人員們成功找到了一例SHA1碰撞,而且很厲害的是,發(fā)生碰撞的是兩個(gè)真實(shí)的、可閱讀的PDF文件。這兩個(gè)PDF文件內(nèi)容不相同,但SHA1值完全一樣。
為什么這一研究結(jié)果的發(fā)表如此引人注目?這是因?yàn)榇蠹叶贾郎⒘兴惴赡艽嬖谂鲎玻?但只要這種碰撞難以創(chuàng)造,散列算法所支撐的系統(tǒng)就是安全的——而大家之前一直認(rèn)為SHA1的碰撞案例很難實(shí)現(xiàn)。
Google證明這一說法是站不住的,尤其是在現(xiàn)在GPU并行計(jì)算得到大范圍應(yīng)用的情況下。Google使用110塊GPU,經(jīng)過一年的計(jì)算,總共進(jìn)行了9百億億次計(jì)算(總共9,223,372,036,854,775,808次)創(chuàng)造了這一碰撞案例——這一計(jì)算過程的時(shí)間開銷固然龐大,但就現(xiàn)在非常普遍的大規(guī)模計(jì)算中心來說,并不是難以實(shí)現(xiàn)的。這意味著目前實(shí)現(xiàn)對于SHA1的碰撞攻擊仍然需要海量的計(jì)算時(shí)間。
MD5和SHA-1雖然已經(jīng)不建議被使用,但并不能說它們就已經(jīng)完全過時(shí)。
事實(shí)上,現(xiàn)有的各種更優(yōu)秀的密碼算法都是在舊算法的基礎(chǔ)上建立起來的,而舊的算法體系往往也并不是因?yàn)榇嬖诠逃新┒炊蝗藗儝仐墶?jì)算能力的飛速發(fā)展導(dǎo)致我們的基礎(chǔ)算法必須不斷改進(jìn),才能適應(yīng)生產(chǎn)環(huán)境的需要同時(shí)避免潛在的安全風(fēng)險(xiǎn)。我們也必須保持以最新的眼光來看待和處理工作,當(dāng)新的技術(shù)突破出現(xiàn)時(shí)及時(shí)關(guān)注,切勿墨守成規(guī),固步自封。
SHA-1和SHA-2是SHA算法不同的兩個(gè)版本,它們的構(gòu)造和簽名的長度都有所不一樣,但可以把SHA-2理解為SHA-1的繼承者。比特幣采用的SHA-256屬于SHA-2的256位用法,當(dāng)年(2008年)中本聰構(gòu)寫比特幣時(shí),未曾考慮到SHA算法這么快就能被破解,不過所幸后來的各類數(shù)字貨幣采用了更多更難破解的加密算法,具體大家可以往回翻翻我之前寫的《加密貨幣如何加密》系列。
不過從SHA-1被Google攻破來看,所有承載巨大市值的加密貨幣都應(yīng)該引起警覺,因?yàn)楣怖沧R的維護(hù),還是必須建立在加密算法的基石之【量子計(jì)算的隱憂】但如果現(xiàn)有加密方式全部失靈,數(shù)字貨幣世界會(huì)變成什么樣子?這個(gè)聽起來有點(diǎn)天方夜談的想法其實(shí)離我們并不遙遠(yuǎn)。
當(dāng)十幾年后實(shí)用量子計(jì)算機(jī)出現(xiàn),算力大幅提升,現(xiàn)有的依靠數(shù)學(xué)復(fù)雜度來保證安全性的非對稱密鑰的加密方式很可能會(huì)全部失靈。郭光燦院士在演講中就曾提到,基于2000qubit的量子計(jì)算機(jī)使用shor算法可以在1s完成RSA算法安全性依賴的大數(shù)分解計(jì)算。首先簡單講一下什么是量子計(jì)算。
量子比特可以制備在兩個(gè)邏輯態(tài)0和1的相干疊加態(tài),換句話講,它可以同時(shí)存儲(chǔ)0和1??紤]一個(gè) N個(gè)物理比特的存儲(chǔ)器,若它是經(jīng)典存儲(chǔ)器,則它只能存儲(chǔ)2^N個(gè)可能數(shù)據(jù)當(dāng)中的任一個(gè),若它是量子存儲(chǔ)器,則它可以同時(shí)存儲(chǔ)2^N個(gè)數(shù),而且隨著 N的增加,其存儲(chǔ)信息的能力將指數(shù)上升,例如,一個(gè)250量子比特的存儲(chǔ)器(由250個(gè)原子構(gòu)成)可能存儲(chǔ)的數(shù)達(dá)2^250,比現(xiàn)有已知的宇宙中全部原子數(shù)目還要多。
由于數(shù)學(xué)操作可以同時(shí)對存儲(chǔ)器中全部的數(shù)據(jù)進(jìn)行,因此,量子計(jì)算機(jī)在實(shí)施一次的運(yùn)算中可以同時(shí)對2^N個(gè)輸入數(shù)進(jìn)行數(shù)學(xué)運(yùn)算。其效果相當(dāng)于經(jīng)典計(jì)算機(jī)要重復(fù)實(shí)施2^N次操作,或者采用2^N個(gè)不同處理器實(shí)行并行操作。可見,量子計(jì)算機(jī)可以節(jié)省大量的運(yùn)算資源(如時(shí)間、記憶單元等)。
量子計(jì)算機(jī)并不是一種更快的計(jì)算機(jī)。它在邏輯、輸出方式等方面與經(jīng)典計(jì)算機(jī)根本不同,其中最本質(zhì)的就是量子糾纏的存在。在量子信息學(xué)的觀點(diǎn)中,量子糾纏是與物質(zhì)、能量、信息并列的一種自然資源,利用好這種資源能使量子計(jì)算機(jī)發(fā)揮出巨大威力。但是,如何用它設(shè)計(jì)更快的算法,在理論上就是很大的挑戰(zhàn)。
目前,對絕大多數(shù)計(jì)算問題,理論家們都還沒有找到超過經(jīng)典算法的量子算法;但在一些特殊問題上確實(shí)有了新的發(fā)現(xiàn)。哪些問題呢?最早發(fā)現(xiàn)的主要有兩類:一類可以歸結(jié)為質(zhì)因數(shù)分解(Shor 算法),比已知最快經(jīng)典算法有指數(shù)加速(準(zhǔn)確說是超多項(xiàng)式加速);另一類可以歸結(jié)為無序搜索(Grove 算法),比經(jīng)典算法有多項(xiàng)式加速。
Shor 算法和 Grove 算法分別于1994年和1996年被提出,可以說是它們的發(fā)現(xiàn)引起了科學(xué)界對量子計(jì)算的真正重視——盡管量子計(jì)算的初步概念在80年代初就已出現(xiàn),但十幾年來都只是很小圈子內(nèi)的理論游戲,被認(rèn)為既無法實(shí)現(xiàn)也沒有用處;Shor 算法和 Grove 算法終于為量子計(jì)算機(jī)找到了可能的實(shí)際應(yīng)用。
其中 Shor 算法的影響尤其大——現(xiàn)代密碼學(xué)中,幾類常用的公鑰系統(tǒng)包括 RSA (Rivest–Shamir–Adleman) 和 ECC (elliptic-curve cryptography) 等的基本加密原理就是大數(shù)分解的計(jì)算復(fù)雜度。因此量子計(jì)算機(jī)一旦出現(xiàn),將給現(xiàn)有的信息安全帶來巨大威脅,加密貨幣現(xiàn)有的算法也幾乎全部不堪一擊。
順帶一提,ECC就是比特幣使用的加密方式?;F盧大學(xué)量子計(jì)算學(xué)院的聯(lián)合創(chuàng)始人Michele Mosca(也是圓周理論物理研究所的研究人員)認(rèn)為我們現(xiàn)在所用的部分加密工具,到2026年就有1/7的概率遭破解;到了2031年,這個(gè)數(shù)字又會(huì)上升到50%。也就是說,到那個(gè)時(shí)候,如果我們還在用現(xiàn)在的加密機(jī)制,那么即便網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)經(jīng)過了加密,也可通過暴力破解來解密——這也是量子計(jì)算能夠帶來的“便利”。有人想到既然量子計(jì)算可以帶來算力提升破解加密算法,那么可不可以用量子算法來直接加密呢?答案是可行但目前一切未知。
量子加密設(shè)備中必不可少的、同時(shí)也是最昂貴的部件是光子探測器,在現(xiàn)有(或者不遠(yuǎn)的將來)條件下,發(fā)起一次量子計(jì)算攻擊可以帶來巨大收益而有人愿意為此買單,但如果說使用量子加密算法的數(shù)字貨幣都采用這個(gè)類型的礦機(jī),那又是不可能承受的成本之痛了,不過未來一二十年會(huì)發(fā)什么樣神奇的事情,誰又能預(yù)
【EKT的思考】
在20世紀(jì)70年代,英國情報(bào)部門和學(xué)術(shù)機(jī)構(gòu)的研究人員各自獨(dú)立發(fā)明了非對稱加密方法。
它使用兩個(gè)不同的密鑰:一個(gè)公鑰和一個(gè)私鑰。
在一次交易的加密過程中,兩個(gè)密鑰都是必需的。例如,在進(jìn)行線上購物時(shí),供應(yīng)商的服務(wù)器把公鑰發(fā)送到消費(fèi)者的電腦,這個(gè)密鑰是公開的,可以被所有消費(fèi)者獲取并使用。消費(fèi)者的電腦用該公鑰加密一個(gè)密鑰,后者將作為與供應(yīng)商共享的對稱密鑰。在收到經(jīng)過加密的對稱密鑰之后,供應(yīng)商的服務(wù)器將用一個(gè)自己獨(dú)有的私鑰對之進(jìn)行解密。一旦雙方安全地共享了對稱密鑰,就可以用其完成后續(xù)交易的加解密。
非對稱加密算法需要兩個(gè)密鑰: 公開密鑰(publickey)和私有密鑰(privatekey)。
公開密鑰與私有密鑰是一對,如果用公開密鑰對數(shù)據(jù)進(jìn)行加密,只有用對應(yīng)的私有密鑰才能解密;如果用私有密鑰對數(shù)據(jù)進(jìn)行加密,那么只有用對應(yīng)的公開密鑰才能解密。因?yàn)榧用芎徒饷苁褂玫氖莾蓚€(gè)不同的密鑰,所以這種算法叫作非對稱加密算法。
非對稱加密算法實(shí)現(xiàn)機(jī)密信息交換的基本過程是: 甲方生成一對密鑰并將其中的一把作為公用密鑰向其它方公開;得到該公用密鑰的乙方使用該密鑰對機(jī)密信息進(jìn)行加密后再發(fā)送給甲方;甲方再用自己保存的另一把專用密鑰對加密后的信息進(jìn)行解密另一方面,甲方可以使用乙方的公鑰對機(jī)密信息進(jìn)行簽名后再發(fā)送給乙方;乙方再用自己的私匙對數(shù)據(jù)進(jìn)行驗(yàn)簽。
甲方只能用其專用密鑰解密由其公用密鑰加密后的任何信息。 非對稱加密算法的保密性比較好,它消除了最終用戶交換密鑰的需要在EKT中,我們就使用了公私鑰結(jié)合的非對稱加密和路由策略的機(jī)制實(shí)現(xiàn)拜占庭容錯(cuò)。我們EKT的多鏈,采用“多鏈分而治之”的新方案重新設(shè)計(jì)了一個(gè)保障每個(gè)合約都能正常運(yùn)行的公鏈,其中就使用到了非對稱加密對用戶的信息進(jìn)行保存,同時(shí)主鏈和子鏈信息共享但是功能隔離。
這一創(chuàng)新極大程度上簡化了架構(gòu),降低了數(shù)據(jù)處理壓力,確保一條鏈上流量激增不會(huì)影響到另一條鏈的效率,在鏈上進(jìn)行的任何業(yè)務(wù)都不會(huì)收到其他業(yè)務(wù)干擾,有效實(shí)現(xiàn)了資源隔離在EKT中Token鏈?zhǔn)且粋€(gè)并行多鏈的結(jié)構(gòu),多鏈多共識,共享用戶基礎(chǔ)。
EKT的Token是鏈上的一個(gè)屬性,就像使用了utxo模型的鏈utxo有其他Token一樣,我們的轉(zhuǎn)賬事件也是內(nèi)置的其實(shí)EKT解決的一個(gè)核心問題是,目前Dapp的開發(fā)難度的問題如果使用以太坊的Solidity開發(fā),需要學(xué)習(xí)以太坊的一整套邏輯,在復(fù)雜應(yīng)用開發(fā)的時(shí)候需要考慮各種優(yōu)化方案,同一個(gè)功能使用傳統(tǒng)C/S結(jié)構(gòu)一天寫完的,用以太坊可能要寫幾周時(shí)間,對開發(fā)者來說很不友好。
這一套流程若要Dapp/公鏈開發(fā)者寫出來,勢必在真正開發(fā)區(qū)塊鏈功能之前就已經(jīng)被這些繁瑣但其實(shí)通用的步驟耗費(fèi)過多精力和資源在EKT中,堅(jiān)持了這樣一個(gè)理念,一個(gè)貨幣系統(tǒng)中不需要圖靈完備的開發(fā)語言,不同的應(yīng)用間盡可能實(shí)現(xiàn)隔離的原則。因此我們在設(shè)計(jì)的時(shí)候,把token的處理和DApp的處理分開了,也就是說在EKT上存在兩種類型的鏈:token鏈和DApp鏈token鏈就是專門用于處理token交易的一條鏈,鑒于ERC20代幣不斷曝出的各種漏洞(雖然漏洞的產(chǎn)生是智能合約開發(fā)者的問題,但是我們認(rèn)為是有更好的方案來實(shí)現(xiàn)的),在EKT上內(nèi)置了token對象,開發(fā)者只需要定義自己要發(fā)的token的數(shù)量即可。
另外,EKT的token鏈?zhǔn)且粋€(gè)多鏈多共識的結(jié)構(gòu),也就是說不同的token可以放在不同的token鏈上進(jìn)行打包,多鏈并行極大提高交易處理速度EKT的DApp鏈?zhǔn)枪┎煌_發(fā)者開發(fā)DApp的一條鏈。我們從智能合約開發(fā)語言、數(shù)據(jù)存儲(chǔ)(帶有默克爾證明的和私有的不帶默克爾證明的存儲(chǔ)空間)、效率三個(gè)方面進(jìn)行了優(yōu)化。
EKT的DApp鏈基本上可以實(shí)現(xiàn)與現(xiàn)在的互聯(lián)網(wǎng)應(yīng)用相同甚至更快的開發(fā)速度,可實(shí)現(xiàn)的功能性也與互聯(lián)網(wǎng)應(yīng)用沒有太大差異,最重要的是,我們可以實(shí)現(xiàn)大部分事件的1秒執(zhí)行和確認(rèn),安全性要求比較高的事件可以實(shí)現(xiàn)3秒的確認(rèn)EKT的中心思想就是設(shè)計(jì)一個(gè)社區(qū)的機(jī)制,讓開發(fā)者可以輕易的開發(fā)一個(gè)可以承載DAPP的主鏈,其他的交給EKT來處理, EKT 的“一鏈一主幣,多鏈多共識”的機(jī)制為后來的區(qū)塊鏈項(xiàng)目開發(fā)提供了很大的便利,可以使用于任何區(qū)塊鏈適用的應(yīng)用場景。
EKT 提供了一套底層的區(qū)塊鏈機(jī)制,其他的區(qū)塊鏈項(xiàng)目可以很容易的基于 EKT 的主鏈代碼部署一套自己的主鏈。在EKT上編寫的區(qū)塊鏈項(xiàng)目將無需過于擔(dān)心安全性問題,因?yàn)槊恳粋€(gè)接口都是非常簡單并且在許多條并行主鏈上部署和運(yùn)行的。
部署主鏈時(shí)可以靈活的發(fā)行自己主鏈的代幣以及選擇共識算法。新部署的主鏈也可以加入到 EKT 的整個(gè)生態(tài),共享 EKT 生態(tài)的用戶資源,代幣也可以和EKT 主幣以及其他主鏈的代幣進(jìn)行交換。
在設(shè)計(jì)EKT的加密制度時(shí),我們團(tuán)隊(duì)也曾經(jīng)認(rèn)真考慮過SHA-1破解以及未來量子計(jì)算技術(shù)大發(fā)展之后對區(qū)塊鏈?zhǔn)澜绲挠绊?,甚至一度想要立馬著手實(shí)現(xiàn)這個(gè)看似fancy的功能。不過經(jīng)過深思熟慮之后,我們團(tuán)隊(duì)還是決定將現(xiàn)在有限的資源盡可能投入到平臺(tái)的開發(fā)工作當(dāng)中,同時(shí)我以及幾個(gè)同事都會(huì)密切關(guān)注加密貨幣安全方面的進(jìn)展,保持可以參考和跟緊最新最安全的學(xué)術(shù)界新動(dòng)向。以上就是我對區(qū)塊鏈密碼學(xué)的一些思考,和一些在設(shè)計(jì)EKT的多鏈多共識時(shí)對建設(shè)非對稱加密底層的考慮。
評論