伪随机函数及基于伪随机函数的CPA不可区分私钥加密方案

CPA不可区分实验 P r i v K A , Π c p a ( n ) PrivK_{\Alpha, \Pi}^{cpa}(n) PrivKA,Πcpa(n)
  • 定义

    1. 生成密钥 k ← G e n ( 1 n ) k \leftarrow Gen(1^n) kGen(1n)
    2. 输入 1 n 1^n 1n A \Alpha A A \Alpha A可以访问 E n c k ( ⋅ ) Enc_k(\cdot) Enck()预言机(即它可以加密任何它选择的消息),输出一对等长的消息 m 0 , m 1 m_0, m_1 m0,m1
    3. 选择一个随机比特 b ← { 0 , 1 } b \leftarrow \{0, 1\} b{ 0,1},计算密文 c ← E n c k ( m b ) c \leftarrow Enc_k(m_b) cEnck(mb),交给 A \Alpha A
    4. A \Alpha A依然可以访问 E n c k ( ⋅ ) Enc_k(\cdot) Enck()预言机,(在多项式时间内)加密任何它选择的消息,输出一个比特 b ′ b^{\\'} b
    5. 如果 b ′ = b b^{\\'} = b b=b,实验输出 1 1 1,否则输出 0 0 0。如果 P r i v K A , Π c p a ( n ) = 1 PrivK_{\Alpha, \Pi}^{cpa}(n) = 1 PrivKA,Πcpa(n)=1,则 A \Alpha A成功
  • 理解

    在这个实验中, A \Alpha A被赋予了更强的能力:它可以加密任何它希望的明文

    注意到生成密钥是本实验的第一步,这也是为 A \Alpha A提供的,它可以根据 A E n c k ( ⋅ ) \Alpha^{Enc_k(\cdot)} AEnck()来选择它输出的消息 m 0 , m 1 m_0, m_1 m0,m1

    显然,任何确定性加密无法通过本实验,它只需要通过访问预言机就可以知道哪条消息被加密了

CPA不可区分性
  • 定义

    对称密钥加密方案 Π = ( G e n , E n c , D e c ) \Pi = (Gen, Enc, Dec) Π=(Gen,Enc,Dec),如果对所有概率多项式敌手 A \Alpha A,存在一个可忽略函数 n e g l negl negl,使得
    P r [ P r i v K A , Π c p a ( n ) = 1 ] ≤ 1 2 + n e g l Pr[PrivK_{\Alpha, \Pi}^{cpa}(n) = 1] \le \frac{1}{2} + negl Pr[PrivKA,Πcpa(n)=1]21+negl
    则称 Π \Pi Π具备CPA条件下的不可区分性

伪随机函数
  • 定义

    F : { 0 , 1 } ∗ × { 0 , 1 } ∗ → { 0 , 1 } ∗ F: \{0, 1\}^* \times \{0, 1\}^* \rightarrow \{0, 1\}^* F:{ 0,1}×{ 0,1}{ 0,1}是有效的、长度保留的、带密钥的函数。如果对所有多项式时间区分器 D D D,存在一个可忽略的函数 n e g l negl negl,满足
    ∣ P r [ D F k ( ⋅ ) ( 1 n ) = 1 ] − P r [ D f ( ⋅ ) ( 1 n ) = 1 ] ∣ ≤ n e g l ( n ) |Pr[D^{F_k(\cdot)}(1^n) = 1] - Pr[D^{f(\cdot)}(1^n) = 1]| \le negl(n) Pr[DFk()(1n)=1]Pr[Df()(1n)=1]negl(n)
    则称 F F F是一个伪随机函数,其中 k ← { 0 , 1 } n k \leftarrow \{0, 1\}^n k{ 0,1}n是均匀随机选择的, f f f是真随机选择函数

  • 理解

    有效的:其计算在多项式时间内完成

    长度保留:密钥、输入、输出等长

    带密钥:顾名思义

    也就是说,任何多项式 D D D无法分辨出 F F F和真随机函数

基于伪随机函数的CPA安全加密
  • 构造

    F F F是伪随机函数,定义一个消息长度为 n n n的对称密钥加密方案 Π \Pi Π

    • G e n Gen Gen:输入 1 n 1^n 1n,生成随机密钥 k ← { 0 , 1 } n k \leftarrow \{0, 1\}^n k{ 0,1}n并输出

    • E n c Enc Enc:输入密钥 k ∈ { 0 , 1 } n k \in \{0, 1\}^n k{ 0,1}n,消息 m ∈ { 0 , 1 } n m \in \{0, 1\}^n m{ 0,1}n,均匀随机的选择 r ← { 0 , 1 } n r \leftarrow \{0, 1\}^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

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

  • 理解

    在确定密钥的情况下, r r r为密文的生成提供了额外的随机性,因此同样的明文会被加密为不同的密文

    r r r是作为密文的一部分发送出去的,因为 r r r本身也是随机的,所以不会泄露任何信息

  • 证明

    F F F是伪随机函数,则 Π \Pi Π是CPA不可区分的

    区分器 D D D被指定输入 1 n 1^n 1n,以及随时访问预言机 O : { 0 , 1 } n → { 0 , 1 } n \Omicron : \{0, 1\}^n \rightarrow \{0, 1\}^n O:{ 0,1}n{ 0,1}n

    1. 运行 A ( 1 n ) \Alpha(1^n) A(1n),无论何时 A \Alpha A向其加密预言机询问消息 m m m,按以下方式回答:

      ( a ) (a) (a) 均匀随机选择 r ← { 0 , 1 } n r \leftarrow \{0, 1\}^n r{ 0,1}n

      ( b ) (b) (b) 询问 O ( r ) \Omicron(r) O(r),获得 s ′ s^{\\'} s

      ( c ) (c) (c) 返回密文 ⟨ r , s ′ ⊕ m b ⟩ \lang r, s^{\\'} \oplus m_b \rang r,smb A \Alpha A

    2. A \Alpha A输出消息 m 0 , m 1 ∈ { 0 , 1 } n m_0, m_1 \in \{0, 1\}^n m0,m1{ 0,1}n时,随机选择一个比特 b ← { 0 , 1 } b \leftarrow \{0, 1\} b{ 0,1},之后:

      ( a ) (a) (a) 均匀随机选择 r ← { 0 , 1 } n r \leftarrow \{0, 1\}^n r{ 0,1}n

      ( b ) (b) (b) 询问 O ( r ) \Omicron(r) O(r),获得 s ′ s^{\\'} s

      ( c ) (c) (c) 返回挑战密文 ⟨ r , s ′ ⊕ m b ⟩ \lang r, s^{\\'} \oplus m_b \rang r,smb A \Alpha A

    3. 对最终 A \Alpha A的输出 b ′ b^{\\'} b,如果 b ′ = b b^{\\'} = b b=b D D D输出 1 1 1,否则输出 0 0 0

      如果 D D D面对的是一个真随机函数,那么 A A A面对的是 Π ~ \tilde{\Pi} Π~
      P r [ D f ( ⋅ ) ( n ) = 1 ] = P r [ P r i v K A , Π ~ c p a ( n ) = 1 ] ≤ 1 2 + q ( n ) 2 n Pr[D^{f(\cdot)}(n) = 1] = Pr[PrivK_{\Alpha, \tilde{\Pi}}^{cpa}(n) = 1] \le \frac{1}{2} + \frac{q(n)}{2^n} Pr[Df()(n)=1]=Pr[PrivKA,Π~cpa(n)=1]21+2nq(n)
      如果 D D D面对的是一个伪随机函数,那么 A \Alpha A面对的是 Π \Pi Π
      P r [ D F k ( ⋅ ) ( n ) = 1 ] = P r [ P r i v K A , Π c p a ( n ) = 1 ] = 1 2 + ε ( n ) Pr[D^{F_k(\cdot)}(n) = 1] = Pr[PrivK_{\Alpha, \Pi}^{cpa}(n) = 1] = \frac{1}{2} + \varepsilon(n) Pr[DFk()(n)=1]=Pr[PrivKA,Πcpa(n)=1]=21+ε(n)
      因此
      P r [ D F k ( ⋅ ) ( n ) = 1 ] − P r [ D f ( ⋅ ) ( n ) = 1 ] ≥ ε ( n ) − q ( n ) 2 n Pr[D^{F_k(\cdot)}(n) = 1] - Pr[D^{f(\cdot)}(n) = 1] \ge \varepsilon(n) - \frac{q(n)}{2^n} Pr[DFk()(n)=1]Pr[Df()(n)=1]ε(n)2nq(n)
      由于
      n e g l ≥ P r [ D F k ( ⋅ ) ( n ) = 1 ] − P r [ D f ( ⋅ ) ( n ) = 1 ] negl \ge Pr[D^{F_k(\cdot)}(n) = 1] - Pr[D^{f(\cdot)}(n) = 1] neglPr[DFk()(n)=1]Pr[Df()(n)=1]

      ε ( n ) ≤ n e g l + q ( n ) 2 n \varepsilon(n) \le negl + \frac{q(n)}{2^n} ε(n)negl+2nq(n)
      所以 ε ( n ) \varepsilon(n) ε(n)可忽略, Π \Pi Π是CPA不可区分的

一个通俗的规约证明
  1. D D D接受一个输入 h h h,判断其是真随机函数,还是伪随机函数,并可以访问随机预言机

  2. A \Alpha A可以通过访问 D D D( D D D再访问随机预言机)得到它选择的任何明文的密文,运行 A 1 n \Alpha^{1^n} A1n输出 m 0 , m 1 m_0, m_1 m0,m1,交给 D D D

  3. 随机选择 b ← { 0 , 1 } b \leftarrow \{0, 1\} b{ 0,1},计算 c : = h ( m b ) c := h(m_b) c:=h(mb),交给 A \Alpha A

  4. A \Alpha A可以继续访问 D D D,输出 b ′ b^{\\'} b

  5. 如果 b ′ = b b^{\\'} = b b=b D D D输出 1 1 1,否则 D D D输出 0 0 0

    h h h为真随机函数,
    P r [ D f ( ⋅ ) ( 1 n ) = 1 ] = P r [ P r i v K A , Π ∼ c p a ( n ) = 1 ] ≤ 1 2 + q ( n ) 2 n Pr[D^{f(\cdot)}(1^n) = 1] = Pr[PrivK_{\Alpha, \overset{\sim}{\Pi}}^{cpa}(n) = 1] \le \frac{1}{2} + \frac{q(n)}{2^n} Pr[Df()(1n)=1]=Pr[PrivKA,Πcpa(n)=1]21+2nq(n)
    h h h为伪随机函数,
    P r [ D F k ( ⋅ ) ( 1 n ) = 1 ] = P r [ P r i v K A , Π c p a ( n ) = 1 ] = 1 2 + ε ( n ) Pr[D^{F_k(\cdot)}(1^n) = 1] = Pr[PrivK_{\Alpha, \Pi}^{cpa}(n) = 1] = \frac{1}{2} + \varepsilon(n) Pr[DFk()(1n)=1]=Pr[PrivKA,Πcpa(n)=1]=21+ε(n)
    因此,
    P r [ D F k ( ⋅ ) ( 1 n ) = 1 ] − P r [ D F k ( ⋅ ) ( 1 n ) = 1 ] ≥ ε ( n ) − q ( n ) 2 n Pr[D^{F_k(\cdot)}(1^n) = 1] - Pr[D^{F_k(\cdot)}(1^n) = 1] \ge \varepsilon(n) - \frac{q(n)}{2^n} Pr[DFk()(1n)=1]Pr[DFk()(1n)=1]ε(n)2nq(n)
    因为 F k ( ⋅ ) F_k(\cdot) Fk()为伪随机函数,所以
    ε ( n ) ≤ n e g l ( n ) + q ( n ) 2 n \varepsilon(n) \le negl(n) + \frac{q(n)}{2^n} ε(n)negl(n)+2nq(n)
    ε ( n ) \varepsilon(n) ε(n)可忽略

猜你喜欢

转载自blog.csdn.net/weixin_39578432/article/details/120405776