原文教材 与 参考资料:
Boneh Dan , Shoup Victor . A Graduate Course in Applied Cryptography[J].
该书项目地址(可以免费获取):http://toc.cryptobook.us/
博客为对该书的学习笔记,并非原创知识,帮助理解,整理思路。
CCA 安全模型:
敌手可以发起两种不同的挑战询问,第一种为加密询问,敌手每次提供一对明文给挑战者,挑战者可以随机选择一个进行加密,并把加密的结果给敌手。值得注意的是,这里敌手到底能发出几个加密询问是一个非常重要的问题,因为随着敌手能够发出的的加密请求次数不同,整个安全性定义也会有不同的区别。第二种为解密询问,敌手每次可以提供一些密文,密文是排除加密询问中的密文之外从剩下的密文空间获得的内容。挑战者将计算得到解密密文发送给敌手。
在游戏的最后,敌手输出自己对加密询问中挑战者选择比特的猜测。
最终,敌手的优势定义如下:
CCA安全的全称为 semantically secure against a chosen ciphertext attack.
1CCA security
该书给了一个不同于国内教材对CCA安全的理解角度,此处根据SS安全的定义,如果严格限制敌手只有一次加密请求询问,那么称其one-time semantically secure agaiinst chosen ciphertext attack. 一次语义安全抵抗选择密文攻击。形式化定义如下:
这里值得注意的是,CPA,CCA ,1CCA, SS这几个概念在此处都是有着较强的联系,我按照书中的含义绘图如下,帮助理解与记忆:
1CCA 与 CCA
如果一个方案能够实现1CCA 那么就能满足CCA安全:
CCA 和 1CCA的安全优势表达为上述定理。
此处的1CCA定义其实已经包括了我们在其他地方看到的是CCA2定义的概念,即为适应性CCA安全。整个游戏的描述如下:
Understanding CCA security
如何理解CCA安全?从学术的角度上理解 CCA安全 即为密文不具有延展性,不具有延展性的密文即为符合CCA安全的加密方案与协议能够保证其产生的密文不具有延展性。
为了保证不具有延展性,那么是否可以通过认证(authenticatioon)功能来实现这个功能?例如使用MAC码?但是本节已经给出了结果,仅仅使用MAC码还是不够的。
Encryption as an abstract interface
讨论CCA安全其实并非是一种直觉上好理解的,然而CCA的确捕获了一个自然的安全定义。这里我们把加密描述成一个抽象的接口。我们假设有两个参与方S 和 R,这两个参与者分别具备两个盒子(其实这里亦可以制定为纸带),分别是in-box,out-box。S发送消息时将消息放入他的out-box,然后接收者R收到消息的时候从自己的in-box获取消息。此时,S和R并没有分享一个共享密钥,假设R生成一个PK,SK密钥对,S知道R的公钥。
通常,在现实中,当一个消息被放到S的out-box,S使用R的公钥进行加密,并将得到的密文发送给R , 当R通过信道接受到密文后,使用自己的解密密钥进行解密,如果这不是一个合法的密文那么就将结果放到R的in-box中。
然而现实中,凡是知道R的公钥的参与者都可向R发送加密消息,这里将所有的发送加密请求建模为所有人将自己想要加密的信息都放到S的out-box中。那么敌手将可以按照如下的的方式对系统进行攻击:
敌手在现实中可以从多个角度对该加密系统进行攻击:
1. 敌手可以删除、重排、复制由S发送的密文。
2. 敌手还有可能修改或者注入由自己计算的密文。
3. 敌手可能会获得部分的知识从S发送的密文或者影响到S发送密文的情况。
4. 敌手可能会动R的接受情况获取部分知识,例如R到底拒绝了那些信息。
现在我们描述一个这个加密的理想实现方式:
S首先将消息放到out-box中,理想实现创建一个密文使用一个假消息,消息和需要加密的消息唯一的相同的地方是两个消息的长度相同。此时得到的密文和原来的明文没有任何的关系。当这个密文经过信道发送到R后,该假消息密文对应的明文直接被“魔法拷贝”到R的in-box中。(注意此处的in-box 和 out-box保存的都是明文)。如果R收到了一个密文不是由S被制造的,那么对于这类收到的密文,理想的实现方式是使用私钥sk解密.也就是说,并非所有的消息都来源于S或许是敌手注入的其他密文信息。
CCA安全实现了这个理想的服务,在理想实现中,我们看到消息时直接从S到R拷贝的, 尽管敌手可以让R进行消息解密,但是从S发送的密文并不泄露任何的有用信息。在理想的实验中,敌手依然可以删除,重排,辅助消息。所以,敌手攻击现实和理想的攻击行为是一样的。
我们现在讨论 当一个方案是CCA时,上述现实的方式 和 理想的方式 这两种方式是不可区分的。
1,我们修改现实的R操作为如下,当时收到一个密文时首先比较所有由S生成的密文(使用加密算法加密的明文),如果有相等的情况,直接将对应的明文“魔法拷贝”到R的in-box。并不运行真实的解密过程。这样保证了其和现实情况一样,S的消息一定会被R正确的接受。当R收到其他的消息时,则调用解密密钥sk进行解密。
2,修改现实的S操作如下,将S的加密明文行为用加密一个假消息来进行替换。R的in-box保持不变。
如果攻击者能够区分上述两种情况,那么就意味着其能攻击CCA安全,因为2完全就是一个理想的情况,从敌手来看这两个视图是不可区分的。
PS:我们假设每个密文以压倒性的区别不同。