加密(encryption)是密碼學最主要的應用:它讓資料變得無法理解,以確保其機密性(confidentiality)。加密使用一個稱為密碼(cipher)的演算法,以及一個稱為金鑰(key)的秘密值。若不知道金鑰,就無法解密,也無法從加密過的訊息學到任何一個位元的資訊——任何攻擊者亦然。

明文、密文與兩個函式#

  • 明文(plaintext):未加密的訊息。
  • 密文(ciphertext):加密後的訊息。
  • 加密(encryption):把明文轉成密文。
  • 解密(decryption):把密文轉回明文。

因此一個密碼是由兩個函式組成的。習慣上我們把密碼 E 想成一個盒子,輸入明文 P 與金鑰 K,輸出密文 C

C = E(K, P)      加密
P = D(K, C)      解密

圖 1-1:基本的加密與解密

實務上我們常說「密碼」(cipher),但指的往往是「加密」(encryption)——這兩個詞在口語中經常混用。

密文的長度#

對某些密碼而言,密文與明文等長;對另一些密碼,密文會稍長一些。

密文永遠不可能比明文更短。

對稱與非對稱#

本章聚焦於對稱加密(symmetric encryption),也就是最簡單的一種加密:解密用的金鑰與加密用的金鑰相同。

相對地,非對稱加密(asymmetric encryption)或稱公鑰加密(public-key encryption),解密的金鑰與加密的金鑰不同。

接下來的路線是:先從最弱的對稱加密形式——只擋得住最不識字的攻擊者的古典密碼——開始,一路走到永遠安全的最強形式。