文章来源区块链技术公众号“blocksight”,原文欢迎关注!
写在前面
上一节说了VRF(随机可验证函数)概述,由于VRF是与公钥密码学相结合的,自然少不了最常见的公钥密码学体制RSA和椭圆曲线EC。
本文开始讲基于RSA的VRF实现,关于RSA算法的知识如果不熟悉,可先参考文末“相关阅读”部分。
RSA-FDH-VRF
基于RSA实现的VRF记为RSA-FDH-VRF,满足可信唯一性,可信抗碰撞性和全伪随机性(trusted uniqueness", "trusted collision resistance", "full pseudorandomness"),关于些安全性要求,上一节均有所介绍。
VRF使用RSA签名,在输入alpha上计算证明P。RSA签名验证用于验证证明的正确性。VRF哈希输出R,只需使用所选哈希算法对证明P进行散列即可得到。
符号约定
(n, e) - RSA 公钥
K - RSA 私钥
k - RSA 模 n字节长度 (k < 2^32)
I2OSP - 非负整数转成字符串
OS2IP - 字符串转化为非负整数
RSASP1 - RSA 签名算法
RSAVP1 - RSA 验证签名算法
MGF1 - 掩码生成函数
这里着重说一下掩码生成函数的逻辑。
MGF1是基于散列函数的掩码生成函数,在RSA最优非对称加密填充一文中,提到的公共单向函数G其实就是掩码生成函数。这里详细讲一下其过程。
方法: MGF1 (mgfSeed, maskLen)
参数:
mgfSeed 掩码生成操作的目标字符串
maskLen 生成掩码长度,最多