VRF proof
术语说明
SK: 私钥
PK: 公钥
M:输入值
R:哈希输出
P:证明
函数
证明人根据输入M和私钥计算出唯一的哈希值R
R = VRF_Hash(SK, M)
证明人根据输入M和私钥计算出唯一的证明P
P = VRF_Proof(SK, M)
验证者将证明转换成哈希值
R = VRF_P2H ( P )
即 VRF_Hash(SK, M) == VRF_P2H(VRF_Proof(SK, M))
验证者校验
True/False = VRF_verify(PK, M, P)
特性
唯一性:对于特定的一对公私钥,任意一个输入都有并且只有一对 R和P
抗碰撞:即使知道私钥也无法构造2个不同输入获得同样的R和P输出
随机性:无私钥者无法通过输入值来判断输出R的值的范围
一种应用
简化的VRF Proof 抽签流程 – 一种POS共识。
权重值w作为节点的抽签次数。
输入值M是给定的,seed+上一轮的抽签信息等。
权重为1的节点,计算一次 VRF_Hash(SK, M) 和VRF_Proof(SK, M),得到R和P。
广播R和P,所有节点的的R值对比,校验各个节点的P R M,R最接近某个固定值的即为出块节点。
节点不能通过随意设定R值企图接近某个固定值,也不能尝试不同的M值去试图接近它。
对于权重节点为w的节点,输入值M’ = Next(M),得到w个M,计算出 w个R 和 P,再参与验证和对比。即权重越大,抽签次数越多,中签概率越大。
先公布R,选出区块,再发布区块的时候公布P,同时完成校验和出块,避免攻击。
小结
VRF证明,本质上是对R的证明。
证明我和R的生成关系,并不能证明我和随机数的生成关系。
参考
VRF 密码学抽签原理及其在 Algorand 中的应用
https://blog.iyouchain.com/2019/06/28/algo-vrf-cryto-sortition-analysis/