◆胡祥義 徐冠寧 謝一源 郭建偉 馬艷姣
一種基于“垂直認(rèn)證”技術(shù)的數(shù)字貨幣解決方案
◆胡祥義1,2徐冠寧1,2謝一源1,2郭建偉1,2馬艷姣3
(1.北京市科學(xué)技術(shù)情報研究所 北京 100044;2.網(wǎng)絡(luò)密碼認(rèn)證北京市重點實驗室 北京 100044; 3.中科星圖股份有限公司 北京 101399)
本文提出了采用“垂直認(rèn)證”技術(shù)建立數(shù)字貨幣安全技術(shù)架構(gòu),對數(shù)字貨幣的幣值和交易單都進(jìn)行兩次簽名,采用私鑰對交易單或幣值進(jìn)行簽名,采用“垂直認(rèn)證”技術(shù)對交易單或幣值進(jìn)行二次簽名,并建立可信公鑰體制和芯片對芯片的認(rèn)證架構(gòu),保證交易單和數(shù)字貨幣的幣值都真實、可信,針對有中心交易,采用對稱算法建立的簽驗協(xié)議完成,針對點對點交易,采用非對稱算法及公鑰進(jìn)行簽驗,較大提高驗證的效率,采用組合密鑰生成算法,解決了對稱密碼算法密鑰管理的難題,同時,解決海量交易單并發(fā)簽驗的難題,通過建立200座驗證中心和400個分布式數(shù)字貨幣區(qū)塊鏈社區(qū),可保證整個數(shù)字貨幣交易系統(tǒng)的區(qū)塊鏈運行效率達(dá)到約40萬筆/秒,達(dá)到中國銀行數(shù)字貨幣交易速度為30萬筆/秒的設(shè)計標(biāo)準(zhǔn),從而,建立一種安全高效的數(shù)字貨幣交易系統(tǒng)。
數(shù)字貨幣;區(qū)塊鏈;垂直認(rèn)證;組合密鑰;二次簽名;驗證中心;加密芯片;對稱算法;公鑰算法
目前,在國內(nèi)外基于區(qū)塊鏈技術(shù)的數(shù)字貨幣應(yīng)用中,直接進(jìn)行用戶之間的“離線”、“事先”、“并行”交易,亦即:雙離線交易或有中心交易,再將交易單發(fā)送給區(qū)塊鏈社區(qū),區(qū)塊鏈各個節(jié)點端同時對雙方用戶已經(jīng)簽名的交易單進(jìn)行簽驗,驗證的環(huán)節(jié)多,大約需4~5個環(huán)節(jié),如:對交易單的簽名的簽驗,驗證交易單涉及的幣值是否可信,驗證交易雙方用戶錢包的資金流水是否正確,少數(shù)情況下,還要對交易單進(jìn)行解密,造成區(qū)塊鏈系統(tǒng)運行的效率相比較低。大多數(shù)區(qū)塊鏈系統(tǒng)驗證速度為:完成7筆/秒,造成數(shù)字貨幣交易速度較低,美國臉書公司的Libra設(shè)計的交易速度為1000筆/秒,中國銀行數(shù)字貨幣的交易速度設(shè)計為30萬筆/秒。當(dāng)然,若要大幅度提高交易速度,需更多增添區(qū)塊鏈節(jié)點端的設(shè)備投入,但效果還是有限。
數(shù)字貨幣的安全問題是重點,要解決安全問題的核心是能百分之百地驗證偽造簽名。當(dāng)然,數(shù)字貨幣系統(tǒng)還要解決交易效率、建設(shè)和維護(hù)成本的問題。數(shù)字貨幣系統(tǒng)的結(jié)構(gòu)決定其性能,現(xiàn)有數(shù)字貨幣交易系統(tǒng)的速度很難達(dá)到我國數(shù)字貨幣的設(shè)計標(biāo)準(zhǔn)(交易速度:30萬/秒),我國數(shù)字貨幣試點工程沒有采用區(qū)塊鏈技術(shù),因此,必須改變數(shù)字貨幣交易系統(tǒng)和區(qū)塊鏈設(shè)計結(jié)構(gòu),才能提高交易速度。另外,區(qū)塊鏈存在較大安全隱患,如:比特幣這個數(shù)字貨幣的區(qū)塊鏈應(yīng)用系統(tǒng),每半年左右出現(xiàn)一次比特幣被盜的事件,我國數(shù)字貨幣試點工程沒有在手機端部署加密芯片硬件,也存在安全隱患,總之,現(xiàn)有的區(qū)塊鏈技術(shù)不能滿足數(shù)字貨幣市場的需求。
為一勞永逸徹底解決現(xiàn)區(qū)塊鏈的安全問題,我們提出采用“垂直認(rèn)證”技術(shù)和區(qū)塊鏈技術(shù)建立數(shù)字貨幣解決方案,其中:“垂直認(rèn)證”技術(shù)是基于“密鑰種子”集中生成、集中灌裝、集中分發(fā)、集中銷毀,并采用組合密鑰生成算法,實現(xiàn)對稱密鑰一次一變,建立認(rèn)證、簽名和加密協(xié)議,并通過在手機端、驗證中心端和節(jié)點端都部署加密芯片硬件設(shè)備,建立芯片級的認(rèn)證、簽名和加密協(xié)議,可解決現(xiàn)有數(shù)字貨幣交易系統(tǒng)的安全隱患和效率不足的問題。
目前,各國都是采用公鑰體系建立區(qū)塊鏈系統(tǒng),公鑰體系存在多種安全隱患,一是私鑰沒有存儲在智能芯片里,存在被黑客盜用的風(fēng)險,二是公鑰以明文方式存儲在網(wǎng)絡(luò)上(或存儲在節(jié)點端公鑰數(shù)據(jù)庫里),無法建立可信公鑰。
本方案是采用“垂直認(rèn)證”技術(shù)建立網(wǎng)絡(luò)認(rèn)證架構(gòu),“垂直認(rèn)證”技術(shù)的定義:密鑰集中生成,集中灌裝,集中分發(fā)和集中銷毀。
“垂直認(rèn)證”技術(shù)的特征是,采用對稱算法建立認(rèn)證、簽名和加密協(xié)議,采用組合密鑰生成算法,來解決對稱算法的密鑰交換、更新和管理難題,組合密鑰技術(shù)保證認(rèn)證密鑰、簽名密鑰和加密密鑰,一次一變。
采用公鑰算法建立點對點即:無中心交易的簽驗協(xié)議,采用“垂直認(rèn)證”技術(shù)建立有中心交易的簽驗協(xié)議。
在手機端部署加密芯片,存儲用戶的私鑰和“密鑰種子”等重要數(shù)據(jù);在驗證中心端部署加密芯片,存儲用戶的密鑰等重要數(shù)據(jù),將用戶的公鑰和“密鑰種子”等數(shù)據(jù)以密文形式存儲在數(shù)據(jù)庫中;在區(qū)塊鏈的各個節(jié)點端部署加密芯片,也存儲用戶的密鑰等重要數(shù)據(jù),將用戶的公鑰和“密鑰種子”等數(shù)據(jù)以密文形式存儲在數(shù)據(jù)庫中,保證手機端用戶的私鑰存儲安全,保證在驗證中心端和區(qū)塊鏈各個節(jié)點端用戶公鑰和“密鑰種子”等數(shù)據(jù)的存儲安全。同時,將手機端加密芯片作為用戶的數(shù)字錢包,在驗證中心端部署全體用戶的數(shù)字錢包。
在數(shù)字貨幣初始化過程中,對16種(設(shè):有16種幣值)數(shù)字貨幣的幣值進(jìn)行二次簽名,16種幣值如:1000元、500元、200元、100元,......,5分、2分、1分。首先,采用數(shù)字貨幣發(fā)行銀行的16種私鑰,分別對16種幣值的貨幣進(jìn)行簽名;再采用一組密鑰種子K,并根據(jù)組合密鑰生成算法,產(chǎn)生一次一變的對稱密鑰,分別對16種幣值的貨幣進(jìn)行再次簽名,其中:每個幣值的貨幣都有幾千萬甚至幾億張。
在手機端部署加密系統(tǒng),在加密芯片里寫入用戶的標(biāo)識、對稱算法、公鑰算法、組合密鑰生成算法、一組私鑰、一組公鑰、一組“密鑰種子”表的元素,建立手機端公鑰數(shù)據(jù)庫,事先,在驗證中心端加密芯片里,將對應(yīng)標(biāo)識i的“密鑰種子”表i的元素密文解密,使用時間戳Hi p和隨機數(shù)Si p,生成一組存儲密鑰TKi p,將用戶標(biāo)識i對應(yīng)的公鑰i加密成密文,將用戶標(biāo)識i、公鑰i的密文、時間戳Hi p和隨機數(shù)Si p,存儲在驗證中心端基于標(biāo)識i的公鑰臨時數(shù)據(jù)庫記錄里,共生成n條記錄,由對應(yīng)標(biāo)識i的手機端,從驗證中心端下載基于標(biāo)識i的公鑰臨時數(shù)據(jù)庫,并作為標(biāo)識i的手機端公鑰數(shù)據(jù)庫存儲在手機端,其中:手機端公鑰數(shù)據(jù)庫的記錄可一次性從驗證中心端下載,或者,根據(jù)用戶的標(biāo)識,從驗證中心端有選擇性地下載。同時,將手機端加密芯片作為用戶的數(shù)字錢包,存儲用戶的數(shù)字貨幣。在手機端加密芯片里,采用手機端的用戶“密鑰種子”,由組合密鑰生成算法產(chǎn)生一次一變的對稱密鑰,分別將用戶錢包所有收/支交易記錄加密成密文后,發(fā)送到驗證中心端對應(yīng)用戶的數(shù)字錢包里,并在驗證中心端加密設(shè)備硬件的芯片里,將對應(yīng)用戶的“密鑰種子”密文解密成明文,再根據(jù)組合密鑰生成算法,產(chǎn)生解密密鑰將手機端發(fā)送來的收/支交易記錄密文解密成明文,并存儲到數(shù)字錢包的收/支交易數(shù)據(jù)庫中,從而,防止手機端交易記錄被黑客截獲。
將對稱16種加密幣值私鑰對稱的16種公鑰,分別存儲在全體用戶的手機端加密芯片里。
在數(shù)字貨幣交易系統(tǒng)中部署驗證中心,在驗證中心端部署加密硬件設(shè)備,建立驗證中心端加密系統(tǒng),在加密硬件的芯片里,寫入對稱算法、公鑰算法、組合密鑰生成算法,并將一組密鑰種子K,分別存儲在驗證中心端加密設(shè)備的芯片里。
建立“密鑰種子”數(shù)據(jù)庫,建立公鑰數(shù)據(jù)庫,事先,用驗證中心端加密芯片里的一組存儲密鑰KK,分別將全體用戶標(biāo)識i對應(yīng)的“密鑰種子”表i的元素加密成密文,存儲在“密鑰種子”數(shù)據(jù)庫記錄中。事先,在驗證中心端加密芯片里,生成時間戳Hi和隨機數(shù)Si,采用一套“密鑰種子”表LL的元素,根據(jù)組合密鑰生成算法,生成一組存儲密鑰Ki,將用戶標(biāo)識i對應(yīng)的公鑰i加密成密文,存儲在公鑰數(shù)據(jù)庫記錄中,其中:p=1~n,n≤60億,n為全體數(shù)字貨幣用戶總數(shù),i=1~n,n≤30億,n為全體數(shù)字貨幣用戶總數(shù),注:驗證中心端沒有寫入摘要算法。
在數(shù)字貨幣交易系統(tǒng)建立區(qū)塊鏈社區(qū),區(qū)塊鏈社區(qū)由j=10~1000個節(jié)點組成,每個節(jié)點由1~20個服務(wù)器和1~20個加密設(shè)備組成,并將驗證中心通過網(wǎng)絡(luò)與各個區(qū)塊鏈社區(qū)相連。
在各個區(qū)塊鏈節(jié)點端都部署加密硬件設(shè)備,建立節(jié)點端加密系統(tǒng),在加密硬件芯片里,寫入對稱算法、公鑰算法、組合密鑰生成算法,將一組密鑰種子K,分別存儲區(qū)塊鏈各節(jié)點端加密設(shè)備硬件芯片里。
建立“密鑰種子”數(shù)據(jù)庫,事先,用節(jié)點端加密芯片里的一組存儲密鑰CKj,分別將全體用戶對應(yīng)的“密鑰種子”表i元素加密成密文,存儲在“密鑰種子”數(shù)據(jù)庫記錄中,其中:j=10~1000,j為區(qū)塊鏈社區(qū)節(jié)點的總和,i=1~n,n≤30億,n為全體數(shù)字貨幣用戶的總和(注:各個區(qū)塊鏈節(jié)點端沒有寫入摘要算法)。
在驗證中心端,1)產(chǎn)生一組時間戳H1和隨機數(shù)S1,由“密鑰種子”表LL元素,根據(jù)組合密鑰生成算法,在加密芯片里,生成一組存儲密鑰K1,將用戶標(biāo)識1對應(yīng)的公鑰1加密成密文, 2)產(chǎn)生一組時間戳H2和隨機數(shù)S2,由“密鑰種子”表LL元素,根據(jù)組合密鑰生成算法,在加密芯片里,生成一組存儲密鑰K2,將用戶標(biāo)識2對應(yīng)的公鑰2加密成密文,......,N)產(chǎn)生一組時間戳Hn和隨機數(shù)Sn,由“密鑰種子”表LL元素,根據(jù)組合密鑰生成算法,在加密芯片里,生成一組存儲密鑰Kn,將用戶標(biāo)識n對應(yīng)的公鑰n加密成密文。
將用戶標(biāo)識1、公鑰1密文、時間戳H1和隨機數(shù)S1,存儲到公鑰數(shù)據(jù)庫的第1條記錄里,將用戶標(biāo)識2、公鑰2密文、時間戳H2和隨機數(shù)S2,存儲到公鑰數(shù)據(jù)庫的第2條記錄里,......,將用戶標(biāo)識n、公鑰n密文、時間戳Hn和隨機數(shù)Sn,存儲到公鑰數(shù)據(jù)庫的第n條記錄里,其中:公鑰數(shù)據(jù)庫共3個字段,分別存儲用戶標(biāo)識、公鑰的密文、時間戳和隨機數(shù),i=1~n,n≤60億,n為全體數(shù)字貨幣用戶總數(shù)。
驗證中心端實時建立基于標(biāo)識i的公鑰臨時數(shù)據(jù)庫。
首先,在驗證中心端加密芯片里,根據(jù)“密鑰種子”表LL元素,時間戳Hi和隨機數(shù)Si,生成存儲密鑰Ki,將對應(yīng)標(biāo)識i的公鑰i密文解密,采用存儲密鑰KK,將對應(yīng)標(biāo)識i的“密鑰種子”表i元素密文解密,使用時間戳Hi p和隨機數(shù)Si p,生成一組存儲密鑰TKi p,將用戶標(biāo)識i對應(yīng)的公鑰i加密成密文,將用戶標(biāo)識i、公鑰i的密文、時間戳Hi p和隨機數(shù)Si p,存儲在驗證中心端基于標(biāo)識i的公鑰臨時數(shù)據(jù)庫記錄里,共建立n個公鑰臨時數(shù)據(jù)庫,每個公鑰臨時數(shù)據(jù)庫共有n條記錄,其中:p=1~n, n≤60億,n為全體數(shù)字貨幣用戶總數(shù),i=1~n,n≤60億,n為全體數(shù)字貨幣用戶總數(shù),時間戳Hi p=Hi,隨機數(shù)Si p=Si。
(1)標(biāo)識i的手機端,根據(jù)標(biāo)識i直接從驗證中心端,下載基于標(biāo)識i的公鑰臨時數(shù)據(jù)庫,并作為標(biāo)識i手機端公鑰數(shù)據(jù)。
(2)用戶標(biāo)識i的手機端,向驗證中心端下載部分用戶的公鑰密文過程,
首先,用戶標(biāo)識i的手機端,向驗證中心端發(fā)送標(biāo)識P1、標(biāo)識P2、......、標(biāo)識Pr,驗證中心端在基于標(biāo)識i的公鑰臨時數(shù)據(jù)庫里,將對應(yīng)標(biāo)識P1、標(biāo)識P2、......、標(biāo)識Pr的記錄,下載到標(biāo)識i的手機端,作為標(biāo)識i手機端公鑰數(shù)據(jù)庫中的記錄。
驗證中心端,根據(jù)數(shù)字貨幣的用戶總數(shù)增添變化,實時產(chǎn)生基于標(biāo)識i的公鑰臨時數(shù)據(jù)庫,并及時發(fā)送給手機端提示指令:更新公鑰數(shù)據(jù)庫,一旦對應(yīng)標(biāo)識i手機端從驗證中心端下載完成公鑰數(shù)據(jù)庫的更新,則驗證中心端立即清除該基于標(biāo)識i的公鑰臨時數(shù)據(jù)庫;其中:P1=1~n,P2=1~n,......,Pr=1~n,c≠d,Pc ≠ Pd,1≤c≤r,1≤d≤r,Pc≠i,Pd≠i,r<n。
在驗證中心端加密芯片里,調(diào)用隨機數(shù)發(fā)生器,1)產(chǎn)生第一組隨機數(shù),作為用戶標(biāo)識1對應(yīng)的一套“密鑰種子”表1元素,2)產(chǎn)生第二組隨機數(shù),作為用戶標(biāo)識2對應(yīng)的一套“密鑰種子”表2元素,......,N)產(chǎn)生第n組隨機數(shù),作為用戶標(biāo)識n對應(yīng)的一套“密鑰種子”表n元素,其中:每套“密鑰種子”表的元素占2.6~3.3字節(jié)。
驗證中心端加密系統(tǒng),在加密芯片里用存儲密鑰KK,將用戶標(biāo)識1對應(yīng)的一套“密鑰種子”表1元素加密成密文,用存儲密鑰KK,將用戶標(biāo)識2對應(yīng)的一套“密鑰種子”表2元素加密成密文,...... ,用存儲密鑰KK,將用戶標(biāo)識n對應(yīng)的一套“密鑰種子”表n元素加密成密文,將用戶標(biāo)識1、“密鑰種子”表1元素密文,存儲到“密鑰種子”數(shù)據(jù)庫的第1條記錄,將用戶標(biāo)識2、“密鑰種子”表2元素密文,存儲到“密鑰種子”數(shù)據(jù)庫的第2條記錄,...... ,將用戶標(biāo)識n、“密鑰種子”表n元素密文,存儲到“密鑰種子”數(shù)據(jù)庫的第n條記錄,其中:“密鑰種子”數(shù)據(jù)庫有2個字段,即:用戶標(biāo)識i和“密鑰種子”表i元素密文,i=1~n,n≤60億,n為全體數(shù)字貨幣用戶總數(shù)。
數(shù)字貨幣區(qū)塊鏈各個節(jié)點端加密系統(tǒng),在加密芯片里用存儲密鑰CKj,將用戶標(biāo)識1對應(yīng)的一套“密鑰種子”表1元素加密成密文,用存儲密鑰CKj,將用戶標(biāo)識2對應(yīng)的一套“密鑰種子”表2元素加密成密文,...... ,用存儲密鑰CKj將用戶標(biāo)識n對應(yīng)的一套“密鑰種子”表n元素加密成密文,將用戶標(biāo)識1、“密鑰種子”表1元素密文,存儲到“密鑰種子”數(shù)據(jù)庫的第1條記錄,將用戶標(biāo)識2、“密鑰種子”表2元素密文,存儲到“密鑰種子”數(shù)據(jù)庫的第2條記錄,...... ,將用戶標(biāo)識n、“密鑰種子”表n元素密文,存儲到“密鑰種子”數(shù)據(jù)庫的第n條記錄,其中:“密鑰種子”數(shù)據(jù)庫有2個字段,即:用戶標(biāo)識和“密鑰種子”表的元素密文,j=10~1000,j為數(shù)字貨幣區(qū)塊鏈社區(qū)節(jié)點的總數(shù),i=1~n,n≤60億,n為全體數(shù)字貨幣用戶總數(shù)。
(1)當(dāng)用戶A和用戶B處于線上即:有中心交易時,用戶A與用戶B之間的有中心交易協(xié)議。
設(shè):付款方為用戶A,收款方為用戶B。
方法一:用戶A手機端加密系統(tǒng),由摘要算法對交易單進(jìn)行摘要,得到摘要信息M1即:驗證碼M1,產(chǎn)生一組時間戳a1和隨機數(shù)a1,由“密鑰種子”表a元素,根據(jù)組合密鑰生成算法,在加密芯片里,產(chǎn)生一組簽名密鑰aK1,采用簽名密鑰aK1加密M1和交易單,得到用戶A對交易單的簽名即:簽名碼1,且得到交易單的密文,將用戶A的標(biāo)識、交易單的驗證碼M1、交易單的簽名即:簽名碼1、交易單密文、時間戳a1和隨機數(shù)a1,一并發(fā)送給驗證中心端。
用戶B手機端加密系統(tǒng),由摘要算法對交易單進(jìn)行摘要,得到摘要信息M1即:驗證碼M1,產(chǎn)生一組時間戳b1和隨機數(shù)b1,由“密鑰種子”表b元素,根據(jù)組合密鑰生成算法,在加密芯片里,產(chǎn)生一組簽名密鑰bK1,采用簽名密鑰bK1加密M1和交易單,得到簽名碼2即:用戶B對交易單的簽名,且得到交易單的密文,將用戶B的標(biāo)識、交易單的驗證碼M1、交易單的簽名即:簽名碼2、時間戳b1和隨機數(shù)b1,一并發(fā)送給驗證中心端。
驗證中心端加密系統(tǒng),在“密鑰種子”數(shù)據(jù)庫中,分別調(diào)用對應(yīng)用戶A和用戶B對應(yīng)的“密鑰種子”表a元素的密文,以及“密鑰種子”表b元素的密文,在驗證中心端加密芯片里,用存儲密鑰KK,將對應(yīng)用戶A的“密鑰種子”表a元素密文解密,并將對應(yīng)用戶B的“密鑰種子”表b元素密文解密,由用戶A的“密鑰種子”表a元素、時間戳a1和隨機數(shù)a1,根據(jù)組合密鑰生成算法,生成簽驗密鑰aK2,對交易單用戶A的簽名進(jìn)行簽驗,并對交易單密文進(jìn)行解密,即:用簽驗密鑰aK2,解密簽名碼1和交易單的密文,得到驗證碼M2和交易單的明文,由用戶B的“密鑰種子”表b元素,時間戳b1和隨機數(shù)b1,根據(jù)組合密鑰生成算法,生成簽驗密鑰bK2,對交易單用戶B的簽名進(jìn)行簽驗,即:用簽驗密鑰aK2,解密簽名碼2,得到驗證碼M3,通過對比M1和M2是否相同來判別用戶A對交易單的簽名是否可信、完整,通過對比M1和M3是否相同來判別用戶B對交易單的簽名是否可信、完整,若M1≠M2,或M1≠M3,則簽驗未通過,交易失敗,若M1=M2,且M1=M3,則簽驗都通過,再驗證交易單涉及的幣值是否可信,通過加密設(shè)備芯片里的一組密鑰種子K,由組合密鑰生成算法,產(chǎn)生簽驗密鑰對交易單中涉及的16種幣值的簽名進(jìn)行簽驗,若驗證通過,則交易單涉及的幣值可信。數(shù)字貨幣交易系統(tǒng),將交易單中的金額,從驗證中心端用戶A的電子錢包轉(zhuǎn)入用戶B的電子錢包里,同時,將該交易單作為一條記錄,分別存儲到驗證中心端用戶A的電子錢包和用戶B的電子錢包里,從而完成用戶A與用戶B之間的有中心交易過程,其中:1≤A≤n,1≤B≤n,A≠B,n≤60億,n為全體數(shù)字貨幣用戶總數(shù)。
方法二:用戶A手機端加密系統(tǒng),向數(shù)字貨幣交易系統(tǒng)發(fā)出交易請求,數(shù)字貨幣交易系統(tǒng),產(chǎn)生一組時間戳a1和隨機數(shù)a1,并發(fā)送給用戶A手機端,在用戶A手機端加密芯片里,由“密鑰種子”表a元素、時間戳a1和隨機數(shù)a1,根據(jù)組合密鑰生成算法,產(chǎn)生一組簽名密鑰aK1,由摘要算法對交易單進(jìn)行摘要,得到摘要信息M1即:驗證碼M1,采用簽名密鑰aK1加密M1和交易單,得到簽名碼1和交易單密文,將用戶A的標(biāo)識、驗證碼M1、交易單的簽名即:簽名碼1、交易單密文、時間戳a1和隨機數(shù)a1,一并發(fā)送給驗證中心端。
驗證中心端加密系統(tǒng),在“密鑰種子”數(shù)據(jù)庫中,根據(jù)用戶A的標(biāo)識,調(diào)用對應(yīng)用戶A的“密鑰種子”表a元素的密文,在驗證中心端加密芯片里,用存儲密鑰KK將對應(yīng)用戶A的“密鑰種子”a表元素的密文解密,由用戶A的“密鑰種子”表a元素,時間戳a1和隨機數(shù)a1,根據(jù)組合密鑰生成算法,生成簽驗密鑰aK2,用簽驗密鑰aK2解密用戶A對交易單的簽名和交易單的密文,即:解密簽名碼1和交易單的密文,得到驗證碼M2和交易單的明文,通過對比M1和M2是否相同來判別用戶A對交易單的簽名是否可信、完整,若M1=M2,則簽驗通過,再驗證交易單涉及的幣值是否可信,通過加密設(shè)備芯片里的一組密鑰種子K,由組合密鑰生成算法,產(chǎn)生簽驗密鑰對交易單中涉及的16種幣值的簽名進(jìn)行簽驗,若驗證通過,則交易單涉及的幣值可信。數(shù)字貨幣交易系統(tǒng),根據(jù)交易單中收款人為用戶B,將交易單的金額,從驗證中心端用戶A的電子錢包轉(zhuǎn)入用戶B的電子錢包里,同時,將該交易單作為一條記錄,分別存儲到驗證中心端用戶A的電子錢包和用戶B的電子錢包里,從而,完成用戶A與用戶B之間的有中心交易過程,其中:1≤A≤n,1≤B≤n,A≠B,n≤60億,n為全體數(shù)字貨幣用戶總數(shù)。
有中心交易,是通過驗證中心端加密系統(tǒng),對交易單的用戶簽名進(jìn)行簽驗,驗證中心端沒有部署摘要算法,也沒有部署簽名協(xié)議,簽驗過程在驗證中心端也并沒有調(diào)用摘要算法,是通過手機端傳輸來的驗證碼M1和簽名碼1,在驗證中心端解密簽名碼1得到驗證碼M2,通過對比M1和M2是否相同,來判斷手機端用戶的簽名是否可信、完整,可防止不法分子在驗證中心端進(jìn)行偽簽名,同時,可提高驗證中心端并發(fā)簽驗的效率。另外,在各個驗證中心端,通過加密設(shè)備芯片里的一組密鑰種子K,由組合密鑰生成算法,產(chǎn)生簽驗密鑰對交易單中涉及的16種幣值的簽名進(jìn)行簽驗,可驗證其是否可信。
(2)當(dāng)用戶A和用戶B處于雙離線即:線下交易時,用戶A與用戶B之間的雙離線交易協(xié)議。
設(shè):付款方為用戶A,收款方為用戶B。
用戶A手機端加密系統(tǒng),調(diào)用摘要算法對交易單進(jìn)行摘要,得到摘要信息M1即:驗證碼M1,采用用戶A的私鑰加密M1得到簽名碼1,即:采用用戶A的私鑰對交易單進(jìn)行簽名,再產(chǎn)生一組時間戳a1和隨機數(shù)a1,由“密鑰種子”表a元素,根據(jù)組合密鑰生成算法,產(chǎn)生一組簽名密鑰aK1,用戶A采用簽名密鑰aK1加密M1,得到簽名碼2,即:用戶A對交易單進(jìn)行二次簽名。
用戶A通過手機端二維碼,或者手機端的NFC功能,將用戶A的公鑰、交易單、驗證碼M1和簽名碼1,即:用戶A用私鑰對交易單的簽名,一并傳輸給用戶B手機端。
用戶B手機端加密系統(tǒng),調(diào)用摘要算法對交易單進(jìn)行摘要,得到摘要信息M1即:驗證碼M1,采用用戶B的私鑰加密M1,得到簽名碼3,即:采用用戶B的私鑰對交易單進(jìn)行簽名,再產(chǎn)生一組時間戳b1和隨機數(shù)b1,由“密鑰種子”表b元素,根據(jù)組合密鑰生成算法,產(chǎn)生一組簽名密鑰bK1,用戶B采用簽名密鑰bK1加密M1,得到得到簽名碼4,即:用戶B對交易單進(jìn)行二次簽名。
用戶B通過手機端二維碼,或者手機端的NFC功能,將用戶B的公鑰、交易單、驗證碼M1和驗證碼3,即:用戶B用私鑰對交易單的簽名,一并傳輸給用戶A手機端。
用戶B手機端加密系統(tǒng),采用用戶A的公鑰對交易單用戶A的私鑰簽名進(jìn)行簽驗,即:采用用戶A的公鑰,解密簽名碼1得到驗證碼M2,通過對比M1和M2是否相同?來判斷用戶A用私鑰的簽名是否可信,完整。
用戶A手機端加密系統(tǒng),采用用戶B的公鑰對交易單用戶B的私鑰簽名進(jìn)行簽驗,即:采用用戶B的公鑰,解密簽名碼3得到驗證碼M3,通過對比M1和M3是否相同來判斷用戶B用私鑰的簽名是否可信、完整。
若M1≠M2,或M1≠M3,則簽驗未通過,交易失敗,若M1=M2,且M1=M3,則簽驗都通過,交易雙方用戶在各自的手機端,分別對比兩端的交易單是否相同。若都相同,再驗證交易單涉及的幣值是否可信,通過加密芯片里的16種私鑰,對交易單中涉及的16種幣值的簽名進(jìn)行簽驗,若驗證通過,則交易單涉及的幣值可信。數(shù)字貨幣交易系統(tǒng),將通過簽驗的交易單中對應(yīng)的金額,轉(zhuǎn)入用戶B的電子錢包里,同時,將該交易單作為一條記錄,分別存儲到驗證中心端用戶A的電子錢包和用戶B的電子錢包里,從而,完成用戶A與用戶B之間的雙離線即:線下交易過程。
其中:用戶A和用戶B在各自的手機端,分別采用各自的私鑰對交易單進(jìn)行簽名,是實現(xiàn)用戶A與用戶B之間處于雙離線時,進(jìn)行相互簽驗并執(zhí)行交易單的支付。
用戶A和用戶B在各自的手機端,分別由組合密鑰生成算法,產(chǎn)生各自的一組簽名密鑰aK1和bK1,分別對交易單進(jìn)行簽名,是為建立數(shù)字貨幣區(qū)塊鏈時,各個節(jié)點端加密系統(tǒng),可實現(xiàn)對交易單的簽名進(jìn)行并發(fā)快速簽驗。
(3)當(dāng)用戶A和用戶B處于點對點即:無中心交易時,用戶A與用戶B之間的無中心交易協(xié)議。
設(shè):付款方為用戶A,收款方為用戶B。
用戶A手機端加密系統(tǒng),在加密芯片里,調(diào)用摘要算法對交易單進(jìn)行摘要,得到摘要信息M1即:驗證碼M1,采用私鑰加密M1得到簽名碼1,即:用戶A用私鑰對交易單的簽名,再產(chǎn)生一組時間戳a1和隨機數(shù)a1,由“密鑰種子”表a元素,根據(jù)組合密鑰生成算法,產(chǎn)生一組簽名密鑰aK1,加密M1得到簽名碼2,即:用戶A用簽名密鑰aK1對交易單的二次簽名。
用戶B手機端加密系統(tǒng),在加密芯片里,調(diào)用摘要算法對交易單進(jìn)行摘要,得到摘要信息M1即:驗證碼M1,采用私鑰加密M1得到簽名碼3,即:用戶B用私鑰對交易單的簽名,再產(chǎn)生一組時間戳b1和隨機數(shù)b1,由“密鑰種子”表b元素,根據(jù)組合密鑰生成算法,產(chǎn)生一組簽名密鑰bK1,加密M1得到簽名碼4,即:用戶B用簽名密鑰bK1對交易單的二次簽名。
用戶A手機端加密系統(tǒng),將用戶A的標(biāo)識、交易單、驗證碼M1和簽名碼1即:用戶A采用私鑰對交易單的簽名,一并發(fā)送給用戶B手機端。
用戶B手機端加密系統(tǒng),將用戶B的標(biāo)識、交易單、驗證碼M1和簽名碼3即:用戶B采用私鑰對交易單的簽名,一并發(fā)送給用戶A手機端。
用戶B手機端加密系統(tǒng),根據(jù)標(biāo)識a取出對應(yīng)記錄中的公鑰a的密文,以及時間戳Hb a和隨機數(shù)Sb a,由手機端加密芯片里的“密鑰種子”表b元素,根據(jù)組合密鑰生成算法,產(chǎn)生存儲密鑰TKb a,解密公鑰a的密文得到明文。
用戶A手機端加密系統(tǒng),根據(jù)標(biāo)識b取出對應(yīng)記錄中的公鑰b的密文,以及時間戳Ha b和隨機數(shù)Sa b,由手機端加密芯片里的“密鑰種子”表a元素,根據(jù)組合密鑰生成算法,產(chǎn)生存儲密鑰TKa b,解密公鑰b的密文得到明文。
用戶B手機端加密系統(tǒng),采用用戶A的公鑰a,解密簽名碼1即:用戶A用私鑰對交易單的簽名,得到驗證碼M2,通過對比M1和M2是否相同,來對用戶A的私鑰簽名進(jìn)行簽驗,若M1=M2,則用戶A用私鑰對交易單的簽名通過簽驗。
用戶A手機端加密系統(tǒng),采用用戶B的公鑰b,解密簽名碼3即:用戶B用私鑰對交易單的簽名,得到驗證碼M3,通過對比M1和M3是否相同,來對用戶B的私鑰簽名進(jìn)行簽驗,若M1=M3,則用戶B用私鑰對交易單的簽名通過簽驗。
若M1=M2,且M1=M3,則簽驗都通過,交易雙方用戶在各自的手機端,分別對比兩端的交易單是否相同,若都相同,再驗證交易單涉及的幣值是否可信,通過加密芯片里的16種私鑰,對交易單中涉及的16種幣值的簽名進(jìn)行簽驗,若驗證通過,則交易單涉及的幣值可信。數(shù)字貨幣交易系統(tǒng),將都通過簽驗的交易單中對應(yīng)的金額,轉(zhuǎn)入用戶B的電子錢包里,同時,將該交易單作為一條記錄,分別存儲到驗證中心端用戶A的電子錢包和用戶B的電子錢包里,從而,完成用戶A與用戶B之間的點對點即:無中心交易過程。
各個用戶的手機端,事先從驗證中心端,以密文方式直接下載用戶的公鑰,并將用戶的公鑰密文存儲到手機端,當(dāng)交易雙方用戶之間進(jìn)行點對點交易時,雙方可直接在自己的手機端調(diào)用對方的可信公鑰,不需要進(jìn)行公鑰交換,可有效提高點對點交易的安全等級,同時,提高點對點交易的速度。另外,用戶在手機端加密系統(tǒng),通過加密芯片里存儲的16個公鑰,可分別對交易單中涉及的16種幣值的簽名進(jìn)行簽驗,保證交易單中涉及的16種幣值可信。
設(shè):付款方為用戶A,收款方為用戶B。
(1)交易雙方對交易單進(jìn)行二次簽名的協(xié)議。
用戶A手機端加密系統(tǒng),采用私鑰對交易單進(jìn)行簽名,再產(chǎn)生一組時間戳b1和隨機數(shù)b1,由“密鑰種子”表a元素,根據(jù)組合密鑰生成算法,在加密芯片里,產(chǎn)生一組簽名密鑰aK1,調(diào)用摘要算法對交易單進(jìn)行摘要,得到摘要信息M1即:驗證碼M1,用簽名密鑰aK1加密驗證碼M1和交易單,得到簽名碼1即:用戶A對交易單的簽名,并得到交易單的密文。
用戶B手機端加密系統(tǒng),采用私鑰對交易單進(jìn)行簽名,再產(chǎn)生一組時間戳b1和隨機數(shù)b1,由“密鑰種子”表b元素,根據(jù)組合密鑰生成算法,在加密芯片里,產(chǎn)生一組簽名密鑰bK1,調(diào)用摘要算法對交易單進(jìn)行摘要,得到摘要信息M1即:驗證碼M1,用簽名密鑰bK1加密驗證碼M1,得到簽名碼2即:用戶B對交易單的簽名。
(2)在同一個區(qū)塊鏈社區(qū)的各個節(jié)點端加密芯片里,都寫入一套兩兩相同的“密鑰種子”表元素,根據(jù)組合密鑰生成算法,實現(xiàn)各個節(jié)點之間的數(shù)據(jù)加密傳輸,一次一變,把同一個區(qū)塊鏈社區(qū)看成一個大群,保證同一區(qū)塊鏈社區(qū)的各個節(jié)點兩兩之間數(shù)據(jù)的都能相互安全傳輸。
(3)區(qū)塊鏈各個節(jié)點端加密系統(tǒng),分別采用“垂直認(rèn)證”技術(shù)對交易單的簽名進(jìn)行簽驗協(xié)議,同時,建立數(shù)字貨幣區(qū)塊鏈的過程。
用戶A和用戶B對交易單進(jìn)行二次簽名,且完成了交易單的支付后,數(shù)字貨幣交易系統(tǒng),將用戶A的標(biāo)識、用戶B的標(biāo)識、交易單的密文、驗證碼M1、簽名碼1即:用戶A對交易單的簽名,簽名碼2即:用戶B對交易單的簽名,時間戳a1和隨機數(shù)a1,時間戳b1和時間戳b1,一并發(fā)送到區(qū)塊鏈社區(qū)。
區(qū)塊鏈各個節(jié)點端加密系統(tǒng),調(diào)用對應(yīng)用戶A的“密鑰種子”表a元素密文和對應(yīng)用戶B的“密鑰種子”表b元素密文,在節(jié)點端加密芯片里,用存儲密鑰CKj分別解密。
由“密鑰種子”表a元素,時間戳a1和隨機數(shù)a1,根據(jù)組合密鑰生成算法,產(chǎn)生一組簽驗密鑰aK2,解密簽名碼1和交易單的密文,得到驗證碼M2,并得到交易單的明文,若M1=M2,則用戶A對交易單的簽名通過簽驗。
由“密鑰種子”表b元素,時間戳b1和隨機數(shù)b1,根據(jù)組合密鑰生成算法,產(chǎn)生一組簽驗密鑰bK2,解密簽名碼2,得到驗證碼M3,若M1=M3,則用戶B對交易單的簽名通過簽驗。
若對用戶A和用戶B的簽驗都通過,數(shù)字貨幣交易系統(tǒng)驗證用戶A電子錢包與用戶B錢包里,是否存儲了與該交易單相同的一條記錄,且用戶A錢包已支付款,與用戶B錢包已收到款是否相同,若驗證都通過,則再驗證交易單中涉及的幣值是否可信,通過加密設(shè)備芯片里的一組密鑰種子K,由組合密鑰生成算法,產(chǎn)生簽驗密鑰對交易單中涉及的16種幣值的簽名進(jìn)行簽驗,若驗證通過,則交易單涉及的幣值可信。該節(jié)點端加密系統(tǒng)將該交易單分別存儲到每個節(jié)點端的交易數(shù)據(jù)庫里,作為區(qū)塊鏈中一個區(qū)塊的一條記錄,其中:j=10~1000,j為區(qū)塊鏈社區(qū)節(jié)點的總和。
根據(jù)信用共識POC算法,記賬者將在T時間內(nèi),將通過簽驗和驗證的所有交易單作為一個區(qū)塊進(jìn)行記賬,區(qū)塊鏈系統(tǒng)采用哈希函數(shù)SM3算法,將各個區(qū)塊連接在一起建立區(qū)塊鏈,形成一個賬本數(shù)據(jù)庫,從而,完成數(shù)字貨幣區(qū)塊鏈建立的過程。
區(qū)塊鏈的各個節(jié)點端加密系統(tǒng),采用“垂直認(rèn)證”技術(shù)建立的簽驗協(xié)議,對交易單采用“垂直認(rèn)證”技術(shù)的簽名進(jìn)行簽驗,可發(fā)揮對稱算法的加/解密速度快的優(yōu)勢,對稱算法的簽驗速度對比公鑰算法快100倍以上,這種將公鑰算法并發(fā)簽驗,轉(zhuǎn)成采用對稱算法的并發(fā)簽驗的區(qū)塊鏈系統(tǒng),可大大提高建立區(qū)塊鏈的效率,減少設(shè)備投入。
圖1 數(shù)字貨幣交易區(qū)塊鏈系統(tǒng)拓?fù)鋱D
(1)建立400個分布式數(shù)字貨幣區(qū)塊鏈社區(qū),并建立200座驗證中心,在數(shù)字貨幣交易系統(tǒng),建立Z=400個數(shù)字貨幣區(qū)塊鏈社區(qū),建立E=200座驗證中心(見圖1),將Z=400個數(shù)字貨幣區(qū)塊鏈社區(qū),分別與數(shù)字貨幣數(shù)據(jù)結(jié)算中心連接,各個區(qū)塊鏈的賬本數(shù)據(jù)庫,實時傳輸?shù)綌?shù)字貨幣交易系統(tǒng)的結(jié)算中心,同時,E=200座驗證中心也分別與Z個分布式區(qū)塊鏈社區(qū)連接。
(2)當(dāng)用戶A和用戶B處于有中心交易時,首先,用戶A和用戶B,在各自的手機端加密芯片里,分別采用“垂直認(rèn)證”技術(shù)建立的簽名協(xié)議,對交易單進(jìn)行簽名,驗證中心端加密系統(tǒng),采用“垂直認(rèn)證”技術(shù)對交易單的簽名進(jìn)行簽驗。
數(shù)字貨幣交易系統(tǒng),根據(jù)省、市地區(qū)分布進(jìn)行任務(wù)分配,將交易雙方用戶簽名的交易單,發(fā)送給對應(yīng)地區(qū)的驗證中心,對應(yīng)地區(qū)的驗證中心端加密系統(tǒng),采用“垂直認(rèn)證”技術(shù)建立的簽驗協(xié)議,對交易單的簽名進(jìn)行簽驗,若交易單通過簽驗,則交易單執(zhí)行支付,并將交易雙方用戶分別簽名的交易單,根據(jù)省、市地區(qū)分布,發(fā)送給對應(yīng)的數(shù)字貨幣區(qū)塊鏈社區(qū),再由該數(shù)字貨幣區(qū)塊鏈的各個節(jié)點端加密系統(tǒng),分別采用“垂直認(rèn)證”技術(shù)建立的簽驗協(xié)議,對該交易單分別進(jìn)行簽驗。
(3)當(dāng)用戶A和用戶B處于無中心交易時,首先,用戶A和用戶B,在各自的手機端加密芯片里,分別采用各自的私鑰,對交易單進(jìn)行簽名,并采用“垂直認(rèn)證”技術(shù)建立的簽名協(xié)議,分別對交易單進(jìn)行二次簽名。
用戶A手機端加密系統(tǒng),采用用戶B的可信公鑰,對用戶B私鑰簽名的交易單進(jìn)行簽驗,用戶B手機端加密系統(tǒng),采用用戶A的可信公鑰,對用戶A私鑰簽名的交易單進(jìn)行簽驗,若都通過簽驗,再驗證交易單涉及的幣值是否可信,通過加密芯片里的16種私鑰,對交易單中涉及的16種幣值的簽名進(jìn)行簽驗,若驗證通過,則交易單執(zhí)行支付,并將交易雙方用戶分別二次簽名的交易單,根據(jù)省、市地區(qū)分布,發(fā)送給對應(yīng)的數(shù)字貨幣區(qū)塊鏈社區(qū),再由該數(shù)字貨幣區(qū)塊鏈的各個節(jié)點端加密系統(tǒng),分別采用“垂直認(rèn)證”技術(shù)建立的簽驗協(xié)議,對該交易單分別進(jìn)行簽驗。
(4)若數(shù)字貨幣區(qū)塊鏈的各個節(jié)點端對交易單的驗證都通過,則將該交易單分別存儲到每個節(jié)點端的交易數(shù)據(jù)庫里,作為區(qū)塊鏈中一個區(qū)塊的一條記錄。
根據(jù)信用共識POC算法,記賬者將在T=60~600秒時間內(nèi),將通過簽驗和驗證的所有交易單作為一個區(qū)塊進(jìn)行記賬,區(qū)塊鏈系統(tǒng)采用哈希函數(shù)SM3算法,將各個區(qū)塊連接在一起建立區(qū)塊鏈。
將Z個區(qū)塊鏈的數(shù)據(jù)發(fā)送給數(shù)字貨幣交易系統(tǒng)的結(jié)算中心,實現(xiàn)數(shù)字貨幣的實時結(jié)算和數(shù)據(jù)統(tǒng)計。
當(dāng)交易雙方用戶采用有中心交易時,數(shù)字貨幣交易系統(tǒng)將交易單的并發(fā)簽驗任務(wù),分配到E=200個驗證中心去完成,且對稱算法加/解密速度比公鑰算法,在計算機內(nèi)存里快100倍,在芯片里快1000倍,從而,大大提高驗證中心端交易單并發(fā)簽驗速度,可保證1秒鐘內(nèi),每座驗證中心可并發(fā)簽驗2000次,E=200座驗證中心,可保證交易雙方用戶同時完成約40萬筆/秒交易。
當(dāng)交易雙方用戶采用無中心交易方式,亦即:用戶兩兩之間采用的是直接交易,可保證交易過程不受中心的制約,保證交易雙方用戶可同時完成超過40萬筆/秒交易。
總之,采用有中心交易或無中心交易時,都可以滿足中國數(shù)字貨幣交易速度為30筆/秒的設(shè)計標(biāo)準(zhǔn)。
在數(shù)字貨幣區(qū)塊鏈的各個節(jié)點端,采用“垂直認(rèn)證”技術(shù)建立的簽驗協(xié)議,可保證區(qū)塊鏈各個節(jié)點端的運行效率達(dá)到1000筆/秒,通過建立400個分布式區(qū)塊鏈社區(qū),可保證整個數(shù)字貨幣的區(qū)塊鏈系統(tǒng)運行速度,合計達(dá)到40萬筆/秒,因此,采用“垂直認(rèn)證”技術(shù)建立400個數(shù)字貨幣區(qū)塊鏈社區(qū),也可滿足中國數(shù)字貨幣建立區(qū)塊鏈處理速度達(dá)30筆/秒的設(shè)計需求。
[1]中國人民銀行.推動區(qū)塊鏈技術(shù)規(guī)范應(yīng)用的通知[R]. 2020,7.
[2]徐冠寧,郭建偉,胡祥義.一種基于區(qū)塊鏈技術(shù)的數(shù)字貨幣實現(xiàn)方法:202010748672.6[P].
[3]華為區(qū)塊鏈技術(shù)開發(fā)團(tuán)隊.區(qū)塊鏈技術(shù)及應(yīng)用[M].清華大學(xué)出版社,2019.
[4]胡祥義,趙桂芬,馬艷姣. 一種可信移動支付解決方案[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2016(4).
[5]劉惠瑩.區(qū)塊鏈安全造成20億美元經(jīng)濟損失,安全問題頻發(fā)讓人防不勝防[N].IT時報,2018,8,6.
[6]胡祥義.一種安全高效的區(qū)塊鏈實現(xiàn)方法:201810786886.5[P].