当前位置:   article > 正文

【现代密码学】笔记 补充7-- CCA安全与认证加密《introduction to modern cryphtography》

【现代密码学】笔记 补充7-- CCA安全与认证加密《introduction to modern cryphtography》
现代密码学】笔记7-- CCA安全与认证加密《introduction to modern cryphtography》
  • 写在最前面
  • 7 CCA安全与认证加密

写在最前面

主要在 哈工大密码学课程 张宇老师课件 的基础上学习记录笔记。

内容补充:骆婷老师的PPT
《introduction to modern cryphtography》–Jonathan Katz, Yehuda
Lindell(现代密码学——原理与协议)中相关章节
密码学复习笔记 这个博主好有意思

初步笔记,如有错误请指正

快速补充一些密码相关的背景知识


![请添加图片描述](https://img-
blog.csdnimg.cn/direct/be4303f0b4a84238a4c506879e097d19.png)

7 CCA安全与认证加密

  1. 本节学习用于抵抗CCA攻击的加密方案以及同时保证通信机密性和真实性的认证加密方案。

  2. 目录:CCA安全加密,认证加密,确定性加密,密钥派生函数。

  3. 回顾CCA不可区分实验

* CCA不可区分实验  P r i v K A , Π c c a ( n ) \mathsf{PrivK}^{\mathsf{cca}}_{\mathcal{A},\Pi}(n) PrivKA,Πcca​(n): 
  1. 挑战者生成密钥  k ← G e n ( 1 n ) k \gets \mathsf{Gen}(1^n) k←Gen(1n);(为了下一步的预言机)
  2. A \mathcal{A} A 被给予输入  1 n 1^n 1n 和对加密函数  E n c k ( ⋅ ) \mathsf{Enc}_k(\cdot) Enck​(⋅)和解密函数 D e c k ( ⋅ ) \mathsf{Dec}_k(\cdot) Deck​(⋅)的 **预言机访问(oracle access)** A E n c k ( ⋅ ) \mathcal{A}^{\mathsf{Enc}_k(\cdot)} AEnck​(⋅) 和  A D e c k ( ⋅ ) \mathcal{A}^{\mathsf{Dec}_k(\cdot)} ADeck​(⋅),输出相同长度  m 0 , m 1 m_0, m_1 m0​,m1​ ;
  3. 挑战者生成随机比特  b ← { 0 , 1 } b \gets \\{0,1\\} b←{0,1},将挑战密文  c ← E n c k ( m b ) c \gets \mathsf{Enc}_k(m_b) c←Enck​(mb​) 发送给  A \mathcal{A} A;
  4. A \mathcal{A} A 继续对除了挑战密文 c c c之外的预言机的访问,输出 b ′ b' b′;如果 b ′ = b b' = b b′=b,则 A \mathcal{A} A成功 P r i v K A , Π c c a = 1 \mathsf{PrivK}^{\mathsf{cca}}_{\mathcal{A},\Pi}=1 PrivKA,Πcca​=1,否则 0。
