VRF(Verifiable Random Functions)算法是MIT教授Micali于1999年提出的一个可验证的随机函数。针对的主要问题是,在传统的随机函数中,如果要验证就需要暴露随机函数的种子,举个简单的例子就是,一个带seed的hash函数。如果种子暴露了,那么别人就可以计算所有点上的值,而不只是你想给别人看的那一个点x。VRF就是提供了这样一个功能,在不暴露种子的情况下,提供一个可验证的随机函数。可以理解为,一个hash函数,不告诉我的种子,但是别人可以验证我的输出确实是输入x的hash。
在接下来的内容中,简单的分析,如何通过RSA来构建一个VRF的。但是不会涉及任何安全证明,只有构建过程。 [ 原文地址]
1、基本观点
- 如何从VUF( Verifiable Unpredictable Function)构建VRF
- 如何构建一个VUF
2、从VUF到VRF
2.1 From Unpredictability to Pseudorandomness
Proposition 1 (from VUF to VRF)
If there is a VUF with input length , output length , and security , then, for any , there is a VRF with input length , output length , and security.
假设是一个VUF,我们可以从中构建出VRF。这里面,是一个均匀选择并被放在公钥中的随机数。 中包含两个值,一个是一个,使得,另一个是关于的证明。
如何证明他是随机的,并且安全参数的界再说。
2.2 Increasing the input length
Proposition 2 (increasing the input length)
If there is a VRF with input length , output length 1, and security , then there is a VRF with unrestricted input length, output length , and security at least.
这一步将将在2.1中的固定输入转化为任意输入。
其中,在2.1中定义的接受一个长度的输入,输出一个的值。
对于任意长的输入,有,其中有。最后的输出为。这里面有个问题,如果一个输入x是另一个输入y的前缀的话,那么你知道了y的情况,你就知道x的了。为了避免这种事,使用了prefix-free encodingof strings。这个东西的好处就是任何两个不同的string不会互为前缀。
如何构造一个VUF
Proposition 3 (RSA-based VUFs)
Let and be any functions (both computable in time ). Under the , there is a VUF with input length , output length , and security .
由输入a-bit长的产生一个-bit的素数。
这里面用[CMS99]
中的方法。这里面有个概率函数,其作用是将的输入映射到一个固定长度为(k+1)-bit的随机数上。然后就是中的第一个素数。这里面我们还需要一个概率函数来确定是否一个素数。这里用的是[SS77].
RSA生成系统
产生RSA需要的公私钥信息。
VUF函数使用过程
输入一个公私钥对和输入信息,先由x产生,然后计算,
VUF验证过程
输入一个公钥,一个点,一个加密后的值,先由x计算出,然后需要比大并且是一个素数。之后检查。都通过了,就是正确的。