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 a(k), output length b(k), and security s(k), then, for any a(k)a(k), there is a VRF with input length a(k), output length b(k)=1, and securitys(k)=s(k)1/3=(poly(k)×2a(k)).

假设f(.)是一个VUF,我们可以从f(.)中构建出VRFf(.)=<f(.),r>。这里面,r是一个均匀选择并被放在公钥中的随机数。f(x)=δ 中包含两个值,一个是一个v,使得δ=<v,r>,另一个是关于f(x)=v的证明。
如何证明他是随机的,并且安全参数的界再说。

2.2 Increasing the input length

Proposition 2 (increasing the input length)
If there is a VRF with input length a(k), output length 1, and security s(k), then there is a VRF with unrestricted input length, output length b(k)=1, and security at leastmins(k)1/5,2a(k)/5/poly(k).
这一步将将在2.1中的固定输入转化为任意输入。Algorand 中 VRF算法简析
其中,在2.1中定义的f(x)接受一个a长度的输入,输出一个a1的值。
对于任意长的输入x=(x1,x2,...,xn),有(y0,y1,...,yn)y0=0a11,其中有yi=f(yi1xi)。最后的输出为yn。这里面有个问题,如果一个输入x是另一个输入y的前缀的话,那么你知道了y的情况,你就知道x的了。为了避免这种事,使用了prefix-free encodingof strings。这个东西的好处就是任何两个不同的string不会互为前缀。

如何构造一个VUF

Proposition 3 (RSA-based VUFs)
Let a(k)poly(k) and s(k) be any functions (both computable in time poly(k)). Under the RSA0s(k)HardnessAssumption, there is a VUF with input length a(k), output length b(k)=1, and security s(k)=s(k)/2a(k)×poly(k).

由输入a-bit长的x产生一个(k+1)-bit的素数px

这里面用[CMS99]

中的方法。这里面有个概率函数Q,其作用是将{0,1}a×{1,...,2k2}的输入映射到一个固定长度为(k+1)-bit的随机数上。然后px就是Q(x;1),Q(x;2),...,Q(x;2k2)中的第一个素数。这里面我们还需要一个概率函数来确定是否一个素数。这里用的是[SS77].
Algorand 中 VRF算法简析

RSA生成系统

产生RSA需要的公私钥信息。
Algorand 中 VRF算法简析

Algorand 中 VRF算法简析

VUF函数使用过程

Algorand 中 VRF算法简析
输入一个公私钥对和输入信息x{0,1}a,先由x产生px,然后计算v=r1/Px(mod m),

VUF验证过程

Algorand 中 VRF算法简析
输入一个公钥,一个点x,一个加密后的值v,先由x计算出px,然后px需要比m大并且是一个素数。之后检查vZm。都通过了,就是正确的。

相关文章:

  • 2021-12-26
  • 2021-11-24
  • 2021-06-03
  • 2022-12-23
  • 2022-12-23
  • 2021-06-15
  • 2021-07-06
  • 2021-10-02
猜你喜欢
  • 2021-11-13
  • 2021-04-02
  • 2021-04-01
  • 2022-01-21
  • 2021-05-06
相关资源
相似解决方案