* 定义:一个加密方案是CCA安全的,如果实验成功的概率与1/2之间的差异是可忽略的。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. 消息传递方案
* 我们先不直接处理CCA安全,而是研究一个比CCA更安全的通信场景,其中引入了之前学习的真实性要求;
* CCA安全与消息的真实性有关,下面学习同时保护消息机密性和真实性的消息传递方案。
* 密钥生成( **Key-generation** ) 算法输出  k ← G e n ′ ( 1 n ) k \gets \mathsf{Gen'}(1^n) k←Gen′(1n).  k = ( k 1 , k 2 ) k = (k_1,k_2) k=(k1​,k2​).  k 1 ← G e n E ( 1 n ) k_1 \gets \mathsf{Gen}_E(1^n) k1​←GenE​(1n),  k 2 ← G e n M ( 1 n ) k_2 \gets \mathsf{Gen}_M(1^n) k2​←GenM​(1n).
* 消息传递( **Message transmission** )算法由  E n c k 1 ( ⋅ ) \mathsf{Enc}_{k_1}(\cdot) Enck1​​(⋅) 和  M a c k 2 ( ⋅ ) \mathsf{Mac}_{k_2}(\cdot) Mack2​​(⋅) 生成,输出  c ← E n c M a c ′ k 1 , k 2 ( m ) c \gets \mathsf{EncMac'}_{k_1,k_2}(m) c←EncMac′k1​,k2​​(m).
* 解密( **Decryption** )算法由  D e c k 1 ( ⋅ ) \mathsf{Dec}_{k_1}(\cdot) Deck1​​(⋅) 和  V r f y k 2 ( ⋅ ) \mathsf{Vrfy}_{k_2}(\cdot) Vrfyk2​​(⋅) 生成,输出  m ← D e c k 1 , k 2 ′ ( c ) m \gets \mathsf{Dec}'_{k_1,k_2}(c) m←Deck1​,k2​′​(c) 或  ⊥ \bot ⊥.
* 正确性需求:  D e c k 1 , k 2 ′ ( E n c M a c k 1 , k 2 ′ ( m ) ) = m \mathsf{Dec}'_{k_1,k_2}(\mathsf{EncMac}'_{k_1,k_2}(m)) = m Deck1​,k2​′​(EncMack1​,k2​′​(m))=m.
* 注:在消息传递方案中,消息被加密并且被MAC。在解密算法中,当密文没有通过真实性验证时,输出空(可以理解为“报错”);这意味着未认证的密文无法解密。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  1. 定义安全消息传递
* 先定义保护真实性的认证通信,然后定义同时保护机密性和真实性的认证加密。
* 安全消息传递实验( **secure message transmission** )  A u t h A , Π ′ ( n ) \mathsf{Auth}_{\mathcal{A},\Pi'}(n) AuthA,Π′​(n): 
  * k = ( k 1 , k 2 ) ← G e n ′ ( 1 n ) k = (k_1,k_2) \gets \mathsf{Gen}'(1^n) k=(k1​,k2​)←Gen′(1n).
  * A \mathcal{A} A 输入  1 n 1^n 1n 和对  E n c M a c ′ k \mathsf{EncMac'}_k EncMac′k​的预言机访问,并输出  c ← E n c M a c ′ k ( m ) c \gets \mathsf{EncMac'}_{k}(m) c←EncMac′k​(m).
  * m : = D e c k ′ ( c ) m := \mathsf{Dec}'_k(c) m:=Deck′​(c).  A u t h A , Π ′ ( n ) = 1 ⟺ m ≠ ⊥ ∧ m ∉ Q \mathsf{Auth}_{\mathcal{A},\Pi'}(n) = 1 \iff m \ne \bot \land\; m \notin \mathcal{Q} AuthA,Π′​(n)=1⟺m​=⊥∧m∈/​Q.
* 定义: Π ′ \Pi' Π′ 实现认证通信( **authenticated communication** ),如果  ∀ \forall ∀ ppt  A \mathcal{A} A,  ∃ n e g l \exists\; \mathsf{negl} ∃negl 使得, Pr ⁡ [ A u t h A , Π ′ ( n ) = 1 ] ≤ n e g l ( n ) . \Pr[\mathsf{Auth}_{\mathcal{A},\Pi'}(n) = 1] \le \mathsf{negl}(n). Pr[AuthA,Π′​(n)=1]≤negl(n).
* 定义: Π ′ \Pi' Π′ 是安全的认证加密( **secure Authenticated Encryption (A.E.)** ), 如果其既是CCA安全的也是实现了认证通信。
* 问题:CCA安全意味着A.E.吗?(作业)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  1. 关于认证加密的例题
* 如果认为是安全的,那么利用反证法证明;
* 如果认为是不安全的,那么或者可以伪造消息,或者破解明文;
  • 1
  • 2
  1. 加密和认证组合
