对做网站有什么建议,中小型电子商务网站,wordpress 随机图片插件,河南招投标信息网【现代密码学】笔记7-- CCA安全与认证加密《introduction to modern cryphtography》 写在最前面7 CCA安全与认证加密 写在最前面
主要在 哈工大密码学课程 张宇老师课件 的基础上学习记录笔记。
内容补充#xff1a;骆婷老师的PPT 《introduction to modern cryphtography》… 【现代密码学】笔记7-- CCA安全与认证加密《introduction to modern cryphtography》 写在最前面7 CCA安全与认证加密 写在最前面
主要在 哈工大密码学课程 张宇老师课件 的基础上学习记录笔记。
内容补充骆婷老师的PPT 《introduction to modern cryphtography》–Jonathan Katz, Yehuda Lindell现代密码学——原理与协议中相关章节 密码学复习笔记 这个博主好有意思
初步笔记如有错误请指正
快速补充一些密码相关的背景知识 7 CCA安全与认证加密 本节学习用于抵抗CCA攻击的加密方案以及同时保证通信机密性和真实性的认证加密方案。 目录CCA安全加密认证加密确定性加密密钥派生函数。 回顾CCA不可区分实验 CCA不可区分实验 P r i v K A , Π c c a ( n ) \mathsf{PrivK}^{\mathsf{cca}}_{\mathcal{A},\Pi}(n) PrivKA,Πcca(n): 挑战者生成密钥 k ← G e n ( 1 n ) k \gets \mathsf{Gen}(1^n) k←Gen(1n)为了下一步的预言机 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 挑战者生成随机比特 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 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,Πcca1否则 0。 定义一个加密方案是CCA安全的如果实验成功的概率与1/2之间的差异是可忽略的。 消息传递方案 我们先不直接处理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。在解密算法中当密文没有通过真实性验证时输出空可以理解为“报错”这意味着未认证的密文无法解密。 定义安全消息传递 先定义保护真实性的认证通信然后定义同时保护机密性和真实性的认证加密。安全消息传递实验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.吗作业 关于认证加密的例题 如果认为是安全的那么利用反证法证明如果认为是不安全的那么或者可以伪造消息或者破解明文 加密和认证组合 加密和认证如何组合来同时保护机密性和真实性加密并认证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). 分析组合的安全性 采用全或无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))) cEnc′(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 ⊥。下面来证明。 构造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 ⊥ 加密时先加密后对密文做认证解密时先验证若未通过验证则输出空否则解密。 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 Vrfy1。注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]≤21negl(n)在无法利用解密预言机时难以破解加密方案。 证明敌手无法利用解密预言机获得有效查询 思路将 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 \leftc, t\right ⟨c,t⟩返回给 A \mathcal{A} A当 A \mathcal{A} A以 c , t \leftc, t\right ⟨c,t⟩查询解密预言机时如果这是第 i i i 个查询那么 A M \mathcal{A}_M AM 输出 c , t \leftc, 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). 证明在无法利用解密预言机时难以破解加密方案 思路将 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)1∧VQ]Pr[PrivKA,Π′cca(n)1∧VQ] 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)1∧VQ]。 认证加密理论与实践 定理 Π 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 加密然后 CMACCipher-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头部需要以明文方式传输。 安全消息传递补充 认证可能泄漏消息注完整性不同于机密性安全消息传递意味着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 errorMAC 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) lDec(c)。 确定性CPA安全Deterministic CPA Security 应用在加密数据库索引后检索时需要加密明文来检索密文在磁盘加密中密文大小需要与明文一样大。但之前学习的CPA安全加密都是非确定性的而且密文比明文长。确定性加密Deterministic encryption相同的消息在相同密钥下被加密为相同的密文。 问题这样能实现CPA安全吗答案是不可能因为CPA安全意味着非确定性加密密文长于明文。于是我们需要新的安全定义。 确定性CPA安全Deterministic CPA Security: 如果从来不用相同的密钥加密同一个消息两次实现CPA安全即密钥和消息对 k , m \leftk,m\right ⟨k,m⟩ 是唯一的。 这里引入新的条件消息是可重复的密钥也可重复但同一密钥不能重复加密同一消息。这是为了实现CPA而做出的必要改变。相当于获得确定性下CPA安全的同时丧失同一个消息被同一个密文加密多次的能力。 一个PRP就是固定长度的确定性CPA安全加密方案。确定性认证加密Deterministic Authenticated EncryptionDAE与上面的确定性CPA安全概念类似。 在变长加密中的一个常见错误 常见错误在 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⊕mq2cq1⊕mq2下面介绍三种变长明文的CPA安全的确定性加密方案。 合成初始向量法Synthetic IV (SIV) 思路保持初始向量对敌手仍是不可预测的但是由明文和密钥确定的。合成初始向量 SIV 对同一对 k , m \leftk,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 \leftSIV,\mathsf{Enc}_{k_2}(SIV,m) \right c⟨SIV,Enck2(SIV,m)⟩采用SIV-CTR可以实现 DAEMAC标签 t : S I V t : SIV t:SIV 然后应用 C T R k 2 CTR_{k_2} CTRk2。 宽块PRPWide 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方法慢两倍。 可调加密Tweakable Encryption 思路从密钥生成不同的密钥一次一密无扩展加密Encryption without expansion: 明文空间与密文空间相同 M C \mathcal{M} \mathcal{C} MC 意味着没有完整性保护的确定性加密例如磁盘加密。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), t1,\dots,\ell ktFk(t),t1,…,ℓ但要加密两次效率不高需要更有效的方法。 XTS XTSXEX(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 cFk(m⊕x)⊕x其中在 Galois 域上 x F k ( I ) ⊗ 2 j xF_k(I)\otimes 2^j xFk(I)⊗2j 在扇区 I I I中块 j j j 对应的tweak是 ( I , j ) (I,j) (I,j) 。Ciphertext stealing (CTS)无需填充padding没有扩展。 密钥派生函数Key Derivation Function (KDF) 密钥派生函数Key Derivation FunctionKDF从一个秘密的原密钥 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) \leftF_{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与上面均匀随机情况一样。 基于口令的KDFPassword-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 次。敌手攻击或者尝试被加强的密钥 (更大的密钥空间)或者尝试初始密钥 (每个密钥花费更长时间)。 IVNonceCounterTweak和Salt IV密码学原语的输入提供随机性。nonce用来标记一次通信的只使用一次的一个数。counter一个连续的数用作nonce或IV。tweak在一个密码中对每个块只用一次的输入。salt随机比特用于创建一个函数的输入。 总结 略