OAEP(最优非对称加密填充)

OAEP(最优非对称加密填充)

【【思考】】:RSA的短明文可以导致密文易遭受攻击,因为一些短明文对应的密文中存在”先验信息“,这个”先验信息“对攻击者Malice来说就是好事,但对于用户就非常不好。这里就思考,简单的给明文填充伪数据(填充位)也许可以对攻击者Malice的工作变得困难些,比如说:

(1)在原明文后面添加t个(t是随机的)零,要保证添加后的明文的长度要小于模数N,否则会出现me=m’e=c ( mod N)这种情况,也就是说两种明文加密为同一个密文;

(2)在原明文后串接上原明文的Hash值,当然这也要保证串接后的明文的长度与(1)的保证一样。

【分析】:

  1. 对于(1),添加的零的个数是随机的,所以添加后明文的长度也是可控的,但是,攻击者Malice稍微多做一些努力工作,如添加的位数逐个尝试,从而对密文进行攻击;
  2. 对于(2),明文的Hash值得长度是固定的,若原明文信息长度稍微长点,在串接上Hash值可能导致串接后的明文得长度超过模数N,所以说,该方法得明文长度。

【解决】:

采用最优非对称加密填充(OAEP)。

1、OAEP对IND-CCA2是可证明安全的。由Bellare和Rogaway提出,是一种随机化的消息填充技术,而且是从消息空间到一个陷门单向置换(OWTP)定义域的一个易于求逆的变换。

2、OAEP算法
OAEP(最优非对称加密填充)_第1张图片
OAEP(最优非对称加密填充)_第2张图片
OAEP(最优非对称加密填充)_第3张图片
如果密文发出后没有被修改过,那么我们就知道,Bob可以用解密算法恢复出随机数r,有
v = s ⨁ G ( r ) = ( m ∣ ∣ 0 k 1 ) ⨁ G ( r ) ⨁ G ( r ) = ( m ∣ ∣ 0 k 1 ) ⨁ 0 = ( m ∣ ∣ 0 k 1 ) v=s⨁G(r)=(m ||0^k1 )⨁G(r)⨁G(r)=( m ||0^k1 )⨁0=( m ||0^k1 ) v=sG(r)=(m0k1)G(r)G(r)=(m0k1)0=(m0k1)
3、大量对教科书式加密算法的攻击都是这样采样一种通用技术:篡改密文从而以一种可控的方式修改相应的明文。

​ OAEP变换是把密码学杂凑函数和一个著名对称密码算法结构结合起来构造的。OAEP构造可以看成是一个两轮Feistel密码,第一轮使用杂凑函数G,第二轮使用杂凑函数H,代替Feistel密码的“s盒函数”,但这里的两个“s盒函数”不是加密钥,而且两个半分组的大小可以不同。

​ 正因为OAEP有良好的代数特性,具有逐比特的代数特性:因此,如果Malice想通过篡改密文,都会导致明文的改变是不可控的,因为使用了杂凑函数,在保证杂凑函数的安全性下(比若说单向性、抗碰撞性等),很难找到一个有效的hash值,其对应的明文是有效的。这种改变是由于破坏了增加到明文消息中的冗余。

【换种说法:如果攻击者试图以适应性的方式修改密文,那么数据完整性检验将以“压倒性”概率失败,并且解密结果为一条没有任何意义的明文。】

​ 其次,除了上面RSA-OAEP保护了选择密文攻击下的安全性,值得注意的是,该算法提供的数据完整性保护很奇特,当解密者Bob看到解密后明文的k1个0的传之后,能够确信一点的就是,密文没有 被修改过,但是Bob却永远不知道该消息的发送者。(这里可以想想,怎么才可以保证知道消息的发送者?答:可以用消息发送者的私钥对整个密文进行加密)

​ 这种公钥加密体制在抗击CCA2的公钥密码系统中,解密过程还能保证数据的完整性验证,可以说这种密码系统内是“无懈可击的”。即便是下面的极端攻击形式:

攻击者和目标用户进行询问-应答的模式。攻击者可以自由的向公钥拥有者发送任意多的“选择适应性密文”的消息,要求目标用户以预言机-服务的方式进行解密,意思就说解密是正确的,不会故意解密错的明文发给攻击者。当然,目标用户也不是真的傻,自己也有一定的识别能力,不会帮助解密之前刚发出的密文。

当OAEP所基于的陷门单向置换f是单向安全时,f-OAEP在随机语言机模型下可证明达到适应性选择密文攻击下的不可区分性(IND-CCA2).

【【参考书】】毛文波.现代密码学理论与实践

你可能感兴趣的:(密码学,密码学)