本發(fā)明涉及區(qū)塊鏈技術(shù)領(lǐng)域,更具體地,涉及基于區(qū)塊鏈的基于區(qū)塊鏈進(jìn)行的數(shù)據(jù)庫(kù)備份、恢復(fù)方法和系統(tǒng)。
背景技術(shù):
區(qū)塊鏈中所有的內(nèi)容的都是通過交易來改變的,數(shù)據(jù)庫(kù)操作也不例外,要通過區(qū)塊鏈操作數(shù)據(jù)庫(kù),需要發(fā)起相應(yīng)的交易,比如創(chuàng)建表有創(chuàng)建表的交易,插入表有插入表的交易。然而,因?yàn)閰^(qū)塊鏈?zhǔn)敲總€(gè)人都可以訪問的,因此一個(gè)用戶操作數(shù)據(jù)庫(kù)表的細(xì)節(jié),其它用戶也可以看到,這樣一來,與區(qū)塊鏈相連的數(shù)據(jù)庫(kù)細(xì)節(jié)完全暴露給了所有用戶,毫無私密性可言。
那么,在某些表需要保密的情況下,就需要實(shí)現(xiàn)與區(qū)塊鏈相連的數(shù)據(jù)庫(kù)中的表,只有表的創(chuàng)建者或被其授權(quán)的用戶才可以看到表的所有操作記錄。用普通的加密技術(shù)可以實(shí)現(xiàn)將操作內(nèi)容加密,但是這樣的話,表的內(nèi)容看起來就不直觀,還需要對(duì)應(yīng)解密才能看到真實(shí)數(shù)據(jù)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是保護(hù)某張表的操作細(xì)節(jié)不被其它用戶看到,只有表的所有者(創(chuàng)建者)或者被授權(quán)過的用戶可以查看表的操作詳情,無權(quán)限的用戶即使使用網(wǎng)絡(luò)工具截取數(shù)據(jù)包,也看不到交易的實(shí)際內(nèi)容。最終實(shí)現(xiàn)表的內(nèi)容既方便查看,又能保證數(shù)據(jù)的安全的效果。
為此,本發(fā)明提出一種基于區(qū)塊鏈的數(shù)據(jù)庫(kù)的操作方法,包括:
s1,交易發(fā)起方對(duì)raw字段使用一密碼對(duì)待發(fā)送交易中的數(shù)據(jù)表操作進(jìn)行對(duì)稱加密,所述raw字段指的是交易中需要加密的字段;
s2,由交易發(fā)起方的公鑰對(duì)所述密碼進(jìn)行非對(duì)稱加密得到一token;
s3,交易發(fā)起方將所述token放到所述交易中,然后發(fā)送交易;
s4,在交易共識(shí)階段,所述token被取出,放到區(qū)塊鏈上的賬戶相關(guān)的信息中;
s5,在交易共識(shí)結(jié)束后,交易發(fā)起方在執(zhí)行交易之前,將token取出,使用交易發(fā)起方的私鑰對(duì)token解密得到所述密碼,然后用所述密碼對(duì)所述raw字段進(jìn)行解密。
本發(fā)明還提出一種基于區(qū)塊鏈的數(shù)據(jù)庫(kù)操作系統(tǒng),包括多個(gè)交易節(jié)點(diǎn),每一個(gè)交易節(jié)點(diǎn)具有處理器,所述處理器被配置為執(zhí)行如下步驟:
s1,交易發(fā)起方對(duì)raw字段使用一密碼對(duì)待發(fā)送交易中的數(shù)據(jù)表操作進(jìn)行對(duì)稱加密,所述raw字段指的是交易中需要加密的字段;
s2,由交易發(fā)起方的公鑰對(duì)所述密碼進(jìn)行非對(duì)稱加密得到一token;
s3,交易發(fā)起方將所述token放到所述交易中,然后發(fā)送交易;
s4,在交易共識(shí)階段,所述token被取出,放到區(qū)塊鏈上的賬戶相關(guān)的信息中;
s5,在交易共識(shí)結(jié)束后,交易發(fā)起方在執(zhí)行交易之前,將token取出,使用交易發(fā)起方的私鑰對(duì)token解密得到所述密碼,然后用所述密碼對(duì)所述raw字段進(jìn)行解密。
本發(fā)明的有益效果包括:
通過合理利用對(duì)稱與非對(duì)稱加密技術(shù)既方便又安全得地解決了保密區(qū)塊鏈數(shù)據(jù)庫(kù)數(shù)據(jù)的問題,只有表的創(chuàng)建者與被授權(quán)過的用戶可以看到對(duì)數(shù)據(jù)庫(kù)表的交易的細(xì)節(jié)。
附圖說明
圖1為區(qū)塊鏈交易的流程圖;
圖2為本發(fā)明的方法的一個(gè)實(shí)施例的結(jié)構(gòu)示意圖;
圖3為本發(fā)明的方法的另一個(gè)實(shí)施例的結(jié)構(gòu)示意圖;
圖4為本發(fā)明的方法的又一個(gè)實(shí)施例的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面參照附圖描述本發(fā)明的實(shí)施方式,其中相同的部件用相同的附圖標(biāo)記表示。
數(shù)據(jù)庫(kù)中對(duì)于表的操作包括:1)對(duì)于表本身的一般操作:創(chuàng)建,刪除,授權(quán),取消授權(quán),改名。2)對(duì)于表內(nèi)容的一般操作:插入,刪除,更新,查詢(增刪改查)。
在區(qū)塊鏈中,操作數(shù)據(jù)庫(kù)表的方式為:區(qū)塊鏈中的數(shù)據(jù),如果為了方便查看,需要反映在數(shù)據(jù)庫(kù)中,并且數(shù)據(jù)庫(kù)與區(qū)塊鏈保持一致,那么就需要發(fā)起操作數(shù)據(jù)庫(kù)的交易,將數(shù)據(jù)寫到數(shù)據(jù)庫(kù)中。寫數(shù)據(jù)庫(kù)需要執(zhí)行sql語句,那么交易的內(nèi)容就需要能被解析成sql語句。在本發(fā)明中,將交易中與sql語句相關(guān)的字段命名為raw字段。
在區(qū)塊鏈中,如圖1所示,從交易發(fā)起到區(qū)塊形成的過程一般為:首先由用戶發(fā)起一筆交易,然后交易被收到的節(jié)點(diǎn)傳播給驗(yàn)證節(jié)點(diǎn),在新一輪共識(shí)過程中參與共識(shí),當(dāng)大多數(shù)(一般有一個(gè)閾值)驗(yàn)證節(jié)點(diǎn)對(duì)于這筆交易共識(shí)通過之后,交易被放到下一個(gè)要生成的區(qū)塊之中。
本發(fā)明中涉及的對(duì)稱加密為,需要對(duì)加密和解密使用相同密鑰的加密算法,常用的對(duì)稱加密算法有des、aes、blowfish等。
本發(fā)明中涉及的非對(duì)稱加密(也稱公鑰加密算法)為,需要兩個(gè)密鑰來進(jìn)行加密和解密,這兩個(gè)密鑰是公開密鑰(publickey,簡(jiǎn)稱公鑰)和私有密鑰(privatekey,簡(jiǎn)稱私鑰),常用非對(duì)稱加密算法有rsa、ecc等。
本發(fā)明的提出基于以下需求:
1)在節(jié)點(diǎn)發(fā)送交易到節(jié)點(diǎn)之前,需要對(duì)raw字段進(jìn)行加密;
2)由于交易要操作數(shù)據(jù)庫(kù),在共識(shí)通過后還要對(duì)raw字段進(jìn)行解密;
3)解密需要密碼,這一密碼不僅表的創(chuàng)建者可以獲取到,表的創(chuàng)建者授權(quán)的用戶也可以獲取到;
4)密碼不可以明文存放到區(qū)塊鏈中,不然其它用戶也可以獲取到;
5)考慮到第3條中的授權(quán)用戶也需要拿到密碼對(duì)raw字段解密,那就不能直接使用非對(duì)稱加密方式對(duì)raw字段進(jìn)行加密,否則被授權(quán)的用戶無法通過自己的私鑰解密raw字段;
綜合以上需求,得出以下加密原理:
對(duì)于交易,交易發(fā)起方在發(fā)送交易之前,對(duì)raw字段進(jìn)行對(duì)稱加密,密碼由交易發(fā)起方的公鑰使用非對(duì)稱加密得到token,然后將token也放到交易中,然后發(fā)送交易。交易在共識(shí)階段時(shí),將token取出,放到區(qū)塊鏈上的賬戶地址相關(guān)的信息中。在共識(shí)結(jié)束后,操作數(shù)據(jù)庫(kù)執(zhí)行交易內(nèi)容之前,將token取出,使用用戶的私鑰對(duì)token解密得到密碼明文,然后對(duì)raw字段進(jìn)行解密。
對(duì)于授權(quán)操作,首先,只有表的創(chuàng)建者有權(quán)限對(duì)其它用戶授權(quán)。在授權(quán)交易被發(fā)送到節(jié)點(diǎn)之前,用戶先通過請(qǐng)求取得區(qū)塊鏈上存放的創(chuàng)建用戶的token,然后用表創(chuàng)建用戶自己的私鑰對(duì)token解密得到密碼明文,然后對(duì)密碼明文使用被授權(quán)的用戶的公鑰進(jìn)行非對(duì)稱加密得到被授權(quán)用戶的token,放到交易中發(fā)送交易。在共識(shí)階段同樣需要將token放到被授權(quán)用戶賬戶地址相關(guān)的信息中。這樣,被授權(quán)用戶在執(zhí)行操作表的交易時(shí),只需要取出自己賬戶地址對(duì)應(yīng)的token字段就可以對(duì)raw字段進(jìn)行解密。
第一實(shí)施方式-創(chuàng)建表
根據(jù)本發(fā)明的第一實(shí)施方式,如圖2所示,本發(fā)明的方法包括:
在交易發(fā)送階段:
s1,交易發(fā)起方(表創(chuàng)建者)對(duì)raw字段使用一密碼對(duì)待發(fā)送的數(shù)據(jù)表操作(交易)進(jìn)行對(duì)稱加密。
其中,raw字段指的是交易中需要加密的字段,一般地,對(duì)于數(shù)據(jù)庫(kù)表的操作而言,raw字段指的是與sql語句相關(guān)的字段。其中,所述密碼可以是交易發(fā)起方隨機(jī)生成的。
s2,由交易發(fā)起方的公鑰對(duì)所述密碼進(jìn)行非對(duì)稱加密得到一token。
s3,交易發(fā)起方將所述token也放到交易中,然后發(fā)送交易。
s4,在交易共識(shí)階段,所述token被取出,放到區(qū)塊鏈上的賬戶地址相關(guān)的信息中。
所述賬戶地址可以是交易發(fā)起方相關(guān)的,或者是與所述交易要操作的數(shù)據(jù)庫(kù)表相關(guān)的。
s5,在交易共識(shí)結(jié)束后,交易發(fā)起方在執(zhí)行交易(即操作數(shù)據(jù)庫(kù)表)之前,將token取出,使用交易發(fā)起方的私鑰對(duì)token解密得到所述密碼,然后用所述密碼對(duì)所述raw字段進(jìn)行解密。
s6,執(zhí)行交易,將交易內(nèi)容(創(chuàng)建表,插入數(shù)據(jù)等)同步到本地?cái)?shù)據(jù)庫(kù)中。
其中,步驟s4和s5的執(zhí)行者可以是交易發(fā)起方或者交易發(fā)起方的被授權(quán)方。這兩者之外的用戶由于無法知道交易發(fā)起方的私鑰對(duì)token解密得到所述密碼,進(jìn)而無法對(duì)所述raw字段進(jìn)行解密,因而就無法看到交易相關(guān)內(nèi)容。
第二實(shí)施方式-授權(quán)表
對(duì)于一張被加密過的表,如果其它用戶想要同步這張表,需要被授權(quán)才能解密與表相關(guān)交易中的raw字段。
授權(quán)表時(shí),被授權(quán)方需要將自己賬戶的公鑰告訴表的創(chuàng)建者,由表的創(chuàng)建者發(fā)起授權(quán)操作。
與創(chuàng)建表時(shí)不同,因?yàn)橐3謱?duì)raw字段操作的密碼的一致性,此時(shí)不能再隨機(jī)生成密碼,只能由表的創(chuàng)建者從區(qū)塊鏈中取得與自己的用戶地址跟表名相關(guān)的token,然后用自己的私鑰解密token得到密碼明文,然后再用被授權(quán)者的公鑰對(duì)密碼明文進(jìn)行非對(duì)稱加密得到另一個(gè)token,將這一token放到交易中。
交易進(jìn)入共識(shí)階段時(shí),將交易中的token字段取出,然后放到與被授權(quán)者和表名相關(guān)的信息中。
這里包括兩種情況,一是表的創(chuàng)建者發(fā)起的授權(quán),二是被授權(quán)方再次發(fā)起的授權(quán)。
圖3顯示了由表的創(chuàng)建者發(fā)起的授權(quán),而且是在交易創(chuàng)建時(shí)進(jìn)行授權(quán)。
在交易發(fā)送階段:
a1,表的創(chuàng)建者對(duì)raw字段使用一密碼對(duì)待發(fā)送的交易進(jìn)行對(duì)稱加密。其中,raw字段指的是交易中需要加密的字段,一般地,對(duì)于數(shù)據(jù)庫(kù)表的操作而言,raw字段指的是與sql語句相關(guān)的字段。其中,所述密碼可以是交易發(fā)起方隨機(jī)生成的。
a2,由被授權(quán)方的公鑰對(duì)所述密碼進(jìn)行非對(duì)稱加密得到一token。
a3,表的創(chuàng)建者將所述token也放到交易中,然后發(fā)送交易。
a4,在交易共識(shí)階段,所述token被取出,放到區(qū)塊鏈上的被授權(quán)方的賬戶相關(guān)的信息中。
a5,在交易共識(shí)結(jié)束后,被授權(quán)方可以將token取出,使用被授權(quán)方的私鑰對(duì)token解密得到所述密碼,然后用所述密碼對(duì)所述raw字段進(jìn)行解密。從而讀取所述數(shù)據(jù)庫(kù)表。
圖4顯示了由被授權(quán)方(為表的創(chuàng)建者授權(quán)的用戶,也可以認(rèn)為是交易發(fā)起方)發(fā)起的授權(quán),此時(shí),區(qū)塊鏈中已經(jīng)存在了通過步驟a1-a3生成的交易。
b1,交易發(fā)起方從區(qū)塊鏈獲得交易發(fā)起方對(duì)應(yīng)的token。
b2,由交易發(fā)起方的私鑰對(duì)token解密得到所述密碼。
b3,用被授權(quán)方的公鑰對(duì)所述密碼進(jìn)行非對(duì)稱加密得到新的token。
b4,被授權(quán)方將所述新的token放到交易中,然后發(fā)送交易。
b5,在交易共識(shí)階段,所述新的token被取出,放到區(qū)塊鏈上的被授權(quán)方的賬戶相關(guān)的信息中。
b6,在交易共識(shí)結(jié)束后,被授權(quán)方可以將token取出,使用被授權(quán)方的私鑰對(duì)token解密得到所述密碼,然后用所述密碼對(duì)所述raw字段進(jìn)行解密。從而讀取所述數(shù)據(jù)庫(kù)表。
被授權(quán)方因?yàn)橹浪雒艽a,因此可以再次發(fā)起的授權(quán)。當(dāng)然,這一系列的授權(quán)操作的起點(diǎn)為交易發(fā)起方(即數(shù)據(jù)表的創(chuàng)建者)發(fā)起的。
第三實(shí)施方式-操作表(增刪改數(shù)據(jù))
如果一個(gè)節(jié)點(diǎn)想要操作一個(gè)數(shù)據(jù)表,該數(shù)據(jù)表的raw字段加密了,需要進(jìn)行如下處理。
c1,以交易發(fā)起方的用戶地址與表名為參數(shù),從區(qū)塊鏈中獲取對(duì)應(yīng)表的token。
如果交易發(fā)起方為表創(chuàng)建者,則以表創(chuàng)建者的用戶地址與表名為參數(shù),從區(qū)塊鏈中獲取對(duì)應(yīng)表的token,可以直接使用token。
如果交易發(fā)起方不是表的創(chuàng)建者,需要以交易發(fā)起方的用戶地址跟表名為參數(shù)去區(qū)塊鏈中獲取token。
因?yàn)楸硎羌用艿模绻灰装l(fā)起方取不到token,則說明交易發(fā)起方未被授權(quán)。
c2,交易發(fā)起方取到token之后,交易發(fā)起方用自己的私鑰去解密所述token得到密碼明文。
c3,交易發(fā)起方對(duì)數(shù)據(jù)表的raw字段進(jìn)行操作,然后用密碼明文使用對(duì)稱加密算法對(duì)數(shù)據(jù)表的raw字段進(jìn)行加密。
c4,交易發(fā)起方將所述token放到交易中,然后發(fā)送交易。
共識(shí)階段:
交易共識(shí)通過后,如果一個(gè)用戶想要查看這張表相關(guān)交易內(nèi)容,需要以自己的用戶地址與表名為參數(shù),去區(qū)塊鏈中取出token,然后以用自己的私鑰去解密token得到密碼明文,最后用密碼解密交易的raw字段。
可選地,在區(qū)塊鏈中的數(shù)據(jù)表可以加密也可以不加密。
不論是表的創(chuàng)建用戶還是被授權(quán)用戶,當(dāng)操作一張表時(shí),先判斷表是否是raw字段加密的,判斷方法是以表創(chuàng)建者的用戶地址與表名為參數(shù),從鏈中獲取對(duì)應(yīng)表的token,如果取不到token,說明表是未被加密過的,可以直接操作這張表,否則就說明表是加密過的。
第四實(shí)施方式
根據(jù)本發(fā)明的另一方面,還提出一種基于區(qū)塊鏈的數(shù)據(jù)庫(kù)事務(wù)操作系統(tǒng),所述系統(tǒng)包括多個(gè)交易節(jié)點(diǎn),每個(gè)交易節(jié)點(diǎn)的相當(dāng)于一個(gè)客戶端。
在一個(gè)交易節(jié)點(diǎn)中,其被配置為執(zhí)行第一至第四實(shí)施方式中描述的各步驟。
根據(jù)本發(fā)明的另一方面,還提出一種存儲(chǔ)介質(zhì),所述存儲(chǔ)介質(zhì)存放有計(jì)算機(jī)可運(yùn)行的程序,所述程序被運(yùn)行時(shí)實(shí)現(xiàn)第一至第四實(shí)施方式中描述的各步驟。
以上所述的實(shí)施例,只是本發(fā)明較優(yōu)選的具體實(shí)施方式,本領(lǐng)域的技術(shù)人員在本發(fā)明技術(shù)方案范圍內(nèi)進(jìn)行的通常變化和替換都應(yīng)包含在本發(fā)明的保護(hù)范圍內(nèi)。