最優非對稱加密填充檢視原始碼討論檢視歷史
在密碼學中,最優非對稱加密填充(英語:Optimal Asymmetric Encryption Padding,縮寫:OAEP)是一種經常與RSA加密一起使用的填充方案。OAEP 由 Mihir Bellare 和 Phillip Rogaway 發明,隨後在 PKCS#1 v2 和 RFC 2437中得到標準化。
OAEP 算法是費斯妥密碼的一種形式,它使用一對隨機預言 G 和 H 在進行非對稱加密之前處理明文。OAEP 與任何安全的陷門單向置換 <math>f</math> 結合使用在隨機預言模型中被證明是一種在選擇明文攻擊(IND-CPA)下語義安全的組合方案。當使用某些陷門置換(如 RSA)實現時,OAEP 也被證明可以抵抗選擇密文攻擊。OAEP 可用於構建全有或全無轉換(all-or-nothing transform)。
OAEP 滿足以下兩個目標:
- 添加隨機性元素,這可用於將確定性加密[1] 方案(如傳統 RSA)轉變為概率加密方案。
- 通過確保無法反轉陷門單向置換 <math>f</math>,從而無法恢復明文的任何部分,來防止密文的部分解密(或造成其他信息泄漏)。
當 OAEP 與任何陷門置換一起使用時,OAEP 的原始版本(Bellare/Rogaway, 1994)在隨機預言機模型中顯示了一種「明文知曉性」的形式(他們聲稱這意味着對選擇密文攻擊是安全的)。然而隨後的結果與這一點相牴觸,表明 OAEP 僅是 IND-CCA1 安全的。但是與 RSA-OAEP 的情況一樣,當將OAEP與使用標準加密指數的 RSA 置換一起使用時,在隨機預言模型中證明了原始方案是 IND-CCA2 安全的。Victor Shoup 提供了一種改進的方案(稱為 OAEP+),該方案可與任何陷門單向置換配合使用,以解決此問題。近期的研究表明,在標準模型中(即當哈希函數未建模為隨機預言時),無法在假定 RSA 問題的難度下證明 RSA-OAEP 具有 IND-CCA2 安全性。
算法
編碼過程包括如下步驟:
- 用 k1 位長的 0 將消息填充至 n - k0 位的長度。
- 隨機生成 k0 位長的串 r
- 用 G 將k0 位長的 r 擴展至 n - k0 位長。
- X = m00...0 ⊕ G(r)
- H 將 n - k0 位長的 X 縮短至 k0 位長。
- Y = r ⊕ H(X)
- 輸出為 X || Y,在圖中 X 為最左邊的塊,Y 位最右邊的塊。
隨後可以使用 RSA 加密編碼的消息,使用 OAEP 可以避免 RSA 的確定性。
解碼過程包括如下步驟:
- 恢復隨機串 r 為 Y⊕H(X)
- 恢復消息 m00...0 為 X ⊕ G(r)
安全性
「全有或全無」的安全性基於以下事實:要恢復 m,必須完整地恢復 X 和 Y。從 Y 中恢復 r 需要 X,而從 X 中恢復 m 需要 r。由於加密哈希的任何更改的位都完全改變了結果,因此整個 X和整個 Y 必須都被完全恢復。
實現
在 PKCS#1 標準中,隨機預言 G 和 H 是相同的。但 PKCS#1 標準進一步要求隨機預言應是具有合適散列函數的 MGF1。