尤毅晨,杜红珍,任 蕾
(宝鸡文理学院 数学与信息科学,陕西 宝鸡 721013)
随着社会、经济和科技的快速发展,由于人口基数庞大,导致原料供应短缺或者对环境影响过大从而不得不限量供应。例如,女性宫颈癌疫苗的预约抢购;一线城市按年定量的汽车摇号、购房摇号;2022年北京冬季奥林匹克运动会吉祥物手办、挂饰的抢购;部分地区学校的入学资格分配等等。这些抢购摇号易受外界因素影响,参与过程难以公开透明展示,结果无法验证,存在后台操作的可能性,结果公开后参与者可能面临泄露身份数据,遭受广告骚扰、诈骗等问题。对于社会上存在的此类问题,一个基于区块链的公开可验证抽签系统可以提高公平性,增加决策的透明度,保证每个人有相同的机会获得指标,避免了财富和社会地位的差异对抽签的影响,减少人们对抽签结果的不信任感,促进医疗、教育、资源的均衡分配。
区块链(Blockchain)最早出现于2008年中本聪发表的Bitcoin:Apeer-to-peerelectroniccashsystem文章中[1]。区块链技术是一种去中心化、分布式的账本技术,它通过将交易记录组织成“区块”并使用加密算法和分布式共识机制来确保交易记录的不可篡改性和安全性。在区块链中,每个参与者都可以在自己的节点上存储完整的账本拷贝,节点相互之间通过共识机制来协调账本的更新和同步。由于区块链上的每个交易都被记录在多个节点上,因此区块链具有去中心化、不可篡改、透明等特点,可以提供更加安全和可信赖的数据存储和交换方式,具有多方数据一致性、防篡改、隐私保护和智能驱动等特性。智能合约是部署并运行在区块链上的一种可编程的代码,当满足设置的条件后,实现各种合同的自动化管理和执行。
近年来,常用的抽签方案使用随机数或软件程序的设计来实现随机公平的抽签。抽签系统最重要的性能指标就是公平性,一定要保证抽签参与个体被抽取的概率相等。文献[2]提出了一个基于联盟区块链的福利彩票系统,但是其开奖阶段没有做到公平性,部分开奖号码无法被取到;文献[3]设计了一种多功能抽签选择器软件系统,通过软件以随机数形式从众多候选数据中随机选择部分数据的方式来实现抽签,但是该系统存在后台操控的可能,无法做到抽签过程公开透明的展示;文献[4]通过容噪量子掷币协议构建了一个多方网络抽签系统,但是该协议的安全性与效率是成反比的,难以在实际中使用;文献[5]设计了一个基于C/S模式的网络抽签系统,但是面向用户是局域网中安装了客户端的机器,应用范围有局限性且抽签结果不能公开验证;文献[6]设计了一种基于ExcelVBA的讲课竞赛抽签系统,通过在Excel文件中嵌入VBA程序实现讲课竞赛的随机抽签,但是该系统是已知参赛备选人员名单后为其抽取讲课题目,也不具备可验证性。以上文献的抽签方案中,主要存在抽签的公平性、隐私性、可验证性和效率低的问题,为了解决上述问题,基于区块链技术提出了一个公平可验证抽签系统。
智能合约(Smart Contract)最早由SZABO于1995年提出[7],是一种基于区块链技术的计算机程序,可自动执行和履行合同条款。智能合约基于区块链技术,利用去中心化、分布式的账本技术来保存交易记录和执行合约[8]。在智能合约中,合同条款被编写为可执行的代码,智能合约由生成、发布和执行3个部分组成。当满足合同条件时,智能合约会自动执行,并在区块链上保存交易记录,以确保数据的安全和可靠性,避免了传统合同需要人工介入和监督的问题,从而提高了合同的执行效率和可靠性。智能合约的应用非常广泛,可以实现许多传统合同无法实现的功能。例如,在抽签系统中,智能合约可以根据条件自动执行奖励的发放,并将抽签资格转移到中签者的账户中,从而提高了奖励发放的速度和可靠性。
ELGamal公钥密码体制[9]是ELGAMAL于1985年基于Diffile-Hellman密钥交换算法[10]提出的,其安全性由有限域上的离散对数难题保证。该加密体制由参数设置、密钥生成、加密、解密4部分组成。
(1) 参数设置
随机选取一个大素数p,构建一个模p的有限域Zp,g是Zp上的生成元,且g∈Zp。
(2) 密钥生成
随机选择x∈[1,p-1],计算y=gxmodp,私钥SK={x},公钥PK={p,g,y}。
(3) 加密
对于明文消息m,加密者随机挑选一个秘密值k∈[1,p-1],用接收者的公钥对明文消息加密得到密文
E(m)={c1=gkmodp,c2=mykmodp},
其中,E(·)表示加密算法。
(4) 解密
接收者收到密文消息{c1,c2}后,使用私钥恢复得到明文
其中,D(·)表示解密算法。
系统基于以太坊设计开发,以太坊是一个通用区块链平台,其基础是区块链技术。签名后的合约通过P2P网络直接发布,并被每个节点接收并储存在其共识体系中。每个节点将最近接收到的所有合约体系打包,计算出集合的哈希值,然后扩散至全网其他节点。每个节点收到此数值后,与自身计算出的数值进行比较,达成共识,以确保合约稳定执行。
系统架构如图1所示,主要包括抽签发布者、抽签参与者、智能合约、区块链、存储系统以及可信中心TA共6个部分。
图1 抽签系统架构Fig. 1 Lottery system architecture
抽签发布者:负责设置抽签人数、参与人数和抽签奖励,设置完成后向可信中心发送抽签申请。
抽签参与者:需要获取抽签资格的人员,使用身份注册参与抽签。
智能合约:区块链上的一串代码,当满足条件的抽签结果出来时,给予被抽中的参与者奖励资格。
区块链:负责记录用户的注册、记录参与者的抽签信息、计算抽签数据、可信中心TA的操作信息。
存储系统:负责存储设置的抽签信息、抽签者身份信息、区块链和智能合约的数据。
可信中心TA:负责系统的管理、初始系统参数的选择、抽签参与者的注册,验证注册参与者身份后,可信机构会为其生成注册信息并上传至区块链。
本系统上区块链的安全模型如图2所示,共有3层,分别为应用层,合约层,数据层。其中应用层用来操作抽签系统和对用户进行管理;合约层用来设置共识机制,在区块链上部署智能合约和保持节点的相互联系;数据层用来保存系统中的数据,将新产生的信息以新的区块的方式成链式结构保存。
图2 安全模型Fig. 2 Security model
抽签发布者向可信机构提供证明自己发起抽签活动的证明材料以及设置参与抽签用户的限制条件、抽签参与人数上限、抽签奖励、奖励数量等参数,可信机构验证无误后对外发布抽签活动。
2.3.1 初始化阶段
2.3.2 注册阶段
2.3.3 抽签阶段
2.3.4 派奖阶段
因为每个参与者最终得到的身份哈希H(yi||UI||ti)是其发送注册请求时的时间戳、选择随机数计算的离散对数和用户的身份信息共同进行哈希运算得到的,而哈希函数具有单向性,所以抽签阶段得到的抽奖数字是不可操控的。抽签截止后,将每个参与者最终得到的抽奖数字从小到大排列,按顺序即可取到中奖名额数量的参与者,广播所取到的所有中奖数字ωi、中奖用户的yi值、参与注册的人数和注册成功的人数。
例1现有某医院作为抽签发布者,得到一批九价HPV疫苗,可以满足10位女性的注射需求,所以对外公开抽取10位注射者。首先向可信机构提供这批疫苗的来源、批号、生产日期等相关信息,然后提供医院的注册资质,最后向可信机构说明本次抽取10位年龄在16至26岁且工作或居住地在本地的女性来注射这批疫苗。随后可信机构验证医院信息无误后将信息记录在区块链上。设置智能合约为最后抽取到的10位用户发放注射疫苗资格并对外发布抽签活动。
抽签截止后,共有200位抽签参与者,其中有3位男性参与者,27位年龄不在16至26岁之间的参与者,42位无法提供工作证明或居住地证明的参与者,8位注册重复或注册信息有误参与者。可信机构记录注册人数为200,注册成功人数为120,并记录在区块链上等待抽签结束对外公布。
可信中心TA计算H(yi||Hi||ti),并将结果由十六进制转换成十进制再计算ωi。如编号120的抽签参与者的抽奖数字为:
42813567636390724052700025738182452599mod116068178639776=78941110719631。
如表1,编号为1,2,119,120的抽签参与者中,
35978919955237<75719772694539<
78941110719631<93308196732002,
其中,1号参与者的抽奖数字ω1最小,所以在这4人中优先中签。同理计算出120位参与者的抽奖数字ωi后,按从小到大排列,取前10位中签并公开对应的ωi和yi。
抽签结束后,TA广播中奖用户选取的yi、对应的中奖数字ωi、参与注册的人数和注册成功的人数。中奖的用户如果存在异议或者是奖励发放过程中有遇到的问题,可以通过其选取的xi来证明自己身份;未中奖的用户可以通过计算出自己的抽奖数字对比是否大于广播的中奖数字。
用户Ui接收到TA发送的ESK=(ci1,ci2,ti)||(ci1,ci2,ti)后,只需要验证其有效性,再解密
通过验证参与者身份的合法性,防止代抽或恶意参与者,如果用户多次选取随机数向TA多次提交注册申请,则只记录第一次注册信息,后续全部返回reject。由于每一次注册、每一次开奖都在区块链上有记录,所以保证了数据的安全性和公平性。分布式记账,遭受恶意攻击也不会重新抽签,可以从别处恢复数据。参与主体随时申诉,拥有监管保障。即使遇到了恶意用户,也可以根据可信中心记录的(yi||Ui||ti)找到用户对应身份信息进行追责。
根据区块链不可篡改、永久运行、可追溯的特性,所有阶段都是记录在区块链上的,并且最后的派奖阶段是智能合约自动执行,当注册结束计算出抽奖数字后,便可以按照设定的程序自动派奖,保证了抽签奖励发放的准确性。
由于注册阶段的用户私钥是自己选择的,即使他人截取到EPK(yi)和TA返回用户的ESK=(ci1,ci2,ti)||(ci1,ci2,ti),也无法解密将yi和用户的身份信息Ui对应起来。等抽奖结束后公布了中奖用户的yi,也不知道中奖用户的身份信息,保证了用户的身份隐私,减小了用户因参与抽签而遭受诈骗信息和广告骚扰的可能。
最终抽奖号码的产生取决于众多参与者的主观选择和参与注册的人数,每位参与者选取的随机数,注册的时间都是主观的,并且最终进行哈希运算,每位用户在抽签结束前都不知道参与注册成功的人数,由哈希函数的单向性,任何一个因素的微小变化都会影响抽签号码的变化,所以参与用户无法通过计算预测来实现中奖。
本文针对当前社会存在的资源分配限制问题,提出了一个新的基于区块链的公平可验证抽签系统,该系统可以保证抽签过程的公开可验证,并保护了抽签参与者的隐私信息,可以提高公众对抽签过程的信任程度,在一定程度上维护了社会的公平。但是由于对抽签参与者隐私性的高度保护,本文使用了ELGamal公钥密码体制,传递密文的长度是明文长度的2倍,使得通信的信息量增大,以后的研究中可以在保证安全性的前提下,减少通信的信息量,提高系统的效率。