【漫游區(qū)塊鏈】密碼學(xué)技術(shù)簡介

簡介

區(qū)塊鏈?zhǔn)褂玫幕久艽a學(xué)技術(shù)包括哈希算法益老、對稱加密、非對稱加密和數(shù)字簽名寸莫。

本文將簡單介紹各密碼學(xué)的基本原理捺萌,僅限于概念性的內(nèi)容,具體的原理膘茎、推導(dǎo)均未涵蓋桃纯。希望能夠帶領(lǐng)大家了解密碼學(xué)的基礎(chǔ)要點。
目錄
簡介
一披坏、哈希算法
二态坦、對稱加密
三、非對稱加密
四棒拂、數(shù)字簽名
參考

一伞梯、哈希算法

基本概念

哈希(Hash)算法是通過一個哈希函數(shù)(H),把任意長度的輸入映射為固定長度的輸出的一種壓縮算法帚屉,也稱為“消息摘要”谜诫。
哈希常用于檢驗信息是否相同,身份驗證攻旦,數(shù)字簽名喻旷。我們可以通過哈希算法,將一個電腦文件的內(nèi)容轉(zhuǎn)換為一小段定長的代碼牢屋,這樣我們想要驗證文件是否一致且预,只需要比對哈希值是否一致即可,而不需要比對所有的文件內(nèi)容了烙无。

哈希是一種單向密碼體制锋谐。你可以把一段明文通過哈希算法轉(zhuǎn)換為一段密文,但是無法將這段密文轉(zhuǎn)換回原來的明文皱炉。一段密文可能存在多種明文相對應(yīng)怀估,無法逆向破解。

一個優(yōu)秀的哈希算法合搅,有以下幾個特點

  • 正向快速: 給定一個明文多搀,可以快速計算出哈希值。
  • 逆向困難: 給定多段密文灾部,難以逆推出明文康铭。
  • 輸入敏感: 明文的微小變化會導(dǎo)致哈希值的較大變化。
  • 沖突避免: 很難找到兩個明文會得到同樣的哈希值赌髓。

原理

從概念可知一個哈希算法需要有兩大要素:

  1. 用于映射的函數(shù)H
  2. 用于處理沖突的方法

哈希函數(shù)和哈希表

假設(shè)我們想要存儲很多個元素从藤,并且希望以后能夠快速查找某個想要的元素的位置催跪。怎么辦呢?

最基本的思路夷野,就是我們隨便存儲這些元素懊蒸,然后在查找時從頭到尾遍歷查找即可。這樣的方式簡單悯搔,但是十分費時費力骑丸,我們想要有更快的速度,哪怕犧牲一點存儲空間也可以接受妒貌。

而哈希函數(shù)和哈希表可以加快查找的速度通危。

哈希函數(shù)是一個映射關(guān)系H, 可以將元素和一個唯一的存儲位置相對應(yīng)灌曙。在存儲一個元素k時菊碟,就把k存放在H(k)的位置上。查找時同理在刺,只要將元素放進(jìn)映射關(guān)系中運算逆害,就可以查找到元素字的位置。

幾種構(gòu)造函數(shù)的方法:

  1. 直接定址法
  2. 數(shù)字分析法
  3. 平方取中法
  4. 折疊法
  5. 隨機(jī)數(shù)法
  6. 除留余數(shù)法

通過哈希函數(shù)映射元素得到的表就是哈希表增炭,又稱散列表忍燥。之所以成為散列表,是因為在表中隙姿,數(shù)據(jù)不是緊密排列的梅垄。因為通過函數(shù)映射得到的值不一定是連續(xù)值。

沖突處理

但哈希函數(shù)可能引起的問題就是沖突输玷。哈希函數(shù)一個特點就是隨機(jī)队丝,它盡量模擬隨即平均分布的結(jié)果來為每個元素安排地址,但這樣的結(jié)果可能造成沖突欲鹏,也就是兩個元素得到的地址相同(又稱“同義詞”)机久。所以,如何解決沖突赔嚎,就是哈希算法中的一個重要的設(shè)計膘盖。

常用的沖突處理方法:

  1. 開放定址法
  2. 再哈希法
  3. 鏈地址法
  4. 公共溢出區(qū)

常用哈希算法

