现代密码学3.4--CPA安全,多次加密

  • CPA安全
    • oracle
    • 例子
    • 含oracle的实验过程
    • CPA安全定义
  • 多次加密的CPA安全
    • "left-or-right" oracle LRk,b(⋅,⋅)LR_{k,b}(\cdot,\cdot)LRk,b​(⋅,⋅)
    • 含"left-or-right" oracle的多次加密实验过程
    • 多次加密的CPA安全定义
  • 多次加密和单次加密对比
    • 唯密文攻击/计算安全
    • 选择明文攻击/CPA安全

博主正在学习INTRODUCTION TO MODERN CRYPTOGRAPHY (Second Edition) --Jonathan Katz, Yehuda Lindell,做一些笔记供自己回忆,如有错误请指正。整理成一个系列现代密码学,方便检索。

  • 第二章定义的完美安全是一种理论上的讨论,而第三章需要定义的计算安全是一种更偏向实际需求的讨论。
  • 3.1节讨论了定义计算安全的两种方法,3.2节讨论了什么是计算安全,3.3节给出了基于PRG构造的计算安全的密码方案。
  • 以上3.1-3.3节都在讨论计算安全,这是一种抵御唯密文攻击的安全,根据1.4节的四种攻击模型可知,这是对敌手能力的一种最弱描述。现在,我们考虑敌手具有选择明文攻击的攻击能力,来定义一种更强的安全性:CPA安全,以及考虑多次加密的计算安全和多次加密的CPA安全

CPA安全

oracle

攻击者可以选择明文mmm传给加密者,加密者用加密算法Enck(m)Enc_k(m)Enck​(m)得到ccc……返回给攻击者。把这个过程看作一次查询,由攻击者来确定查什么,可以进行任意多次,且每次都用同样的密钥kkk。

例子

美军vs日军,中途岛海战:美军监听到日军要攻击“AF”,但是无法破解“AF”是什么地方。美军猜测是“中途岛”,于是让中途岛发假信息说缺水,日本截获了这个信息并立即报告给总部:“AF”缺水,这就让美军知道了在日军的加密方案中“AF”就是“中途岛”。这就是选择明文攻击,美军选择了明文“中途岛”,日军加密得到“AF”,虽然不是日军自愿参与的,但美军仍达到了他们的需要。

含oracle的实验过程

  • 敌手A\mathcal{A}A已知安全参数1n1^n1n,有一个连接Enck(⋅)Enc_k(\cdot)Enck​(⋅)的oracle(可以询问Enck(⋅)Enc_k(\cdot)Enck​(⋅)任意多次),输出等长明文m0,m1m_0,m_1m0​,m1​给加密者;
  • 加密者任选b∈{0,1}b\in\{0,1\}b∈{0,1},输出密文c←Enck(mb)c\leftarrow Enc_k(m_b)c←Enck​(mb​)给敌手A\mathcal{A}A;
  • 敌手A\mathcal{A}A在获得ccc后,仍有一个连接Enck(⋅)Enc_k(\cdot)Enck​(⋅)的oracle(可以根据ccc调整,继续查询),输出猜测的b′b'b′;
  • 如果b′=bb'=bb′=b输出1,否则输出0。

CPA安全定义

私钥加密方案Π=(Gen,Enc,Dec)\Pi=(Gen,Enc,Dec)Π=(Gen,Enc,Dec)如果对于任意PPT敌手A\mathcal{A}A,都有一个可忽略函数negl满足Pr[PrivKA,Πcpa(n)=1]≤12+Pr[PrivK_{\mathcal{A},\Pi}^{cpa}(n)=1]\le \frac{1}{2}+Pr[PrivKA,Πcpa​(n)=1]≤21​+negl(n)(n)(n),则称该方案Π\PiΠ在选择明文攻击下有不可区分的加密,是满足CPA安全的。

多次加密的CPA安全

“left-or-right” oracle LRk,b(⋅,⋅)LR_{k,b}(\cdot,\cdot)LRk,b​(⋅,⋅)

攻击者输入等长明文m0,m1m_0,m_1m0​,m1​给LRk,b(⋅,⋅)LR_{k,b}(\cdot,\cdot)LRk,b​(⋅,⋅),如果b=0b=0b=0,输出c←Enck(m0)c\leftarrow Enc_k(m_0)c←Enck​(m0​);如果b=1b=1b=1,输出c←Enck(m1)c\leftarrow Enc_k(m_1)c←Enck​(m1​)。

  • “left-or-right” oracle LRk,b(m,m)LR_{k,b}(m,m)LRk,b​(m,m)可以模拟oracle Enck(m)Enc_k(m)Enck​(m)
  • LRk,b(m0,1,m1,1)……LRk,b(m0,t,m1,t)LR_{k,b}(m_{0,1},m_{1,1})……LR_{k,b}(m_{0,t},m_{1,t})LRk,b​(m0,1​,m1,1​)……LRk,b​(m0,t​,m1,t​)可以模拟多次加密

