1. 程式人生 > >助記詞是什麽,有什麽用?

助記詞是什麽,有什麽用?

smooth map 生生 ont hmac 構建 ole 允許 基本原理

  玩加密貨幣的朋友相信對助記詞都不陌生,我們在使用錢包之前,會讓你備份12個單詞,在備份期間不允許截圖操作,並且不斷強調這12個單詞非常重要,最好用物理方式備份,備份時身邊不要有任何人。

  對於普通用戶來說,如果只是一味的向他們強調助記詞重要性的結論,而不告訴背後的原因的話,是很難調動起人的底層動力的,很可能過幾天就忘了助記詞的重要性(小編已經看過不少在群裏呼喚自己因為助記詞丟失而導致破產的杯具)。

  助記詞的英文是Mnemonic,在大部分人的印象中,助記詞=私鑰,是導入錢包的工具,其實準確的說,助記詞私鑰,那麽,助記詞到底是從何而來,助記詞到底有什麽用呢?

  多賬戶需求

  我們先拿現實生活的例子打一個比方,通常來說,我們存在銀行的錢都會有很多賬戶,有的賬戶用來買煎餅果子的零錢賬戶,有的是用來對公業務的賬戶,有的是存大額資產的賬戶。這些賬戶只需要一個身份證就能夠辦理,我們用一個身份證可以在網銀上登錄很多賬戶,萬一銀行卡不慎丟失了,也可以通過身份證進行補辦。在現實生活中,身份證是無比重要的。

  而到了數字貨幣的世界,道理也是一樣的,為了業務的方便,我們通常想要有多個賬戶,滿足不同場景的需求。如果說每次創建賬戶都在公鏈上生成一個私鑰,那就像每次辦理銀行卡都要記憶一長串的銀行卡號一樣的反人性。

  降低出錯概率

  眾所周知,在區塊鏈世界裏,只要保留了私鑰,就能解鎖賬戶,但是通常來說私鑰是由64位的很長的字符串組成,如果我們想要創建100個賬戶,那我們就要記100個私鑰,記錄和保存成本是非常大的,況且,在記錄海量的私鑰的過程中,可能還會出現地址和私鑰匹配不上的問題,或者記錄時粗心大意寫錯字母的問題,等等,總而言之,出錯的概率是很高的,由於數字貨幣這種只認私鑰不認人的特點,這些小的錯誤很可能導致資產無法找回。

  保護隱私

  由於區塊鏈公有鏈的公開的特性,鏈上的所有轉賬記錄任何人都可以查到,如果同一個賬戶關聯的收入支出太多了,最終是可以摸出一些線索,把你和一些交易給匹配起來的,所以為了隱私考慮,我們的很多隱私業務通常會創建出新的賬戶來進行交易。

  聰明的開發人員為了解決上述問題,提出了Bip39協議。Bip39協議的全稱是Bitcoin protocol最初是由比特幣社區的開發者提出,後來被其他的主流區塊鏈項目所認可,繼而成為了整個行業共識和規範。

  BIP39協議的核心是,由12個單詞來確定自己的賬戶,12個單詞會生成很大的種子,從2256次方選出一個數,由於隨機生成的數是很大的,所以完全不用擔心生成的

12個單詞會重復。

  12個單詞生成的賬戶是固定的,拿到的12個單詞就可以創建無數多的私鑰、公鑰和地址。

  用公式表示他們之間的關系,可寫成如下形式:

  私鑰=算法1(助記詞)

  公鑰=算法2 (私鑰)

  公鑰哈希=算法3 (公鑰)

  地址=算法4 (公鑰哈希)

  所以,地址=算法4(算法3(算法2(算法1(助記詞))))

  當然,算法1234都是公開的算法。

  通過密碼學的保證,生成的單詞順序和內容是不可能會重復的,通過助記詞,我們可以生成任意公鏈的地址,需要多少的地址就能夠生成有多少個地址。

  大家可以通過https://iancoleman.io/bip39/生成助記詞或者查看助記詞對應的私鑰、公鑰和地址。

  並且,BIP39協議幾乎是支持所有公鏈的。