1. MD4:
 MD4(RFC 1320)是 MIT 的 Ronald L. Rivest 在 1990 年設(shè)計的,MD 是 Message Digest 的縮寫尤误。它適用在32位字長的處理器上用高速軟件實現(xiàn)--它是基于 32 位操作數(shù)的位操作來實現(xiàn)的侠畔。

2. MD5
  MD5(RFC 1321)是 Rivest 于1991年對MD4的改進(jìn)版本。它對輸入仍以512位分組损晤,其輸出是4個32位字的級聯(lián)软棺,與 MD4 相同。MD5比MD4來得復(fù)雜尤勋,并且速度較之要慢一點喘落,但更安全茵宪,在抗分析和抗差分方面表現(xiàn)更好

3. SHA-1
  SHA1是由NIST NSA設(shè)計為同DSA一起使用的,它對長度小于264的輸入瘦棋,產(chǎn)生長度為160bit的散列值稀火,因此抗窮舉(brute-force)性更好。SHA-1 設(shè)計時基于和MD4相同原理兽狭,并且模仿了該算法憾股。

哈希算法在區(qū)塊鏈中的應(yīng)用

1. 工作量證明PoW

工作量證明實際就是常說的“挖礦”鹿蜀。礦工的目的就是不斷進(jìn)行哈希計算求解某個難度值的SHA256算法箕慧。這個難度值會根據(jù)加入全網(wǎng)的總計算力而不斷改變,以保持大約10分鐘生成一個比特幣區(qū)塊的速度茴恰。

挖礦就是重復(fù)計算區(qū)塊頭的哈希值颠焦,不斷修改參數(shù),直到找到與難度目標(biāo)值匹配的隨機(jī)數(shù)的過程往枣,這有些類似深度學(xué)習(xí)里的調(diào)參伐庭。這些計算參數(shù)中能改變的只有梅克爾根(Merkle Root)、區(qū)塊時間戳(Timestamp)和隨機(jī)數(shù)(Nonce)分冈。要通過像這樣的參數(shù)來計算出符合條件的值圾另,基本上也就只能靠暴力計算了。這種不斷執(zhí)行SHA256計算的過程很消耗算力雕沉,因此被形象地稱為挖礦集乔。在挖礦這個典型應(yīng)用中實際上用到了哈希算法速度快和特征化這兩個特點。
—— 玩轉(zhuǎn)瑞士軍刀——哈希算法在區(qū)塊鏈中的應(yīng)用

2. 從公鑰生成比特幣地址

生成比特幣地址包括:隨機(jī)數(shù) --> 私鑰 --> 公鑰 --> 比特幣地址
其中坡椒,從公鑰到比特幣地址的過程使用了哈希算法扰路。


公鑰到比特幣地址

3. 形成區(qū)塊鏈

區(qū)塊鏈之所以為一個鏈,就是每個區(qū)塊都包含了上一個區(qū)塊的信息倔叼。每個人只要知道一個區(qū)塊汗唱,就能容易找到上一個區(qū)塊在哪里。在指示上一個區(qū)塊鏈的時候丈攒,就運用了哈希值哩罪。

節(jié)點拿到前一個區(qū)塊數(shù)據(jù),使用哈希函數(shù)計算前一個區(qū)塊哈希值巡验,與存儲哈希值進(jìn)行校驗际插,這樣就可以檢測前一個區(qū)塊的信息完整性。這是應(yīng)用了哈希值輸入敏感的特點深碱。如果上一個區(qū)塊收到篡改腹鹉,那么節(jié)點就會發(fā)現(xiàn)哈希值有很大的不同,因此便會拒絕這個錯誤的區(qū)塊敷硅。這也讓區(qū)塊鏈上的內(nèi)容無法受到篡改功咒。

4. 生成梅克爾樹

梅克爾樹的存在是為了實現(xiàn)部分區(qū)塊數(shù)據(jù)的哈希值驗證愉阎,在得知區(qū)塊被篡改的同時,還可以知道具體是哪一個交易的信息被篡改力奋。


梅克爾樹

梅克爾樹的原理是榜旦,先對每個交易進(jìn)行哈希計算,然后對哈希值再兩兩哈希計算景殷,以此類推直到樹的的頂部梅克爾根溅呢。
梅克爾根會被放在區(qū)塊頭里。當(dāng)一個節(jié)點下載了區(qū)塊數(shù)據(jù)之后猿挚,通過二叉樹查詢可以快速發(fā)現(xiàn)出現(xiàn)問題的數(shù)據(jù)塊咐旧,將大塊的數(shù)據(jù)切分為小塊進(jìn)行,提高計算效率绩蜻。

