尤毅晨,杜紅珍,任 蕾
(寶雞文理學(xué)院 數(shù)學(xué)與信息科學(xué),陜西 寶雞 721013)
隨著社會(huì)、經(jīng)濟(jì)和科技的快速發(fā)展,由于人口基數(shù)龐大,導(dǎo)致原料供應(yīng)短缺或者對(duì)環(huán)境影響過(guò)大從而不得不限量供應(yīng)。例如,女性宮頸癌疫苗的預(yù)約搶購(gòu);一線城市按年定量的汽車(chē)搖號(hào)、購(gòu)房搖號(hào);2022年北京冬季奧林匹克運(yùn)動(dòng)會(huì)吉祥物手辦、掛飾的搶購(gòu);部分地區(qū)學(xué)校的入學(xué)資格分配等等。這些搶購(gòu)搖號(hào)易受外界因素影響,參與過(guò)程難以公開(kāi)透明展示,結(jié)果無(wú)法驗(yàn)證,存在后臺(tái)操作的可能性,結(jié)果公開(kāi)后參與者可能面臨泄露身份數(shù)據(jù),遭受廣告騷擾、詐騙等問(wèn)題。對(duì)于社會(huì)上存在的此類(lèi)問(wèn)題,一個(gè)基于區(qū)塊鏈的公開(kāi)可驗(yàn)證抽簽系統(tǒng)可以提高公平性,增加決策的透明度,保證每個(gè)人有相同的機(jī)會(huì)獲得指標(biāo),避免了財(cái)富和社會(huì)地位的差異對(duì)抽簽的影響,減少人們對(duì)抽簽結(jié)果的不信任感,促進(jìn)醫(yī)療、教育、資源的均衡分配。
區(qū)塊鏈(Blockchain)最早出現(xiàn)于2008年中本聰發(fā)表的Bitcoin:Apeer-to-peerelectroniccashsystem文章中[1]。區(qū)塊鏈技術(shù)是一種去中心化、分布式的賬本技術(shù),它通過(guò)將交易記錄組織成“區(qū)塊”并使用加密算法和分布式共識(shí)機(jī)制來(lái)確保交易記錄的不可篡改性和安全性。在區(qū)塊鏈中,每個(gè)參與者都可以在自己的節(jié)點(diǎn)上存儲(chǔ)完整的賬本拷貝,節(jié)點(diǎn)相互之間通過(guò)共識(shí)機(jī)制來(lái)協(xié)調(diào)賬本的更新和同步。由于區(qū)塊鏈上的每個(gè)交易都被記錄在多個(gè)節(jié)點(diǎn)上,因此區(qū)塊鏈具有去中心化、不可篡改、透明等特點(diǎn),可以提供更加安全和可信賴的數(shù)據(jù)存儲(chǔ)和交換方式,具有多方數(shù)據(jù)一致性、防篡改、隱私保護(hù)和智能驅(qū)動(dòng)等特性。智能合約是部署并運(yùn)行在區(qū)塊鏈上的一種可編程的代碼,當(dāng)滿足設(shè)置的條件后,實(shí)現(xiàn)各種合同的自動(dòng)化管理和執(zhí)行。
近年來(lái),常用的抽簽方案使用隨機(jī)數(shù)或軟件程序的設(shè)計(jì)來(lái)實(shí)現(xiàn)隨機(jī)公平的抽簽。抽簽系統(tǒng)最重要的性能指標(biāo)就是公平性,一定要保證抽簽參與個(gè)體被抽取的概率相等。文獻(xiàn)[2]提出了一個(gè)基于聯(lián)盟區(qū)塊鏈的福利彩票系統(tǒng),但是其開(kāi)獎(jiǎng)階段沒(méi)有做到公平性,部分開(kāi)獎(jiǎng)號(hào)碼無(wú)法被取到;文獻(xiàn)[3]設(shè)計(jì)了一種多功能抽簽選擇器軟件系統(tǒng),通過(guò)軟件以隨機(jī)數(shù)形式從眾多候選數(shù)據(jù)中隨機(jī)選擇部分?jǐn)?shù)據(jù)的方式來(lái)實(shí)現(xiàn)抽簽,但是該系統(tǒng)存在后臺(tái)操控的可能,無(wú)法做到抽簽過(guò)程公開(kāi)透明的展示;文獻(xiàn)[4]通過(guò)容噪量子擲幣協(xié)議構(gòu)建了一個(gè)多方網(wǎng)絡(luò)抽簽系統(tǒng),但是該協(xié)議的安全性與效率是成反比的,難以在實(shí)際中使用;文獻(xiàn)[5]設(shè)計(jì)了一個(gè)基于C/S模式的網(wǎng)絡(luò)抽簽系統(tǒng),但是面向用戶是局域網(wǎng)中安裝了客戶端的機(jī)器,應(yīng)用范圍有局限性且抽簽結(jié)果不能公開(kāi)驗(yàn)證;文獻(xiàn)[6]設(shè)計(jì)了一種基于ExcelVBA的講課競(jìng)賽抽簽系統(tǒng),通過(guò)在Excel文件中嵌入VBA程序?qū)崿F(xiàn)講課競(jìng)賽的隨機(jī)抽簽,但是該系統(tǒng)是已知參賽備選人員名單后為其抽取講課題目,也不具備可驗(yàn)證性。以上文獻(xiàn)的抽簽方案中,主要存在抽簽的公平性、隱私性、可驗(yàn)證性和效率低的問(wèn)題,為了解決上述問(wèn)題,基于區(qū)塊鏈技術(shù)提出了一個(gè)公平可驗(yàn)證抽簽系統(tǒng)。
智能合約(Smart Contract)最早由SZABO于1995年提出[7],是一種基于區(qū)塊鏈技術(shù)的計(jì)算機(jī)程序,可自動(dòng)執(zhí)行和履行合同條款。智能合約基于區(qū)塊鏈技術(shù),利用去中心化、分布式的賬本技術(shù)來(lái)保存交易記錄和執(zhí)行合約[8]。在智能合約中,合同條款被編寫(xiě)為可執(zhí)行的代碼,智能合約由生成、發(fā)布和執(zhí)行3個(gè)部分組成。當(dāng)滿足合同條件時(shí),智能合約會(huì)自動(dòng)執(zhí)行,并在區(qū)塊鏈上保存交易記錄,以確保數(shù)據(jù)的安全和可靠性,避免了傳統(tǒng)合同需要人工介入和監(jiān)督的問(wèn)題,從而提高了合同的執(zhí)行效率和可靠性。智能合約的應(yīng)用非常廣泛,可以實(shí)現(xiàn)許多傳統(tǒng)合同無(wú)法實(shí)現(xiàn)的功能。例如,在抽簽系統(tǒng)中,智能合約可以根據(jù)條件自動(dòng)執(zhí)行獎(jiǎng)勵(lì)的發(fā)放,并將抽簽資格轉(zhuǎn)移到中簽者的賬戶中,從而提高了獎(jiǎng)勵(lì)發(fā)放的速度和可靠性。
ELGamal公鑰密碼體制[9]是ELGAMAL于1985年基于Diffile-Hellman密鑰交換算法[10]提出的,其安全性由有限域上的離散對(duì)數(shù)難題保證。該加密體制由參數(shù)設(shè)置、密鑰生成、加密、解密4部分組成。
(1) 參數(shù)設(shè)置
隨機(jī)選取一個(gè)大素?cái)?shù)p,構(gòu)建一個(gè)模p的有限域Zp,g是Zp上的生成元,且g∈Zp。
(2) 密鑰生成
隨機(jī)選擇x∈[1,p-1],計(jì)算y=gxmodp,私鑰SK={x},公鑰PK={p,g,y}。
(3) 加密
對(duì)于明文消息m,加密者隨機(jī)挑選一個(gè)秘密值k∈[1,p-1],用接收者的公鑰對(duì)明文消息加密得到密文
E(m)={c1=gkmodp,c2=mykmodp},
其中,E(·)表示加密算法。
(4) 解密
接收者收到密文消息{c1,c2}后,使用私鑰恢復(fù)得到明文
其中,D(·)表示解密算法。
系統(tǒng)基于以太坊設(shè)計(jì)開(kāi)發(fā),以太坊是一個(gè)通用區(qū)塊鏈平臺(tái),其基礎(chǔ)是區(qū)塊鏈技術(shù)。簽名后的合約通過(guò)P2P網(wǎng)絡(luò)直接發(fā)布,并被每個(gè)節(jié)點(diǎn)接收并儲(chǔ)存在其共識(shí)體系中。每個(gè)節(jié)點(diǎn)將最近接收到的所有合約體系打包,計(jì)算出集合的哈希值,然后擴(kuò)散至全網(wǎng)其他節(jié)點(diǎn)。每個(gè)節(jié)點(diǎn)收到此數(shù)值后,與自身計(jì)算出的數(shù)值進(jìn)行比較,達(dá)成共識(shí),以確保合約穩(wěn)定執(zhí)行。
系統(tǒng)架構(gòu)如圖1所示,主要包括抽簽發(fā)布者、抽簽參與者、智能合約、區(qū)塊鏈、存儲(chǔ)系統(tǒng)以及可信中心TA共6個(gè)部分。

