最优非对称加密填充

在密码学中，最优非对称加密填充（英语：Optimal Asymmetric Encryption Padding，缩写：OAEP）是一种经常与RSA加密一起使用的填充方案。OAEP由Mihir Bellare和Phillip Rogaway发明，随后在PKCS#1 v2和RFC 2437中得到标准化。

OAEP算法是费斯妥密码的一种形式，它使用一对随机预言G和H在进行非对称加密之前处理明文。OAEP与任何安全的陷门单向置换 结合使用在随机预言模型中被证明是一种在选择明文攻击（IND-CPA）下语义安全的组合方案。当使用某些陷门置换（如RSA）实现时，OAEP也被证明可以抵抗选择密文攻击。OAEP可用于构建全有或全无转换（all-or-nothing transform）。

OAEP满足以下两个目标：

 添加随机性元素，这可用于将确定性加密方案（如传统 RSA）转变为概率加密方案。
 通过确保无法反转陷门单向置换，从而无法恢复明文的任何部分，来防止密文的部分解密（或造成其他信息泄漏）。

当OAEP与任何陷门置换一起使用时，OAEP的原始版本（Bellare/Rogaway, 1994）在随机预言机模型中显示了一种“明文知晓性”的形式（他们声称这意味着对选择密文攻击是安全的）。然而随后的结果与这一点相抵触，表明OAEP仅是IND-CCA1安全的。但是与RSA-OAEP的情况一样，当将OAEP与使用标准加密指数的RSA置换一起使用时，在随机预言模型中证明了原始方案是IND-CCA2安全的。Victor Shoup 提供了一种改进的方案（称为OAEP+），该方案可与任何陷门单向置换配合使用，以解决此问题。近期的研究表明，在标准模型中（即当哈希函数未建模为随机预言时），无法在假定RSA问题的难度下证明RSA-OAEP具有IND-CCA2安全性。

算法 

在图中，

 n 是 RSA 模数的位数。
 k0 和 k1是协议中的固定整数。
 m 是n -k0 -k1位长的明文消息 
 G 和 H 是随机预言，如加密散列函数。
 ⊕ 是异或运算。

编码过程包括如下步骤：

 用 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。

参见 

 密钥封装

参考文献 

密码学