现代密码学【8】之基于随机预言机模型的公钥密码系统

文章目录

基于随机预言机模型的公钥密码系统

随机预言模型(Random Oracle Model)

  • 随机预言模型:将"预言机"比作一个黑盒子,接收二进制串输入,返回二进制串输出,内部工作机制未知且高深莫测。每个人(包括诚实方和敌手)都可以与这个盒子交互。
  • 交互过程:"向预言机问询x":输入二进制串x,得到输出y。所有问询都被假设为秘密的,没有其他人知道x,甚至不知道有人问询过预言机。
  • 随机预言模型重要特性
    • 一致性保证:相同输入x总是得到相同输出y。
    • 函数表示 :可以将预言机看作函数H,即 H ( x ) = y H(x) = y H(x)=y。
    • 保密性:除了预言机本身,没有人知道整个函数H。
    • 已知信息有限:最多只知道已问询过的输入输出对。

随机函数的预先定义法

  1. 函数表示
    • 将n比特输入映射到ℓ(n)比特输出的函数H可看作一张表格
    • 表格显示每个可能输入x∈{0,1}ⁿ对应的输出值H(x)∈{0,1}^(ℓ(n))
  2. 函数数量
    • 存在 U = 2 ( ℓ ( n ) ⋅ 2 n ) U = 2^(ℓ(n)·2ⁿ) U=2(ℓ(n)⋅2n)个不同的函数
    • 每个函数可用长度为 2 n ⋅ ℓ ( n ) 2ⁿ·ℓ(n) 2n⋅ℓ(n)比特的字符串表示
  3. 随机选择
    • 随机均匀选择函数H,相当于从U个可能性中均匀选择
    • 在随机预言机模型中,这相当于初始化预言机并依据H回答
  4. 实际限制
    • 存储H的字符串或表格需要指数级比特数
    • 即使中等大小的输入也不可行

随机函数的实时生成法

  1. 实时生成机制:不预先定义整个函数,而是"实时"生成输出。使用 ( x i , y i ) {(xᵢ, yᵢ)} (xi,yi)数对的表格来定义函数,表格初始为空。
  2. 问询处理流程:当收到输入x的问询时,
  • 检查表格中是否存在 ( x i , y i ) (xᵢ, yᵢ) (xi,yi)满足 x = x i x = x_i x=xi
  • 如果存在,返回对应的 y i y_i yi
  • 如果不存在,随机选择 y ∈ 0 , 1 ( ℓ ( n ) ) y∈{0,1}^(ℓ(n)) y∈0,1(ℓ(n))作为回答,并将 ( x , y ) (x, y) (x,y)存入表格
  1. 等价性
    • 与"固定"函数H的构想等价
    • 从交互角度看完全相同
    • 当H定义在{0,1}*的无限域上时,实时选择输出值更简单。

基于随机预言模型的RSA加密

基于随机预言模型的RSA加密的加密方案(重点)

构造方案 13.1

令GenRSA如教材定义, ℓ ( n ) \ell(n) ℓ(n)为一个任意多项式。令 H H H为一个函数,对任意 N N N,其定义域为 Z N ∗ \mathbb{Z}_N^* ZN∗,对任意 n n n,其值被定义在 { 0 , 1 } ℓ ( n ) \{0,1\}^{\ell(n)} {0,1}ℓ(n)中。构造一个公钥加密方案如下:

  • Gen :输入 1 n 1^n 1n,运行GenRSA( 1 n 1^n 1n),计算 ⟨ N , e , d ⟩ \langle N,e,d\rangle ⟨N,e,d⟩。公钥为 ⟨ N , e ⟩ \langle N,e\rangle ⟨N,e⟩,私钥为 ⟨ N , d ⟩ \langle N,d\rangle ⟨N,d⟩。

  • Enc :输入一个公钥 ⟨ N , e ⟩ \langle N,e\rangle ⟨N,e⟩,以及一个消息 m ∈ { 0 , 1 } ℓ ( n ) m \in \{0,1\}^{\ell(n)} m∈{0,1}ℓ(n),选择一个随机 r ← Z N ∗ r \leftarrow \mathbb{Z}_N^* r←ZN∗,输出密文 ⟨ [ r e   m o d   N ] , H ( r ) ⊕ m ⟩ \langle [r^e \bmod N], H(r) \oplus m\rangle ⟨[remodN],H(r)⊕m⟩。

  • Dec :输入一个私钥 ⟨ N , d ⟩ \langle N,d\rangle ⟨N,d⟩,以及一个密文 ⟨ c 1 , c 2 ⟩ \langle c_1,c_2\rangle ⟨c1,c2⟩,计算 r : = [ c 1 d   m o d   N ] r := [c_1^d \bmod N] r:=[c1dmodN],然后输出消息 H ( r ) ⊕ c 2 H(r) \oplus c_2 H(r)⊕c2。


