首页 > 编程语言 >分组加密算法的CPA安全性证明

分组加密算法的CPA安全性证明

时间:2022-11-13 10:23:56浏览次数:42  
标签:Pr CPA tilde 分组 cpa Pi 加密算法 Priv

分组加密算法的CPA安全性证明

CPA安全模型

构造分组加密算法

令\(F\)是伪随机函数,定义一个消息长度为\(n\)的对称加密方案如下:

  • Gen:输入:安全参数\(n\),输出\(k\),\(k\)是一个\(\{0,1\}^n\)均匀分布中随即取出的整数
  • Enc:输入:\((k,m)\),输出\(c=(c_1,c_2)\leftarrow (r,F_k(r)\oplus m),r\leftarrow \$\{0,1\}^n\)
  • Dec:输入\((k,(c_1,c_2))\),输出\(m\leftarrow F_k(c_1)\oplus c_2\)

证明

猜想:如果\(F\)是一个为随机函数,则构造的加密算法对定长消息是CPA安全的。

归约证明:假设存在概率多项式时间内能攻破加密方案\(\Pi\)的CPA敌手\(A\),那么我们可以构造多项式时间的区分器算法D以不可忽略的优势区分\(F_k(\cdot)\),和\(f(\cdot)\)(构造出矛盾)

证明:

首先构造一个理想方案,即利用随机函数\(f\)替换构造方案中的伪随机函数\(F_k\),记作加密方案\(\tilde{\Pi}=(\widetilde{Gen},\widetilde{Enc},\widetilde{Dec})\),

  • Gen:输入:安全参数\(n\),输出\(k\),\(k\)是一个\(\{0,1\}^n\)均匀分布中随即取出的整数
  • Enc:输入:\((k,m)\),输出\(c=(c_1,c_2)\leftarrow (r,f(r)\oplus m),r\leftarrow \$\{0,1\}^n\)
  • Dec:输入\((k,(c_1,c_2))\),输出\(m\leftarrow f(c_1)\oplus c_2\)

先证明PPT敌手A与该方案的CPA攻击的成功概率为

\[Pr[Priv_{A,\tilde{\Pi}}^{cpa}(n)=1]=\dfrac{1}{2} + negl(n). \]

按照CPA模型,若生成挑战密文所用的随机数\(r^*\)在其它询问过程中使用过(记为事件"REPEAT"),则敌手很容易猜中\(b\),事件"REPEAT"发生的概率为\(\dfrac{p(n)}{2^n}\);若\(r^*\)在其他询问过程中未被使用过,则敌手成功的概率为\(\dfrac{1}{2}\),则

\[\begin{aligned} Pr[Priv_{A,\tilde{\Pi}}^{cpa}(n)=1] &= Pr[Priv_{A,\tilde{\Pi}}^{cpa}(n)=1\wedge REPEAT] + Pr[Priv_{A,\tilde{\Pi}}^{cpa}(n)=1 \wedge REPEAT]\\ &\leq Pr[REPEAT] + Pr[Priv_{A,\tilde{\Pi}}^{cpa}(n)=1 | \overline{REPEAT}]\\ & \leq \dfrac{p(n)}{2^n} + \dfrac{1}{2} \end{aligned} \]

即\(Pr[Priv_{A,\tilde{\Pi}}^{cpa}(n)=1]=\dfrac{1}{2} + negl(n)\),下面证明\(|Pr[Priv_{A,\Pi}^{cpa}(n)=1] - Pr[Priv_{A,\tilde{\Pi}}^{cpa}(n)=1]| \leq negl(n)\).

其中,\(Pr[D^{F_k(\cdot)}(1^n)=1]=Pr[Priv_{A,\Pi}^{cpa}(n)=1]\),\(Pr[D^{f(\cdot)}(1^n)=1]=Pr[Priv_{A,\tilde{\Pi}}^{cpa}=1]\),由\(F(\cdot)\)的伪随机性得,\(|Pr[Priv_{A,\Pi}^{cpa}(n)=1] - Pr[Priv_{A,\tilde{\Pi}}^{cpa}(n)=1]| \leq negl(n)\),得证.

标签:Pr,CPA,tilde,分组,cpa,Pi,加密算法,Priv
From: https://www.cnblogs.com/euler0525/p/16885470.html

相关文章

  • 数据的分组与计算
    对数据集进行分组并对各组应用一个函数(无论是聚合还是转换),通常是数据分析工作中的重要环节。在数据集准备好之后,通常就是计算分组统计或生成透视表。pandas提供了一个灵活......
  • MD5 到底算不算一种加密算法?
    hello,大家好,我是张张,「架构精进之路」公号作者。一旦提到加密算法,经常有人会有这样的疑问:MD5到底算不算一种加密算法呢?在回答这个问题之前,我们需要先弄清楚两点:什么是加密......
  • ListView中排序和分组(GroupTemplate)的使用实例演示
    .aspx代码如下:<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="8_Group_Sort.aspx.cs"Inherits="Group_Sort"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0......
  • MySQL的分组和分组后筛选语句(十七)
    我看到了那天的夕阳,美得如此骄艳,我便决定,追寻夕阳,拼尽余生。上一章简单介绍了MySQL的查询where语句(十六),如果没有看过,​​请观看上一章​​一.MySQL的分组语句MySQL中......
  • 49. 字母异位词分组
    给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只......
  • 每日一题-区间分组
    区间分组 sort(a.begin(),a.end()); priority_queue<int,vector<int>,greater<int>>q; for(inti=0;i<n;++i){ if(q.empty()orq.top()>=a[i].fir......
  • MD5 到底算不算一种加密算法?
    一旦提到加密算法,经常有人会有这样的疑问:MD5到底算不算一种加密算法呢?在回答这个问题之前,我们需要先弄清楚两点:什么是加密算法?什么是MD5?1、什么是加密算法?数据加密的基本......
  • AI云边端EasyCVR平台新功能解析:支持为角色选择多级分组
    EasyCVR平台可支持多类型设备、多协议方式接入,具体包括:国标GB28181协议、RTMP、RTSP/Onvif、海康Ehome,以及海康SDK、大华SDK、华为SDK、宇视SDK、乐橙SDK、萤石SDK等,可覆盖......
  • AcWing 3583 整数分组(01背包 + 双指针)
    原题链接本题是比较明显的01背包,选或者不选,中间可以用双指针找到最后可以选到的区间长度,那么如果选当前最后一个区间的话最后就要求这个区间前面的长度要最大状态表示:f[......
  • MybatisPlus Lambda表达式 聚合查询 分组查询 COUNT SUM AVG MIN MAX GroupBy
    一、序言众所周知,MybatisPlus在处理单表DAO操作时非常的方便。在处理多表连接连接查询也有优雅的解决方案。今天分享MybatisPlus基于Lambda表达式优雅实现聚合分组查询。......