二铣墨、對稱加密

基本概念

對稱加密中,發(fā)送方將明文和密鑰一起經(jīng)過加密處理之后發(fā)送給收信方办绝,收信方需要使用加密的密鑰和相同的算法進(jìn)行逆運算才可以進(jìn)行解密才可以恢復(fù)成明文伊约。

對稱加密

對稱加密的原理非常簡單,即使用同樣的密鑰加密和解密孕蝉,這使得對稱加密的效率高屡律,速度快。就算信息被截獲降淮,如果不知道密鑰也無法解密信息超埋。但是其安全性也相對不高,因為一旦密鑰泄露骤肛,則對稱加密會失去作用纳本。對稱加密存在兩大不足:

  1. 密鑰傳輸問題:要保證在傳輸過程中密鑰不會遭到泄露。
  2. 密鑰管理問題:為了防止過去的密鑰泄露造成將來數(shù)據(jù)的損失腋颠,以及對于不同的收信方需要提供不同的密鑰繁成,密鑰的數(shù)量成幾何指數(shù)上升。在將來淑玫,密鑰管理的成本也會不斷增加巾腕。

常用算法

有兩種常用的對稱加密算法:流加密和分組加密。流加密指將明文當(dāng)做一個序列絮蒿,利用加密算法對明文流和密鑰流加密尊搬。分組加密將明文分為多個組,每次加密一組數(shù)據(jù)直至加密完成土涝。

現(xiàn)在比較常用的是分組加密算法佛寿,包括DES, 3DES和AES等。

1. DES/3DES

DES是一種分組加密算法,全稱Data Encryption Standard冀泻,即數(shù)據(jù)加密標(biāo)準(zhǔn)常侣,由IBM公司研究并發(fā)表。典型的DES是將數(shù)據(jù)以64位進(jìn)行分組后對每組數(shù)據(jù)加密弹渔。加密和解密用的是相同的算法胳施。但現(xiàn)在較少使用,因為可以被暴力破解肢专。

DES的算法非常簡單舞肆,經(jīng)過兩次置換運算將明文置換為最終的密文。首先是密鑰加密博杖,從初始密鑰中計算出16個子密鑰椿胯;之后是明文加密,在16次加密的同時將16個子密鑰嵌入其中欧募,最終就能完成密文的運算压状。

3DES和DES使用類似的原理,不過是使用了3個密鑰跟继,增強(qiáng)了加密的強(qiáng)度。但是問題就是速度太慢镣丑。

2. AES

AES也是一種分組加密算法舔糖,全稱Advanced Encryption Standard,高級加密標(biāo)準(zhǔn)莺匠。AES用于替代DES金吗,是目前公認(rèn)比較安全的加密方式。區(qū)塊鏈中使用的對稱加密技術(shù)也是AES趣竣。

AES分為三輪加密摇庙。在初始輪中,AES先加輪密鑰遥缕,然后在普通輪中進(jìn)行字節(jié)代替卫袒、行移位、列混淆和加輪密鑰四步单匣;在最終輪中夕凝,再進(jìn)行字節(jié)代替,行移位和加輪密鑰户秤。相比DES而言AES使用了更加復(fù)雜的運算方法码秉,在這里我們就不展開討論。

有一個很可愛的AES小漫畫《A Stick Figure Guide to the Advanced Encryption Standard(AES)》鸡号,請看這里

三转砖、非對稱加密

基本概念

非對稱加密技術(shù)可以說是區(qū)塊鏈中的核心加密技術(shù),是區(qū)塊鏈構(gòu)造“共識機(jī)制”的重要一環(huán)鲸伴。

非對稱加密的核心在于有兩個密鑰——公鑰(Public Key)和私鑰(Private Key)府蔗。每一對公鑰和私鑰都是一一對應(yīng)的莉兰。這個公鑰加密的信息只有對應(yīng)私鑰可以解密,這個私鑰也只能解密對應(yīng)公鑰所加密的信息礁竞,其他的就不可以糖荒。