圖1 抽簽系統(tǒng)架構(gòu)Fig. 1 Lottery system architecture
抽簽發(fā)布者:負(fù)責(zé)設(shè)置抽簽人數(shù)、參與人數(shù)和抽簽獎(jiǎng)勵(lì),設(shè)置完成后向可信中心發(fā)送抽簽申請(qǐng)。
抽簽參與者:需要獲取抽簽資格的人員,使用身份注冊(cè)參與抽簽。
智能合約:區(qū)塊鏈上的一串代碼,當(dāng)滿足條件的抽簽結(jié)果出來(lái)時(shí),給予被抽中的參與者獎(jiǎng)勵(lì)資格。
區(qū)塊鏈:負(fù)責(zé)記錄用戶的注冊(cè)、記錄參與者的抽簽信息、計(jì)算抽簽數(shù)據(jù)、可信中心TA的操作信息。
存儲(chǔ)系統(tǒng):負(fù)責(zé)存儲(chǔ)設(shè)置的抽簽信息、抽簽者身份信息、區(qū)塊鏈和智能合約的數(shù)據(jù)。
可信中心TA:負(fù)責(zé)系統(tǒng)的管理、初始系統(tǒng)參數(shù)的選擇、抽簽參與者的注冊(cè),驗(yàn)證注冊(cè)參與者身份后,可信機(jī)構(gòu)會(huì)為其生成注冊(cè)信息并上傳至區(qū)塊鏈。
本系統(tǒng)上區(qū)塊鏈的安全模型如圖2所示,共有3層,分別為應(yīng)用層,合約層,數(shù)據(jù)層。其中應(yīng)用層用來(lái)操作抽簽系統(tǒng)和對(duì)用戶進(jìn)行管理;合約層用來(lái)設(shè)置共識(shí)機(jī)制,在區(qū)塊鏈上部署智能合約和保持節(jié)點(diǎn)的相互聯(lián)系;數(shù)據(jù)層用來(lái)保存系統(tǒng)中的數(shù)據(jù),將新產(chǎn)生的信息以新的區(qū)塊的方式成鏈?zhǔn)浇Y(jié)構(gòu)保存。

