基本的加密把明文變成密文、把密文變回明文,除了安全性之外沒有其他要求。但許多應用需要的不只如此——或是額外的安全特性,或是額外的功能。

這就是密碼學家為對稱與非對稱加密創造出各種變體的原因。其中有些已被充分理解、效率良好且廣泛部署;另一些則仍屬實驗性質、幾乎沒被使用、效能也不佳。

鑑別式加密(AE)#

鑑別式加密(AE,authenticated encryption)是一種對稱加密,除了密文之外還會回傳一個鑑別標籤(authentication tag):

AE(K, P) = (C, T)

其中標籤 T 是一段短字串,在不知道金鑰的情況下不可能猜中。

圖 1-4:鑑別式加密

解密時接收 KCT,只有在驗證 T 確實是該明文—密文對的有效標籤時,才回傳明文 P;否則中止並回傳錯誤。

標籤的作用是:

  • 確保訊息的完整性(integrity)。
  • 作為「收到的密文與知道金鑰 K 的合法方一開始送出的密文完全相同」的證據。
  • K 只與另一方共享時,標籤也保證訊息是由該方送出的——也就是隱含地鑑別了預期的寄件者確實是訊息的建立者。

這裡用「建立者」而非「寄件者」是有原因的:竊聽者可以錄下 A 送給 B 的某些 (C, T) 對,稍後再重送給 B,假冒成 A。

這稱為重放攻擊(replay attack)。防範方式之一是在訊息中加入計數器編號:每當一則訊息被解密,其計數器 i 就加一。如此便能檢查某則訊息是否被送了兩次,藉此偵測攻擊者的重放企圖;這同時也讓遺失的訊息可被偵測到。

AEAD#

帶關聯資料的鑑別式加密(AEAD,authenticated encryption with associated data)是 AE 的延伸,它額外接收一段未加密的明碼資料,並用它來產生鑑別標籤:

AEAD(K, P, A) = (C, T)

AEAD 的典型應用是保護協定的資料包(datagram),其中標頭是明碼、載荷(payload)是加密的。這種情況下至少有部分標頭資料必須保持明碼——例如目的位址必須明碼,網路封包才能被路由。

保留格式加密(FPE)#

基本的密碼吃位元、吐位元,它不在意這些位元代表的是文字、影像還是 PDF 文件。密文接著可以編碼成原始位元組、十六進位字元、base64 或其他格式。

但如果你需要密文與明文具有相同的格式呢?某些資料庫系統只能記錄特定格式的資料,這時就有此需求。

保留格式加密(FPE,format-preserving encryption)解決了這個問題:它能產生與明文格式相同的密文。例如 FPE 可以把 IP 位址加密成 IP 位址(如 127.0.0.1 加密成 212.91.12.2)、把郵遞區號加密成郵遞區號、把信用卡號加密成帶有有效檢查碼的信用卡號。

圖 1-5:IP 位址的保留格式加密

全同態加密(FHE)#

全同態加密(FHE,fully homomorphic encryption)是密碼學家心中的聖杯:它讓使用者可以把密文 C = E(K, P) 替換成另一個密文 C′ = E(K, F(P)),其中 F(P) 可以是 P 的任意函式,而且完全不需要解開原始密文 C

例如 P 可以是一份文字文件,F 可以是修改其中部分文字。你可以想像一個雲端應用儲存你的加密資料,但雲端供應商既不知道資料是什麼,也不知道你改動資料時做了哪種修改。

但另一面是:這種加密極慢——慢到連最基本的操作都要花上無法接受的時間。

第一個 FHE 方案在 2009 年提出,此後陸續出現更有效率的變體,但 FHE 是否能快到堪用,至今仍不明朗。

可搜尋加密#

可搜尋加密(searchable encryption)讓你能在加密的資料庫上搜尋,而不洩漏搜尋詞——做法是把搜尋查詢本身也加密。

與全同態加密一樣,可搜尋加密有潛力藉由對雲端供應商隱藏你的搜尋內容,來強化眾多雲端應用的隱私。

有些商業方案宣稱提供可搜尋加密,但它們多半是以標準密碼學搭配一些技巧來達成部分可搜尋性。在本書寫作時,可搜尋加密在研究社群中仍屬實驗階段。

可調整加密(TE)#

可調整加密(TE,tweakable encryption)與基本加密相似,差別在於多了一個稱為 tweak(調整值)的參數,目的是模擬出同一個密碼的不同版本:

TE(K, P, T) = C

圖 1-6:可調整加密

tweak 可以是每個客戶專屬的唯一值,以確保某客戶的密碼不會被使用同一產品的其他方複製。不過 TE 的主要應用是磁碟加密。TE 也不侷限於單一應用,它是一種較底層的加密型態,可用來建構其他方案,例如鑑別式加密模式。

為什麼磁碟加密需要 TE#

在磁碟加密中,TE 用來加密硬碟或固態硬碟等儲存裝置的內容。

這裡不能使用隨機化加密,因為它會增加資料的大小,而這對儲存媒體上的檔案是無法接受的。

為了讓加密不可預測,TE 改用一個依賴於被加密資料所在位置的 tweak 值——通常是磁區編號或區塊索引。