天天看點

計算機基礎(07)密碼學基礎

今天的我們隻要接觸密碼學相關的資訊,那一定是經常會聽說各種密鑰啊,之類的,但這個東西到底是怎麼發展來的呢?這裡我們從密碼學的發展、古典密碼學和現代密碼學等角度搞清楚密碼學到底是怎麼發展的,以及為什麼後面出現了密鑰這種東東。

1 密碼學的曆史

密碼學的曆史主要分為兩大部分:古典密碼學和現代密碼學。其中 古典密碼學依賴于算法,現代密碼學依賴于密鑰。在現代密碼學中密碼的理論算法需要公開,以便與更好的維護和找到漏洞。

1.1 古典密碼學簡介

密碼算法本身要保密,要很安全,最開始的加密算法主要是:字母替換和順序置換。

1.1.1 第1個古典加密算法:凱撒密碼

凱撒密碼,容易被窮舉攻擊,屬于單表替換。凱撒密碼是通過排列明文和密文字母表,密文字母表示通過将明文字母表向左/右移動一個偏移量的位置。例如,當密文的偏移量是左移3時(解密時的密鑰就是3):

  • 明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ
  • 密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC

使用時,加密者查找明文字母表中需要加密的消息中的每一個字母所在位置,并且寫下密文字母表中對應的字母。需要解密的人則根據事先已知的密文字母表反過來操作,得到原來的明文。例如:

  • 明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG ;
  • 密文:WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ。

1.1.2 第2個古典加密算法:單字母替換

單字母替換,無法被窮舉法攻擊,但是可以通過英文日常出現機率,即統計學和機率論的方式去大幅度降低算力,屬于單表替換。單字母替換密碼加密時,将每個明文字母替換為與之唯一對應且不同的字母。它與凱撒密碼之間的差別是其密碼字母表的字母不是簡單的移位,而是完全是混亂的,這也使得其破解難度要高于凱撒密碼。 比如,它的映射關系可以為:

  • 明文字母表:abcdefghijklmnopqrstuvwxyz
  • 密文字母表:phqgiumeaylnofdxjkrcvstzwb

使用時,加密者查找明文字母表中需要加密的消息中的每一個字母所在位置,并且寫下密文字母表中對應的字母。需要解密的人則根據事先已知的密文字母表反過來操作,得到原來的明文。例如:

  • 明文:the quick brown fox jumps over the lazy dog
  • 密文:cei jvaql hkdtf udz yvoxr dsik cei npbw gdm

1.1.3 第3個古典加密算法:維吉尼亞算法

維吉尼亞算法,引入了密鑰的概念。屬于多表代換密碼體制。它解決了從機率分布上被破解的可能性,而破解方式是使用kasiski測試法+重合指數法,相較于前兩者難度大了很多。該加密方法不需要明文和密文字母表。在使用時 加密者直接用密鑰進行加密,而解密者必須要有密鑰,加上一張映射表才可以,這裡的映射關系比較簡單,比如密鑰中A表示偏移是0,B表示偏移為1,以此類推。如下所示:

  • 密鑰:ABCDAB CD ABCDA BCD ABCDABCDABCD
  • 明文:CRYPTO IS SHORT FOR CRYPTOGRAPHY
  • 密文:CSASTP KV SIQUT GQU CSASTPIUAQJB

這裡使用ABCD為密鑰,不斷重複。可以看出從前往後,雖然明文都是R,但是密文可能是S、U、并不是一一映射的關系了。

1.2 現代密碼學

1.2.1 現代密碼學基礎知識

@1 現代密碼學設計的核心法則

Kerckhoff原則:密碼系統的安全性不依賴于加密體制和算法的保密,而是依賴于密鑰的安全性。那現代密碼學為什麼這麼設計呢?因為保護一個密鑰比保護一個算法更容易,安全性如果依賴于算法,那麼算法一旦被攻破,就徹底不安全了;反之,安全性依賴于密鑰,被攻破了我換個密鑰就可以了。即更換密鑰比更換密碼更加容易。

@2 現代密碼學的設計要求

現代密碼學更傾向于密碼算法設計方案是公開的,而密鑰匙需要保密的。現代密碼學的設計要求不同于古典密碼學,會嚴格很多,有:

  • 要有嚴格而明确的安全定義
  • 算法安全性依靠盡可能少的數學假設
  • 附有嚴格的安全性證明

@3 無條件安全 和 安全目标

無條件安全:即使攻擊者具有無限的計算資源,也無法攻破的密碼體制,我們稱這種密碼體制是無條安全的。攻擊者能拿到所有可能的明文和密文對,在這種情況下,給定攻擊者一個密文,依舊無法破解對應的明文是什麼,稱為無條件安全。理論上講,一次一密的密碼體制是不可破譯的。但在實際應用中考慮到加密算法的密鑰傳輸代價,又是不實用的。是以實際上不存在不可破譯的密碼。

安全目标:無條件安全

@4 敵手模型的四種基本攻擊:

  • 唯密文攻擊:拿到若幹個密文,可以恢複出明文和密鑰,屬于最弱攻擊。
  • 已知明文攻擊:拿到随機的一些明文和密文對,恢複出其他的明文和密文,屬于較弱攻擊。
  • 選擇明文攻擊:拿到可選擇的一些明文和密文對,恢複出其他的明文和密文,目前現代密碼學 安全定位,抵禦攻擊。屬于較強攻擊。
  • 選擇密文攻擊:拿到密文可以獲得對應的明文,拿到明文可以獲得對應的密文,恢複出其他密文的明文和密鑰,屬于最強攻擊。

1.2.2 加密算法

