Algorand 系列一:VRF 密码学抽签原理及其在 Algorand 中的应用

YOUChain Research

YOUChain 研究团队,成员毕业于国内外顶级名校,有长期的工业界经验。我们持续跟踪的区块链学界和业界的前沿发展,致力于深入区块链本质,推动学术和技术发展。团队诚邀加密、算法、区块链、工程人才加入!

本文来自 Darlzan@YOUChainResearch

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的基本算法,是很简单清晰的,如下:

  1. 前提是有一个秘钥对生成算法,来生成VRF需要用到的公私钥对;
  2. 证明人计算输入的哈希:beta = VRF_hash(SK,alpha); > 注意,VRF_hash算法是确定性的,对于相同的私钥及相同的输入,必定生成一个相同的输出。
  3. 证明人还需要用私钥及输入计算一个证明: pi = VRF_prove(SK, alpha)
  4. 验证人通过对应的公钥可以验证结果的正确性:VRF_verify(PK, alpha, pi)

实际实现中,上面2和3可以放在一起,得到如 beta,pi = VRF(SK,alpha) 这样的函数。

1.3 所需满足的安全特性

基于上一节的内容,还不能理解VRF的本质。如果不考虑相关的安全特性,那上面的实现是没有意义的。那么,VRF需要满足哪些安全特性呢?

总结起来,主要包括3种安全特性:唯一、防碰撞、伪随机。另外,对于IETF的实现标准,即使在秘钥对生成不够可信的情况下,也可以保持“不可预测性”。

1.3.1 完全唯一 和 可信唯一

唯一是指对于任意固定的VRF公钥以及任意的输入alpha,都存在唯一的可被证明有效的输出beta。

完全唯一full uniqueness)指在可计算范围内对手不可能找到一个公钥pk,一个输入alpha,以及两个证明 pi1 和 pi2 使得 VRF_verify(pk,alpha,pi1) 输出 (VALID,beta1),VRF_verify(pk,alpha,pi2) 输出 (VALID,beta2),而 beta1不等于beta2。

一个相对弱一点的安全特性叫可信唯一trusted uniqueness),对很多应用来说这就够了。可信唯一只在VRF公私钥是以一种值得信任的方式生成的情况下,才满足唯一性,其他就和完全唯一一样。换句话说,如果秘钥对生成方式有问题或者使用了不好的随机数,则唯一性可能无法保证。

直白来说,就是(1)对于特定的一对公私钥(sk,pk),任意一个alpha都有并且只有一对 (beta,pi),不存在说对于某个或某些输出无法生成证明的情况;(2)对于任意特定的 alpha,系统中的任何一对公私钥(sk,pk),都能生成唯一的与其他人不相同的 (beta,pi),不存在说对于某些输入有些私钥能构造有效证明但有些私钥却不能构造有效证明的情况。

其中可信唯一相对弱一点是在于,对于只满足这个特性的系统来说,可以特意构造某个公钥 PK(它可能没有对应的有效的私钥),对于某个输入alpha,可以构造两个或多个不同的证明pi,用该PK都能验证通过。

严格来说,世界上没有绝对的事,上面的表述都是基于密码学安全的意义之上的,就是说只要概率足够小,我们就认为它不会发生,比如概率小于2-256

由上面表述可以看到,一个好的秘钥对生成算法,对VRF实现的唯一特性的保障是很重要的,这在我们选择某种VRF实现的时候,应该要加以考量。

1.3.2 完全防碰撞 和 可信防碰撞

完全防碰撞是指,对手要找到具有相同输出的两个不同的输入alpha1和alpha2,在计算上是不可能的,即使他知道私钥也是如此。

相对弱一点的安全特性是 可信防碰撞,这指的是防碰撞特性需要基于一种可信的生成公私钥的方式。

1.3.3 完全伪随机 和 选择性伪随机

伪随机性确保对手在知道输出beta但是不知道证据pi的情况下,beta是随机的,不可能将其跟一个随机值进行辨别。

更精确地说,假设公私钥(pk,sk)是以一种可信方式生成的。伪随机性确保了即使输入是由对手仔细选择的,对于计算能力有限的对手,只要他不知道私钥,那么输出beta对他而言也是随机不可分辨的。甚至在对手有意选择多个输入并观察对应输出及证明的情况下,也是如此。

简单举个例子就是,分别对一组有规律的输入 [alpha1,alpha2,…,alphan] 计算其对应的输出[(beta1,pi1),(beta2,pi2),…,(betan,pin)],你去观察研究这些输出,不可能找出某种确定的规律。