《RSA加密原理:非對稱加密鼻祖》這篇文章中有個形象的比喻:
我們用顏色為比喻進(jìn)行說明,Bob是如何發(fā)給Alice一個特定的顏色模捂,而不讓監(jiān)聽者截獲信息的捶朵。
每種顏色都具有互補色,同互補色疊加會得到白光狂男,這能去掉第一種顏色的作用综看,這里我們假設(shè),混合顏色是一個單向函數(shù)岖食,混合顏色輸出第三種顏色很容易红碑,但反向過程就難了,Alice首先生成自己的私有密鑰泡垃,也就是可以隨便選擇一個顏色析珊,比如紅色,下面蔑穴,假設(shè)Alice有一種神秘的顏色機(jī)器忠寻,能夠找到這種紅色的互補色,沒有其他人能夠知道這個存和,這得到藍(lán)綠色奕剃,他將這發(fā)給Bob作為公開密鑰,假設(shè)Bob想發(fā)送一種神秘的黃色給Alice捐腿。


他將黃色同公開顏色混合然后得到的混合色發(fā)給Alice纵朋,此時,Alice能夠?qū)⒆约旱乃接猩B加到Bob的混合色茄袖,這將解除公開色的作用操软,剩下Bob的秘密顏色,而竊聽者無法簡單破譯Bob的黃色绞佩,除非他有Alice的紅色寺鸥。

Alice需要有私鑰“紅色”,才能解開公鑰“藍(lán)綠色”品山,看到Bob真正發(fā)來的顏色胆建。這種思想就是非對稱加密的思想。

常用算法

RSA

當(dāng)代密碼學(xué)起源于1977年肘交,Ron Rivest笆载,Adi Shamir和Leonard Adleman發(fā)明了非對稱式加密(又稱公開密鑰加密)算法RSA。
RSA的加密過程如下:



其中E和N的組合(E,N)就是公鑰。
RSA解密過程如下:


其中D和N的組合(D,N)就是私鑰凉驻。
密鑰對(E, D, N)的計算涉及一下幾個步驟:



可以說腻要,乍一看RSA非常簡單,但是其背后蘊含的數(shù)論原理涝登,又讓這個簡單的算法難以被破解雄家。

四、數(shù)字簽名

數(shù)字簽名其實不算是一個新的密碼學(xué)技術(shù)胀滚,而是前面提及的哈希算法趟济、對稱加密和非對稱加密的應(yīng)用。

有人寫了一篇文章《What is a Digital Signature?》來講解什么是數(shù)字簽名咽笼,我覺得已經(jīng)足夠有趣和通俗顷编。想要看中文版的同學(xué)可以移步這里

參考

區(qū)塊鏈技術(shù)指南
玩轉(zhuǎn)瑞士軍刀——哈希算法在區(qū)塊鏈中的應(yīng)用
數(shù)據(jù)加密算法--詳解DES算法原理與實現(xiàn)
AES 加密算法的原理詳解
帶你徹底理解RSA算法原理

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市剑刑,隨后出現(xiàn)的幾起案子媳纬,更是在濱河造成了極大的恐慌,老刑警劉巖施掏,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钮惠,死亡現(xiàn)場離奇詭異,居然都是意外死亡其监,警方通過查閱死者的電腦和手機(jī)萌腿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抖苦,“玉大人,你說我怎么就攤上這事米死⌒坷” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵峦筒,是天一觀的道長究西。 經(jīng)常有香客問我,道長物喷,這世上最難降的妖魔是什么卤材? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮峦失,結(jié)果婚禮上扇丛,老公的妹妹穿的比我還像新娘。我一直安慰自己尉辑,他們只是感情好帆精,可當(dāng)我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般卓练。 火紅的嫁衣襯著肌膚如雪隘蝎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天襟企,我揣著相機(jī)與錄音嘱么,去河邊找鬼。 笑死顽悼,一個胖子當(dāng)著我的面吹牛曼振,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播表蝙,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼拴测,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了府蛇?” 一聲冷哼從身側(cè)響起集索,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎汇跨,沒想到半個月后务荆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡穷遂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年函匕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚪黑。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡盅惜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出忌穿,到底是詐尸還是另有隱情抒寂,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布掠剑,位于F島的核電站屈芜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏朴译。R本人自食惡果不足惜井佑,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望眠寿。 院中可真熱鬧躬翁,春花似錦、人聲如沸澜公。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至迹辐,卻和暖如春蝶防,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背明吩。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工间学, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人印荔。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓低葫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容