密码学——可验证随机函数

可验证随机函数(Verifiable Random Function,VRF)是一种将输入映射为可验证的伪随机输出的加密方案。首先,VRF所得是一个随机数,其次由于包含生成者的私钥签名,验证者可以通过公钥确定随机数的合法性。VRF具有三大特性:可验证性、唯一性和随机性。

一、VRF算法主要流程

  • VRF哈希:相同的输入和 s k sk sk,输出相同
    • b e t a = V R F − h a s h ( s k , a l p h a ) beta = VRF-hash(sk, alpha) beta=VRFhash(sk,alpha)
      +VRF证明生成
    • p i = V R F − p r o v e ( s k , a l p h a ) pi = VRF-prove(sk, alpha) pi=VRFprove(sk,alpha)
  • VRF证明转哈希
    • b e t a = V R F − p r o o f 2 H a s h ( p i ) beta = VRF-proof_2Hash(pi) beta=VRFproof2Hash(pi)
    • V R F − h a s h ( s k , a l p h a ) = = V R F − p r o o f 2 H a s h ( p i ) VRF-hash(sk, alpha) == VRF-proof_2Hash(pi) VRFhash(sk,alpha)==VRFproof2Hash(pi)
  • VRF随机数验证
    • V R F — v e r i f y ( P K , a l p h a , p i ) VRF—verify(PK, alpha, pi) VRFverify(PK,alpha,pi)

二、基于椭圆曲线的VRF实现

2.1 公私钥生成算法

  • 选择一条椭圆曲线 E p ( a , b ) E_{p}(a,b) Ep(a,b) 和基点 G G G
  • 选择私钥 d A d_{A} dA d A < n d_{A}dA<n n n n为该 G G G的阶),利用基点 G G G计算公钥 Q A = d A ⋅ G Q_{A}=d_{A} · G QA=dAG
  • q q q为基点G的大素数阶

2.2 VRF证明生成算法

  • 输入:公钥 Q A Q_A QA;私钥 d A d_A dA;输入 a l p h a alpha alpha
  • 输出: V R F VRF VRF证明
  • 步骤:
    • 将输入 a l p h a alpha alpha转化为16进制数h
    • 计算 g a m m a = h ∗ d A gamma=h*d_A gamma=hdA
    • 选取随机数 k ∈ [ 0 , q − 1 ] k\in[0,q-1] k[0,q1]
    • 计算 c = h a s h ( G , h , Q A , g a m m a , G ∗ k , h ∗ k ) c=hash(G,h,Q_A,gamma, G*k, h*k) c=hash(G,h,QA,gamma,Gk,hk)
    • s = k − c ∗ s k s=k-c*sk s=kcsk
    • p i = { g a m m a , c , s } pi=\{gamma, c,s\} pi={gamma,c,s}

2.3 VRF随机数验证算法

  • 输入:公钥 Q A Q_A QA;VRF证明 p i pi pi;VRF输入 a l p h a alpha alpha
  • 输出: 1 1 1 0 0 0
  • 步骤
    • 解码 p i = { g a m m a , c , s } pi=\{gamma, c,s\} pi={gamma,c,s}
    • u = Q A ∗ c + G ∗ s = d A ∗ G ∗ c + G ∗ s = s k ∗ c ∗ G + G ∗ ( k − d A ∗ c ) = k ∗ G u=Q_A *c + G * s= d_A * G * c + G * s = sk * c * G + G * (k-d_A*c) = k * G u=QAc+Gs=dAGc+Gs=skcG+G(kdAc)=kG
    • h = h a s h ( Q A , a l p h a ) h=hash(Q_A, alpha) h=hash(QA,alpha)
    • v = g m m a ∗ c + h ∗ s = h ∗ d A ∗ c + h ∗ ( k − d A ∗ c ) = h ∗ k v=gmma*c+h*s = h*d_A * c + h * (k-d_A*c)=h*k v=gmmac+hs=hdAc+h(kdAc)=hk
    • c ′ = h a s h ( G , h , Q A , g a m m a , u , v ) c'=hash(G,h,Q_A,gamma, u, v) c=hash(G,h,QA,gamma,u,v)
    • 判断等式 c ′ = c c'=c c=c是否成立,成立输出1否则0。

三、参考来源

Truora预言机随机数算法

你可能感兴趣的:(算法,密码学)