技術分享圖片

小豹拿小豹私人的Matemask的助記詞做了個實驗:

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

  可以看到,通過我的Matemask的助記詞創建的賬戶地址,和網站生成的地址是一模一樣的,就連順序也是高度一致的。

  技術角度理解助記詞

  從技術上的角度來說,BIP39 是通過12個助記詞的單詞序列,通過 PBKDF2 HMAC-SHA512 函數創建出隨機種子作為 BIP32 的種子(通常是16進制的)。

  相比於BIP32協議,我們可以看出那一種備份起來更友好:

  //BIP32 隨機數種子090ABCB3A6e1400e9345bC60c78a8BE7

  //BIP39 助記詞種子

  candy maple cake sugar pudding cream honey rich smooth crumble sweet treat

使用助記詞作為種子其實包含2個部分:助記詞生成及助記詞推導出隨機種子。

  生成助記詞

  助記詞生成的過程是這樣的:先生成一個128位隨機數,再加上對隨機數做的校驗4位,得到132位的一個數,然後按每11位做切分,這樣就有了12個二進制數,然後用每個數去查BIP39定義的單詞表,這樣就得到12個助記詞,這個過程圖示如下:

技術分享圖片

助記詞推導出種子

  這個過程使用密鑰拉伸(Key stretching)函數,被用來增強弱密鑰的安全性,PBKDF2是常用的密鑰拉伸算法中的一種。

  PBKDF2基本原理是通過一個為隨機函數(例如 HMAC 函數),把助記詞明文和鹽值作為輸入參數,然後重復進行運算最終產生生成一個更長的(512 位)密鑰種子。這個種子再構建一個確定性錢包並派生出它的密鑰。

  密鑰拉伸函數需要兩個參數:助記詞和鹽。鹽可以提高暴力破解的難度。 鹽由常量字符串 “mnemonic” 及一個可選的密碼組成,註意使用不同密碼,則拉伸函數在使用同一個助記詞的情況下會產生一個不同的種子,這個過程圖示圖下:

技術分享圖片

  助記詞推動了區塊鏈的普及

  有了助記詞之後,任何一筆交易,我們都可以創建一個新的賬戶,賬戶裏面的錢也可以進行自由轉移。

  在區塊鏈世界,只需要記住12個簡單的助記詞,就間接記住了所有區塊鏈上的資產,就如同現實生活中的身份證一樣便捷、高效。

  有了助記詞之後,大大減輕了普通用戶的使用成本,從體驗上來說對用戶是非常友好的,這拉進了區塊鏈與普羅大眾的距離,同時也滿足了高端用戶的隱私問題。可以這麽說,BIP39協議大大的推動了區塊鏈的普及。

  可能有人會說,我最討厭英語啊,讓我記12個英語單詞,簡直就是要了我的命啊!

  對於這部分用戶我先不做評價,但是聰明的開發者早就想到了這一點,BIP39協議目前是支持了幾大主流語言的,英語、日語、西班牙語、韓語、法語,當然也少不了中文,所以大家完全可以用12個漢字作為助記詞。

  如果連12個漢字都懶得記的話,那我只能說,施主,區塊鏈世界實在與你無緣,找個好人就嫁了吧。

  當然,任何事物都有兩面性,助記詞雖然帶來了許多便利,但是,也誕生了另外的安全隱患,那就是一旦12個單詞泄露,或者被黑客獲取,助記詞是未經加密的私鑰,任何人得到了你的助記詞,可以不費吹灰之力的奪走你的資產控制權。

作者:獵豹區塊鏈

原文鏈接:https://www.kg.com/article/513424206583697408

助記詞是什麽,有什麽用?