安全性分析

假设RSA难题与GenRSA相关是困难的,我们可以直观地认为在随机预言机模型下,该方案是CPA安全的:

  1. 随机选择r :由于r是随机选择的,对于窃听敌手来说,从 c 1 = [ r e   m o d   N ] c_1 = [r^e \bmod N] c1=[remodN]中恢复r是不可行的。
  2. 敌手无法获取H® :因此,敌手不会向预言机询问r,从敌手角度看, H ( r ) H(r) H(r)的值是完全随机的。
  3. "一次一密"加密 :而 c 2 c_2 c2正好是"一次一密"类型的加密,用随机值 H ( r ) H(r) H(r)对m进行加密,所以敌手不会得到关于m的信息。

上述直觉需要扩展为正式证明,且证明过程很大程度上依赖于H是随机预言机这一事实:

  • 如果H被替换为伪随机函数发生器G,证明将无效。原因在于:RSA假设仅意味着敌手无法从 [ r e   m o d   N ] [r^e \bmod N] [remodN]中恢复出r,但未提及敌手可能恢复出关于r的部分信息。举个例子:敌手可能计算出r的一半比特,在这种情况下,不再声称G®是伪随机的(因为G®的伪随机性要求r是完全随机的)。
  • 但是,当H是随机预言机时,关于r的部分信息泄露是无关紧要的------只要r没有被直接向预言机询问过, H ( r ) H(r) H(r)就是随机的。

定理 13.2 如果RSA难题与GenRSA相关是困难的,并且 H H H为一个随机预言机。构造方案13.1具有在选择明文攻击下不可区分加密。

证明 令 Π \Pi Π表示构造方案13.1。先证明 Π \Pi Π在窃听者存在的情况下,具备不可区分加密。 Π \Pi Π是CPA安全的。

令 A A A为概率多项式时间敌手,定义
ε ( n ) = def Pr ⁡ [ PubK A , Π eav ( n ) = 1 ] \varepsilon(n) \stackrel{\text{def}}{=} \Pr[\text{PubK}^{\text{eav}}_{A,\Pi}(n) = 1] ε(n)=defPr[PubKA,Πeav(n)=1]

