【现代密码学】笔记9-10.3-- 公钥(非对称加密)、混合加密理论《introduction to modern cryphtography》
【现代密码学】笔记9-10.3-- 公钥(非对称加密)、混合加密理论《introduction to modern cryphtography》
- 写在最前面
- 8.1 公钥加密理论
- 随机预言机模型(Random Oracle Model,ROM)
写在最前面
主要在 哈工大密码学课程 张宇老师课件 的基础上学习记录笔记。
内容补充:骆婷老师的PPT
《introduction to modern cryphtography》–Jonathan Katz, Yehuda Lindell(现代密码学——原理与协议)中相关章节
密码学复习笔记 这个博主好有意思
初步笔记,如有错误请指正
快速补充一些密码相关的背景知识
8.1 公钥加密理论
-
本节学习用于保护信息的完整性和真实性的消息认证码(MAC)和抗碰撞的哈希函数(CRHF)。
-
目录:公钥加密的定义和安全,陷门排列,选择密文攻击安全,在随机预言机模型中从陷门排列到公钥加密。
-
私钥密码学局限性
- 密钥分发需要通信各方在物理上会面;
- U U U个用户的密钥的数量 Θ ( 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 k k 会话密钥(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}_i Puzzlei,并且发送给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}_j Puzzlej,并且在 2 32 2^{32} 232 时间内猜测 p j p_j pj ,获得 x j , k j x_j,k_j xj,kj 并将 x j x_j xj 发送给 Alice。
-
Alice 按照 x j x_j xj查询谜题,并且使用 k j k_j kj 作为密钥。
-
敌手需要 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 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安全的? 是否是多重加密安全的?
- 完美保密的公钥加密是可能的吗?(注:不可能)
-
密钥长度比较
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 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)⟩ 之间由于私钥加密方案不可区分性也是不可区分的。最后,根据不可区分性所具有的传递性,证明混合加密方案的不可区分性。
-
混合加密范式应用
- 共享文件访问,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 I I定义了定义域(domain) D I \mathcal{D}_I DI和值域(range) D R \mathcal{D}_R DR。注:这里产生了一个具体的函数参数。
- 采样(sampling)算法: x ← S a m p ( I ) x \gets \mathsf{Samp}(I) x←Samp(I),均匀随机地产生一个 x x x。
- 确定性赋值(evaluation)算法: y : = f I ( x ) y := f_I(x) y:=fI(x)。
- 这里强调采样算法是因为后面要学习的数论难题的输入是要满足某些条件的。
- Π = ( G e n , S a m p , f ) \Pi = (\mathsf{Gen}, \mathsf{Samp}, f) Π=(Gen,Samp,f) 是一个函数组,如果:
-
陷门排列族
- 一组多项式时间算法 Π = ( 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^n 1n,输出 ( 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}_I GenI 只输出 I I I。 ( 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}_I x←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)。注:证明与单向函数部分关于核心断言的定理类似。
- 一组多项式时间算法 Π = ( 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),如果:
-
TDP例题
- 如果答案是肯定的,则需要反证法证明, f ′ f' f′若不是TDP,那么 f f f也不是;
- 如果答案是否定的,则需要给出一个有效的求逆方法。
-
从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 I I 和私钥 t d \mathsf{td} td。
- E n c \mathsf{Enc} Enc: 输入 I I I 和 m ∈ { 0 , 1 } m \in \{0,1\} m∈{0,1},选择一个 x ← D I x\gets \mathcal{D}_I x←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 \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)来构造一个公钥加密方案:
-
证明
- 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 z z是核心断言,则 A \mathcal{A} A面对的是方案 Π \Pi Π, A \mathcal{A} A成功( b ′ = b b'=b b′=b),输出的 z z z就是核心断言;
- 当 z z z不是核心断言,则 A \mathcal{A} A面对的挑战密文与 Π \Pi Π中是相反的, A \mathcal{A} A失败( b ′ ≠ b b'\neq b b′=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 c c 。
- 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 m m。
- 情景
- 用口令来登陆在线银行:试错,从银行反馈中获得信息。
- 邮件回复中包含解密出的文本的引用。
- 密文的可锻造性,例如,在拍卖中将其他人的出价翻倍。
- CCA
-
对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 pk pk 和预言机访问 D e c s k ( ⋅ ) \mathsf{Dec}_{sk}(\cdot) Decsk(⋅),输出相同长度的 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。
- 在CCA2中, A \mathcal{A} A 除了 c c c 之外还可以访问 D e c s k ( ⋅ ) \mathsf{Dec}_{sk}(\cdot) Decsk(⋅),并输出 b ′ b' b′ 。注:CCA 也被称作午餐攻击。CCA2 也被称为适应性的 CCA。
- 如果 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。
- Π \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).
- CCA/CCA2 不可区分实验 P u b K A , Π c c a ( n ) \mathsf{PubK}^{\mathsf{cca}}_{\mathcal{A},\Pi}(n) PubKA,Πcca(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 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也可以与真随机相区分。
-
-
-
CPA安全
- 思路:PubK CPA = PrivK + (Secret Key = TDP + RO)
- 实现CPA安全的公钥加密方案,可以基于一个安全的私钥加密方案,其中私钥加密的密钥由RO得到,通过TDP传递生成密钥所用的随机量;
- 构造:
- 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 ← { 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_2 H(r)⊕c2.
- 定理:如果 f f f 是 TDP, 并且 H H H 是 RO,则构造是 CPA 安全的。
- 解释:私钥加密方案只需要是窃听下安全,因为每次加密都是概率性的,每次私钥加密密钥都是重新生成的。该方案不是CCA安全的,因为篡改密文可以直接影响明文。
- 用RO的必要性:由于 r r r的部分信息可能通过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 = 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安全
- 思路: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验证。
-
私钥加密 vs. 公钥加密
私钥加密 公钥加密 密钥 双方 接收者 最弱攻击 窃听者 CPA 概率性 CPA/CCA 一直 对CPA的假设 OWF TDP 对CCA的假设 OWF TDP+RO 效率 快 慢
相关文章:

【现代密码学】笔记9-10.3-- 公钥(非对称加密)、混合加密理论《introduction to modern cryphtography》
【现代密码学】笔记9-10.3-- 公钥(非对称加密)、混合加密理论《introduction to modern cryphtography》 写在最前面8.1 公钥加密理论随机预言机模型(Random Oracle Model,ROM) 写在最前面 主要在 哈工大密码学课程 张…...

牛客-寻找第K大、LeetCode215. 数组中的第K个最大元素【中等】
文章目录 前言牛客-寻找第K大、LeetCode215. 数组中的第K个最大元素【中等】题目及类型思路思路1:大顶堆思路2:快排二分随机基准点 前言 博主所有博客文件目录索引:博客目录索引(持续更新) 牛客-寻找第K大、LeetCode215. 数组中的第K个最大元…...

MySQL的各种日志
目录 一、错误日志 二、二进制日志 1、介绍 2、作用 3、相关信息 4、日志格式 5、查看二进制文件 6、二进制日志文件删除 三、查询日志 四、慢日志 一、错误日志 记录MySQL在启动和停止时,以及服务器运行过程中发生的严重错误的相关信息,当数据库…...

rust跟我学六:虚拟机检测
图为RUST吉祥物 大家好,我是get_local_info作者带剑书生,这里用一篇文章讲解get_local_info是怎么检测是否在虚拟机里运行的。 首先,先要了解get_local_info是什么? get_local_info是一个获取linux系统信息的rust三方库,并提供一些常用功能,目前版本0.2.4。详细介绍地址:…...
测试bug分析
项目场景: 提示:这里简述项目相关背景: 例如:项目场景:示例:通过蓝牙芯片(HC-05)与手机 APP 通信,每隔 5s 传输一批传感器数据(不是很大) 问题描述 提示:这里描述项目中遇到的问题࿱…...

css-盒子等样式学习
盒子居中,继承外层盒子的宽高 兼容性(border-box)将边框收到盒子内部 初始化div 不用管box-setting content-box 还原 创建为一个类 ,让所有需要还原的类 进行继承 padding 用法表示margin上下左右边距 body 外边距&…...
数据库系统概论 第1章绪论 1.1数据库的四个基本概念
1.1.1 数据库的4个基本概念 - 数据(Data) - 数据库(Database, DB) - 数据库管理系统(DataBase Management System, DBMS) - 数据库系统(DataBase System, DMS) 1. 数据 - 数据(Data)是数据库中存储…...
使用Linux搭建svn
1.安装 Apache 和 Subversion 软件包 sudo yum install httpd subversion mod_dav_svn2.启动 Apache 服务 sudo systemctl start httpd3.设置 Apache 服务开机自启动 sudo systemctl enable httpd4.创建/svn 目录 sudo mkdir /svn5.设置 /svn 目录的权限: sudo…...

Kafka的安装、管理和配置
Kafka的安装、管理和配置 1.Kafka安装 官网: https://kafka.apache.org/downloads 下载安装包,我这里下载的是https://archive.apache.org/dist/kafka/3.3.1/kafka_2.13-3.3.1.tgz Kafka是Java生态圈下的一员,用Scala编写,运行在Java虚拟机上…...

某银行主机安全运营体系建设实践
随着商业银行业务的发展,主机规模持续增长,给安全团队运营工作带来极大挑战,传统的运营手段已经无法适应业务规模的快速发展,主要体现在主机资产数量多、类型复杂,安全团队难以对全量资产进行及时有效的梳理、管理&…...
虚拟化技术、Docker、K8s笔记总结
一、虚拟化技术 是一种将物理资源(如服务器、存储设备、网络设备等)抽象、转换和分割成多个逻辑资源的技术。通过虚拟化技术,用户可以在单个物理设备上运行多个相互独立的虚拟环境,从而提高资源的利用率、降低运维成本和提高系统…...

基于springboot+vue的在线拍卖系统(前后端分离)
博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…...
【征服redis3】一文征服redis的jedis客户端
使用数据库的时候,我们可以用JDBC来实现mysql数据库与java程序之间的通信,为了提高通信效率,我们有了数据库连接池比如druid等等。而我们想通过Java程序控制redis,同样可以借助一些工具来实现,这就是redis客户端&#…...
Python如何操作RabbitMQ实现direct关键字发布订阅模式?有录播直播私教课视频教程
direct关键字发布订阅模式 基本用法 发布者 import json from rabbitmq import pika import rabbitmq# 建立连接 credentials rabbitmq.PlainCredentials(zhangdapeng,zhangdapeng520, ) # mq用户名和密码 connection_target rabbitmq.ConnectionParameters(host127.0.0.…...
如何应用数据图表了解家里的 Unifi 网络状况?
1. 前言 自从之前写了《【让 IT 更简单】使用 Ubiquiti 全家桶对朋友家进行网络改造》 《【Rethinking IT】如何结合 Unifi 和 MikroTik 设备打造家庭网络》两篇文章后,相信给各位正在用 Unifi 或者打算使用 Unifi 的朋友应该有所帮助。 那么,今天我就…...

新版K8s:v1.28拉取Harbor仓库镜像以及本地镜像(docker弃用改用containerd,纯纯踩坑)
目录 一、项目概述二、环境三、项目样式Harborkuboard运行样式 四、核心点Harbor安装config.toml文件修改(containerd)ctr、nerdctl相关命令kuboard工作负载 五、总结 一、项目概述 使用Kuboard作为k8s集群的管理平台,Harbor作为镜像仓库,拉取Harbor镜像…...

Unity URP切换品质和Feature开关的性能问题
现在对我的项目进行安卓端发布,需要切换品质和一些Feature开关。 我是这样做的。 划分品质 首先Renerer分为2个Android和PC,图中其他不用参考。 每个副本的URP Asset分为pc和android,例如图中的 hall和hall_android。 我们可以看到hall用的…...
jmeter解决返回unicode编辑
一般乱码有两种方法来解决: 1、修改配置文件jmeter.properties中默认编码格式ISO-8859-1(不支持中文),修改为utf-8 sampleresult.default.encoding utf-82、添加BeanShell PostProcessor加入 prev.setDataEncoding("utf-8")3、还有一种返回…...

C# 基础入门
第二章 C# 语法基础 2-1 C# 中的关键字 关键字,是一些被C#规定了用途的重要单词。 在Visual Studio的开发环境中,关键字被标识为蓝色,下图代码中,用红方框圈出的单词就是关键字。 关键字 class ,这个关键字的用途是…...
PHP 支付宝(单笔转账到银行账户接口)
alipay.fund.trans.tobank.transfer(单笔转账到银行账户接口) 小程序文档 - 支付宝文档中心 一、下载支付宝SDK,现有版本v1、v2、v3 https://github.com/alipay/alipay-sdk-php-all github 慢的话,DNS 直达即可 140.82.112.3 github.com 【host文…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...

《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...

PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...