本發(fā)明涉及網(wǎng)絡安全技術(shù)領域,尤其涉及一種基于區(qū)塊鏈技術(shù)的數(shù)字簽名方法及系統(tǒng)。
背景技術(shù):
區(qū)塊鏈是分布式數(shù)據(jù)存儲、點對點傳輸、共識機制、加密算法等計算機技術(shù)的新型應用模式。狹義來講,區(qū)塊鏈是一種按照時間順序?qū)?shù)據(jù)區(qū)塊以順序相連的方式組合成的一種鏈式數(shù)據(jù)結(jié)構(gòu),并以密碼學方式保證的不可篡改和不可偽造的分布式賬本。廣義來講,區(qū)塊鏈技術(shù)是利用塊鏈式數(shù)據(jù)結(jié)構(gòu)來驗證與存儲數(shù)據(jù)、利用分布式節(jié)點共識算法來生成和更新數(shù)據(jù)、利用密碼學的方式保證數(shù)據(jù)傳輸和訪問的安全、利用由自動化腳本代碼組成的智能合約來編程和操作數(shù)據(jù)的一種全新的分布式基礎架構(gòu)與計算范式。區(qū)塊鏈的設計是一種保護措施,比如(應用于)高容錯的分布式計算系統(tǒng),使混合一致性成為可能,這使區(qū)塊鏈適合記錄事件、標題、醫(yī)療記錄和其他需要收錄數(shù)據(jù)的活動、身份識別管理,交易流程管理和出處證明管理。因此,區(qū)塊鏈對于金融脫媒有巨大的潛能,對于引領全球貿(mào)易有著巨大的影響。
但是,區(qū)塊鏈的系統(tǒng)是開放的,除了交易各方的私有信息被加密外,區(qū)塊鏈的數(shù)據(jù)對所有人公開,任何人都可以通過公開的接口查詢區(qū)塊鏈數(shù)據(jù)和開發(fā)相關(guān)應用,因此整個系統(tǒng)信息高度透明。因此,數(shù)據(jù)發(fā)送的可靠性和完整性有待提高。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例提供基于區(qū)塊鏈技術(shù)的數(shù)字簽名方法及系統(tǒng),以解決現(xiàn)有技術(shù)中,區(qū)塊鏈技術(shù)的數(shù)據(jù)發(fā)送可靠性和完整性有待提高的問題。
一方面,本發(fā)明實施例提供一種基于區(qū)塊鏈技術(shù)的數(shù)字簽名方法,包括:
獲取待發(fā)送數(shù)據(jù)的數(shù)據(jù)摘要;
對所述數(shù)據(jù)摘要進行哈希變換,生成報文摘要;
計算得到加密算法的加密參數(shù);
根據(jù)所述加密參數(shù)加密所述待發(fā)送數(shù)據(jù),得到加密數(shù)據(jù)。
在其中一個實施例中,所述對所述數(shù)據(jù)摘要進行哈希變換,得到報文摘要的步驟,包括:
對所述數(shù)據(jù)摘要進行字符串變換,將原始的明文信息填補到長度為448位的第一變換數(shù)據(jù);
將所述第一變換數(shù)據(jù)的長度追加64位正整數(shù),得到輸入長度為512的倍數(shù)的第二變換數(shù)據(jù);
將一個128位的緩沖區(qū)初始化為一個固定的運算值;
將所述第二變換數(shù)據(jù)中的所有輸入塊與所述運算值進行運算,所述輸入塊的長度為512字節(jié);
生成所述報文摘要,所述報文摘要由128位的緩沖區(qū)構(gòu)成。
在其中一個實施例中,所述計算得到加密算法的加密參數(shù)的步驟,包括:
選取素數(shù)a和b;
計算得到c和d,令c=a*b,d=(a-1)*(b-1);
選取e,使得e與d互為素數(shù);
選取f,使得f*e=1(mod)d。
在其中一個實施例中,所述根據(jù)所述加密參數(shù)加密所述待發(fā)送數(shù)據(jù),得到加密數(shù)據(jù)的步驟,包括:
將所述待發(fā)送數(shù)據(jù)分塊,生成消息塊,令每個所述消息塊的長度g滿足:0≤g≤c;
根據(jù)加密函數(shù)i=gf(modc),生成所述加密數(shù)據(jù)。
另一方面,本發(fā)明實施例還提供了一種基于區(qū)塊鏈技術(shù)的數(shù)字簽名系統(tǒng),包括:
獲取模塊,用于獲取待發(fā)送數(shù)據(jù)的數(shù)據(jù)摘要;
變換模塊,用于對所述數(shù)據(jù)摘要進行哈希變換,生成報文摘要;
計算模塊,用于計算得到加密算法的加密參數(shù);
加密模塊,用于根據(jù)所述加密參數(shù)加密所述待發(fā)送數(shù)據(jù),得到加密數(shù)據(jù)。
在其中一個實施例中,所述變換模塊包括:
第一變換單元,用于對所述數(shù)據(jù)摘要進行字符串變換,將原始的明文信息填補到長度為448位的第一變換數(shù)據(jù);
第一變換單元,用于將所述第一變換數(shù)據(jù)的長度追加64位正整數(shù),得到輸入長度為512的倍數(shù)的第二變換數(shù)據(jù);
初始化單元,用于將一個128位的緩沖區(qū)初始化為一個固定的運算值;
運算單元,用于將所述第二變換數(shù)據(jù)中的所有輸入塊與所述運算值進行運算,所述輸入塊的長度為512字節(jié);
生成單元,用于生成所述報文摘要,所述報文摘要由128位的緩沖區(qū)構(gòu)成。
在其中一個實施例中,所述計算模塊包括:
第一選取單元,用于選取素數(shù)a和b;
計算單元,用于計算得到c和d,令c=a*b,d=(a-1)*(b-1);
第二選取單元,用于選取e,使得e與d互為素數(shù);
第三選取單元,用于選取f,使得f*e=1(mod)d。
在其中一個實施例中,所述加密模塊包括:
分塊單元,用于將所述待發(fā)送數(shù)據(jù)分塊,生成消息塊,令每個所述消息塊的長度g滿足:0≤g≤c;
加密單元,用于根據(jù)加密函數(shù)i=gf(modc),生成所述加密數(shù)據(jù)。
本發(fā)明實施例提供的基于區(qū)塊鏈技術(shù)的數(shù)字簽名方法,通過獲取待發(fā)送數(shù)據(jù)的數(shù)據(jù)摘要;對所述數(shù)據(jù)摘要進行哈希變換,生成報文摘要;計算得到加密算法的加密參數(shù);根據(jù)所述加密參數(shù)加密所述待發(fā)送數(shù)據(jù),得到加密數(shù)據(jù)。由此,實現(xiàn)了用于提高數(shù)據(jù)在發(fā)送過程中的可靠性和完整性,進而提高了數(shù)據(jù)發(fā)送的安全性。
附圖說明
為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對本發(fā)明實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例的附圖,對于本領域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明基于區(qū)塊鏈技術(shù)的數(shù)字簽名方法的第一實施例的流程圖;
圖2是本發(fā)明基于區(qū)塊鏈技術(shù)的數(shù)字簽名方法的第二實施例的流程圖;
圖3是本發(fā)明基于區(qū)塊鏈技術(shù)的數(shù)字簽名系統(tǒng)的第一實施例的結(jié)構(gòu)框圖;
圖4是本發(fā)明基于區(qū)塊鏈技術(shù)的數(shù)字簽名系統(tǒng)的第二實施例的結(jié)構(gòu)框圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
第一實施例
如圖1所示,是本發(fā)明基于區(qū)塊鏈技術(shù)的數(shù)字簽名方法的第一實施例的流程圖。該基于區(qū)塊鏈技術(shù)的數(shù)字簽名方法包括:
步驟101,獲取待發(fā)送數(shù)據(jù)的數(shù)據(jù)摘要。
已知地,數(shù)字簽名(又稱公鑰數(shù)字簽名、電子簽章)是一種類似寫在紙上的普通的物理簽名,但是使用了公鑰加密領域的技術(shù)實現(xiàn),用于鑒別數(shù)字信息的方法。一套數(shù)字簽名通常定義兩種互補的運算,一個用于簽名,另一個用于驗證。數(shù)字簽名,就是只有信息的發(fā)送者才能產(chǎn)生的別人無法偽造的一段數(shù)字串,這段數(shù)字串同時也是對信息的發(fā)送者發(fā)送信息真實性的一個有效證明。數(shù)字簽名是非對稱密鑰加密技術(shù)與數(shù)字摘要技術(shù)的應用
步驟102,對所述數(shù)據(jù)摘要進行哈希變換,生成報文摘要。
步驟103,計算得到加密算法的加密參數(shù)。
步驟104,根據(jù)所述加密參數(shù)加密所述待發(fā)送數(shù)據(jù),得到加密數(shù)據(jù)。
在本發(fā)明實施例中,區(qū)塊鏈技術(shù)是一種分布式存儲技術(shù),主要包括兩個方面:第一,數(shù)據(jù)的分布式存儲;第二,數(shù)據(jù)的分布式記錄。分布式存儲是指數(shù)據(jù)存儲在參與記錄的節(jié)點中,而不是存儲在中心化的機器中;分布式記錄是指系統(tǒng)的參與節(jié)點一起記錄。
數(shù)據(jù)存儲采用分布式,其存儲結(jié)構(gòu)如下所示:分布式存儲技術(shù)將數(shù)據(jù)分塊,然后后使用鏈技術(shù)將所有的塊連接在一起,構(gòu)成全部的數(shù)據(jù)。另外,每個塊由塊頭和塊身兩部分組成,塊頭負責與前面的塊連接,并保證數(shù)據(jù)的完整性,塊身存儲數(shù)據(jù)交換的全部記錄。
數(shù)據(jù)的記錄也采用分布式。區(qū)塊鏈中的每一次數(shù)據(jù)交換的記錄的傳播都采用分布式,消息由單個節(jié)點直接發(fā)送給其他節(jié)點。在發(fā)送的過程中,為了保證數(shù)據(jù)的可靠性和完整性,使用了數(shù)字簽名技術(shù)。首先,數(shù)字簽名可以判斷信息是否由對方發(fā)送;第二,數(shù)字簽名可以判定接收到的信息是否為完整的信息。在發(fā)送方,用哈希函數(shù)從信息中生成報文摘要,然后用密鑰進行加密,加密的摘要作為數(shù)字簽名,和加密數(shù)據(jù)一起發(fā)送給對方;在接收方,使用與發(fā)送方相同的哈希函數(shù)對原始報文提取摘要,然后用密鑰對數(shù)字簽名進行解密,并判斷兩者是否一致,如果一致,則說明信息的完整性。
本發(fā)明實施例提供的基于區(qū)塊鏈技術(shù)的數(shù)字簽名方法,通過獲取待發(fā)送數(shù)據(jù)的數(shù)據(jù)摘要;對所述數(shù)據(jù)摘要進行哈希變換,生成報文摘要;計算得到加密算法的加密參數(shù);根據(jù)所述加密參數(shù)加密所述待發(fā)送數(shù)據(jù),得到加密數(shù)據(jù)。由此,實現(xiàn)了用于提高數(shù)據(jù)在發(fā)送過程中的可靠性和完整性,進而提高了數(shù)據(jù)發(fā)送的安全性。
第二實施例
如圖2所示,是本發(fā)明基于區(qū)塊鏈技術(shù)的數(shù)字簽名方法的第二實施例的流程圖。該基于區(qū)塊鏈技術(shù)的數(shù)字簽名方法包括:
步驟201,獲取待發(fā)送數(shù)據(jù)的數(shù)據(jù)摘要。
步驟202,對所述數(shù)據(jù)摘要進行字符串變換,將原始的明文信息填補到長度為448位的第一變換數(shù)據(jù)。
在本發(fā)明實施例中,使用md5算法對數(shù)據(jù)摘要進行處理。
md5即message-digestalgorithm5(信息-摘要算法5),為計算機安全領域廣泛使用的一種散列函數(shù),是哈希函數(shù)的一種,用于確保信息傳輸完整一致。是計算機廣泛使用的雜湊算法之一(又譯摘要算法、哈希算法),主流編程語言普遍已有md5實現(xiàn)。將數(shù)據(jù)(如漢字)運算為另一固定長度值,是雜湊算法的基礎原理,md5的前身有md2、md3和md4。
md5算法具有以下特點:
1、壓縮性:任意長度的數(shù)據(jù),算出的md5值長度都是固定的。
2、容易計算:從原數(shù)據(jù)計算出md5值很容易。
3、抗修改性:對原數(shù)據(jù)進行任何改動,哪怕只修改1個字節(jié),所得到的md5值都有很大區(qū)別。
4、強抗碰撞:已知原數(shù)據(jù)和其md5值,想找到一個具有相同md5值的數(shù)據(jù)(即偽造數(shù)據(jù))是非常困難的。
md5的作用是讓大容量信息在用數(shù)字簽名軟件簽署私人密鑰前被"壓縮"成一種保密的格式(就是把一個任意長度的字節(jié)串變換成一定長的十六進制數(shù)字串)。
在本步驟中,通過這樣一種足夠復雜的算法來打亂明文信息中的所有位,各輸出位都會受到輸入位的影響。換句話說,就是將原始的明文信息填補到448位的長度(以512為模)。
步驟203,將所述第一變換數(shù)據(jù)的長度追加64位正整數(shù),得到輸入長度為512的倍數(shù)的第二變換數(shù)據(jù)。
在本步驟中,將第一變換數(shù)據(jù)的長度追加為64位正整數(shù),從而使得整個輸入的長度為512的倍數(shù)。
步驟204,將一個128位的緩沖區(qū)初始化為一個固定的運算值。
步驟205,將所述第二變換數(shù)據(jù)中的所有輸入塊與所述運算值進行運算,所述輸入塊的長度為512字節(jié)。
在本步驟中,將一個128位的緩沖區(qū)初始化為一個固定的運算值后,每一輪取出一個512字節(jié)的輸入塊,將其與128位的緩沖區(qū)進行混淆,md5對每個輸入塊執(zhí)行4輪,這個過程不斷進行,直到所有的輸入塊都完成執(zhí)行。
步驟206,生成所述報文摘要,所述報文摘要由128位的緩沖區(qū)構(gòu)成。
步驟207,選取素數(shù)a和b。
在本發(fā)明實施例中,根據(jù)加密算法,我們可以得到數(shù)字簽名算法。在數(shù)字簽名算法中,可以使用rsa算法。rsa公開密鑰密碼體制,所謂的公開密鑰密碼體制就是使用不同的加密密鑰與解密密鑰,是一種“由已知加密密鑰推導出解密密鑰在計算上是不可行的”密碼體制。在公開密鑰密碼體制中,加密密鑰(即公開密鑰)pk是公開信息,而解密密鑰(即秘密密鑰)sk是需要保密的。加密算法e和解密算法d也都是公開的。雖然解密密鑰sk是由公開密鑰pk決定的,但卻不能根據(jù)pk計算出sk。正是基于這種理論,1978年出現(xiàn)了著名的rsa算法,它通常是先生成一對rsa密鑰,其中之一是保密密鑰,由用戶保存;另一個為公開密鑰,可對外公開,甚至可在網(wǎng)絡服務器中注冊。為提高保密強度,rsa密鑰至少為500位長,一般推薦使用1024位。這就使加密的計算量很大。為減少計算量,在傳送信息時,常采用傳統(tǒng)加密方法與公開密鑰加密方法相結(jié)合的方式,即信息采用改進的des或idea對話密鑰加密,然后使用rsa密鑰加密對話密鑰和信息摘要。對方收到信息后,用不同的密鑰解密并可核對信息摘要。
rsa算法是第一個能同時用于加密和數(shù)字簽名的算法,也易于理解和操作。rsa是被研究得最廣泛的公鑰算法,從提出到現(xiàn)今的三十多年里,經(jīng)歷了各種攻擊的考驗,逐漸為人們接受,普遍認為是目前最優(yōu)秀的公鑰方案之一。
rsa算法基于數(shù)論中的一些理論,需要先計算出一些基本參數(shù),在本步驟中,挑選兩個較大的素數(shù)a和b(一般情況下為1024位)。
步驟208,計算得到c和d,令c=a*b,d=(a-1)*(b-1)。
步驟209,選取e,使得e與d互為素數(shù);
步驟210,選取f,使得f*e=1(mod)d。
步驟211,將所述待發(fā)送數(shù)據(jù)分塊,生成消息塊,令每個所述消息塊的長度g滿足:0≤g≤c。
在本發(fā)明實施例中,計算出以上參數(shù)之后,將明文信息,即待發(fā)送數(shù)據(jù)分塊(可以看成是一個位串),令每個明文消息塊g滿足:0≤g≤c。為此,我們只需要將明文劃分為h位的塊即可,其中h是滿足2h<c的最大整數(shù)。
步驟212,根據(jù)加密函數(shù)i=gf(modc),生成所述加密數(shù)據(jù)。
在本步驟中,計算i=gf(modc),從而加密消息g。
當接收方接收到加密數(shù)據(jù)后,計算g=ie(modc),從而解密消息g。
對于所有符合要求的消息g,加密函數(shù)與解密函數(shù)互為反函數(shù)。要執(zhí)行加密操作,則需要得到f及c,要執(zhí)行解密操作,則需要得到e和c。所以,公鑰是由(f,c)對組成的,私鑰是由(e,c)對組成的。
這種算法的安全性是建立在大數(shù)分解的困難度的基礎上的。如果密碼破解者能夠獲取c,從而得到a和b,那么他就可以得到d。在得到d和f之后,就可以根據(jù)歐幾里得算法得到f。然而這幾乎是不可能的,數(shù)學家們探索大數(shù)分解已經(jīng)300多年了,幾百年的經(jīng)驗告訴我們這是一個極其困難的問題。
本領域普通技術(shù)人員可以理解實現(xiàn)上述實施例方法中的全部或部分流程,可以通過計算機程序相關(guān)的硬件來完成,所述的程序可存儲于一計算機可讀取存儲介質(zhì)中,該程序在執(zhí)行時,可包括如上述各方法的實施例的流程。其中,所述的存儲介質(zhì)可為磁盤、光盤、只讀存儲記憶體(read-onlymemory,rom)或隨機存儲記憶體(randomaccessmemory,ram)等。
上文對本發(fā)明的基于區(qū)塊鏈技術(shù)的數(shù)字簽名方法的實施例作了詳細介紹。下面將相應于上述方法的系統(tǒng)作進一步闡述。
第三實施例
如圖3所示,為本發(fā)明基于區(qū)塊鏈技術(shù)的數(shù)字簽名系統(tǒng)的第一實施例的結(jié)構(gòu)框圖,該系統(tǒng)300可以實施本發(fā)明基于區(qū)塊鏈技術(shù)的數(shù)字簽名方法的第一實施例的各步驟,具體包括:
獲取模塊301,用于獲取待發(fā)送數(shù)據(jù)的數(shù)據(jù)摘要。
變換模塊302,用于對所述數(shù)據(jù)摘要進行哈希變換,生成報文摘要。
計算模塊303,用于計算得到加密算法的加密參數(shù)。
加密模塊304,用于根據(jù)所述加密參數(shù)加密所述待發(fā)送數(shù)據(jù),得到加密數(shù)據(jù)。
本發(fā)明實施例提供的系統(tǒng),通過獲取待發(fā)送數(shù)據(jù)的數(shù)據(jù)摘要;對所述數(shù)據(jù)摘要進行哈希變換,生成報文摘要;計算得到加密算法的加密參數(shù);根據(jù)所述加密參數(shù)加密所述待發(fā)送數(shù)據(jù),得到加密數(shù)據(jù)。由此,實現(xiàn)了用于提高數(shù)據(jù)在發(fā)送過程中的可靠性和完整性,進而提高了數(shù)據(jù)發(fā)送的安全性。
第四實施例
如圖4所示,為本發(fā)明基于區(qū)塊鏈技術(shù)的數(shù)字簽名系統(tǒng)的第二實施例的結(jié)構(gòu)框圖,該系統(tǒng)400可以實施本發(fā)明基于區(qū)塊鏈技術(shù)的數(shù)字簽名方法的第二實施例的各步驟,使基于本發(fā)明基于區(qū)塊鏈技術(shù)的數(shù)字簽名系統(tǒng)的第一實施例的改進,具體包括:
獲取模塊401,用于獲取待發(fā)送數(shù)據(jù)的數(shù)據(jù)摘要。
變換模塊402,用于對所述數(shù)據(jù)摘要進行哈希變換,生成報文摘要。其中,變換模塊402還包括以下單元:
第一變換單元4021,用于對所述數(shù)據(jù)摘要進行字符串變換,將原始的明文信息填補到長度為448位的第一變換數(shù)據(jù)。
第一變換單元4022,用于將所述第一變換數(shù)據(jù)的長度追加64位正整數(shù),得到輸入長度為512的倍數(shù)的第二變換數(shù)據(jù)。
初始化單元4023,用于將一個128位的緩沖區(qū)初始化為一個固定的運算值。
運算單元4024,用于將所述第二變換數(shù)據(jù)中的所有輸入塊與所述運算值進行運算,所述輸入塊的長度為512字節(jié)。
生成單元4025,用于生成所述報文摘要,所述報文摘要由128位的緩沖區(qū)構(gòu)成。
計算模塊403,用于計算得到加密算法的加密參數(shù)。其中,計算模塊403還包括以下單元:
第一選取單元4031,用于選取素數(shù)a和b。
計算單元4032,用于計算得到c和d,令c=a*b,d=(a-1)*(b-1)。
第二選取單元4033,用于選取e,使得e與d互為素數(shù)。
第三選取單元4034,用于選取f,使得f*e=1(mod)d。
加密模塊404,用于根據(jù)所述加密參數(shù)加密所述待發(fā)送數(shù)據(jù),得到加密數(shù)據(jù)。其中,加密模塊404還包括以下單元:
分塊單元4041,用于將所述待發(fā)送數(shù)據(jù)分塊,生成消息塊,令每個所述消息塊的長度g滿足:0≤g≤c。
加密單元4042,用于根據(jù)加密函數(shù)i=gf(modc),生成所述加密數(shù)據(jù)。
以上所說實施例的各技術(shù)特征可以進行任意的組合,為使描述簡潔,未對上述實施例中的各個技術(shù)特征所有可能的組合都進行描述,然而,只要這些技術(shù)特征的組合不存在矛盾,都應該認為是本說明書記載的范圍。
以上所述,僅為本發(fā)明的具體實施方式,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術(shù)領域的技術(shù)人員在本發(fā)明披露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應以權(quán)利要求的保護范圍為準。