一種基于區(qū)塊鏈多因子交叉驗(yàn)證的虛擬貨幣交易驗(yàn)證方法
【專利摘要】本發(fā)明針對基于區(qū)塊鏈的虛擬貨幣易受到51%攻擊而產(chǎn)生交易的雙花問題,提出了一種基于多因子交叉驗(yàn)證的虛擬貨幣交易驗(yàn)證方法,該方法周期性的查詢并備份歷史區(qū)塊鏈分支,將已確認(rèn)過的交易信息組織成易于查詢的哈希鏈表數(shù)組,避免了由于區(qū)塊鏈進(jìn)化而導(dǎo)致分支交易信息丟失;在虛擬貨幣進(jìn)行交易時(shí),不僅對當(dāng)前主區(qū)塊鏈中記錄的支付方信息、接收方信息、資金來源、貨幣交易數(shù)量等進(jìn)行檢查,同時(shí)查詢備份的分支區(qū)塊鏈,檢查當(dāng)前交易是否與分支鏈上記錄的歷史交易存在同一資金來源,若有交易未能通過檢查,則礦工針對該交易發(fā)出全網(wǎng)告警,從而避免由非法交易引起的double?spending問題。
【專利說明】
一種基于區(qū)塊鏈多因子交叉驗(yàn)證的虛擬貨幣交易驗(yàn)證方法
技術(shù)領(lǐng)域
[0001 ]本發(fā)明涉及一種虛擬貨幣交易安全驗(yàn)證方法,屬于信息安全領(lǐng)域。
【背景技術(shù)】
[0002]自2009年比特幣作為全球第一種被廣泛使用的加密貨幣以來,網(wǎng)絡(luò)環(huán)境中已出現(xiàn)多種類型的虛擬貨幣,如萊特幣Litecoin、無限幣Inf initecoin、便士幣Pennies、瑞波幣Ripple等。虛擬貨幣由于其去中心化、隱私保護(hù)能力強(qiáng)、交易方便等優(yōu)點(diǎn)迅速受到了世界范圍的關(guān)注與流行,2014年美國加州立法將包括比特幣在內(nèi)的數(shù)字貨幣規(guī)定為該州的合法貨幣,同年美國國稅局宣布加密數(shù)字資產(chǎn)的合法化。2015年2月,歐洲中央銀行發(fā)布《虛擬貨幣體系》的研究報(bào)告,肯定了虛擬貨幣的合法用途。2014年,中國人民銀行(央行)就專門組建了數(shù)字貨幣研究團(tuán)隊(duì),2016年I月,央行主持召開數(shù)字貨幣研討會,提出研究我國的數(shù)字貨幣,爭取早日發(fā)行由央行的數(shù)字貨幣。
[0003]區(qū)塊鏈(Blockchain)技術(shù)作為支撐大部分加密貨幣的核心技術(shù)被廣泛應(yīng)用于比特幣等虛擬貨幣,虛擬貨幣的初始發(fā)放記錄、挖掘記錄、交易轉(zhuǎn)移記錄等都記錄在動(dòng)態(tài)變化的區(qū)塊鏈中。區(qū)塊鏈本質(zhì)上是一個(gè)去中心化的數(shù)據(jù)庫,基于密碼技術(shù)產(chǎn)生一系列的區(qū)塊,每個(gè)區(qū)塊包含了一組虛擬貨幣的交易信息。隨著虛擬貨幣交易的不斷產(chǎn)生,礦工(虛擬貨幣發(fā)掘者)不斷解密并驗(yàn)證交易,創(chuàng)造新的區(qū)塊來記錄最新的交易,區(qū)塊鏈會一直增長和延長。新的區(qū)塊按照時(shí)間順序線性地被補(bǔ)充到原有的區(qū)塊末端,就構(gòu)成了區(qū)塊鏈。然而,虛擬貨幣交易的區(qū)塊鏈技術(shù)易受到51%攻擊:攻擊者首先通過轉(zhuǎn)移支付虛擬貨幣獲利,然后通過掌握全網(wǎng)51 %的計(jì)算能力在原區(qū)塊鏈的傍路分支產(chǎn)生新的更長的區(qū)塊鏈,則攻擊者原來轉(zhuǎn)移支付的交易記錄將被系統(tǒng)丟棄,從而能夠使用已轉(zhuǎn)移支付過的虛擬貨幣繼續(xù)參與交易,產(chǎn)生雙花double-spending,即同一資金來源的虛擬貨幣被用于了兩次支付。
[0004]2014年美國康奈爾大學(xué)的IC3 (Initiative for Crypto Currencies andContracts)研究團(tuán)隊(duì)對虛擬貨幣協(xié)議漏洞進(jìn)行了研究,提出利用礦工間的相互不信任關(guān)系建立虛擬貨幣的公平挖掘協(xié)議,以防止部分礦工通過挖掘能力結(jié)盟而獲得壟斷性的資產(chǎn)挖掘優(yōu)勢而進(jìn)行51%攻擊(Nonoutsourceable Scratch-Off Puzzles to DiscourageBitcoin Mining Coalit1ns.Workshop on Economics and Informat1n Security,1-19,2014)。然而該方法需要假設(shè)礦工隸屬于互不信任的挖礦組織,隨著擁有超強(qiáng)運(yùn)算能力挖礦團(tuán)隊(duì)的產(chǎn)生,以及新的比特幣“25%”漏洞的發(fā)現(xiàn),基于礦工間不信任關(guān)系的防御協(xié)議難以有效保護(hù)虛擬貨幣交易安全。文獻(xiàn)“基于區(qū)塊鏈的供應(yīng)鏈動(dòng)態(tài)多中心協(xié)同認(rèn)證模型”(網(wǎng)絡(luò)與信息安全學(xué)報(bào),2(1):27-33,2016)提出一種基于多CA中心的交易協(xié)同認(rèn)證技術(shù),提出利用多個(gè)CA中心協(xié)同對交易的合法性進(jìn)行認(rèn)證,然而該方法引入了新的認(rèn)證中心,與虛擬貨幣去中心化的要求相違背。
[0005]針對上述的缺陷,本發(fā)明提出了一種基于多因子交叉驗(yàn)證的虛擬貨幣交易驗(yàn)證方法,該方法周期性地保存分支區(qū)塊鏈中的交易信息,礦工收到虛擬貨幣交易記錄后,分別基于主區(qū)塊鏈和保存的分支區(qū)塊鏈對交易記錄中的資金來源、支出地址、接收地址、貨幣交易金額進(jìn)行多因子確認(rèn),只有合法交易才能通過檢查,對于未通過檢查的交易,礦工向整個(gè)虛擬貨幣網(wǎng)絡(luò)發(fā)出告警。
[0006]本發(fā)明與現(xiàn)有技術(shù)相比具有如下優(yōu)點(diǎn):
I)避免了基于區(qū)塊替換的交易欺騙
通過在虛擬貨幣轉(zhuǎn)移交付過程中,同時(shí)對現(xiàn)有主區(qū)塊鏈及備份的分支區(qū)塊鏈上的交易記錄進(jìn)行合法性檢查,能夠發(fā)現(xiàn)通過運(yùn)算能力操控而實(shí)現(xiàn)的非法交易雙花double-spending問題。
[0007]不需對現(xiàn)有區(qū)塊鏈結(jié)構(gòu)進(jìn)行修改
本發(fā)明利用可在網(wǎng)上公開查到的區(qū)塊鏈實(shí)現(xiàn)對區(qū)塊鏈分支鏈條的實(shí)時(shí)備份,不必對現(xiàn)有區(qū)塊鏈數(shù)據(jù)結(jié)構(gòu)進(jìn)行調(diào)整和修改,易于在現(xiàn)有的基于區(qū)塊鏈技術(shù)的虛擬貨幣系統(tǒng)中實(shí)現(xiàn)。
[0008]未引入新的中心
本發(fā)明由各個(gè)礦工根據(jù)各自保存的區(qū)塊鏈信息對收到的網(wǎng)絡(luò)交易單中的交易信息進(jìn)行分布式驗(yàn)證,若發(fā)現(xiàn)非法交易,則向全網(wǎng)發(fā)布交易警告,整個(gè)過程不涉及創(chuàng)建新的交易控制中心或輔助交易驗(yàn)證的CA/PKI等新的中心,符合虛擬貨幣無、去中心化的思想。
[0009]在詳細(xì)闡述本發(fā)明前,先做如下名詞定義:
定義1:礦工(miner)虛擬貨幣挖掘和交易的參與者,每個(gè)礦工擁有全部的交易賬本,能夠?qū)μ摂M貨幣交易網(wǎng)絡(luò)中發(fā)生的每一筆交易進(jìn)行查詢和驗(yàn)證,同時(shí)礦工間發(fā)生交易時(shí),會將交易信息發(fā)布到全網(wǎng)中。
[00?0] 定義2:交易單(transact1n note)礦工將交易記錄封裝在交易單中廣播給全網(wǎng)其余礦工,交易單內(nèi)容主要包括:交易單ID,資金來源(上一交易單ID),上一交易單付款人簽字,資金去向(收款方地址),付款金額,付款人簽字(用于身份鑒別)。
[0011]定義3:主區(qū)塊鏈(main block chain)主區(qū)塊鏈?zhǔn)侵赣扇W(wǎng)計(jì)算而得到的最長的區(qū)塊鏈,長度通常以區(qū)塊數(shù)量和區(qū)塊計(jì)算整體難度來衡量,鏈中的每個(gè)節(jié)點(diǎn)為一個(gè)包含了虛擬貨幣交易記錄區(qū)塊,記錄的主要內(nèi)容有:資金來源信息、付款方地址、收款方地址、交易金額、時(shí)間戳、收款方公鑰、付款方簽名。
[0012]定義4:分支區(qū)塊鏈(branch block chain)分支區(qū)塊鏈?zhǔn)侵赋鲄^(qū)塊鏈以外,區(qū)塊鏈中的支鏈,支鏈隨著礦工對交易的不斷確認(rèn)而不斷合并調(diào)整,最終被取消,鏈中的每個(gè)節(jié)點(diǎn)為一個(gè)包含了虛擬貨幣交易記錄區(qū)塊,記錄的主要內(nèi)容有:資金來源信息、付款方地址、收款方地址、交易金額、時(shí)間戳、收款方公鑰、付款方簽名。
[0013]定義5:雙花(doublespending)雙花指虛擬貨幣的交易付款方A首先將持有的虛擬貨幣轉(zhuǎn)賬支付給接收方B,然后將同一資金來源的虛擬貨幣再次支付給另一接收方C,C可以與A相同,從而達(dá)到同一筆虛擬貨幣使用兩次的目的。
[0014]為了實(shí)現(xiàn)雙花,如圖1所示,付款方A需要掌握超出全網(wǎng)51%的運(yùn)算能力(故名51%攻擊),A通過發(fā)布超出全網(wǎng)計(jì)算長度的區(qū)塊鏈,將原主鏈變?yōu)榉种ф?,分支鏈中的A->B的交易記錄將由于與新主鏈中的記錄A->C有相同的資金來源,而被認(rèn)為是無效記錄不被確認(rèn),從而使接收方B遭成損失。
【發(fā)明內(nèi)容】
[0015]本發(fā)明針對基于區(qū)塊鏈的虛擬貨幣易受到51%攻擊而產(chǎn)生交易的雙花問題,提出了一種基于多因子交叉驗(yàn)證的虛擬貨幣交易驗(yàn)證方法,該方法周期性的查詢并備份歷史區(qū)塊鏈分支,將已確認(rèn)過的交易信息組織成易于查詢的哈希鏈表數(shù)組,避免了由于區(qū)塊鏈進(jìn)化而導(dǎo)致分支交易信息丟失;在虛擬貨幣進(jìn)行交易時(shí),不僅對當(dāng)前主區(qū)塊鏈中記錄的支付方信息、接收方信息、資金來源、貨幣交易數(shù)量等進(jìn)行檢查,同時(shí)查詢備份的分支區(qū)塊鏈,檢查當(dāng)前交易是否與分支鏈上記錄的歷史交易存在同一資金來源,若有交易未能通過檢查,則礦工針對該交易發(fā)出全網(wǎng)告警,從而避免由非法交易引起的doub I e-spending問題。
【附圖說明】
[0016]圖1是雙花攻擊說明圖。
[0017]圖2是本發(fā)明的工作流程圖。。
[0018]圖3是區(qū)塊鏈周期掃描步驟。
[0019]圖4是分支區(qū)塊鏈交易信息保存步驟。
[0020]圖5是基于主區(qū)塊鏈的交易合法性驗(yàn)證步驟。
[0021 ]圖6是基于分支區(qū)塊鏈的交易合法性驗(yàn)證步驟。
[0022]
【具體實(shí)施方式】
以下結(jié)合附圖詳細(xì)說明本發(fā)明的具體方法。
[0023 ]圖2是本發(fā)明的工作流程。
[0024]圖2是本發(fā)明的工作流程,首先礦工節(jié)點(diǎn)執(zhí)行周期性掃描區(qū)塊鏈,查找自上一掃描周期以來新生成的分支區(qū)塊;然后讀取分支區(qū)塊中的交易信息,包括交易來源賬號、交易目標(biāo)賬號、交易金額、交易時(shí)間、交易確認(rèn)情況;將分支區(qū)塊中的交易信息插入到哈希鏈表數(shù)組中;當(dāng)收到新的廣播交易單時(shí),礦工對交易單中的未確認(rèn)交易記錄進(jìn)行多因子交叉驗(yàn)證,包括基于主區(qū)塊鏈交易合法性驗(yàn)證和基于分支區(qū)塊的交易合法性驗(yàn)證;若交易記錄未能通過主區(qū)塊鏈的交易合法性驗(yàn)證,則舍棄該交易記錄;若交記錄通過了主區(qū)塊鏈交易合法性驗(yàn)證,但未能通過分支區(qū)塊交易合法性驗(yàn)證,則向全網(wǎng)發(fā)出雙花警報(bào);若交易記錄通過了主區(qū)塊鏈和分支區(qū)塊鏈的合法性驗(yàn)證,則認(rèn)為該記錄為合法交易記錄進(jìn)行保存。
[0025]具體的,本發(fā)明提出一種基于區(qū)塊鏈多因子交叉驗(yàn)證的虛擬貨幣交易驗(yàn)證方法,包括以下步驟:
(1)區(qū)塊鏈周期性掃描步驟;
(2)分支區(qū)塊交易信息保存步驟;
(3)基于主區(qū)塊的交易合法性驗(yàn)證步驟;
(4)基于分支區(qū)塊的交易合法性驗(yàn)證步驟。
[0026]圖3是區(qū)塊鏈周期性掃描步驟。
[0027]圖3給出了區(qū)塊鏈周期性掃描步驟,礦工周期性掃描區(qū)塊鏈,查找自上一掃描周期結(jié)束以來新產(chǎn)生的區(qū)塊,若有兩個(gè)或更多個(gè)子區(qū)塊鏈鏈接到同一先導(dǎo)區(qū)塊,則發(fā)現(xiàn)分支區(qū)塊,除塊鏈數(shù)量最長的分支作為主鏈外,將其余分支區(qū)塊鏈作為查詢結(jié)果返回,周期性的掃描步驟具體如下: (1)在主鏈上查找前一個(gè)周期掃描結(jié)束的區(qū)塊:
1)若找到該區(qū)塊:則以該區(qū)塊作為起點(diǎn)區(qū)塊StartBlock開始查找分支區(qū)塊鏈;
2)若未找到該區(qū)塊:則說明主鏈自上一掃描周期結(jié)束后進(jìn)行了調(diào)整,需要繼續(xù)查找更早一個(gè)周期掃描結(jié)束的區(qū)塊位置,直至找到某一個(gè)周期在主鏈上的結(jié)束區(qū)塊作為本周期的掃描起點(diǎn)區(qū)塊StartBlock;
(2)從StartBlock開始沿主區(qū)塊鏈向后檢查分支區(qū)塊鏈,具體步驟如下:
1)若當(dāng)前檢測區(qū)塊存在兩個(gè)或兩個(gè)以上直接后繼區(qū)塊,則檢測到分支區(qū)塊鏈,將塊鏈最長的分支作為主區(qū)塊鏈,其余為分支區(qū)塊鏈,然后沿主區(qū)塊鏈后移一個(gè)區(qū)塊,繼續(xù)查找分支區(qū)塊鏈;
2)若當(dāng)前檢測區(qū)塊只有一個(gè)后繼區(qū)塊,則沿主區(qū)塊鏈后移一個(gè)區(qū)塊,繼續(xù)查找分支區(qū)塊鏈;
3)若當(dāng)前檢測區(qū)塊沒有后繼區(qū)塊,則本周期的掃描過程結(jié)束,記錄本次掃描結(jié)束時(shí)主鏈上區(qū)塊號,作為下掃描周期的起始區(qū)塊。
[0028]圖4分支區(qū)塊鏈交易信息保存步驟。
[0029]圖4給出了分支區(qū)塊鏈交易信息保存步驟,讀取區(qū)塊鏈周期性掃描步驟得到的分支區(qū)塊中包含的交易信息,并將交易信息保存到哈希鏈表數(shù)組中,具體步驟如下:
(1)以交易付款方地址address作為輸入產(chǎn)生哈希值index= hash(address);
(2)在哈希鏈表數(shù)組中查找索引值等于index的目標(biāo)鏈表頭,如未找到,則新建鏈表頭,設(shè)置鏈表的索引值為index;
(3)在目標(biāo)鏈表中插入新的交易記錄節(jié)點(diǎn),用于保存分支區(qū)塊中的交易信息,包括:交易資金來源,付款方地址,收款人地址,交易金額,時(shí)間戳,以及付款方簽名。
[0030]圖5基于主區(qū)塊鏈的交易合法性驗(yàn)證步驟。
[0031]圖5給出了基于主區(qū)塊的交易合法性驗(yàn)證步驟,該步驟根據(jù)主區(qū)塊鏈中記錄的交易信息,對礦工從網(wǎng)絡(luò)中接收到的交易單中的交易記錄進(jìn)行合法性驗(yàn)證,具體步驟如下:
(1)資金來源追溯驗(yàn)證:該步驟根據(jù)交易單上注明的資金來源信息,回溯主區(qū)塊鏈,查詢虛擬貨幣的來源是否與交易付款方地址一致,且資源來源金額應(yīng)大于或等于交易轉(zhuǎn)賬金額,否則發(fā)出非法交易警報(bào),警報(bào)內(nèi)容包括:本次驗(yàn)證的交易單ID,交易記錄所在的主鏈區(qū)塊號,交易的哈希值,以及利用礦工私鑰對上述信息的簽名;
(2)交易有效性驗(yàn)證:該步驟根據(jù)付款方地址,資金來源信息,交易金額查詢主區(qū)塊鏈,驗(yàn)證付款方給出的資金來源信息的有效性,若本次交易的資金來源已在過去的交易中支付給了其他收款方,則認(rèn)為發(fā)生了雙花交易,礦工向全網(wǎng)發(fā)出雙花警報(bào),警報(bào)內(nèi)容包括:本次驗(yàn)證的交易單ID,發(fā)現(xiàn)雙花的主鏈區(qū)塊號,雙花交易在主鏈區(qū)塊中的哈希值,以及利用礦工私鑰對上述信息的簽名。
[0032]圖6基于分支區(qū)塊鏈的交易合法性驗(yàn)證步驟。
[0033]圖6給出了基于分支區(qū)塊鏈的交易合法性驗(yàn)證步驟,該步驟根據(jù)哈希鏈表數(shù)組中存儲的分支區(qū)塊鏈中記錄的交易信息,對礦工從網(wǎng)絡(luò)中接收到的交易單中的交易記錄進(jìn)行合法性驗(yàn)證,具體步驟如下:
(1)以交易付款方地址address作為輸入產(chǎn)生哈希值index= hash(address);
(2)在哈希鏈表數(shù)組中查找索引值等于index的目標(biāo)鏈表頭,如未找到,則直接通過分支驗(yàn)證;
從鏈表頭開始逐一查找鏈表中的節(jié)點(diǎn),若本次交易的資金來源已在某一鏈表節(jié)點(diǎn)記錄的交易中支付給了其他收款方,則認(rèn)為發(fā)生了雙花交易,礦工向全網(wǎng)發(fā)出雙花告警,告警內(nèi)容包括:本次驗(yàn)證的交易單ID,交易資金來源,付款方地址,收款人地址,交易金額,時(shí)間戳,付款方簽名,以及利用礦工私鑰對上述信息的簽名。
【主權(quán)項(xiàng)】
1.一種基于多因子交叉驗(yàn)證的虛擬貨幣交易驗(yàn)證方法,其特征在于,所述方法包括以下步驟: (1)區(qū)塊鏈周期性掃描步驟,采用如下方法: 1)在主鏈上查找前一個(gè)周期掃描結(jié)束的區(qū)塊,采用如下方法: (a)若找到該結(jié)束區(qū)塊,則以該區(qū)塊作為本次掃描的起點(diǎn)區(qū)塊StartBlock; (b)若主鏈發(fā)生變化,未能找到上一個(gè)周期的掃描結(jié)束區(qū)塊,則繼續(xù)查找前一個(gè)周期的結(jié)束區(qū)塊,直至找到主區(qū)塊鏈上某一個(gè)周期的掃描結(jié)束區(qū)塊作為本周期的掃描起點(diǎn)區(qū)塊StartBlock; 2)從StartBlock開始沿主區(qū)塊鏈向后檢查分支區(qū)塊鏈,采用如下方法: (a)若當(dāng)前檢測區(qū)塊存在兩個(gè)或兩個(gè)以上直接后繼區(qū)塊,則檢測到分支區(qū)塊鏈,將塊鏈最長的分支作為主區(qū)塊鏈,其余為分支區(qū)塊鏈,然后沿主區(qū)塊鏈后移一個(gè)區(qū)塊,繼續(xù)查找分支區(qū)塊鏈; (b)若當(dāng)前檢測區(qū)塊只有一個(gè)后繼區(qū)塊,則沿主區(qū)塊鏈后移一個(gè)區(qū)塊,繼續(xù)查找分支區(qū)塊鏈; (C)若當(dāng)前檢測區(qū)塊沒有后繼區(qū)塊,則本周期的掃描過程結(jié)束,記錄本次掃描結(jié)束時(shí)主鏈上區(qū)塊號,作為下一掃描周期的起始區(qū)塊; (2)分支區(qū)塊鏈交易信息保存步驟,采用如下方法: 1)以交易付款方地址address作為輸入產(chǎn)生哈希值index= hash(address); 2)在哈希鏈表數(shù)組中查找索引值等于index的目標(biāo)鏈表頭,如未找到,則新建鏈表頭,設(shè)置鏈表的索引值為index; 3)在目標(biāo)鏈表中插入新的交易記錄節(jié)點(diǎn),用于保存分支區(qū)塊中的交易信息,包括:交易資金來源,付款方地址,收款人地址,交易金額,時(shí)間戳,以及付款方簽名; (3)基于主區(qū)塊鏈的交易合法性驗(yàn)證步驟,采用如下方法: 1)資金來源追溯驗(yàn)證:該步驟根據(jù)交易單上注明的資金來源信息,回溯主區(qū)塊鏈,查詢虛擬貨幣的來源是否與交易付款方地址一致,且資源來源金額應(yīng)大于或等于交易轉(zhuǎn)賬金額,否則發(fā)出非法交易警報(bào); 2)交易有效性驗(yàn)證:該步驟根據(jù)付款方地址,資金來源信息,交易金額查詢主區(qū)塊鏈,驗(yàn)證付款方給出的資金來源信息的有效性,若本次交易的資金來源已在過去的交易中支付給了其他收款方,則認(rèn)為發(fā)生了雙花交易,礦工向全網(wǎng)發(fā)出雙花警報(bào); (4)基于分支區(qū)塊鏈的交易合法性驗(yàn)證步驟,采用如下方法: 1)以交易付款方地址address作為輸入產(chǎn)生哈希值index= hash(address); 2)在哈希鏈表數(shù)組中查找索引值等于index的目標(biāo)鏈表頭,如未找到,則直接通過分支驗(yàn)證; 3)從鏈表頭開始逐一查找鏈表中的節(jié)點(diǎn),若本次交易的資金來源已在某一鏈表節(jié)點(diǎn)記錄的交易中支付給了其他收款方,則認(rèn)為發(fā)生了雙花交易,礦工向全網(wǎng)發(fā)出雙花告警。
【文檔編號】G06Q20/40GK105931052SQ201610250198
【公開日】2016年9月7日
【申請日】2016年4月21日
【發(fā)明人】陳文 , 李濤, 董雪
【申請人】四川大學(xué)