* 加密和认证如何组合来同时保护机密性和真实性?
* 加密并认证( **Encrypt-and-authenticate** ) (例如, SSH): c ← E n c k 1 ( m ) , t ← M a c k 2 ( m ) . c \gets \mathsf{Enc}_{k_1}(m),\; t \gets \mathsf{Mac}_{k_2}(m). c←Enck1​​(m),t←Mack2​​(m).
* 先认证后加密( **Authenticate-then-encrypt** ) (例如, SSL): t ← M a c k 2 ( m ) , c ← E n c k 1 ( m ∥ t ) . t \gets \mathsf{Mac}_{k_2}(m),\; c \gets \mathsf{Enc}_{k_1}(m\| t). t←Mack2​​(m),c←Enck1​​(m∥t).
* 先加密后认证( **Encrypt-then-authenticate** ) (例如, IPsec): c ← E n c k 1 ( m ) , t ← M a c k 2 ( c ) . c \gets \mathsf{Enc}_{k_1}(m),\; t \gets \mathsf{Mac}_{k_2}(c). c←Enck1​​(m),t←Mack2​​(c).
  • 1
  • 2
  • 3
  • 4
  1. 分析组合的安全性
* 采用全或无(All-or-nothing)分析,即一种组合方案要么在全部情况下都是安全的,要么只要存在一个不安全的反例就被认为是不安全的;
* 加密并认证:  M a c k ′ ( m ) = ( m , M a c k ( m ) ) \mathsf{Mac}'_k(m) = (m, \mathsf{Mac}_k(m)) Mack′​(m)=(m,Mack​(m)). 
  * 这表明,认证可能泄漏消息。
* 先认证后加密: 
  * 一个例子: 
    * T r a n s : 0 → 00 ; 1 → 10 / 01 \mathsf{Trans}: 0 \to 00; 1 \to 10/01 Trans:0→00;1→10/01;
    * E n c ′ \mathsf{Enc}' Enc′ 采用CTR模式;  c = E n c ′ ( T r a n s ( m ∥ M a c ( m ) ) ) c = \mathsf{Enc}'(\mathsf{Trans}(m\| \mathsf{Mac}(m))) c=Enc′(Trans(m∥Mac(m))).
    * 将  c c c 的前两个比特翻转并且验证密文是否有效。 10 / 01 → 01 / 10 → 1 10/01 \to 01/10 \to 1 10/01→01/10→1,  00 → 11 → ⊥ 00 \to 11 \to \bot 00→11→⊥. 
      * 明文为1时,不改变明文;明文为0时,解密无效
    * 如果可以有效解密,则意味着消息的第一比特是1,否则是0;
    * 对于任何MAC,这都不是CCA安全的;
  * 这个例子表明,缺乏完整性保护时,敌手可解密,而密文是否有效也价值1个比特的信息。
* 先加密后认证: 解密: 如果  V r f y ( ⋅ ) = 1 \mathsf{Vrfy}(\cdot) = 1 Vrfy(⋅)=1, 那么  D e c ( ⋅ ) \mathsf{Dec}(\cdot) Dec(⋅); 否则,输出  ⊥ \bot ⊥。下面来证明。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  1. 构造AE/CCA安全的加密方案
* 思想:令解密预言机没用。AE/CCA =CPA-then-MAC。
* Π E = ( G e n E , E n c , D e c ) \Pi_E = (\mathsf{Gen}_E, \mathsf{Enc}, \mathsf{Dec}) ΠE​=(GenE​,Enc,Dec),  Π M = ( G e n M , M a c , V r f y ) \Pi_M = (\mathsf{Gen}_M, \mathsf{Mac}, \mathsf{Vrfy}) ΠM​=(GenM​,Mac,Vrfy).  Π ′ \Pi' Π′: 
  * G e n ′ ( 1 n ) \mathsf{Gen}'(1^n) Gen′(1n):  k 1 ← G e n E ( 1 n ) k_1 \gets \mathsf{Gen}_E(1^n) k1​←GenE​(1n) and  k 2 ← G e n M ( 1 n ) k_2 \gets \mathsf{Gen}_M(1^n) k2​←GenM​(1n)
  * E n c k 1 , k 2 ′ ( m ) \mathsf{Enc}'_{k_1,k_2}(m) Enck1​,k2​′​(m):  c ← E n c k 1 ( m ) c \gets \mathsf{Enc}_{k_1}(m) c←Enck1​​(m),  t ← M a c k 2 ( c ) t \gets \mathsf{Mac}_{k_2}(c) t←Mack2​​(c) and output  < c , t > \left< c,t \right> ⟨c,t⟩
  * D e c k 1 , k 2 ′ ( < c , t > ) = D e c k 1 ( c ) if V r f y k 2 ( c , t ) = ? 1 ; otherwise ⊥ \mathsf{Dec}'_{k_1,k_2}(\left< c,t \right>) = \mathsf{Dec}_{k_1}(c)\ \text{if}\ \mathsf{Vrfy}_{k_2}(c,t) \overset{?}{=} 1;\ \text{otherwise}\ \bot Deck1​,k2​′​(⟨c,t⟩)=Deck1​​(c) if Vrfyk2​​(c,t)=?1; otherwise ⊥