圖2 安全模型Fig. 2 Security model
抽簽發(fā)布者向可信機(jī)構(gòu)提供證明自己發(fā)起抽簽活動(dòng)的證明材料以及設(shè)置參與抽簽用戶的限制條件、抽簽參與人數(shù)上限、抽簽獎(jiǎng)勵(lì)、獎(jiǎng)勵(lì)數(shù)量等參數(shù),可信機(jī)構(gòu)驗(yàn)證無(wú)誤后對(duì)外發(fā)布抽簽活動(dòng)。
2.3.1 初始化階段

2.3.2 注冊(cè)階段

2.3.3 抽簽階段

2.3.4 派獎(jiǎng)階段
因?yàn)槊總€(gè)參與者最終得到的身份哈希H(yi||UI||ti)是其發(fā)送注冊(cè)請(qǐng)求時(shí)的時(shí)間戳、選擇隨機(jī)數(shù)計(jì)算的離散對(duì)數(shù)和用戶的身份信息共同進(jìn)行哈希運(yùn)算得到的,而哈希函數(shù)具有單向性,所以抽簽階段得到的抽獎(jiǎng)數(shù)字是不可操控的。抽簽截止后,將每個(gè)參與者最終得到的抽獎(jiǎng)數(shù)字從小到大排列,按順序即可取到中獎(jiǎng)名額數(shù)量的參與者,廣播所取到的所有中獎(jiǎng)數(shù)字ωi、中獎(jiǎng)用戶的yi值、參與注冊(cè)的人數(shù)和注冊(cè)成功的人數(shù)。
例1現(xiàn)有某醫(yī)院作為抽簽發(fā)布者,得到一批九價(jià)HPV疫苗,可以滿足10位女性的注射需求,所以對(duì)外公開(kāi)抽取10位注射者。首先向可信機(jī)構(gòu)提供這批疫苗的來(lái)源、批號(hào)、生產(chǎn)日期等相關(guān)信息,然后提供醫(yī)院的注冊(cè)資質(zhì),最后向可信機(jī)構(gòu)說(shuō)明本次抽取10位年齡在16至26歲且工作或居住地在本地的女性來(lái)注射這批疫苗。隨后可信機(jī)構(gòu)驗(yàn)證醫(yī)院信息無(wú)誤后將信息記錄在區(qū)塊鏈上。設(shè)置智能合約為最后抽取到的10位用戶發(fā)放注射疫苗資格并對(duì)外發(fā)布抽簽活動(dòng)。
抽簽截止后,共有200位抽簽參與者,其中有3位男性參與者,27位年齡不在16至26歲之間的參與者,42位無(wú)法提供工作證明或居住地證明的參與者,8位注冊(cè)重復(fù)或注冊(cè)信息有誤參與者。可信機(jī)構(gòu)記錄注冊(cè)人數(shù)為200,注冊(cè)成功人數(shù)為120,并記錄在區(qū)塊鏈上等待抽簽結(jié)束對(duì)外公布。

