李夢煒
(中國科學技術大學 網絡空間安全學院,安徽 合肥 230026)
2014 年至2018 年,中國福利彩票總銷量已連續5 年超越 2 000 億元,截至 2018 年 12 月 31 日,中國福利彩票累計發行銷售量為20 197.26 億元,籌集公益金6 022.97 億元,惠及數億人次,創造稅收數百億元,創造就業崗位40 多萬個。中國福利彩票已經成為中國公益事業和社會福利事業發展不可或缺的重要力量,保障中國福利彩票健康穩固發展具有十分重要的意義。
然而,福彩系統一直風波不斷。彩票造假、暗箱操作時有發生,2009 年深圳福彩巨騙案,據深圳警方披露案情,一男子利用職務之便,惡意篡改開獎后的彩票數據,企圖偽造一等獎中獎事實,所涉金額高達3 305 萬元;彩票銷售、開獎等環節屢屢遭受質疑,原定于 2015 年 1 月 25 日晚 21:30 開獎直播的第 15011期中國福利彩票雙色球游戲(以下稱雙色球)[1],未能進行開獎直播,也未給出具體“失聯”原因;多名中國福利彩票發行管理中心(以下稱中福彩中心)主要管理人員連續落馬,2018 年中央紀委國家監委網站公布了被查處的福彩領域4 名局級領導干部的懺悔視頻,共有14 人涉案,更是引發公眾質疑。這些事件都對中國福利彩票的公信力造成了極大的負面影響。
2008 年,中本聰(Satoshi Nakamoto)發表了題為《比特幣:一種點對點式的電子現金系統》的論文[2],提出了一種基于密碼學的電子貨幣,并命名為比特幣,其中最核心的技術就是區塊鏈技術。區塊鏈具有數據不可篡改、公開透明等特征,非常適合于需要保證數據高可信度以及透明度的場景。
目前國內外對區塊鏈在中國福利彩票上的應用研究較少,且多集中在互聯網彩票上[1,3-6]。然而互聯網彩票在監管問題上形式非常嚴峻,幾經波折,目前中國彩票法規中將違規互聯網售彩明確為非法彩票[7],各彩票網站均暫停售彩,購買彩票需至線下實體銷售網點(以下稱銷售網點)。同時部分彩票基層工作人員和部分購買者受教育程度不高,對新型銷售和購買方式的接受和認可上可能出現問題。
2019 年 4 月 4 日,中國政府采購網發布了《中國福利彩票發行管理中心基于區塊鏈智能合約技術的可公證性電子開獎技術研究與應用公開招標公告》[8],預算金額 284.87 萬元,表現了中福彩中心對因地制宜的區塊鏈技術的迫切需求。
本文首先對當前中國福利彩票系統和區塊鏈關鍵概念進行簡要介紹,再提出基于聯盟區塊鏈的新型彩票系統的節點結構和具體流程,最后對新系統的性能進行了分析。新系統相較于傳統彩票系統和聯盟鏈,有以下三點突破:
(1)在滿足監管需求和保護隱私的同時,降低了聯盟鏈的中心化程度,數據被篡改、偽造后更容易被發現、核查。區塊鏈中記錄的數據是加密后的數據,保護了隱私;多級節點的設計,對中心節點的權限進行了分割,提高了去中心化的程度;在聯盟鏈中引入了無需授權即可加入但權限有限的自由節點,提高了數據安全程度,且實現了全民監督。
(2)開獎號碼不可作偽。以全部購買數據信息為數據源,數據源記錄在區塊鏈中“不可篡改”,再利用哈希函數對數據源進行處理后得到的開獎號碼,具有可驗證性、不可預測性和不可操縱性。
(3)充分考慮實際,易于落地落實。新系統基本沒有對現行的線下售票、購票、兌獎環節進行改變,易于被廣大購買者和銷售網點基層工作人員接受。
樂透數字型彩票是中國福利彩票的重要組成部分,其規則簡單來說就是從多個號碼中選擇一定號碼。2018 年福彩樂透數字型彩票共銷售1 655.65 億多元,占全年福彩總銷量2 245.56 億多元的73.73%。其中雙色球銷售532.58 億多元,占全年福彩樂透總銷量的32.17%,是占比最大的樂透型彩種。雙色球2019 年第 39 期至第 138 期這 100 期,平均每期銷售額超過 3.5 億元,體量巨大,具有代表性[9]。以雙色球為例,對其開獎方式進行簡要介紹。
當期銷售結束,在公證人員封存銷售數據資料之后,并在其監督下通過搖獎器確定開獎號碼。開獎號碼由 1 ~33 中隨機選擇的 6 個不同數字與 1 ~16 中隨機選擇的1 個數字共同組成。根據購買者所選投注號碼與當期開獎號碼的相符情況,確定相應的中獎資格。
(1)所有數據信息中心化集中于中福彩中心,數據安全完全依賴中福彩中心信息安全程度,一旦遭到惡意攻擊,交易數據被篡改的后果極為嚴重;
(2)使用搖號機產生開獎號碼并進行直播的方式存在有黑幕的可能性,可信力度不夠;
(3)無法完全避免內部工作人員修改數據庫或開獎號碼;
(4)以實體彩票票券作為中獎唯一憑證過于單一,存在偽造彩票的可能性。
哈希函數H 可將任意有限長度的輸入映射到固定長度的輸出,同時具有以下性質:
(1)單向性:對 H(x)=y,已知 y,要找出 x 是困難的;
(2)二原像攻擊:已知 x,找出另一個 x′,使得 H(x)=H(x′)是 困 難的;
(3)強抗碰撞性:找出任意兩個不同的 x 和 x′,使得 H(x)=H(x′)是困難的;
(4)雪崩效應:即使輸入發生最微小的變化,輸出也會發生劇變;
(5)謎題難解(Puzzle Friendliness)[10]:如果想產生一些特殊的哈希值,同時哈希函數的一部分輸入固定、另一部分輸入隨機,則很難找到那樣的隨機值,使得計算出來的哈希值正好等于想產生的特殊哈希值。
SHA 是一類由美國國家標準與技術研究院發布的密碼學哈希函數。比特幣系統中廣泛使用的SHA-256 算法為比特幣提供了重要保障,目前仍沒有出現明顯弱點。本文后續涉及的哈希函數,均采用 SHA-256 算法,后續亦可根據實際情況進行調整,例如可以混合使用多種哈希函數算法。
Merkle 樹是一種哈希二叉樹,其基本結構如圖1所示。
利用Merkle 樹可以實現信息快速便捷的完整性驗證。底層節點數據的任何變動,都會逐級向上傳遞到其父節點,一直到Merkle 樹的根節點,使其根節點的哈希值發生變化。因而可以利用一個節點出發到達Merkle 樹的根節點所經過的路徑上存儲的哈希值,進行一個Merkle 證明。