实验 PubK A , Π eav ( n ) \text{PubK}^{\text{eav}}_{A,\Pi}(n) PubKA,Πeav(n)的步骤如下:

  1. 随机选择一个函数 H H H。
  2. 运行GenRSA( 1 n 1^n 1n)来生成 ⟨ N , e , d ⟩ \langle N,e,d\rangle ⟨N,e,d⟩。 A A A被指定 p k = ⟨ N , e ⟩ pk = \langle N,e\rangle pk=⟨N,e⟩,可问询 H ( ⋅ ) H(\cdot) H(⋅)。最终, A A A输出两个消息 m 0 , m 1 ∈ { 0 , 1 } ℓ ( n ) m_0,m_1 \in \{0,1\}^{\ell(n)} m0,m1∈{0,1}ℓ(n)。
  3. 选择一个随机比特 b ← { 0 , 1 } b \leftarrow \{0,1\} b←{0,1}以及一个随机 r ← Z N ∗ r \leftarrow \mathbb{Z}_N^* r←ZN∗, A A A被指定密文 ⟨ [ r e   m o d   N ] , H ( r ) ⊕ m b ⟩ \langle [r^e \bmod N], H(r) \oplus m_b\rangle ⟨[remodN],H(r)⊕mb⟩。敌手可继续问询 H ( ⋅ ) H(\cdot) H(⋅)。
  4. 则 A A A输出一个比特 b ′ b' b′。如果 b ′ = b b' = b b′=b,该实验的输出被定义为1,否则为0。
  • 在实验 PubK A , Π eav ( n ) \text{PubK}^{\text{eav}}{A,\Pi}(n) PubKA,Πeav(n)执行中,令Query表示事件:在执行期间, A A A向随机预言机 H H H问询过 r r r(其中 r r r是用来生成挑战密文的值)。使用Success表示事件 PubK A , Π eav ( n ) = 1 \text{PubK}^{\text{eav}}{A,\Pi}(n) = 1 PubKA,Πeav(n)=1。那么
    Pr ⁡ [ Success ] = Pr ⁡ [ Success ∧ Query ‾ ] + Pr ⁡ [ Success ∧ Query ] ⩽ Pr ⁡ [ Success ∧ Query ‾ ] + Pr ⁡ [ Query ] \begin{align} \notag \Pr[\text{Success}] &= \Pr[\text{Success} \land \overline{\text{Query}}] + \Pr[\text{Success} \land \text{Query}] & \\ \notag &\leqslant \Pr[\text{Success} \land \overline{\text{Query}}] + \Pr[\text{Query}] & \end{align} Pr[Success]=Pr[Success∧Query]+Pr[Success∧Query]⩽Pr[Success∧Query]+Pr[Query]
    其中所有概率都来源于在实验 PubK A , Π eav ( n ) \text{PubK}^{\text{eav}}_{A,\Pi}(n) PubKA,Πeav(n)使用到的随机性。 Pr ⁡ [ Success ∧ Query ‾ ] ⩽ 1 2 \Pr[\text{Success} \land \overline{\text{Query}}] \leqslant \frac{1}{2} Pr[Success∧Query]⩽21,以及 Pr ⁡ [ Query ] \Pr[\text{Query}] Pr[Query]是可忽略的。

声称 13.3

如果 H H H是作为一个随机预言机而被模拟的,那么
Pr ⁡ [ Success ∧ Query ‾ ] ⩽ 1 2 \Pr[\text{Success} \land \overline{\text{Query}}] \leqslant \frac{1}{2} Pr[Success∧Query]⩽21

如果 Pr ⁡ [ Query ] = 0 \Pr[\text{Query}] = 0 Pr[Query]=0,那么该声明是很显然的。否则,有
Pr ⁡ [ Success ] = Pr ⁡ [ Success ∧ Query ‾ ] + Pr ⁡ [ Success ∧ Query ] ⩽ Pr ⁡ [ Success ∧ Query ‾ ] + Pr ⁡ [ Query ] \begin{align} \notag \Pr[\text{Success}] &= \Pr[\text{Success} \land \overline{\text{Query}}] + \Pr[\text{Success} \land \text{Query}] & \\ \notag &\leqslant \Pr[\text{Success} \land \overline{\text{Query}}] + \Pr[\text{Query}] \\ \end{align} Pr[Success]=Pr[Success∧Query]+Pr[Success∧Query]⩽Pr[Success∧Query]+Pr[Query]

声称 13.4

如果 RSA 难题与GenRSA相关是困难的,并且H为一个随机预言机,那么 P r [ Q u e r y ] Pr[Query] Pr[Query]是可忽略的。

相关推荐
一个平凡而乐于分享的小比特1 天前
OpenSSL 全面解析:从入门到精通
密码学·openssl·隐私安全
咸鱼菲菲2 天前
KhPRF介绍
安全·密码学·同态加密
一个平凡而乐于分享的小比特2 天前
公钥与私钥完全解析:数字世界的钥匙与锁
操作系统·密码学·公钥与私钥·隐私安全
print_Hyon2 天前
【CTF-密码学-RSA】计算私钥和公钥进行加密和解密
密码学·ctf
小李独爱秋3 天前
计算机网络经典问题透视:常规密钥体制与公钥体制最主要的区别是什么?—— 一文带你从“钥匙”看懂现代密码学核心
服务器·网络·tcp/ip·计算机网络·密码学
淮上安子骞3 天前
sage10.8源码部署
服务器·密码学·ctf·本地部署·sage
seasonsyy3 天前
密码学领域的“三大顶会” & IACR网站简介
人工智能·密码学
じ☆冷颜〃3 天前
基于多数据结构融合的密码学性能增强框架
数据结构·经验分享·笔记·python·密码学
岁岁的O泡奶4 天前
NSSCTF_crypto_[SWPUCTF 2023 秋季新生赛]dpdp
经验分享·python·算法·密码学