举个例子,伪随机特性可以保证,你想要生成一个小于某个值的哈希(比如按16进制输出后前面有10个0,0x0000000000…),然后希望能快速推断出一个输入x使其满足你的要求,这是做不到的。除了按穷举法计算VRF哈希之外,别无捷径。

拥有完全伪随机特性,则允许对手在任意时刻选择输入。直白但可能不够准确地说,就是不管你什么时候给一个什么样的输入给我,你都无法知道我对该输入产生的输出哈希是大于还是小于某个值。

选择性伪随机是一个弱一点的安全特性,对于很多应用来说这也是足够的。这时,对手选择目标输入需要独立于VRF公钥,并且要在他观察到他选择的alpha’所对应的beta’和pi’之前。直白但可能不够准确地说,就是你知道了我的公钥以及我曾经的一些(alpha,beta,pi)信息,然后你特意构造一个新的输入,这时你可能可以知道我对该输入的VRF输出将会大于或小于某个值,而不用等我真正告诉你结果。

需要记住,VRF的输出beta对证明人(或任何知道了私钥的人)来说,是不随机的。他们只要将beta和VRF_hash(sk, alpha)的结果进行比较,就可以轻易地将beta和一个随机值区分出来。

同时,对于任何知道了对应pi的人,beta看起来也是不随机的。只要检查VRF_verify(PK, alpha, pi)是否返回 (VALID, beta),就可以将beta跟一个随机值区别开。

还有,如果VRF秘钥对不是用可信方式生成的(例如,如果VRF秘钥对使用不好的随机数生成的),那么beta也可能看上去不是随机的。

1.3.4 一个 “类随机预言机”的不可预测特性

上面提到的伪随机性,在秘钥是由对手特意生成的情况下,是不满足的。例如,如果对手输出的秘钥是确定地生成的(或硬编码的并且是公开的),那么任何人都很容易获得VRF的输出。

然而,在一些VRF应用中,存在一种不同类型的不可预测性。这种特性类似于由一种(普通的,不基于秘钥对的)密码学哈希函数所提供的不可预测性:如果输入具有足够的熵(如:不可能被预测到),那么正确的输出也是均匀不可辨别的。

虽然关于此特性在密码学文献中既没有正式的定义,也没有证明,但在IETF中呈现的VRF实现方案中,只要公钥是以一种可信任的方式生成的,那么就可以相信满足了这个特性。额外地,如果公钥满足一些特定验证过程,那么即使公钥不是可信方式生成的,ECVRF也满足此特性。

1.4 几种实现方式概述及选择考量

VRF都是基于非对称加密技术来构建的,当前主流的非对称加密技术,有RSA和椭圆曲线密码学这两种。这两种技术都可以用于构建VRF实现。

具体实现就不做详细介绍了,感兴趣的还是以参考IETF的标准为主。

一般而言,一个基于RSA的VRF实现,能满足可信唯一可信防碰撞完全伪随机特性。不过,RSA方案的一个问题是,要起到足够的安全性,则RSA的秘钥长度需要比较长,这在很多应用场景下都不是很理想。

而目前,在非对称加密领域,椭圆曲线加密是越来越被重视、越来越成为主流的非对称加密技术。因此,对于VRF的实现也应该尽量选用基于椭圆曲线的实现方案,这种方案可简称为 ECVRF

ECVRF在具体实现时,可以有很多细分方案,包括选用不同的椭圆曲线、选用不同的将消息映射到曲线上的点的算法(需要注意,椭圆曲线密码学是基于有限域的,密码学中所说的椭圆曲线上的点是离散的、不连续的)、选用不同的随机数生成算法等等。

一般而言,ECVRF能满足可信唯一可信防碰撞完全伪随机特性,并且,如果在接收到一个VRF公钥时,做一些额外验证以验证公钥的有效性,那么ECVRF就能满足完全唯一完全防碰撞特性。

1.4.1 额外讨论:关于椭圆曲线的选择

椭圆曲线是由如下形式方程式所定义的曲线:y2=ax3+bx2+cx+d

其中,可用于密码学用途的椭圆曲线有很多,曾几何时,最主流的曲线及相关算法都是由NIST(美国国家标准与技术研究院)选定和推荐的,称为NIST-P系列,比如广泛使用的 P-256 曲线。这种情况持续到了2013年,那一年,一个叫“爱德华·斯诺登”(Edward Snowden)的牛人曝光了NSA的棱镜计划,其中曝光了NIST标准中一个基于椭圆双曲线的随机数生成器,叫 Dual_EC_DRBG,包含后门,这可以使掌握该后门的NSA只根据生成器过去所产生的随机数样本,就可以预测后续的随机数输出,这样的随机数,对我们来说是伪随机的,对NSA来说是可预测的。这个事件引起了人们对NIST的信任危机&#x

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值