《Introduction To Modern Cryptography》读书笔记三


《Introduction To Modern Cryptography》读书笔记三

本笔记纯粹个人读书习惯与相应见解,内容归纳完全出于个人需要与个人局限,如有修改意见(比如哪儿应该是值得加粗的重点),欢迎斧正,QQ:2570101165

前排提示:本章笔记预计会非常无聊

三、 Private-Key Encryption

Private-Key是“私有密钥”,属于对称密钥;不是非对称加密里的“私钥”

本章定义没上一章那么强,但足够了,将以一定的安全性为代价换取更高的实用性。

"pseudorandom"这个毕宰执将出现很多很多很多次(p不发音)

3.1 Computational Security

相对于信息论中安全的概念,为了超越完美安全的限制(无敌是多么寂寞),计算安全在两方面进行了松弛(relaxation):

  1. 安全性只有在有效的对手运行一定时间的情况下才能得到保证。

    完美完全对抗神,计算安全对抗人

    我们目的就是让钻石王老五了也没用,毕竟人是有极限的。所以,我不做人啦!JOJO!!

  2. 对手可能以很小的概率成功。如果我们能使这个概率足够小,我们就不用担心它。

    欧皇yyds

这儿联系一下完美安全:密文aaaaaaaa,密钥长度为8

则明文可能是iloveyou,也可能是ihateyou,可能是任何结果,自然也就没有几率攻击成功(至少不能make sense)

3.1.1 The Concrete Approach

A    s c h e m e    i s    ( t , ε ) − s e c u r e    i f    a n y   a d v e r s a r y    r u n n i n g    f o r    t i m e    a t    m o s t    t    s u c c e e d s    i n    b r e a k i n g    t h e    s c h e m e    w i t h    p r o b a b i l i t y    a t    m o s t    ε . A\ \ scheme\ \ is\ \ (t, \varepsilon)-secure\ \ if\ \ any\ adversary\ \ running\ \ for\ \ time\ \ at\ \ \\ most\ \ t\ \ succeeds\ \ in\ \ breaking\ \ the\ \ scheme\ \ with\ \ probability\ \ at\ \ most\ \ \varepsilon. A  scheme  is  (t,ε)secure  if  any adversary  running  for  time  at  most  t  succeeds  in  breaking  the  scheme  with  probability  at  most  ε.

  1. 对小概率究竟有多小给几个小概念:

    • 举例:密钥长度为 n n n,攻击成功率为 p = c t / 2 n p=ct/2^n p=ct/2n c c c是常数,此处设为1),运行时间 t t t(用计算机周期测量),攻破所用时间 T T T

      n = 60 n=60 n=60 t = 4   G H z t=4\ \mathrm{GHz} t=4 GHz(每秒运行 4 × 1 0 9 4\times10^9 4×109个周期); T = 1 / p = 2 60 / 4 × 1 0 9 ≈ 9   y e a r s T=1/p=2^{60}/4\times10^9\approx9\ years T=1/p=260/4×1099 years;

      实际 c > 1 c>1 c>1,则 c ↑ , T ↓ c\uparrow,T\downarrow c,T,说明暴力攻击可能远比你想象的容易

    • 宇宙大爆炸(Big Bang)距离现在也就大概258

    • 如果一个攻击者能在一年内以2-60的几率成功,那这个几率比通信双方同时被闪电劈死还低

      渣男除外

    • 一千年里一个事件在每秒发生的概率大概为2-30

  2. 缺点:实践中很难提供精确的具体保证

    毕竟人为定义真的很有限,比如如果一个系统2年内很难攻破,那10年呢?这还没考虑计算机计算能力的提升

    摩尔定律(Moore’s Law):计算机计算能力大概18个月翻一番

3.1.2 The Asymptotic Approach

A    s c h e m e    i s    s e c u r e    i f    a n y    P P T    a d v e r s a r y    s u c c e e d s    i n    b r e a k i n g    t h e s c h e m e    w i t h    a t    m o s t    n e g l i g i b l e    p r o b a b i l i t y . A\ \ scheme\ \ is\ \ \mathrm{secure}\ \ if\ \ any\ \ \mathrm{PPT}\ \ adversary\ \ succeeds\ \ in\ \ breaking\ \ the\\ scheme\ \ with\ \ at\ \ most\ \ negligible\ \ probability. A  scheme  is  secure  if  any  PPT  adversary  succeeds  in  breaking  thescheme  with  at  most  negligible  probability.

PPT = probabilistic polynomial-time

3.1.2.1 注意要点
  1. 该方法和计算复杂度紧紧相连,一定要了解其相关概念
  2. 引入一个整型变量——安全参数( s e c u r i t y   p a r a m e t e r security\ parameter security parameter n n n,一般看成密钥长度就行了
  3. efficient adversaries:运行在多项式时间( p ( n ) p(n) p(n))中的随机(即概率)算法。当然用户也是这样的(伤敌八百,自损八十)
  4. small probabilities of success(negligible):成功概率比任何 n n n的逆多项式小
  5. 一切的一切建立在 n n n足够大
  6. 安全定义由两部分组成:“破坏”方案的定义;对手能力的描述。
3.1.2.2 举例
  1. 运行时间 t = n 3 ( m i n u t e s ) t=n^3(minutes) t=n3(minutes),成功概率 p = 2 40 ⋅ 2 − n p=2^{40}\cdot2^{-n} p=2402n

    • n = 40 → t = 4 0 3   m i n u t e s ≈ 6   w e e k s ) , p = 1 n=40\rightarrow t=40^3\ minutes\approx6\ weeks),p=1 n=40t=403 minutes6 weeks),p=1
    • n = 50 → t = 5 0 3   m i n u t e s ≈ 3   m o u t h s ) , p = 1 / 1000 n=50\rightarrow t=50^3\ minutes\approx3\ mouths),p=1/1000 n=50t=503 minutes3 mouths),p=1/1000
    • n = 500 → t = 50 0 3   m i n u t e s ≈ 200   y e a r s ) , p = 2 − 500 n=500\rightarrow t=500^3\ minutes\approx200\ years),p=2^{-500} n=500t=5003 minutes200 years),p=2500

    说明我们需要对 n n n进行一个制衡:太短的话安全性不够,太长的话算起来费劲

  2. 还能抵御计算能力的增加带来的威胁

    设通信双方的计算代价为 1 0 6 ⋅ n 2 10^6\cdot n^2 106n2,敌人的计算代价为 1 0 8 ⋅ n 4 10^8\cdot n^4 108n4

    • 2   G H z , n = 80 2\ \mathrm{GHz},n=80 2 GHz,n=80,通信双方运行时间3.2秒,敌人运行时间大约为3周,几率只有2-40
    • 8   G H z , n = 1600 8\ \mathrm{GHz},n=1600 8 GHz,n=1600,通信双方运行时间仍为3.2秒,但是敌人运行时间大约为13周,几率还只有2-80

    自损50,伤敌八百;自损51,伤敌八万

3.1.2.3 The Asymptotic Approach in Detail
1. Efficient algorithms
  1. 算法 A \mathcal{A} A运行在多项式时间意味着存在一个多项式 p p p,对于任何输入 x ∈ { 0 , 1 } ∗ x\in\left\{0,1\right\}^* x{0,1} A ( x ) \mathcal{A}(x) A(x)最多运算 p ( ∣ x ∣ ) p(\vert x\vert) p(x)

  2. 安全参数经常写作一元的(即, 1 n 1^n 1n或者 n n n个1的字符串),如下图

    在这里插入图片描述

  3. 我们默认所有算法都是概率的(随机的),因为:

    • 随机性对于密码学来说是必不可少的(例如,为了选择随机密钥等等),因此诚实方必须是概率性
    • 我们允许对手具有概率性。因为随机化是实用的,它给攻击者额外的力量,而我们的目标是模拟现实的攻击,所以我们喜欢更自由的定义
  4. 优点:

    • 使我们不必精确地指定我们的计算模型,因为扩展的丘奇-图灵论文指出,所有“合理的”计算模型都是多项式等效的
    • 满足理想的闭包特性,例如:一个对运行多项式时间的子程序进行多次多项式调用的算法(另外只进行多项式计算)本身将以多项式时间运行
2. 定义1(3.4)(Negligible success probability)
  1. 正式定义:
    A    f u n c t i o n    f    f r o m    t h e    n a t u r a l    n u m b e r s    t o    t h e    n o n − n e g a t i v e    r e a l    n u m b e r s i s    n e g l i g i b l e    i f    f o r    e v e r y    p o s i t i v e    p o l y n o m i a l    p    t h e r e    i s    a n    N    s u c h    t h a t    f o r a l l    i n t e g e r s    n > N    i t    h o l d s    t h a t    f ( n ) < 1 p ( n ) A\ \ function\ \ f\ \ from\ \ the\ \ natural\ \ numbers\ \ to\ \ the\ \ non-negative\ \ real\ \ numbers\\ is\ \ \mathrm{negligible}\ \ if\ \ for\ \ every\ \ positive\ \ polynomial\ \ p\ \ there\ \ is\ \ an\ \ N\ \ such\ \ that\ \ for\\ all\ \ integers\ \ n>N\ \ it\ \ holds\ \ that\ \ f(n)<\frac{1}{p(n)} A  function  f  from  the  natural  numbers  to  the  nonnegative  real  numbersis  negligible  if  for  every  positive  polynomial  p  there  is  an  N  such  that  forall  integers  n>N  it  holds  that  f(n)<p(n)1
    等价定义:

    对于所有常量 c c c,存在一个 N N N,当 n > N n>N n>N时, f ( n ) < n − c f(n)<n^{-c} f(n)<nc

    多项式永远会被指数函数干碎

    注意在 n ≤ N n\leq N nN时,啥也不保证

    把微不足道的函数(negligible function)用 n e g l \mathrm{negl} negl来表示

  2. 举例:

    p ( n ) = n 5 p(n)=n^5 p(n)=n5

    • 2 − n < n − 5 2^{-n}<n^{-5} 2n<n5时, n = 23 n=23 n=23

    • 2 − n < n − 5 2^{-\sqrt{n}}<n^{-5} 2n <n5时, n = 3500 n=3500 n=3500

    • n − l o g   n < n − 5 n^{-\mathrm{log}\ n}<n^{-5} nlog n<n5时, n = 33 n=33 n=33

      如下图(哪条线对应哪个函数自己区分哦)

      在这里插入图片描述

      表面上看 n − l o g   n n^{-\mathrm{log}\ n} nlog n ”下降“比 2 − n 2^{-\sqrt{n}} 2n 快,其实当 n > 65536 n>65536 n>65536时, 2 − n < n − l o g   n 2^{-\sqrt{n}}<n^{-\mathrm{log}\ n} 2n <nlog n

3. 命题1(3.6)(闭包性质)

n e g l 1 \mathrm{negl}_1 negl1 n e g l 2 \mathrm{negl}_2 negl2是可忽略函数,则:

  1. 函数 n e g l 3 ( n ) = n e g l 1 ( n ) + n e g l 2 ( n ) \mathrm{negl}_3(n)=\mathrm{negl}_1(n)+\mathrm{negl}_2(n) negl3(n)=negl1(n)+negl2(n)也是可忽略函数
  2. 函数 n e g l 4 = p ( n ) ⋅ n e g l 1 \mathrm{negl}_4=p(n)\cdot \mathrm{negl}_1 negl4=p(n)negl1也是可忽略函数( p ( n ) p(n) p(n)为正多项式)

​ 解释:如果某一事件在某一实验中以可忽略的概率发生,那么即使实验多项式地多次重复,但事件仍以可忽略的概率发生。(成功次数≠成功概率!!)例如:如果一个算法对某些子程序进行多项式的多次调用,每次调用它的“失败”的概率可以忽略,那么对该子程序的任何调用失败的概率仍然可以忽略(说明该程序稳健)

就像不喜欢你的人再追也没啥用

但是!!!

人生本就是一场不完全的科研,追到一次就可行!!少年冲!

​ 补充:如果函数 g g g不是可忽略的,则函数 f ( n ) = def g ( n ) / p ( n ) f(n)\overset{\text{def}}{=}g(n)/p(n) f(n)=defg(n)/p(n)也是不可忽略的

3.1.3 Necessity of the Relaxations
  1. 两个Relaxations

    • 只有在对抗==efficient==对手时才能保证安全性
    • 攻击成功的可能性很小
  2. ∣ K ∣ < ∣ M ∣ \lvert\mathcal{K}|<|\mathcal{M}\rvert K<M时永远会有两种攻击

    • 穷举密钥攻击,成功概率:1

    • 盲猜密钥攻击,成功概率: 1 / ∣ K ∣ 1/\vert\mathcal{K}\vert 1/K

      这个故事告诉我们,密钥千万不能太短。要让敌人没时间暴力破解

3.2 Defining Computationally Secure Encryption

