本發(fā)明涉及區(qū)塊鏈技術(shù)領(lǐng)域,特別涉及一種基于區(qū)塊鏈大量生成私鑰的方法及裝置。
背景技術(shù):
數(shù)字貨幣簡稱為digiccy,是英文的“digitalcurrency”的縮寫。數(shù)字貨幣是電子貨幣形式的替代貨幣,數(shù)字金幣和密碼貨幣都屬于數(shù)字貨幣。數(shù)字貨幣不能完全等同于虛擬世界中的虛擬貨幣,因為它經(jīng)常被用于真實的商品和服務交易,而不僅僅局限在網(wǎng)絡游戲等虛擬空間中。
隨著數(shù)字貨幣受到越來越多的關(guān)注,與之相對應的數(shù)字錢包也變得越來越重要。對于用戶來說最重要的就是數(shù)字錢包的私鑰,擁有了私鑰,用戶就能對自己的數(shù)字資產(chǎn)進行交易;如果私鑰被破解或者被遺忘就意味著數(shù)字資產(chǎn)的丟失。在數(shù)字貨幣越來越通用的今天,使用數(shù)字錢包的人越來越多,那么就需要生成更多的私鑰。
現(xiàn)有技術(shù)使用的私鑰生成方法是通過rsa加密(非對稱加密)來實現(xiàn)的。rsa是一種公開密鑰密碼體制。所謂的公開密鑰密碼體制就是使用不同的加密密鑰與解密密鑰,是一種“由已知加密密鑰推導出解密密鑰在計算上是不可行的”密碼體制。使用rsa加密算法生成私鑰的步驟如下:
1.隨機選擇兩個不相等的質(zhì)數(shù)p和q;
2.然后計算p和q的乘積n;
3.計算n的歐拉函數(shù)φ(n);
4,隨機選擇一個整數(shù)e,條件是1<e<φ(n),且e與φ(n)互質(zhì)
5,計算e對于φ(n)的模反元素d,所謂"模反元素"就是指有一個整數(shù)d,可以使得ed被φ(n)除的余數(shù)為1;
6,n和d封裝成私鑰,將n和e封裝成公鑰。
最終生成兩個密鑰,一個是保密密鑰(私鑰),由用戶保存;另一個為公開密鑰(公鑰),可對外公開,甚至可在網(wǎng)絡服務器中注冊。為提高保密強度,rsa密鑰至少為500位長,一般推薦使用1024位。
現(xiàn)有技術(shù)的私鑰生成方法本身存在如下缺陷:
1.由于rsa進行的都是大數(shù)計算,無論是通過軟件還是硬件實現(xiàn),速度緩慢一直是rsa的缺陷。所以一般來說這種方法只用于少量數(shù)據(jù)加密;
2.rsa加密技術(shù)中,當知道公鑰時,封裝成私鑰使用的數(shù)字是有可能被推導出的,也就意味著私鑰存在被破解的可能性,十分不安全。
因此,如何快速、大規(guī)模的生成私鑰并保證私鑰的安全性是迫切需要關(guān)注的問題。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的是提供一種基于區(qū)塊鏈大量生成私鑰的方法及裝置,通過同時選取當前區(qū)塊鏈的所有區(qū)塊,并對每個區(qū)塊中的哈希值和交易信息數(shù)據(jù)進行拼接生成隨機數(shù),再基于隨機數(shù)和身份信息生成私鑰,從而達到快速生成大量私鑰的目的。
為解決上述問題,本發(fā)明的第一方面提供了一種基于區(qū)塊鏈大量生成私鑰的方法,包括:
步驟s100,選取當前時間區(qū)塊鏈中的一個區(qū)塊;步驟s101,提取區(qū)塊中的哈希值h(k)和交易信息數(shù)據(jù)dkn;步驟s102,將區(qū)塊中的哈希值h(k)與交易信息數(shù)據(jù)dkn進行拼接并進行哈希計算,生成隨機數(shù);步驟s103,基于所述隨機數(shù)和身份信息生成私鑰。
進一步地,在生成所述私鑰后,還包括:步驟s200,對已生成隨機數(shù)的區(qū)塊進行標號,以得到與每個區(qū)塊對應的區(qū)塊編號;步驟s201,創(chuàng)建所述身份信息與區(qū)塊編號的對應關(guān)系,生成區(qū)塊數(shù)據(jù)表。
進一步地,對所述已生成隨機數(shù)的區(qū)塊進行標號時,根據(jù)區(qū)塊的時間戳t(k)進行標號。
進一步地,該方法還包括:選取當前時間區(qū)塊鏈中存在的所有區(qū)塊,對每個區(qū)塊執(zhí)行前述步驟s101-s103,以批量生成私鑰。
根據(jù)本發(fā)明的另一個方面,提供了一種基于區(qū)塊鏈大量生成私鑰的裝置,包括:
區(qū)塊選取模塊,用于選取當前時間區(qū)塊鏈中的一個區(qū)塊;數(shù)據(jù)提取模塊,用于提取區(qū)塊中的哈希值h(k)和交易信息數(shù)據(jù)dkn;隨機數(shù)生成模塊,用于將區(qū)塊中的哈希值h(k)與交易信息數(shù)據(jù)dkn進行拼接并進行哈希計算,生成隨機數(shù);私鑰生成模塊,用于基于隨機數(shù)和身份信息生成私鑰。
進一步地,該裝置還包括區(qū)塊數(shù)據(jù)表生成終端:標號模塊,用于對已生成隨機數(shù)的區(qū)塊進行標號,以得到與每個區(qū)塊對應的區(qū)塊編號;區(qū)塊數(shù)據(jù)表生成模塊,用于創(chuàng)建身份信息與區(qū)塊編號的對應關(guān)系,生成區(qū)塊數(shù)據(jù)表。
進一步地,對已生成隨機數(shù)的區(qū)塊進行標號時,根據(jù)區(qū)塊的時間戳t(k)進行標號。
進一步地,還包括:選取當前時間區(qū)塊鏈中存在的所有區(qū)塊,對每個區(qū)塊執(zhí)行前述步驟s101-s103,以批量生成私鑰。
本發(fā)明實施例通過同時選取當前區(qū)塊鏈的所有區(qū)塊,并對每個區(qū)塊中的哈希值和交易信息數(shù)據(jù)進行拼接生成隨機數(shù),再基于隨機數(shù)和身份信息生成私鑰。
本發(fā)明的上述技術(shù)方案具有如下有益的技術(shù)效果:
1.私鑰生成速度快;
2.私鑰生成數(shù)量多;
3.安全性高。基于區(qū)塊鏈產(chǎn)生的私鑰不會被其他人再次生成,保證每個私鑰都是獨一無二的。
附圖說明
圖1是區(qū)塊鏈網(wǎng)絡中區(qū)塊結(jié)構(gòu)示意圖;
圖2是根據(jù)本發(fā)明的一種基于區(qū)塊鏈大量生成私鑰的方法的方法流程圖;
圖3是根據(jù)本發(fā)明方法中的生成區(qū)塊數(shù)據(jù)表步驟的方法流程圖;
圖4是根據(jù)本發(fā)明的一種基于區(qū)塊鏈大量生成私鑰的裝置的結(jié)構(gòu)示意圖;
圖5是根據(jù)本發(fā)明裝置中區(qū)塊數(shù)據(jù)表生成終端的結(jié)構(gòu)示意圖。
具體實施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚明了,下面結(jié)合具體實施方式并參照附圖,對本發(fā)明進一步詳細說明。應該理解,這些描述只是示例性的,而并非要限制本發(fā)明的范圍。此外,在以下說明中,省略了對公知結(jié)構(gòu)和技術(shù)的描述,以避免不必要地混淆本發(fā)明的概念。
術(shù)語解釋:區(qū)塊鏈是一串使用密碼學方法相關(guān)聯(lián)產(chǎn)生的數(shù)據(jù)塊,每一個數(shù)據(jù)塊中包含了一次網(wǎng)絡交易的信息,用于驗證其信息的有效性(防偽)和生成下一個區(qū)塊。
狹義來講,區(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ù)的一種全新的分布式基礎(chǔ)架構(gòu)與計算范式。
請參閱圖1,圖1是區(qū)塊鏈網(wǎng)絡中區(qū)塊結(jié)構(gòu)示意圖。
如圖1所示,整條區(qū)塊鏈主要展示了三個區(qū)塊,其余區(qū)塊省略,h(k)代表每個區(qū)塊中的哈希值,這個哈希值與前一區(qū)塊的數(shù)據(jù)有關(guān)。
t(k)代表每個區(qū)塊中的時間戳,時間戳意味著區(qū)塊產(chǎn)生的時間和當時正發(fā)生的事件(例如交易事件)被永久性的保留了下來。
dk1、dk2、dk3、dk4…dkn代表第k個區(qū)塊中記錄的交易信息,包括當前區(qū)塊的交易數(shù)量以及經(jīng)過驗證的區(qū)塊創(chuàng)建過程中生成的所有交易記錄。
請參閱圖2,圖2是根據(jù)本發(fā)明的一種基于區(qū)塊鏈大量生成私鑰的方法的方法流程圖。
如圖2所示,根據(jù)本發(fā)明的一個方面,提供了一種基于區(qū)塊鏈大量生成私鑰的方法,包括:
步驟s100,選取當前時間區(qū)塊鏈中的一個區(qū)塊。
具體地,在區(qū)塊鏈網(wǎng)絡中構(gòu)造一條足夠長的區(qū)塊鏈,選取當前時間區(qū)塊鏈中的一個區(qū)塊。
步驟s101,提取區(qū)塊中的哈希值h(k)和交易信息數(shù)據(jù)dkn。
其中,交易信息數(shù)據(jù)dkn包括交易時間、智能合約、交易數(shù)量、交易記錄等等信息數(shù)據(jù)。
步驟s102,將區(qū)塊中的哈希值h(k)與交易信息數(shù)據(jù)dkn進行拼接并進行哈希計算,生成隨機數(shù)。
具體地,將區(qū)塊中的哈希值h(k)與交易信息數(shù)據(jù)dkn進行拼接時,先將交易信息數(shù)據(jù)dk1、dk2、dk3、dk4…dkn進行打包整合,得到交易信息數(shù)據(jù)集合;再將交易信息數(shù)據(jù)集合與區(qū)塊中的哈希值h(k)進行拼接并進行哈希計算,生成一串隨機數(shù)。
其中,隨機數(shù)可以是一個256bits的數(shù)。
步驟s103,基于所述隨機數(shù)和身份信息生成私鑰。
其中,身份信息一般為用戶的身份證號。私鑰可以直接由身份信息和步驟s102生成的隨機數(shù)拼接而成,也可以采用現(xiàn)有的算法對拼接之后的信息計算生成。
請參閱圖3,圖3是根據(jù)本發(fā)明方法中的生成區(qū)塊數(shù)據(jù)表步驟的方法流程圖。
如圖3所示,在生成所述私鑰后,還包括:步驟s200,對已生成隨機數(shù)的區(qū)塊進行標號,以得到與每個區(qū)塊對應的區(qū)塊編號;步驟s201,創(chuàng)建所述身份信息與區(qū)塊編號的對應關(guān)系,生成區(qū)塊數(shù)據(jù)表。
其中,對所述已生成隨機數(shù)的區(qū)塊進行標號時,根據(jù)區(qū)塊的時間戳t(k)進行標號。
區(qū)塊數(shù)據(jù)表示例如下表:
該方法還包括:選取當前時間區(qū)塊鏈中存在的所有區(qū)塊,對每個區(qū)塊執(zhí)行前述步驟s101-s103,以批量生成私鑰。
由于區(qū)塊鏈的生成是并行的,一個區(qū)塊鏈網(wǎng)絡中可以同時產(chǎn)生多個鏈,因此選取當前時間區(qū)塊鏈中存在的所有區(qū)塊,對每個區(qū)塊執(zhí)行提取所述區(qū)塊中的哈希值h(k)和交易信息數(shù)據(jù)dkn,再對其進行拼接并進行哈希計算,會在短時間內(nèi)生成大量隨機數(shù),從而可以在短時間內(nèi)同時生成大量私鑰。
請參閱圖4,圖4是根據(jù)本發(fā)明的第一種基于區(qū)塊鏈生成私鑰的裝置的結(jié)構(gòu)示意圖。
如圖4所示,根據(jù)本發(fā)明的另一方面,提供了一種基于區(qū)塊鏈大量生成私鑰的裝置,包括:
區(qū)塊選取模塊100,用于選取當前時間區(qū)塊鏈中的一個區(qū)塊。
數(shù)據(jù)提取模塊101,用于提取區(qū)塊中的哈希值h(k)和交易信息數(shù)據(jù)dkn。
隨機數(shù)生成模塊102,用于將區(qū)塊中的哈希值h(k)與交易信息數(shù)據(jù)dkn進行拼接并進行哈希計算,生成隨機數(shù)。
私鑰生成模塊103,用于基于隨機數(shù)和身份信息生成私鑰。
請參閱圖5,圖5是根據(jù)本發(fā)明裝置中區(qū)塊數(shù)據(jù)表生成終端的結(jié)構(gòu)示意圖。
其中,該裝置還包括區(qū)塊數(shù)據(jù)表生成終端,區(qū)塊數(shù)據(jù)表生成終端包括:
標號模塊200,用于對已生成隨機數(shù)的區(qū)塊進行標號,以得到與每個區(qū)塊對應的區(qū)塊編號。
區(qū)塊數(shù)據(jù)表生成模塊201,用于創(chuàng)建身份信息與區(qū)塊編號的對應關(guān)系,生成區(qū)塊數(shù)據(jù)表。
其中,對已生成隨機數(shù)的區(qū)塊進行標號時,根據(jù)區(qū)塊的時間戳t(k)進行標號。
其中,還包括:選取當前時間區(qū)塊鏈中存在的所有區(qū)塊,對每個區(qū)塊執(zhí)行前述步驟s101-s103,以批量生成私鑰。
下面簡述下私鑰的應用。
私鑰主要用于數(shù)字貨幣的交易。無論是誰擁有了私鑰,就可以對與該私鑰相應的錢包地址中的數(shù)字貨幣進行操作
在生成私鑰之后,還需要將私鑰經(jīng)過非對稱加密算法生成公鑰。而且還需要基于公鑰生成區(qū)塊鏈錢包地址。這樣錢包擁有者才能使用錢包進行交易。
非對稱加密算法是一種不可逆算法,已知私鑰時可以通過非對稱加密算得公鑰,而已知公鑰時卻無法反向計算出私鑰。非對稱加密算法可以是rsa算法、elgamal算法、背包算法、rabin算法、d-h算法、ecc(橢圓曲線加密算法)等。
得到公鑰之后,將一個字節(jié)的地址版本號連接到公鑰哈希頭部,然后對其進行兩次哈希運算,將結(jié)果的前4字節(jié)作為公鑰哈希的校驗值,連接在其尾部。將該計算結(jié)果使用預定編碼方法進行編碼,就得到了錢包地址。
舉例一個本發(fā)明應用在銀行系統(tǒng)中的場景:
某銀行準備發(fā)行一種數(shù)字人民幣,則需要給每一個使用數(shù)字人民幣的用戶配置一個數(shù)字錢包。此時該銀行根據(jù)銀行系統(tǒng)中一段時間內(nèi)所有的交易行為生成區(qū)塊鏈,先選取區(qū)塊鏈中的所有區(qū)塊,提取每個區(qū)塊中的哈希值h(k)和交易信息數(shù)據(jù)dkn,再將每個區(qū)塊中的哈希值h(k)與交易信息數(shù)據(jù)dkn進行拼接并進行哈希計算,生成隨機數(shù),再基于所述隨機數(shù)和身份信息生成私鑰,依次方法生成大量私鑰?;谒借€可以生成公鑰,基于公鑰可以生成錢包地址。為所有的用戶配置數(shù)字錢包之后,對已生成隨機數(shù)的區(qū)塊進行標號,以得到與每個區(qū)塊對應的區(qū)塊編號,創(chuàng)建所述身份信息與所述區(qū)塊編號的對應關(guān)系,生成區(qū)塊數(shù)據(jù)表。該銀行保存此區(qū)塊鏈,其他與本銀行有合作的商業(yè)銀行保存儲存身份信息與區(qū)塊編號一一對應關(guān)系的區(qū)塊數(shù)據(jù)表。
當某用戶丟失自己的私鑰時,他可以在某商業(yè)銀行辦理掛失業(yè)務,在商業(yè)銀行核實用戶身份無誤后,根據(jù)用戶的身份信息在數(shù)據(jù)庫的區(qū)塊數(shù)據(jù)表中查找與此身份信息相對應的區(qū)塊編號,并將區(qū)塊編號發(fā)送給該銀行申請私鑰找回。在該銀行將對應的舊私鑰發(fā)送回來的同時,使用此用戶的身份信息按照本申請基于區(qū)塊鏈生成私鑰的方法生成一個新的私鑰,由私鑰生成新的公鑰和新的錢包地址,即對應一個新的數(shù)字錢包,并重新進行區(qū)塊標號與區(qū)塊數(shù)據(jù)表更新。此時商業(yè)銀行使用舊的私鑰將舊錢包里的數(shù)字貨幣轉(zhuǎn)到新的數(shù)字錢包里(因為舊的私鑰已丟失,不安全),并將新的私鑰提供給用戶??梢?,通過這種方式生成的私鑰,即使私鑰丟失也不會影響數(shù)字貨幣的安全性,重新生成新私鑰也比較簡單易行。
本發(fā)明旨在保護一種基于區(qū)塊鏈大量生成私鑰的方法及裝置。通過同時選取當前區(qū)塊鏈的所有區(qū)塊,并對每個區(qū)塊中的哈希值和交易信息數(shù)據(jù)進行拼接生成隨機數(shù),再基于隨機數(shù)和身份信息生成私鑰,從而達到快速生成大量私鑰的目的。
應當理解的是,本發(fā)明的上述具體實施方式僅僅用于示例性說明或解釋本發(fā)明的原理,而不構(gòu)成對本發(fā)明的限制。因此,在不偏離本發(fā)明的精神和范圍的情況下所做的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。此外,本發(fā)明所附權(quán)利要求旨在涵蓋落入所附權(quán)利要求范圍和邊界、或者這種范圍和邊界的等同形式內(nèi)的全部變化和修改例。