上一篇介紹了消息傳遞存在的問題:機密性
、完整性
、認證
、不能否認性
。本篇介紹解決這些問題的方案,咱們形象的把它們統稱爲 密碼工具箱
,工具箱裏的 工具
列舉以下:算法
對稱加密
: 解決 機密性
的工具;公鑰加密(也叫非對稱加密)
: 解決 機密性
的工具;單向散列函數
:解決 完整性
的工具(接上文:遨遊密碼世界(一))安全
最強大腦有個 層疊消融
的項目,本質上就是屬於密碼學中的對稱加密。函數
層疊消融
把兩個圖形重疊在一塊兒,相同的部分會消失,不一樣的部分會顯示。若是這麼說不太理解的話,能夠看下面的 異或
運算,和 加減
運算同樣簡單。工具
0 XOR 0 = 0; 0 XOR 1 = 1; 1 XOR 0 = 1; 1 XOR 1 = 0;
XOR
和 +
、-
都是數學裏面的運算符號,叫作 異或運算符
。它的規則是相同的數字作運算以後結果爲 0,不一樣的數字作異或運算以後結果爲 1。這裏便可看出 層疊消融
的本質即異或運算。加密
隨機生成兩個相同位數的數字 01001100 和 10101010,對第一個數字記作 A,第二個數字記作 B,對它兩進行異或運算。code
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 // 結果
將結果 11100110 在與 B 作一次異或運算。視頻
1 1 1 0 0 1 1 0 // 結果 1 0 1 0 1 0 1 0 // B 0 1 0 0 1 1 0 0 // 第二次的結果 === 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 // 結果:密文,加密以後看不懂的東東
第二次對第一次運算的結果再與 B 作 異或運算 能夠當作是 解密行爲 。get
// 解密行爲 1 1 1 0 0 1 1 0 // 結果:密文 1 0 1 0 1 0 1 0 // B:密鑰 0 1 0 0 1 1 0 0 // A:密文經過密鑰處理以後又獲得密文 A
電腦裏的視頻,圖片,文本文件等若是要作加密,都是先轉化爲計算機識別的二進制數據,也就是 0 和 1 組成的數據,而後再作異或運算。數學
這個過程 B(密鑰) 及其重要,加密時候使用它進行加密,解密也要使用它進行解密,若是你的密鑰泄露了,那麼別人就能夠垂手可得的破解你的加密信息。
異或運算只是對稱加密的最底層,實際使用的對稱加密算法都是在這基礎上發展的,而且要複雜的多,這裏介紹這個是爲了之後吹逼的時候增長光環屬性。
前面介紹了異或運算加/解密消息,那麼加密算法如何理解呢。好比有個算法對消息進行 16 次異或操做,這是一種算法,另外一個將消息拆分兩半,只對其中一半進行加密,這又是一種加密算法。
**我的總結:**加密算法就是加密的具體行爲。好比上面使用異或運算加密中,異或加密這個行爲就是個算法。對於消息加密,只有同時知道 加密算法 和 密鑰 這兩個東東才能正確獲得明文。
DES 對稱加密算法
DES 加密算法是 1977 年美聯邦使用的標準,在那個年代被政府和銀行普遍使用。
老外整出了加密算法以後,爲了驗證加密算法的安全性,會按期舉辦個密碼比賽邀請全世界的密碼學大師來破譯加密算法。在 1999 年舉辦的 DES challenge 第三次比賽中被人用了 22 個小時就給破譯了(在 1997 年舉辦的 DES challenge 第一次比賽就被人用 96 天給破譯了),自此以後安全性存在嚴重問題,新的加密算法應運而生。
三重 DES 對稱加密算法
因爲 DES
存在安全性問題,不久 三重 DES 加密算法
就誕生了,在 DES
基礎上作細微修改,而且重複三次 DES
加密,因此叫 三重
。
固然,DES 底層作了 16 次異或運算,三重 DES 也就作了 48 次異或運算(不只僅作異或運算,還有其它行爲),運算次數變得更復雜,致使加/解密速度並不高。有了不爽的東西人們就會尋求替代品。
AES 對稱加密算法
1997 年的時候,米國標準化機構 NIST 對外海選新的加密算法,以求替代 DES
帶來的尷尬境遇。並提早指定了新的密碼算法的名稱就叫作 AES
。
直到 2000 年,在世界各地的密碼學專家競爭中,最終篩選出 15 個最終可能選擇的加密算法;這 15 個加密算法通過又一輪的生死搏殺,最終比利時密碼學家帶來的加密算法 Rijndael
成爲 AES
的最終選擇。
最在用的最多的對稱加密算法仍是 AES
,固然沒有絕對安全的算法,被破解也是時間問題,只不過這個時間來的會比較晚一點。
你將用對稱密碼加密後的紙條扔給你的同事,他須要知道密鑰才能解密出明文,因爲大家都在一個辦公室裏,能夠很方便的告訴他密鑰是什麼(這裏舉例好傻,都能告訴他密鑰是啥了,怎麼不直接告訴他明文信息,只是舉例而已~~)。
若是你在上海,你的好朋友在北京,你用對稱加密給他寫了封信,你的好朋友須要密鑰,你只好將密鑰與信件一塊兒塞進信封寄給好朋友。這樣又顯得很傻,信件被任何人拿到均可以經過密鑰獲得明文,加密失去意義。
最初看到這個場景的時候,我沒忍住破口大罵,花了十分鐘讀到這裏原來是個自相矛盾的東東,純屬浪費時間。對稱加密的密鑰傳遞是個老大難的問題,但能夠經過其它技術彌補。
(未完待續,簡書不能設置文章順序,關於密碼工具箱其它工具還需查閱資料完善,這裏先發布文章佔個位置,避免後續文章切斷了遨遊密碼世界兩篇文章的連續性)