簡介
區(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)致哈希值的較大變化。
- 沖突避免: 很難找到兩個明文會得到同樣的哈希值赌髓。
原理
從概念可知一個哈希算法需要有兩大要素:
- 用于映射的函數(shù)H
- 用于處理沖突的方法
哈希函數(shù)和哈希表
假設(shè)我們想要存儲很多個元素从藤,并且希望以后能夠快速查找某個想要的元素的位置催跪。怎么辦呢?
最基本的思路夷野,就是我們隨便存儲這些元素懊蒸,然后在查找時從頭到尾遍歷查找即可。這樣的方式簡單悯搔,但是十分費時費力骑丸,我們想要有更快的速度,哪怕犧牲一點存儲空間也可以接受妒貌。
而哈希函數(shù)和哈希表可以加快查找的速度通危。
哈希函數(shù)是一個映射關(guān)系H
, 可以將元素和一個唯一的存儲位置相對應(yīng)灌曙。在存儲一個元素k
時菊碟,就把k
存放在H(k)
的位置上。查找時同理在刺,只要將元素放進(jìn)映射關(guān)系中運算逆害,就可以查找到元素字的位置。
幾種構(gòu)造函數(shù)的方法:
- 直接定址法
- 數(shù)字分析法
- 平方取中法
- 折疊法
- 隨機(jī)數(shù)法
- 除留余數(shù)法
通過哈希函數(shù)映射元素得到的表就是哈希表增炭,又稱散列表忍燥。之所以成為散列表,是因為在表中隙姿,數(shù)據(jù)不是緊密排列的梅垄。因為通過函數(shù)映射得到的值不一定是連續(xù)值。
沖突處理
但哈希函數(shù)可能引起的問題就是沖突输玷。哈希函數(shù)一個特點就是隨機(jī)队丝,它盡量模擬隨即平均分布的結(jié)果來為每個元素安排地址,但這樣的結(jié)果可能造成沖突欲鹏,也就是兩個元素得到的地址相同(又稱“同義詞”)机久。所以,如何解決沖突赔嚎,就是哈希算法中的一個重要的設(shè)計膘盖。
常用的沖突處理方法:
- 開放定址法
- 再哈希法
- 鏈地址法
- 公共溢出區(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ù)成明文伊约。
對稱加密的原理非常簡單,即使用同樣的密鑰加密和解密孕蝉,這使得對稱加密的效率高屡律,速度快。就算信息被截獲降淮,如果不知道密鑰也無法解密信息超埋。但是其安全性也相對不高,因為一旦密鑰泄露骤肛,則對稱加密會失去作用纳本。對稱加密存在兩大不足:
- 密鑰傳輸問題:要保證在傳輸過程中密鑰不會遭到泄露。
- 密鑰管理問題:為了防止過去的密鑰泄露造成將來數(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算法原理