本发明属于密码技术领域,具体涉及分布式可验证的随机数生成方法。
背景技术:
关于如何在一群互不信任的参与者之间产生大家都能信赖的随机数的问题最早是由blum提出的,blum还提出了著名的掷硬币协议(tossingcoinprotocol),也就是分布式随机数方案的雏形。分布式随机数致力于提出一种不可预测的、抗作弊的随机数生成机制,对于整个生成过程的透明性与公正性有着较大的要求。
首先引入一个概念——beacon,它指的是可靠的生成随机数的服务,最早由rabin提出。设计分布式随机数生成方案的过程也就是构建beacon过程。曾有一些研究者提出,从诸如股票市场、宇宙背景辐射等可公开观测的现象中来构建beacon,这中策略已经被应用于实际选举中的随机审计中,最著名的就是美国华盛顿州塔科马公园的市政选举。同时,近些年随着比特币的冉冉升起,其作为一种虚拟货币的高度去中心化与安全性,也吸引着研究者将其作为一种分布式随机数的生成源,比如著名的网站bitcoinmegalottery,该网站就是以比特币系统的区块来实现一种可验证的彩票。可以说分布式随机数已经在学术研究和市场方面都引起了较大关注并取得了初步的成果。
区块链的发展无疑提供了一种如何获取和使用随机数的新的视角。众所周知,分布式随机数生成的核心问题就是抗作弊性与不可预测性,而区块链的一致性协议就是挑选一些权威的、可信任的代表来更新网络的最新状态,二者的高度契合使区块链技术在随机数生成中得到了广泛应用。常见的区块链选举代表的机制有pow即工作量证明和pos即股权证名,但前者需要消耗大量的资源,后者则难以抵御权益粉碎攻击,因此都没有得到广泛的认可。
本发明则着眼于一种加密体制——多属性授权中心cp-abe(cp-abe(ciphertext-policyattribute-basedencryption),它是通过多节点的共同参与加密、验证和解密过程,确保加密机制的安全性、可验证性和稳定性,这些良好的性能为分布式随机数的生成提供非常优越的技术支持。
技术实现要素:
本发明的目的在于提供一种具有安全性、不可预测性与抗作弊性的分布式可验证的随机数生成方法。
本发明方法实现基于一分布式随机数发生系统,系统由多个节点构成,每个节点运行同样的本发明的方法,具体来讲,系统包括2个模块,一是点对点通讯模块,二是多属性授权中心cp-abe模块。其中,点对点通讯模块在网络拓扑上使得所有节点互通互联起来,并且基于本发明的假设前提,诚实节点均连通;多属性授权中心cp-abe模块[1]是cp-abe(基于密文策略的属性密码)的一种扩展密码体制,它包含5个基本函数,即全局设置函数(安全参数由相关标准提供)、私有设置函数、密钥生成函数、加密函数、解密函数。在cp-abe密码体制中,当且仅当解密者的属性满足密文中的访问控制策略时才能解密。在多属性授权中心cp-abe中,解密者的属性是由多个属性授权中心赋予,在无中心权威的场景中特别适用。通过多属性授权中心cp-abe模块产生的密文和密钥等信息均通过点对点通讯模块完成广播,使得各节点在各个时间点信息得到同步,并根据本发明的方法最终产生分布式随机数。
在整个随机数生成过程中,确保任何一个节点不会在本发明预设的时间点之前获得所有诚实节点的输入值,也就保证了最终结果的不可预测性和无偏性。另外即使某个节点作恶对其他不同的节点广播不同的信息或者不广播信息,只要最终可靠的节点所占比例大于预设的标准值就可以保证随机数的正常生成,这也保证了系统的稳定性与可靠性。
通常分布式随机数具有可获得、不可预测、抗作恶等特性,但这些特性往往难以同时保证,但是以上提到的基于多属性授权中心cp-abe则可以很好的完成。首先,只要本发明中存在多于预设标准值t/n比例(应用中往往设置为1/2,而这是非常容易满足的)的诚实节点就一定可以产生最终的随机数;其次,单个节点或部分节点由于最终才能获得可信任的秘文,所以无法提前预测最终的随机数;最后,这种多属性授权中心的机制,即使部分节点作恶如提供虚假的秘文信息甚至不提供秘文信息,只要有多于t/n的诚实节点依然不会影响最终随机数的随机性和可靠性。在性能效率方面,由于所有节点的行为是异步进行,因此本发明的通信复杂度为o(1),仅在解密时需要对列表进行解密,因此计算复杂度为o(n)。
本发明提供的分布式可验证的随机数生成方法,基于分布式随机数发生系统,以多属性授权中心cp-abe为基础框架,通过去中心化,确保方案的安全性、不可预测性与抗作弊性。具体步骤如下:
(1)首先,预设一个标准值t/n,作为可正常生成随机数的最小诚实节点占全部节点的比例,只要在生成过程中有超过t/n的诚实节点,随机数就可以正常生成,这种机制可以大大提高系统的容错性和抗作弊性,少数作恶节点的存在不会对最终随机数的结果产生实质的影响;实际应用中,一般设置t/n为1/2;
(2)然后,最先加入系统的节点调用系统提供的全局设置函数,输入预先公布的安全性参数λ,输出并公布系统的全局参数gp;接下来各个节点调用私有设置函数,假设节点i,输入全局参数gp,得到自己的公钥ski和私钥pki,接下来将自己的公钥广播给其他用户,最终每个节点得到公钥列表(pk1,pk2,…,pkn);
(3)接着,用户调用加密函数,输入自己提供的随机数即明文m、访问控制策略(形式为:t/nof(节点1,节点2,…,节点n))、全局参数和公钥列表,得到自己的秘文cti;并广播之,最终每个节点得到密文列表(ct1,ct2,…,ctn);
(4)各个用户节点调用密钥生成函数,输入包括解密者的身份信息gid、全局参数gp、解密者的属性u和私钥ski,然后为用户生成密钥keyi;并广播之,最终每个节点得到密文列表(key1,key2,…,keyn);
(5)当任意节点得到超过t/n个密钥,它可对手头上密文列表进行解密,并对解密得到的全部信息通过异或运算得到一个随机数。
附图说明
图1为本发明分布式可验证随机数生成的流程图。
具体实施方式
本发明提出的基于多属性授权中心cp-abe的分布式可验证随机数生成方法,假设系统中有n=3个节点a、b、c,门限比t/n为1/2,即如果有大于等于2个节点,则本发明的随机数一定会生成,并且具有不可预测性、无偏性、并且公开可验证。具体步骤为:
(1)最先加入系统的节点调用系统提供的全局设置函数得到全局参数gp,并公布之;各个节点调用私有设置函数。以节点b为例,输入全局参数gp,得到自己的公钥sk2和私钥pk2,私钥私有,公钥广播出去,最终每个节点得到公钥列表(pk1、pk2、pk3);
(2)各个用户调用加密函数将自己提供的随机数进行加密,在这个例子中我们假设节点a提供的随机数为5(二进制表示为101)、节点b提供的随机数为2(二进制表示为010),用户c提供的随机数为3(二进制表示为011)。同样以节点b为例,输入自己提供的随机数即明文2(二进制表示为010)、访问控制策略((1/2of(a,b,c)))、全局参数gp和公钥列表(pk1、pk2、pk3),输出不可识别的秘文ct2;广播其密文ct2,最终每个节点得到密文列表(ct1,ct2,ct3);
(3)各个用户节点调用密钥生成函数,对于任意节点,输入包括自己的身份信息gidi、全局参数gp、属性ui和私钥ski,然后生成自己密钥keyi,并向其他节点广播其密钥keyi;
(4)以节点b为例,当其收到a、c的密钥时,b可对密文列表的每个密文进行解密,获得了a、b、c分别提供的随机数为5、2、3,然后将这三个数的二进制表示进行异或运算,获得了最终的随机数二进制表示为100。