写在最前面
主要在 哈工大密码学课程 张宇老师课件 的基础上学习记录笔记。
内容补充:骆婷老师的PPT
《introduction to modern cryphtography》–Jonathan Katz, Yehuda Lindell(现代密码学——原理与协议)中相关章节
密码学复习笔记 这个博主好有意思
初步笔记,如有错误请指正
快速补充一些密码相关的背景知识
8.1 公钥加密理论
- 本节学习用于保护信息的完整性和真实性的消息认证码(MAC)和抗碰撞的哈希函数(CRHF)。
- 目录:公钥加密的定义和安全,陷门排列,选择密文攻击安全,在随机预言机模型中从陷门排列到公钥加密。
- 私钥密码学局限性
- 密钥分发需要通信各方在物理上会面;
- U UU个用户的密钥的数量 Θ ( U 2 ) \Theta(U^2)Θ(U2);
- 开放系统的安全通信:基于私钥密码学的解决方案无法充分处理开放系统中的安全通信问题,在开放系统中通信各方不能物理上会面,或只能暂时交互;
- 注:私钥密码学中的一个核心问题就是密钥分发与管理问题。
- Needham-Schroeder 协议
- Needham–Schroeder Symmetric Key Protocol:在开放网络中双方通过一个可信的第三方建立一个会话密钥(session key);
- 密钥分发中心(Key Distribution Center,KDC)作为可信的第三方(Trusted Third Party,TTP),与通信双方Alice和Bob在事前分别建立了对称密钥;
- KDC根据Alice的请求,生成一个新的 k kk 会话密钥(session key),分别用与Alice和Bob分别共享的密钥来加密并发送给Alice;E B o b ( k ) E_{Bob}(k)EBob(k) 作为一个来访问Bob所需的凭证(ticket);
- 用于MIT’s Kerberos 协议 (in Windows);
- 优点:每一方只需要存储一个密钥;不需要更新通信双方密钥(因为采用新的会话密钥);
- 弱点:单点失效,一旦KDC被破坏,则整个系统都不安全。
- Merkle难题(无需可信第三方的密钥交换)
- Alice准备 2 32 2^{32}232 个难题 P u z z l e i \mathsf{Puzzle}_iPuzzlei,并且发送给Bob;难题如下:
P u z z l e i ← E n c ( 0 96 ∥ p i ) ( “Puzzle #” x i ∥ k i ) , \mathsf{Puzzle}_i \gets \mathsf{Enc}_{(0^{96}\|p_i)}(\text{``Puzzle \#''} x_i \| k_i),Puzzlei←Enc(096∥pi)(“Puzzle #”xi∥ki),,其中 E n c \mathsf{Enc}Enc 是 128位加密,p i ← { 0 , 1 } 32 p_i \gets \{0,1\}^{32}pi←{0,1}32 并且 x i , k i ← { 0 , 1 } 128 x_i,k_i \gets \{0,1\}^{128}xi,ki←{0,1}128。
注:每个难题中明文包括一个随机数和一个密钥,用一个密钥加密; - Bob随机选择一个难题 P u z z l e j \mathsf{Puzzle}_jPuzzlej,并且在 2 32 2^{32}232 时间内猜测 p j p_jpj ,获得 x j , k j x_j,k_jxj,kj 并将 x j x_jxj 发送给 Alice。
- Alice 按照x j x_jxj查询谜题,并且使用 k j k_jkj 作为密钥。
- 敌手需要 2 32 + 32 2^{32+32}232+32 时间,是诚实方所需时间复杂性的二次方。
- 在诚实方和敌手之间存在更好的差距吗?如果将加密方法看作是一个黑盒预言机,那么二次差距是最好的。
- Merkle难题的缺点是谜题数量太大,获得密钥的代价太大;
- 注:Merkle当时是UC的一名本科生,这是他的一门课程设计申请。
- 公钥革命
- 在1976年,Whitfield Diffie 和 Martin Hellman 发表了 “New Directions in Cryptography” (密码学的新方向)。在这篇论文中,提出公钥加密方案、陷门(Trap door)和数字签名等概念。论文原文链接
- 非对称(Asymmetric)或公钥(public-key)加密方案:
- 公钥(Public key)作为加密密钥;(注:接收方产生,发送方持有)
- 私钥(Private key)作为解密密钥; (注:接收方产生,接收方持有)
- 公钥原语(Public-key primitives):
- 公钥加密(Public-key encryption)
- 数字签名(Digital signatures) (不可抵赖性,non-repudiation)
- 交互式密钥交换(Interactive key exchange)
- 优点:
- 在公开信道上密钥分发
- 减少保存大量密钥的需求
- 使得在开放系统的安全成为可能
- 缺点:慢两到三个数量级,针对公钥分发的主动攻击
- 注:如何保证Alice得到的公钥真的是Bob的公钥?
- 公钥加密定义
- 密钥生成(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 pkpk 相关;(注:公钥加密方案通常以数学难题为基础,明文与公钥之间并不完全独立)
- 加密(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_1m0,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' = bb′=b,A \mathcal{A}A 成功 P u b K A , Π e a v = 1 \mathsf{PubK}^{\mathsf{eav}}_{\mathcal{A},\Pi}=1PubKA,Π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安全的? 是否是多重加密安全的?
- 完美保密的公钥加密是可能的吗?(注:不可能)
- 密钥长度比较
NIST(美国国家标准技术研究所)推荐可比较的密钥长度 (按比特) 。NIST 认为一个112比特的有效密钥长度直到2030年是可接受的,但是推荐 128 比特或更长的密钥。
对称密钥(AES) | RSA/DH | ECC |
56 | 512 | 112 |
80 | 1024 | 160 |
112 | 2048 | 224 |
128 | 3072 | 256 |
192 | 7680 | 384 |
256 | 15360 | 512 |
- 混合加密(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 pkpkandm mm.
- k ← { 0 , 1 } n k \gets \{0,1\}^nk←{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 skskand⟨ 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)⟩ 之间由于私钥加密方案不可区分性也是不可区分的。最后,根据不可区分性所具有的传递性,证明混合加密方案的不可区分性。
- 混合加密范式应用
- 共享文件访问,Alice用自己的对称密钥加密文件,Bob的公钥加密对称密钥
- 密钥托管,Alice用托管服务器的公钥加密对称密钥,领导从托管服务器获得私钥来解锁
- 陷门函数(Trapdoor Function)
- 陷门函数(Trapdoor function): 易于计算,在缺乏特定信息(陷门)时难以求逆,即带有陷门的单向函数。
- 1982年,姚期智在论文《Theory and Applications of Trapdoor Functions》中提出,从任意陷门函数中可构造一个公钥加密方案。
- 函数族(Families of Functions)
- Π = ( G e n , S a m p , f ) \Pi = (\mathsf{Gen}, \mathsf{Samp}, f)Π=(Gen,Samp,f)是一个函数组,如果:
- 参数生成(Parameter-generation)算法: I ← G e n ( 1 n ) I \gets \mathsf{Gen}(1^n)I←Gen(1n)。参数I II定义了定义域(domain)D I \mathcal{D}_IDI和值域(range)D R \mathcal{D}_RDR。注:这里产生了一个具体的函数参数。
- 采样(sampling)算法: x ← S a m p ( I ) x \gets \mathsf{Samp}(I)x←Samp(I),均匀随机地产生一个x xx。
- 确定性赋值(evaluation)算法: y : = f I ( x ) y := f_I(x)y:=fI(x)。
- 这里强调采样算法是因为后面要学习的数论难题的输入是要满足某些条件的。
- 陷门排列族
- 一组多项式时间算法Π = ( G e n , S a m p , f , I n v ) \Pi = (\mathsf{Gen}, \mathsf{Samp}, f, \mathsf{Inv})Π=(Gen,Samp,f,Inv)是一个陷门排列族(family of trapdoor permutations,TDP),如果:
- 参数生成(parameter generation)算法 G e n \mathsf{Gen}Gen, 输入 1 n 1^n1n,输出 ( I , t d ) (I,\mathsf{td})(I,td) 有 ∣ I ∣ ≥ n |I| \ge n∣I∣≥n。其中, ( I , t d ) (I, \mathsf{td})(I,td) 定义了集合 D I = D t d \mathcal{D}_I = \mathcal{D}_{\mathsf{td}}DI=Dtd。注:陷门排列族是一个函数集合,参数生成算法产生一个具体陷门排列所需的参数。
- G e n I \mathsf{Gen}_IGenI 只输出 I II。( G e n I , S a m p , f ) (\mathsf{Gen}_I, \mathsf{Samp}, f)(GenI,Samp,f) 是 OWP。其中的S a m p \mathsf{Samp}Samp是采样函数,用于获得函数的输入x ← D I x \gets \mathcal{D}_Ix←DI。
- 一个确定性求逆算法 I n v \mathsf{Inv}Inv,对于 ∀ ( I , t d ) \forall (I,\mathsf{td})∀(I,td) 并且 ∀ x ∈ D I \forall x \in \mathcal{D}_{I}∀x∈DI, $ \mathsf{Inv}_{\mathsf{td}}(f_I(x))=x$。注:可求逆
- 核心断言:确定性多项式时间算法 h c \mathsf{hc}hc 是Π \PiΠ 的一个核心断言(hard-core predicate),如果 ∀ \forall∀ ppt A \mathcal{A}A,∃ \exists∃ n e g l \mathsf{negl}negl 使得 $ \Pr[\mathcal{A}(I,f_I(x)) = \mathsf{hc}_I(x)] \le \frac{1}{2} +\mathsf{negl}(n)$。
- 定理:给定一个陷门排列族Π = ( G e n , S a m p , f , I n v ) \Pi = (\mathsf{Gen}, \mathsf{Samp}, f, \mathsf{Inv})Π=(Gen,Samp,f,Inv),则存在一个带有核心断言的陷门排列族Π ^ = ( G e n ^ , S a m p , f , I n v ) \widehat{\Pi} = (\widehat{\mathsf{Gen}}, \mathsf{Samp}, f, \mathsf{Inv})Π=(Gen,Samp,f,Inv)。注:证明与单向函数部分关于核心断言的定理类似。
- TDP例题
- 如果答案是肯定的,则需要反证法证明,f ′ f'f′若不是TDP,那么f ff也不是;
- 如果答案是否定的,则需要给出一个有效的求逆方法。
- 从TDP到公钥加密方案
- 从一个带有核心断言h c \mathsf{hc}hc的陷门排列族Π ^ = ( G e n ^ , S a m p , f , I n v ) \widehat{\Pi} = (\widehat{\mathsf{Gen}}, \mathsf{Samp}, f, \mathsf{Inv})Π=(Gen,Samp,f,Inv)来构造一个公钥加密方案:
- G e n \mathsf{Gen}Gen: ( I , t d ) ← G e n ^ (I, \mathsf{td}) \gets \widehat{Gen}(I,td)←Gen 输出公钥 I II 和私钥 t d \mathsf{td}td。
- E n c \mathsf{Enc}Enc: 输入 I II 和 m ∈ { 0 , 1 } m \in \{0,1\}m∈{0,1},选择一个 x ← D I x\gets \mathcal{D}_Ix←DI 并且输出 ⟨ f I ( x ) , h c I ( x ) ⊕ m ⟩ \langle f_I(x), \mathsf{hc}_I(x)\oplus m \rangle⟨fI(x),hcI(x)⊕m⟩。
- D e c \mathsf{Dec}Dec: 输入 t d \mathsf{td}td 和 ⟨ y , m ′ ⟩ \langle y, m'\rangle⟨y,m′⟩,计算 x : = f I − 1 ( y ) x:= f^{-1}_I(y)x:=fI−1(y) 并且输出 h c I ( x ) ⊕ m ′ \mathsf{hc}_I(x)\oplus m'hcI(x)⊕m′。
- 定理:如果 Π ^ = ( G e n ^ , f ) \widehat{\Pi}=(\widehat{Gen},f)Π=(Gen,f) 是 TDP,并且 h c \mathsf{hc}hc 是Π ^ \widehat{\Pi}Π的 HCP ,那么构造 Π \PiΠ 是 CPA安全的。
- 问题:这个方案是安全的吗?E n c I ( m ) = f I ( m ) \mathsf{Enc}_{I}(m) = f_I(m)EncI(m)=fI(m), D e c t d ( c ) = f I − 1 ( c ) \mathsf{Dec}_{\mathsf{td}}(c) = f^{-1}_I(c)Dectd(c)=fI−1(c)。
- 证明
- h c I ( x ) \mathsf{hc}_I(x)hcI(x) 是伪随机的。将 A h c \mathcal{A}_{\mathsf{hc}}Ahc for h c \mathsf{hc}hc 规约到 A \mathcal{A}A for Π \PiΠ。
- Pr [ A h c ( I , f I ( x ) ) = h c I ( x ) ] = \Pr[\mathcal{A}_{\mathsf{hc}}(I,f_I(x))=\mathsf{hc}_I(x)] =Pr[Ahc(I,fI(x))=hcI(x)]= 1 2 ⋅ ( Pr [ b ′ = b ∣ z = h c I ( x ) ] + Pr [ b ′ ≠ b ∣ z ≠ h c I ( x ) ] ) . \frac{1}{2}\cdot (\Pr[b'=b|z=\mathsf{hc}_I(x)]+\Pr[b'\neq b|z\neq \mathsf{hc}_I(x)]).21⋅(Pr[b′=b∣z=hcI(x)]+Pr[b′=b∣z=hcI(x)]).
- 上面的公式的含义是A h c \mathcal{A}_{\mathsf{hc}}Ahc成功得到核心断言包含两种情况:
- 当z zz是核心断言,则A \mathcal{A}A面对的是方案Π \PiΠ,A \mathcal{A}A成功(b ′ = b b'=bb′=b),输出的z zz就是核心断言;
- 当z zz不是核心断言,则A \mathcal{A}A面对的挑战密文与Π \PiΠ中是相反的,A \mathcal{A}A失败(b ′ ≠ b b'\neq bb′=b),输出的z ‾ \overline{z}z就是核心断言;
- 证明(续)
- Pr [ b ′ = b ∣ z = h c I ( x ) ] = Pr [ P u b K A , Π e a v ( n ) = 1 ] = ε ( n ) \Pr[b'=b|z=\mathsf{hc}_I(x)] = \Pr[\mathsf{PubK}^{\mathsf{eav}}_{\mathcal{A},\Pi}(n)=1]=\varepsilon(n)Pr[b′=b∣z=hcI(x)]=Pr[PubKA,Πeav(n)=1]=ε(n)。 注:A \mathcal{A}A实验成功。
- 如果 z ≠ h c I ( x ) z \neq \mathsf{hc}_I(x)z=hcI(x), m ′ = m b ⊕ h c ‾ I ( x ) = m b ‾ ⊕ h c I ( x ) m' = m_b\oplus \overline{\mathsf{hc}}_I(x) = m_{\overline{b}}\oplus \mathsf{hc}_I(x)m′=mb⊕hcI(x)=mb⊕hcI(x),这意味着 m b ‾ m_{\overline{b}}mb 被加密了。
- Pr [ b ′ = b ∣ z ≠ h c I ( x ) ] = Pr [ P u b K A , Π e a v ( n ) = 0 ] = 1 − ε ( n ) \Pr[b'=b|z\neq \mathsf{hc}_I(x)] = \Pr[\mathsf{PubK}^{\mathsf{eav}}_{\mathcal{A},\Pi}(n)=0]=1-\varepsilon(n)Pr[b′=b∣z=hcI(x)]=Pr[PubKA,Πeav(n)=0]=1−ε(n)。 注:A \mathcal{A}A实验失败了。
- Pr [ b ′ ≠ b ∣ z ≠ h c I ( x ) ] = ε ( n ) \Pr[b'\neq b|z\neq \mathsf{hc}_I(x)] =\varepsilon(n)Pr[b′=b∣z=hcI(x)]=ε(n)。
- Pr [ A h c ( I , f I ( x ) ) = h c I ( x ) ] = 1 2 ⋅ ( ε ( n ) + ε ( n ) ) = ε ( n ) \Pr[\mathcal{A}_{\mathsf{hc}}(I,f_I(x))=\mathsf{hc}_I(x)] = \frac{1}{2}\cdot (\varepsilon(n)+\varepsilon(n)) = \varepsilon(n)Pr[Ahc(I,fI(x))=hcI(x)]=21⋅(ε(n)+ε(n))=ε(n)。 注:根据上一页的公式。
- 至此,我们学习了基于陷门排列的公钥加密方案,但只能加密一个比特,如何加密一个更长的明文?后面学习随机预言机模型设定下的公钥加密方案。
- 在公钥设定中CCA情景
- CCA
- 敌手 A \mathcal{A}A 观察由 S \mathcal{S}S 发送给 R \mathcal{R}R 的密文 c cc 。
- A \mathcal{A}A 以S \mathcal{S}S 或自己的名义发送 c ′ c'c′ 给 R \mathcal{R}R 。
- A \mathcal{A}A 根据从 c ′ c'c′ 中解密出的 m ′ m'm′ 来推断 m mm。
- 情景
- 用口令来登陆在线银行:试错,从银行反馈中获得信息。
- 邮件回复中包含解密出的文本的引用。
- 密文的可锻造性,例如,在拍卖中将其他人的出价翻倍。
- 对CCA/CCA2的安全定义
- CCA/CCA2 不可区分实验P u b K A , Π c c a ( n ) \mathsf{PubK}^{\mathsf{cca}}_{\mathcal{A},\Pi}(n)PubKA,Πcca(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 pkpk 和预言机访问 D e c s k ( ⋅ ) \mathsf{Dec}_{sk}(\cdot)Decsk(⋅),输出相同长度的 m 0 , m 1 m_0, m_1m0,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。
- 在CCA2中,A \mathcal{A}A 除了 c cc 之外还可以访问 D e c s k ( ⋅ ) \mathsf{Dec}_{sk}(\cdot)Decsk(⋅),并输出b ′ b'b′ 。注:CCA 也被称作午餐攻击。CCA2 也被称为适应性的 CCA。
- 如果 b ′ = b b' = bb′=b,那么 A \mathcal{A}A 成功, P r i v K A , Π c c a = 1 \mathsf{PrivK}^{\mathsf{cca}}_{\mathcal{A},\Pi}=1PrivKA,Πcca=1,否则 0。
- Π \PiΠ 是 CCA/CCA2安全的,如果 ∀ \forall∀ ppt A \mathcal{A}A, ∃ \exists∃ n e g l \mathsf{negl}negl 使得 Pr [ P u b K A , Π c c a ( n ) = 1 ] ≤ 1 2 + n e g l ( n ) \Pr\left[\mathsf{PubK}^{\mathsf{cca}}_{\mathcal{A},\Pi}(n)=1\right] \le \frac{1}{2} + \mathsf{negl}(n)Pr[PubKA,Πcca(n)=1]≤21+negl(n).
- 例题
- 略
- CCA2安全加密技术进展
- 零知识证明(Zero-Knowledge Proof):复杂并不可实践。(例如,Dolev-Dwork-Naor)
- 随机预言机模型(Random Oracle model):有效,但并不踏实 (将 CRHF 当作 RO)。 (例如,RSA-OAEP 和 Fujisaki-Okamoto)
- DDH(决策性Diffie-Hellman)假设和UOWHF(全域单向哈希函数):大小扩展2倍,但可以在没有RO和ZKP场景下证明安全 (例如,Cramer-Shoup system)。
- CCA2安全意味着明文感知(Plaintext-aware):敌手在不知道明文的情况下,不能产生有效的密文。
- 开放问题:如何构造一个与“书本上RSA”一样有效的,基于RSA问题的CCA2安全的方案。
随机预言机模型(Random Oracle Model,ROM)
- 随机预言机模型(Random Oracle Model,ROM)
- 为了在实践中实现CPA安全和CCA安全的公钥加密方案,引入了一个更强大的随机对象,称为随机预言机(Random Oracle Model)。
- 随机预言机(RO):一个真随机函数(H HH)对每个可能的查询回答一个随机应答。
- 一致性:如果H HH曾经在运行中为一个输入 x xx 输出 y yy,那么它一直对相同的输入输出相同的答案。
- 无人“知道”整个函数 H HH。
- 随机预言机模型(ROM):存在一个公开的RO。与此相对的,不存在RO的情况,称作标准模型。
- 方法论:在ROM中构造可证明的安全。
- 在ROM中,一个方案被设计并被证明是安全的。
- 将 H HH 用一个哈希函数 H ^ \hat{H}H^,例如 SHA256。
- 无人严格地声明随机预言机存在。
- 存在某些方案,在ROM中被证明是安全的,但无论如何将随机预言机实例化都不是安全的。
- 使用ROM,很容易实现可证明安全,同时通过正确的实例化来保持高效。
- ROM的简单例子
- 由于RO “强大的随机性”,其可以充当或构造之前学习过得密码学原语,包括为单向函数、抗碰撞哈希函数、伪随机函数等。
- 一个 RO 将 n 1 n_1n1 比特输入映射为 n 2 n_2n2 比特输出。
- RO 作为 OWF,进行如下实验:
- 选择一个RO H HH ;
- 选择一个随机的 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 yy,如果输出 x ′ x'x′: H ( x ′ ) = y H(x')=yH(x′)=y,则成功;
解释:如果敌手成功求逆,则意味着敌手“事先”询问过RO;
- RO 作为 CRHF,进行如下实验:
- 选择一个RO H HH ;
- 敌手 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 HH不是随机的,因为两个随机输出不可能相同。
- 从一个RO构造PRF :n 1 = 2 n n_1=2nn1=2n,n 2 = n n_2=nn2=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 FF不是伪随机的,则H HH也可以与真随机相区分。
- CPA安全
- 思路:PubK CPA = PrivK + (Secret Key = TDP + RO)
- 实现CPA安全的公钥加密方案,可以基于一个安全的私钥加密方案,其中私钥加密的密钥由RO得到,通过TDP传递生成密钥所用的随机量;
- 构造:
- G e n \mathsf{Gen}Gen: p k = I pk = Ipk=I, s k = t d sk = \mathsf{td}sk=td.
- E n c \mathsf{Enc}Enc: r ← { 0 , 1 } ∗ r \gets \{0,1\}^*r←{0,1}∗, 输出 ⟨ c 1 = f I ( r ) , c 2 = H ( r ) ⊕ m ⟩ \langle c_1= f_I(r), c_2 = \mathsf{H}(r)\oplus m\rangle⟨c1=fI(r),c2=H(r)⊕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), 输出 H ( r ) ⊕ c 2 \mathsf{H}(r)\oplus c_2H(r)⊕c2.
- 定理:如果 f ff 是 TDP, 并且 H HH 是 RO,则构造是 CPA 安全的。
- 解释:私钥加密方案只需要是窃听下安全,因为每次加密都是概率性的,每次私钥加密密钥都是重新生成的。该方案不是CCA安全的,因为篡改密文可以直接影响明文。
- 用RO的必要性:由于r rr的部分信息可能通过TPD泄漏,如果以一个PRG来替换掉RO,则由于种子的部分信息已知,PRG的输出也不在是伪随机的,加密方案也不再安全。
- 基于私钥加密的CCA安全
- 思路:PubK CCA = PrivK CCA + (Secret Key = TPD + RO)
- 实现CCA安全的公钥加密方案,可以基于一个CCA安全的私钥加密方案,其中私钥加密密钥由RO得到,通过TDP传递生成密钥所用的随机量;
- 构造:
- Π ′ \Pi'Π′ 是一个安全私钥加密方案。
- G e n \mathsf{Gen}Gen: p k = I pk = Ipk=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_Ik:=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 ff 是 TDP,Π ′ \Pi'Π′ 是 CCA 安全的,并且 H HH 是 RO,那么构造是 CCA 安全的。
- 解释:公钥加密方案的CCA安全性来自私钥加密方案的CCA安全性。
- 在ROM中基于TPD的CCA安全
- 思路:PubK CCA = TDP + 2 RO (一个用于加密,一个用于MAC)
- 实现CCA安全的公钥加密方案,可以通过RO来构造一个CPA安全的公钥加密方案,以明文和密文一起作为输入来生成MAC标签。
- 构造:
- G e n \mathsf{Gen}Gen: p k = I pk = Ipk=I, s k = t d sk = \mathsf{td}sk=td
- E n c \mathsf{Enc}Enc: r ← D I r \gets D_Ir←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_2m:=H(r)⊕c2。如果 G ( c 2 ∥ m ) = c 3 G(c_2\|m) = c_3G(c2∥m)=c3 输出 m mm,否则 ⊥ \perp⊥。
- 定理:如果 f ff 是 TDP,G , H G,HG,H 是 RO,那么构造是 CCA 安全的。
- 解释:其CCA安全性在于对密文的任何篡改,都无法通过MAC验证。
- 私钥加密 vs. 公钥加密
私钥加密 | 公钥加密 | |
密钥 | 双方 | 接收者 |
最弱攻击 | 窃听者 | CPA |
概率性 | CPA/CCA | 一直 |
对CPA的假设 | OWF | TDP |
对CCA的假设 | OWF | TDP+RO |
效率 | 快 | 慢 |