圖1 Merkle 樹結構
在處理完整性驗證的場景中,特別對于分布式環境,Merkle 樹可大幅減少數據的傳輸量和計算的復雜度 。以 圖1 為例 ,data 001、002、003、004 的哈希值分別存儲在 A、B、C、D 中,不同節點只需驗證根節點值是否一致,即可驗證數據完整性。若data 003 遭到篡改,根節點、節點 F、節點 C 對應的哈希值都會發生變化,通過Merkle 樹可迅速進行定位,定位的時間復雜度為O(log(n))。
根據管理模式、節點權限、節點規模等方面,區塊鏈分為公有鏈、聯盟鏈和私有鏈三種類型。公有鏈完全去中心化,任何人都可以成為參與者,所有節點權限相同,由全體參與者共同維護。聯盟鏈部分去中心化,由選定的多方共同管理,節點需要許可后才能獲得相應的權限[11]。私有鏈完全封閉,中心化,僅使用區塊鏈的記賬功能,記賬權由個人獨享,不適合應用到彩票系統中。表1 為公有鏈和聯盟鏈具體對比。

表1 公有鏈與聯盟鏈主要差異
在中國福利彩票應用方面,聯盟鏈是優于公有鏈的,原因如下:
(1)公有鏈所有人都可以自由參與,且所有節點都平等地擁有權限,于監管不利,而聯盟鏈每個節點均有準入機制,參與共識、寫入及查詢數據均可由授權控制,可滿足監管要求。
(2)公有鏈常用的共識機制,PoW 速度慢且耗能巨大,PoS 存在馬太效應的問題,且主鏈有概率分叉,對交易處理需要等待主鏈確認,速度較慢,而聯盟鏈采用的共識機制速度較快,而且具有確定性一致性,不存在分叉的情況。
(3)公有鏈承載能力較低,不能滿足彩票交易的需求,而聯盟鏈承載能力較公有鏈大大增加。
定義以下4 種節點類型:
1 級節點:對應中福彩中心,亦可根據實際情況增設。負責按時間戳順序整理聯盟鏈內數據,打包成區塊發送給 2 級節點,同時負責 2 節點的管理授權。
2 級節點:對應各省福彩機構與監管機構,亦可根據實際情況增設。參與共識,負責接收 1 級節點發送的區塊,接收3 級節點發送的交易數據,同時負責3 級節點的管理授權。
3 級節點:對應銷售網點。負責向 2 級節點發送交易產生的數據信息。
4 級節點:對應購買者。不需要授權,所有人都可自由參與,只有下載權限,可在任意時間從1、2級節點下載區塊鏈到本地。
2.2.1 準備階段
當期彩票銷售開始前兩個小時,所有2 級節點向證書頒發機構發出申請,經1 級節點審核通過后,證書頒發機構為每個2 級節點生成一組公鑰和私鑰,每個2 級節點保存自己的私鑰,1 級節點保存所有2 級節點的公鑰,在一個小時內完成密鑰分配。
當期彩票銷售開始前一個小時,所有2 級節點已完成密鑰分配,所有3 級節點向證書頒發機構發出申請,經2 級節點審核通過后,證書頒發機構為每個 3 級節點生成一組公鑰和私鑰,每個 3 級節點保存自己的私鑰,2 級節點保存所有3 級節點的公鑰,在一個小時內完成密鑰分配,準備開始彩票銷售。
2.2.2 銷售階段
交易數據傳輸情況如圖2 所示。
當期彩票開始銷售后,購買者在一個3 級節點對應的銷售網點進行了一筆彩票交易,該3 級節點即將本次彩票的交易數據(包括時間戳、3 級節點編號、購買種類、購買數量、購買號碼)用分配的私鑰進行數字簽名后,得到數字簽名3,將交易數據和數字簽名3 發送給數個被配置的受信任的2 級節點。同時,銷售網點內的投注機將交易數據和數字簽名3 等信息均打印在紙質彩票上,提供給購買者。
2 級節點接收到3 級節點發送的數據后,根據3 級節點編號,用相應的公鑰進行驗證,驗證通過后,用分配的私鑰對時間戳、2 級節點編號、3 級節點編號、數據簽名3 進行數字簽名,得到數字簽名2,將時間戳、2 級節點編號、3 級節點編號、數字簽名 3、數字簽名 2 發送給 1 級節點。
1 級節點接收到2 級節點發送的數據后,根據2 級節點編號,用相應的公鑰進行驗證,驗證通過足夠數量的 2 級節點簽名后[13],記錄下時間戳、3 級節點編號、數字簽名3,按照時間戳對記錄下的數據進行排序,并每隔5 分鐘將數據打包生成一個區塊,每個區塊包括區塊體和區塊頭兩部分,區塊體存放前一區塊生成之后記錄的批量數據,區塊頭存放區塊編號、區塊時間戳、前塊哈希、基于塊內交易數據哈希生成的 Merkle 根。區塊發送給所有 2 級節點,每個2 級節點對區塊進行核驗,核驗通過后將區塊下載到本地,鏈入主鏈。
銷售時間截止后,所有3 級節點停止彩票銷售,等待 1、2、3 級節點處理完所有待處理數據后,1 級節點將剩余未打包的數據全體進行打包,生成本期最后一個區塊,發送給所有 2 級區塊,所有 2 級區塊記錄完畢后,銷售階段結束。
2.2.3 開獎階段
銷售階段結束后,不再產生新的區塊,核查1 級節點和所有2 級節點區塊鏈信息。核查無誤后,對區塊鏈上所有區塊的塊哈希數據進行兩次哈希,得到一個哈希值HASH。
所有數據分布式存儲在中彩票中心、各省福彩機構和監管機構,惡意攻擊且成功篡改數據的難度極大;聯盟鏈的準入和權限控制機制,從源頭上避免了惡意節點的介入;任意一個環節出現問題后,可以利用Merkle 樹進行排查,迅速準確地定位問題所在;所有人都能夠在任意時間下載區塊鏈,數據公開透明。
利用多級節點設計,將系統職能進行分割。與普通聯盟鏈相比,去中心化程度更高。1 級節點作為擁有記賬權的節點,接收不到最原始的交易數據,接收到的是被3 級節點的私鑰數字簽名后的數據,而 1 級節點并沒有 3 級節點的公鑰。這一設計讓1 級節點極難進行數據偽造,即使偽造了數據,也極易被2 級節點識破,基本不可能由此牟利。

