构造一个CCA安全的加密方案
使用消息鉴别码与CPA 安全加密方案一起 , 构造对称密钥加密方案来满足这种安全性。
构造CCA安全加密方案。这种构造方法按下面的方式工作:发送方和接收方共享两个密钥,一个是CPA安全加密方案的,一个是消息鉴别码的。为了加密消息m,发送者先使用CPA安全的方案加密,然后对得到的密文计算MAC 标记t;现在整个密文是(c,t)。对于给定的密文(c, t>,接收方在解密c之前验证标记的有效性。
如果t是关于c的有效MAC标记,称密文(c, t)是有效的。这样的条件它会使解密预言机无用,正如将从安全性证明中看到的那样。
定理:如果IIE是一个CPA安全的对称密钥加密方案,且IIM是一个具有唯一标记的消息鉴别码,那么上诉构造方案是一个CCA安全的对称密钥加密方案。
证明:需要将CCA的安全性规约到CPA的安全性,就需要证明解密密预言机是没有意思的。有两种使用解密预言机的情况
- 解密敌手自己加密的密文,这没有意义,因为你本身就知道对应的明文
- 解密从外部得到的密文,对于安全的消息鉴别码来说,验证成功的概率可忽略不计(因<c,t>对没有经过加密机),所以也是没有意义的。
综上所属,该方案的安全性就只用看CPA安全。
已经过身份验证的加密(加密+鉴别)
定义:如果一个消息传输方案(Gen ,EncMac’ , Dec’)既有CCA安全的加密方案,且达到了认证的通信,那么它就是安全的。
加密保证私密性,消息验证码保证完整性,两者组合有三种:
-
加密和鉴别:
这种组合并不一定是安全的,因为它可能违反私密性的要求。因为一个安全MAC并不必保证任何私密性,确切地说消息的标记可能会泄露整个消息的内容 -
加密前鉴别
这种加密也不一定是安全的。例如:
令Transform(m)如下:消息m中的0被转化成00,消息中的1被转化为01或者10中任意一个。这个变换编码的逆过程是将消息划分成比特对,然后映射00到0,01到10到1。如果遇到一个11,那么结果就是错误的
考虑下面的选择密文攻击:给定一个挑战密文c =Enck(Transform(m|| Mack2(m))),简单地在c的第二个分块上翻转前两个比特(c的第一个分块是初始计数值ctr),并验证结果密文是否是有效的。(这可以通过对加密预言机的询问确定)如果消息m的第一个比特是1,那么对修改的密文就是有效的。这是因为如果m的第一位是1,那么Transform(m)的头两位是01或者10。这两个比特的翻转会导致另一个对m有效的变换编码。另一方面,如果m的第一个比特为0,那么对密文的改变就无效,因为Transform(m.)的前两位是00,会转变成11。
重复执行可以计算出整个明文
- 加密后鉴别