
上一篇介紹了消息傳遞存在的問題:機密性、完整性、認證、不可否認性。本篇介紹解決這些問題的方案,我們形象的把它們統(tǒng)稱為 密碼工具箱,工具箱里的 工具 列舉如下:
-
對稱加密: 解決機密性的工具; -
公鑰加密(也叫非對稱加密): 解決機密性的工具; -
單向散列函數(shù):解決完整性的工具
(接上文:遨游密碼世界(一))
二、密碼學(xué)工具箱
1. 對稱加密
1)異或運算

最強大腦有個 層疊消融 的項目,本質(zhì)上就是屬于密碼學(xué)中的對稱加密。
層疊消融 把兩個圖形重疊在一起,相同的部分會消失,不同的部分會顯示。如果這么說不太理解的話,可以看下面的 異或 運算,和 加減 運算一樣簡單。
0 XOR 0 = 0;
0 XOR 1 = 1;
1 XOR 0 = 1;
1 XOR 1 = 0;
XOR 和 +、- 都是數(shù)學(xué)里面的運算符號,叫做 異或運算符。它的規(guī)則是相同的數(shù)字做運算之后結(jié)果為 0,不同的數(shù)字做異或運算之后結(jié)果為 1。這里即可看出 層疊消融 的本質(zhì)即異或運算。
2)對稱加密的核心就是異或運算
隨機生成兩個相同位數(shù)的數(shù)字 01001100 和 10101010,對第一個數(shù)字記做 A,第二個數(shù)字記做 B,對它兩進行異或運算。
0 1 0 0 1 1 0 0 // A
1 0 1 0 1 0 1 0 // B
1 1 1 0 0 1 1 0 // 結(jié)果
將結(jié)果 11100110 在與 B 做一次異或運算。
1 1 1 0 0 1 1 0 // 結(jié)果
1 0 1 0 1 0 1 0 // B
0 1 0 0 1 1 0 0 // 第二次的結(jié)果 === A
第一次對 A 和 B 做 異或運算 可以看成是 加密行為。
// 加密過程
0 1 0 0 1 1 0 0 // A:消息
1 0 1 0 1 0 1 0 // B:密鑰
1 1 1 0 0 1 1 0 // 結(jié)果:密文,加密之后看不懂的東東
第二次對第一次運算的結(jié)果再與 B 做 異或運算 可以看成是 解密行為 。
// 解密行為
1 1 1 0 0 1 1 0 // 結(jié)果:密文
1 0 1 0 1 0 1 0 // B:密鑰
0 1 0 0 1 1 0 0 // A:密文通過密鑰處理之后又得到密文 A
電腦里的視頻,圖片,文本文件等如果要做加密,都是先轉(zhuǎn)化為計算機識別的二進制數(shù)據(jù),也就是 0 和 1 組成的數(shù)據(jù),然后再做異或運算。

這個過程 B(密鑰) 及其重要,加密時候使用它進行加密,解密也要使用它進行解密,如果你的密鑰泄露了,那么別人就可以輕而易舉的破解你的加密信息。
3)當前使用的對稱加密算法
異或運算只是對稱加密的最底層,實際使用的對稱加密算法都是在這基礎(chǔ)上發(fā)展的,并且要復(fù)雜的多,這里介紹這個是為了以后吹逼的時候增加光環(huán)屬性。
前面介紹了異或運算加/解密消息,那么加密算法如何理解呢。比如有個算法對消息進行 16 次異或操作,這是一種算法,另一個將消息拆分兩半,只對其中一半進行加密,這又是一種加密算法。
個人總結(jié):加密算法就是加密的具體行為。比如上面使用異或運算加密中,異或加密這個行為就是個算法。對于消息加密,只有同時知道 加密算法 和 密鑰 這兩個東東才能正確得到明文。
DES 對稱加密算法
DES 加密算法是 1977 年美聯(lián)邦使用的標準,在那個年代被政府和銀行廣泛使用。
老外整出了加密算法之后,為了驗證加密算法的安全性,會定期舉辦個密碼比賽邀請全世界的密碼學(xué)大師來破譯加密算法。在 1999 年舉辦的 DES challenge 第三次比賽中被人用了 22 個小時就給破譯了(在 1997 年舉辦的 DES challenge 第一次比賽就被人用 96 天給破譯了),自此之后安全性存在嚴重問題,新的加密算法應(yīng)運而生。
三重 DES 對稱加密算法
由于 DES 存在安全性問題,不久 三重 DES 加密算法 就誕生了,在 DES 基礎(chǔ)上做細微修改,并且重復(fù)三次 DES 加密,所以叫 三重。
當然,DES 底層做了 16 次異或運算,三重 DES 也就做了 48 次異或運算(不僅僅做異或運算,還有其它行為),運算次數(shù)變得更復(fù)雜,導(dǎo)致加/解密速度并不高。有了不爽的東西人們就會尋求替代品。
AES 對稱加密算法
1997 年的時候,米國標準化機構(gòu) NIST 對外海選新的加密算法,以求替代 DES 帶來的尷尬境遇。并提前指定了新的密碼算法的名稱就叫做 AES。
直到 2000 年,在世界各地的密碼學(xué)專家競爭中,最終篩選出 15 個最終可能選擇的加密算法;這 15 個加密算法經(jīng)過又一輪的生死搏殺,最終比利時密碼學(xué)家?guī)淼募用芩惴?Rijndael 成為 AES 的最終選擇。
最在用的最多的對稱加密算法還是 AES,當然沒有絕對安全的算法,被破解也是時間問題,只不過這個時間來的會比較晚一點。
4)對稱密碼實際應(yīng)用中的缺陷

你將用對稱密碼加密后的紙條扔給你的同事,他需要知道密鑰才能解密出明文,由于你們都在一個辦公室里,可以很方便的告訴他密鑰是什么(這里舉例好傻,都能告訴他密鑰是啥了,怎么不直接告訴他明文信息,只是舉例而已~~)。
如果你在上海,你的好朋友在北京,你用對稱加密給他寫了封信,你的好朋友需要密鑰,你只好將密鑰與信件一起塞進信封寄給好朋友。這樣又顯得很傻,信件被任何人拿到都可以通過密鑰得到明文,加密失去意義。

最初看到這個場景的時候,我沒忍住破口大罵,花了十分鐘讀到這里原來是個自相矛盾的東東,純屬浪費時間。對稱加密的密鑰傳遞是個老大難的問題,但可以通過其它技術(shù)彌補。
2. 公鑰加密(也叫非對稱加密)
(未完待續(xù),簡書不能設(shè)置文章順序,關(guān)于密碼工具箱其它工具還需查閱資料完善,這里先發(fā)布文章占個位置,避免后續(xù)文章切斷了遨游密碼世界兩篇文章的連續(xù)性)