安全证明前置知识
Random Oracle (随机预言机)
Random Oracle 就是一个理想化的Hash,或者说一部预言机(简单说像是理论的黑箱),对任何输入都回传一个真正均匀随机的输出,不过对相同的输入,该预言机每次都会用同一方法输出(即 如果重复查询,则每次提交查询时,其响应方式都相同。)换句话说,随机预言机是一个将所有可能输入与输出作随机映射的函数。
通常可以视为一张表,两列。一列是用来写输入值x,一列用来记录x对应的Hash,也就是**H(x)**初始为空。此时,该表为空表。
-
Random Oracle 的行为过程:当输入为x的时候:
- 如果x和H(x)已经在表里记录过,就输出H(x)
- 如果没有关于x的记录,则Random Oracle 完全随机地在值域中选取一个0,1字符串(或者从其他希望映射到的元素集合中完全随机地选取)当作H(x)。讲(H(x),x)记录在表里,然后输出H(x)。
-
重要安全性特征
-
对于Random Oracle,把一个未曾记录在表里的新元素x映射到目标集合里特定元素E的概率始终为
1 E l e m e n t s I n R a n g e \frac{1}{ElementsInRange} ElementsInRange1
比如,要用Random Oracle来模拟
{ 0 , 1 } ∗ ⟶ { 0 , 1 } k \{0,1\}^*\longrightarrow\{0,1\}^{k} {0,1}∗⟶{0,1}k
那么把x映射到该特定的01字符串**H(x)**的概率是
1 2 k \frac{1}{2^{k}} 2k1 -
如果x未曾记录在表里,则Random Oracle相当于一个完全随机地函数。直观上来说,Random Oracle自己都不会知道x会被映射到那个值。
-
由2可知,任何询问(interrogation)Random Oracle的人,即使拿到了除x之外所有的输出,也无法确定x会被映射到那个值。
-
-
随机预言机模型——完美哈希函数 具有以下性质
- 一致性:相同的输入必有相同的输出
- 可计算性:输出的计算可在多项式时间内完成
- 均匀分布性:预言机的输出在在取值空间内均匀分布,无碰撞
Forking lemma(分叉引理)
-
为什么使用分叉引理
- 证明数字签名方案的安全性常用的一种模型是随机预言模型ROM。在随机预言模型中,数字签名方案使用的Hash函数至少有一个需要被看做随机预言机。
- 在这种模型下,证明数字签名方案安全性的一个重要技术就是随机预言机重放技术,也就是通过重放Hash值来破解一个困难问题。该技术的理论依据就是著名的分叉引理(Forking Lemma)
-
什么是分叉引理
-
令Qi代表敌手A发送的第i次随机预言询问,hi表示挑战者C对第i次随机预言询问所返回的结果。分叉引理的示意图如下:
在安全性证明中,挑战者C为了能利用敌手破解一个困难问题,它需要运行两次挑战过程,使得第二次挑战过程的输出结果和第一次的输出结果在开始一段时间内都是相同的,但是在某处之后就会发生改变,从而挑战者C据此能够破解一个困难问题,如离散对数问题。
-
一段时间内都是相同的,但是在某处之后就会发生改变,从而挑战者C据此能够破解一个困难问题,如离散对数问题。