可信中心TA計(jì)算H(yi||Hi||ti),并將結(jié)果由十六進(jìn)制轉(zhuǎn)換成十進(jìn)制再計(jì)算ωi。如編號(hào)120的抽簽參與者的抽獎(jiǎng)數(shù)字為:
42813567636390724052700025738182452599mod116068178639776=78941110719631。
如表1,編號(hào)為1,2,119,120的抽簽參與者中,
35978919955237<75719772694539<
78941110719631<93308196732002,
其中,1號(hào)參與者的抽獎(jiǎng)數(shù)字ω1最小,所以在這4人中優(yōu)先中簽。同理計(jì)算出120位參與者的抽獎(jiǎng)數(shù)字ωi后,按從小到大排列,取前10位中簽并公開(kāi)對(duì)應(yīng)的ωi和yi。
抽簽結(jié)束后,TA廣播中獎(jiǎng)用戶選取的yi、對(duì)應(yīng)的中獎(jiǎng)數(shù)字ωi、參與注冊(cè)的人數(shù)和注冊(cè)成功的人數(shù)。中獎(jiǎng)的用戶如果存在異議或者是獎(jiǎng)勵(lì)發(fā)放過(guò)程中有遇到的問(wèn)題,可以通過(guò)其選取的xi來(lái)證明自己身份;未中獎(jiǎng)的用戶可以通過(guò)計(jì)算出自己的抽獎(jiǎng)數(shù)字對(duì)比是否大于廣播的中獎(jiǎng)數(shù)字。
用戶Ui接收到TA發(fā)送的ESK=(ci1,ci2,ti)||(ci1,ci2,ti)后,只需要驗(yàn)證其有效性,再解密
通過(guò)驗(yàn)證參與者身份的合法性,防止代抽或惡意參與者,如果用戶多次選取隨機(jī)數(shù)向TA多次提交注冊(cè)申請(qǐng),則只記錄第一次注冊(cè)信息,后續(xù)全部返回reject。由于每一次注冊(cè)、每一次開(kāi)獎(jiǎng)都在區(qū)塊鏈上有記錄,所以保證了數(shù)據(jù)的安全性和公平性。分布式記賬,遭受惡意攻擊也不會(huì)重新抽簽,可以從別處恢復(fù)數(shù)據(jù)。參與主體隨時(shí)申訴,擁有監(jiān)管保障。即使遇到了惡意用戶,也可以根據(jù)可信中心記錄的(yi||Ui||ti)找到用戶對(duì)應(yīng)身份信息進(jìn)行追責(zé)。
根據(jù)區(qū)塊鏈不可篡改、永久運(yùn)行、可追溯的特性,所有階段都是記錄在區(qū)塊鏈上的,并且最后的派獎(jiǎng)階段是智能合約自動(dòng)執(zhí)行,當(dāng)注冊(cè)結(jié)束計(jì)算出抽獎(jiǎng)數(shù)字后,便可以按照設(shè)定的程序自動(dòng)派獎(jiǎng),保證了抽簽獎(jiǎng)勵(lì)發(fā)放的準(zhǔn)確性。
由于注冊(cè)階段的用戶私鑰是自己選擇的,即使他人截取到EPK(yi)和TA返回用戶的ESK=(ci1,ci2,ti)||(ci1,ci2,ti),也無(wú)法解密將yi和用戶的身份信息Ui對(duì)應(yīng)起來(lái)。等抽獎(jiǎng)結(jié)束后公布了中獎(jiǎng)用戶的yi,也不知道中獎(jiǎng)用戶的身份信息,保證了用戶的身份隱私,減小了用戶因參與抽簽而遭受詐騙信息和廣告騷擾的可能。
最終抽獎(jiǎng)號(hào)碼的產(chǎn)生取決于眾多參與者的主觀選擇和參與注冊(cè)的人數(shù),每位參與者選取的隨機(jī)數(shù),注冊(cè)的時(shí)間都是主觀的,并且最終進(jìn)行哈希運(yùn)算,每位用戶在抽簽結(jié)束前都不知道參與注冊(cè)成功的人數(shù),由哈希函數(shù)的單向性,任何一個(gè)因素的微小變化都會(huì)影響抽簽號(hào)碼的變化,所以參與用戶無(wú)法通過(guò)計(jì)算預(yù)測(cè)來(lái)實(shí)現(xiàn)中獎(jiǎng)。

本文針對(duì)當(dāng)前社會(huì)存在的資源分配限制問(wèn)題,提出了一個(gè)新的基于區(qū)塊鏈的公平可驗(yàn)證抽簽系統(tǒng),該系統(tǒng)可以保證抽簽過(guò)程的公開(kāi)可驗(yàn)證,并保護(hù)了抽簽參與者的隱私信息,可以提高公眾對(duì)抽簽過(guò)程的信任程度,在一定程度上維護(hù)了社會(huì)的公平。但是由于對(duì)抽簽參與者隱私性的高度保護(hù),本文使用了ELGamal公鑰密碼體制,傳遞密文的長(zhǎng)度是明文長(zhǎng)度的2倍,使得通信的信息量增大,以后的研究中可以在保證安全性的前提下,減少通信的信息量,提高系統(tǒng)的效率。