本發(fā)明屬于區(qū)塊鏈技術領域,具體涉及一種聯(lián)盟鏈網(wǎng)絡下采用異步方式的節(jié)點共識驗證方法。
背景技術:
區(qū)塊鏈技術具有天然的去中心化特征,可以通過共識算法能夠實現(xiàn)各網(wǎng)絡節(jié)點間的互通互信。區(qū)塊鏈中的聯(lián)盟鏈是由若干節(jié)點合作維護的一條區(qū)塊鏈,外界的節(jié)點想要動態(tài)加入聯(lián)盟需要獲得聯(lián)盟鏈中節(jié)點的許可。在具有大量節(jié)點的網(wǎng)絡中,節(jié)點之間是不信任的,網(wǎng)絡連接也變得不可預測,共識協(xié)議變得愈發(fā)重要。容錯協(xié)議能夠給網(wǎng)絡提供強大的安全性,保證了網(wǎng)絡的活躍度。
傳統(tǒng)的同步拜占庭容錯協(xié)議依賴于超時機制保證網(wǎng)絡的活躍度,由于實際網(wǎng)絡存在波動,網(wǎng)絡帶寬也在變化,傳遞中消息可能丟失,需要在本地設置一個時鐘,超過某個時間則使領導節(jié)點重新發(fā)送消息。而設置的時間參數(shù)難度較大,參數(shù)較小,消息可能不停的重復發(fā)送;參數(shù)較大,消息可能在途中已經(jīng)丟失,而子節(jié)點卻不能及時知道消息已經(jīng)丟失,最終結果還是要重發(fā)消息。
傳統(tǒng)的同步拜占庭容錯協(xié)議不是完全去中心化的,系統(tǒng)中存在一個領導節(jié)點,共識消息由領導節(jié)點接收以及發(fā)出。在每一個時間段系統(tǒng)按順序選擇一個領導節(jié)點,某一刻網(wǎng)絡帶寬變大,其他子節(jié)點無法接受領導節(jié)點發(fā)布的消息,認為領導節(jié)點的消息已丟失,會選出下一個領導節(jié)點,這樣攻擊者可能控制帶寬使系統(tǒng)一直處于選舉領導節(jié)點的過程中而陷入死循環(huán),系統(tǒng)將無法正常傳遞消息。
技術實現(xiàn)要素:
鑒于上述,本發(fā)明提供了一種聯(lián)盟鏈網(wǎng)絡下采用異步方式的節(jié)點共識驗證方法,沒有領導節(jié)點,是完全去中心化的,在網(wǎng)絡帶寬變化時,節(jié)點接收消息不會受到影響;系統(tǒng)不存在超時機制,忽略實時時鐘,廣播消息的處理過程完全依賴網(wǎng)絡帶寬,在網(wǎng)絡帶寬較大時,系統(tǒng)可以獲得很好的吞吐量。
一種聯(lián)盟鏈網(wǎng)絡下采用異步方式的共識驗證方法,包括如下步驟:
(1)構建聯(lián)盟鏈網(wǎng)絡下采用異步方式實現(xiàn)共識驗證的系統(tǒng)運行框架;
(2)當交易信息來臨時,網(wǎng)絡中的節(jié)點把接收到的交易信息作為輸入并儲存于緩沖區(qū)中;
(3)節(jié)點從緩存隊列開頭取出第一份交易信息作為自己提出的交易請求序列,并對該序列進行加密;
(4)節(jié)點對加密后的交易請求序列進行廣播,在廣播過程中使用糾刪碼來確保傳輸消息的完整性,使用Merkle樹來確保不同節(jié)點的消息一致性;
(5)節(jié)點采用二進制拜占庭共識協(xié)議對接收到的交易請求序列進行投票,達成共識后對序列進行解密,最終獲得本周期內(nèi)寫入?yún)^(qū)塊的交易信息。
所述步驟(1)的具體實現(xiàn)方法為:首先,在聯(lián)盟鏈網(wǎng)絡中布置一定量的節(jié)點,任意兩個節(jié)點之間存在可信任的點對點通道,節(jié)點通過建立公鑰和秘鑰的形式與受信任的其他節(jié)點進行交互;其次,所述節(jié)點把收到的交易信息作為輸入,目標是在交易信息上達成共識并提交交易請求序列;進而,保證聯(lián)盟鏈網(wǎng)絡中最多存有f個錯誤節(jié)點,且滿足3f+1≤N,N為節(jié)點總數(shù)。
所述步驟(2)的具體實現(xiàn)方法為:當交易信息來臨時,節(jié)點把接收到的交易信息作為輸入并儲存在緩沖區(qū)中;節(jié)點的緩沖區(qū)是無界的,若節(jié)點中存入大小為B的交易信息,該交易信息被分割成N份,每份的大小為B/N,N為節(jié)點總數(shù);每個節(jié)點存的交易信息內(nèi)容相同但順序不同,若一個正確節(jié)點能夠輸出一個交易信息,則每個正確節(jié)點都能夠輸出一個交易信息。
所述步驟(3)的具體實現(xiàn)方法為:首先,由于每個節(jié)點緩沖區(qū)內(nèi)存放的交易信息順序不同,每個節(jié)點從緩存隊列開頭提取出第一份交易信息作為待廣播的交易請求序列,所以各節(jié)點廣播的交易信息各不相同;其次,節(jié)點采用門限加密方法對交易請求序列進行加密,所述門限加密方法是使用全局公鑰加密消息,每個節(jié)點使用私鑰對密文進行解密獲得解密碎片,一定數(shù)量的解密碎片拼湊在一起就能獲得原始消息,這樣網(wǎng)絡中節(jié)點必須一起工作才能解密,只要大于錯誤節(jié)點數(shù)量的正確節(jié)點計算解密出密文,明文便可以恢復。
所述步驟(4)的具體實現(xiàn)方法為:首先,節(jié)點將需要廣播的交易請求序列分成多個數(shù)據(jù)塊并加入一定的校驗塊,這樣即使在廣播過程中有部分交易信息丟失,還是能夠保證每個節(jié)點接收到盡量多原有交易信息的概率盡可能大;其次,節(jié)點對本地存儲的交易信息通過哈希過程建立起Merkle樹的形式,所述Merkle樹用于檢查節(jié)點之間交易消息的一致性,只需要通過判斷Merkle樹的根值;節(jié)點在需要廣播的交易請求序列中加入該根值,如果發(fā)出方節(jié)點的交易信息根值與接收方節(jié)點的交易信息根值不一致,則接收方節(jié)點放棄該交易請求序列,若一致接收方節(jié)點則廣播出自己已接收到的回執(zhí),從而確保發(fā)出方的交易信息和接收方的交易信息是相同的。
所述步驟(5)的具體實現(xiàn)方法為:節(jié)點接收到交易請求序列后采用二進制拜占庭共識協(xié)議進行投票,基于少數(shù)服從多數(shù)的原則決定該交易請求序列是否可以加入提交隊列,每個節(jié)點等待自己接收到的所有交易請求序列均投票通過后便可提交,進而通過門限解密方法對這些交易請求序列進行解密后最終得到本周期內(nèi)寫入?yún)^(qū)塊的交易信息。
本發(fā)明方法能夠在聯(lián)盟鏈場景下采用異步方式實現(xiàn)各節(jié)點的共識驗證,聯(lián)盟鏈網(wǎng)絡系統(tǒng)完全去中心化,不存在超時機制,不用調(diào)節(jié)時間參數(shù),不需要考慮網(wǎng)絡波動,能夠抓取網(wǎng)絡可用帶寬,廣播消息完全依賴網(wǎng)絡帶寬;在帶寬相對大時,本發(fā)明能夠保證較高的網(wǎng)絡吞吐量,系統(tǒng)具有安全性,和常用的同步拜占庭容錯共識方法相比在網(wǎng)絡中有大量節(jié)點時具有更高的網(wǎng)絡吞吐量。
附圖說明
圖1為本發(fā)明中提取交易序列及加密序列的流程示意圖。
圖2為本發(fā)明中采用糾刪碼和Merkle樹保證交易信息完整一致性的流程示意圖。
圖3為本發(fā)明中投票共識及解密序列的流程示意圖。
圖4為本發(fā)明共識方法的總體流程示意圖。
具體實施方式
為了更為具體地描述本發(fā)明,下面結合附圖及具體實施方式對本發(fā)明的技術方案進行詳細說明。
本發(fā)明在聯(lián)盟鏈場景下采用異步方式的節(jié)點共識驗證方法,包括如下步驟:
(1)構建聯(lián)盟鏈場景下采用異步方式實現(xiàn)共識驗證的系統(tǒng)運行框架。
聯(lián)盟鏈中存在一定量的節(jié)點,每兩個節(jié)點之間存在可信任的點對點通道,節(jié)點可以與受信任的其他節(jié)點進行交互。
若聯(lián)盟鏈中總共布置N個點,P0至Pn-1,這N個節(jié)點把收到的交易信息作為輸入,目標是在交易信息上達成共識提交請求交易序列;聯(lián)盟鏈中最多有f個錯誤節(jié)點,且滿足3f+1≤N,節(jié)點通過建立公鑰和秘鑰可以與受信任的其他節(jié)點進行交互。
(2)當交易信息來臨時,節(jié)點把接收到的交易作為輸入并將它們儲存在緩沖區(qū)。節(jié)點的緩沖區(qū)是無界的,節(jié)點中存入大小為B的交易信息,這些交易信息分割成N份,每份有交易信息B/N個,每個節(jié)點存的信息內(nèi)容相同但順序不同;一個正確的節(jié)點能夠輸出一個交易信息,則每個正確的節(jié)點都能夠輸出一個交易信息。
(3)節(jié)點從緩存隊列開頭取出第一份交易請求作為自己提出的待提交交易序列,使用門限加密對該序列進行加密。
本步驟過程如圖1所示,由于每個節(jié)點緩沖區(qū)內(nèi)存放的信息順序不同,每個節(jié)點取相應的緩存隊列開頭的第一份交易請求廣播出去,所以每個節(jié)點廣播的信息各不相同,所涉及的加密方法為門限加密方法TPKE,該門限加密的方法是使用全局公鑰加密消息,每個節(jié)點使用私鑰進行解密獲得解密碎片,一定數(shù)量的解密碎片拼湊在一起就能獲得原始消息,這樣網(wǎng)絡節(jié)點必須一起工作才能解密,一旦比錯誤節(jié)點多一個的正確節(jié)點計算和解密出密文,明文便可以恢復。
(4)節(jié)點將加密的候選交易序列廣播,使用糾刪碼來確保傳輸消息的完整性,使用Merkle樹來確保不同節(jié)點的消息一致性。
本步驟過程如圖2所示,在需要廣播的交易序列中加入一定的校驗碼,使原始的交易序列增加,這樣即使在廣播過程中有部分交易信息丟失,還是能夠保證每個節(jié)點接收到盡量多的原有交易信息的概率盡可能大。Merkle樹用于檢查兩個節(jié)點消息的一致性,只需要判斷Merkle樹的根值,如果發(fā)出方的交易信息的根值與接收方的交易信息根值不一致,則放棄這個交易信息,一致則廣播出自己的接收到的回執(zhí)然后進行下一步,確保發(fā)出的交易信息和接收的交易信息是同一項。
(5)節(jié)點使用二進制拜占庭共識協(xié)議來對候選的請求序列投票,達成共識后使用門限解密對交易序列消息解密,獲得最終本周期內(nèi)寫入?yún)^(qū)塊的交易請求。
本步驟過程如圖3所示,節(jié)點接收到廣播的交易序列并進行投票,基于少數(shù)服從多數(shù)的原則決定該交易序列是否可以加入提交序列。每個節(jié)點等待所有投票通過的交易序列組成將提交的交易序列,將其通過門限解密方法解密后得到最終本周期內(nèi)寫入?yún)^(qū)塊的交易信息。
以下為一個具體的實施案例,該實施案例中的聯(lián)盟鏈網(wǎng)絡布置有N個節(jié)點,P0至Pn-1,最多存在f個錯誤節(jié)點,且滿足3f+1≤N,這N個節(jié)點把收到的B大小的交易信息存入緩沖區(qū)中,每個節(jié)點都將交易分割為N份,每份有B/N個??傮w流程如圖4所示,在第一個周期里,第一步,所有節(jié)點選擇自己緩存序列中第一份B/N大小的交易信息,用門限加密方法將其進行加密處理得到加密的候選交易序列{vj}。第二步,每個節(jié)點將自己加密的候選交易序列{vj}加入一定量糾刪碼組成新的序列{sj},將其廣播出去,PK為公鑰,SKi為節(jié)點Pi的私鑰,每個節(jié)點通過公鑰PK和私鑰SKi用Merkle樹檢驗接收到的廣播序列是否是某個節(jié)點發(fā)出的,確保接收方與發(fā)出方的消息一致性。第三步,每個節(jié)點使用二進制共識協(xié)議來對候選的請求序列投票,投票依據(jù)少數(shù)服從多數(shù)原則對每個{sj}進行投票,投完票之后廣播出自己的投票信息,確定待提交的交易序列{s'j},然后利用門限解密對待提交交易序列{s'j}進行解密得到最終本周期內(nèi)寫入?yún)^(qū)塊的交易信息{yj}。每個節(jié)點等待自己接收到所有投票通過的信息即可提交,不必等待其他節(jié)點。接著每個節(jié)點各自開始自己的第二周期。
上述對實施例的描述是為便于本技術領域的普通技術人員能理解和應用本發(fā)明。熟悉本領域技術的人員顯然可以容易地對上述實施例做出各種修改,并把在此說明的一般原理應用到其他實施例中而不必經(jīng)過創(chuàng)造性的勞動。因此,本發(fā)明不限于上述實施例,本領域技術人員根據(jù)本發(fā)明的揭示,對于本發(fā)明做出的改進和修改都應該在本發(fā)明的保護范圍之內(nèi)。