@1 加密算法定義:

  • 密鑰生成子算法:安全參數N,Out:滿足特定分布的密鑰K,Gen
  • 加密子算法:密鑰K 明文M,Out:密文C,類似編碼。C = enc(K,M);
  • 解密子算法:密鑰K 密文C,Out:明文M,類似解碼。M = dec(K,C);

@2 加密算法的安全目标:

  • 不能獲得密鑰,因為拿到密鑰就可以拿到所有的明文,最易
  • 不能獲得明文,較易
  • 不能獲得明文的任何部分資訊,較難
  • 不能獲得明文的任何函數,最難

@3 加密算法的安全性 2個次元:

  • 能抵抗的攻擊
  • 達到的安全目标

2 對稱加密 & 非對稱加密 & 混合加密

2.1 對稱加密

對稱加密:發送端和接受端使用相同的密鑰K,發送和接受消息時使用密鑰加密後發送和接收。

計算機基礎(07)密碼學基礎

對稱加密的優點是:加密解密速度快;缺點是:會出現密鑰配置設定問題(發送端密鑰怎麼才能安全的傳輸到接收端手裡不被其他人擷取到?直接發送密鑰會被其他人竊取,隻有用密鑰加密後的資訊才能安全傳輸,但是隻有保證安全傳輸的前提下才能發送這個密鑰)。密鑰不容易被保管,也不便于安全管理。

常見的對稱加密算法有DES、3DES、Blowfish、IDEA、AES等。。。

2.2 非對稱加密

非對稱加密:雙方使用不同的密鑰來加解密,并且不能通過一個密鑰推算出另一個密鑰。發送端和接受端使用不同的密鑰K(Pubilc Key 公鑰是所有人都可以通路的,Private Key 私鑰是隻有自己持有的)。當自己是發送端時,私鑰加密,接收方公鑰解密;當自己是接收端時,私鑰解密,發送端公鑰加密。

計算機基礎(07)密碼學基礎

非對稱加密優點是:不會出現密鑰配置設定問題;缺點:加解密速度慢,且有被中間人竊聽和攻擊。

常見的非對稱加密算法有:RSA、Diffie-Hellman、DSA等。。。

2.3 混合加密

混合加密:兩種方式的整合,因為 傳遞大量資料時 對稱加密的解析速度會更快,是以對于資料的解析使用 對稱加密,但對稱加密的密鑰使用非對稱加密傳遞以確定其安全性。本質上就是使用 非對稱加密傳遞密鑰,使用對稱加密傳遞資料。

計算機基礎(07)密碼學基礎

混合加密優點:加解密速度快,不會出現密鑰配置設定問題;缺點:仍有被中間人竊聽和攻擊。

2.4 中間人攻擊解讀

到現在為止 中間人攻擊 無論是對稱加密/非對稱加密/混合加密 都可以竊聽和攻擊,那這是為什麼呢?接下來我們用一張圖詳細解讀下中間人攻擊的原理。

計算機基礎(07)密碼學基礎

 該圖以對稱加密為例來進行說明:

  • 1-1 A給B發送密鑰1,此時被C截獲。
  • 1-2 C拿到密鑰後将密鑰1替換成密鑰2并發送給B。
  • 1-3 B收到C發送的密鑰并儲存到本地。
  • 2-1 A發送資料給B,被C截獲并用密鑰1解密出來,用密鑰2加密并發給B。
  • 2-2 此時B接收到C發送來的資料并解密拿到資料,以為萬無一失,但通信已被監聽。

如果是非對稱加密,因為本質上是密鑰可被截獲,是以依然不能幸免,流程如下所示:

計算機基礎(07)密碼學基礎

該圖以非對稱加密為例來進行說明:  

  • 1-1 A向B請求B的公鑰,被C截獲。
  • 1-2 C向B請求B的公鑰。
  • 1-3 B收到C發送的請求并将B的公鑰給到C。
  • 1-4 C将本該發給A的B的公鑰替換為C的公鑰。
  • 1-5 C将C的公鑰發送給A,A以為是B的公鑰。
  • 2-1 A發送資料給B,被C截獲并用C的私鑰解密出來,用B的公鑰加密并發給B。
  • 2-2 B收到C的資料并用B的私鑰解密拿到資料,以為萬無一失,但通信已被監聽。

至于混合加密,因為就是使用非對稱加密 傳遞 對稱加密的密鑰K,是以隻要能拿到密鑰K那麼就能進行中間人竊聽和攻擊,即隻要能夠截獲非對稱加密即可,是以也不安全。

3 資訊摘要 和 數字簽名

消息摘要算法主要用于生成資料的"指紋",具有不可逆性。也被稱為哈希/雜湊演算法。消息摘要算法的主要特征是加密過程不需要密鑰,且加密過程不可逆。常見摘要算法有MD5和SHA-1等。

  • 一緻性驗證:從網絡上下載下傳檔案時,有的檔案為防止篡改,會通過MD5生成一串字元串。下載下傳後 可以在本地執行MD5再生成一個字元串來對比,确認檔案的一緻性。
  • 安全通路驗證:在網站中,注冊時送出的密碼經過Hash計算後存入網站的資料庫。驗證時送出的密碼同樣要進行Hash計算進而和網站資料庫中存儲的Hash進行對比,這樣的設計就可以避免使用者的密碼被具有系統管理者權限的使用者知道以此保護敏感資訊。而且即使網站的資料庫被竊取,也隻能拿到Hash簽名,拿不到使用者的真正密碼。
  • 數字簽名:隻有資訊發送者産生但其他人無法僞造的一段數字串,這段數字串類似于寫在紙上的實體簽名,用于鑒别數字資訊的真僞,同時也是對資訊的發送者身份真實性的一個有效證明。數字簽名是公鑰加密技術與消息摘要技術的結合應用。

繼續閱讀