* 加密时,先加密后对密文做认证;解密时,先验证,若未通过验证,则输出空,否则解密。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. AE/CCA安全加密方案证明
* 定理:如果  Π E \Pi_E ΠE​ 是CPA安全的私钥加密方案并且  Π M \Pi_M ΠM​ 是一个安全的MAC,那么构造  Π ′ \Pi' Π′ 是CCA安全的。

* 证明: V Q \mathsf{VQ} VQ (有效查询):  A \mathcal{A} A 向预言机 D e c ′ \mathsf{Dec}' Dec′提交一个新查询并且  V r f y = 1 \mathsf{Vrfy}=1 Vrfy=1。 _注:VQ表示敌手向预言机查询可经过验证并解密。_

* Pr ⁡ [ P r i v K A , Π ′ c c a ( n ) = 1 ] ≤ Pr ⁡ [ V Q ] \+ Pr ⁡ [ P r i v K A , Π ′ c c a ( n ) = 1 ∧ V Q ‾ ] \Pr[\mathsf{PrivK}^{\mathsf{cca}}_{\mathcal{A},\Pi'}(n)=1] \le \Pr[\mathsf{VQ}] + \Pr[\mathsf{PrivK}^{\mathsf{cca}}_{\mathcal{A},\Pi'}(n)=1 \land \overline{\mathsf{VQ}}] Pr[PrivKA,Π′cca​(n)=1]≤Pr[VQ]+Pr[PrivKA,Π′cca​(n)=1∧VQ​]

