引言:密碼學(xué)是區(qū)塊鏈技術(shù)的核心
我們從專業(yè)的技術(shù)知識(shí)角度來(lái)理解區(qū)塊鏈的定義,應(yīng)當(dāng)是:區(qū)塊鏈?zhǔn)且环N按照時(shí)間順序?qū)?shù)據(jù)進(jìn)行分布式存儲(chǔ)的塊鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu)祖驱,它利用共識(shí)機(jī)制進(jìn)行數(shù)據(jù)驗(yàn)證握恳,利用密碼學(xué)進(jìn)行數(shù)據(jù)保護(hù)和用戶安全訪問(wèn),利用智能合約來(lái)操作數(shù)據(jù)捺僻,從而成為不可篡改和不可偽造的分布式賬本乡洼。所以,分布式存儲(chǔ)匕坯、共識(shí)機(jī)制束昵、密碼學(xué)原理和智能合約構(gòu)成區(qū)塊鏈的核心技術(shù)內(nèi)容。
提到密碼學(xué)醒颖,我們并不感到陌生妻怎,比如許多戰(zhàn)爭(zhēng)電影中,很多人戴著耳機(jī)圍繞著機(jī)器根據(jù)“嘀嘀嘀”的聲音截獲密文泞歉,再進(jìn)行解密獲得軍事情報(bào),這就是密碼學(xué)的早期應(yīng)用匿辩。在 1970 年之前腰耙,密碼學(xué)還基本是由國(guó)家權(quán)力機(jī)構(gòu)壟斷,而后隨著技術(shù)不斷進(jìn)步铲球,才漸漸進(jìn)入公眾領(lǐng)域挺庞。
目前密碼學(xué)作為區(qū)塊鏈的核心內(nèi)容之一,在區(qū)塊鏈網(wǎng)絡(luò)的安全交易稼病、隱私保護(hù)還有安全訪問(wèn)中起到不可忽視的作用选侨,是支撐區(qū)塊鏈不可缺少的核心技術(shù)。所以今天然走,我們就用通俗易懂的語(yǔ)言跟大家介紹一下“區(qū)塊鏈中的密碼學(xué)”援制。
區(qū)塊鏈密碼學(xué)發(fā)展史
首先,要從它的發(fā)展史說(shuō)起芍瑞,這就不得不提到凱撒大帝(Caesar)—— 第一個(gè)把“替換密碼”用于軍事用途晨仑、并且記錄下來(lái)的人。他用替換字母的方法創(chuàng)造了最早的“密文”:將每個(gè)字母拆檬,用字母表中這個(gè)字母之后三位的字母替代洪己。這是一種替換加密的技術(shù),明文中的所有字母都在字母表上向后(或向前)按照一個(gè)固定數(shù)目進(jìn)行偏移后被替換成密文竟贯。
在這個(gè)過(guò)程中答捕,人人都認(rèn)識(shí)的文本是“明文”,加密的規(guī)則是“密鑰”屑那,通過(guò)密鑰拱镐,原本大家都認(rèn)識(shí)的明文就變成了看不懂的“密文”艘款。這種加密方法用我們現(xiàn)在的眼光看會(huì)稍顯幼稚,但在當(dāng)時(shí)痢站,用這種方法形成的“密文”非常難以被破譯磷箕,而這種用明文加密的思路也被沿用了上千年。
隨著科學(xué)進(jìn)步阵难,這種代換方法慢慢被人找到了破解方法岳枷,比如:學(xué)習(xí)過(guò)英語(yǔ)的我們知道,e是最常見(jiàn)的字母呜叫,其次是字母t和a空繁,如果按照凱撒密碼加密,一個(gè)密碼字母對(duì)應(yīng)明碼字母朱庆,那么密碼字母中出現(xiàn)次數(shù)最多的很有可能就應(yīng)該對(duì)應(yīng)明碼字母E盛泡,以此類推,很容易就可以排除掉大量的密鑰娱颊,從而快速地找到正確的破譯方法傲诵。
于是在1467年左右,佛羅倫薩的建筑師 Alberti 發(fā)明了多表代換密碼箱硕,也就是在一個(gè)多表替換密碼的密文中拴竹,會(huì)使用多個(gè)字母作為密碼。多字母替換密碼比單字母更難破解剧罩,因?yàn)槠涮鎿Q可能性多古话。以此為開(kāi)端少态,衍生出了非常多設(shè)計(jì)精良的多表代換密碼。而直到二十世紀(jì)二十年代,人們才終于可以開(kāi)始使用各種機(jī)械加密設(shè)備進(jìn)行自動(dòng)加密處理孝治。
計(jì)算機(jī)的誕生幫助密碼學(xué)躍升至新高度冈欢。1984 年 10 月香農(nóng)(信息論之父)的信息論出現(xiàn)活玲,標(biāo)志著現(xiàn)代密碼學(xué)的形成瞒津,這時(shí)出現(xiàn)了極具代表性的“對(duì)稱加密算法”,即:當(dāng)傳遞信息時(shí)营罢,信息先要通過(guò)密鑰進(jìn)行加密赏陵,加密后的明文以二進(jìn)制的方式轉(zhuǎn)播,再通過(guò)相同的密鑰解密獲得信息饲漾。
值得一提的是:
“對(duì)稱加密”蝙搔,密鑰只有一把,如果你想讓一個(gè)人看到你用密鑰加密的信息考传,就必須把密鑰傳遞給對(duì)方吃型,對(duì)方才能進(jìn)行解密。但這種加密的方式有一個(gè)問(wèn)題僚楞,一旦密鑰在傳輸過(guò)程被黑客截取勤晚,那么自己加密的信息則會(huì)面臨被破譯的風(fēng)險(xiǎn)枉层,所以密鑰的保存與安全傳輸就成了關(guān)鍵問(wèn)題。
直到1876年赐写,“非對(duì)稱加密”現(xiàn)世后鸟蜡,人們才攻克這一難關(guān),同時(shí)也標(biāo)志著公鑰密碼學(xué)的成型挺邀。它相較之前的“對(duì)稱加密”揉忘,最大的區(qū)別就是:“非對(duì)稱加密”的加密和解密過(guò)程分別使用了“公鑰”和“私鑰”,密鑰不再只有一個(gè)端铛,而是以一對(duì)的方式出現(xiàn)泣矛。
1976 年,Whitfield Diffie 和 Martin Hellman 提出“公鑰密碼”這一概念禾蚕,希望能實(shí)現(xiàn)在不直接傳遞密鑰的情況下就能完成密文的解密您朽,1978 年,隨著 RSA 公鑰密碼機(jī)制的完善换淆,開(kāi)啟了“非對(duì)稱加密算法”的時(shí)代哗总。
由簡(jiǎn)單到復(fù)雜,由實(shí)體到數(shù)字化倍试,密碼學(xué)成為了信息安全的保衛(wèi)者魂奥,在以不可篡改、不可偽造著稱的區(qū)塊鏈?zhǔn)澜缰幸酌ǎl(fā)揮著巨大的作用。
區(qū)塊鏈中的密碼學(xué)
介紹完區(qū)塊鏈密碼學(xué)的“前世今生”具壮,我們具體看看准颓,在區(qū)塊鏈的整個(gè)體系中密碼學(xué)原理所起到的作用,在這里我們主要介紹哈希算法和非對(duì)稱加密技術(shù)棺妓。
1攘已、哈希算法
哈希算法又稱為哈希函數(shù),是一個(gè)密碼學(xué)工具怜跑,可以用在數(shù)字簽名中样勃,還可以用于證明密碼安全體制、作為安全組件設(shè)計(jì)多種密碼體制和安全通信協(xié)議性芬。作為比特幣和區(qū)塊鏈的核心技術(shù)峡眶。簡(jiǎn)單來(lái)說(shuō)啊,它跟我們中學(xué)時(shí)期學(xué)到的函數(shù)是相同性質(zhì)的東西植锉,只要代入一個(gè) x辫樱,就能得出一個(gè) y,只不過(guò)它的計(jì)算特別復(fù)雜而已俊庇。代入一個(gè)數(shù)據(jù)后生成的加密結(jié)果被稱為這一數(shù)據(jù)的哈希值狮暑,它可以被看作是這個(gè)消息的指紋鸡挠,是世上獨(dú)一無(wú)二的表示。
相比較一般的函數(shù)而言搬男,哈希函數(shù)有兩個(gè)特別厲害的地方:
1)對(duì)于普通的函數(shù)拣展,我們平時(shí)代入的 x 只限于數(shù)字,得出的 y 數(shù)據(jù)也長(zhǎng)短不一缔逛。而對(duì)于哈希函數(shù)备埃,不管你代入什么,比如:數(shù)字译株、英文字母瓜喇、漢字或者幾者組合等等,并且不管這個(gè)數(shù)據(jù)長(zhǎng)度如何歉糜,都只能被生成一個(gè)固定長(zhǎng)度的加密結(jié)果(常見(jiàn)為 256 位)乘寒;
2)在我們課本中學(xué)到的函數(shù)往往既可以通過(guò) x 解答出 y 的值,也可以通過(guò) y 解答出 x 的值匪补,可是對(duì)于哈希函數(shù)伞辛,代入 x 后能夠生成數(shù)據(jù)為 y 的加密結(jié)果,卻不能夠由 y 再計(jì)算回到 x夯缺,并且每一個(gè) x 都只會(huì)對(duì)應(yīng)一個(gè) y蚤氏,在到目前為止能力范圍內(nèi)無(wú)法找到與之重復(fù)的結(jié)果。也就是說(shuō)踊兜,哈希函數(shù)具有絕對(duì)的單向性竿滨。
舉例:我們?cè)诰W(wǎng)上找了一個(gè)哈希( Hash )算法工具給“OKBS”加密,形成哈希值如下所示:
如圖中捏境,初始信息“OKBS”于游,經(jīng)過(guò)哈希算法計(jì)算器的加密,就變成了 256 位的加密結(jié)果了垫言。注意贰剥,哈希算法具有絕對(duì)的單向性和敏感性,任何輸入數(shù)據(jù)發(fā)生改變(哪怕只有極細(xì)微的差別)都會(huì)輸出一個(gè)不一樣的輸出結(jié)果筷频,這就是它的厲害之處了蚌成!
2、非對(duì)稱加密算法
非對(duì)稱加密算法的完成需要公鑰凛捏、私鑰和加/解密算法三個(gè)結(jié)構(gòu)担忧。
首先,密碼學(xué)中的“安全偽隨機(jī)數(shù)生成器”能夠產(chǎn)生一對(duì)密鑰(即:公鑰和私鑰)葵袭,這兩者是成對(duì)的涵妥,公鑰是可以公開(kāi)的,而私鑰則由用戶自己保留。
用私鑰加密的數(shù)據(jù)只有用公鑰才可以解密蓬网,反過(guò)來(lái)窒所,用公鑰加密的數(shù)據(jù)也只有用私鑰才可以解密。公鑰和私鑰之間的這種數(shù)學(xué)關(guān)系帆锋,使得私鑰可以用于生成特定消息的簽名吵取。而這個(gè)簽名可以在不暴露私鑰的前提下通過(guò)公鑰進(jìn)行驗(yàn)證。
也就是說(shuō)我把一段信息用私鑰進(jìn)行簽名(加密過(guò)程)锯厢,然后把這個(gè)數(shù)據(jù)連同簽名和我的公鑰發(fā)送給對(duì)方皮官,對(duì)方就可以通過(guò)公鑰對(duì)簽名進(jìn)行驗(yàn)證(解密過(guò)程)對(duì)比數(shù)據(jù)從而驗(yàn)證數(shù)據(jù)的有效性。
對(duì)應(yīng)到比特幣的交易系統(tǒng)中实辑,就是:公鑰生成的錢包地址用于接收比特幣捺氢,而私鑰則用于比特幣支付時(shí)的交易簽名。
在支付比特幣時(shí)剪撬,比特幣的所有者需要在交易中提交自己的公鑰和該交易的簽名摄乒。而比特幣網(wǎng)絡(luò)中所有節(jié)點(diǎn)可以通過(guò)所提交的公鑰和簽名進(jìn)行驗(yàn)證,從而確認(rèn)支付者對(duì)交易的比特幣的所有權(quán)残黑。這樣就實(shí)現(xiàn)了既不暴露自己的私鑰又能讓所有的節(jié)點(diǎn)有效地驗(yàn)證交易馍佑。
了解哈希算法和非對(duì)稱加密技術(shù)后,我們來(lái)具體看一看交易過(guò)程中如何進(jìn)行簽名和驗(yàn)證:
發(fā)送者想要在區(qū)塊鏈網(wǎng)絡(luò)中發(fā)起一個(gè)交易(在此理解為打包傳送一條名為 x 的原文)時(shí)梨水,先要通過(guò)哈希函數(shù)將原文 x 形成一個(gè)信息摘要 x拭荤,再用自己的私鑰對(duì)其進(jìn)行加密形成數(shù)字簽名 x,即加密過(guò)程:
接著疫诽,發(fā)送者會(huì)把原文 x 和數(shù)字簽名 x 合在一起發(fā)送給接受者:? ??
接收者接收完畢后舅世,會(huì)將原文 x 用相同的哈希算法提取信息摘要 y,再對(duì)發(fā)送者發(fā)送來(lái)的數(shù)字簽名 x 用對(duì)應(yīng)的公鑰進(jìn)行解密得到信息摘要 z奇徒,通過(guò)比較 y 與 z 是否一致來(lái)確認(rèn)接受到的信息是否有效(完整且在傳輸過(guò)程中未被修改)歇终。
以上簡(jiǎn)單介紹了密碼學(xué)在區(qū)塊鏈體系中起到的作用,密碼學(xué)可以為一切虛擬網(wǎng)絡(luò)的安全性提供保證逼龟,安全性是一切交易的基礎(chǔ),區(qū)塊鏈網(wǎng)絡(luò)離不開(kāi)加密算法這塊基石追葡。而且腺律,隨著科技發(fā)展日新月異,我們的加密算法也還會(huì)不斷改進(jìn)宜肉,讓我們拭目以待吧匀钧。