圖2 交易數據傳輸
系統沒有在區塊中直接記錄交易數據,而是記錄加密后的交易數據,這樣即使數據可以被任意下載,也不會泄露購買者的隱私信息。
(1)可驗證性
每位購買者,均可根據所持彩票上的交易數據和數字簽名3,準確在區塊鏈中定位到自己交易產生的記錄,即可驗證購買者的確參與了開獎號碼的產生。
(2)不可預測性
產生開獎號碼的數據源來自數量眾多的購買者的自由意志,每位購買者在購買種類、購買數量、購買號碼、購買時間、選擇的銷售網點等方面均由每位購買者自己決定,為真隨機數據源。且數據經過了多次哈希運算,由哈希函數的單向性和雪崩效應,任一位購買者的抉擇發生任何微小的變化,開獎號碼都會隨之變化。
(3)不可操縱性
考慮到最極端的情況,假設某攻擊者可以確定自己將成為當期彩票的最后一名購買者,同時已獲得了當期之前所有區塊鏈數據,還盜取了即將投注的銷售網點的私鑰信息。若該攻擊者先確定購買號碼等交易數據,進行一次哈希運算得到最后一個區塊的塊哈希數據,和之前所有塊哈希數據一起,再進行兩次哈希運算,所得到的哈希值經過模運算后,獲得的開獎號碼需要恰好對應攻擊者先前確定的購買號碼。根據謎題難解可知,這個求解是極難的。同理,若該攻擊者先確定開獎號碼,也是極難求解的。
目前支撐比特幣的區塊鏈運行歷史最長,從2009 年開始,而根據比特幣的設計,還需要 100 多年才能挖完全部比特幣,10 年的實驗案例很難說明未來100 年能否安全運行。本文為中國福利彩票設計的新系統,每期只需運行 2 至 3 個自然日,10年的案例來說明如此短期運行的安全,是非常有說服力的。
充分考慮了當前部分銷售網點基層工作人員和部分購買者文化程度不高的實際情況,本系統在基層工作人員銷售和購買者購買、兌獎環節基本沒有做出改變,貼合實際,易于落實推廣。
此外,中國彩票系統硬件設施均為統一配置,也可考慮采用硬件加密技術,進一步提高系統安全性和運行效率。
每位購買者都可以參與保障數據安全不可篡改,確認自己參與了開獎號碼的產生,每位購買者都可以成為監督者,親自認證了新型彩票系統的公平公開公正。數據不可篡改保證了彩票每期總銷售額不會遭到虛報少報,從資金源頭進行了控制,一定程度上維護了公益金的安全,變相遏制了部分貪腐行為。
本文分析了中國福利彩票系統面臨的風險與弊端,設計了一個基于聯盟區塊鏈的新型彩票系統。該系統強有力的保障了彩票交易數據的安全,通過新型開獎號碼產生方式與全民監督的模式,可以提高購買者對中國福利彩票的信任程度,還在一定程度上維護了公益金的安全,具有較強的實用性,為中國福利彩票系統的革新提供了參考價值。