不输入m0,1,……m0,tm_{0,1},……m_{0,t}m0,1​,……m0,t​和m1,1,……m1,tm_{1,1},……m_{1,t}m1,1​,……m1,t​,而选择分别输入LRk,b(m0,1,m1,1)……LRk,b(m0,t,m1,t)LR_{k,b}(m_{0,1},m_{1,1})……LR_{k,b}(m_{0,t},m_{1,t})LRk,b​(m0,1​,m1,1​)……LRk,b​(m0,t​,m1,t​),是因为加密者每次加密LRk,b(m0,i,m1,i)LR_{k,b}(m_{0,i},m_{1,i})LRk,b​(m0,i​,m1,i​)返回密文cic_ici​给敌手,敌手可以据此去选择下一次希望判断的明文,这样定义下的敌手能力更强。

含"left-or-right" oracle的多次加密实验过程

  • 确定b∈{0,1}b\in\{0,1\}b∈{0,1}
  • 敌手A\mathcal{A}A已知安全参数1n1^n1n,有一个连接LRk,b(⋅,⋅)LR_{k,b}(\cdot,\cdot)LRk,b​(⋅,⋅)的oracle(可以询问LRk,b(⋅,⋅)LR_{k,b}(\cdot,\cdot)LRk,b​(⋅,⋅)任意多次)
  • 敌手A\mathcal{A}A输出猜测的b′b'b′;
  • 如果b′=bb'=bb′=b输出1,否则输出0。

多次加密的CPA安全定义

私钥加密方案Π=(Gen,Enc,Dec)\Pi=(Gen,Enc,Dec)Π=(Gen,Enc,Dec)如果对于任意PPT敌手A\mathcal{A}A,都有一个可忽略函数negl满足Pr[PrivKA,ΠLR−cpa(n)=1]≤12+Pr[PrivK_{\mathcal{A},\Pi}^{LR-cpa}(n)=1]\le \frac{1}{2}+Pr[PrivKA,ΠLR−cpa​(n)=1]≤21​+negl(n)(n)(n),则称该方案Π\PiΠ在选择明文攻击下有不可区分的多次加密,是满足CPA安全的多次加密

多次加密和单次加密对比

唯密文攻击/计算安全

考虑计算安全和多次加密下的计算安全。

  • 计算安全:敌手传m0,m1m_0,m_1m0​,m1​给加密者,加密者选择mb,b∈{0,1}m_b,b\in\{0,1\}mb​,b∈{0,1}进行加密得到c←Enck(mb)c\leftarrow Enc_k(m_b)c←Enck​(mb​)返回给敌手,敌手猜测b′b'b′。b′=bb'=bb′=b则输出1,否则输出0。Pr[PrivKA,Πeav=1]≤12+Pr[PrivK_{\mathcal{A},\Pi}^{eav}=1]\le \frac{1}{2}+Pr[PrivKA,Πeav​=1]≤21​+negl(n)(n)(n)。具体描述可看3.2节:什么是计算安全
  • 多次加密下的计算安全:敌手传M0={m0,1……m0,t},M1={m1,1,……m1,t},∣m0,i∣=∣m1,i∣M_0=\{m_{0,1……m_{0,t}}\},M_1=\{m_{1,1},……m_{1,t}\},|m_{0,i}|=|m_{1,i}|M0​={m0,1……m0,t​​},M1​={m1,1​,……m1,t​},∣m0,i​∣=∣m1,i​∣给加密者,加密者选择b∈{0,1}b\in\{0,1\}b∈{0,1}进行加密ci←Enck(mb,i)c_i\leftarrow Enc_k(m_{b,i})ci​←Enck​(mb,i​)得到C=(c1……ct)C=(c_1……c_t)C=(c1​……ct​)返回给敌手,敌手猜测b′b'b′。b′=bb'=bb′=b则输出1,否则输出0。Pr[PrivKA,Πmult=1]≤12+Pr[PrivK_{\mathcal{A},\Pi}^{mult}=1]\le \frac{1}{2}+Pr[PrivKA,Πmult​=1]≤21​+negl(n)(n)(n)。

如果EnckEnc_kEnck​是确定性算法,安全性:多次加密的计算安全>计算安全

选择明文攻击/CPA安全

考虑CPA安全和多次加密下的CPA安全。

  • CPA安全:定义含oracle的实验,Pr[PrivKA,Πcpa(n)=1]≤12+Pr[PrivK_{\mathcal{A},\Pi}^{cpa}(n)=1]\le \frac{1}{2}+Pr[PrivKA,Πcpa​(n)=1]≤21​+negl(n)(n)(n)
  • 多次加密下的CPA安全:定义含LRk,b(⋅,⋅)LR_{k,b}(\cdot,\cdot)LRk,b​(⋅,⋅)的实验,Pr[PrivKA,ΠLR−cpa(n)=1]≤12+Pr[PrivK_{\mathcal{A},\Pi}^{LR-cpa}(n)=1]\le \frac{1}{2}+Pr[PrivKA,ΠLR−cpa​(n)=1]≤21​+negl(n)(n)(n)

安全性:多次加密的CPA安全=单次加密的CPA安全

