一種基于聯盟鏈的用戶私鑰生成與存儲方法與流程
1.本發明涉及數字加密領域,尤其涉及一種基于聯盟鏈的用戶私鑰生成與存儲方法。
背景技術:
2.當前用戶私鑰生成后一般由用戶存儲或交由單獨第三方機構代管。用戶存儲如果保存得當,安全性最高,但缺點也明顯,容易掉失,一但掉失,就是致命的。第三方機構代管雖不容易掉失,但安全性不高,有被第三方機構未經用戶授權冒用的風險。
3.在區塊鏈世界里,只要保留了私鑰,就能解鎖賬戶,但是通常來說私鑰是由64位字符串組成,如果我們想要創建100個賬戶,那我們就要記100個私鑰,記錄和保存成本是非常大的,況且,在記錄海量的私鑰的過程中,可能還會出現地址和私鑰匹配不上的問題,或者記錄時粗心大意寫錯字母的問題,等等,總而言之,出錯的概率是很高的,由于這種只認私鑰不認人的特點,這些小的錯誤很可能導致資產無法回。
4.為了解決上述問題,提出了bip39協議。bip39協議的核心是,由12或24個單詞(稱為助記詞)來確定自己的賬戶,這些單詞會生成很大的種子,從2的256次方選出一個數,由于隨機生成的數是很大的,所以完全不用擔心生成的單詞會重復。
5.這些單詞生成的賬戶是固定的,拿到這些單詞就可以創建無數多的私鑰、公鑰和地址。我們只需要記住這些單詞,就間接記住了所有區塊鏈上的資產,就如同現實生活中的身份證一樣便捷、高效。
6.在此前提下,助記詞的安全就變得至關重要。助記詞的保存方式比較常用的是本地保存、網絡上保存,但這兩種方式容易丟失以及被竊取,安全度不高。為保證助記詞的安全性,現有方案是將其保存在聯盟鏈上,因為數據一旦上鏈,就不會丟失,也無法被竊取,這中保存方式大大提高了助記詞保存的安全性。
7.現有方案的保存方式是用戶先使用自己的一串密碼對助記詞進行加密,之后再用對稱加密二次加密,加密完成后保存在鏈上。但是現有技術的方法的缺陷就是一旦用戶的密碼丟失,助記詞就永遠沒有辦法獲取。
技術實現要素:
8.鑒于上述問題,提出了本發明以便提供克服上述問題或者至少部分地解決上述問題的一種基于聯盟鏈的用戶私鑰生成與存儲方法。
9.根據本發明的一個方面,提供了一種基于聯盟鏈的用戶私鑰生成與存儲方法包括:用戶私鑰存儲方法包括用戶已有私鑰和用戶無私鑰兩種情況;
10.當用戶已有私鑰時,用戶導入了私鑰和助記詞,并要求存儲;
11.要求用戶輸入密碼,使用所述密碼加密私鑰生成數據包;
12.將所述數據包上鏈;
13.當用戶沒有私鑰時,生成第二助記詞;
14.根據所述第二助記詞推導出第二私鑰;
15.要求用戶輸入密碼,使用所述密碼加密所述第二私鑰生成的第二數據包;
16.將所述第二數據包上鏈。
17.可選的,當用戶已有私鑰時,存儲方法還包括:如果用戶沒有導入所述助記詞,為所述私鑰生成私鑰助記詞;
18.采用所述私鑰助記詞加密私鑰生成私鑰數據包;
19.將所述私鑰數據包上鏈。
20.可選的,所述助記詞通過多方加密上鏈,具體包括:
21.對助記詞交叉分割,增加了單節點破解難度;
22.交叉分割形成metadata數組,保存到組織信息項;
23.每一個組織對各自分割的單詞使用其公鑰pk加密,獲得data數組;
24.將所述data數組保存到加密數據項;
25.對助記詞信息進行json編碼,因為json和結構能互相轉化,然后再對json進行base64編碼;
26.base64編碼生成數據包;
27.數據包上鏈。
28.可選的,所述生成與存儲方法還包括:
29.用戶請求獲取個人私鑰;
30.返回數據包;
31.要求用戶輸入密碼,解密后獲得私鑰;
32.如果用戶忘記密碼,請求獲取助記詞,返回助記詞數據包。
33.本發明提供的一種基于聯盟鏈的用戶私鑰生成與存儲方法包括:用戶私鑰存儲方法包括用戶已有私鑰和用戶無私鑰兩種情況;當用戶已有私鑰時,用戶導入了私鑰和助記詞,并要求存儲;要求用戶輸入密碼,使用所述密碼加密私鑰生成數據包;將所述數據包上鏈;當用戶沒有私鑰時,生成第二助記詞;根據所述第二助記詞推導出第二私鑰;要求用戶輸入密碼,使用所述密碼加密所述第二私鑰生成的第二數據包;將所述第二數據包上鏈。因為聯盟鏈是由彼此互信的成員組成,因此多個節點同時作惡的可能性幾乎為零,既保證了助記詞的安全性,也避免了用戶忘記密碼造成無法獲取助記詞的問題。
34.上述說明僅是本發明技術方案的概述,為了能夠更清楚了解本發明的技術手段,而可依照說明書的內容予以實施,并且為了讓本發明的上述和其它目的、特征和優點能夠更明顯易懂,以下特舉本發明的具體實施方式。
附圖說明
35.為了更清楚地說明本發明實施例的技術方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其它的附圖。
36.圖1為本發明實施例提供的存儲私鑰的流程圖;
37.圖2為本發明實施例提供的獲取私鑰的流程圖。
具體實施方式
38.下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應當理解,可以以各種形式實現本公開而不應被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠將本公開的范圍完整的傳達給本領域的技術人員。
39.本發明的說明書實施例和權利要求書及附圖中的術語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元。
40.下面結合附圖和實施例,對本發明的技術方案做進一步的詳細描述。
41.本發明采用聯盟鏈存儲私鑰的方式,存儲方法不再采用用戶密碼對助記詞進行加密,而是采用聯盟鏈中多個節點分段加密,將十二個單詞分成四部分,用四個節點分別對每部分進行加密,而獲取助記詞時,同樣需要四個節點分別對每個部分分別解密,解密后將四個部分連接到一起才能最終得到助記詞。因為聯盟鏈是由彼此互信的成員組成,因此多個節點同時作惡的可能性幾乎為零,這樣即保證了助記詞的安全性,也避免了用戶忘記密碼造成無法獲取助記詞的問題。
42.原理:密碼加密+多方加密。
43.使用密碼對私鑰進行加密(對稱)保存在區塊鏈上,加密/解密過程都在用戶app里進行。
44.多方成員使用各自公鑰對助記詞加密(非對稱)保存在區塊鏈上,加密過程在個人app里進行,但解密過程分別在成員節點進行。
45.原則:1,私鑰使用密碼加密(對稱)上鏈。2,助記詞多方加密(非對稱)上鏈。3,助記詞不能推導出私鑰的,私鑰使用助記詞再一次加密(對稱)上鏈。
46.發生助記詞不能推導出私鑰的有兩情況:1,用戶導入私鑰和導入助記詞。2,用戶僅導入私鑰,生成新的助記詞。
47.本發明方的存儲私鑰的流程,如圖1所示,用戶已有私鑰
48.用戶通過app僅導入了私鑰(和助記詞,可選)要求存儲。
49.要求用戶輸入密碼,使用密碼(對稱)加密私鑰生成數據包。
50.數據包上鏈。key:"pw_"+身份證id。
51.如果用戶沒有導入助記詞,為私鑰生成助記詞。
52.使用助記詞(對稱)加密私鑰生成另一個數據包
53.另一個數據包上鏈。key:"mn_"+身份證id。
54.a~h,助記詞通過多方加密上鏈。
55.用戶沒有私鑰的情況包括:
56.生成助記詞;助記詞推導出私鑰;
57.要求用戶輸入密碼,使用密碼(對稱)加密私鑰生成數據包。
58.數據包上鏈。key:"pw_"+身份證id。
59.a~h,助記詞通過多方加密上鏈。
60.a~h多方加密上鏈流程:
61.對助記詞交叉分割,增加了單節點破解難度。假定有12個助記詞:torch salad ozone describe craft salute nut school umbrella engine obscure assault
62.有4個組織org1 org2 org3 org4的信息,包含公鑰pk。
63.組織單詞序號org1torch craft umbrella1,5,9org2salad salute engine2,6,10org3ozone nut obscure3,7,11org4describe school assault4,8,12
64.交叉分割形成metadata數組,保存到組織信息項。
65.每一個組織對各自分割的單詞使用其公鑰pk加密。org1保存在data[0],相應的org2保存在data[1],org3保存在data[2],org4保存在data[3]。data數組保存到加密數據項。
[0066]
對助記詞信息進行json編碼,因為json和結構能互相轉化,然后再對json進行base64編碼。base64編碼生成數據包。
[0067]
數據包上鏈。key:"mp_"+身份證id。
[0068]
私鑰存儲過程都是在用戶手機端進行的,保證只有用戶本身或所選組織全部同意才能獲得私鑰。
[0069]
獲取私鑰的流程如圖2所示,用戶請求獲取個人私鑰。key:"pw_"+身份證id。
[0070]
返回數據包。
[0071]
要求用戶輸入密碼。解密(對稱)后獲得私鑰。
[0072]
如果用戶忘記密碼,請求獲取助記詞,返回助記詞數據包。
[0073]
解包獲得base64編碼。
[0074]
base64編碼轉換json編碼再轉成助記詞信息結構。
[0075]
獲取加密數據和組織信息。
[0076]
多方解密。解密過程不在用戶手機端,而是在聯盟鏈各自的節點。節點對解密后的數據進行安全檢查,是否符合bip39協議格式的單詞,以防止惡意用戶傳遞其節點能解密的其他隱私數據。如果通過檢查,再用私鑰對每部分進行加密返回用戶手機端。
[0077]
對解密的結果進行組裝,解密后得到四個部分的助記詞,再將這四個部分的助記詞還原。返回完整助記詞。如果助記詞能推導私鑰,生成私鑰,結束流程。
[0078]
如果助記詞不能推導私鑰,使用key:"mn_"+身份證id,獲取數據包。返回數據包。助記詞解密(對稱)獲得私鑰,最后結束流程。
[0079]
有益效果:因為聯盟鏈是由彼此互信的成員組成,因此多個節點同時作惡的可能性幾乎為零,既保證了助記詞的安全性,也避免了用戶忘記密碼造成無法獲取助記詞的問題。
[0080]
以上的具體實施方式,對本發明的目的、技術方案和有益效果進行了進一步詳細說明,所應理解的是,以上僅為本發明的具體實施方式而已,并不用于限定本發明的保護范圍,凡在本發明的精神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本發明的保護范圍之內。
技術特征:
1.一種基于聯盟鏈的用戶私鑰生成與存儲方法,其特征在于,所述生成與存儲方法包括:用戶私鑰存儲方法包括用戶已有私鑰和用戶無私鑰兩種情況;當用戶已有私鑰時,用戶導入了私鑰和助記詞,并要求存儲;要求用戶輸入密碼,使用所述密碼加密私鑰生成數據包;將所述數據包上鏈;當用戶沒有私鑰時,生成第二助記詞;根據所述第二助記詞推導出第二私鑰;要求用戶輸入密碼,使用所述密碼加密所述第二私鑰生成的第二數據包;將所述第二數據包上鏈。2.根據權利要求1所述的一種基于聯盟鏈的用戶私鑰生成與存儲方法,其特征在于,當用戶已有私鑰時,存儲方法還包括:如果用戶沒有導入所述助記詞,為所述私鑰生成私鑰助記詞;采用所述私鑰助記詞加密私鑰生成私鑰數據包;將所述私鑰數據包上鏈。3.根據權利要求1所述的一種基于聯盟鏈的用戶私鑰生成與存儲方法,其特征在于,所述助記詞通過多方加密上鏈,具體包括:對助記詞交叉分割,增加了單節點破解難度;交叉分割形成metadata數組,保存到組織信息項;每一個組織對各自分割的單詞使用其公鑰pk加密,獲得data數組;將所述data數組保存到加密數據項;對助記詞信息進行json編碼,因為json和結構能互相轉化,然后再對json進行base64編碼;base64編碼生成數據包;數據包上鏈。4.根據權利要求1所述的一種基于聯盟鏈的用戶私鑰生成與存儲方法,其特征在于,所述生成與存儲方法還包括:用戶請求獲取個人私鑰;返回數據包;要求用戶輸入密碼,解密后獲得私鑰;如果用戶忘記密碼,請求獲取助記詞,返回助記詞數據包。
技術總結
本發明提供的一種基于聯盟鏈的用戶私鑰生成與存儲方法包括:用戶私鑰存儲方法包括用戶已有私鑰和用戶無私鑰兩種情況;當用戶已有私鑰時,用戶導入了私鑰和助記詞,并要求存儲;要求用戶輸入密碼,使用所述密碼加密私鑰生成數據包;將所述數據包上鏈;當用戶沒有私鑰時,生成第二助記詞;根據所述第二助記詞推導出第二私鑰;要求用戶輸入密碼,使用所述密碼加密所述第二私鑰生成的第二數據包;將所述第二數據包上鏈。因為聯盟鏈是由彼此互信的成員組成,因此多個節點同時作惡的可能性幾乎為零,既保證了助記詞的安全性,也避免了用戶忘記密碼造成無法獲取助記詞的問題。碼造成無法獲取助記詞的問題。碼造成無法獲取助記詞的問題。
