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

news2024/12/27 12:21:12

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

  • 写在最前面
  • 7 CCA安全与认证加密

写在最前面

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

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

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

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


请添加图片描述

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) kGen(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) cEnck(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之间的差异是可忽略的。
  4. 消息传递方案

    • 我们先不直接处理CCA安全,而是研究一个比CCA更安全的通信场景,其中引入了之前学习的真实性要求;
    • CCA安全与消息的真实性有关,下面学习同时保护消息机密性和真实性的消息传递方案。
    • 密钥生成(Key-generation) 算法输出 k ← G e n ′ ( 1 n ) k \gets \mathsf{Gen'}(1^n) kGen(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) k1GenE(1n), k 2 ← G e n M ( 1 n ) k_2 \gets \mathsf{Gen}_M(1^n) k2GenM(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) cEncMack1,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) mDeck1,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。在解密算法中,当密文没有通过真实性验证时,输出空(可以理解为“报错”);这意味着未认证的密文无法解密。
  5. 定义安全消息传递

    • 先定义保护真实性的认证通信,然后定义同时保护机密性和真实性的认证加密。
    • 安全消息传递实验(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 EncMack的预言机访问,并输出 c ← E n c M a c ′ k ( m ) c \gets \mathsf{EncMac'}_{k}(m) cEncMack(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)=1m=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.吗?(作业)
  6. 关于认证加密的例题

    • 如果认为是安全的,那么利用反证法证明;
    • 如果认为是不安全的,那么或者可以伪造消息,或者破解明文;
  7. 加密和认证组合

    • 加密和认证如何组合来同时保护机密性和真实性?
    • 加密并认证(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). cEnck1(m),tMack2(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). tMack2(m),cEnck1(mt).
    • 先加密后认证(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). cEnck1(m),tMack2(c).
  8. 分析组合的安全性

    • 采用全或无(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:000;110/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(mMac(m))).
        • c c c 的前两个比特翻转并且验证密文是否有效。 10 / 01 → 01 / 10 → 1 10/01 \to 01/10 \to 1 10/0101/101, 00 → 11 → ⊥ 00 \to 11 \to \bot 0011.
          • 明文为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 。下面来证明。
  9. 构造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) k1GenE(1n) and k 2 ← G e n M ( 1 n ) k_2 \gets \mathsf{Gen}_M(1^n) k2GenM(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) cEnck1(m), t ← M a c k 2 ( c ) t \gets \mathsf{Mac}_{k_2}(c) tMack2(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 
    • 加密时,先加密后对密文做认证;解密时,先验证,若未通过验证,则输出空,否则解密。
  10. 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)=1VQ]

    • 我们需要证明以下:

      • 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)=1VQ]21+negl(n);在无法利用解密预言机时难以破解加密方案。

  11. 证明敌手无法利用解密预言机获得有效查询

    • 思路:将 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).
  12. 证明在无法利用解密预言机时难以破解加密方案

    • 思路:将 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,ΠEcpa 与实验 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,ΠEcpa(n)=1VQ]=Pr[PrivKA,Πcca(n)=1VQ]

      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,ΠEcpa(n)=1]Pr[PrivKA,Πcca(n)=1VQ]

  13. 认证加密理论与实践

    • 定理: Π 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头部需要以明文方式传输。
  14. 安全消息传递补充

    • 认证可能泄漏消息;注:完整性不同于机密性
    • 安全消息传递意味着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)
  15. 确定性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安全概念类似。
  16. 在变长加密中的一个常见错误

    • 常见错误:在 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} IVcq1mq2 并且期待密文: 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} IVIVcq1mq2=cq1mq2
    • 下面介绍三种变长明文的CPA安全的确定性加密方案。
  17. 合成初始向量法(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) SIVFk1(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
  18. 宽块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(m0)。在解密中 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方法慢两倍。
  19. 可调加密(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×XX, 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,,,但要加密两次效率不高,需要更有效的方法。
  20. 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(mx)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),没有扩展。
  21. 密钥派生函数(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(ctx0),Fsk(ctx1),Fsk(ctxl).
    • 对于非均匀随机的 s k sk sk:提取并扩展范式
      • 提取(extract): HKDF k ← H M A C ( s a l t , s k ) k \gets \mathsf{HMAC}(salt,sk) kHMAC(salt,sk) s a l t salt salt(盐)是一个随机数。用盐来向密钥添加熵。
      • 扩展(expand):与上面均匀随机情况一样。
  22. 基于口令的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)(pwdsalt), 哈希函数迭代 c c c 次。
    • 敌手攻击,或者尝试被加强的密钥 (更大的密钥空间),或者尝试初始密钥 (每个密钥花费更长时间)。
  23. IV,Nonce,Counter,Tweak和Salt

    • IV:密码学原语的输入,提供随机性。
    • nonce:用来标记一次通信的只使用一次的一个数。
    • counter:一个连续的数,用作nonce或IV。
    • tweak:在一个密码中对每个块只用一次的输入。
    • salt:随机比特,用于创建一个函数的输入。
  24. 总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1390309.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【GitHub项目推荐--一行命令下载全网视频】【转载】

项目地址&#xff1a;https://github.com/soimort/you-get 首先声明&#xff0c;请不要使用该项目从事违法活动哦~仅供学习使用&#xff01; 解决痛点 如果你上网的时候看了一些东西不错&#xff0c;想下载下来&#xff0c;或者在线观看喜欢的视频&#xff0c;但是没有找到网…

坚持刷题|翻转二叉树

坚持刷题&#xff0c;老年痴呆追不上我&#xff0c;今天先刷个简单的&#xff1a;翻转二叉树 题目 226.翻转二叉树 考察点 翻转二叉树又称为镜像二叉树&#xff0c;使用Java实现翻转二叉树通常是为了考察对二叉树的基本操作和递归的理解能力 递归的理解&#xff1a; 能够理解…

【JaveWeb教程】(26) Mybatis基础操作(新增、修改、查询、删除) 详细代码示例讲解(最全面)

目录 1. Mybatis基础操作1.1 需求1.2 准备1.3 删除1.3.1 功能实现1.3.2 日志输入1.3.3 预编译SQL1.3.3.1 介绍1.3.3.2 SQL注入1.3.3.3 参数占位符 1.4 新增1.4.1 基本新增1.4.2 主键返回 1.5 更新1.6 查询1.6.1 根据ID查询1.6.2 数据封装1.6.3 条件查询1.6.4 参数名说明 1. Myb…

大语言模型面试问题【持续更新中】

自己在看面经中遇到的一些面试题&#xff0c;结合自己和理解进行了一下整理。 transformer中求和与归一化中“求和”是什么意思&#xff1f; 求和的意思就是残差层求和&#xff0c;原本的等式为y H(x)转化为y x H(x)&#xff0c;这样做的目的是防止网络层数的加深而造成的梯…

Spring Boot中加@Async和不加@Async有什么区别?设置核心线程数、设置最大线程数、设置队列容量是什么意思?直接在yml中配置线程池

在 Spring 中&#xff0c;Async 注解用于将方法标记为异步执行的方法。当使用 Async 注解时&#xff0c;该方法将在单独的线程中执行&#xff0c;而不会阻塞当前线程。这使得方法可以在后台执行&#xff0c;而不会影响主线程的执行。 在您提供的代码示例中&#xff0c;a1() 和…

【conda】pip安装报错,网络延时问题解决记录(亲测有效)

【conda】pip安装报错&#xff0c;网络延时问题解决记录 1. pip install 报错如下所示2. 解决方案&#xff1a; 1. pip install 报错如下所示 pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(hostfiles.pythonhosted.org, port443): Read timed out.…

Spring Boot 中批量执行 SQL 脚本的实践

在Spring Boot应用中&#xff0c;有时候我们需要批量执行存储在数据库中的 SQL 脚本。本文将介绍一个实际的案例&#xff0c;演示如何通过 Spring Boot、MyBatis 和数据库来实现这一目标。 0、数据库层 CREATE TABLE batchUpdate (id INT AUTO_INCREMENT PRIMARY KEY,update_…

现阶段Python和Java哪个更吃香?

现阶段Python和Java哪个更吃香&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Java的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&…

基于pyqt5+scapy 根据ip 具体端口 进行扫描 的程序

先给出代码 import sysfrom PyQt5 import uic from PyQt5.QtWidgets import *from scapy.all import * import argparse import logging from scapy.layers.inet import IP, TCP from scapy.sendrecv import sr1class MyWindow(QWidget):def __init__(self):super().__init__(…

2024.1.14周报

目录 摘要 一、文献阅读 1、题目 2、摘要 3、模型架构 4、文献解读 一、Introduction 二、实验 三、结论 二、PINN 一、PINN简介 二、PINN比传统数值方法有哪些优势 三、PINN方法 四、正问题与反问题 总结 摘要 本周我阅读了一篇题目为Deep Residual Learning …

还有人不知道开源知识库吗?低成本搭建就靠它了

在德拉克洛瓦笔下的乔治华盛顿看着蔽日的凯特&#xff0c;可能也没想到他的一句“知识就是力量”会穿越几个世纪&#xff0c;直到互联网时代。在这个信息爆炸的年代&#xff0c;知识管理成为了企业发展的重要支柱&#xff0c;而开源知识库&#xff0c;则成为了低成本搭建公司知…

Git核心知识总结

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 工具教程 ✨特色专栏&#xff1a; MyS…

centos7配置时间同步网络时间

centos7配置时间同步网络时间 1、安装 NTP 工具。 sudo yum install -y ntp2启动 NTP 服务。 sudo systemctl start ntpd3、将 NTP 服务设置为开机自启动。 sudo systemctl enable ntpd4、验证 date

液晶偏振光栅

1、偏振 光是横波.在垂直于光的传播方向的平面内光波振动(即E矢量振动) 各方向振幅都相等的光为自然光; 只在某一方向有光振动的光称为线偏振光;各方向光振动都有,但振幅不同的光叫部分偏振光.螺旋着振动的光称圆偏振光&#xff0c;分旋和右旋 2、庞加莱球表示法 庞加莱球是用…

Java开发或调用WebService的几种方式

Java开发或调用WebService的几种方式 一.JDK自带的 JAX-WS 方式开发WebService服务 1.服务端开发与发布 编写接口 WebService public interface JaxWsDemo {String helloJaxWS(String userName); }编写接口的实现类 WebService public class JaxWsDemoImpl implements Jax…

微服务架构设计核心理论:掌握微服务设计精髓

文章目录 一、微服务与服务治理1、概述2、Two Pizza原则和微服务团队3、主链路规划4、服务治理和微服务生命周期5、微服务架构的网络层搭建6、微服务架构的部署结构7、面试题 二、配置中心1、为什么要配置中心2、配置中心高可用思考 三、服务监控1、业务埋点的技术选型2、用户行…

数据结构学习 leetcode31 下一个排列

关键词&#xff1a;下一个排列 字典序 排列 这是我在做jz38字符串的排序的时候&#xff0c;一种解题方法是字典序&#xff0c;用到的就是这种方法。这种方法支持不重复地输出全排列。 题目&#xff1a;下一个排列 思路&#xff1a; 我看了官方题解和这位大哥的题解&#xff…

聚合收益协议 InsFi :打开铭文赛道全新叙事的旋转门

​“InsFi 协议构建了一套以铭文资产为基础的聚合收益体系&#xff0c;该体系正在为铭文资产捕获流动性、释放价值提供基础&#xff0c;该生态也正在成为铭文赛道掘金的新热土。” 在 2023 年年初&#xff0c;Ordinals 协议在比特币链上被推出后&#xff0c;为比特币链上带来了…

RFID服装物流零售管理系统设计解决方案

一、方案概述 本方案是广东航连科技根据服装企业客户的需求量身定制的解决方案&#xff0c;该方案综合了RFID技术、网络技术、计算机技术、数据库技术和无线通信技术&#xff0c;结合服装企业的实际需求以及航连科技的丰富经验和独特技术&#xff0c;提出了以下基于RFID的物流…

132基于matlab的采集信号模极大值以及李氏指数计算

基于matlab的采集信号模极大值以及李氏指数计算&#xff0c; 1)计算信号的小波变换。 2)求出模极大曲线。 3)计算其中两个奇异点的Lipschitz指数&#xff0c;程序已调通&#xff0c;可直接运行。 132matlab模极大曲线Lipschitz (xiaohongshu.com)