* 我们需要证明以下:

  * Pr ⁡ [ V Q ] \Pr[\mathsf{VQ}] Pr[VQ] 是可忽略的;敌手无法利用解密预言机获得有效查询;

  * Pr ⁡ [ P r i v K A , Π ′ c c a ( n ) = 1 ∧ V Q ‾ ] ≤ 1 2 \+ n e g l ( n ) \Pr[\mathsf{PrivK}^{\mathsf{cca}}_{\mathcal{A},\Pi'}(n)=1 \land \overline{\mathsf{VQ}}] \le \frac{1}{2} + \mathsf{negl}(n) Pr[PrivKA,Π′cca​(n)=1∧VQ​]≤21​+negl(n);在无法利用解密预言机时难以破解加密方案。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  1. 证明敌手无法利用解密预言机获得有效查询
* 思路:将  A M \mathcal{A}_M AM​ (有预言机  M a c k 2 ( ⋅ ) \mathsf{Mac}_{k_2}(\cdot) Mack2​​(⋅)攻击  Π M \Pi_M ΠM​ ) 规约到  A \mathcal{A} A。
* A M \mathcal{A}_M AM​以  A \mathcal{A} A 为子函数来运行。 A \mathcal{A} A 将产生 q ( n ) q(n) q(n)个解密预言机查询, A M \mathcal{A}_M AM​ 预先从中均匀随机选择一个编号  i ← { 1 , … , q ( n ) } i \gets \\{1,\dotsc,q(n)\\} i←{1,…,q(n)},并将该查询作为输出的伪造;
* 当 A \mathcal{A} A以 m m m查询加密预言机时,  A M \mathcal{A}_M AM​ 产生加密密钥并以加密预言机的角色先计算密文 c c c,然后用密文查询MAC预言机并将 < c , t > \left<c, t\right> ⟨c,t⟩返回给 A \mathcal{A} A;
* 当 A \mathcal{A} A以 < c , t > \left<c, t\right> ⟨c,t⟩查询解密预言机时,如果这是第  i i i 个查询,那么 A M \mathcal{A}_M AM​ 输出 < c , t > \left<c, t\right> ⟨c,t⟩并停止;否则,如果这是曾经在加密预言机查询过的, A M \mathcal{A}_M AM​ 返回明文,否则,返回 ⊥ \bot ⊥(因为只要 V Q \mathsf{VQ} VQ未发生,就应该返回 ⊥ \bot ⊥);
* M a c f o r g e A M , Π M ( n ) = 1 \mathsf{Macforge}_{\mathcal{A}_M,\Pi_M }(n)=1 MacforgeAM​,ΠM​​(n)=1 的条件是,只有当  V Q \mathsf{VQ} VQ 发生并且  A M \mathcal{A}_M AM​ 正确地猜测了  i i i (概率为  1 / q ( n ) 1/q(n) 1/q(n))。
* Pr ⁡ [ M a c f o r g e A M , Π M ( n ) = 1 ] ≥ Pr ⁡ [ V Q ] / q ( n ) . \Pr [\mathsf{Macforge}_{\mathcal{A}_M,\Pi_M }(n)=1] \ge \Pr[\mathsf{VQ}]/q(n). Pr[MacforgeAM​,ΠM​​(n)=1]≥Pr[VQ]/q(n).
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. 证明在无法利用解密预言机时难以破解加密方案
* 思路:将  A E \mathcal{A}_E AE​ (以  E n c k 1 ( ⋅ ) \mathsf{Enc}_{k_1}(\cdot) Enck1​​(⋅) 预言机来攻击  Π E \Pi_E ΠE​ ) 规约到  A \mathcal{A} A。

* A E \mathcal{A}_E AE​ 以  A \mathcal{A} A 为子函数来运行。  A E \mathcal{A}_E AE​ 扮演  A \mathcal{A} A 的加密预言机和解密预言机方法与  A M \mathcal{A}_M AM​ 的类似;

* 实验  P r i v K A E , Π E c p a \mathsf{PrivK}^{\mathsf{cpa}}_{\mathcal{A}_E,\Pi_E} PrivKAE​,ΠE​cpa​ 与实验  P r i v K A , Π ′ c c a \mathsf{PrivK}^{\mathsf{cca}}_{\mathcal{A},\Pi'} PrivKA,Π′cca​ 的运行一样,  A E \mathcal{A}_E AE​ 输出与  A \mathcal{A} A 一样的  b ′ b' b′ ;

* Pr ⁡ [ P r i v K A E , Π E c p a ( n ) = 1 ∧ V Q ‾ ] = Pr ⁡ [ P r i v K A , Π ′ c c a ( n ) = 1 ∧ V Q ‾ ] \Pr[\mathsf{PrivK}^{\mathsf{cpa}}_{\mathcal{A}_E,\Pi_E}(n)=1 \land \overline{\mathsf{VQ}}] = \Pr[\mathsf{PrivK}^{\mathsf{cca}}_{\mathcal{A},\Pi'}(n)=1 \land \overline{\mathsf{VQ}}] Pr[PrivKAE​,ΠE​cpa​(n)=1∧VQ​]=Pr[PrivKA,Π′cca​(n)=1∧VQ​];
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Pr ⁡ [ P r i v K A E , Π E c p a ( n ) = 1 ] ≥ Pr ⁡ [ P r i v K A , Π ′ c c a
( n ) = 1 ∧ V Q ‾ ] \Pr [\mathsf{PrivK}^{\mathsf{cpa}}_{\mathcal{A}E,\Pi_E
}(n)=1] \ge \Pr[\mathsf{PrivK}^{\mathsf{cca}}
{\mathcal{A},\Pi’}(n)=1 \land
\overline{\mathsf{VQ}}] Pr[PrivKAE​,ΠE​cpa​(n)=1]≥Pr[PrivKA,Π′cca​(n)=1∧VQ​]。

  1. 认证加密理论与实践
* 定理: Π E \Pi_E ΠE​ 是CPA安全的并且  Π M \Pi_M ΠM​ 是一个带有唯一标签的安全MAC(强安全MAC),那么由先加密后认证得到的  Π ′ \Pi' Π′ 是安全的。 _注:强安全MAC是指一个消息只有一个有效标签_
* GCM (Galois/Counter Mode): 先CTR加密,然后做 Galois MAC. (RFC4106/4543/5647/5288 on IPsec/SSH/TLS)
* EAX: 先CTR 加密,然后 CMAC(Cipher-based MAC)。
* 定理:先认证后加密方法是安全的,如果  Π E \Pi_E ΠE​ 是CTR模式或者CBC模式。
* CCM (Counter with CBC-MAC): 先 CBC-MAC 后 CTR 加密。 (802.11i, RFC3610)
* OCB (Offset Codebook Mode): 将MAC整合到加密中。 (是CCM, EAX的2倍快)
* 上述方案都支持 AEAD (A.E. with associated data): 部分是明文并且整个消息被认证。这在实践中是很常用的,例如一个IP报文需要加密,但IP头部需要以明文方式传输。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  1. 安全消息传递补充
* 认证可能泄漏消息; _注:完整性不同于机密性_
* 安全消息传递意味着CCA安全性,但反之未必;
* 不同安全目标应该采用不同的密钥;否则,可能泄漏消息,例如  M a c k ( c ) = D e c k ( c ) \mathsf{Mac}_k(c)=\mathsf{Dec}_k(c) Mack​(c)=Deck​(c)。
* 实现可能摧毁理论上的安全性: 
  * Padding Oracle 攻击(TLS 1.0): 解密返回两种类型错误: padding error,MAC error;敌手通过猜测来获得最后一字节,如果没有padding错误;参考之前在CCA部分学习的Padding Oracle攻击;
  * 攻击非原子解密(SSH Binary Packet Protocol):解密时,分三步 (1)解密消息长度; (2)读取长度所表明的包数; (3) 检查MAC;敌手针对这种非原子解密过程,实施攻击分三步 (1)发送密文  c c c;(2)发送  l l l 个包直到“MAC error”发生;(3)获得密文对应的明文  l = D e c ( c ) l = \mathsf{Dec}(c) l=Dec(c)。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. 确定性CPA安全( Deterministic CPA Security
* 应用:在加密数据库索引后,检索时需要加密明文来检索密文;在磁盘加密中,密文大小需要与明文一样大。但之前学习的CPA安全加密都是非确定性的,而且密文比明文长。
* 确定性加密(Deterministic encryption):相同的消息在相同密钥下被加密为相同的密文。 
  * 问题:这样能实现CPA安全吗?答案是不可能,因为CPA安全意味着非确定性加密,密文长于明文。于是,我们需要新的安全定义。
* 确定性CPA安全(Deterministic CPA Security): 如果从来不用相同的密钥加密同一个消息两次,实现CPA安全,即密钥和消息对 < k , m > \left<k,m\right> ⟨k,m⟩ 是唯一的。 
  * 这里引入新的条件:消息是可重复的,密钥也可重复,但同一密钥不能重复加密同一消息。这是为了实现CPA而做出的必要改变。相当于获得确定性下CPA安全的同时,丧失同一个消息被同一个密文加密多次的能力。
* 一个PRP就是固定长度的确定性CPA安全加密方案。
* 确定性认证加密(Deterministic Authenticated Encryption,DAE):与上面的确定性CPA安全概念类似。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  1. 在变长加密中的一个常见错误
* 常见错误:在 CBC/CTR 模式中采用固定的 I V IV IV。这虽然是确定性的,但是不安全。
* 敌手能够查询  ( m q 1 , m q 2 ) (m_{q1}, m_{q2}) (mq1​,mq2​) 并且得到  ( c q 1 , c q 2 ) (c_{q1}, c_{q2}) (cq1​,cq2​);然后输出明文: I V ⊕ c q 1 ⊕ m q 2 IV\oplus c_{q1} \oplus m_{q2} IV⊕cq1​⊕mq2​ 并且期待密文:  c q 2 c_{q2} cq2​。注:第一个PRF的输入就是 I V ⊕ I V ⊕ c q 1 ⊕ m q 2 = c q 1 ⊕ m q 2 IV\oplus IV\oplus c_{q1} \oplus m_{q2} = c_{q1} \oplus m_{q2} IV⊕IV⊕cq1​⊕mq2​=cq1​⊕mq2​
* 下面介绍三种变长明文的CPA安全的确定性加密方案。
  • 1
  • 2
  • 3
  1. 合成初始向量法( Synthetic IV (SIV)
* 思路:保持初始向量对敌手仍是不可预测的,但是由明文和密钥确定的。
* 合成初始向量 SIV :对同一对 < k , m > \left<k,m\right> ⟨k,m⟩使用一个固定的  I V IV IV ,用明文通过PRF生成SIV,再用另一个密钥加密;
* 一个PRF  F F F,和一个 CPA安全  Π : ( E n c k ( r , m ) , D e c k ( r , s ) ) \Pi:(\mathsf{Enc}_k(r,m), \mathsf{Dec}_k(r,s)) Π:(Enck​(r,m),Deck​(r,s));
* 生成两个密钥  ( k 1 , k 2 ) ← G e n (k_1,k_2) \gets \mathsf{Gen} (k1​,k2​)←Gen; 得到合成初始向量  S I V ← F k 1 ( m ) SIV \gets F_{k_1}(m) SIV←Fk1​​(m);以SIV做为IV来加密  c = < S I V , E n c k 2 ( S I V , m ) > c = \left<SIV,\mathsf{Enc}_{k_2}(SIV,m) \right> c=⟨SIV,Enck2​​(SIV,m)⟩;
* 采用SIV-CTR可以实现 DAE:MAC标签  t : = S I V t := SIV t:=SIV ,然后应用  C T R k 2 CTR_{k_2} CTRk2​​。
  • 1
  • 2
  • 3
  • 4
  • 5
  1. 宽块PRP( Wide Block PRP
* 思路:因为一个PRP本身是确定性CPA安全,因此,构造一个大的PRP来加密。
* 宽块PRP就是PRP,从较短的PRP(例如AES)构造一个更长的块大小,和消息一样大(例如磁盘上一个扇区)。
* PRP-based DAE:  E n c k ( m ∥ 0 ℓ ) \mathsf{Enc}_k(m\| 0^{\ell}) Enck​(m∥0ℓ)。在解密中 D e c \mathsf{Dec} Dec,如果后半部分明文  ≠ 0 ℓ \neq 0^{\ell} ​=0ℓ,输出  ⊥ \perp ⊥。
* 窄块(Narrow block)可能泄漏信息,由于有一些块相同时,可能泄漏信息。
* 标准: IEEE P1619.2 中 CBC-mask-CBC (CMC) 和 ECB-mask-ECB (EME) 。
* 代价:由于两轮加密比SIV方法慢两倍。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. 可调加密( Tweakable Encryption
* 思路:从密钥生成不同的密钥,一次一密
* 无扩展加密(Encryption without expansion): 明文空间与密文空间相同  M = C \mathcal{M} = \mathcal{C} M=C 意味着没有完整性保护的确定性加密,例如磁盘加密。
* Tweak是一个类似初始向量的值,在同一密钥下,不同的tweak构造不同的PRP。每一个块采用不同的tweak。
* 可调块密码(Tweakable block ciphers):用一个密钥生成许多PRP  K × T × X → X \mathcal{K} \times \mathcal{T} \times \mathcal{X} \to \mathcal{X} K×T×X→X,  T \mathcal{T} T 是tweak集合。
* 一种简单的解决方法:以一个Tweak  t t t来生成密钥  k t = F k ( t ) , t = 1 , … , ℓ k_t = F_k(t), t=1,\dots,\ell kt​=Fk​(t),t=1,…,ℓ,但要加密两次效率不高,需要更有效的方法。
  • 1
  • 2
  • 3
  • 4
  • 5
  1. XTS
* XTS:XEX(Xor-Encrypt-Xor)-based tweaked-codebook mode with ciphertext stealing。 (XTS-AES, NIST SP 800-38E)
* XEX:  c = F k ( m ⊕ x ) ⊕ x c = F_k(m\oplus x)\oplus x c=Fk​(m⊕x)⊕x,其中在 Galois 域上  x = F k ( I ) ⊗ 2 j x=F_k(I)\otimes 2^j x=Fk​(I)⊗2j ,在扇区  I I I中块  j j j 对应的tweak是  ( I , j ) (I,j) (I,j) 。
* Ciphertext stealing (CTS):无需填充(padding),没有扩展。
  • 1
  • 2
  • 3
  1. 密钥派生函数( Key Derivation Function (KDF)
* 密钥派生函数(Key Derivation Function,KDF):从一个秘密的原密钥  s k sk sk 产生许多密钥;
* 对于均匀随机的  s k sk sk: F F F 是 PRF,  c t x ctx ctx 是标识应用的唯一串, K D F ( s k , c t x , l ) = < F s k ( c t x ∥ 0 ) , F s k ( c t x ∥ 1 ) ⋯ , F s k ( c t x ∥ l ) > . \mathsf{KDF}(sk,ctx,l) = \left<F_{sk}(ctx\|0),F_{sk}(ctx\|1)\cdots,F_{sk}(ctx\|l)\right>. KDF(sk,ctx,l)=⟨Fsk​(ctx∥0),Fsk​(ctx∥1)⋯,Fsk​(ctx∥l)⟩.
* 对于非均匀随机的  s k sk sk:提取并扩展范式 
  * 提取(extract): HKDF  k ← H M A C ( s a l t , s k ) k \gets \mathsf{HMAC}(salt,sk) k←HMAC(salt,sk),  s a l t salt salt(盐)是一个随机数。用盐来向密钥添加熵。
  * 扩展(expand):与上面均匀随机情况一样。
  • 1
  • 2
  • 3
  • 4
  • 5
  1. 基于口令的KDF( Password-Based KDF, PBKDF
* 密钥延展(Key stretching)增加测试密钥的时间 (使用较慢的哈希函数)。
* 密钥加强(Key strengthening)增加密钥的长度和随机性 (使用盐)。
* PKCS#5 (PBKDF1): H ( c ) ( p w d ∥ s a l t ) H^{(c)}(pwd\|salt) H(c)(pwd∥salt), 哈希函数迭代  c c c 次。
* 敌手攻击,或者尝试被加强的密钥 (更大的密钥空间),或者尝试初始密钥 (每个密钥花费更长时间)。
  • 1
  • 2
  • 3
  • 4
  1. IV,Nonce,Counter,Tweak和Salt
* IV:密码学原语的输入,提供随机性。
* nonce:用来标记一次通信的只使用一次的一个数。
* counter:一个连续的数,用作nonce或IV。
* tweak:在一个密码中对每个块只用一次的输入。
* salt:随机比特,用于创建一个函数的输入。
  • 1
  • 2
  • 3
  • 4
  • 5
  1. 总结
* 略
  • 1

学习网络安全技术的方法无非三种:

第一种是报网络安全专业,现在叫网络空间安全专业,主要专业课程:程序设计、计算机组成原理原理、数据结构、操作系统原理、数据库系统、 计算机网络、人工智能、自然语言处理、社会计算、网络安全法律法规、网络安全、内容安全、数字取证、机器学习,多媒体技术,信息检索、舆情分析等。

第二种是自学,就是在网上找资源、找教程,或者是想办法认识一-些大佬,抱紧大腿,不过这种方法很耗时间,而且学习没有规划,可能很长一段时间感觉自己没有进步,容易劝退。

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/176722
推荐阅读
相关标签