现代密码学 考点汇总
- 写在最前面
- 考试范围
- 一、给一个简单的方案,判断是否cca安全
- 二、随机预言机模型之下的简单应用
- 2. MAC
- 概念回顾
- MAC的定义
- 适应性CMA(Chosen Message Attack)
- PPT攻击者
- 不可忽略的概率(negl(n))
- 总结
- 案例
- 构建安全MAC
- 证明基于PRF的安全MAC
- CBC-MAC 基于块加密算法的消息认证码
- CBC概念回顾
- 构造固定长度的CBC-MAC
- 定理4.20证明:如果He是一个 CPA 安全的对称密钥加密方案,且nn是一个具有唯一标记的消息鉴别码,那么构造方案 4.19 是一个 CCA 安全的对称密钥加密方案。
- 3. 哈希函数
- CRHF:哈希函数Hash Function、 定义抗碰撞Collision Resistance
- 哈希函数的应用
- HMAC(Hash-and-MAC)
- NMAC
- HMAC
- 信息论上MAC
- 4、非对称的多样加密的方案
- 5. 随机预言机模型(Random Oracle Model,ROM)
- 基于私钥加密的CCA安全
- 在ROM中基于TPD的CCA安全
写在最前面
字数超了
考试范围
一、给一个简单的方案,判断是否cca安全
判断方式:要么证明是cca安全(通过规约),要么找一个攻击方式去攻击
一样一个题
1、对称加密、
2、消息认证码MAC
3、哈希函数、
4、非对称的多样加密的方案
【数字签名不考,因为和mac功能和证明方式、实验都类似】
二、随机预言机模型之下的简单应用
随机预言机性质、随机预言机模型之下的简单应用
性质之下构造函数的性质
2. MAC
-
MAC的词法(Message Authentication Code)
- 密钥 k k k, 标签(tag) t t t, 一个比特 b b b 为有效的 (valid}) ,如果 b = 1 b=1 b=1;
或 无效的 (invalid}) ,如果 b = 0 b=0 b=0. - 密钥生成 Key-generation 算法 k ← G e n ( 1 n ) , ∣ k ∣ ≥ n k \gets \mathsf{Gen}(1^n), |k| \ge n k←Gen(1n),∣k∣≥n.
- 标签生成 Tag-generation 算法 t ← M a c k ( m ) t \gets \mathsf{Mac}_k(m) t←Mack(m).
- 验证 Verification 算法 b : = V r f y k ( m , t ) b:= \mathsf{Vrfy}_k(m,t) b:=Vrfyk(m,t).
- 消息认证码 Message authentication code: Π = ( G e n , M a c , V r f y ) \Pi = (\mathsf{Gen}, \mathsf{Mac}, \mathsf{Vrfy}) Π=(Gen,Mac,Vrfy).
- 基本正确性需求 Basic correctness requirement : V r f y k ( m , M a c k ( m ) ) = 1 \mathsf{Vrfy}_k(m,\mathsf{Mac}_k(m)) = 1 Vrfyk(m,Mack(m))=1.
- 注:不同于加密方案,MAC并不需要从标签得到密文。
- 密钥 k k k, 标签(tag) t t t, 一个比特 b b b 为有效的 (valid}) ,如果 b = 1 b=1 b=1;
-
MAC安全
- 直觉上,没有敌手能够伪造一个从未被发送过的新消息的有效标签。这里“新消息”是为了排除“重放攻击”。
- 重放攻击(Replay attack):敌手记录并发送之前的消息和标签,从而发送了一个伪造的消息并带有有效的标签;为了避免重放攻击,可以通过两种非密码学的方法。
- 序列号:接收方需要记录之前的序列号,从而发现序列号较小(或曾经接收过的)的旧消息;
- 时间戳:双方维护时钟同步,从而发现晚与当前时钟的旧消息;
- 这两种方法都不依赖于密码学,因此,防御重放攻击不需要在密码学的范畴内考虑。
- 存在性不可伪造(Existential unforgeability):不能伪造任何消息的标签,一个都不能伪造。
- 存在性伪造 Existential forgery: 至少伪造一个消息的标签。
- 选择性伪造 Selective forgery: 实施攻击前选择一个消息,并伪造该消息的标签。
- 全域性伪造 Universal forgery: 伪造任意给定的消息的标签。
- 最强的安全目标是阻止最弱的敌手造成的后果。
- 适应性选择消息攻击(Adaptive chosen-message attack (CMA)):敌手在攻击过程中始终具有获得任意消息的有效标签的能力,即访问标签生成预言机;
-
定义MAC安全
- 消息认证实验 M a c f o r g e A , Π ( n ) \mathsf{Macforge}_{\mathcal{A},\Pi }(n) MacforgeA,Π(n) 在挑战者和敌手之间:
- 挑战者生成密钥 k ← G e n ( 1 n ) k \gets \mathsf{Gen}(1^n) k←Gen(1n).
- 敌手 A \mathcal{A} A 具有访问标签生成算法 M a c k ( ⋅ ) \mathsf{Mac}_k(\cdot) Mack(⋅)的预言机的能力,并输出 ( m , t ) (m,t) (m,t). 对预言机查询的消息集合为 Q \mathcal{Q} Q 。
- M a c f o r g e A , Π ( n ) = 1 ⟺ \mathsf{Macforge}_{\mathcal{A},\Pi }(n)=1 \iff MacforgeA,Π(n)=1⟺ V r f y k ( m , t ) = 1 \mathsf{Vrfy}_k(m,t)=1 Vrfyk(m,t)=1 ∧ \land ∧ m ∉ Q m \notin \mathcal{Q} m∈/Q. 敌手成功,如果输出的消息和标签通过了验证,并且输出的消息是从未向预言机查询过的新消息。
- 定义:一个 MAC Π \Pi Π 是在适应性CMA下的存在性不可伪造 (existentially unforgeable under an adaptive CMA),如果 ∀ \forall ∀ PPT A \mathcal{A} A, ∃ \exists ∃ n e g l \mathsf{negl} negl 使得: Pr [ M a c f o r g e A , Π ( n ) = 1 ] ≤ n e g l ( n ) . \Pr [\mathsf{Macforge}_{\mathcal{A},\Pi }(n)=1] \le \mathsf{negl}(n). Pr[MacforgeA,Π(n)=1]≤negl(n).
如果对名称不熟悉,可以参考下方的概念回顾
。
- 消息认证实验 M a c f o r g e A , Π ( n ) \mathsf{Macforge}_{\mathcal{A},\Pi }(n) MacforgeA,Π(n) 在挑战者和敌手之间:
概念回顾
PPT在密码学中代表“概率多项式时间”(Probabilistic Polynomial Time),这是一种衡量算法或攻击者能力的标准。在这个特定的上下文中,PPT是用来描述攻击者的计算能力。
让我们来详细解释这个定义:
MAC的定义
- MAC:MAC代表“消息认证码”(Message Authentication Code),它是一种用于验证消息完整性和来源真实性的加密工具。
- 存在性不可伪造:一个MAC系统被称为“存在性不可伪造”的,意味着没有攻击者可以成功地伪造一个有效的MAC(即使是一个新的、以前未见过的MAC),除非通过微不足道的概率。
适应性CMA(Chosen Message Attack)
- 适应性CMA:适应性选择消息攻击(Adaptive Chosen Message Attack)是一种攻击模型,其中攻击者可以选择并获得先前消息的MAC值,然后尝试基于这些信息伪造新消息的MAC。
- 存在性不可伪造:在适应性CMA环境下,存在性不可伪造意味着攻击者在选择任意消息并获取其MAC后,仍然无法伪造其他任何消息的MAC。
PPT攻击者
- PPT攻击者:概率多项式时间攻击者是指那些
拥有多项式时间计算能力的攻击者
。这意味着他们的计算资源是有限的,不能进行无限的尝试或拥有无限的计算能力。 - 重要性:在考虑密码系统的安全性时,通常假设攻击者是PPT的。这是一种现实的假设,因为实际中攻击者的资源是有限的。
不可忽略的概率(negl(n))
- n e g l ( n ) \mathsf{negl}(n) negl(n):这是一个表示概率的术语,指的是某个函数随着输入大小的增长而增长得极其缓慢,以至于在实际中可以忽略不计。
- 应用:在这个定义中,如果对于所有的PPT攻击者 A \mathcal{A} A,伪造MAC的概率 Pr [ M a c f o r g e A , Π ( n ) = 1 ] \Pr [\mathsf{Macforge}_{\mathcal{A},\Pi }(n)=1] Pr[MacforgeA,Π(n)=1] 是可忽略的,那么就可以说这个MAC系统在适应性CMA下是存在性不可伪造的。
总结
所以,这个定义的含义是:一个MAC系统在适应性选择消息攻击下被认为是安全的,如果没有任何实际的、有限计算能力的攻击者能够以超过微不足道的概率成功伪造一个MAC。这个标准确保了即使在面对强大但现实的攻击者时,MAC系统也能保持其安全性和完整性。
案例
-
真实例子
- WEP 802.11 MAC中的漏洞有两点
- 一是存在不同消息的CRC32可能是一样的情况,而且这种情况很容易给出。那么,敌手可以查询一个消息 m m m并得到对应的标签 t t t;然后,输出另一个与所查询消息 m m m具有相同CRC32值的新消息 m ′ m' m′,以及查到的标签 t t t。
- 二是敌手可以查询一个消息 m ′ m' m′并获得标签 ( r , t ′ ) (r, t') (r,t′),由此计算得到 F ( k , r ) = t ′ ⊕ C R C 32 ( m ′ ) F(k,r) = t'\oplus \mathsf{CRC32}(m') F(k,r)=t′⊕CRC32(m′);输出一个新消息 m m m以及标签 t = ( r , F ( k , r ) ⊕ C R C 32 ( m ) ) t = (r, F(k,r)\oplus\mathsf{CRC32}(m)) t=(r,F(k,r)⊕CRC32(m))。
- 上述漏洞展现了攻击MAC的两种常用手段:一是找到两个消息得到相同的中间结果,从而以一个消息的标签作为另一个新消息的标签;二是利用对一个/多个消息的标签来获得构造标签所需的信息,从而构造一个新消息的标签。
-
例题
- 如果认为是安全的,则要用反证法证明,若新方案不安全,则原方案也不安全;
- 如果认为是不安全的,则给出一个新消息和对应的标签;
构建安全MAC
-
构造安全MAC
- 基于PRF构造安全MAC
- F F F 是 PRF. ∣ m ∣ = n |m| = n ∣m∣=n.
- G e n ( 1 n ) \mathsf{Gen}(1^n) Gen(1n): k ← { 0 , 1 } n k \gets \{0,1\}^n k←{0,1}n .
- M a c k ( m ) \mathsf{Mac}_k(m) Mack(m): t : = F k ( m ) t := F_k(m) t:=Fk(m).
- V r f y k ( m , t ) \mathsf{Vrfy}_k(m,t) Vrfyk(m,t): 1 ⟺ t = ? F k ( m ) 1 \iff t \overset{?}{=} F_k(m) 1⟺t=?Fk(m).
- 定理:如果 F F F 是一个PRF,那么上述构造是安全的固定长度 MAC。
- 引理:如果 F F F 是一个 PRF,那么 F k t ( m ) = F k ( m ) [ 1 , … , t ] F^t_k(m) = F_k(m)[1,\dots,t] Fkt(m)=Fk(m)[1,…,t] 也是一个PRF。
- 注:这个引理说明部分输出仍保留伪随机性。引理成立的原因在于,如果根据更短的输出可以区分出伪随机函数,那么根据原长度输出也可以区分出伪随机函数了。
- 基于PRF构造安全MAC
证明基于PRF的安全MAC
-
证明基于PRF的安全MAC
-
证明思路是:从PRF的区分器算法 D D D规约到伪造标签的敌手算法 A \mathcal{A} A。 D D D作为 A \mathcal{A} A的挑战者,用 D D D要区分的预言机作为 A \mathcal{A} A的标签生成预言机;当 A \mathcal{A} A伪造标签成功时, D D D输出1。
-
如果是真随机 f f f 被使用 t = f ( m ) t=f(m) t=f(m) 是均匀随机的.
Pr [ D f ( ⋅ ) ( 1 n ) = 1 ] = Pr [ M a c f o r g e A , Π ~ ( n ) = 1 ] ≤ 2 − n . \Pr[D^{f(\cdot)}(1^n)=1] = \Pr[\mathsf{Macforge}_{\mathcal{A},\tilde{\Pi}}(n) = 1] \le 2^{-n}. Pr[Df(⋅)(1n)=1]=Pr[MacforgeA,Π~(n)=1]≤2−n.
-
如果 F k F_k Fk 被使用,那么就是在执行实验 M a c f o r g e A , Π ( n ) \mathsf{Macforge}_{\mathcal{A},\Pi}(n) MacforgeA,Π(n).
Pr [ D F k ( ⋅ ) ( 1 n ) = 1 ] = Pr [ M a c f o r g e A , Π ( n ) = 1 ] = ε ( n ) . \Pr[D^{F_k(\cdot)}(1^n)=1] = \Pr[\mathsf{Macforge}_{\mathcal{A},\Pi}(n) = 1] = \varepsilon(n). Pr[DFk(⋅)(1n)=1]=Pr[MacforgeA,Π(n)=1]=ε(n).
-
根据PRF的定义有, ∣ Pr [ D F k ( ⋅ ) ( 1 n ) = 1 ] − Pr [ D f ( ⋅ ) ( 1 n ) = 1 ] ∣ ≥ ε ( n ) − 2 − n . \left| \Pr[D^{F_k(\cdot)}(1^n)=1] - \Pr[D^{f(\cdot)}(1^n)=1] \right| \ge \varepsilon(n) - 2^{-n}. Pr[DFk(⋅)(1n)=1]−Pr[Df(⋅)(1n)=1] ≥ε(n)−2−n.
-
-
扩展到变长消息
- 对于变长消息,下面的建议是安全的吗?
- 建议1:将所有块异或后,对结果进行认证: t : = M a c k ′ ( ⊕ i m i ) t := \mathsf{Mac}_k'(\oplus_i m_i) t:=Mack′(⊕imi);
- 建议2:对每个块分别认证, t i : = M a c k ′ ( m i ) t_i := \mathsf{Mac}_k'(m_i) ti:=Mack′(mi);
- 建议3:对每个块连带一个序列号一起认证, t i : = M a c k ′ ( i ∥ m i ) t_i := \mathsf{Mac}_k'(i\| m_i) ti:=Mack′(i∥mi).
CBC-MAC 基于块加密算法的消息认证码
CBC概念回顾
CBC-MAC(Cipher Block Chaining Message Authentication Code)是一种基于块加密算法的消息认证码(MAC)构造方法。它使用的是密码块链接(Cipher Block Chaining,CBC)模式,这是一种常用的块加密操作模式。
构造固定长度的CBC-MAC
-
构造固定长度的CBC-MAC
- 为了构造用于变长消息的MAC,先学习固定长度的CBC-MAC,其与CBC结构类似,做了两处改变:
- 改动1:将初始向量IV改为0;如果不这样改动,则敌手查询 m 1 m_1 m1 并获得 ( I V , t 1 ) (IV, t_1) (IV,t1);然后,输出 m 1 ′ = I V ′ ⊕ I V ⊕ m 1 m_1' = IV' \oplus IV \oplus m_{1} m1′=IV′⊕IV⊕m1 并且 t ′ = ( I V ′ , t 1 ) t' = (IV',t_1) t′=(IV′,t1),一个有效的标签。
- 改动2:标签只包括最后一个块的输出;如果不这样改动,则敌手查询 m i m_i mi 并得到 t i t_i ti;然后,输出 m i ′ = t i − 1 ′ ⊕ t i − 1 ⊕ m i m_i' = t_{i-1}' \oplus t_{i-1} \oplus m_{i} mi′=ti−1′⊕ti−1⊕mi 以及 t i ′ = t i t_{i}' = t_i ti′=ti,一个有效的标签。
-
构造固定长度的CBC-MAC(续)
- 定理:如果 F F F是一个PRF,那么上面的构造就是一个安全的固定长度MAC。
- 这个构造不能用于变长消息,因为对于一个块的消息 m m m和标签 t t t,敌手可以在其后添加一个块 m ⊕ t m\oplus t m⊕t并且输出标签 t t t。
-
安全变长MAC
- 有三种方法可以将CBC-MAC改造为用于变长消息的MAC,都可以防御上面在结尾添加新块的攻击。
- 输入长度密钥分离: k ℓ : = F k ( ℓ ) k_{\ell} := F_k(\ell) kℓ:=Fk(ℓ), 用 k ℓ k_{\ell} kℓ 作为 CBC-MAC 的密钥。不同长度下采用不同密钥,追加新块后长度变化,之前的标签无法利用。
- 在开头添加长度:在CBC-MAC的明文 m m m前添加一个长度块 ∣ m ∣ |m| ∣m∣。不同长度下消息有不同的初始块,追加新块后长度变化,之前的标签无法利用。
- 加密末块输出(ECBC-MAC):采用两个密钥 k 1 , k 2 k_1, k_2 k1,k2。用 k 1 k_1 k1和CBC-MAC计算出 t t t,然后输出 t ^ : = F k 2 ( t ) \hat{t} := F_{k_2}(t) t^:=Fk2(t)。输出结果被加密,之前的标签无法利用。
-
MAC填充(Padding)
- 与加密类似,为了将消息长度与块长度对齐,MAC中也需要在消息中填充。为了安全性,需要保证填充是可逆的,即不同的消息在填充后也应该不同!
- m 0 ≠ m 1 ⇒ p a d ( m 0 ) ≠ p a d ( m 1 ) . m_0\neq m_1 \Rightarrow \mathsf{pad}(m_0) \neq \mathsf{pad}(m_1). m0=m1⇒pad(m0)=pad(m1).
- ISO的填充标准:用“100…00”填充,并按需填充哑块。
- 如果不填充哑块,则会导致什么?
- CMAC(Cipher-based MAC):不填充哑块,不加密最后一块的输出,密钥包括三个 k , k 1 , k 2 k, k_1, k_2 k,k1,k2
- k k k用于CBC-MAC;
- k 1 k_1 k1 和 k 2 k_2 k2 与最后一块消息异或来阻止利用最后一块输出;
- 用 k 1 k_1 k1 和 k 2 k_2 k2 来区分是否添加了哑块。
定理4.20证明:如果He是一个 CPA 安全的对称密钥加密方案,且nn是一个具有唯一标记的消息鉴别码,那么构造方案 4.19 是一个 CCA 安全的对称密钥加密方案。
3. 哈希函数
CRHF:哈希函数Hash Function、 定义抗碰撞Collision Resistance
-
定义哈希函数(Hash Function)
- 一个哈希函数 (压缩函数) 是一对PPT算法 ( G e n , H ) (\mathsf{Gen}, H) (Gen,H) 满足以下条件:
- 一个密钥 s ← G e n ( 1 n ) s \gets \mathsf{Gen}(1^n) s←Gen(1n), s s s 不保密.
- H s ( x ) ∈ { 0 , 1 } ℓ ( n ) H^s(x) \in \{0,1\}^{\ell(n)} Hs(x)∈{0,1}ℓ(n), 其中 x ∈ { 0 , 1 } ∗ x \in \{0,1\}^* x∈{0,1}∗ 且 ℓ \ell ℓ 为多项式。
- 若 H s H^s Hs 只在 x ∈ { 0 , 1 } ℓ ′ ( n ) x \in \{0,1\}^{\ell'(n)} x∈{0,1}ℓ′(n) 上定义并且 ℓ ′ ( n ) > ℓ ( n ) \ell'(n) > \ell(n) ℓ′(n)>ℓ(n),那么 ( G e n , H ) (\mathsf{Gen}, H) (Gen,H) 是固定长度的哈希函数。
- 上面的定义说明,哈希函数将长消息转变为短消息。
- 一个哈希函数 (压缩函数) 是一对PPT算法 ( G e n , H ) (\mathsf{Gen}, H) (Gen,H) 满足以下条件:
-
定义抗碰撞(Collision Resistance)
-
碰撞(Collision): x ≠ x ′ x \neq x' x=x′ 并且 H ( x ) = H ( x ′ ) H(x) = H(x') H(x)=H(x′)。
-
抗碰撞(Collision Resistance):对于任意PPT算法,找到碰撞是不可能的。
-
碰撞发现实验 H a s h c o l l A , Π ( n ) \mathsf{Hashcoll}_{\mathcal{A},\Pi}(n) HashcollA,Π(n):
-
s ← G e n ( 1 n ) s \gets \mathsf{Gen}(1^n) s←Gen(1n).
- 敌手 A \mathcal{A} A 输入 s s s ,输出 x , x ′ x, x' x,x′. 注:敌手有 s s s,意味着可以访问哈希函数
-
H a s h c o l l A , Π ( n ) = 1 ⟺ x ≠ x ′ ∧ H s ( x ) = H s ( x ′ ) \mathsf{Hashcoll}_{\mathcal{A},\Pi}(n) =1 \iff x\ne x' \land H^s(x) = H^s(x') HashcollA,Π(n)=1⟺x=x′∧Hs(x)=Hs(x′).
-
哈希函数 Π \Pi Π ( G e n \mathsf{Gen} Gen, H s H^s Hs) 是抗碰撞的,如果 ∀ \forall ∀ ppt A \mathcal{A} A, ∃ n e g l \exists\;\mathsf{negl} ∃negl 使得
Pr [ H a s h c o l l A , Π ( n ) = 1 ] ≤ n e g l ( n ) . \Pr[\mathsf{Hashcoll}_{\mathcal{A},\Pi}(n)=1] \le \mathsf{negl}(n). Pr[HashcollA,Π(n)=1]≤negl(n).
-
-
-
哈希函数安全的更弱的概念
- 抗碰撞(Collision resistance): 难以找到 ( x , x ′ ) , x ′ ≠ x (x, x'), x' \ne x (x,x′),x′=x 使得 H ( x ) = H ( x ′ ) H(x) = H(x') H(x)=H(x′).
- 抗二次原像 (Second pre-image resistance): 给定 s s s 和 x x x, 难以发现 x ′ ≠ x x' \ne x x′=x 使得 H s ( x ′ ) = H s ( x ) H^s(x') = H^s(x) Hs(x′)=Hs(x).
- 抗原像 (Pre-image resistance): 给定 s s s 和 y = H s ( x ) y = H^s(x) y=Hs(x), 难以发现 x ′ x' x′ 使得 H s ( x ′ ) = y H^s(x')=y Hs(x′)=y.
- 攻击越难,反过来可以防范这种攻击的安全性就越弱。
-
关于CRHF的问题
- 如果认为不是,那么请给出一个碰撞;
- 如果认为是,则用反证法证明找到了 H ′ H' H′的碰撞意味着 H H H的碰撞。
-
哈希函数的应用
- 文件指纹和去重(Fingerprinting 和 Deduplication):识别一个文件,用于病毒指纹识别,去重复,P2P文件共享;
- 默克尔树 (Merkle Tree):构造多个文件或一个文件多个部分的指纹,从而定位有问题的文件或者文件中的部分;
- 口令哈希(Password Hashing): ( s a l t , H ( s a l t , p w ) ) (salt, H(salt, pw)) (salt,H(salt,pw)),缓解明文口令泄漏风险;
- 密钥派生(Key Derivation):从一个高熵(但不必均匀随机)的共享秘密中派生一个密钥;
- 承诺方案(Commitment Scheme):将一个承诺与一份信息绑定,隐藏承诺的信息;例如,互联网上掷硬币。
-
生日问题
-
生日问题:“如果一群人中有两个人的生日是同一天的概率有1/2,这群人数有多少?”。答案是23。这与我们平时的认知差异,也被称作“生日悖论”。具体计算见教材附件。
-
这个问题意味着哈希函数的输出需要足够长,否则敌手可能通过蛮力枚举来发现碰撞。
-
在现实攻击中,找到有意义的消息的碰撞对于攻击者来说更有价值。这对攻击者来说并不是难题,可以很容易的构造足够数量的、有意义的消息来实施攻击。对消息中一个单词的替换,所构造明文的数量翻番。
-
-
MD变换(Merkle-Damgård Transform)
- 从定长哈希函数 ( G e n , h ) (\mathsf{Gen}, h) (Gen,h) ( 2 ℓ 2\ell 2ℓ bits → ℓ \to \ell →ℓ bits, ℓ = ℓ ( n ) \ell = \ell(n) ℓ=ℓ(n))构造变长哈希函数 CRHF ( G e n , H ) (\mathsf{Gen}, H) (Gen,H) :
- G e n \mathsf{Gen} Gen: 不变
- H H H: 密钥 s s s 与串 x ∈ { 0 , 1 } ∗ x \in \{0,1\}^* x∈{0,1}∗, L = ∣ x ∣ < 2 ℓ L=|x|< 2^{\ell} L=∣x∣<2ℓ:
- B : = ⌈ L ℓ ⌉ B := \lceil \frac{L}{\ell} \rceil B:=⌈ℓL⌉ (块数)。 用0填充。 ℓ \ell ℓ-位的块 x 1 , … , x B x_1,\dotsc,x_B x1,…,xB。最后一块是长度 x B + 1 : = L x_{B+1} := L xB+1:=L, L L L 以 ℓ \ell ℓ 位编码,这是必要的,因为只用0填充会导致不同消息的输入是一样的。
- z 0 : = I V = 0 ℓ z_0 := IV = 0^\ell z0:=IV=0ℓ。 对于 i = 1 , … , B + 1 i=1,\dotsc,B+1 i=1,…,B+1, 计算 z i : = h s ( z i − 1 ∥ x i ) z_i := h^s(z_{i-1}\| x_i) zi:=hs(zi−1∥xi)。
- 从定长哈希函数 ( G e n , h ) (\mathsf{Gen}, h) (Gen,h) ( 2 ℓ 2\ell 2ℓ bits → ℓ \to \ell →ℓ bits, ℓ = ℓ ( n ) \ell = \ell(n) ℓ=ℓ(n))构造变长哈希函数 CRHF ( G e n , H ) (\mathsf{Gen}, H) (Gen,H) :
-
MD变换的安全性
- 定理:如果 h h h是定长CRHF,那么 H H H也是CRHF。
- 证明:思路是 H H H上的碰撞意味着 h h h上的碰撞,而 h h h是不会被找到碰撞的。两个消息 x ≠ x ′ x \ne x' x=x′ ,长度分别为 L L L 和 L ′ L' L′ ,块数分别为 B B B 和 B ′ B' B′,使得 H s ( x ) = H s ( x ′ ) H^s(x) = H^s(x') Hs(x)=Hs(x′)。 有两种情况:
- L ≠ L ′ L \ne L' L=L′: z B ∥ L ≠ z B ′ ∥ L ′ z_B\| L \ne z_{B'}\| L' zB∥L=zB′∥L′;长度不同,意味着最后一个哈希函数 h h h的输入不同,但输出相同,发现碰撞。
- L = L ′ L = L' L=L′: z i ∗ − 1 ∥ x i ∗ ≠ z i ∗ − 1 ′ ∥ x i ∗ ′ z_{i^*-1}\| x_{i^*} \ne z_{i^*-1}'\| x_{i^*}' zi∗−1∥xi∗=zi∗−1′∥xi∗′;长度相同,意味着中间某一块的输入不同,但输出相同,发现碰撞。
- 因此,必定有 x ≠ x ′ x \neq x' x=x′ 使得 h s ( x ) = h s ( x ′ ) h^s(x) = h^s(x') hs(x)=hs(x′)。
- 作业中有关于MD变换的变体的安全性分析问题。
-
从分组密码构造CRHF
- 可以从块密码来构造CRHF,例如Davies-Meyer方法 (SHA-1/2, MD5) h i = F m i ( h i − 1 ) ⊕ h i − 1 h_{i} = F_{m_{i}}(h_{i-1}) \oplus h_{i-1} hi=Fmi(hi−1)⊕hi−1,或者 Miyaguchi-Preneel 方法 (Whirlpool) h i = F h i − 1 ( m i ) ⊕ h i − 1 ⊕ m h_{i} = F_{h_{i-1}}(m_{i}) \oplus h_{i-1} \oplus m hi=Fhi−1(mi)⊕hi−1⊕m。
- 定理:如果 F F F是一个理想的加密方案,那么Davies-Meyer构造得到一个CRHF。注:理想的加密方案参考后面要学习的随机预言机模型。目前,没有找到 F F F是强伪随机排列下该方法是CRHF的证明。
- 对于这个定理不做严格证明,而是回答两个问题:
- 如果 h i = F m i ( h i − 1 ) h_{i} = F_{m_{i}}(h_{i-1}) hi=Fmi(hi−1) ,不与 h i − 1 h_{i-1} hi−1 异或,会如何?敌手尝试以相同的 h i h_i hi和不同的 m i m_i mi对 F F F求逆。
- 如果 F F F 不是理想的,而是 ∃ x , F k ( x ) = x \exists x, F_k(x)=x ∃x,Fk(x)=x,会如何?敌手输入不同 m i m_i mi,但都得到0;
-
SHA-1和MD5
- 曾将广泛采用的哈希函数SHA1和MD5都已经被破解。对于128位的MD5,找到碰撞需要 2 20.96 2^{20.96} 220.96;对于160位的SHA1,找到碰撞需要 2 51 2^{51} 251。
哈希函数的应用
HMAC(Hash-and-MAC)
-
Hash-and-MAC
- 有了CRHF,一个自然的想法是:先将任意长度消息哈希,然后通过PRF对哈希值做MAC,实现任意长度消息MAC。 F k ( H ( m ) ) F_k(H(m)) Fk(H(m))
- 这个方案的安全性分两种情况分析:当不同消息得到相同哈希值时,这意味着碰撞发生;否则,意味着MAC标签被伪造。
NMAC
-
NMAC
- 使用CRHF(MD变换)来构造MAC,而不需要用PRF
- 之所以需要开头的密钥,是为了在哈希函数为弱抗碰撞性时也保障安全;如果哈希函数是CRHF,则不需要开头的密钥
- 缺点:需要修改哈希函数(MD变换中初始向量)
HMAC
-
HMAC(基于哈希的MAC)
- 以MD变换为基础构造一个安全的MAC。在开头和结尾以两个不同密钥作为哈希函数输入。
- 不需要修改哈希函数。
- G e n ( 1 n ) \mathsf{Gen}(1^n) Gen(1n): 输出 ( s , k ) (s, k) (s,k). s ← G e n ~ , k ← { 0 , 1 } n s \gets \widetilde{\mathsf{Gen}}, k \gets \{0,1\}^n s←Gen ,k←{0,1}n u.a.r;
- M a c s , k ( m ) \mathsf{Mac}_{s,k}(m) Macs,k(m): t : = H I V s ( ( k ⊕ o p a d ) ∥ H I V s ( ( k ⊕ i p a d ) ∥ m ) ) t := H_{IV}^s\Big((k \oplus \mathsf{opad}) \| H_{IV}^s\big((k \oplus \mathsf{ipad}) \| m\big)\Big) t:=HIVs((k⊕opad)∥HIVs((k⊕ipad)∥m))
- V r f y s , k ( m , t ) \mathsf{Vrfy}_{s,k}(m,t) Vrfys,k(m,t): 1 ⟺ t = ? M a c s , k ( m ) 1 \iff t \overset{?}{=} \mathsf{Mac}_{s,k}(m) 1⟺t=?Macs,k(m)
-
HMAC安全性
- 定理: G ( k ) = def h s ( I V ∥ ( k ⊕ o p a d ) ) ∥ h s ( I V ∥ ( k ⊕ i p a d ) ) = k 1 ∥ k 2 G(k) \overset{\text{def}}{=} h^s(IV\| (k\oplus \mathsf{opad})) \| h^s(IV\| (k\oplus \mathsf{ipad})) = k_1\| k_2 G(k)=defhs(IV∥(k⊕opad))∥hs(IV∥(k⊕ipad))=k1∥k2 。其中, h h h是CRHF。如果 G G G是PRG,那么HMAC是安全的。
- 在HMAC之前,其他不安全的方案包括:
- H s ( k ∥ x ) H^s(k\| x) Hs(k∥x) 存在长度扩展攻击弱点。 在获得 H s ( k ∥ x ) H^s(k\| x) Hs(k∥x)和消息长度后,敌手能够获得新消息 x ∥ x ′ x \| x' x∥x′ 的有效标签 H s ( k ∥ x ∥ x ′ ) H^s(k\| x \| x') Hs(k∥x∥x′) 。因为 H s ( k ∥ x ) H^s(k\| x) Hs(k∥x)的输出标签 t t t和 x ′ x' x′作为哈希函数的输入直接得到输出。
- H s ( x ∥ k ) H^s(x\| k) Hs(x∥k): 在一个弱哈希函数上的碰撞会导致MAC上碰撞。回顾NMAC中需要开头的密钥来支持弱抗碰撞的情况。
- H s ( k ∥ x ∥ k ) H^s(k\| x\| k) Hs(k∥x∥k): 也存在一些已知的弱点,即使使用两个不同的密钥。
- H s ( k ∥ H s ( k ∥ x ) ) H^s(k \| H^s(k \| x)) Hs(k∥Hs(k∥x)):这是NMAC和HMAC的情况
-
HMAC结语
-
HMAC是基于NMAC的改进,是工业标准(RFC2104),HMAC比CBC-MAC更快;
-
验证计时攻击:
-
Keyczar密码学库(Python):
-
def Verify(key, msg, sig_bytes):
\qquad
return HMAC(key, msg) == sig_bytes
-
存在问题是上述比较是按字节匹配,通过观察函数返回时间可以判断相同字节的数量,从而按字节猜测标签内容。
-
在Xbox 360中,相邻字节上被验证拒绝的时间差有2.2毫秒.
-
-
不要自己实现密码学!
-
信息论上MAC
-
信息论上MAC安全定义
- 不可能达到“完美的、不可伪造的”MAC,因为算力无限制的敌手可以至少以 1 / 2 ∣ t ∣ 1/2^{|t|} 1/2∣t∣ 的概率输出一个有效的标签。为此,对敌手查询MAC预言机的次数需要加以限制,下面分析只允许敌手查询一次MAC预言机的情况。
- 一次消息认证实验 M a c f o r g e A , Π 1 − t i m e \mathsf{Macforge}^{\mathsf{1-time}}_{\mathcal{A},\Pi } MacforgeA,Π1−time: 敌手查询一次MAC预言机后输出消息和标签,
- k ← G e n k \gets \mathsf{Gen} k←Gen.
- A \mathcal{A} A 输出一个消息 m ′ m' m′并且获得一个标签 t ′ ← M a c k ( m ′ ) t' \gets \mathsf{Mac}_k(m') t′←Mack(m′), 然后输出 ( m , t ) (m,t) (m,t).
- M a c f o r g e A , Π 1 − t i m e = 1 ⟺ \mathsf{Macforge}^{\mathsf{1-time}}_{\mathcal{A},\Pi }=1 \iff MacforgeA,Π1−time=1⟺ V r f y k ( m , t ) = 1 \mathsf{Vrfy}_k(m,t)=1 Vrfyk(m,t)=1 ∧ \land ∧ m ≠ m ′ m \neq m' m=m′.
- 定义:一个MAC Π \Pi Π 是一次 ε \varepsilon ε-安全的(one-time ε \varepsilon ε-secure),如果 ∀ \forall ∀ ppt A \mathcal{A} A: Pr [ M a c f o r g e A , Π 1 − t i m e = 1 ] ≤ ε . \Pr [\mathsf{Macforge}^{\mathsf{1-time}}_{\mathcal{A},\Pi}=1] \le \varepsilon. Pr[MacforgeA,Π1−time=1]≤ε.
- 这里 ε \varepsilon ε应该为 1 / 2 ∣ t ∣ 1/2^{|t|} 1/2∣t∣,才能达到之前的信息论安全。信息论安全的MAC在允许敌手查询MAC预言机若干次之后,成功伪造MAC的概率应该不大于 1 / 2 ∣ t ∣ 1/2^{|t|} 1/2∣t∣。
-
理解信息论MAC安全
- 假设敌手算法是确定性的,其最合理的步骤如下:
- (1)选择的 m ′ m' m′是固定的,查询得到 t ′ t' t′;
- (2)根据 m ′ m' m′和 t ′ t' t′确定 k k k的所有可能集合 K ( t ′ ) \mathcal{K}(t') K(t′),从中选择一个 k ∗ k^* k∗;
- (3)选择输出 m m m是固定的,根据 k ∗ k^* k∗计算 t t t并输出。
- 问题: K ( t ′ ) \mathcal{K}(t') K(t′)太大或太小会如何?
- 设想如果根据第一次消息和标签能够唯一确定密钥 k k k,那么敌手一定可以成功伪造;反之,如果不能唯一确定密钥,并且密钥可能的范围 K ( t ′ ) \mathcal{K}(t') K(t′)充分大,那么敌手就难以成功伪造。从另一个角度,需要第一次查询获得的一个对消息和标签与敌手伪造另一个新消息的标签这两个事件之间是充分独立的。密钥空间太大也不安全,因为令 ( m , t ) (m, t) (m,t)是有效标签密钥集合也更大,其概率也增大。
- 假设敌手算法是确定性的,其最合理的步骤如下:
-
信息论上MAC的构造
- 一个函数 h h h: K × M → T \mathcal{K} \times \mathcal{M} \to \mathcal{T} K×M→T 是一个强全域函数(Strongly Universal Function (SUF)),如果对于所有不同的 m , m ′ ∈ M m, m' \in \mathcal{M} m,m′∈M 以及所有 t , t ′ ∈ T t, t' \in \mathcal{T} t,t′∈T, 以下成立: Pr [ h k ( m ) = t ∧ h k ( m ′ ) = t ′ ] = 1 / ∣ T ∣ 2 \Pr [h_k(m) = t \land h_k(m') = t'] = 1 / |\mathcal{T}|^2 Pr[hk(m)=t∧hk(m′)=t′]=1/∣T∣2,其中概率来自均匀选择的 k ∈ K k \in \mathcal{K} k∈K.
- 为了实现一次 1 / 2 ∣ t ∣ 1/2^{|t|} 1/2∣t∣-安全的MAC,需要一个新的数学对象,不同输入会独立产生不同的输出,输入间任何差异都会导致输出之间是完全独立的。将函数的这种性质称为:“成对独立的,pairwise-independent” 或者 “成对不可预测,pairwise-unpredictable”。
- SUF是具有上面性质的函数,下一页证明
- 信息论安全MAC构造:
- 令 h h h: K × M → T \mathcal{K} \times \mathcal{M} \to \mathcal{T} K×M→T 为一个SUF.
- G e n \mathsf{Gen} Gen: k ← { 0 , 1 } n k \gets \{0,1\}^n k←{0,1}n u.a.r.
- M a c k ( m ) \mathsf{Mac}_k(m) Mack(m): t : = h k ( m ) t := h_k(m) t:=hk(m).
- V r f y k ( m , t ) \mathsf{Vrfy}_k(m,t) Vrfyk(m,t): 1 ⟺ t = ? h k ( m ) 1 \iff t \overset{?}{=} h_k(m) 1⟺t=?hk(m). (如果 m ∉ M m \notin \mathcal{M} m∈/M,那么输出 0.)
-
构造一个SUF
- 定理:对于任意质数 P P P,函数 h h h 是一个SUF: h a , b ( m ) = d e f [ a ⋅ m + b m o d p ] h_{a,b}(m) \overset{\mathsf{def}}{=} [ a \cdot m + b \mod p] ha,b(m)=def[a⋅m+bmodp]
- 证明: h a , b ( m ) = t h_{a,b}(m) = t ha,b(m)=t 且 h a , b ( m ′ ) = t ′ h_{a,b}(m') = t' ha,b(m′)=t′,只有当 a ⋅ m + b = t m o d p a \cdot m + b = t \mod p a⋅m+b=tmodp 且 a ⋅ m ′ + b = t ′ m o d p a \cdot m' + b = t' \mod p a⋅m′+b=t′modp. 我们有 a = [ ( t − t ′ ) ⋅ ( m − m ′ ) − 1 m o d p ] a = [(t-t') \cdot (m - m')^{-1} \mod p] a=[(t−t′)⋅(m−m′)−1modp] 且 b = [ t − a ⋅ m m o d p ] b = [t - a \cdot m \mod p] b=[t−a⋅mmodp],这意味着存在一个唯一的密钥 ( a , b ) (a, b) (a,b)。由于存在 ∣ T ∣ 2 |\mathcal{T}|^2 ∣T∣2 个密钥, Pr [ h k ( m ) = t ∧ h k ( m ′ ) = t ′ ] = 1 ∣ T ∣ 2 \Pr [h_k(m) = t \land h_k(m') = t'] = \frac{1}{|\mathcal{T}|^2} Pr[hk(m)=t∧hk(m′)=t′]=∣T∣21。
-
来自SUF的MAC的安全性
- 定理:如果 h h h 是一个 SUF,构造是一个 1 / ∣ T ∣ − 1/|\mathcal{T}|- 1/∣T∣−安全MAC.
- 证明:假设敌手算法是确定性的,不失一般性可以固定 m ′ m' m′并遍历所有可能的 t ′ t' t′,敌手以 ( m ′ , t ′ ) (m', t') (m′,t′)作为输入并输出 ( m , t ) (m, t) (m,t)。根据SUF的定义,可以得到敌手成功的概率为 1 / ∣ T ∣ 1/|\mathcal{T}| 1/∣T∣。
-
信息论MAC的局限性
- 任意 ℓ \ell ℓ次 2 − n 2^{-n} 2−n-安全 MAC 需要密钥长度至少为 ( ℓ + 1 ) ⋅ n (\ell +1) \cdot n (ℓ+1)⋅n.
- 定理:令 Π \Pi Π 为一次 2 − n 2^{-n} 2−n-安全 MAC,其中所有密钥长度相同。那么,密钥必须具有 2 n 2n 2n长度。
- 证明:直觉上,每对消息和标签成立需要 2 n 2^n 2n个密钥,才能保证 2 − n 2^{-n} 2−n-安全。一共2对,需要 2 2 n 2^{2n} 22n。
- 令 K ( t ′ ) = d e f { k ∣ V r f y k ( m ′ , t ′ ) = 1 } \mathcal{K}(t') \overset{\mathsf{def}}{=} \{ k | \mathsf{Vrfy}_k(m', t') = 1\} K(t′)=def{k∣Vrfyk(m′,t′)=1},即所有由所查询消息得到标签的密钥集合。对于任意 t ′ t' t′, ∣ K ( t ′ ) ∣ ≤ 2 − n ⋅ ∣ K ∣ |\mathcal{K}(t')| \leq 2^{-n} \cdot |\mathcal{K}| ∣K(t′)∣≤2−n⋅∣K∣。 否则,敌手 A \mathcal{A} A从全体密钥集合中随机挑选一个密钥得到 ( m , t ) (m, t) (m,t) 是一个有效标签的概率至少为 ∣ K ( t ′ ) ∣ / ∣ K ∣ > 2 − n |\mathcal{K}(t')|/|\mathcal{K}|> 2^{-n} ∣K(t′)∣/∣K∣>2−n,这与安全要求矛盾。 A \mathcal{A} A有无限算力可以根据从第一次查询中得到对应的密钥集合 K ( t ′ ) \mathcal{K}(t') K(t′),从中选择一个密钥 k ∗ k^* k∗,并输出一个新消息 m m m的有效标签的概率是至少 1 ∣ K ( t ′ ) ∣ \frac{1}{|\mathcal{K}(t')|} ∣K(t′)∣1。固定 m ′ m' m′遍历所有标签 t ′ t' t′计算敌手成功概率为: ∑ t ′ Pr [ M a c k ( m ′ ) = t ′ ] ⋅ 1 ∣ K ( t ′ ) ∣ ≥ ∑ t ′ Pr [ M a c k ( m ′ ) = t ′ ] ⋅ 2 n ∣ K ∣ = 2 n ∣ K ∣ \sum_{t'} \Pr [\mathsf{Mac}_k(m') = t'] \cdot \frac{1}{|\mathcal{K}(t')|} \geq \sum_{t'} \Pr [\mathsf{Mac}_k(m') = t'] \cdot \frac{2^n}{|\mathcal{K}|} = \frac{2^n}{|\mathcal{K}|} ∑t′Pr[Mack(m′)=t′]⋅∣K(t′)∣1≥∑t′Pr[Mack(m′)=t′]⋅∣K∣2n=∣K∣2n 。由于概率至多 2 − n 2^{-n} 2−n, ∣ K ∣ ≥ 2 2 n |\mathcal{K}| \geq 2^{2n} ∣K∣≥22n。由于所有密钥具有相同长度,每个密钥的长度至少是 2 n 2n 2n。
-
总结
- 认证意味着存在不可伪造
- 用PRF来实现安全MAC
- 用带密钥的CRHF来实现安全MAC
- 信息论MAC安全需要非常、非常长的密钥
4、非对称的多样加密的方案
7. 公钥加密定义
- 密钥生成(Key-generation)算法: ( p k , s k ) ← G e n (pk,sk) \gets \mathsf{Gen} (pk,sk)←Gen, 密钥长度 ≥ n \ge n ≥n;
- 明文空间: M \mathcal{M} M 与 p k pk pk 相关;(注:公钥加密方案通常以数学难题为基础,明文与公钥之间并不完全独立)
- 加密(Encryption)算法: c ← E n c p k ( m ) c \gets \mathsf{Enc}_{pk}(m) c←Encpk(m).
- 解密(Decryption)算法: m : = D e c s k ( c ) m:= \mathsf{Dec}_{sk}(c) m:=Decsk(c), 或者输出 ⊥ \perp ⊥.
- 需求: Pr [ D e c s k ( E n c p k ( m ) ) = m ] ≥ 1 − n e g l ( n ) \Pr[\mathsf{Dec}_{sk}(\mathsf{Enc}_{pk}(m)) = m] \ge 1 - \mathsf{negl}(n) Pr[Decsk(Encpk(m))=m]≥1−negl(n). (注:公钥加密方案通常以数学难题为基础,存在解密不成功的可能。)
-
对窃听者的安全 = CPA
- 由于公钥是公开的,敌手不仅能窃听,而且能够加密任意明文。
- 在敌手和挑战者间窃听不可区分实验 P u b K A , Π e a v ( n ) \mathsf{PubK}^{\mathsf{eav}}_{\mathcal{A},\Pi}(n) PubKA,Πeav(n):
- 挑战者生成密钥 ( p k , s k ) ← G e n ( 1 n ) (pk,sk) \gets \mathsf{Gen}(1^n) (pk,sk)←Gen(1n)。
- 敌手 A \mathcal{A} A 被给予 p k \mathbf{pk} pk 以及 E n c p k ( ⋅ ) \mathbf{\mathsf{Enc}_{pk}(\cdot)} Encpk(⋅) 预言机的访问,输出相同长度的 m 0 , m 1 m_0, m_1 m0,m1 。
- 挑战者随机生成 b ← { 0 , 1 } b \gets \{0,1\} b←{0,1}。将挑战密文 c ← E n c p k ( m b ) c \gets \mathsf{Enc}_{pk}(m_b) c←Encpk(mb) 发送给敌手 A \mathcal{A} A。
- A \mathcal{A} A 继续访问预言机 E n c p k ( ⋅ ) \mathbf{\mathsf{Enc}_{pk}(\cdot)} Encpk(⋅) 并且输出 b ′ b' b′。
- 如果 b ′ = b b' = b b′=b, A \mathcal{A} A 成功 P u b K A , Π e a v = 1 \mathsf{PubK}^{\mathsf{eav}}_{\mathcal{A},\Pi}=1 PubKA,Πeav=1,否则 0。
- 定义: Π \Pi Π 是 CPA-secure, 如果 ∀ \forall ∀ ppt A \mathcal{A} A, ∃ \exists ∃ n e g l \mathsf{negl} negl 使得 Pr [ P u b K A , Π c p a ( n ) = 1 ] ≤ 1 2 + n e g l ( n ) \Pr\left[\mathsf{PubK}^{\mathsf{cpa}}_{\mathcal{A},\Pi}(n)=1\right] \le \frac{1}{2} + \mathsf{negl}(n) Pr[PubKA,Πcpa(n)=1]≤21+negl(n)。
-
公钥加密的安全属性
- 对称加密可以加密32比特消息,产生32比特密文,例如,使用一次一密。在公钥系统中能够做到同样的吗?
- 一个确定性的公钥加密方案在窃听者出现时是安全的?
- 如果 Π \Pi Π 在窃听者出现时是安全的,那么 Π \Pi Π 也是CPA安全的? 是否是多重加密安全的?
- 完美保密的公钥加密是可能的吗?(注:不可能)
-
混合加密(Hybrid Encryption)构造
- 为了加速加密,采用私钥加密方案 Π ′ \Pi' Π′ (数据封装机制,data-encapsulation mechanism, DEM) 与公钥加密方案 Π \Pi Π (密钥封装机制, key-encapsulation mechanism, KEM) 一起。
- Π h y = ( G e n h y , E n c h y , D e c h y ) \Pi^{\mathsf{hy}} = (\mathsf{Gen}^{\mathsf{hy}}, \mathsf{Enc}^{\mathsf{hy}}, \mathsf{Dec}^{\mathsf{hy}}) Πhy=(Genhy,Enchy,Dechy):
- G e n h y \mathsf{Gen}^{\mathsf{hy}} Genhy: ( p k , s k ) ← G e n ( 1 n ) (pk,sk) \gets \mathsf{Gen}(1^n) (pk,sk)←Gen(1n). 注:只需提前生成公钥加密方案所需密钥
- E n c h y \mathsf{Enc}^{\mathsf{hy}} Enchy: p k pk pk and m m m.
- k ← { 0 , 1 } n k \gets \{0,1\}^n k←{0,1}n. 注:生成私钥加密密钥
- c 1 ← E n c p k ( k ) c_1 \gets \mathsf{Enc}_{pk}(k) c1←Encpk(k), c 2 ← E n c k ′ ( m ) c_2 \gets \mathsf{Enc}'_{k}(m) c2←Enck′(m). 注:用公钥加密的公钥加密私钥加密密钥,用私钥加密密钥加密消息。
- D e c h y \mathsf{Dec}^{\mathsf{hy}} Dechy: s k sk sk and ⟨ c 1 , c 2 ⟩ \langle c_1,c_2\rangle ⟨c1,c2⟩.
- k : = D e c s k ( c 1 ) k := \mathsf{Dec}_{sk}(c_1) k:=Decsk(c1). 注:用公钥加密中私钥解密获得私钥加密密钥
- m : = D e c k ′ ( c 2 ) m := \mathsf{Dec}'_k(c_2) m:=Deck′(c2). 注:用私钥加密密钥获得明文
- 问题:混合加密方案是公钥加密还是私钥加密?
-
混合加密安全
- 定理:如果 Π \Pi Π 是一个CPA安全的公钥加密方案,并且 Π ′ \Pi' Π′ 是窃听者不可区分的私钥加密方案,那么 Π h y \Pi^{\mathsf{hy}} Πhy 是CPA安全的公钥加密方案。
- 这里对于私钥加密方案的安全性要求只是窃听者不可区分的,不要求是CPA安全的,因为私钥加密密钥是每次加密时随机产生的新密钥,私钥加密的加密预言机提供的结果无法被利用。
- 整个方案安全证明的思路是利用各方案之间不可区分性,以及不可区分性所具有的传递性(transitiviy)。
- 目标是证明 (1) ⟨ p k , E n c p k ( k ) , E n c k ′ ( m 0 ) ⟩ \langle pk,\mathsf{Enc}_{pk}(k),\mathsf{Enc}_{k}'(m_0)\rangle ⟨pk,Encpk(k),Enck′(m0)⟩ 与(2) ⟨ p k , E n c p k ( k ) , E n c k ′ ( m 1 ) ⟩ \langle pk,\mathsf{Enc}_{pk}(k),\mathsf{Enc}_{k}'(m_1)\rangle ⟨pk,Encpk(k),Enck′(m1)⟩ 之间对于不同明文的不可区分性。为此,先观察(1) ⟨ p k , E n c p k ( k ) , E n c k ′ ( m 0 ) ⟩ \langle pk,\mathsf{Enc}_{pk}(k),\mathsf{Enc}_{k}'(m_0)\rangle ⟨pk,Encpk(k),Enck′(m0)⟩ 与(3) ⟨ p k , E n c p k ( 0 n ) , E n c k ′ ( m 0 ) ⟩ \langle pk,\mathsf{Enc}_{pk}(0^n),\mathsf{Enc}_{k}'(m_0)\rangle ⟨pk,Encpk(0n),Enck′(m0)⟩ 之间对于不同公钥加密明文(私钥加密密钥)之间由于公钥加密方案不可区分性也是不可区分的;同理,(2) ⟨ p k , E n c p k ( k ) , E n c k ′ ( m 1 ) ⟩ \langle pk,\mathsf{Enc}_{pk}(k),\mathsf{Enc}_{k}'(m_1)\rangle ⟨pk,Encpk(k),Enck′(m1)⟩ 与(4) ⟨ p k , E n c p k ( 0 n ) , E n c k ′ ( m 1 ) ⟩ \langle pk,\mathsf{Enc}_{pk}(0^n),\mathsf{Enc}_{k}'(m_1)\rangle ⟨pk,Encpk(0n),Enck′(m1)⟩ 之间也是不可区分的。(3) ⟨ p k , E n c p k ( 0 n ) , E n c k ′ ( m 0 ) ⟩ \langle pk,\mathsf{Enc}_{pk}(0^n),\mathsf{Enc}_{k}'(m_0)\rangle ⟨pk,Encpk(0n),Enck′(m0)⟩ 与(4) ⟨ p k , E n c p k ( 0 n ) , E n c k ′ ( m 1 ) ⟩ \langle pk,\mathsf{Enc}_{pk}(0^n),\mathsf{Enc}_{k}'(m_1)\rangle ⟨pk,Encpk(0n),Enck′(m1)⟩ 之间由于私钥加密方案不可区分性也是不可区分的。最后,根据不可区分性所具有的传递性,证明混合加密方案的不可区分性。
5. 随机预言机模型(Random Oracle Model,ROM)
-
随机预言机模型(Random Oracle Model,ROM)
- 为了在实践中实现CPA安全和CCA安全的公钥加密方案,引入了一个更强大的随机对象,称为随机预言机(Random Oracle Model)。
- 随机预言机(RO):一个真随机函数( H H H)对每个可能的查询回答一个随机应答。
- 一致性:如果 H H H曾经在运行中为一个输入 x x x 输出 y y y,那么它一直对相同的输入输出相同的答案。
- 无人“知道”整个函数 H H H。
- 随机预言机模型(ROM):存在一个公开的RO。与此相对的,不存在RO的情况,称作标准模型。
- 方法论:在ROM中构造可证明的安全。
- 在ROM中,一个方案被设计并被证明是安全的。
- 将 H H H 用一个哈希函数 H ^ \hat{H} H^,例如 SHA256。
- 无人严格地声明随机预言机存在。
- 存在某些方案,在ROM中被证明是安全的,但无论如何将随机预言机实例化都不是安全的。
- 使用ROM,很容易实现可证明安全,同时通过正确的实例化来保持高效。
-
ROM的简单例子
-
由于RO “强大的随机性”,其可以充当或构造之前学习过得密码学原语,包括为单向函数、抗碰撞哈希函数、伪随机函数等。
-
一个 RO 将 n 1 n_1 n1 比特输入映射为 n 2 n_2 n2 比特输出。
-
RO 作为 OWF,进行如下实验:
-
选择一个RO H H H ;
-
选择一个随机的 x ∈ { 0 , 1 } n 1 x \in \{0,1\}^{n_1} x∈{0,1}n1 ,并且赋值 y : = H ( x ) y := H(x) y:=H(x) ;
-
敌手 A \mathcal{A} A 被给予 y y y,如果输出 x ′ x' x′: H ( x ′ ) = y H(x')=y H(x′)=y,则成功;
解释:如果敌手成功求逆,则意味着敌手“事先”询问过RO;
-
-
RO 作为 CRHF,进行如下实验:
-
选择一个RO H H H ;
-
敌手 A \mathcal{A} A 成功,如果其输出 x , x ′ x, x' x,x′ 满足 H ( x ) = H ( x ′ ) H(x)=H(x') H(x)=H(x′) ,但是 x ≠ x ′ x\neq x' x=x′;
解释:如果敌手找到碰撞,则意味着 H H H不是随机的,因为两个随机输出不可能相同。
-
-
从一个RO构造PRF : n 1 = 2 n n_1=2n n1=2n, n 2 = n n_2=n n2=n.
-
F k ( x ) = def H ( k ∥ x ) , F_k(x) \overset{\text{def}}{=} H(k\| x), Fk(x)=defH(k∥x), ∣ k ∣ = ∣ x ∣ = n . |k|=|x|=n. ∣k∣=∣x∣=n.
解释:如果 F F F不是伪随机的,则 H H H也可以与真随机相区分。
-
-
基于私钥加密的CCA安全
-
基于私钥加密的CCA安全
- 思路:PubK CCA = PrivK CCA + (Secret Key = TPD + RO)
- 实现CCA安全的公钥加密方案,可以基于一个CCA安全的私钥加密方案,其中私钥加密密钥由RO得到,通过TDP传递生成密钥所用的随机量;
- 构造:
- Π ′ \Pi' Π′ 是一个安全私钥加密方案。
- G e n \mathsf{Gen} Gen: p k = I pk = I pk=I, s k = t d sk = \mathsf{td} sk=td.
- E n c \mathsf{Enc} Enc: k : = H ( r ) , r ← D I k := H(r), r \gets D_I k:=H(r),r←DI, 输出 ⟨ c 1 = f I ( r ) , c 2 = E n c k ′ ( m ) ⟩ \langle c_1= f_I(r), c_2 = \mathsf{Enc}'_k(m)\rangle ⟨c1=fI(r),c2=Enck′(m)⟩.
- D e c \mathsf{Dec} Dec: r : = f t d − 1 ( c 1 ) r := f^{-1}_{\mathsf{td}}(c_1) r:=ftd−1(c1), k : = H ( r ) k:=H(r) k:=H(r), 输出 D e c k ′ ( c 2 ) \mathsf{Dec}'_k(c_2) Deck′(c2).
- 定理:如果 f f f 是 TDP, Π ′ \Pi' Π′ 是 CCA 安全的,并且 H H H 是 RO,那么构造是 CCA 安全的。
- 解释:公钥加密方案的CCA安全性来自私钥加密方案的CCA安全性。
在ROM中基于TPD的CCA安全
-
在ROM中基于TPD的CCA安全
- 思路:PubK CCA = TDP + 2 RO (一个用于加密,一个用于MAC)
- 实现CCA安全的公钥加密方案,可以通过RO来构造一个CPA安全的公钥加密方案,以明文和密文一起作为输入来生成MAC标签。
- 构造:
- G e n \mathsf{Gen} Gen: p k = I pk = I pk=I, s k = t d sk = \mathsf{td} sk=td
- E n c \mathsf{Enc} Enc: r ← D I r \gets D_I r←DI,输出 ⟨ c 1 = f I ( r ) , c 2 = H ( r ) ⊕ m , c 3 = G ( c 2 ∥ m ) ⟩ \langle c_1=f_I(r), c_2 = H(r)\oplus m, c_3=G(c_2\|m)\rangle ⟨c1=fI(r),c2=H(r)⊕m,c3=G(c2∥m)⟩
- D e c \mathsf{Dec} Dec: r : = f t d − 1 ( c 1 ) r := f^{-1}_{\mathsf{td}}(c_1) r:=ftd−1(c1), m : = H ( r ) ⊕ c 2 m := H(r)\oplus c_2 m:=H(r)⊕c2。如果 G ( c 2 ∥ m ) = c 3 G(c_2\|m) = c_3 G(c2∥m)=c3 输出 m m m,否则 ⊥ \perp ⊥。
- 定理:如果 f f f 是 TDP, G , H G,H G,H 是 RO,那么构造是 CCA 安全的。
- 解释:其CCA安全性在于对密文的任何篡改,都无法通过MAC验证。