3.2.1 定义2(3.7)

  1. k ← G e n ( 1 n ) , ∣ k ∣ ≥ n k\leftarrow\mathrm{Gen}(1^n),\vert k\vert\geq n kGen(1n),kn

  2. c ← E n c k ( m ) , m ∈ { 0 , 1 } ∗ c\leftarrow\mathrm{Enc}_k(m),m\in\left\{0,1\right\}^* cEnck(m),m{0,1}

  3. m : = D e c k ( c ) , ⊥ m:=\mathrm{Dec}_k(c),\perp m:=Deck(c),代表解密出错(一般假设不存在)

  4. D e c k ( E n c k ( m ) ) = m \mathrm{Dec}_k(\mathrm{Enc}_k(m))=m Deck(Enck(m))=m

  5. 如果 m ∈ { 0 , 1 } l ( n ) m\in\left\{0,1\right\}^{\mathscr{l}(n)} m{0,1}l(n),我们把 ( G e n , E n c , D e c ) (\mathrm{Gen,Enc,Dec}) (Gen,Enc,Dec)叫做消息长度为 l ( n ) \mathscr{l}(n) l(n)的固定长度私有密钥加密方案(fixed-length private-key encryption scheme for messages of length l ( n ) \mathscr{l}(n) l(n)

    如果 G e n ( 1 n ) \mathrm{Gen}(1^n) Gen(1n)对于所有常量n比特字符串,那我们把方案简称为 ( E n c , D e c ) (\mathrm{Enc,Dec}) (Enc,Dec)(即,第一点中取等号)

  6. 除非明确说明,否则我们的所有结果都假定是无状态加密/解密

3.2.2 The Basic Definition of Security

indistinguishability已经蠢蠢欲动了,记得回顾一下前面的实验哦~

1. The adversarial indistinguishability experiment P r i v K A , Π e a v ( n ) \mathrm{PrivK}^\mathrm{eav}_{\mathcal{A},\Pi}(n) PrivKA,Πeav(n)

注意与前面实验相比多了个安全参数 n n n

  1. 实验描述:

    • 给攻击者 A \mathcal{A} A输入 1 n 1^n 1n,输出一对明文消息 m 0 , m 1 m_0,m_1 m0,m1,且 ∣ m 0 ∣ = ∣ m 1 ∣ \vert m_0\vert=\vert m_1\vert m0=m1

    • G e n ( 1 n ) \mathrm{Gen}(1^n) Gen(1n)生成一个密钥 k k k,选择一个均匀的比特 b ∈ { 0 , 1 } b\in\left\{0,1\right\} b{0,1},计算 c ← E n c k ( m b ) c\leftarrow\mathrm{Enc}_k(m_b) cEnck(mb)并发送给 A \mathcal{A} A。将 c c c称为挑战密文(challenge ciphertext)

    • A \mathcal{A} A输出一个比特 b ′ b' b

    • b ′ = b , P r i v K A , Π e a v ( n ) = 1 b'=b,\mathrm{PrivK}^\mathrm{eav}_{\mathcal{A},\Pi}(n)=1 b=b,PrivKA,Πeav(n)=1,实验成功;

      b ′ ≠ b , P r i v K A , Π e a v ( n ) = 0 b'\neq b,\mathrm{PrivK}^\mathrm{eav}_{\mathcal{A},\Pi}(n)=0 b=b,PrivKA,Πeav(n)=0,实验失败。

  2. 要点:

    • 与之前实验相比,增加的两个松弛

      • 攻击者 A \mathcal{A} A运行在多项式时间中
      • 实验成功率可以略大于1/2
    • P r [ P r i v K A , Π e a v ( n ) ] \mathrm{Pr}[\mathrm{PrivK}^\mathrm{eav}_{\mathcal{A},\Pi}(n)] Pr[PrivKA,Πeav(n)]是个关于 n n n的函数

    • 我们不管也管不了攻击者使用的策略

    • 初始的两个明文长度是相同的,但多长没限制,设为 l ( n ) \mathscr{l}(n) l(n)(即在默认情况下,我们不需要一个安全的加密方案来隐藏明文的长度)

  3. 该实验是针对唯密文攻击,在这种攻击中,对手只观察到单个密文,等价于当使用给定密钥时只加密单个消息(允许额外的交互会让对手变得更加强大)

    Indistinguishability in the presence of an eavesdropper

2. 定义3(3.8)

如果对于所有PPT攻击者 A \mathcal{A} A都有一个可忽略函数 n e g l \mathrm{negl} negl满足下列不等式,则说明加密方案 Π = ( G e n , E n c , D e c ) \Pi=(\mathrm{Gen,Enc,Dec}) Π=(Gen,Enc,Dec)在存在窃听者的情况下具有不可区分的加密性(indistinguishable encryptions in the presence of an eavesdropper, 即EAV-secure)
P r [ P r i v K A , Π e a v ( n ) = 1 ] ≤ 1 2 + n e g l ( n ) \mathrm{Pr}[\mathrm{PrivK}^\mathrm{eav}_{\mathcal{A},\Pi}(n)=1]\leq\frac{1}{2}+\mathrm{negl}(n) Pr[PrivKA,Πeav(n)=1]21+negl(n)
t h e    p r o b a b i l i t y    i s    t a k e n    o v e r : the\ \ probability\ \ is\ \ taken\ \ over: the  probability  is  taken  over: A \mathcal{A} A的随机性,实验中所用的随机性( E n c \mathrm{Enc} Enc

除非特别规定,否则 “ f ( n ) ≤ g ( n ) f(n)\leq g(n) f(n)g(n)” 对所有 n n n都成立

这个定义强度肯定比不上之前完美保密的定义,所以完美保密自然满足EAV-secure

3. 定义4(3.9)

与定义3等价

  • P r i v K A , Π e a v ( n , b ) \mathrm{PrivK}^\mathrm{eav}_{\mathcal{A},\Pi}(n,b) PrivKA,Πeav(n,b)表示 A \mathcal{A} A每次固定选择都是 b b b(之前是随机选的)
  • b ′ = o u t A ( P r i v K A , Π e a v ( n , b ) ) b'=\mathrm{out}_{\mathcal{A}}(\mathrm{PrivK}^\mathrm{eav}_{\mathcal{A},\Pi}(n,b)) b=outA(PrivKA,Πeav(n,b))

如果对于所有PPT攻击者 A \mathcal{A} A都有一个可忽略函数 n e g l \mathrm{negl} negl满足下列不等式,则说明加密方案 Π = ( G e n , E n c , D e c ) \Pi=(\mathrm{Gen,Enc,Dec}) Π=(Gen,Enc,Dec)在存在窃听者的情况下具有不可区分的加密性(indistinguishable encryptions in the presence of an eavesdropper, 即EAV-secure)
∣ P r [ o u t A ( P r i v K A , Π e a v ( n , 0 ) ) = 1 ] − P r [ o u t A ( P r i v K A , Π e a v ( n , 1 ) ) = 1 ] ∣ ≤ n e g l ( n ) \bigg\vert\mathrm{Pr}[\mathrm{out}_{\mathcal{A}}(\mathrm{PrivK}^\mathrm{eav}_{\mathcal{A},\Pi}(n,0))=1]-\mathrm{Pr}[\mathrm{out}_{\mathcal{A}}(\mathrm{PrivK}^\mathrm{eav}_{\mathcal{A},\Pi}(n,1))=1]\bigg\vert\leq \mathrm{negl}(n) Pr[outA(PrivKA,Πeav(n,0))=1]Pr[outA(PrivKA,Πeav(n,1))=1]negl(n)

4. Encryption and Plaintext Length
  1. 安全加密的默认概念并不要求加密方案隐藏明文长度,主要原因是不可能隐藏所有关于明文长度信息的同时支持任意长度的消息。(而且很多时候明文消息长度并不敏感)

  2. 例外:

    • Simple numeric/text data:工资长度;no(2字符)/yes(3字符)等
    • Auto-suggestions:web服务器根据用户已经输入的部分信息生成一个单词或短语列表。这个列表的大小可以显示用户迄今为止输入的字母的信息(e.g.:"th"远多于“zo”)
    • Database searches:查询数据库返回的记录数量可以揭示很多关于用户正在搜索什么的信息
    • Compressed data:例如,压缩后的短明文表明原始明文有很多冗余。如果对手可以控制被加密的部分内容,这个漏洞可以使对手了解关于明文的额外信息

    如果明文长度不想被泄露,可以在加密之前将所有消息填充到某个预先确定的长度来减轻或防止这种泄漏

3.2.3 *Semantic Security

基本逻辑:安全方案定义是敌人无法从密文中得到任何额外信息(第一章内容)

→ \rightarrow 语义安全就是不泄露任何额外信息

→ \rightarrow “任何”两个字包含的范围太广了,直接证明太难

→ \rightarrow 另辟蹊径,证明定义3(不可区分性)和语义安全是等价的

→ \rightarrow 那我们就从不可区分性入手

→ \rightarrow 从两个较弱的概念(不可区分性中也暗含)中建立语义安全的定义

不可区分 ⇔ \Leftrightarrow 密文不会泄露关于明文单个比特的信息

即从 E n c k ( m ) \mathrm{Enc}_k(m) Enck(m)中盲猜 m i m^i mi,猜中的概率不会比1/2更高( m i m^i mi为明文 m m m的第 i i i个比特),下面是证明

1. 定理1(3.10)
  1. 阐述:

    Π = ( E n c , D e c ) \Pi=(\mathrm{Enc,Dec}) Π=(Enc,Dec)为一个固定长度的私有密钥加密方案,用于长度为 l \mathscr{l} l的消息,在窃听者存在时具有不可区分的加密性,则对于所有PPT攻击者 A \mathcal{A} A都有一个可忽略函数 n e g l \mathrm{negl} negl满足下列不等式( i ∈ { 1 , . . . , l } i\in\left\{1,...,\mathscr{l}\right\} i{1,...,l}
    P r [ A ( 1 n , E n c k ( m ) ) = m i ] ≤ 1 2 + n e g l ( n ) \mathrm{Pr}[\mathcal{A}(1^n,\mathrm{Enc}_k(m))=m^i]\leq\frac{1}{2}+\mathrm{negl}(n) Pr[A(1n,Enck(m))=mi]21+negl(n)
    t h e    p r o b a b i l i t y    i s    t a k e n    o v e r : the\ \ probability\ \ is\ \ taken\ \ over: the  probability  is  taken  over:均匀分布的 m ∈ { 0 , 1 } l , k ∈ { 0 , 1 } n m\in\left\{0,1\right\}^{\mathscr{l}},k\in\left\{0,1\right\}^n m{0,1}l,k{0,1}n A \mathcal{A} A E n c \mathrm{Enc} Enc的随机性

    注意 l \mathscr{l} l n n n的位置,代表的长度

  2. 证明(反证法)

    基本逻辑:

    大前提:方案是 Π \Pi Π不可区分的

    假设: A \mathcal{A} A能从密文中猜到明文的第 i i i个比特

    推论:由 A \mathcal{A} A可以构造出一个 A ′ \mathcal{A}' A,而 A ′ \mathcal{A}' A存在时方案变得可区分

    结果:大前提被打破 → \rightarrow 假设错误 → \rightarrow A \mathcal{A} A不应该存在 → \rightarrow 不可区分 ⇒ \Rightarrow 猜不出第 i i i个比特

    构造另一个敌人的思想也是规约证明中的思想(后文会具体介绍)

    • 如果一个攻击者可以猜出 E n c k ( m ) \mathrm{Enc}_k(m) Enck(m)的第 i i i个比特,那么其可以区分出第 i i i位不同的信息 m 0 , m 1 m_0,m_1 m0,m1(构造如下,我们让两条消息之间仅第 i i i位不同)

      之前 m 0 , m 1 m_0,m_1 m0,m1之间是不具体区分的,但现在是具体区分的(只看第 i i i比特就能区别它俩)

      I 0 ⊂ { 0 , 1 } l I_0\subset\left\{0,1\right\}^{\mathscr{l}} I0{0,1}l,且第 i i i位为0;

      I 1 ⊂ { 0 , 1 } l I_1\subset\left\{0,1\right\}^{\mathscr{l}} I1{0,1}l,且第 i i i位为1.

    • 通过一个简化(归约)(reduction)证明将其形式化:

      A \mathcal{A} A:假如能违背系统 Π \Pi Π中安全概念的定理(即定理1,即大概率可以猜出明文的第 i i i个比特)

      A ’ \mathcal{A}’ A:由 A \mathcal{A} A​构造出来的,可以违背系统 Π \Pi Π中不可区分性的定义

    • 基于上述两点:易知

      P r [ A ( 1 n , E n c k ( m ) ) = m i ] = 1 2 ⋅ P r m 0 ← I 0 [ A ( 1 n , E n c k ( m 0 ) ) = 0 ] + 1 2 ⋅ P r m 1 ← I 1 [ A ( 1 n , E n c k ( m 1 ) ) = 1 ] \begin{aligned} &\mathrm{Pr}[\mathcal{A}(1^n,\mathrm{Enc}_k(m))=m^i]\\ &=\frac{1}{2}\cdot\mathrm{Pr}_{m_0\leftarrow I_0}[\mathcal{A}(1^n,\mathrm{Enc}_k(m_0))=0]+\frac{1}{2}\cdot\mathrm{Pr}_{m_1\leftarrow I_1}[\mathcal{A}(1^n,\mathrm{Enc}_k(m_1))=1] \end{aligned} Pr[A(1n,Enck(m))=mi]=21Prm0I0[A(1n,Enck(m0))=0]+21Prm1I1[A(1n,Enck(m1))=1]

      全概率公式

    • 构造 A ’ \mathcal{A}’ A

      • 均匀地选择 m 0 ∈ I 0 , m 1 ∈ I 1 m_0\in I_0,m_1\in I_1 m0I0,m1I1,输出 m 0 , m 1 m_0,m_1 m0,m1

      • 观察密文 c c c时,调用 A ( 1 n , c ) \mathcal{A}(1^n,c) A(1n,c) A \mathcal{A} A输出0, A ′ \mathcal{A}' A输出 b ′ = 0 b'=0 b=0 A \mathcal{A} A输出1, A ′ \mathcal{A}' A输出 b ′ = 1 b'=1 b=1

        A ′ \mathcal{A}' A运行多项式时间,因为 A \mathcal{A} A如此

        这儿 A \mathcal{A} A A ′ \mathcal{A}' A输出一样只是凑巧罢了,当构造方法变成 m 0 ∈ I 1 , m 1 ∈ I 0 m_0\in I_1,m_1\in I_0 m0I1,m1I0时, A \mathcal{A} A A ′ \mathcal{A}' A输出就不一致了

    • 综上
      P r [ P r i v K A ′ , Π e a v ( n ) = 1 ] = P r [ A ( 1 n , E n c k ( m b ) ) = b ] = 1 2 ⋅ P r m 0 ← I 0 [ A ( 1 n , E n c k ( m 0 ) ) = 0 ] + 1 2 ⋅ P r m 1 ← I 1 [ A ( 1 n , E n c k ( m 1 ) ) = 1 ] = P r [ A ( 1 n , E n c k ( m ) ) = m i ] \begin{aligned} &\mathrm{Pr}[\mathrm{PrivK}^\mathrm{eav}_{\mathcal{A}',\Pi}(n)=1]\\ &=\mathrm{Pr}[\mathcal{A}(1^n,\mathrm{Enc}_k(m_b))=b]\\ &=\frac{1}{2}\cdot\mathrm{Pr}_{m_0\leftarrow I_0}[\mathcal{A}(1^n,\mathrm{Enc}_k(m_0))=0]+\frac{1}{2}\cdot\mathrm{Pr}_{m_1\leftarrow I_1}[\mathcal{A}(1^n,\mathrm{Enc}_k(m_1))=1]\\ &=\mathrm{Pr}[\mathcal{A}(1^n,\mathrm{Enc}_k(m))=m^i] \end{aligned} Pr[PrivKA,Πeav(n)=1]=Pr[A(1n,Enck(mb))=b]=21Prm0I0[A(1n,Enck(m0))=0]+21Prm1I1[A(1n,Enck(m1))=1]=Pr[A(1n,Enck(m))=mi]

      构造方法变为 m 0 ∈ I 1 , m 1 ∈ I 0 m_0\in I_1,m_1\in I_0 m0I1,m1I0时,第二行就变成 P r [ A ( 1 n , E n c k ( m b ) ) = b ˉ ] \mathrm{Pr}[\mathcal{A}(1^n,\mathrm{Enc}_k(m_b))=\bar{b}] Pr[A(1n,Enck(mb))=bˉ]

    • 根据不可区分性,我们易知 P r [ P r i v K A ′ , Π e a v ( n ) = 1 ] ≤ 1 2 + n e g l ( n ) \mathrm{Pr}[\mathrm{PrivK}^\mathrm{eav}_{\mathcal{A}',\Pi}(n)=1]\leq\frac{1}{2}+\mathrm{negl}(n) Pr[PrivKA,Πeav(n)=1]21+negl(n)

      注意这儿是 A ′ \mathcal{A}' A

      故最后得到结论
      P r [ A ( 1 n , E n c k ( m ) ) = m i ] ≤ 1 2 + n e g l ( n ) \mathrm{Pr}[\mathcal{A}(1^n,\mathrm{Enc}_k(m))=m^i]\leq\frac{1}{2}+\mathrm{negl}(n) Pr[A(1n,Enck(m))=mi]21+negl(n)
      证毕

2. 定理2(3.11)

不可区分性意味着,无论发送的消息的分布如何,没有PPT攻击者可以在给定密文的情况下了解明文的任何函数(function)(可以理解成明文的任何信息)

如果有攻击者可以通过 E n c k ( m ) \mathrm{Enc}_k(m) Enck(m)计算 f ( m ) f(m) f(m),那一定存在攻击者不需要密文也能用相同概率计算出 f ( m ) f(m) f(m)(仅知道 m m m的分布)(感觉像一句反讽,没有密文也能算,我听出一丝讽刺)

接下来 m ∈ u n i f o r m S ⊆ { 0 , 1 } l m\in_{uniform} S\subseteq\left\{0,1\right\}^{\mathscr{l}} muniformS{0,1}l(毕竟可能有些值无法取到,这个式子非常严谨)

本质上其实是定理1的一般版本,定理1中的 f ( m ) = 明 文 第 i 个 比 特 f(m)=明文第i个比特 f(m)=i

  1. 阐述:

    ( E n c , D e c ) (\mathrm{Enc,Dec}) (Enc,Dec)为一个固定长度的私有密钥加密方案,用于长度为 l \mathscr{l} l的消息,在窃听者存在时具有不可区分的加密性,则对于任意PPT算法 A \mathcal{A} A,任意 S ⊆ { 0 , 1 } l S\subseteq\left\{0,1\right\}^{\mathscr{l}} S{0,1}l和任意函数 f : { 0 , 1 } l → { 0 , 1 } f:\left\{0,1\right\}^{\mathscr{l}}\rightarrow\left\{0,1\right\} f:{0,1}l{0,1},存在攻击者 A ′ \mathcal{A}' A和可忽略函数 n e g l \mathrm{negl} negl满足下列不等式
    ∣ P r [ A ( 1 n , E n c k ( m ) ) = f ( m ) ] − P r [ A ′ ( 1 n ) = f ( m ) ] ∣ ≤ n e g l ( n ) \bigg\vert\mathrm{Pr}[\mathcal{A}(1^n,\mathrm{Enc}_k(m))=f(m)]-\mathrm{Pr}[\mathcal{A}'(1^n)=f(m)]\bigg\vert\leq \mathrm{negl}(n) Pr[A(1n,Enck(m))=f(m)]Pr[A(1n)=f(m)]negl(n)

    即,有没有密文一个样

    t h e    p r o b a b i l i t y    i s    t a k e n    o v e r : the\ \ probability\ \ is\ \ taken\ \ over: the  probability  is  taken  over:

    1. 均匀选择的 k ∈ { 0 , 1 } n , m ∈ S k\in\left\{0,1\right\}^n,m\in S k{0,1}n,mS A \mathcal{A} A E n c \mathrm{Enc} Enc的随机性
    2. 均匀选择的 m ∈ S m\in S mS A ′ \mathcal{A}' A的随机性
  2. 证明:

    • m 0 = m , m 1 = 1 l m_0=m,m_1=1^{\mathscr{l}} m0=m,m1=1l,由于系统满足EAV-secure,所以PPT攻击者无法分辨 E n c k ( m ) \mathrm{Enc}_k(m) Enck(m) E n c k ( 1 l ) \mathrm{Enc}_k(1^{\mathscr{l}}) Enck(1l)

    • 假如 A \mathcal{A} A可以利用 E n c k ( m ) \mathrm{Enc}_k(m) Enck(m) E n c k ( 1 l ) \mathrm{Enc}_k(1^{\mathscr{l}}) Enck(1l)不同的成功率计算 f ( m ) f(m) f(m),说明 A \mathcal{A} A可以用来区分 E n c k ( m ) \mathrm{Enc}_k(m) Enck(m) E n c k ( 1 l ) \mathrm{Enc}_k(1^{\mathscr{l}}) Enck(1l)

    • 尝试构造区分器:调用 A ( 1 n , c ) \mathcal{A}(1^n,c) A(1n,c) c c c m 0 , m 1 m_0,m_1 m0,m1其中一个加密的结果)

      • A \mathcal{A} A输出 f ( m ) f(m) f(m)时,区分器输出0;

      • A \mathcal{A} A没有输出 f ( m ) f(m) f(m)时,区分器输出1

        由于两者差距明显,所以不满足定义4,所以假设不成立

        首先利用反证法(定理1中用到的),证明 A \mathcal{A} A知道密文的情况下不能推出额外信息

    • A ′ \mathcal{A}' A不接受 c = E n c k ( m ) c=\mathrm{Enc}_k(m) c=Enck(m),但仍然可以尝试计算 f ( m ) f(m) f(m)

      • A ′ ( 1 n ) \mathcal{A}'(1^n) A(1n)均匀选择一个密钥 k ∈ { 0 , 1 } n k\in\left\{0,1\right\}^n k{0,1}n

      • 计算 c ← E n c k ( 1 l ) c\leftarrow\mathrm{Enc}_k(1^{\mathscr{l}}) cEnck(1l),将得到的参数发送给 A \mathcal{A} A

        A \mathcal{A} A可以看做是 A ′ \mathcal{A}' A的一个子程序,注意 c c c是给 A \mathcal{A} A的,没给 A ′ \mathcal{A}' A

      • A \mathcal{A} A输出啥, A ′ \mathcal{A}' A跟着输出就行了

        A \mathcal{A} A说实话也是猜的, A ′ \mathcal{A}' A跟着一起猜罢了

      从宏观来看, A \mathcal{A} A知道密文, A ′ \mathcal{A}' A不知道密文

    • A \mathcal{A} A作为 A ′ \mathcal{A}' A子程序运行时,输出 f ( m ) f(m) f(m)的概率和接收 c = E n c k ( m ) c=\mathrm{Enc}_k(m) c=Enck(m)时输出 f ( m ) f(m) f(m)的概率几乎一样,所以不等式成立

      证毕

3. 定义5(3.12)

真正语义安全的完整定义保证的属性比定理2中考虑得多得多。

比如:

  1. 允许明文的长度取决于安全参数;

  2. 允许明文上进行任意分布。(实际我们只允许有效的抽样分布,这意味着存在一些PPT算法Samp根据分布输出消息)

  3. 考虑到了可能通过其他方式泄露给对手的任意“外部”明文信息 h ( m ) h(m) h(m)(例如,一条消息可能到处乱用)。

  1. 阐述:

    一个私有密钥加密方案 ( E n c , D e c ) (\mathrm{Enc,Dec}) (Enc,Dec),如果对于每个PPT算法 A \mathcal{A} A,存在一个PPT算法 A ′ \mathcal{A}' A,且对于任何PPT算法 S a m p \mathrm{Samp} Samp和多项式时间可计算函数 f , g f,g f,g,以下式子是可以忽略的。则说明该方案在窃听者存在的情况下语义上是安全的(semantically secure in the presence of an eavesdropper
    ∣ P r [ A ( 1 n , E n c k ( m ) , h ( m ) ) = f ( m ) ] − P r [ A ′ ( 1 n , ∣ m ∣ , h ( m ) ) = f ( m ) ] ∣ ≤ n e g l ( n ) \bigg\vert\mathrm{Pr}[\mathcal{A}(1^n,\mathrm{Enc}_k(m),h(m))=f(m)]-\mathrm{Pr}[\mathcal{A}'(1^n,\vert m\vert,h(m))=f(m)]\bigg\vert\leq \mathrm{negl}(n) Pr[A(1n,Enck(m),h(m))=f(m)]Pr[A(1n,m,h(m))=f(m)]negl(n)
    t h e    p r o b a b i l i t y    i s    t a k e n    o v e r : the\ \ probability\ \ is\ \ taken\ \ over: the  probability  is  taken  over:

    1. 均匀选择的 k ∈ { 0 , 1 } n k\in\left\{0,1\right\}^n k{0,1}n,由 S a m p ( 1 n ) \mathrm{Samp}(1^n) Samp(1n)输出的 m m m A \mathcal{A} A E n c \mathrm{Enc} Enc的随机性
    2. S a m p ( 1 n ) \mathrm{Samp}(1^n) Samp(1n)输出的 m m m A ′ \mathcal{A}' A的随机性
  2. 解释:

    • A \mathcal{A} A已知 E n c k ( m ) \mathrm{Enc}_k(m) Enck(m)以及额外信息 h ( m ) h(m) h(m),尝试去猜 f ( m ) f(m) f(m)的值

    • A ′ \mathcal{A}' A仅知道额外信息 h ( m ) h(m) h(m) m m m的长度,尝试去猜 f ( m ) f(m) f(m)的值

      简单讲就是都掌握额外信息 h ( m ) h(m) h(m)时, E n c k ( m ) \mathrm{Enc}_k(m) Enck(m)不会透露 f ( m ) f(m) f(m)的更多信息

4. 定理3(3.13)

A    p r i v a t e − k e y    e n c r y p t i o n    s c h e m e    h a s    i n d i s t i n g u i s h a b l e    e n c r y p t i o n s    i n    t h e p r e s e n c e    o f    a n    e a v e s d r o p p e r    i f    a n d    o n l y    i f    i t    i s    s e m a n t i c a l l y    s e c u r e    i n    t h e p r e s e n c e    o f    a n    e a v e s d r o p p e r . A\ \ private-key\ \ encryption\ \ scheme\ \ has\ \ indistinguishable\ \ encryptions\ \ in\ \ the\\ presence\ \ of\ \ an\ \ eavesdropper\ \ if\ \ and\ \ only\ \ if\ \ it\ \ is\ \ semantically\ \ secure\ \ in\ \ the\\ presence\ \ of\ \ an\ \ eavesdropper. A  privatekey  encryption  scheme  has  indistinguishable  encryptions  in  thepresence  of  an  eavesdropper  if  and  only  if  it  is  semantically  secure  in  thepresence  of  an  eavesdropper.

即,语义安全性(难点)和不可区分性(简单点)之间存在着等价关系

第11章会继续涉及

3.3 Constructing Secure Encryption Schemes

3.3.1 Pseudorandom Generators and Stream Ciphers

3.3.1.1 Pseudorandom Generators(PRGs
  1. 伪随机生成器 G G G使用少量的真实随机性来产生大量的伪随机

    G G G是一种高效的、确定性的算法

  2. 建议查看上一章补充的 m m m序列的含义

  3. 一个好的伪随机生成器( G G G)应该通过所有(有效的)统计检验,即区分器 D D D无法区分PRGs的输出与均匀字符串(uniform string )

    例如:检验是否满足上文提到的** m m m序列**的属性

  4. 说任何固定字符串是“伪随机的”,是没有意义的。就像说任何固定字符串是“随机的”一样,是没有意义的。相反,伪随机性是字符串分布的一种属性。

  5. D i s t \mathrm{Dist} Dist表示 l \mathscr{l} l比特字符串的分布(distribution)

    例如: p ( 00 ) = 0.1 , p ( 01 ) = 0.1 , p ( 10 ) = 0.1 , p ( 11 ) = 0.7 p(00)=0.1,p(01)=0.1,p(10)=0.1,p(11)=0.7 p(00)=0.1,p(01)=0.1,p(10)=0.1,p(11)=0.7

    当从 D i s t \mathrm{Dist} Dist中取的字符串无法和均匀字符串区分时,我们就说 D i s t \mathrm{Dist} Dist是伪随机的

    从实际出发,我们只需要考虑多项式时间的观察者,只要过了他们那关,伪随机字符串和真随机字符串一样好(本质上也是对真随机的一种计算松弛)

    第7章将继续提到

  6. G : { 0 , 1 } n → { 0 , 1 } l G:\left\{0,1\right\}^n\rightarrow \left\{0,1\right\}^{\mathscr{l}} G:{0,1}n{0,1}l,均匀选择种子(seed) s ∈ { 0 , 1 } n s\in\left\{0,1\right\}^n s{0,1}n,通过选择种子获得 l \mathscr{l} l比特字符串的分布 D i s t \mathrm{Dist} Dist,输出 G ( s ) G(s) G(s)

    当且仅当分布 D i s t \mathrm{Dist} Dist是伪随机时,生成器 G G G才是伪随机的

3.3.1.2 定义6(3.14)
1. 阐述

l \mathscr{l} l是一个多项式; G G G是一个确定性多项式时间算法;对于任何 n n n和任何输入 s ∈ { 0 , 1 } n s\in \left\{0,1\right\}^n s{0,1}n,输出结果 G ( s ) G(s) G(s)是长为 l ( n ) \mathscr{l}(n) l(n)的字符串;如果 G G G满足下面两点,就说它是伪随机生成器:

  • (扩展性:)对于任何 n n n l ( n ) > n \mathscr{l}(n)>n l(n)>n

    必要条件,不然没有意义

  • (伪随机性:)对于任何PPT算法 D D D,存在一个 negl \text{negl} negl满足下面的条件
    ∣ P r [ D ( G ( s ) ) = 1 ] − P r [ D ( r ) = 1 ] ∣ ≤ n e g l ( n ) \vert \mathrm{Pr}[D(G(s))=1]-\mathrm{Pr}[D(r)=1]\vert\leq \mathrm{negl}(n) Pr[D(G(s))=1]Pr[D(r)=1]negl(n)
    t h e    p r o b a b i l i t y    i s    t a k e n    o v e r : the\ \ probability\ \ is\ \ taken\ \ over: the  probability  is  taken  over:

    1. 均匀选择的 s ∈ { 0 , 1 } n s\in\left\{0,1\right\}^n s{0,1}n D D D的随机性
    2. 均匀选择的 r ∈ { 0 , 1 } l ( n ) r\in\left\{0,1\right\}^{\mathscr{l}(n)} r{0,1}l(n) D D D的随机性

    注意 D D D只是觉得输入是伪随机就输出1,但实际结果可不一定对

    l \mathscr{l} l称为 G G G的扩展因子(expansion factor)

2. 举例
  • G ( s ) G(s) G(s)的输出为种子后跟一个比特,该比特为 ⊕ i = 1 n s i \oplus^n_{i=1}s_i i=1nsi,即 l ( n ) = n + 1 \mathscr{l}(n)=n+1 l(n)=n+1

  • 区分器 D D D的构造为:对于一个输入 w w w,当且仅当最后一位等于前面所有比特的异或(XOR)时,输出1

  • P r [ D ( G ( s ) ) = 1 ] = 1 \mathrm{Pr}[D(G(s))=1]=1 Pr[D(G(s))=1]=1 P r [ D ( r ) = 1 ] = 1 2 \mathrm{Pr}[D(r)=1]=\frac{1}{2} Pr[D(r)=1]=21 ∣ 1 − 1 2 ∣ \vert1-\frac{1}{2}\vert 121不是 negl \text{negl} negl

  • 所以 G G G不是伪随机生成器

    注意 D D D不是永远都是正确的

3. 几个注意要点
  • PRG的输出实际上和真随机输出相差很多

    设一个 G G G的输出 l ( n ) = 2 n → \mathscr{l}(n)=2n\rightarrow l(n)=2n

    均匀随机分布的空间是 2 2 n → 2^{2n}\rightarrow 22n

    每个可能的字符串被选择的概率正好为 2 − 2 n → 2^{-2n}\rightarrow 22n

    但由于种子的空间是 2 n → 2^n\rightarrow 2n

    所以 G G G的输出空间最多只有 2 n → 2^n\rightarrow 2n

    一个随机的长度为 2 n 2n 2n的比特串在 G G G的范围中的概率最多只有 2 n / 2 2 n = 2 − n → 2^n/2^{2n}=2^{-n}\rightarrow 2n/22n=2n

    大部分长度为 2 n 2n 2n的字符串不会作为 G G G的输出。

  • 暴力攻击:将所有种子的输出都算出来放在一个集合 S S S里,区分器查看输入 w w w在不在集合 S S S中,如果在,则输出1。该攻击满足:
    ∣ P r [ D ( G ( s ) ) = 1 ] − P r [ D ( r ) = 1 ] ∣ ≥ 1 − 2 − n \vert \mathrm{Pr}[D(G(s))=1]-\mathrm{Pr}[D(r)=1]\vert\geq1-2^{-n} Pr[D(G(s))=1]Pr[D(r)=1]12n

    注意该攻击成功率是非常高的,也变相说明攻击时间无限大时,区分真伪很容易

    本质精神就是:宁错杀,不放过

  • 种子及其长度

    • PRG的种子类似于加密方案使用的加密密钥,必须统一选择种子,并对任何对手保密
    • 必须足够长,以致于不可能枚举所有可能的种子
    • 种子长度可由安全参数决定
  • 关于PRG的存在性

    • 目前无法证明PRG的存在性,PRG难以构造

    • 可以基于较弱的假设(单向函数存在)进行构造

      第七章将继续讨论

    • PRG候选构造有流密码和分组密码

      接下来会进行讨论,其中流密码在第六章会深入讨论

3.3.1.3 流密码(Stream Ciphers)
1. 注意要点:
  • 之前定义的PRG有两个限制:扩展因子 l \mathscr{l} l是固定的,生成器一次性生成它的全部输出。

  • 流密码顾名思义,输出位是根据需要逐比特产生的,因此应用程序可以根据需要请求任意多的伪随机位

  • 流密码具有更高的有效性(可以请求足够少的位数)和灵活性(请求位数没有限制)。

  • 流密码由一对确定性算法 (Init,GetBits) \textsf{(Init,GetBits)} (Init,GetBits)组成

    • I n i t \mathrm{Init} Init:输入种子 s s s和可选择的初始向量(initialization vector) I V IV IV,并输出一个初始状态 st 0 \text{st}_0 st0

    • G e t B i t s \mathrm{GetBits} GetBits:输入状态信息 st i \text{st}_i sti,并输出一个比特 y y y和更新后的状态 st i + 1 \text{st}_{i+1} sti+1

      实际操作中, y y y是一个包含好几个比特的比特分组

2. 算法1(3.16)

给定一个流密码和期望的扩展因子 l \mathscr{l} l,构造将长度 n n n映射到 l ( n ) \mathscr{l}(n) l(n)的算法 G l G_{\mathscr{l}} Gl

输入:种子 s s s,可选择的初始向量 I V IV IV

输出: y 1 , . . . , y l y_1,...,y_{\mathscr{l}} y1,...,yl

流程:

st_0:=Init(s,IV)
for i=1 to l:
	(y_i,st_i):=GetBits(st_i-1)
return y_1,...,y_l

运行一次 Init \textsf{Init} Init,运行 l \mathscr{l} l GetBits \textsf{GetBits} GetBits

3.3.2 规约证明(Proofs by Reduction)

1. 基本思路

为了证明一个方案是计算安全的,我们的首先假设某个数学问题是困难的,或某个低级别的密码学原语是安全的,然后证明基于这个困难问题或密码学原语的构造是安全的。

这里的“困难”指问题X不能通过任何多项式时间算法以不是可忽略的概率被解决。

即,只要构造所依赖的问题是困难的,则给定的构造方案就是安全的。

比如RSA公钥加密算法就是建立在大数分解困难问题上。

逻辑证明的一般思路:敌手 A \mathcal{A} A成功攻破构造→算法 A ′ \mathcal{A}' A解决困难问题

2. 形式化定义

如图:

在这里插入图片描述

下面解释该图

  1. 指定一个有效的(概率多项式时间)敌手 A \mathcal{A} A攻击 Π \Pi Π A \mathcal{A} A成功攻破 Π \Pi Π的概率为 ε ( n ) \varepsilon(n) ε(n)

  2. 构造一个“规约”算法 A ′ \mathcal{A}' A,这个算法将 A \mathcal{A} A作为子程序来解决困难问题 X \text{X} X A ’ \mathcal{A}’ A不知道 A \mathcal{A} A如何工作,只知道 A \mathcal{A} A试图攻击 Π \Pi Π A ′ \mathcal{A}' A会根据 X \text{X} X的实例 x \text{x} x A \mathcal{A} A模拟出一个实例 Π \Pi Π

    a. A \mathcal{A} A只与 Π \Pi Π进行交互, A \mathcal{A} A作为 A ′ \mathcal{A}' A子程序运行的视图(view)和 A \mathcal{A} A Π \Pi Π交互的视图在分布上是一样的。

    b. 如果 A \mathcal{A} A成功攻破 A ′ \mathcal{A}' A模拟的实例 Π \Pi Π,则 A ′ \mathcal{A}' A解决 X \text{X} X的实例 x \text{x} x的概率至少是多项式的倒数 1 / p ( n ) 1/p(n) 1/p(n)

    即概率不再negligible

  3. 结合2.a和2.b,我们可以知道 A ′ \mathcal{A}' A解决 X \text{X} X的概率为 ε ( n ) / p ( n ) \varepsilon(n)/p(n) ε(n)/p(n),如果 ε ( n ) \varepsilon(n) ε(n)是不可忽略的,那 ε ( n ) / p ( n ) \varepsilon(n)/p(n) ε(n)/p(n)同样也是不可忽略的,这与最初的假设矛盾

    ε ( n ) / p ( n ) \varepsilon(n)/p(n) ε(n)/p(n)怎么得出来的,参考命题1的第二条性质

  4. 因此得出结论,给定一个关于 X \text{X} X的假设,不存在有效的敌手能够以不可忽略的概率成功攻破 Π \Pi Π Π \Pi Π是计算安全的。

3. 强化理解

结合定理1,将角色一一对应

  • 定理1的 A \mathcal{A} A A ′ \mathcal{A}' A分别对应规约证明的 A \mathcal{A} A A ′ \mathcal{A}' A

  • X → \text{X}\rightarrow X系统的不可区分性

  • x → \text{x}\rightarrow x猜出系统输出的密文所对应明文的第 i i i个比特

  • 如果 A \mathcal{A} A可以攻破 Π \Pi Π,那 A ′ \mathcal{A}' A可以通过调用 A \mathcal{A} A来解决 x \text{x} x

    A \mathcal{A} A能攻破系统就是因为 A \mathcal{A} A本身也能解决 x \text{x} x

  • A ′ \mathcal{A}' A如果能解决 x \text{x} x,那自然也能解决 X \text{X} X

理解记忆:推翻假设叫反证,构造其他叫规约

3.3.3 A Secure Fixed-Length Encryption Scheme

1. 基本思路

将one-time pad 里的真随机pad,用PRG生成的伪随机pad代替,如下图所示:

在这里插入图片描述

所以该方案也可以叫做 “pseudo-”one-time pad

2. 结构1(3.17)

设消息长度为 l \mathscr{l} l G G G是一个扩展因子也为 l \mathscr{l} l的伪随机生成器

∣ G ( s ) ∣ = l ( ∣ s ∣ ) ) \vert G(s)\vert=\mathscr{l}(\vert s\vert)) G(s)=l(s))

  • G e n \mathrm{Gen} Gen:输入 1 n 1^n 1n,均匀选择密钥 k ∈ { 0 , 1 } n k\in{\left\{0,1\right\}}^n k{0,1}n,并输出密钥 k k k

  • E n c \mathrm{Enc} Enc:输入密钥 k ∈ { 0 , 1 } n k\in{\left\{0,1\right\}}^n k{0,1}n,明文 m ∈ { 0 , 1 } l ( n ) m\in{\left\{0,1\right\}}^{\mathscr{l}(n)} m{0,1}l(n),输出密文

    l ( n ) \mathscr{l}(n) l(n)表示消息长度 l \mathscr{l} l由安全参数 n n n决定

    c : = G ( k ) ⊕ m c:=G(k)\oplus m c:=G(k)m

  • D e c \mathrm{Dec} Dec:输入密钥 k ∈ { 0 , 1 } n k\in{\left\{0,1\right\}}^n k{0,1}n,密文 c ∈ { 0 , 1 } l ( n ) c\in{\left\{0,1\right\}}^{\mathscr{l}(n)} c{0,1}l(n),输出明文
    m : = G ( k ) ⊕ c m:=G(k)\oplus c m:=G(k)c

A private-key encryption scheme based on any pseudorandom generator.

3. 定理4(3.18)

如果 G G G是一个伪随机生成器,那么结构1是一个 在窃听者存在时具有不可区分加密 的 固定长度的私有密钥加密方案(Fixed-Length Encryption Scheme

4. 定理4的证明

思路:

证明这个定理的最关键的一点就是将窃听实验(定义3)和区分器区分实验(定义6)结合在一起从而构造关系。(虽然这两个看起来很像)

通过敌手 A \mathcal{A} A构造一个区分器 D D D,将 D D D区分 G G G的输出与一个随机字符串的能力 直接与 A \mathcal{A} A分辨 Π \Pi Π加密明文的能力 建立联系。即区分器将敌手 A \mathcal{A} A作为自己的一个子程序来完成区分实验。

G G G的安全性隐含着的 Π \Pi Π安全性

  1. 构造区分器 D D D

    输入字符串 w ∈ { 0 , 1 } l ( n ) w\in{\left\{0,1\right\}}^{\mathscr{l}(n)} w{0,1}l(n)

    • 运行 A ( 1 n ) \mathcal{A}(1^n) A(1n)获得一对明文消息 m 0 , m 1 ∈ { 0 , 1 } l ( n ) m_0,m_1\in{\left\{0,1\right\}}^{\mathscr{l}(n)} m0,m1{0,1}l(n)
    • 均匀选择一个比特 b ∈ { 0 , 1 } b\in{\left\{0,1\right\}} b{0,1},令 c : = w ⊕ m b c:=w\oplus m_b c:=wmb
    • c c c A \mathcal{A} A,并得到一个输出 b ′ b' b。如果 b ′ = b b'=b b=b,输出1;如果 b ′ ≠ b b'\neq b b=b,输出0

    D D D是PPT算法,因为 A \mathcal{A} A也是

  2. 构造真一次一密加密方案 Π ~ = ( Gen ~ , Enc ~ , Dec ~ ) \widetilde{\Pi}=(\widetilde{\textsf{Gen}},\widetilde{\textsf{Enc}},\widetilde{\textsf{Dec}}) Π =(Gen ,Enc ,Dec )

    • 均匀选择 m , k ∈ { 0 , 1 } l ( n ) m,k\in{\left\{0,1\right\}}^{\mathscr{l}(n)} m,k{0,1}l(n)
    • c : = k ⊕ m c:=k\oplus m c:=km
    • P r [ P r i v K A , Π ~ eav ( n ) = 1 ] = 1 2 \mathrm{Pr}[\mathrm{PrivK}^\textsf{eav}_{\mathcal{A},\widetilde{\Pi}}(n)=1]=\frac{1}{2} Pr[PrivKA,Π eav(n)=1]=21
  3. 区分器就是区分以下两种情况

    • 真随机情况,即 w w w { 0 , 1 } l ( n ) {\left\{0,1\right\}}^{\mathscr{l}(n)} {0,1}l(n)中均匀选择,则有以下等式

      这时 A \mathcal{A} A作为 D D D的子程序运行 等价于 A \mathcal{A} A运行在实验 P r i v K A , Π ~ eav ( n ) \mathrm{PrivK}^\textsf{eav}_{\mathcal{A},\widetilde{\Pi}}(n) PrivKA,Π eav(n)

      Pr w ← { 0 , 1 } l ( n ) [ D ( w ) = 1 ] = Pr [ P r i v K A , Π ~ eav ( n ) = 1 ] = 1 2 (1) \text{Pr}_{w\leftarrow{\left\{0,1\right\}}^{\mathscr{l}(n)}}[D(w)=1]=\text{Pr}\Big[\mathrm{PrivK}^\textsf{eav}_{\mathcal{A},\widetilde{\Pi}}(n)=1\Big]=\frac{1}{2} \tag{1} Prw{0,1}l(n)[D(w)=1]=Pr[PrivKA,Π eav(n)=1]=21(1)

    • 伪随机情况,即 w w w通过均匀选择 k ∈ { 0 , 1 } n k\in{\left\{0,1\right\}}^n k{0,1}n来生成,即 w : = G ( k ) w:=G(k) w:=G(k),则有以下等式

      这时 A \mathcal{A} A作为 D D D的子程序运行 等价于 A \mathcal{A} A运行在实验 P r i v K A , Π e a v ( n ) \mathrm{PrivK}^\mathrm{eav}_{\mathcal{A},\Pi}(n) PrivKA,Πeav(n)

      Pr k ← { 0 , 1 } n [ D ( G ( k ) ) = 1 ] = Pr [ P r i v K A , Π eav ( n ) = 1 ] (2) \text{Pr}_{k\leftarrow{\left\{0,1\right\}}^n}[D(G(k))=1]=\text{Pr}\Big[\mathrm{PrivK}^\textsf{eav}_{\mathcal{A},\Pi}(n)=1\Big] \tag{2} Prk{0,1}n[D(G(k))=1]=Pr[PrivKA,Πeav(n)=1](2)

  4. 因为 G G G是伪随机生成器,所以根据定义6,可得
    ∣ Pr w ← { 0 , 1 } l ( n ) [ D ( w ) = 1 ] − Pr k ← { 0 , 1 } n [ D ( G ( k ) ) = 1 ] ∣ ≤ negl ( n ) \bigg\vert\text{Pr}_{w\leftarrow{\left\{0,1\right\}}^{\mathscr{l}(n)}}[D(w)=1]-\text{Pr}_{k\leftarrow{\left\{0,1\right\}}^n}[D(G(k))=1]\bigg\vert\leq\texttt{negl}(n) Prw{0,1}l(n)[D(w)=1]Prk{0,1}n[D(G(k))=1]negl(n)
    结合等式(1)(2),可得
    ∣ 1 2 − Pr [ P r i v K A , Π eav ( n ) = 1 ] ∣ ≤ negl ( n ) \bigg\vert\frac{1}{2}-\text{Pr}\big[\mathrm{PrivK}^\textsf{eav}_{\mathcal{A},\Pi}(n)=1\big]\bigg\vert\leq\texttt{negl}(n) 21Pr[PrivKA,Πeav(n)=1]negl(n)
    该式等价于:
    Pr [ P r i v K A , Π eav ( n ) = 1 ] ≤ 1 2 + negl ( n ) \text{Pr}\big[\mathrm{PrivK}^\textsf{eav}_{\mathcal{A},\Pi}(n)=1\big]\leq\frac{1}{2}+\texttt{negl}(n) Pr[PrivKA,Πeav(n)=1]21+negl(n)
    发现该式就是定义3中的式子,所以 A \mathcal{A} A是一个PPT敌手时,方案 Π \Pi Π达到EAV-secure

    证毕

    其实这儿也用到了规约证明的思想:假设 A \mathcal{A} A可以区分 G G G的输出和随机均匀的字符串,那么就可以构造出一个有效的区分器 D D D,这样就打破了 G G G是伪随机生成器的大前提

    或者也可以这么理解,大前提不变的情况下,还能构造出这样一个 D D D,打破的就是真随机比特的不可预测性了!

5 补充
  1. 本章最佳:It is easy to get lost in the details of the proof (P69最后一段开头)
  2. 通过计算安全的概念,我们绕过了完美加密中密钥至少和明文等长的限制,使得密码学有了更多的可能性
  3. 规约证明使我们可以用较底层的密码学原语去证明较高层的密码学原语,而较底层的原语容易构造,使得其更容易移植于其它方案(模块化)

3.4 Stronger Security Notions

安全定义包含安全目标与攻击模型

接下来两个概念,一个修改现在的安全目标,一个修改现在的攻击模型

3.4.1 Security for Multiple Encryptions

之前窃听者只能得到一条消息(参考3.2.2中 P r i v K A , Π e a v ( n ) \mathrm{PrivK}^\mathrm{eav}_{\mathcal{A},\Pi}(n) PrivKA,Πeav(n)第3点),现在能得到多条消息(同一密钥加密)

1. The multiple-message eavesdropping experiment P r i v K A , Π m u l t ( n ) \mathrm{PrivK}^\mathrm{mult}_{\mathcal{A},\Pi}(n) PrivKA,Πmult(n)
  1. 给敌手 A \mathcal{A} A输出 1 n 1^n 1n,其输出一对等长的消息列表( lists \texttt{lists} lists) M 0 ⃗ = ( m 0 , 1 , . . . , m 0 , t ) , M 1 ⃗ = ( m 1 , 1 , . . . , m 1 , t ) \vec{M_0}=(m_{0,1},...,m_{0,t}),\vec{M_1}=(m_{1,1},...,m_{1,t}) M0 =(m0,1,...,m0,t),M1 =(m1,1,...,m1,t),其中 ∣ m 0 , i ∣ = ∣ m 1 , i ∣ \vert m_{0,i}\vert=\vert m_{1,i}\vert m0,i=m1,i
  2. 运行 Gen ( 1 n ) \textsf{Gen}(1^n) Gen(1n)生成一个密钥 k k k,均匀选择一个比特 b ∈ { 0 , 1 } b\in{\left\{0,1\right\}} b{0,1},计算 c i ← Enc k ( m b , i ) c_i\leftarrow\textsf{Enc}_k(m_{b,i}) ciEnck(mb,i),并将生成的列表 C ⃗ = ( c 1 , . . . , c t ) \vec{C}=(c_1,...,c_t) C =(c1,...,ct)交给 A \mathcal{A} A
  3. A \mathcal{A} A输出一个比特 b ′ b' b
  4. 如果 b ′ = b b'=b b=b,输出1;如果 b ′ ≠ b b'\neq b b=b,输出0

注意联系 P r i v K A , Π e a v ( n ) \mathrm{PrivK}^\mathrm{eav}_{\mathcal{A},\Pi}(n) PrivKA,Πeav(n)

2. 定义7(3.19)

如果对于所有PPT攻击者 A \mathcal{A} A都有一个可忽略函数 negl \textsf{negl} negl满足下列不等式,则说明加密方案 Π = ( G e n , E n c , D e c ) \Pi=(\mathrm{Gen,Enc,Dec}) Π=(Gen,Enc,Dec)在存在窃听者的情况下具有不可区分的消息加密性(indistinguishable multiple encryptions in the presence of an eavesdropper)
P r [ P r i v K A , Π m u l t ( n ) = 1 ] ≤ 1 2 + negl ( n ) \mathrm{Pr}\Big[\mathrm{PrivK}^\mathrm{mult}_{\mathcal{A},\Pi}(n)=1\Big]\leq\frac{1}{2}+\textsf{negl}(n) Pr[PrivKA,Πmult(n)=1]21+negl(n)
t h e    p r o b a b i l i t y    i s    t a k e n    o v e r : the\ \ probability\ \ is\ \ taken\ \ over: the  probability  is  taken  over: A \mathcal{A} A的随机性,实验中所用的随机性( E n c \mathrm{Enc} Enc

注意联系定义3理解

定义7的强度明显比定义3要强,因为 P r i v K A , Π e a v ( n ) \mathrm{PrivK}^\mathrm{eav}_{\mathcal{A},\Pi}(n) PrivKA,Πeav(n)更像是 P r i v K A , Π m u l t ( n ) \mathrm{PrivK}^\mathrm{mult}_{\mathcal{A},\Pi}(n) PrivKA,Πmult(n)的一种特殊情况

3. 命题2(3.20)
  1. 阐述:

    存在一种私有密钥加密方案,它在窃听者存在时具有不可区分的加密,但在窃听者存在时不具有不可区分的消息加密。

  2. 证明:

    一次一密(满足EAV-secure)就是个很好的例子。

    例如:令 M ⃗ 0 = ( 0 l , 0 l ) , M ⃗ 1 = ( 0 l , 1 l ) \vec{M}_0=({0^\mathscr{l},0^\mathscr{l}}),\vec{M}_1=({0^\mathscr{l},1^\mathscr{l}}) M 0=(0l,0l),M 1=(0l,1l) A \mathcal{A} A收到 C ⃗ = ( c 1 , c 2 ) \vec{C}=(c_1,c_2) C =(c1,c2)

    ​ 当 c 1 = c 2 c_1=c_2 c1=c2时, A \mathcal{A} A输出0;当 c 1 ≠ c 2 c_1\neq c_2 c1=c2时, A \mathcal{A} A输出1

  3. 概率加密的必要性

    当加密方案是确定性的情况下,对同一消息进行多次加密(使用相同的密钥)总是会产生相同的结果,这样永远也不可能达到多加密的安全目标。所以我们必须用到概率加密。如下面定理5所述

4. 定理5(3.21)

如果 Π \Pi Π是一个(无状态)加密方案,其中 Enc \textsf{Enc} Enc是以密钥和消息为输入的确定性函数,那 Π \Pi Π在窃听者存在时不具有不可区分的多消息加密。

如果方案是有状态的(stateful),那加密是确定性的倒是也可以

定义7看起来强,但是其实比定义3更贴近实际情况

3.4.2 Chosen-Plaintext Attacks and CPA-Security

1. Chosen-Plaintext Attacks
  1. 攻击者让诚实的双方用密钥 k k k加密 m 1 , m 2 , . . m_1,m_2,.. m1,m2,..然后截获到加密后的密文

    可以理解为攻击者获得通信双方的一部分控制权

    这儿的 m 1 , m 2 , . . m_1,m_2,.. m1,m2,..只是说明这是若干条消息

  2. 我们希望就算敌人有上面的信息,也没办法判断新截获的未知密文(仍然是用 k k k加密的)是 m 0 , m 1 m_0,m_1 m0,m1中哪个加密的结果

    1. 该密文解密后甚至可能会得到之前加密过的明文

    2. 这儿的 m 0 和 m 1 m_0和m_1 m0m1只是为了说明密文解密结果是条消息中的一条,所以这步的 m 1 m_1 m1和第一步的 m 1 m_1 m1不一定一样

  3. 选择明文攻击包括了已知明文攻击(known-plaintext attack)

  4. CPA(Chosen-Plaintext Attacks)在中途岛战役中立大功

2. The CPA indistinguishability experiment P r i v K A , Π cpa ( n ) \mathrm{PrivK}^\textsf{cpa}_{\mathcal{A},\Pi}(n) PrivKA,Πcpa(n)
  1. 运行 Gen ( 1 n ) \textsf{Gen}(1^n) Gen(1n)生成一个密钥 k k k

  2. 给敌手 A \mathcal{A} A输出 1 n 1^n 1n Enc k ( ⋅ ) \textsf{Enc}_k(\cdot) Enck()的预言机访问权限(oracle access),其输出一对等长的消息 m 0 , m 1 m_0,m_1 m0,m1

    预言机就是一个"黑盒"(black box),你输进去一个东西,它返回给你一个东西,但你并不知道它的内部构造;就像你在和一个人交流,但你其实并不知道他的真实想法。

  3. 均匀选择一个比特 b ∈ { 0 , 1 } b\in{\left\{0,1\right\}} b{0,1},计算 c ← Enc k ( m b ) c\leftarrow\textsf{Enc}_k(m_{b}) cEnck(mb),并将计算结果交给 A \mathcal{A} A

  4. 敌手 A \mathcal{A} A继续拥有 Enc k ( ⋅ ) \textsf{Enc}_k(\cdot) Enck()的预言机访问权限,并输出比特 b ′ b' b

    这块就是敌手获得额外信息的方式,敌手可以知道该步骤中加密过程涉及到的明密文对,但这些加密过程无法透露出上面第二步加密过程的任何信息,即使你用的密钥和明文都一样。

    这个可以帮助理解定理6(3.24)

  5. 如果 b ′ = b b'=b b=b,输出1,即 A \mathcal{A} A攻击成功;如果 b ′ ≠ b b'\neq b b=b,输出0

本次实验使用的是加密预言机encryption oracle),意思是它会把你输进去的东西加密并返回给你

3. 定义8(3.22)

如果对于所有PPT攻击者 A \mathcal{A} A都有一个可忽略函数 negl \textsf{negl} negl满足下列不等式,则说明加密方案 Π = ( G e n , E n c , D e c ) \Pi=(\mathsf{Gen,Enc,Dec}) Π=(Gen,Enc,Dec)在选择明文攻击下具有不可区分的加密性(indistinguishable encryptions under a chosen-plaintext attack,即 CPA-secure \textsf{CPA-secure} CPA-secure
P r [ P r i v K A , Π cpa ( n ) = 1 ] ≤ 1 2 + negl ( n ) \mathrm{Pr}\Big[\mathrm{PrivK}^\textsf{cpa}_{\mathcal{A},\Pi}(n)=1\Big]\leq\frac{1}{2}+\textsf{negl}(n) Pr[PrivKA,Πcpa(n)=1]21+negl(n)
t h e    p r o b a b i l i t y    i s    t a k e n    o v e r : the\ \ probability\ \ is\ \ taken\ \ over: the  probability  is  taken  over: A \mathcal{A} A的随机性,实验中所用的随机性( E n c \mathrm{Enc} Enc

4. The LR-oracle experiment P r i v K A , Π LR-cpa ( n ) \mathrm{PrivK}^\textsf{LR-cpa}_{\mathcal{A},\Pi}(n) PrivKA,ΠLR-cpa(n)

这个实验是为了把CPA扩展到multiple而服务的

  1. 运行 Gen ( 1 n ) \textsf{Gen}(1^n) Gen(1n)生成一个密钥 k k k

  2. 均匀选择一个比特 b ∈ { 0 , 1 } b\in{\left\{0,1\right\}} b{0,1}

  3. 给敌手 A \mathcal{A} A输出 1 n 1^n 1n LR k , b ( ⋅ , ⋅ ) \textsf{LR}_{k,b}(\cdot,\cdot) LRk,b(,)的预言机权限

    LR k , b \textsf{LR}_{k,b} LRk,b叫做"left-or-right" oracle:对于 m 0 , m 1 m_0,m_1 m0,m1(长度相等),计算 c ← Enc k ( m b ) c\leftarrow\textsf{Enc}_k(m_b) cEnck(mb),当 b = 0 b=0 b=0时,敌手获得“左(left)”密文的加密结果;当 b = 1 b=1 b=1时,敌手获得”右(right)“密文的加密结果。(目前为止还只是一个普通的加密预言机)

    攻击者可以连续发送请求 LR k , b ( m 0 , 1 , m 1 , 1 ) , . . . , LR k , b ( m 0 , t , m 1 , t ) \textsf{LR}_{k,b}(m_{0,1},m_{1,1}),...,\textsf{LR}_{k,b}(m_{0,t},m_{1,t}) LRk,b(m0,1,m1,1),...,LRk,b(m0,t,m1,t)(这儿的意思就是可以进行多次查询,成功将multiple encryptions引入)
    这种设计:

    进可攻:1. 结构简单(不用费劲创造俩列表了);2. 可以将敌手(在已经获得之前查询的密文之后还能)自适应(adaptively)选择明文加密的能力建模处理

    退可守: A \mathcal{A} A想要知道 Enc k ( m ) \textsf{Enc}_k(m) Enck(m)只需要查询 LR k , b ( m , m ) \textsf{LR}_{k,b}(m,m) LRk,b(m,m)(即敌手拥有加密预言机的访问权限)

    堪称完美

  4. 敌手 A \mathcal{A} A输出比特 b ′ b' b

  5. 如果 b ′ = b b'=b b=b,输出1,即 A \mathcal{A} A攻击成功;如果 b ′ ≠ b b'\neq b b=b,输出0

5. 定义9(3.23)

如果对于所有PPT攻击者 A \mathcal{A} A都有一个可忽略函数 negl \textsf{negl} negl满足下列不等式,则说明加密方案 Π \Pi Π在选择明文攻击下具有不可区分的消息加密性(indistinguishable multiple encryptions under a chosen-plaintext attack,即 CPA-secure   for   multiple   encryptions \textsf{CPA-secure\ for\ multiple encryptions} CPA-secure for multiple encryptions
P r [ P r i v K A , Π LR-cpa ( n ) = 1 ] ≤ 1 2 + negl ( n ) \mathrm{Pr}\Big[\mathrm{PrivK}^\textsf{LR-cpa}_{\mathcal{A},\Pi}(n)=1\Big]\leq\frac{1}{2}+\textsf{negl}(n) Pr[PrivKA,ΠLR-cpa(n)=1]21+negl(n)

t h e    p r o b a b i l i t y    i s    t a k e n    o v e r : the\ \ probability\ \ is\ \ taken\ \ over: the  probability  is  taken  over: A \mathcal{A} A的随机性,实验中所用的随机性( E n c \mathrm{Enc} Enc

6. 定理6(3.24)

任何 CPA-secure \textsf{CPA-secure} CPA-secure的私有密钥加密方案也是 CPA-secure   for   multiple   encryptions \textsf{CPA-secure\ for\ multiple encryptions} CPA-secure for multiple encryptions

与命题2中窃听攻击者的情况不太一样。因此,目前针对选择明文攻击的安全性是加密方案应满足的最小安全性概念

这个看起来有点荒谬,因为弱概念和强概念等价了。

我的理解:CPA-secure本质上是隐藏某次加密的过程,就算两次加密过程用到的明文密钥都一样,但结果却可能不一样,既然每次加密的过程都能被隐藏,那么隐藏多条和隐藏一条也就没区别了。放到 P r i v K A , Π LR-cpa ( n ) \mathrm{PrivK}^\textsf{LR-cpa}_{\mathcal{A},\Pi}(n) PrivKA,ΠLR-cpa(n)中理解,单个 LR k , b ( m 0 , i , m 1 , i ) , i ∈ [ 0 , t ] \textsf{LR}_{k,b}(m_{0,i},m_{1,i}),i\in[0,t] LRk,b(m0,i,m1,i),i[0,t]啥也泄露不了,那所有加起来自然也就啥都泄露不了(0+0+…+0=0)

公钥设置的类似结果在11.2.2中得到了证明。

7. 固定(fixed)vs. 任意(arbitrary)

CPA安全的另一个优势是使得满足CPA安全的定长加密方案不失一般性(可处理任意长消息)。通过对消息进行分割(应该还有填充)后分别加密,根据定理6,可实现满足CPA安全的任意长加密方案,如下:
E n c k ′ ( m ) = E n c k ( m 1 ) , . . . , E n c k ( m l ) \mathrm{Enc}_{k}'(m)=\mathrm{Enc}_{k}(m_1),...,\mathrm{Enc}_{k}(m_{\mathscr{l}}) Enck(m)=Enck(m1),...,Enck(ml)

后文还有详述

3.5 Constructing CPA-Secure Encryption Schemes

逻辑和3.3有点像哦(光看标题)

3.5.1 Pseudorandom Functions and Block Ciphers

3.5.1.1 Pseudorandom Functions(PRFs)

很多情况下与哈希函数概念混用

1. 基本信息
  1. 不再像PRG一样考虑一个“看起来随机(random-looking)”的字符串(string),而是开始考虑一个“random-looking”的函数(function)

    function:一种映射关系,如图:

    在这里插入图片描述

    string是单个 m i m_i mi c j c_j cj的“桥”,可以理解成一个箭头

    function是所有 m i m_i mi c j c_j cj的“桥”,可以理解成所有箭头组成的集合

  2. 说任何固定函数是“伪随机的”,是没有意义的。就像说任何固定函数是“随机的”一样,是没有意义的。因此,我们必须转而提及函数分布的伪随机性。这种分布是通过考虑keyed function(见下)自然产生的。

    和PRG定义类似(详见3.3.1.1第4点)

2. keyed function F F F(密钥函数)

我个人也倾向于叫键控函数

书上叫做带密钥的函数

  1. F : { 0 , 1 } ∗ × { 0 , 1 } ∗ → { 0 , 1 } ∗ F:\left\{0,1\right\}^*\times\left\{0,1\right\}^*\rightarrow\left\{0,1\right\}^* F:{0,1}×{0,1}{0,1}(二输出),即 F ( k , x ) F(k,x) F(k,x)

    F F F是个PPT算法(efficient), k k k x x x是给定的两个输入

  2. 密钥 k k k通常是固定的,故通常使用 F k : { 0 , 1 } ∗ → { 0 , 1 } ∗ F_k:\left\{0,1\right\}^*\rightarrow\left\{0,1\right\}^* Fk:{0,1}{0,1}(单输入),即 F k ( x ) = F ( k , x ) F_k(x)=F(k,x) Fk(x)=F(k,x)

  3. k ∈ { 0 , 1 } l k e y ( n ) , x ∈ { 0 , 1 } l i n ( n ) , F k ∈ { 0 , 1 } l o u t ( n ) k\in\left\{0,1\right\}^{\mathscr{l}_{key}(n)},x\in\left\{0,1\right\}^{\mathscr{l}_{in}(n)},F_k\in\left\{0,1\right\}^{\mathscr{l}_{out}(n)} k{0,1}lkey(n),x{0,1}lin(n),Fk{0,1}lout(n)

    除非特殊规定,我们假设 F F F是保长的(length-preserving)

    即, l k e y ( n ) = l i n ( n ) = l o u t ( n ) = n \mathscr{l}_{key}(n)=\mathscr{l}_{in}(n)=\mathscr{l}_{out}(n)=n lkey(n)=lin(n)=lout(n)=n

    n n n为安全参数, l x x x ( n ) \mathscr{l}_{xxx}(n) lxxx(n)表示该长度由 n n n确定

  4. k ∈ { 0 , 1 } n k\in\left\{0,1\right\}^n k{0,1}n时,我们得到的函数 F k F_k Fk就是一个 从 n n n比特字符串到 n n n比特字符串 的映射关系

  5. 当PPT攻击者 A \mathcal{A} A无法区分函数 F k F_k Fk k k k均匀选择)和真随机函数 f f f f f f is chosen uniformly from the set of all functions mapping n n n-bit inputs to n n n-bit outputs)的话,就说 F F F是伪随机的

    和PRG定义类似(详见3.3.1.1第5点)

    接下来说的就是取 f f f的那个集合(set)

3. Func n \textsf{Func}_n Funcn
  1. 每个 f f f可以看做是一个关于 x x x的查找表(look-up table),每个 f ( x ) f(x) f(x)都有 2 n 2^n 2n行(row),因为它的定义域和值域都是 { 0 , 1 } n \left\{0,1\right\}^n {0,1}n

    如下表,以 n = 3 , f ( x ) = x + 1   m o d   8 n=3,f(x)=x+1\ mod\ 8 n=3,f(x)=x+1 mod 8为例:

    f ( x ) f(x) f(x)共有 2 3 = 8 2^3=8 23=8

    x x x f ( x ) f(x) f(x)
    000001
    001010
    010011
    011100
    100101
    101110
    110111
    111000
  2. f ( x ) f(x) f(x)的所有项写成一行,由于每项长度为 n n n,所以一共长为 n ⋅ 2 n n\cdot2^n n2n。这么一行代表的就是一个映射关系 f f f

    注意由于暗示 x x x是从小到大排列的,所以仅有 f ( x ) f(x) f(x)的值也可以表示映射关系

  3. 由于每个代表 f f f的字符串长度为 n ⋅ 2 n n\cdot2^n n2n,所以 ∣ Func n ∣ = 2 n ⋅ 2 n \vert\textsf{Func}_n\vert=2^{n\cdot2^n} Funcn=2n2n

    n = 2 n=2 n=2为例, ∣ Func 2 ∣ = 2 2 ⋅ 2 2 = 2 8 = 256 \vert\textsf{Func}_2\vert=2^{2\cdot2^2}=2^8=256 Func2=2222=28=256,枚举如下:

    在这里插入图片描述

    随便拿一个举例,例如10100010,它表达的映射关系为:

    00 → 10 , 01 → 10 , 10 → 00 , 11 → 10 00\rightarrow10,01\rightarrow10,10\rightarrow00,11\rightarrow10 0010,0110,1000,1110,如下图

    在这里插入图片描述

3.5.1.2 定义10(3.25)

F : { 0 , 1 } ∗ × { 0 , 1 } ∗ → { 0 , 1 } ∗ F:\left\{0,1\right\}^*\times\left\{0,1\right\}^*\rightarrow\left\{0,1\right\}^* F:{0,1}×{0,1}{0,1}为一个有效的(efficient),保长的(length-preserving)带密钥函数(keyed function)。如果对于所有的PPT区分器 D D D都有一个可忽略函数 negl \textsf{negl} negl满足下列不等式,则称 F F F为伪随机函数( pseudorandom   function \textsf{pseudorandom function} pseudorandom function):
∣ P r [ D F k ( ⋅ ) ( 1 n ) = 1 ] − P r [ D f ( ⋅ ) ( 1 n ) = 1 ] ∣ ≤ negl ( n ) \bigg\vert\mathrm{Pr}[D^{F_k(\cdot)}(1^n)=1]-\mathrm{Pr}[D^{f(\cdot)}(1^n)=1]\bigg\vert\leq\textsf{negl}(n) Pr[DFk()(1n)=1]Pr[Df()(1n)=1]negl(n)
t h e    p r o b a b i l i t y    i s    t a k e n    o v e r : the\ \ probability\ \ is\ \ taken\ \ over: the  probability  is  taken  over:

  1. 均匀选择的 k ∈ { 0 , 1 } n k\in\left\{0,1\right\}^n k{0,1}n D D D的随机性
  2. 均匀选择的 f ∈ Func n f\in\textsf{Func}_n fFuncn D D D的随机性

注意和定义6联系并区别不同

  1. 每个 f f f(即查找表)已经是指数长度(exponential length) n ⋅ 2 n n\cdot2^n n2n了,而区分器 D D D只是PPT算法。如果想用定义6的方式的话,得先把 f f f输进去,但是现在连输入都输入不完了(因为是指数长度),更别提输出(或者判断)了。

    也就是按照定义6这个区分器根本就建立不起来,所以被迫采用定义10预言机的形式

  2. 该定义给了 D D D预言机 O \mathcal{O} O(等于 F k F_k Fk f f f中的一个)的访问权限,类似于实验 P r i v K A , Π cpa ( n ) \mathrm{PrivK}^\textsf{cpa}_{\mathcal{A},\Pi}(n) PrivKA,Πcpa(n)中的预言机,但不同的是这里的预言机执行的是确定性函数(输入一旦固定,输出也固定)

  3. 攻击者依然可以根据所有以前的输出自适应地在多项式时间内选择查询

3.5.1.3 Pseudorandom Permutations/Block Ciphers
  1. Perm n \textsf{Perm}_n Permn { 0 , 1 } n \left\{0,1\right\}^n {0,1}n上所有排列(Permutation)(即双射(bijection);其实就是加了一个限制:不同的输入必须对应不同的输出)的集合。所以 Perm n \textsf{Perm}_n Permn的大小为 ( 2 n ) ! (2^n)! (2n)!

    ∣ Perm n ∣ = ( 2 n ) ! ⋅ n \big\vert\textsf{Perm}_n\big\vert=(2^n)!\cdot n Permn=(2n)!n

    Perm n ⊆ Func n \textsf{Perm}_n\subseteq\textsf{Func}_n PermnFuncn

  2. 如果 l i n = l o u t \mathscr{l}_{in}=\mathscr{l}_{out} lin=lout,且对于所有 k ∈ { 0 , 1 } l k e y ( n ) k\in\left\{0,1\right\}^{\mathscr{l}_{key}(n)} k{0,1}lkey(n),函数 F k : { 0 , 1 } l i n ( n ) → { 0 , 1 } l o u t ( n ) F_k:\left\{0,1\right\}^{\mathscr{l}_{in}(n)}\rightarrow\left\{0,1\right\}^{\mathscr{l}_{out}(n)} Fk:{0,1}lin(n){0,1}lout(n)是一个排列,那我们将 F F F叫做带密钥的排列(keyed permutation), l i n \mathscr{l}_{in} lin叫做 F F F的分组长度(block length);如果 l i n ( n ) = l o u t ( n ) = n \mathscr{l}_{in}(n)=\mathscr{l}_{out}(n)=n lin(n)=lout(n)=n(即默认情况),那我们就称 F F F是保长的(length-preserving)

    把block length叫做块长度当然也可以

  3. F F F有效(efficient)条件:在给定 k k k的条件下, F K F_K FK是有效可计算(即 F k ( x ) F_k(x) Fk(x))且有效可逆(即 F k − 1 ( y ) F^{-1}_k(y) Fk1(y))的。

  4. 当区分器无法区分 F k F_k Fk与均匀排列时,我们就将 F F F称为伪随机排列(pseudorandom permutation),详见定义11

3.5.1.4 命题3(3.27)

如果 F F F是一个伪随机排列,且 l i n ( n ) ≥ n \mathscr{l}_{in}(n)\geq n lin(n)n,则 F F F也是一个伪随机函数

现实应用中除了 F k F_k Fk我们也会经常用到 F k − 1 F^{-1}_k Fk1,所以伪随机排列更贴近于实际应用

3.5.1.5 定义11(3.28)

类似于定义10,只是将均匀函数变为了均匀排列,并额外考虑了逆排列

F : { 0 , 1 } ∗ × { 0 , 1 } ∗ → { 0 , 1 } ∗ F:\left\{0,1\right\}^*\times\left\{0,1\right\}^*\rightarrow\left\{0,1\right\}^* F:{0,1}×{0,1}{0,1}为一个有效的(efficient),保长的(length-preserving)带密钥排列(keyed permutation)。如果对于所有的PPT区分器 D D D都有一个可忽略函数 negl \textsf{negl} negl满足下列不等式,则称 F F F伪随机排列( strong   pseudorandom   permutation \textsf{strong pseudorandom permutation} strong pseudorandom permutation)
∣ P r [ D F k ( ⋅ ) , F k − 1 ( ⋅ ) ( 1 n ) = 1 ] − P r [ D f ( ⋅ ) , f − 1 ( ⋅ ) ( 1 n ) = 1 ] ∣ ≤ negl ( n ) \bigg\vert\mathrm{Pr}[D^{F_k(\cdot),F^{-1}_k(\cdot)}(1^n)=1]-\mathrm{Pr}[D^{f(\cdot),f^{-1}(\cdot)}(1^n)=1]\bigg\vert\leq\textsf{negl}(n) Pr[DFk(),Fk1()(1n)=1]Pr[Df(),f1()(1n)=1]negl(n)
t h e    p r o b a b i l i t y    i s    t a k e n    o v e r : the\ \ probability\ \ is\ \ taken\ \ over: the  probability  is  taken  over:

  1. 均匀选择的 k ∈ { 0 , 1 } n k\in\left\{0,1\right\}^n k{0,1}n D D D的随机性
  2. 均匀选择的 f ∈ Perm n f\in\textsf{Perm}_n fPermn D D D的随机性

因为额外给了逆排列的预言机访问权限,所以才strong

事实上,当分组长度足够长时,随机排列本身与随机函数是无法区分的,除非函数发生碰撞(即 f ( x ) = f ( y ) f(x)=f(y) f(x)=f(y)),但几率很低,详见3.5.1.8第三点

3.5.1.6 PRFs and PRGs
  1. F → G : F\rightarrow G: FG:如下例

    G ( s ) = def F s ( 1 ) ∣ ∣ F s ( 2 ) ∣ ∣ ⋅ ⋅ ⋅ ∣ ∣ F s ( l ) G(s)\overset{\text{def}}{=}F_s(1)\vert\vert F_s(2)\vert\vert\cdot\cdot\cdot\vert\vert F_s(\mathscr{l}) G(s)=defFs(1)Fs(2)Fs(l)

    F F F是伪随机,则 G G G也是伪随机; F F F是真随机,则 G G G也是真随机;

    现在PRG更多基于某些被推测为困难的数学问题来构建

  2. G → F : G\rightarrow F: GF:

    伪随机生成器 G G G可视为有着很小分组长度的伪随机函数 F F F

    • G G G的扩展因子为 n ⋅ 2 t ( n ) n\cdot2^{t(n)} n2t(n)

    • 根据 G G G定义 F : { 0 , 1 } n × { 0 , 1 } t ( n ) → { 0 , 1 } n F:\left\{0,1\right\}^n\times\left\{0,1\right\}^{t(n)}\rightarrow\left\{0,1\right\}^n F:{0,1}n×{0,1}t(n){0,1}n

      即,该查找表有 2 t ( n ) 2^{t(n)} 2t(n)行,每行包含 n n n比特

    • F k ( i ) F_k(i) Fk(i)即为第 i i i行对应的值

    • 仅当 t ( n ) = O ( log  n ) t(n)=\mathcal{O}(\text{log}\ n) t(n)=O(log n)时,上面的方案才有实现可能

    生成长分组长度的方案见本书7.5节

    O ( ⋅ ) \mathcal{O}(\cdot) O()的含义见下文3.5.1.8补充第二点

3.5.1.7 结构2(3.29)

该结构构造了从任意一个伪随机函数/分组密码得到流密码的方式

借鉴了上面 F → G F\rightarrow G FG的方法

F F F为一个伪随机函数,流密码 (Init,GetBits) \textsf{(Init,GetBits)} (Init,GetBits)定义如下:

GetBits \textsf{GetBits} GetBits每次输出 n n n比特

  • Init \textsf{Init} Init:输入 s ∈ { 0 , 1 } n s\in\left\{0,1\right\}^n s{0,1}n I V ∈ { 0 , 1 } n IV\in\left\{0,1\right\}^n IV{0,1}n,令 st 0 : = ( s , I V ) \textsf{st}_0:=(s,IV) st0:=(s,IV)
  • GetBits \textsf{GetBits} GetBits:输入 st i : = ( s , I V ) \textsf{st}_i:=(s,IV) sti:=(s,IV),计算 I V ′ : = I V + 1 IV':=IV+1 IV:=IV+1,令 y : = F s ( I V ′ ) , st i + 1 : = ( s , I V ′ ) y:=F_s(IV'),\textsf{st}_{i+1}:=(s,IV') y:=Fs(IV),sti+1:=(s,IV)。输出 ( y , st i + 1 ) (y,\textsf{st}_{i+1}) (y,sti+1)

尽管可以从分组密码构造流密码,但考虑到开销等问题,实际操作中最好使用专用的流密码。

出于理解性和安全性,能使用分组密码就不要用流密码

3.5.1.8 补充
  1. 在实践中,分组密码(block ciphers)被设计为具有固定密钥长度和分组长度的(强)伪随机排列的安全实例

    第6章将继续提到

  2. 计算复杂度常用的符号

    在这里插入图片描述

  3. “生日”问题(The “Birthday” Problem)

    证明过程省略

    • 固定一个正整数 N N N,设 q q q个元素 y 1 , . . . , y q y_1,...,y_q y1,...,yq是从大小为 N N N的集合中均匀独立随机选择出来的,则发生碰撞(即当 i ≠ j i\neq j i=j时, y i = y j y_i=y_j yi=yj)的概率最大为 q 2 2 N \frac{q^2}{2N} 2Nq2,即
      coll ( q , N ) ≤ q 2 2 N \textsf{coll}(q,N)\leq\frac{q^2}{2N} coll(q,N)2Nq2

    • 固定一个正整数 N N N,设 q ( q ≤ 2 N ) q(q\leq\sqrt{2N}) q(q2N )个元素 y 1 , . . . , y q y_1,...,y_q y1,...,yq是从大小为 N N N的集合中均匀独立随机选择出来的,则发生碰撞(即当 i ≠ j i\neq j i=j时, y i = y j y_i=y_j yi=yj)的概率至少为 q ( q − 1 ) 4 N \frac{q(q-1)}{4N} 4Nq(q1),即
      coll ( q , N ) ≥ 1 − e − q ( q − 1 ) / 2 N ≥ q ( q − 1 ) 4 N \textsf{coll}(q,N)\geq1-e^{-q(q-1)/2N}\geq\frac{q(q-1)}{4N} coll(q,N)1eq(q1)/2N4Nq(q1)

      0 ≤ x ≤ 1 0\leq x\leq 1 0x1,时,该不等式成立:

      e − x ≤ 1 − ( 1 − 1 e ) ⋅ x ≤ 1 − x 2 e{-x}\leq1-\Big(1-\frac{1}{e}\Big)\cdot x\leq 1-\frac{x}{2} ex1(1e1)x12x

3.5.2 CPA-Secure Encryption from Pseudorandom Functions

和3.3.3非常非常像哦

1. 基本思路

将伪随机函数应用于随机字符串,故该结构是随机化的(randomized)

不引入随机字符串 r r r无法达到CPA-secure

在这里插入图片描述

与之前不同的地方在于,该结构每次加密都是用新鲜的(fresh)伪随机pad

2. 结构3(3.30)

我们首先考虑定长的方案,毕竟从定长到任意长的扩展很简单,3.4.2的第7点和3.6都有涉及

F F F为伪随机函数,消息长度为 n n n的私有密钥加密方案定义如下:

  • Gen \textsf{Gen} Gen:输入 1 n 1^n 1n,均匀选择密钥 k ∈ { 0 , 1 } n k\in{\left\{0,1\right\}}^n k{0,1}n,并输出密钥 k k k

  • Enc \textsf{Enc} Enc:输入密钥 k ∈ { 0 , 1 } n k\in{\left\{0,1\right\}}^n k{0,1}n,明文 m ∈ { 0 , 1 } n m\in{\left\{0,1\right\}^n} m{0,1}n,均匀选择 r ∈ { 0 , 1 } n r\in{\left\{0,1\right\}}^n r{0,1}n,输出密文:

    c : = ⟨ r , F k ( r ) ⊕ m ⟩ c:=\lang r,F_k(r)\oplus m\rang c:=r,Fk(r)m

  • Dec \textsf{Dec} Dec:输入密钥 k ∈ { 0 , 1 } n k\in{\left\{0,1\right\}}^n k{0,1}n,密文 c = ⟨ r , s ⟩ c=\lang r,s\rang c=r,s,输出明文
    m : = F k ( r ) ⊕ c m:=F_k(r)\oplus c m:=Fk(r)c

A CPA-secure encryption scheme from any pseudorandom function.

3. Proofs of security based on pseudorandom functions通用模板

这个证明模板下章也会用到好几次

  1. 首先考虑构造一个假设版本:用真随机函数代替伪随机函数产生一个新方案。

  2. 然后利用规约证明说明这种修改不影响攻击者的成功概率。

  3. 最后分析这个更新过的方案的安全性,其余的证明通常依赖于概率分析,而不依赖于任何计算假设。

上述是英文版教材给出的方法,这里也给出第一版教材说法

  1. 考虑假设这样的方案:用随机函数代替原来方案中伪随机函数的位置,同时从概率学的角度分析它的安全性

  2. 证明上述方案安全后,假设当使用伪随机函数时,该方案不安全(即反证法)。该方法一旦成立,说明随机函数和伪随机函数可以被区分,即困难问题被解决,这不可能。因此,假设错误,即使用伪随机函数的方案是安全的

4. 定理7(3.31)

I f   F   i s   a   p s e u d o r a n d o m   f u n c t i o n , t h e n   C o n s t r u c t i o n   3 ( 3.30 )   i s   a   C P A − s e c u r e   p r i v a t e − k e y   e n c r y p t i o n   s c h e m e   f o r   m e s s a g e s   o f   l e n g t h   n . If\ F\ is\ a\ pseudorandom\ function, then\ Construction\ 3(3.30)\ is\ a\ CPA-secure\\\ private-key\ encryption\ scheme\ for\ messages\ of\ length\ n. If F is a pseudorandom function,then Construction 3(3.30) is a CPAsecure privatekey encryption scheme for messages of length n.

5. 定理7的证明
  1. 将结构3中的伪随机函数 F k F_k Fk换为真随机函数 f f f,构造出真随机加密方案 Π ~ = ( Gen ~ , Enc ~ , Dec ~ ) \widetilde{\Pi}=(\widetilde{\textsf{Gen}},\widetilde{\textsf{Enc}},\widetilde{\textsf{Dec}}) Π =(Gen ,Enc ,Dec )

    • Gen ~ : \widetilde{\textsf{Gen}}: Gen :均匀选择 f ∈ Func n f\in\textsf{Func}_n fFuncn
    • Enc ~ , Dec ~ : \widetilde{\textsf{Enc}},\widetilde{\textsf{Dec}}: Enc ,Dec :仅将 Enc , Dec \textsf{Enc},\textsf{Dec} Enc,Dec中的 F k F_k Fk换为 f f f

    该方案并不是一个有效方案,因为 Func n \textsf{Func}_n Funcn f f f都是指数长度,但并不妨碍我们用它来辅助证明

  2. 固定一个PPT敌手 A \mathcal{A} A q ( n ) q(n) q(n) A ( 1 n ) \mathcal{A}(1^n) A(1n)向加密预言机请求查询数量的上界(upper bound),存在 negl ( n ) \textsf{negl}(n) negl(n)满足下列不等式是我们的证明目标

    注意 q q q肯定是某个多项式的上界

    ∣ Pr [ P r i v K A , Π cpa ( n ) = 1 ] − Pr [ P r i v K A , Π ~ cpa ( n ) = 1 ] ∣ ≤ negl ( n ) (1) \Big\vert\text{Pr}\Big[\mathrm{PrivK}^\textsf{cpa}_{\mathcal{A},\Pi}(n)=1\Big]-\text{Pr}\Big[\mathrm{PrivK}^\textsf{cpa}_{\mathcal{A},\widetilde{\Pi}}(n)=1\Big]\Big\vert\leq\textsf{negl}(n) \tag{1} Pr[PrivKA,Πcpa(n)=1]Pr[PrivKA,Π cpa(n)=1]negl(n)(1)

  3. 构造区分器 D D D

    A \mathcal{A} A构造 D D D D D D可以访问预言机 O \mathcal{O} O来判断函数是真随机函数还是伪随机函数。 D D D A \mathcal{A} A模拟实验 P r i v K cpa \mathrm{PrivK}^\textsf{cpa} PrivKcpa,若 A \mathcal{A} A成功则 D D D判断预言机是伪随机函数;若 A \mathcal{A} A失败则判断预言机是随机函数。

    D D D的输入为 1 n 1^n 1n,以及预言机 O : { 0 , 1 } n → { 0 , 1 } n \mathcal{O}:{\left\{0,1\right\}}^n\rightarrow{\left\{0,1\right\}}^n O:{0,1}n{0,1}n的访问权限

    • 运行 A ( 1 n ) \mathcal{A}(1^n) A(1n),当 A \mathcal{A} A用信息 m ∈ { 0 , 1 } n m\in{\left\{0,1\right\}}^n m{0,1}n查询加密预言机时,预言机用以下方式答复
      • 均匀选择 r ∈ { 0 , 1 } n r\in{\left\{0,1\right\}}^n r{0,1}n
      • 查询 O ( r ) \mathcal{O}(r) O(r)得到回复 y y y
      • A \mathcal{A} A返回密文 ⟨ r , y ⊕ m ⟩ \lang r,y\oplus m\rang r,ym
    • A \mathcal{A} A输出信息 m 0 , m 1 ∈ { 0 , 1 } n m_0,m_1\in{\left\{0,1\right\}}^n m0,m1{0,1}n时,均匀选择一个比特 b ∈ { 0 , 1 } b\in{\left\{0,1\right\}} b{0,1}
      • 均匀选择 r ∈ { 0 , 1 } n r\in{\left\{0,1\right\}}^n r{0,1}n
      • 查询 O ( r ) \mathcal{O}(r) O(r)得到回复 y y y
      • A \mathcal{A} A返回挑战密文 ⟨ r , y ⊕ m b ⟩ \lang r,y\oplus m_b\rang r,ymb
    • 继续回复 A \mathcal{A} A的加密预言机查询直到 A \mathcal{A} A输出比特 b ′ b' b b = b ′ b=b' b=b时,输出1; b ≠ b ′ b\neq b' b=b时,输出0

    相当于描述了一下:在归约证明中 敌手A’如何模拟输入环境给A

    困难问题:伪随机函数和真随机函数的不可区分性

  4. 区分器就是区分以下两种情况

    • 伪随机情况,即均匀选择 k ∈ { 0 , 1 } n k\in{\left\{0,1\right\}}^n k{0,1}n,则有以下等式:

      这时 A \mathcal{A} A作为 D D D的子程序运行 等价于 A \mathcal{A} A运行在实验 P r i v K A , Π cpa ( n ) \mathrm{PrivK}^\textsf{cpa}_{\mathcal{A},\Pi}(n) PrivKA,Πcpa(n)

      Pr k ← { 0 , 1 } n [ D F k ( ⋅ ) ( 1 n ) = 1 ] = Pr [ P r i v K A , Π cpa ( n ) = 1 ] (2) \text{Pr}_{k\leftarrow{\left\{0,1\right\}}^n}\Big[D^{F_k(\cdot)}(1^n)=1\Big]=\text{Pr}\Big[\mathrm{PrivK}^\textsf{cpa}_{\mathcal{A},\Pi}(n)=1\Big] \tag{2} Prk{0,1}n[DFk()(1n)=1]=Pr[PrivKA,Πcpa(n)=1](2)

    • 真随机情况,即 f f f Func n \textsf{Func}_n Funcn中均匀选择,则有以下等式:

      这时 A \mathcal{A} A作为 D D D的子程序运行 等价于 A \mathcal{A} A运行在实验 P r i v K A , Π ~ cpa ( n ) \mathrm{PrivK}^\textsf{cpa}_{\mathcal{A},\widetilde{\Pi}}(n) PrivKA,Π cpa(n)

      Pr f ← Func n [ D f ( ⋅ ) ( 1 n ) = 1 ] = Pr [ P r i v K A , Π ~ cpa ( n ) = 1 ] (3) \text{Pr}_{f\leftarrow\textsf{Func}_n}\Big[D^{f(\cdot)}(1^n)=1\Big]=\text{Pr}\Big[\mathrm{PrivK}^\textsf{cpa}_{\mathcal{A},\widetilde{\Pi}}(n)=1\Big] \tag{3} PrfFuncn[Df()(1n)=1]=Pr[PrivKA,Π cpa(n)=1](3)

  5. 如果 F F F是伪随机函数,则存在 negl \textsf{negl} negl满足以下等式
    ∣ Pr [ D F k ( ⋅ ) ( 1 n ) = 1 ] − Pr [ D f ( ⋅ ) ( 1 n ) = 1 ] ∣ ≤ negl ( n ) (4) \Big\vert\text{Pr}\Big[D^{F_k(\cdot)}(1^n)=1\Big]-\text{Pr}\Big[D^{f(\cdot)}(1^n)=1\Big]\Big\vert\leq\textsf{negl}(n) \tag{4} Pr[DFk()(1n)=1]Pr[Df()(1n)=1]negl(n)(4)
    结合式子(2)(3)(4),可以得到等式(1)

    到目前为止,将上面通用模板的第一部分(1,2点)证明完毕,接下来证明第二部分(第3点)

  6. 接下来我们要证明的是该不等式
    Pr [ P r i v K A , Π ~ cpa ( n ) = 1 ] ≤ 1 2 + q ( n ) 2 n (5) \text{Pr}\Big[\mathrm{PrivK}^\textsf{cpa}_{\mathcal{A},\widetilde{\Pi}}(n)=1\Big]\leq\frac{1}{2}+\frac{q(n)}{2^n} \tag{5} Pr[PrivKA,Π cpa(n)=1]21+2nq(n)(5)

    q ( n ) q(n) q(n) A \mathcal{A} A向加密预言机查询次数的上界

    因为 Π ~ \widetilde{\Pi} Π 是真随机系统,所以这个不等式对于没有计算限制的 A \mathcal{A} A来说也是成立的

  7. r ∗ r^* r为生成挑战密文时用到的随机数,即,挑战密文为 ⟨ r ∗ , f ( r ∗ ) ⊕ m b ⟩ \lang r^*,f(r^*)\oplus m_b\rang r,f(r)mb,故有以下两种可能:

    • r ∗ r^* r在之前的查询中从未被使用

      A \mathcal{A} A无法从 f ( r ∗ ) f(r^*) f(r)中得到任何信息(毕竟是真随机),因此 A \mathcal{A} A输出 b ′ = b b'=b b=b的概率恰好是 1 2 \frac{1}{2} 21

      本质上就是一次一密

    • r ∗ r^* r在之前的查询中至少被使用过一次

      这种情况 A \mathcal{A} A很容易就可以区别出 m 0 , m 1 m_0,m_1 m0,m1,但是由于计算能力有限,最多查询 q ( n ) q(n) q(n)次,所以这种情况出现的概率最多为 q ( n ) 2 n \frac{q(n)}{2^n} 2nq(n)

  8. Repeat \textsf{Repeat} Repeat为事件: r ∗ r^* r A \mathcal{A} A的查询中出现过至少一次。即, Pr [ Repeat ] \text{Pr}[\textsf{Repeat}] Pr[Repeat]最大为 q ( n ) 2 n \frac{q(n)}{2^n} 2nq(n),故有:
    Pr [ P r i v K A , Π ~ cpa ( n ) = 1 ] = Pr [ P r i v K A , Π ~ cpa ( n ) = 1 ∧ Repeat ] + Pr [ P r i v K A , Π ~ cpa ( n ) = 1 ∧ Repeat ‾ ] ≤ Pr [ Repeat ] + Pr [ P r i v K A , Π ~ cpa ( n ) = 1   ∣   Repeat ‾ ] ≤ q ( n ) 2 n + 1 2 \begin{aligned} \text{Pr}\Big[\mathrm{PrivK}&^\textsf{cpa}_{\mathcal{A},\widetilde{\Pi}}(n)=1\Big]\\ &=\text{Pr}\Big[\mathrm{PrivK}^\textsf{cpa}_{\mathcal{A},\widetilde{\Pi}}(n)=1\wedge\textsf{Repeat}\Big]+\text{Pr}\Big[\mathrm{PrivK}^\textsf{cpa}_{\mathcal{A},\widetilde{\Pi}}(n)=1\wedge\overline{\textsf{Repeat}}\Big]\\ &\leq\text{Pr}[\textsf{Repeat}]+\text{Pr}\Big[\mathrm{PrivK}^\textsf{cpa}_{\mathcal{A},\widetilde{\Pi}}(n)=1\ \vert\ \overline{\textsf{Repeat}}\Big]\leq\frac{q(n)}{2^n}+\frac{1}{2} \end{aligned} Pr[PrivKA,Π cpa(n)=1]=Pr[PrivKA,Π cpa(n)=1Repeat]+Pr[PrivKA,Π cpa(n)=1Repeat]Pr[Repeat]+Pr[PrivKA,Π cpa(n)=1  Repeat]2nq(n)+21

    = = =”:全概率公式

    ≤ \leq ”:条件概率

    P r [ E 1   ∣   E 2 ] = def P r [ E 1 ∧ E 2 ] P r [ E 2 ] ( 0 < P r [ E 2 ] ≤ 1 ) \mathrm{Pr}[E_1\ \vert\ E_2]\overset{\text{def}}{=}\frac{\mathrm{Pr[E1\wedge E_2]}}{\mathrm{Pr[E_2]}}(0<\mathrm{Pr[E_2]}\leq1) Pr[E1  E2]=defPr[E2]Pr[E1E2](0<Pr[E2]1)

    等式(5)得证

  9. 结合等式(1)(5),可得:
    Pr [ P r i v K A , Π cpa ( n ) = 1 ] ≤ q ( n ) 2 n + 1 2 + negl ( n ) \text{Pr}\Big[\mathrm{PrivK}^\textsf{cpa}_{\mathcal{A},\Pi}(n)=1\Big]\leq\frac{q(n)}{2^n}+\frac{1}{2}+\textsf{negl}(n) Pr[PrivKA,Πcpa(n)=1]2nq(n)+21+negl(n)
    q ( n ) 2 n \frac{q(n)}{2^n} 2nq(n)是可忽略函数,所以结合命题1的闭包特性,可得
    Pr [ P r i v K A , Π cpa ( n ) = 1 ] ≤ 1 2 + negl ′ ( n ) \text{Pr}\Big[\mathrm{PrivK}^\textsf{cpa}_{\mathcal{A},\Pi}(n)=1\Big]\leq\frac{1}{2}+\textsf{negl}'(n) Pr[PrivKA,Πcpa(n)=1]21+negl(n)

证毕(好长!!!)

3.6 Modes of Operation

操作模式提供了一种使用流密码或分组密码安全有效地加密长消息的方法

3.6.1 Stream-Cipher Modes of Operation

流密码可看作更加灵活的伪随机生成器,相比于结构1,其输出长度不再固定(所以不要事先确定),而且满足CPA-secure

1. Synchronized mode

在这里插入图片描述

  1. 同步模式通常用于双方之间的单个通信会话(session)。

    详见4.5.3

  2. 在这种模式下,有状态性(statefulness)是可以接受的,消息按顺序接收而不会丢失。直观做法是生成一个长的伪随机流,并使用其中的不同部分对每个消息进行加密。需要同步来确保正确的解密,并确保流的任何部分都没有被重复使用。

  3. 构造:

    算法1+构造1+一点点修改

    • 将**算法1(3.16)**修改为 G ∞ ( s , 1 l ) G_{\infty}(s,1^{\mathscr{l}}) G(s,1l)

      即先运行 Init ( s ) \textsf{Init}(s) Init(s),然后重复运行 GetBits \textsf{GetBits} GetBits l \mathscr{l} l次产生一个长度为 l \mathscr{l} l的输出

      注意没有使用初始向量 I V IV IV

    • G ∞ G_{\infty} G应用于结构1(3.17)

      • c : = G ∞ ( k , 1 ∣ m ∣ ) c:=G_{\infty}(k,1^{\vert m\vert}) c:=G(k,1m)
      • m : = G ∞ ( k , 1 ∣ c ∣ ) m:=G_{\infty}(k,1^{\vert c\vert}) m:=G(k,1c)

      目前已经达到了处理任意长度明文和EAV-secure的要求了

    • 如上图,通信双方保持状态,维持会话,则可用相同密钥加密多条消息

      说是多条消息,其实就是把多条消息 m 1 , m 2 , . . . m_1,m_2,... m1,m2,...(长度依次是 l 1 , l 2 , . . . \mathscr{l}_1,\mathscr{l}_2,... l1,l2,...)看做一条很长的消息

      • st 0 : = Init ( k ) \textsf{st}_0:=\textsf{Init}(k) st0:=Init(k)
      • st 0 \textsf{st}_0 st0开始,重复运行 GetBits \textsf{GetBits} GetBits l 1 \mathscr{l}_1 l1次产生 pad 1 = def y 1 , . . . y l 1 \textsf{pad}_1\overset{\text{def}}{=}y_1,...y_{\mathscr{l}_1} pad1=defy1,...yl1,并更新状态 st l 1 \textsf{st}_{\mathscr{l}_1} stl1 c 1 : = pad 1 ⊕ m 1 c_1:=\textsf{pad}_1\oplus m_1 c1:=pad1m1
      • st l 1 \textsf{st}_{\mathscr{l}_1} stl1开始,重复运行 GetBits \textsf{GetBits} GetBits l 2 \mathscr{l}_2 l2次产生 pad 2 = def y 1 , . . . y l 2 \textsf{pad}_2\overset{\text{def}}{=}y_1,...y_{\mathscr{l}_2} pad2=defy1,...yl2,并更新状态 st l 2 \textsf{st}_{\mathscr{l}_2} stl2 c 2 : = pad 2 ⊕ m 2 c_2:=\textsf{pad}_2\oplus m_2 c2:=pad2m2
      • 重复以上步骤
  4. 同步模式需要通信双方保持同步状态,否则会导致解密错误,不适用于零散的通信和使用不同的设备进行通信。重新同步会增加额外开销

2. Unsynchronized mode

在这里插入图片描述

注意和同步模式联系与区别

  1. 异步模式的 Init \textsf{Init} Init I V IV IV作为输入,可实现**无状态的(stateless)**任意长消息加密方案

  2. 构造:

    算法1+构造3+一点点修改

    • 将**算法1(3.16)**修改为 G ∞ ( s , I V , 1 l ) G_{\infty}(s,IV,1^{\mathscr{l}}) G(s,IV,1l)

      即先运行 st 0 : = Init ( s , I V ) \textsf{st}_0:=\textsf{Init}(s,IV) st0:=Init(s,IV),然后重复运行 GetBits \textsf{GetBits} GetBits l \mathscr{l} l次产生一个长度为 l \mathscr{l} l的输出

      注意使用了初始向量(initialization vector) I V IV IV

    • 如上图,将 G ∞ G_{\infty} G应用于结构3(3.30)

      • 均匀选择 I V i ∈ { 0 , 1 } n IV_i\in\left\{0,1\right\}^n IVi{0,1}n
      • c i : = ⟨ I V i , G ∞ ( k , I V i , 1 ∣ m i ∣ ) ⊕ m i ⟩ c_i:=\lang IV_i,G_{\infty}(k,IV_i,1^{\vert m_i\vert})\oplus m_i\rang ci:=IVi,G(k,IVi,1mi)mi
      • m i : = G ∞ ( k , I V i , 1 ∣ c i ∣ ) ⊕ c i m_i:=G_{\infty}(k,IV_i,1^{\vert c_i\vert})\oplus c_i mi:=G(k,IVi,1ci)ci
  3. 如果对于任意多项式 l \mathscr{l} l,满足 F k ( I V ) = def G ∞ ( s , I V , 1 l ) F_k(IV)\overset{\text{def}}{=}G_{\infty}(s,IV,1^{\mathscr{l}}) Fk(IV)=defG(s,IV,1l)是伪随机函数时,该方案是CPA-secure的

    事实上, F F F只需要在随机输入条件下满足伪随机就行。满足这个更弱性质的带密钥函数称为**弱(weak)**伪随机函数。

  4. 致命缺点:结构3和上述修改结构3后生成方案,其密文长度是明文长度的二倍,极大影响了效率

3.6.2 Block-Cipher Modes of Operation

F F F为分组长度为 n n n的分组密码,假设所有的消息 m m m都是 n n n的倍数,即:

m = m 1 , m 2 , . . . m l ,     m i ∈ { 0 , 1 } n m=m_1,m_2,...m_{\mathscr{l}},\ \ \ m_i\in\left\{0,1\right\}^n m=m1,m2,...ml,   mi{0,1}n

不够可以填充嘛

1. Electronic Code Book (ECB) mode
  1. 图示:

    在这里插入图片描述

  2. c : = ⟨ F k ( m 1 ) , F k ( m 2 ) , . . . , F k ( m l ) c:=\lang F_k(m_1),F_k(m_2),...,F_k(m_{\mathscr{l}}) c:=Fk(m1),Fk(m2),...,Fk(ml)

    故该模式要求 F k − 1 F^{-1}_k Fk1是有效可计算的

  3. 分析与扩展

    • 不安全,不满足CPA-secure,甚至不满足EAV-secure

      相当于一次一密

    • 示例:

      图1:原图;图2:ECB加密后的图;图3:安全模式加密后的图

      在这里插入图片描述

    • 现在已经不再使用

      课本上说可以加密短数据(e.g.:一个密钥),emmmm,多少有点道理

2. Cipher Block Chaining (CBC) mode
  1. 图示:

在这里插入图片描述

    • 首先均匀选择初始向量 I V ∈ { 0 , 1 } n IV\in\left\{0,1\right\}^n IV{0,1}n c 0 : = I V c_0:=IV c0:=IV
    • c = ⟨ c 0 , c 1 , . . . m c l ⟩ ,    c i : = F k ( c i − 1 ⊕ m i )    i ∈ [ 1 , l ] c=\lang c_0,c_1,...mc_{\mathscr{l}}\rang,\ \ c_i:=F_k(c_{i-1}\oplus m_i)\ \ i\in[1,\mathscr{l}] c=c0,c1,...mcl,  ci:=Fk(ci1mi)  i[1,l]
    • m i : = F k − 1 ( c i ) ⊕ c i − 1    i ∈ [ 1 , l ] m_i:=F^{-1}_k(c_i)\oplus c_{i-1}\ \ i\in[1,\mathscr{l}] mi:=Fk1(ci)ci1  i[1,l]

    注意初始向量 I V IV IV也是密文的一部分

    该模式也要求 F k − 1 F^{-1}_k Fk1是有效可计算的

  1. 分析与扩展

    • 优:CBC模式是CPA-secure(前提是 F F F为伪随机排列

      缺:加密必须按顺序进行,并不适合并行操作

    • I V IV IV每次选择必须是随机的,而不仅仅是不同的。例如每次加密 I V IV IV都加一,这样构造出的方案是不安全的

    • Chained CBC mode

      在这里插入图片描述

      m 1 , m 2 , m 3 m_1,m_2,m_3 m1,m2,m3是第一条消息, m 4 , m 5 m_4,m_5 m4,m5是第二条消息

      这个是有状态的CBC模式变体,看起来也是CPA-secure的,其!实!不!是!

    • 针对Chained CBC mode的攻击

      • m 1 ∈ { m 0 1 , m 1 1 } m_1\in\left\{m_0^1,m_1^1\right\} m1{m01,m11},收到密文 I V , c 1 , c 2 , c 3 IV,c_1,c_2,c_3 IV,c1,c2,c3
      • 构造明文 m 4 = I V ⊕ m 1 0 ⊕ c 3 m_4=IV\oplus m_1^0\oplus c_3 m4=IVm10c3,收到密文 c 4 , c 5 c_4,c_5 c4,c5
      • 当且仅当 c 4 = c 1 c_4=c_1 c4=c1时, m 1 = m 1 0 m_1=m_1^0 m1=m10

      这个故事告诉我们,戏说不是胡说,改编不是乱编

3. Output Feedback (OFB) mode
  1. 图示:

    在这里插入图片描述

    • 首先均匀选择初始向量 I V ∈ { 0 , 1 } n IV\in\left\{0,1\right\}^n IV{0,1}n y 0 : = I V y_0:=IV y0:=IV

    • y i : = F k ( y i − 1 ) y_i:=F_k(y_{i-1}) yi:=Fk(yi1)

    • c i : = y i ⊕ m i c_i:=y_i\oplus m_i ci:=yimi

    注意和CBC一样,初始向量 I V IV IV也是密文的一部分

    因为 m m m不经过 F k F_k Fk,所以不需要 F k F_k Fk一定可逆(即 F k F_k Fk甚至不需要是一个排列)

  2. 分析与扩展

    • 该模式是CPA-secure(前提是 F F F为伪随机函数)

    • 虽然加解密仍然需要按顺序进行,但是由于大量的计算(即伪随机流的生成)可以独立于要加密的实际消息进行。因此,可以使用预处理提前生成伪随机流

      以上两点注意和CBC联系

    • 该模式更像一个异步流密码模式

    • 该模式明文可以不必是分组长度的倍数,因为生成的流可以截断

    • 该模式的有状态变体(即,最后生成的 y l y_{\mathscr{l}} yl当做下一条消息加密用到的 I V IV IV)也是安全的

      和CBC不一样

      这个变体等价于同步流密码模式

    • 课本上的另外一个变体,我觉得也很有意思(课本将 F k F_k Fk直接用DES代替了)

      在这里插入图片描述

4. Counter (CTR) mode
  1. 图示:

    在这里插入图片描述

    • 首先均匀选择 ctr ∈ { 0 , 1 } n \textsf{ctr}\in\left\{0,1\right\}^n ctr{0,1}n

    • 生成伪随机流 y i : = F k ( ctr+i ) y_i:=F_k(\textsf{ctr+i}) yi:=Fk(ctr+i)

      此处加法是模运算

    • c i : = y i ⊕ m i c_i:=y_i\oplus m_i ci:=yimi

      初始值 ctr \textsf{ctr} ctr也是密文的一部分

      不需要 F k F_k Fk一定可逆(即 F k F_k Fk甚至不需要是一个排列)

  2. 分析与扩展

    注意和OFB模式联系

    • 该模式也像一个异步流密码模式

      与结构2类似,流密码由分组密码构造而来

    • 该模式明文可以不必是分组长度的倍数,因为生成的流可以截断

    • 该模式的有状态变体也是安全的

    • 与前面讨论的所有安全模式相比,CTR模式的优点是加密和解密可以完全并行(parallelize),因为所有的伪随机流块都可以彼此独立地计算。而且,可以只单独计算其中一个分组的加解密!!

      斗宗强者,恐怖如斯

5. Cipher FeedBack (CFB) mode

上课教材的东西,仅拿来补充

在这里插入图片描述

3.6.3 定理8(3.32)

和定理7非常类似

1. 阐述

如果 F F F伪随机函数,CTR模式是CPA-secure

2. 证明

沿用定理7的证明模板

​ 证明模板第一部分:

  1. 将CTR模式中的伪随机函数 F k F_k Fk换为真随机函数 f f f,构造出真随机加密方案 Π ~ = ( Gen ~ , Enc ~ , Dec ~ ) \widetilde{\Pi}=(\widetilde{\textsf{Gen}},\widetilde{\textsf{Enc}},\widetilde{\textsf{Dec}}) Π =(Gen ,Enc ,Dec )

    • Gen ~ : \widetilde{\textsf{Gen}}: Gen :均匀选择 f ∈ Func n f\in\textsf{Func}_n fFuncn
    • Enc ~ , Dec ~ : \widetilde{\textsf{Enc}},\widetilde{\textsf{Dec}}: Enc ,Dec :仅将 Enc , Dec \textsf{Enc},\textsf{Dec} Enc,Dec中的 F k F_k Fk换为 f f f

    Enc ~ , Dec ~ \widetilde{\textsf{Enc}},\widetilde{\textsf{Dec}} Enc ,Dec 都不是有效算法,但并不影响我们的证明目的

  2. 固定一个PPT敌手 A \mathcal{A} A q ( n ) q(n) q(n) A ( 1 n ) \mathcal{A}(1^n) A(1n)向加密预言机请求查询数量的上界(upper bound),存在 negl ( n ) \textsf{negl}(n) negl(n)满足下列不等式是我们的证明目标
    ∣ Pr [ P r i v K A , Π cpa ( n ) = 1 ] − Pr [ P r i v K A , Π ~ cpa ( n ) = 1 ] ∣ ≤ negl ( n ) (1) \Big\vert\text{Pr}\Big[\mathrm{PrivK}^\textsf{cpa}_{\mathcal{A},\Pi}(n)=1\Big]-\text{Pr}\Big[\mathrm{PrivK}^\textsf{cpa}_{\mathcal{A},\widetilde{\Pi}}(n)=1\Big]\Big\vert\leq\textsf{negl}(n) \tag{1} Pr[PrivKA,Πcpa(n)=1]Pr[PrivKA,Π cpa(n)=1]negl(n)(1)
    结合定理7非常非常容易证明

    证明模板第二部分:

  3. 接下来我们要证明的是该不等式
    Pr [ P r i v K A , Π ~ cpa ( n ) = 1 ] < 1 2 + 2 q ( n ) 2 2 n (2) \text{Pr}\Big[\mathrm{PrivK}^\textsf{cpa}_{\mathcal{A},\widetilde{\Pi}}(n)=1\Big]<\frac{1}{2}+\frac{2q(n)^2}{2^n} \tag{2} Pr[PrivKA,Π cpa(n)=1]<21+2n2q(n)2(2)
    结合式子(1)(2),可得:
    Pr [ P r i v K A , Π ( n ) cpa = 1 ] < 1 2 + 2 q ( n ) 2 2 n + negl ( n ) \text{Pr}\Big[\mathrm{PrivK}^\textsf{cpa}_{\mathcal{A},\Pi(n)}=1\Big]<\frac{1}{2}+\frac{2q(n)^2}{2^n}+\textsf{negl}(n) Pr[PrivKA,Π(n)cpa=1]<21+2n2q(n)2+negl(n)
    因为 q q q是多项式,所以 2 q ( n ) 2 2 n \frac{2q(n)^2}{2^n} 2n2q(n)2是可忽略函数,即上式是我们终极证明目标

  4. l ∗ ( ≤ q ( n ) ) \mathscr{l}^*(\leq q(n)) l(q(n))表示 A \mathcal{A} A P r i v K A , Π ~ cpa ( n ) \mathrm{PrivK}^\textsf{cpa}_{\mathcal{A},\widetilde{\Pi}}(n) PrivKA,Π cpa(n)中输出明文消息 m 0 m_0 m0 m 1 m_1 m1的长度(按分组算,即有几组)。 ctr ∗ \textsf{ctr}^* ctr表示生成挑战密文时所用的初始值,即 f f f被应用在 ctr ∗ + 1 , . . . , ctr ∗ + l ∗ \textsf{ctr}^*+1,...,\textsf{ctr}^*+\mathscr{l}^* ctr+1,...,ctr+l

    j j j个分组加密方法: m j ⊕ f ( ctr ∗ + j ) m_j\oplus f(\textsf{ctr}^*+j) mjf(ctr+j)

    注意这儿的 m j m_j mj是明文的第 j j j个分组!!不是第 j j j个明文!!

    l i ( ≤ q ( n ) ) \mathscr{l}_i(\leq q(n)) li(q(n))表示 A \mathcal{A} A的第 i i i次查询中明文消息 m m m的长度(按分组算,即有几组); ctr i \textsf{ctr}_i ctri表示该次查询所用的初始值,即 f f f被应用在 ctr i + 1 , . . . , ctr i + l i \textsf{ctr}_i+1,...,\textsf{ctr}_i+\mathscr{l}_i ctri+1,...,ctri+li

  5. 故有以下两种可能:

    • 不存在任何 i , j , j ∗ ≥ 1 ( j ≤ l i , j ∗ ≤ l ∗ ) i,j,j^*\geq1(j\leq\mathscr{l}_i ,j^*\leq\mathscr{l}^*) i,j,j1(jli,jl),可以令 ctr i + j = ctr ∗ + j ∗ \textsf{ctr}_i+j=\textsf{ctr}^*+j^* ctri+j=ctr+j

      即, ctr ∗ + 1 , . . . , ctr ∗ + l ∗ \textsf{ctr}^*+1,...,\textsf{ctr}^*+\mathscr{l}^* ctr+1,...,ctr+l在之前的查询中从未被使用

      A \mathcal{A} A无法从 f ( ctr ∗ + 1 ) , . . . , f ( ctr ∗ + l ∗ ) f(\textsf{ctr}^*+1),...,f(\textsf{ctr}^*+\mathscr{l}^*) f(ctr+1),...,f(ctr+l)中得到任何信息(毕竟是真随机),因此 A \mathcal{A} A输出 b ′ = b b'=b b=b的概率恰好是 1 2 \frac{1}{2} 21

      本质上就是一次一密

    • 存在 i , j , j ∗ ≥ 1 ( j ≤ l i , j ∗ ≤ l ∗ ) i,j,j^*\geq1(j\leq\mathscr{l}_i ,j^*\leq\mathscr{l}^*) i,j,j1(jli,jl),可以令 ctr i + j = ctr ∗ + j ∗ \textsf{ctr}_i+j=\textsf{ctr}^*+j^* ctri+j=ctr+j

      因为 f ( ctr i + j ) = f ( ctr ∗ + j ∗ ) f(\textsf{ctr}_i+j)=f(\textsf{ctr}^*+j^*) f(ctri+j)=f(ctr+j),敌手很轻易就能推断出计算挑战密文时用到的 ctr \textsf{ctr} ctr,即方案被攻破

  6. 设上述第二种情况为事件 Overlap \textsf{Overlap} Overlap

    我们假设 l ∗ = l i = q ( n ) \mathscr{l}^*=\mathscr{l}_i=q(n) l=li=q(n)来让该事件发生概率最大化

    说白了就是序列 ctr ∗ + 1 , . . . , ctr ∗ + q ( n ) \textsf{ctr}^*+1,...,\textsf{ctr}^*+q(n) ctr+1,...,ctr+q(n)与序列 ctr i + 1 , . . . , ctr i + q ( n ) \textsf{ctr}_i+1,...,\textsf{ctr}_i+q(n) ctri+1,...,ctri+q(n)发生重叠,这种情况我们称为 Overlap i \textsf{Overlap}_i Overlapi

    故我们计算其概率:
    Pr [ Overlap ] ≤ ∑ i = 1 q ( n ) Pr [ Overlap i ] (3) \text{Pr}[\textsf{Overlap}]\leq\sum^{q(n)}_{i=1}\text{Pr}[\textsf{Overlap}_i] \tag{3} Pr[Overlap]i=1q(n)Pr[Overlapi](3)

    利用联合边界(Union Bound)公式:
    Pr [ ∨ i = 1 k E i ] ≤ ∑ i = 1 k Pr [ E i ] \text{Pr}\Big[\vee^k_{i=1}E_i\Big]\leq\sum^{k}_{i=1}\text{Pr}[E_i] Pr[i=1kEi]i=1kPr[Ei]

  7. 固定 ctr ∗ \textsf{ctr}^* ctr,我们可计算出只要令 ctr i \textsf{ctr}_i ctri满足以下不等式即可:
    ctr ∗ − q ( n ) + 1 ≤ ctr i ≤ ctr ∗ + q ( n ) − 1 \textsf{ctr}^*-q(n)+1\leq\textsf{ctr}_i\leq\textsf{ctr}^*+q(n)-1 ctrq(n)+1ctrictr+q(n)1
    2 q ( n ) − 1 2q(n)-1 2q(n)1项,如下图所示:

    在这里插入图片描述

  8. 易得:
    Pr [ Overlap i ] = 2 q ( n ) − 1 2 n < 2 q ( n ) 2 n \text{Pr}[\textsf{Overlap}_i]=\frac{2q(n)-1}{2^n}<\frac{2q(n)}{2^n} Pr[Overlapi]=2n2q(n)1<2n2q(n)
    结合式子(3),可得:
    Pr [ Overlap < 2 q ( n ) 2 2 n \text{Pr}[\textsf{Overlap}<\frac{2q(n)^2}{2^n} Pr[Overlap<2n2q(n)2

  9. 综上,我们可求出敌手 A \mathcal{A} A成功的概率:
    Pr [ P r i v K A , Π ~ cpa ( n ) = 1 ] = Pr [ P r i v K A , Π ~ cpa ( n ) = 1 ∧ Overlap ] + Pr [ P r i v K A , Π ~ cpa ( n ) = 1 ∧ Overlap ‾ ] ≤ Pr [ Overlap ] + Pr [ P r i v K A , Π ~ cpa ( n ) = 1   ∣   Overlap ‾ ] < 2 q ( n ) 2 2 n + 1 2 \begin{aligned} \text{Pr}\Big[\mathrm{PrivK}^\textsf{cpa}_{\mathcal{A},\widetilde{\Pi}}(n)=1\Big]=&\text{Pr}\Big[\mathrm{PrivK}^\textsf{cpa}_{\mathcal{A},\widetilde{\Pi}}(n)=1\wedge\textsf{Overlap}\Big]\\ &+\text{Pr}\Big[\mathrm{PrivK}^\textsf{cpa}_{\mathcal{A},\widetilde{\Pi}}(n)=1\wedge\overline{\textsf{Overlap}}\Big]\\ &\leq\text{Pr}[\textsf{Overlap}]+\text{Pr}\Big[\mathrm{PrivK}^\textsf{cpa}_{\mathcal{A},\widetilde{\Pi}}(n)=1\ \vert\ \overline{\textsf{Overlap}}\Big]\\ &<\frac{2q(n)^2}{2^n}+\frac{1}{2} \end{aligned} Pr[PrivKA,Π cpa(n)=1]=Pr[PrivKA,Π cpa(n)=1Overlap]+Pr[PrivKA,Π cpa(n)=1Overlap]Pr[Overlap]+Pr[PrivKA,Π cpa(n)=1  Overlap]<2n2q(n)2+21
    证毕!!

3.6.4 思考与补充

1. Modes of operation and message tampering

操作模式和消息篡改

  1. “良性”(即非对抗性)传输错误:可以使用标准技术(例如,错误纠正或重新传输)来解决

  2. “恶性”(即对抗性)篡改:消息完整性或消息身份验证的问题应该与加密分开处理

    下一章中要做的

2. Block length and concrete security

分组长度不易太短,着重提到一点:

根据“生日”问题的分析,当 I V IV IV的长度为 l \mathscr{l} l时,我们认为在传输 2 l / 2 2^{\mathscr{l}/2} 2l/2个明文后,向量 I V IV IV会发生重复

例如:当 l = 64 \mathscr{l}=64 l=64时,在大约 2 32 ≈ 4 , 300 , 000 , 000 2^{32}\approx4,300,000,000 2324,300,000,000次加密(大约34GB明文)后, I V IV IV会发生重复。看着挺大,但其实风险不小的。

3. IV misuse

一旦 I V IV IV发生滥用,OFB和CTR马上就变得不再安全,就像一次一密一样,两次加密密文一异或,会泄露很多消息。

因为它们本身更像是流密码,一步失步步失

而CBC就显得相对安全,因为在CBC模式下,很可能只经过几个分组后,分组密码的输入就会“发散”,攻击者将无法学到前几个消息块以外的任何信息。

解决办法倒是有,将OFB和CTR改造为有状态加密(

这儿意思应该是,有状态加密可以减少每次选择 I V IV IV时造成的泄露,毕竟每次加密用的初始向量都是上次生成的最后结果。

在敌人眼中,无状态的话每次加密都能截获一个 I V IV IV,而有状态的话只能截获最初加密使用的那个 I V IV IV

3.7 Chosen-Ciphertext Attacks

3.7.1 Defining CCA-Security

注意和3.4.2联系

1. The CCA indistinguishability experiment P r i v K A , Π cca ( n ) \mathrm{PrivK}^\textsf{cca}_{\mathcal{A},\Pi}(n) PrivKA,Πcca(n)
  1. 运行 Gen ( 1 n ) \textsf{Gen}(1^n) Gen(1n)生成一个密钥 k k k

  2. 给敌手 A \mathcal{A} A输出 1 n 1^n 1n Enc k ( ⋅ ) \textsf{Enc}_k(\cdot) Enck() Dec k ( ⋅ ) \textsf{Dec}_k(\cdot) Deck()的预言机访问权限(oracle access),其输出一对等长的消息 m 0 , m 1 m_0,m_1 m0,m1

    A \mathcal{A} A同时拥有加密预言机解密语言机的访问权限

    重点提醒:选择密文攻击包含着选择明文攻击!!

  3. 均匀选择一个比特 b ∈ { 0 , 1 } b\in{\left\{0,1\right\}} b{0,1},计算挑战密文 c ← Enc k ( m b ) c\leftarrow\textsf{Enc}_k(m_{b}) cEnck(mb),并将计算结果交给 A \mathcal{A} A

  4. 敌手 A \mathcal{A} A继续拥有 Enc k ( ⋅ ) \textsf{Enc}_k(\cdot) Enck() Dec k ( ⋅ ) \textsf{Dec}_k(\cdot) Deck()的预言机访问权限,注意不能解密挑战密文本身,随后输出比特 b ′ b' b

    可以理解为可以解密脱离保密期的文件,但是无法解密还在保密期中的文件

  5. 如果 b ′ = b b'=b b=b,输出1,即 A \mathcal{A} A攻击成功;如果 b ′ ≠ b b'\neq b b=b,输出0

解密预言机(decryption oracle),顾名思义,就是把你输进去的东西解密并返回给你

2. 定义12(3.33)

如果对于所有PPT攻击者 A \mathcal{A} A都有一个可忽略函数 negl \textsf{negl} negl满足下列不等式,则说明加密方案 Π = ( G e n , E n c , D e c ) \Pi=(\mathsf{Gen,Enc,Dec}) Π=(Gen,Enc,Dec)在选择密文攻击下具有不可区分的加密性(indistinguishable encryptions under a chosen-ciphertext attack,即 CCA-secure \textsf{CCA-secure} CCA-secure
P r [ P r i v K A , Π cca ( n ) = 1 ] ≤ 1 2 + negl ( n ) \mathrm{Pr}\Big[\mathrm{PrivK}^\textsf{cca}_{\mathcal{A},\Pi}(n)=1\Big]\leq\frac{1}{2}+\textsf{negl}(n) Pr[PrivKA,Πcca(n)=1]21+negl(n)
t h e    p r o b a b i l i t y    i s    t a k e n    o v e r : the\ \ probability\ \ is\ \ taken\ \ over: the  probability  is  taken  over: A \mathcal{A} A的随机性,实验中所用的随机性( Enc \textsf{Enc} Enc

3. 要点
  1. 与定理6类似,任何 CCA-secure \textsf{CCA-secure} CCA-secure的私有密钥加密方案也是 CCA-secure   for   multiple   encryptions \textsf{CCA-secure\ for\ multiple encryptions} CCA-secure for multiple encryptions

  2. 再次强调对手不能请求解密挑战密文本身

  3. 就算随便瞎编一个密文请求解密也能达到意想不到的结果,比如银行处理非正常请求时的操作也会泄露一部分信息

  4. 加密通常用于高级协议;例如,一个加密方案可能被用作身份验证协议的一部分,其中一方将密文发送给另一方,后者将密文解密并返回结果。在这种情况下,诚实的一方的行为就像解密预言机一样。

  5. 目前为止,我们看到的所有加密方案都不是CCA-secure的,拿攻击结构3来举例:

    • Enc k ( m ) = ⟨ r , F k ( r ) ⊕ m ⟩ \textsf{Enc}_k(m)=\lang r,F_k(r)\oplus m\rang Enck(m)=r,Fk(r)m

    • 构造明文 m 0 = 0 n , m 1 = 1 n m_0=0^n,m_1=1^n m0=0n,m1=1n,收到密文 c = ⟨ r , s ⟩ c=\lang r,s\rang c=r,s

    • 翻转 s s s的第一个比特得到 c ′ c' c,然后要求预言机解密 c ′ c' c

      由于 c ≠ c ′ c\neq c' c=c,所以可以解密

    • 返回 1 0 n − 1 10^{n-1} 10n1,则 b = 0 b=0 b=0;返回 0 1 n − 1 01^{n-1} 01n1,则 b = 1 b=1 b=1

  6. CCA-secure包含了一个非常重要的属性,称为非延展性(non-malleability)。粗略地说,非延展性加密方案具有这样的属性:如果对手试图修改给定的密文,结果要么是无效的密文,要么是密文被解密为与原始文本无关的明文

4.5.4将会继续涉及

3.7.2 Padding-Oracle Attacks

  1. 敌手能力:敌手仅需拥有确认修改后的密文是否能正确解密的能力

    对定义12的敌手能力的要求进行一定松弛

  2. 适用场景:例如,如果服务器接收到没有正确解密的密文,它可能请求重传或终止会话,而这些事件中的任何一个都会在观察到的流量中产生明显的变化,并被敌手捕捉到

  3. 具体实例:

    (i)方案描述:

    • 基本参数:

      • L L L:分组长度
      • b b b:需要填充的字节
      • m e s s a g e message message:原明文
      • e n c o d e d   d a t a encoded\ data encoded data:传输明文,即填充后的明文
    • 填充规则:PKCS #5

      一个字节我们用两个十六进制位去表示,当有 b b b个字节需要补充时,每个填充字节表现形式(数值大小)为0xb.(比如 b = 1 b=1 b=1,则在message后填充0x01; b = 4 b=4 b=4,则在message后填充0x04040404)

      b ∈ [ 1 , L ] b\in[1,L] b[1,L],即无论如何都要填东西进去,即使原明文恰恰好是分组长度的整数倍

    • 验证方式:直接读取最后一个字节的值 b b b,然后验证解密结果的最后 b b b个字节的值是否都是 b b b

    • 加密模式:CBC模式

    • 正常情况:接收者接收到密文后解密检查消息是否有进行正确的填充,然后去掉填充获得 m e s s a g e message message。如果没有进行正确填充则返回**“填充错误”(“bad padding” )。我们可以认为这个“填充错误”相当于提供了一部分的解密预言机**。

    (ii)构建场景:

    • 一个三分组的CBC模式, ⟨ I V , c 1 , c 2 ⟩ \lang IV,c_1,c_2\rang IV,c1,c2表示为攻击者所知道的密文分组

    • m 1 , m 2 m_1,m_2 m1,m2表示传输明文(敌手未知),且
      m 2 = F k − 1 ( c 2 ) ⊕ c 1 m_2=F_k^{-1} (c_2)\oplus c_1 m2=Fk1(c2)c1

    m 2 m_2 m2 0 x b . . . 0 x b ⏟ b   t i m e s \underbrace{0\text{x}b...0\text{x}b}_{b\ times} b times 0xb...0xb结尾

    (iii)攻击方法:

    1. 确定 b b b

      • 随意构造 c 1 ′ c'_1 c1,并 ⟨ I V , c 1 ′ , c 2 ⟩ \lang IV,c'_1,c_2\rang IV,c1,c2返回给预言机,这样就可以随意影响 m 2 m_2 m2,即:
        m 2 ′ = F k − 1 ( c 2 ) ⊕ c 1 ′ m'_2=F_k^{-1} (c_2)\oplus c'_1 m2=Fk1(c2)c1

      • 而系统就是通过检测 m 2 m_2 m2(最后一个分组),来确定是否填充错误

      • 修改 c 1 c_1 c1的左起第一个比特,如果报错,说明发生下图的情况

        在这里插入图片描述

        即因为检测到第一个比特的值不是 0 x b 0\text{x}b 0xb而报错,故 b = L b=L b=L

      • 如果没报错,依次类推,将修改逐渐左移,哪儿开始报错说明哪儿从开始填充的

    2. 确定 m 2 m_2 m2

      • 已知填充长度为 b b b,设倒数 b + 1 b+1 b+1位的字节为 0 x B 0\text{x}B 0xB,即 m 2 m_2 m2 0 x B 0 x b . . . 0 x b ⏟ b   t i m e s 0\text{x}B\underbrace{0\text{x}b...0\text{x}b}_{b\ times} 0xBb times 0xb...0xb结尾

      • 按如下方式构造 Δ i \Delta_i Δi
        Δ i = def 0 x 00 ⋅ ⋅ ⋅ 0 x 00   0 x i   0 x ( b + 1 ) ⋅ ⋅ ⋅ 0 x ( b + 1 ) ⏞ b   t i m e s ⊕    0 x 00 ⋅ ⋅ ⋅ 0 x 00    0 x 00   0 x b ⋅ ⋅ ⋅ 0 x b ⏞ b   t i m e s \Delta_i\overset{\text{def}}{=}0\text{x}00\cdot\cdot\cdot0\text{x}00\ 0\text{x}i\ \overbrace{0\text{x}(b+1)\cdot\cdot\cdot0\text{x}(b+1)}^{b\ times}\\ \oplus\ \ 0\text{x}00\cdot\cdot\cdot0\text{x}00\ \ 0\text{x}00\ \overbrace{0\text{x}b\cdot\cdot\cdot0\text{x}b}^{b\ times} Δi=def0x000x00 0xi 0x(b+1)0x(b+1) b times  0x000x00  0x00 0xb0xb b times

    • 向预言机查询 ⟨ I V , c 1 ⊕ Δ i , c 2 ⟩ \lang IV,c_1\oplus\Delta_i,c_2\rang IV,c1Δi,c2 Δ i \Delta_i Δi后半部分和 m 2 m_2 m2的后 b b b个字节抵消了,相当于硬生生填充长度 b b b将变成了 b + 1 b+1 b+1

    • 现在只有 0 x ( B ⊕ i ) = 0 x ( b + 1 ) 0\text{x}(B\oplus i)=0\text{x}(b+1) 0x(Bi)=0x(b+1)时系统才不会报错,即最多查询 2 8 2^8 28个值 Δ 1 , . . . , Δ 2 8 − 1 \Delta_1,...,\Delta_{2^8-1} Δ1,...,Δ281就能推出 0 x B 0\text{x}B 0xB的值

      因为一个字节(两个十六进制数)为8位

    • 依次类推 L − b L-b Lb次,就能得出 m 2 m_2 m2(最后一个分组)的值

  4. 确定整个明文

    作者说可以,但抱歉我真没时间细想这个问题了

3.7.2 A padding-oracle attack on CAPTCHAs

CAPTCHA(验证码)是一个扭曲的图像,比如一个英语单词,人类容易阅读,但计算机很难处理。验证码的使用是为了确保人类用户(而不是某些自动化软件)与网页进行交互

  1. 系统配置:

    • U \mathcal{U} U:用户
    • S W \mathcal{S}_W SW:网页服务器
    • S C \mathcal{S}_C SC:验证码服务器
    • w w w:英文单词,扭曲图片上的文字
    • k k k S W \mathcal{S}_W SW S C \mathcal{S}_C SC之间共享的密钥

    在这里插入图片描述

    S W \mathcal{S}_W SW视角里,用户没有密钥还能知道 w w w的值,说明该用户肯定是个真人

  2. 攻击:第三步可以应用上述padding-oracle attack从而得到 w w w的值,这个过程是全自动的,因此自动软件可以成功攻击

  3. 防御:当验证出错时,不返回警告而是随机图片等方法,根本上还是要尽量实现CCA-secure

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值