本申請屬于交易記錄領域,特別涉及一種區(qū)塊鏈投票記賬模式下的記賬方法及系統(tǒng)、投票節(jié)點及記賬節(jié)點。
背景技術(shù):
在區(qū)塊鏈技術(shù)中,采用的是分布式賬本模式,即所有記賬節(jié)點本地都維護同一份賬本,交易在區(qū)塊鏈上廣播,所有記賬節(jié)點將接收到的交易按照相同的順序記錄賬本。
現(xiàn)有技術(shù)中,保證所有記賬節(jié)點中的賬本一致的方法主要為共識機制,而共識機制中常用的方法為投票記賬模式,投票記賬模式需要通過一系列交互以確保取得多數(shù)節(jié)點同意,按照同意的順序?qū)⒔灰子浫胭~本,節(jié)點在交互過程中都需要通過私鑰簽名、公鑰驗證的方式進行身份確認,私鑰/公鑰或是固化在邏輯里,或是固化在節(jié)點芯片里或是加密機里,如果一旦被人破解,整個投票系統(tǒng)將不再安全,如果經(jīng)常改變私鑰/公鑰對,需要對所有節(jié)點進行升級,非常不方便。
技術(shù)實現(xiàn)要素:
本申請?zhí)峁┮环N區(qū)塊鏈投票記賬模式下的記賬方法及系統(tǒng)、記賬節(jié)點及投票節(jié)點,用于解決現(xiàn)有技術(shù)中的區(qū)塊鏈投票記賬模式下的身份認證所需私鑰/公鑰固化在投票節(jié)點的芯片里,使得私鑰/公鑰不易改變,一旦破解,使得整個投票系統(tǒng)不再安全的問題。
為了解決上述技術(shù)問題,本申請的一技術(shù)方案為提供一種從記賬節(jié)點側(cè)描述的區(qū)塊鏈投票記賬模式下的記賬方法,包括:將區(qū)塊發(fā)送給投票節(jié)點,其中,所述區(qū)塊包括區(qū)塊頭及交易清單;
接收投票節(jié)點發(fā)送的投票結(jié)果,其中,所述投票結(jié)果包括區(qū)塊哈希簽名、本次有效的公鑰、區(qū)塊哈希新簽名;
搜索投票節(jié)點上次進行有效投票的區(qū)塊哈希新簽名,以驗證所述投票結(jié)果的有效性;以及
統(tǒng)計投票結(jié)果為有效的投票節(jié)點個數(shù),若統(tǒng)計的投票節(jié)點個數(shù)大于或等于預定閾值,則將所有有效的投票結(jié)果記入所述區(qū)塊頭中,將更新的區(qū)塊存入賬本,并將更新的區(qū)塊發(fā)送給所有其它記賬節(jié)點。
本申請另一技術(shù)方案為提供一種從投票節(jié)點側(cè)描述的區(qū)塊鏈投票記賬模式下的記賬方法,包括:
接收一記賬節(jié)點發(fā)送的區(qū)塊,其中,所述區(qū)塊包括區(qū)塊頭及交易清單;
對所述區(qū)塊進行合法性驗證,若驗證通過則使用本次有效的私鑰對所述區(qū)塊的哈希值進行簽名,形成區(qū)塊哈希簽名;產(chǎn)生下次有效的私鑰及公鑰;使用下次有效的私鑰對區(qū)塊的哈希值進行簽名,形成區(qū)塊哈希新簽名;以及
將區(qū)塊哈希簽名、本次有效的公鑰及區(qū)塊哈希新簽名發(fā)送至所述記賬節(jié)點。
本申請再一技術(shù)方案為提供一種區(qū)塊鏈投票記賬模式下的記賬節(jié)點,包括:
發(fā)送模塊,用于將區(qū)塊發(fā)送給投票節(jié)點,其中,所述區(qū)塊包括區(qū)塊頭及交易清單;
接收模塊,用于接收投票節(jié)點發(fā)送的投票結(jié)果,其中,所述投票結(jié)果包括區(qū)塊哈希簽名、本次有效的公鑰、區(qū)塊哈希新簽名;
驗證模塊,用于搜索投票節(jié)點上次進行有效投票的區(qū)塊哈希新簽名,以驗證所述投票結(jié)果的有效性;以及
處理模塊,用于統(tǒng)計投票結(jié)果為有效的投票節(jié)點個數(shù),若統(tǒng)計的投票節(jié)點個數(shù)大于或等于預定閾值,則將所有有效的投票結(jié)果記入所述區(qū)塊頭中,將更新的區(qū)塊存入賬本,并將更新的區(qū)塊通過所述發(fā)送模塊發(fā)送給所有其它記賬節(jié)點。
本申請的又一技術(shù)方案為提供一種區(qū)塊鏈投票記賬模式下的投票節(jié)點,包括:
接收模塊,用于接收一記賬節(jié)點發(fā)送的區(qū)塊,其中,所述區(qū)塊包括區(qū)塊頭及交易清單;
驗證模塊,用于對所述區(qū)塊進行合法性驗證,若驗證通過則啟動第一簽名模塊、密鑰對產(chǎn)生模塊及第二簽名模塊;
第一簽名模塊,用于使用本次有效的私鑰對所述區(qū)塊的哈希值進行簽名,形成區(qū)塊哈希簽名;
密鑰對產(chǎn)生模塊,用于產(chǎn)生下次有效的私鑰及公鑰;
第二簽名模塊,用于使用下次有效的私鑰對區(qū)塊的哈希值進行簽名,形成區(qū)塊哈希新簽名;以及
發(fā)送模塊,用于將區(qū)塊哈希簽名、本次有效的公鑰及區(qū)塊哈希新簽名發(fā)送至所述記賬節(jié)點。
本申請最后一技術(shù)方案為提供一種區(qū)塊鏈投票記賬模式下的記賬系統(tǒng),包括多個上述技術(shù)方案中的記賬節(jié)點及多個上述技術(shù)方案中的投票節(jié)點,其中之一記賬節(jié)點發(fā)送區(qū)塊時,其它記賬節(jié)點無權(quán)發(fā)送區(qū)塊。
本申請中,記賬節(jié)點將區(qū)塊發(fā)送給投票節(jié)點;投票節(jié)點接收到區(qū)塊后,動態(tài)產(chǎn)生下次有效的私鑰及公鑰,使用本次有效的私鑰對所述區(qū)塊的哈希值進行簽名,形成區(qū)塊哈希簽名,使用下次有效的私鑰對區(qū)塊的哈希值進行簽名,形成區(qū)塊哈希新簽名,將區(qū)塊哈希簽名、本次有效的公鑰及區(qū)塊哈希新簽名發(fā)送至記賬節(jié)點;記賬節(jié)點搜索投票節(jié)點上次進行有效投票的區(qū)塊哈希新簽名,以驗證投票結(jié)果的有效性;統(tǒng)計投票結(jié)果為有效的投票節(jié)點個數(shù),若統(tǒng)計的投票節(jié)點個數(shù)大于或等于預定閾值,則將所有有效的投票結(jié)果記入所述區(qū)塊頭中,將更新后的區(qū)塊存入賬本,并發(fā)送給所有其它記賬節(jié)點。本申請通過采用私鑰簽名的方式進行投票,每次投票后作廢私鑰/公鑰對,并重新生成新的私鑰/公鑰對,使得私鑰及公鑰僅一次有效,防止密鑰被破解后用來進行賬本攻擊,使得記賬的安全性得到很大提升。
附圖說明
為了更清楚地說明本申請實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請的一些實施例,對于本領域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本申請實施例的從記賬節(jié)點側(cè)描述的區(qū)塊鏈投票記賬模式下的記賬方法流程圖;
圖2為本申請實施例的驗證投票結(jié)果有效性的流程圖;
圖3為本申請實施例的從投票節(jié)點側(cè)描述的區(qū)塊鏈投票記賬模式下的記賬方法流程圖;
圖4為本申請實施例的記賬節(jié)點的結(jié)構(gòu)圖;
圖5為本申請實施例的投票節(jié)點的結(jié)構(gòu)圖;
圖6為本申請實施例的區(qū)塊鏈投票記賬模式下的記賬系統(tǒng)結(jié)構(gòu)圖;
圖7為本申請具體實施例的區(qū)塊鏈投票記賬模式下的記賬方法流程圖;
圖8為本申請具體實施例的記賬節(jié)點發(fā)送至投票節(jié)點的區(qū)塊示意圖;
圖9為本申請具體實施例的記賬節(jié)點更新后的區(qū)塊示意圖;
圖10為本申請具體實施例的記賬節(jié)點中賬本示意圖。
具體實施方式
為了使本申請的技術(shù)特點及效果更加明顯,下面結(jié)合附圖對本申請的技術(shù)方案做進一步說明,本申請也可有其他不同的具體實例來加以說明或?qū)嵤?,任何本領域技術(shù)人員在權(quán)利要求范圍內(nèi)做的等同變換均屬于本申請的保護范疇。
在本說明書的描述中,參考術(shù)語“一個實施例”、“一個具體實施例”、“一些實施例”、“例如”、“示例”、“具體示例”或“一些示例”等的描述意指結(jié)合該實施例或示例描述的具體特征、結(jié)構(gòu)、材料或者特點包含于本申請的至少一個實施例或示例中。在本說明書中,對上述術(shù)語的示意性表述不一定指的是相同的實施例或示例。而且,描述的具體特征、結(jié)構(gòu)、材料或者特點可以在任何的一個或多個實施例或示例中以合適的方式結(jié)合。各實施例中涉及的步驟順序用于示意性說明本申請的實施,其中的步驟順序不作限定,可根據(jù)需要作適當調(diào)整。
本申請所述的記賬節(jié)點及投票節(jié)點為區(qū)塊鏈中的節(jié)點,對應的實體裝置可以為具有計算與存儲功能的個人計算機或服務器,甚至是具有一定計算和存儲能力的任何個人終端,例如平板電腦,手機等。具體實施時,可將記賬節(jié)點及投票節(jié)點集成于同一實體裝置中,即實體裝置既具有投票功能也具有記賬功能。
如圖1所示,圖1為從記賬節(jié)點側(cè)描述的區(qū)塊鏈投票記賬模式下的記賬方法流程圖。本申請通過采用私鑰簽名的方式進行投票,每次投票后作廢私鑰/公鑰對,并重新生成新的私鑰/公鑰對,使得私鑰及公鑰僅一次有效,防止密鑰被破解后用來進行賬本攻擊,使得記賬的安全性得到很大提升。
具體的,記賬節(jié)點側(cè)描述的區(qū)塊鏈投票記賬模式下的記賬方法包括:
步驟101:將區(qū)塊發(fā)送給投票節(jié)點,其中,所述區(qū)塊包括區(qū)塊頭及交易清單。
詳細的說,區(qū)塊頭包括投票信息存儲區(qū)域及其他信息存儲區(qū)域,其中,投票信息存儲區(qū)域處為空,如圖8所示,待根據(jù)投票節(jié)點的投票結(jié)果來填充,其他信息存儲區(qū)域存儲有控制信息、驗證信息、及區(qū)塊的哈希值(區(qū)塊的哈希值也可由投票節(jié)點計算)等,本申請對此不作限定。
區(qū)塊中的交易清單由發(fā)送區(qū)塊的記賬節(jié)點收集,如為一定時間內(nèi)所涉及到的交易,具體如為存款交易請求、取款交易請求及查詢交易請求等。
具體實施時,一記賬節(jié)點在發(fā)送區(qū)塊時,其他記賬節(jié)點不具有權(quán)限發(fā)送區(qū)塊,具體由哪個記賬節(jié)點發(fā)送區(qū)塊可通過現(xiàn)有技術(shù)的算法確定,本申請對此不作限定。
步驟102:接收所述投票節(jié)點發(fā)送的投票結(jié)果,其中,所述投票結(jié)果包括區(qū)塊哈希簽名、本次有效的公鑰及區(qū)塊哈希新簽名。
其中,區(qū)塊哈希簽名是由所述投票節(jié)點本次有效的私鑰對所述區(qū)塊的哈希值進行簽名得到的,區(qū)塊哈希新簽名是由所述投票節(jié)點產(chǎn)生的下次有效的私鑰對所述區(qū)塊的哈希值進行簽名得到的,本次有效的公鑰為投票節(jié)點的本次有效的公鑰。
步驟103:搜索投票節(jié)點上次進行有效投票的區(qū)塊哈希新簽名,以驗證所述投票結(jié)果的有效性。投票結(jié)果有效則說明得到了投票節(jié)點的支持。
步驟104:統(tǒng)計投票結(jié)果為有效的投票節(jié)點個數(shù),若統(tǒng)計的投票節(jié)點個數(shù)大于或等于預定閾值(如為投票節(jié)點總數(shù)的2/3),則將所有有效的投票結(jié)果記入所述區(qū)塊頭中,將更新的區(qū)塊存入賬本,并將更新的區(qū)塊發(fā)送給所有其它記賬節(jié)點,以使其它記賬節(jié)點在其賬本中進行同步記錄。
實施時,若投票結(jié)果為有效的投票節(jié)點個數(shù)小于預定閾值,則做異常處理。
更新的區(qū)塊如圖9所示,所有有效的投票結(jié)果均存儲在區(qū)塊頭中,這些投票結(jié)果對應相應投票節(jié)點的投票,如區(qū)塊n哈希簽名m、公鑰m及區(qū)塊n哈希新簽名m對應第m個投票節(jié)點的投票。
實施時,記賬節(jié)點賬本除了記錄有當前更新的區(qū)塊外,還記錄有之前更新的區(qū)塊,賬本存儲的內(nèi)容如圖10所示。
本申請進一步實施例中,上述步驟103中搜索投票節(jié)點上次進行有效投票的區(qū)塊哈希新簽名的過程包括:從賬本中搜索投票節(jié)點上次進行有效投票的投票結(jié)果;從搜索到的投票結(jié)果中提取區(qū)塊哈希新簽名。如圖9所示,以投票節(jié)點m、本次投票為第n次投票為例,投票節(jié)點m上次(即n-1次)進行有效投票的投票結(jié)果為sign(skm_p-1,hash(block)),Pkm_p-1,sign(skm_p,hash(block)),從該投票結(jié)果中提取出上次進行有效投票的區(qū)塊n-1哈希新簽名m sign(skm_p,hash(block))。
本申請進一步實施例中,如圖2所示,對于任意一投票節(jié)點,上述步驟103中驗證所述投票結(jié)果的有效性包括:
步驟201:使用本次有效公鑰對上次進行有效投票的區(qū)塊哈希新簽名進行驗證,如果驗證通過,則本次有效公鑰合法有效。
步驟202:使用本次有效公鑰對所述投票節(jié)點發(fā)送的區(qū)塊哈希簽名進行驗證,如果驗證通過,則所述投票節(jié)點發(fā)送的區(qū)塊哈希簽名合法有效。
步驟203:若步驟201及步驟202的驗證結(jié)果都為合法有效,則所述投票節(jié)點的投票結(jié)果有效。
本申請進一步實施例中,對于不是產(chǎn)生區(qū)塊的記賬節(jié)點而言,接收到更新的區(qū)塊后還包括驗證更新的區(qū)塊中投票結(jié)果的有效性,需分別對投票節(jié)點的投票結(jié)果進行驗證,具體驗證過程參見圖2所示,本申請在此不再贅述。
如圖3所示,圖3為本申請從投票節(jié)點側(cè)描述的區(qū)塊鏈投票記賬模式下的記賬方法。投票節(jié)點能夠每次投票時產(chǎn)生新的私鑰/公鑰對,使得私鑰及公鑰僅一次有效,能夠防止密鑰被破解后用來進行賬本攻擊,使得記賬的安全性得到很大提升。具體的包括:
步驟301:接收記賬節(jié)點發(fā)送的區(qū)塊,其中,所述區(qū)塊包括區(qū)塊頭及交易清單。
步驟302:對所述區(qū)塊進行合法性驗證,若驗證通過則進行步驟303。
步驟303:使用本次有效的私鑰對所述區(qū)塊的哈希值進行簽名,形成區(qū)塊哈希簽名;產(chǎn)生下次有效的私鑰及公鑰;使用下次有效的私鑰對區(qū)塊的哈希值進行簽名,形成區(qū)塊哈希新簽名。
步驟304:將區(qū)塊哈希簽名、本次有效的公鑰、區(qū)塊哈希新簽名發(fā)送至所述記賬節(jié)點(所述記賬節(jié)點為發(fā)送區(qū)塊的節(jié)點)。
本申請中,計算哈希值的目的是為了壓縮區(qū)塊的長度,作為后續(xù)私鑰簽名的數(shù)據(jù)基礎(如果數(shù)據(jù)太長,進行私鑰簽名技術(shù)上代價太大,不便于實施)。區(qū)塊哈希值可由記賬節(jié)點計算,也可由投票節(jié)點根據(jù)區(qū)塊內(nèi)容進行計算。區(qū)塊哈希值與記賬節(jié)點發(fā)送的區(qū)塊內(nèi)容相對應,區(qū)塊中的內(nèi)容改變,則對應的哈希值也跟著發(fā)生改變。計算區(qū)塊哈希值的方法可采用SM3HASH加密算法,本申請對其具體使用方法不做限定。
本申請一具體實施例中,上述步驟302對所述區(qū)塊進行合法性驗證包括:驗證所述區(qū)塊的格式是否正確;驗證所述交易清單的格式是否正確;以及驗證所述交易清單內(nèi)容是否正確。
上述圖1及圖3所示方法配合使用,能夠保證投票節(jié)點中的私鑰/公鑰動態(tài)更新,防止私鑰被破解后安全出現(xiàn)問題。
基于同一發(fā)明構(gòu)思,本申請實施例中還提供了一種區(qū)塊鏈投票記賬模式下的記賬節(jié)點及投票節(jié)點。記賬節(jié)點及投票節(jié)點解決問題的原理與方法相似,因此,節(jié)點的實施可參見方法的實施,重復之處不再贅述。
如圖4所示,記賬節(jié)點包括:發(fā)送模塊401,用于將區(qū)塊發(fā)送給投票節(jié)點,其中,所述區(qū)塊包括區(qū)塊頭及交易清單。
接收模塊402,用于接收投票節(jié)點發(fā)送的投票結(jié)果,其中,所述投票結(jié)果包括區(qū)塊哈希簽名、本次有效的公鑰、區(qū)塊哈希新簽名。
驗證模塊403,用于搜索投票節(jié)點上次進行有效投票的區(qū)塊哈希新簽名,以驗證所述投票結(jié)果的有效性。以及
處理模塊404,用于統(tǒng)計投票結(jié)果為有效的投票節(jié)點個數(shù),若統(tǒng)計的投票節(jié)點個數(shù)大于或等于預定閾值,則將所有有效的投票結(jié)果記入所述區(qū)塊頭中,將更新后的區(qū)塊存入賬本,并通過所述發(fā)送模塊將更新后的區(qū)塊發(fā)送給所有其它記賬節(jié)點。
進一步實施例中,所述驗證模塊403搜索投票節(jié)點上次進行有效投票的區(qū)塊哈希新簽名的過程包括:
從賬本中搜索投票節(jié)點上次進行有效投票的投票結(jié)果;
從搜索到的投票結(jié)果中提取區(qū)塊哈希新簽名。
所述驗證模塊403驗證所述投票結(jié)果的有效性的過程包括:
對于任意一投票節(jié)點,使用本次有效公鑰對上次進行有效投票的區(qū)塊哈希新簽名進行驗證,如果驗證通過,則本次有效公鑰合法有效;
使用本次有效公鑰對所述投票節(jié)點發(fā)送的區(qū)塊哈希簽名進行驗證,如果驗證通過,則所述投票節(jié)點發(fā)送的區(qū)塊哈希簽名合法有效;
若兩次驗證結(jié)果都為合法有效,則所述投票節(jié)點的投票結(jié)果有效。
如圖5所示,區(qū)塊鏈投票記賬模式下的投票節(jié)點包括:
接收模塊501,用于接收一記賬節(jié)點發(fā)送的區(qū)塊,其中,所述區(qū)塊包括區(qū)塊頭及交易清單。
驗證模塊502,用于對所述區(qū)塊進行合法性驗證,若驗證通過則啟動第一簽名模塊503、密鑰對產(chǎn)生模塊504及第二簽名模塊505。
第一簽名模塊503,用于使用本次有效的私鑰對所述區(qū)塊的哈希值進行簽名,形成區(qū)塊哈希簽名。
密鑰對產(chǎn)生模塊504,用于產(chǎn)生下次有效的私鑰及公鑰。
第二簽名模塊505,用于使用下次有效的私鑰對區(qū)塊的哈希值進行簽名,形成區(qū)塊哈希新簽名。以及
發(fā)送模塊506,用于將區(qū)塊哈希簽名、本次有效的公鑰及區(qū)塊哈希新簽名發(fā)送至所述記賬節(jié)點。
進一步的,驗證模塊502對所述區(qū)塊進行合法性驗證包括:驗證所述區(qū)塊的數(shù)據(jù)格式是否正確;驗證所述交易清單的格式是否正確;以及驗證所述交易清單中的內(nèi)容是否正確。
本申請圖4所示記賬節(jié)點及圖5所示投票節(jié)點配合使用,通過采用私鑰簽名的方式進行投票,每次投票后作廢私鑰/公鑰對,并重新生成新的私鑰/公鑰對,使得私鑰及公鑰僅一次有效,防止密鑰被破解后用來進行賬本攻擊,使得記賬的安全性得到很大提升。
如圖6所示,圖6為本申請實施例所述區(qū)塊鏈投票記賬模式下的記賬系統(tǒng)。該記賬系統(tǒng)包括:多個記賬節(jié)點及多個投票節(jié)點,其中之一記賬節(jié)點發(fā)送區(qū)塊時,其它記賬節(jié)點無法發(fā)送區(qū)塊。
具體的,記賬節(jié)點用于將區(qū)塊發(fā)送給投票節(jié)點,其中,所述區(qū)塊包括區(qū)塊頭及交易清單;接收投票節(jié)點發(fā)送的投票結(jié)果,其中,所述投票結(jié)果包括區(qū)塊哈希簽名、本次有效的公鑰、區(qū)塊哈希新簽名;搜索投票節(jié)點上次進行有效投票的區(qū)塊哈希新簽名,以驗證所述投票結(jié)果的有效性;以及統(tǒng)計投票結(jié)果為有效的投票節(jié)點個數(shù),若統(tǒng)計的投票節(jié)點個數(shù)大于或等于預定閾值,則將所有有效的投票結(jié)果記入所述區(qū)塊頭中,將更新的區(qū)塊存入賬本,并將更新的區(qū)塊發(fā)送給所有其它記賬節(jié)點。
投票節(jié)點用于接收一記賬節(jié)點發(fā)送的區(qū)塊,其中,所述區(qū)塊包括區(qū)塊頭及交易清單;對所述區(qū)塊進行合法性驗證,若驗證通過則使用本次有效的私鑰對所述區(qū)塊的哈希值進行簽名,形成區(qū)塊哈希簽名;產(chǎn)生下次有效的私鑰及公鑰;使用下次有效的私鑰對區(qū)塊的哈希值進行簽名,形成區(qū)塊哈希新簽名;以及
將區(qū)塊哈希簽名、本次有效的公鑰及區(qū)塊哈希新簽名發(fā)送至所述記賬節(jié)點。
本申請系統(tǒng)進一步實施例中,若所述記賬節(jié)點收到的新的區(qū)塊的分叉處在預定個區(qū)塊(如100個)之前,則所述記賬節(jié)點拒絕接收新的區(qū)塊。本實施例能夠確保私鑰被破解后,再從破解處開始偽造的區(qū)塊將不被承認。
為了更清楚說明本申請技術(shù)方案,下面以一具體實施例進行說明。假設區(qū)塊鏈投票記賬模式下的記賬系統(tǒng)包括m個投票節(jié)點,包括M個記賬節(jié)點,當前具有發(fā)送區(qū)塊權(quán)的記賬節(jié)點為第M個記賬節(jié)點,發(fā)送的區(qū)塊為區(qū)塊n(如圖8所示)。具體的,如圖7所示,區(qū)塊鏈投票記賬模式下的記賬方法包括:
步驟701:記賬節(jié)點M發(fā)送區(qū)塊n至所有投票節(jié)點。
步驟702:各投票節(jié)點接收區(qū)塊n,并對區(qū)塊n進行合法性驗證,若驗證通過則生成投票結(jié)果,將投票結(jié)果發(fā)送至記賬節(jié)點M。
下面以投票節(jié)點m為例說明生成投票結(jié)果的詳細過程,其中,投票節(jié)點m本次有效私鑰為skm_p,本次有效公鑰為Pkm_p:
利用skm_p對區(qū)塊n的哈希值進行簽名,得到區(qū)塊n的哈希簽名m;
生成下次有效的私鑰skm_p+1及公鑰Pkm_p+1;
利用下次有效的私鑰skm_p+1對區(qū)塊n的哈希值進行簽名,得到區(qū)塊n的哈希新簽名m;
將區(qū)塊n的哈希簽名m、本次有效公鑰為Pkm_p及區(qū)塊n的哈希新簽名m組成投票結(jié)果發(fā)送至記賬節(jié)點M。
步驟703:記賬節(jié)點M接收投票節(jié)點發(fā)送的投票結(jié)果。
步驟704:記賬節(jié)點M搜索投票節(jié)點上次進行有效投票的區(qū)塊哈希新簽名,以驗證投票結(jié)果的有效性。
下面仍以投票節(jié)點m為例對步驟704進行詳細說明:
通過查找圖10所示賬本,得到投票節(jié)點m上次進行有效投票的區(qū)塊n-1哈希新簽名m為sign(skm_p,hash(block)),利用Pkm_p對區(qū)塊n-1哈希新簽名m進行驗證,若果驗證通過,則Pkm_p合法有效。利用Pkm_p對區(qū)塊n哈希簽名m進行驗證,如果驗證通過,則區(qū)塊n哈希簽名m合法有效;若兩次驗證結(jié)果都為合法有效,則所述投票節(jié)點m的投票結(jié)果有效。
對其他投票節(jié)點的投票結(jié)果驗證過程同投票節(jié)點m,此處不再贅述。
步驟705:統(tǒng)計投票結(jié)果為有效的投票節(jié)點個數(shù),若統(tǒng)計的投票節(jié)點個數(shù)大于或等于預定閾值,則將所有有效的投票結(jié)果記入所述區(qū)塊頭中,將更新后的區(qū)塊存入賬本,并將更新后的賬本發(fā)送給所有其它記賬節(jié)點。
如圖9所示,所有投票節(jié)點的投票結(jié)果均有效,則將m個投票節(jié)點的投票結(jié)果均放到區(qū)塊n的區(qū)塊頭中。更新后的賬本如圖10所示。
本申請通過采用私鑰簽名的方式進行投票,每次投票后作廢私鑰/公鑰對,并重新生成新的私鑰/公鑰對,使得私鑰及公鑰僅一次有效,防止密鑰被破解后用來進行賬本攻擊,使得記賬的安全性得到很大提升。
本領域內(nèi)的技術(shù)人員應明白,本申請的實施例可提供為方法、系統(tǒng)、或計算機程序產(chǎn)品。因此,本申請可采用完全硬件實施例、完全軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學存儲器等)上實施的計算機程序產(chǎn)品的形式。
本申請是參照根據(jù)本申請實施例的方法、設備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些計算機程序指令也可存儲在能引導計算機或其他可編程數(shù)據(jù)處理設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設備上,使得在計算機或其他可編程設備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
以上所述僅用于說明本申請的技術(shù)方案,任何本領域普通技術(shù)人員均可在不違背本申請的精神及范疇下,對上述實施例進行修飾與改變。因此,本申請的權(quán)利保護范圍應視權(quán)利要求范圍為準。