本發(fā)明涉及區(qū)塊鏈模型中賬戶地址、公私鑰生成和簽名算法等相關(guān)的領(lǐng)域,改進了原有區(qū)塊鏈模型中系統(tǒng)需使用固定的簽名算法和地址生成算法的問題。
背景技術(shù):
區(qū)塊鏈是一種新的分布式技術(shù),由一個個順序排列而成的交易組成塊,再由一個個順序排列而成的塊組成鏈,每個塊包含一個自增的高度作為編號,還有一個時間戳用于記載打包時間。用戶數(shù)據(jù)的安全性依賴公私鑰體系,只有用戶私鑰簽名的交易才是合法的交易,故他人無法代為發(fā)起,且每個交易只存在唯一哈希,以確保無法重復發(fā)起。同時為了去中心化地生成唯一的用戶地址,需要對用戶公鑰進行哈希。
公有鏈是指沒有準入機制,全世界任何人都可以根據(jù)公開協(xié)議,生成合法賬戶,參與讀取,發(fā)送交易,交易確認,甚至參與共識的區(qū)塊鏈。
許可鏈是指節(jié)點和用戶有準入機制的區(qū)塊鏈,由若干個機構(gòu)組成共同體,每個機構(gòu)都運行著一個節(jié)點,為了使每個區(qū)塊生效需要獲得其中多數(shù)機構(gòu)的確認。區(qū)塊鏈上用戶的身份也經(jīng)過審核,大多為實名制,與現(xiàn)實世界的身份關(guān)系對應。
目前的公有鏈協(xié)議中事先規(guī)定了使用的公私鑰生成算法、地址生成算法、以及私鑰簽名算法。用戶在本地客戶端按照這些算法,依次進行如下運算,1:生成隨機的私鑰;2:由私鑰推導出公鑰;3:由公鑰計算出地址,4:使用該地址生成交易,5:使用私鑰簽名該交易,6:廣播該簽名后的交易。節(jié)點在接收到用戶的交易后,依次進行如下運算,1:從簽名推導出公鑰;2:用公鑰驗證簽名;3:用公鑰推導出地址;4:用推導出的地址驗證是否和發(fā)送者地址一致,如果都驗證通過則為合法簽名交易。
這些算法的流程導致了系統(tǒng)運行之前就需要選定密碼學算法和參數(shù),但密碼學算法是個博大精深的領(lǐng)域,一個固定的簽名算法不能滿足不同系統(tǒng)的特殊需求,甚至不同的用戶都需要使用不同的算法和參數(shù),而且例如sm2之類的簽名算法生成的簽名恢復不出公鑰,因此區(qū)塊鏈需要靈活配置的密碼學算法賬戶模型。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的是針對現(xiàn)有技術(shù)的不足,提供一種不限制簽名算法的許可鏈賬戶系統(tǒng)。
本發(fā)明的目的是通過以下技術(shù)方案實現(xiàn)的:一種不限制簽名算法的許可鏈賬戶系統(tǒng),包含多個數(shù)字簽名算法,并分配編號s1、s2、……、si,還包含許可鏈系統(tǒng)的用戶注冊規(guī)則,包含如下內(nèi)容:
用戶賬戶數(shù)據(jù)users,結(jié)構(gòu)為map(賬戶地址addr=>[公鑰pk,算法編號si])
注冊函數(shù),包含參數(shù):公鑰pk、算法編號si。
修改函數(shù),包含參數(shù):新公鑰pk’、新算法編號si’、新私鑰對數(shù)字0的簽名sign’。
賬戶的注冊方法如下:
(1)在創(chuàng)世塊中為用戶注冊規(guī)則,生成調(diào)用地址addr_regi,許可鏈從創(chuàng)世塊啟動,并準備接受用戶的注冊交易和普通交易。
(2)用戶選擇系統(tǒng)規(guī)定的幾種算法之一的si,根據(jù)算法生成私鑰sk和公鑰pk。
(3)用戶調(diào)用注冊規(guī)則的注冊函數(shù),傳入?yún)?shù):公鑰pk、算法編號si,并生成交易tx0,其中交易的來源地址為空,目標地址為addr_regi,然后用私鑰sk生成簽名sign0,并廣播。
(4)出塊節(jié)點接收到目標地址為addr_regi的用戶注冊交易tx0后,如果驗證通過,則為用戶分配唯一性地址addr,并將公鑰pk和算法編號si加入users中。驗證條件如下:
條件1:公鑰pk和算法編號si的組合不在users中。
條件2:使用算法編號si和公鑰pk驗證簽名sign0合法。
進一步的,所述系統(tǒng)的賬戶交易發(fā)送方法如下:
(1)用戶監(jiān)聽到許可鏈系統(tǒng)的變更,得知自己的注冊交易通過后,既可以使用addr發(fā)起后續(xù)的普通交易,并可以看到其他用戶的地址。
(2)如果賬戶a(地址addr_a)想向賬戶b(地址addr_b)發(fā)起交易tx1,需給交易設(shè)定來源地址為addr_a,目標地址為addr_b,附屬交易數(shù)據(jù),并用用戶a注冊時選擇的算法sa和私鑰ska對交易生成簽名sign1,并廣播。
(3)出塊節(jié)點收到目標地址為普通賬戶地址的交易tx1后,如果驗證通過,則為合法交易,執(zhí)行交易。驗證條件如下:
條件1:來源地址addr_a和目標地址addr_b均在users中。
條件2:讀取addr_a對應的用戶公鑰pka和簽名算法編號sa,驗證tx1的簽名sign1合法。
進一步的,所述系統(tǒng)的賬戶修改方法如下
(1)用戶如果需要修改自己的簽名算法或者公鑰,可以選擇新的算法si’,生成新私鑰sk’和新公鑰pk’,并用sk’對數(shù)字0簽名后生成sign’。
(2)然后調(diào)用注冊規(guī)則的修改函數(shù),傳入?yún)?shù):新公鑰pk’、新算法編號si’,新簽名sign’,并生成交易tx2,其中交易的來源地址為addr,目標地址為addr_regi,然后用老私鑰sk生成簽名sign2,并廣播。
(3)出塊節(jié)點接收到目標地址為addr_regi的用戶修改交易tx2后,如果驗證通過,則在users中將用戶的公鑰pk和算法編號si,替換為新公鑰pk’和新算法編號si’。驗證條件如下:
條件1:驗證該交易發(fā)起者在users中。
條件2:使用users中的算法編號si,通過公鑰pk驗證簽名sign2合法。
條件3:使用交易中的算法編號si’,用pk’驗證對數(shù)字0的簽名sign’合法。
本發(fā)明的有益效果在于:本發(fā)明舍棄了去中心化的哈希地址生成算法,解耦了賬戶地址和賬戶公鑰的密碼學對應關(guān)系,使用戶可以靈活選擇公私鑰生成算法和私鑰簽名算法,例如rsa、ecc、elgamal、sm2等非對稱加密體系,或者在同一體系內(nèi)采用不同的參數(shù)。
具體實施方式
一種不限制簽名算法的許可鏈賬戶系統(tǒng),所述系統(tǒng)包含多個數(shù)字簽名算法,并分配編號s1、s2、……、si,例如rsa、ecc、elgamal、sm2等體系,以及對應的不同參數(shù)。還包括許可鏈系統(tǒng)的用戶注冊規(guī)則,包含如下內(nèi)容:
用戶賬戶數(shù)據(jù)users,結(jié)構(gòu)為map(賬戶地址addr=>[公鑰pk,算法編號si])
注冊函數(shù),包含參數(shù):公鑰pk、算法編號si。
修改函數(shù),包含參數(shù):新公鑰pk’、新算法編號si’、新私鑰對數(shù)字0的簽名sign’。
本發(fā)明不限定用戶注冊規(guī)則的實現(xiàn)方式,可以使用vm上的智能合約,也可以在許可鏈底層直接使用原生代碼實現(xiàn)。
賬戶的注冊方法如下:
(1)在創(chuàng)世塊中為用戶注冊規(guī)則,生成調(diào)用地址addr_regi,許可鏈從創(chuàng)世塊啟動,并準備接受用戶的注冊交易和普通交易。
(2)用戶選擇系統(tǒng)規(guī)定的幾種算法之一的si,根據(jù)算法生成私鑰sk和公鑰pk。
(3)用戶調(diào)用注冊規(guī)則的注冊函數(shù),傳入?yún)?shù):公鑰pk、算法編號si,并生成交易tx0,其中交易的來源地址為空,目標地址為addr_regi,然后用私鑰sk生成簽名sign0,并廣播。
(4)出塊節(jié)點接收到目標地址為addr_regi的用戶注冊交易tx0后,如果驗證通過,則為用戶分配唯一性地址addr,并將公鑰pk和算法編號si加入users中。驗證條件如下:
條件1:公鑰pk和算法編號si的組合不在users中。
條件2:使用算法編號si和公鑰pk驗證簽名sign0合法。
本發(fā)明不限定地址addr的生成方法,可以采用不重復的字符串或簡單采用自增的數(shù)字編號等。
所述系統(tǒng)的賬戶交易發(fā)送方法如下:
(1)用戶監(jiān)聽到許可鏈系統(tǒng)的變更,得知自己的注冊交易通過后,既可以使用addr發(fā)起后續(xù)的普通交易,并可以看到其他用戶的地址。
(2)如果賬戶a(地址addr_a)想向賬戶b(地址addr_b)發(fā)起交易tx1,需給交易設(shè)定來源地址為addr_a,目標地址為addr_b,附屬交易數(shù)據(jù),并用用戶a注冊時選擇的算法sa和私鑰ska對交易生成簽名sign1,并廣播。
(3)出塊節(jié)點收到目標地址為普通賬戶地址的交易tx1后,如果驗證通過,則為合法交易,執(zhí)行交易。驗證條件如下:
條件1:來源地址addr_a和目標地址addr_b均在users中。
條件2:讀取addr_a對應的用戶公鑰pka和簽名算法編號sa,驗證tx1的簽名sign1合法。
所述系統(tǒng)的賬戶修改方法如下:
(1)用戶如果需要修改自己的簽名算法或者公鑰,可以選擇新的算法si’,生成新私鑰sk’和新公鑰pk’,并用sk’對數(shù)字0簽名后生成sign’。
(2)然后調(diào)用注冊規(guī)則的修改函數(shù),傳入?yún)?shù):新公鑰pk’、新算法編號si’,新簽名sign’,并生成交易tx2,其中交易的來源地址為addr,目標地址為addr_regi,然后用老私鑰sk生成簽名sign2,并廣播。
(3)出塊節(jié)點接收到目標地址為addr_regi的用戶修改交易tx2后,如果驗證通過,則在users中將用戶的公鑰pk和算法編號si,替換為新公鑰pk’和新算法編號si’。驗證條件如下:
條件1:驗證該交易發(fā)起者在users中。
條件2:使用users中的算法編號si,通過公鑰pk驗證簽名sign2合法。
條件3:使用交易中的算法編號si’,用pk’驗證對數(shù)字0的簽名sign’合法。