YOUChain Research
YOUChain 研究团队,成员毕业于国内外顶级名校,有长期的工业界经验。我们持续跟踪的区块链学界和业界的前沿发展,致力于深入区块链本质,推动学术和技术发展。团队诚邀加密、算法、区块链、工程人才加入!
1 VRF介绍
随着Algorand项目的发起,原来越多的人对其所应用到的密码学抽签技术产生了兴趣并探索相关的应用。目前,随着Algorand项目的主网上线,该技术也开始了接受大规模的正式实践检验,我们拭目以待。
目前虽然国内已经有大量文章对VRF技术进行了一些介绍,但是目前看都不够全面深入。因此我们「YOUChainResarch」打算重新梳理,希望能尽可能全面地介绍该技术,作为我们「Algorand 技术解析系列」系列文章的开篇,与大家分享及交流探讨。
1.1 简介
VRF全称为 Verifiable Random Functions,翻译为“可验证随机函数”,由Silvio Micali,Michael Rabiny,Salil Vadhan于1999年提出,是一种基于公私钥的密码学哈希函数。(关注过Algorand的人一眼就可以看出来,第一作者正是Algorand创始人Silvio Micali)。只有拥有VRF私钥才能计算哈希,但任何拥有对应公钥的人都可以验证该哈希的正确性。
VRF的一个关键应用就是,提供对存储在基于散列的数据结构中的数据的隐私保护,防止离线枚举(例如字典攻击)。在这种应用中,证明人持有VRF私钥,并使用VRF哈希在输入数据上构造基于散列的数据结构。由于VRF的性质,只有证明人才能回答关于数据结构中是否存储了某些数据的查询。任何知道VRF公钥的人都可以验证证明人正确地回答了查询。但是,不能对数据结构中存储的数据进行脱机推断(即不查询验证器的推断)。
简单来说,可验证随机函数可以基于私钥 对一个输入,产生一个唯一的固定长度的输出,以及一个对应的证明。其他人在知道了公钥、输出、证明 之后就一定能验证这三者的正确性,并且也只有在知道了这三者之后才能验证其正确性。
上面提及的这个过程以及相关的数据,是符合若干安全特性的,接下来会具体描述。
在VRF论文发出来后,到目前已有不同的团队(个人、组织、机构)做出了不同的实现。而IETF(Internet Engineering Task Force)目前正在为VRF的实现制定标准,目前还处于草案阶段,并于 2019-2-8已发布第四版草案。链接见文后参考部分。
1.2 基本算法表述
从一个概要逻辑来说,VRF总共涉及到几个相关函数,联合起来完成一个证明和验证的闭环。
首先简单定义一下标识符:
SK:VRF的私钥
PK:VRF的公钥
alpha: VRF的输入,将对其进行哈希
beta: VRF哈希输出
pi: VRF证明
Prover: 持有VRF公私钥的人就可以称为证明人
Verifier: 只持有VRF公钥的人,可以称为验证人
VRF的基本算法,是很简单清晰的,如下:
前提是有一个秘钥对生成算法,来生成VRF需要用到的公私钥对;
证明人计算输入的哈希:beta = VRF_hash(SK,alpha); > 注意,VRF_hash算法是确定性的,对于相同的私钥及相同的输入,必定生成一个相同的输出。
证明人还需要用私钥及输入计算一个证明: pi = VRF_prove(SK, alpha)
验证人通过对应的公钥可以验证结果的正确性:VRF_verify(PK, alpha, pi)
实际实现中,上面2和3可以放在一起,得到如 beta,pi = VRF(SK,alpha) 这样的函数。
交流群
受限于笔者的学识和能力,文章内容难免有纰漏之处。技术探讨,请添加加微信 kvdoth 备注「YOUChain 技术交流」,进群交流。
公众号:
欢迎添加「有令」公众号,了解项目最新进展和技术分享。YOUChain Research
YOUChain 研究团队,成员毕业于国内外顶级名校,有长期的工业界经验。我们持续跟踪的区块链学界和业界的前沿发展,致力于深入区块链本质,推动学术和技术发展。团队诚邀加密、算法、区块链、工程人才加入!
1 VRF介绍
随着Algorand项目的发起,原来越多的人对其所应用到的密码学抽签技术产生了兴趣并探索相关的应用。目前,随着Algorand项目的主网上线,该技术也开始了接受大规模的正式实践检验,我们拭目以待。
目前虽然国内已经有大量文章对VRF技术进行了一些介绍,但是目前看都不够全面深入。因此我们「YOUChainResarch」打算重新梳理,希望能尽可能全面地介绍该技术,作为我们「Algorand 技术解析系列」系列文章的开篇,与大家分享及交流探讨。
1.1 简介
VRF全称为 Verifiable Random Functions,翻译为“可验证随机函数”,由Silvio Micali,Michael Rabiny,Salil Vadhan于1999年提出,是一种基于公私钥的密码学哈希函数。(关注过Algorand的人一眼就可以看出来,第一作者正是Algorand创始人Silvio Micali)。只有拥有VRF私钥才能计算哈希,但任何拥有对应公钥的人都可以验证该哈希的正确性。
VRF的一个关键应用就是,提供对存储在基于散列的数据结构中的数据的隐私保护,防止离线枚举(例如字典攻击)。在这种应用中,证明人持有VRF私钥,并使用VRF哈希在输入数据上构造基于散列的数据结构。由于VRF的性质,只有证明人才能回答关于数据结构中是否存储了某些数据的查询。任何知道VRF公钥的人都可以验证证明人正确地回答了查询。但是,不能对数据结构中存储的数据进行脱机推断(即不查询验证器的推断)。
简单来说,可验证随机函数可以基于私钥 对一个输入,产生一个唯一的固定长度的输出,以及一个对应的证明。其他人在知道了公钥、输出、证明 之后就一定能验证这三者的正确性,并且也只有在知道了这三者之后才能验证其正确性。
上面提及的这个过程以及相关的数据,是符合若干安全特性的,接下来会具体描述。
在VRF论文发出来后,到目前已有不同的团队(个人、组织、机构)做出了不同的实现。而IETF(Internet Engineering Task Force)目前正在为VRF的实现制定标准,目前还处于草案阶段,并于 2019-2-8已发布第四版草案。链接见文后参考部分。
1.2 基本算法表述
从一个概要逻辑来说,VRF总共涉及到几个相关函数,联合起来完成一个证明和验证的闭环。
首先简单定义一下标识符:
SK:VRF的私钥
PK:VRF的公钥
alpha: VRF的输入,将对其进行哈希
beta: VRF哈希输出
pi: VRF证明
Prover: 持有VRF公私钥的人就可以称为证明人
Verifier: 只持有VRF公钥的人,可以称为验证人
VRF的基本算法,是很简单清晰的,如下:
前提是有一个秘钥对生成算法,来生成VRF需要用到的公私钥对;
证明人计算输入的哈希:beta = VRF_hash(SK,alpha); > 注意,VRF_hash算法是确定性的,对于相同的私钥及相同的输入,必定生成一个相同的输出。
证明人还需要用私钥及输入计算一个证明: pi = VRF_prove(SK, alpha)
验证人通过对应的公钥可以验证结果的正确性:VRF_verify(PK, alpha, pi)
实际实现中,上面2和3可以放在一起,得到如 beta,pi = VRF(SK,alpha) 这样的函数。
交流群
受限于笔者的学识和能力,文章内容难免有纰漏之处。技术探讨,请添加加微信 kvdoth 备注「YOUChain 技术交流」,进群交流。
公众号:
欢迎添加「有令」公众号,了解项目最新进展和技术分享。