现代密码学3.4--CPA安全,多次加密相关推荐

  1. 密码学专题 数据填充的方式|序列加密的方式

    电子密码本模式和加密分组链接模式的分组算法都要求加密输入的分组是固定长度 的,但是大多数输入明文可能都不是分组长度的整数倍,也就是说,最后一个分组一般来 说是不足一个分组长度的.为了使分组加密算法能够 ...

  2. 密码学-07CCA安全与认证加密

    7 CCA安全与认证加密 本节学习用于抵抗CCA攻击的加密方案以及同时保证通信机密性和真实性的认证加密方案. 目录:CCA安全加密,认证加密,确定性加密,密钥派生函数. 回顾CCA不可区分实验 CCA ...

  3. [密码学基础][信息安全][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第一篇]不同类型的处理器

    这是每个密码学博士生应该知道的52件事系列的第一篇文章.PhD研究生在第一年结束的时候应该掌握这些问题.并且尽可能早的在他们能放弃的时候放弃(23333)无论怎样,我们会将这些问题在接下来的一年里表达 ...

  4. CTF-Crypto密码学

    密码学 01密码学概述 密码学的发展 密码编码学 编码与加密? 编码为一类映射的关系(一一映射) 加密为一类算法(有算法(公开的),密钥(不可泄漏)) 明文 ------> 密文 plain t ...

  5. 密码学电子书_密码学中的电子密码书(ECB)

    密码学电子书 This Electronic Code Book (ECB) is cryptography as a mode of operation for a block cipher, wi ...

  6. 【网络信息安全】密码学入门笔记

    密码学入门 主要内容与重点 一.传统密码学 二.现代密码学 三.理论不可破解和计算不可破解的加密算法 密码系统的基本要求和设计原则 一次一密密码系统 一次一密码系统的算法 一次一密密码系统举例 无法破 ...

  7. 密码学(期末复习版)

    文章目录 第一章 引言 第二章 流密码 第三章 分组密码 第四章 公钥密码 第五章 数字签名 第六章 哈希函数 第七章 认证技术 第八章 秘钥分配与秘钥管理 第九章 密码协议 第十一章 密码学新方向 ...

  8. CISSP考试要求里的“应用密码学”内容辅助记忆趣味串讲

    前言 密码学为数据的处理.存储和通信过程提供附加的安全级别.近年来,数学家和计算机科学家开发了一系列日益复杂的算法,这些算法被设计用于确保机密性.完整性.身份认证和不可否认性.在密码学家花费大量时间开 ...

  9. Java密码学原型算法实现——第二部分:单钥加密算法

    题注 本部分为单钥加密算法的实现.单钥加密体制是密码学加密中的核心密码学原型之一,很早很早前人类就已经开始了单钥密码学体制的研究.本部分的所有实现基于Bouncy Castle库,其地址详见我上一篇博 ...

最新文章

  1. Python使用matplotlib可视化树状图、层次聚类系统树图、树状图根据给定的距离度量将相似点分组在一起、并根据点的相似性将它们组织成树状图链接起来(Dendrogram)
  2. windows中使用git和开源中国
  3. 【Nginx】Auth 认证
  4. 【学生信息管理系统】——总结篇
  5. wpf 设置滑动条不能划到头_改善移动用户体验的7条原则
  6. 第二篇:操纵MySQL数据库(2) - 基于ORM思想的SQLAlchemy库
  7. 位图(bitmap)—— C语言实现
  8. 学计算机高考分数线,2020高考分数线预测
  9. java ftl 模板 输出list_关于在freemarker模板中遍历数据模型ListJavaBean的经验
  10. Python在线考试系统源代码
  11. svn下载项目到指定文件夹,以及更新提交
  12. 两个栈实现一个队列,两个队列实现一个栈-JAVA
  13. MySql 报错:In aggregated query without GROUP BY, expression #1 of SELECT list contains....
  14. SCCM制作启动镜像和U盘引导装机记录
  15. 常用控件的使用有哪些?如何操作控件?
  16. 计算机深度休眠以后怎么唤醒,电脑进入深度睡眠,肿么唤醒?
  17. LaTeX—如何把论文模板的关键词从Index Terms 改为Keywords
  18. 武磊离顶级前锋到底有多远?
  19. 数据挖掘综合应用:房屋售价预测案例
  20. 让你的简历不落窠臼,精雕细镂写一份真正的技术简历(Python向)

热门文章

  1. set的用法及短语_人教版九全Unit 14重点短语、重点句型、课文讲解
  2. 未定义标识符 stringc/c++(20)_20款丰田酷路泽5700绝版现车最后促销
  3. php和mysql的版本区别_MySQL各个版本区别_MySQL
  4. 数据中心(机房)施工方案
  5. 最全的电气设备故障诊断法
  6. python处理文本格式_python linecache 处理固定格式文本数据的方法
  7. DayDayUp之Job:牛客网—算法工程师—剑指offer之66道在线编程(解决思路及其代码)——1~20
  8. ML之DR之PCA:利用PCA对手写数字图片识别数据集进行降维处理(理解PCA)
  9. TF之CNN:基于CIFAR-10数据集训练、检测CNN(2+2)模型(TensorBoard可视化)
  10. Computer:MediaPreview的简介、安装、使用方法之详细攻略