Wallet

如何在不同數量的單詞之間來迴轉換助記詞?

  • July 31, 2019

總的來說,我對加密貨幣還比較陌生,我嘗試過使用比特幣和一些山寨幣,但有些數字資產並非在所有錢包中都可用,這總是讓我感到困擾。據我了解,我可以在所有錢包中使用相同的助記詞,即使某些資產沒有列出,如果這是真的,我就不必為每個錢包儲存不同的單詞列表。唯一的問題是大多數流行的錢包在助記詞中支持不同數量的單詞。是否可以在例如 24 個單詞的片語和 12 個單詞的片語之間來迴轉換,我可以使用哪些工具進行轉換?

是否可以在例如 24 個單詞的片語和 12 個單詞的片語之間來迴轉換,我可以使用哪些工具進行轉換?

不,那是不可能的。助記詞代表一個熵,例如 24 個詞的助記詞代表 256 位的熵,而 12 個詞的助記詞代表 128 位的熵。這些助記詞被傳遞給一個 PBKDF2 函式以生成一個種子,然後該種子將用於為不同的令牌生成主密鑰。同樣重要的是要注意,如果您在錢包中使用密碼,該密碼將在 PBKDF2 函式中用作“鹽”,如果您不使用密碼,它將生成完全不同的種子。

據我了解,我可以在所有錢包中使用相同的助記詞,即使某些資產沒有列出,如果是這樣,我就不必為每個錢包儲存不同的單詞列表

這樣做時必須小心,因為許多錢包使用不同的主密鑰生成路徑。如果您交替使用多個錢包,請嘗試記下派生路徑。例如,假設硬體錢包 A 使用 m/49’/0’/0’ 作為路徑,與使用 am/44’/0’/0’ 派生的錢包相比,它將生成完全不同的地址。

我問過自己類似的問題,這些問題導致更多地了解比特幣的助記符,就像許多其他(不是全部)加密貨幣一樣,它們使用BIP39,這是一個基於 2048 個單詞的唯一單詞列表的規範(從 0 到 2047 的零索引) ) 以各種語言提供(儘管我應該注意,您不能跨受支持的語言翻譯單詞,因為對於給定的助記符,它們在不同語言之間不具有相同的索引值,就您可能暗示的一種“轉換”方法而言)。

  • BIP39 的目的是創建一個人類可讀的助記詞(易於編寫、背誦、閱讀等),而助記詞所代表的底層二進制數據是機器可讀的(零和一,可以是以十六進制格式或其他符號/基數表示)但不容易編寫/背誦,因此 BIP39 解決了這個問題,但是,了解表面下發生的事情是處理助記符和控制加密安全的關鍵。

**關於助記符:**每個助記符的基礎是一個非常大的隨機數和一個添加到末尾的校驗和,這就是為什麼你不能只選擇自己的 12 或 24 個單詞,因為最後一個單詞的一部分是根據這個校驗和計算的 (更多內容如下)。

例如,在 BIP39 中,wordlist 對應於 2^11 次方(即 2048)的範圍,助記符最終為 12 或 24 個字的原因取決於所需的位安全性,取決於它是否為 128 位或 256 位。

因此,當您點擊創建符合 BIP39 的錢包時,應該有一個加密安全的偽隨機數生成器 (CSPRNG),例如用於基於 Web 的錢包的 WorldWideWide Consortium (W3C) 加密 API(注意:我是其中的貢獻者Github 上的規範)在本地執行,它以一種使攻擊者難以復製或預測的方式從本地設備收集各種隨機性位,然後將這些位用作初始熵(以創建助記符)。

  • 換句話說,對於 24 字的助記符,設備將產生 256 位並將該字元串轉換為字節數組並使用 SHA256 對其進行雜湊處理,從而產生另一個 256 位輸出,其中前 8 位被獲取並附加到初始熵的末尾,使其長度為 264 位。

如果將 264 位除以每個字的 11 位,則生成的 24 組 11 位每組對應於每個字在列表中的相同 11 位索引值(其中 0 = 00000000000 和 2047 = 11111111111)。因此,每個單詞對應於結果助記符中的一個 11 位數字。這些詞只是找到 11 位數字的簡單方法,重新創建初始熵+校驗和以導出錢包。

在轉換方面: 不建議選擇您自己的單詞,首先因為選擇過程可能會有一些偏差,與隨機生成的助記符相比,這會降低助記符的安全性,其次因為校驗和必須確定地計算(因此,如果您將 24 個單詞減半並在另一個錢包中使用前 12 個單詞,那麼它符合校驗和的可能性非常低(1/16 機會),而選擇您自己的 24 個單詞則更不可能成為校驗和投訴(1/256 機會)。

  • 因此,最好不要選擇自己的單詞或切分助記詞,而是在冷儲存環境(離線)中使用受信任的軟體,以獲得最大的安全性。

**熵:**這同樣適用於選擇您自己的熵,因為最好將其留給受信任的軟體。雖然,業內其他人已經給出了一些例子,例如擲硬幣 128 次,每個正面都寫 1,每個反面都寫 0,這是一種手動為錢包創建 128 位熵的方法(錢包將計算4 位校驗和)前提是硬幣翻轉過程是隨機的(即沒有單面加權硬幣)。

  • 但是,很多錢包不允許你粘貼熵,只允許導入或動態生成助記詞。

有一個助記符轉換器工具注意:我是 Github 上的貢獻者)具有高級功能,可以接受熵來創建各種長度的助記符,但我不建議剛開始的人甚至那些有多年經驗的人這樣做除非您精通 BIP39 規範,以及 BIP44 和 BIP32 以及所有無數種方式,一個微小的錯誤都可能導致不可逆轉的資金損失。

關於轉換的問題:雖然我不確定您所說的“轉換”究竟是什麼意思,假設您的意思是將 24 助記符切成兩半以僅使用前 12 個單詞,但我已經在上面解釋了為什麼這不是一個可行的選擇,除非這 12 個單詞最終符合校驗和。(某些軟體可以掃描有效的 24 字助記符,以找到僅使用前 12 個字時也符合校驗和的助記符,但最後 12 個字可能不符合校驗和,因為有 1/256 的機會前 12 和後 12 都是)。

  • 這樣的助記符存在,但很難找到/創建,同時保持所需的位安全級別(將助記符減少一個字會使其安全性降低一半,因此 12 字助記符的安全性不及 24 -word mnemonic 但其安全性僅等於 24 字助記符的平方根,其中 2^128*2^128 == 2^256。**注意:**我編寫了一個類似的程序,可以找到有效的可逆回文助記符符合 BIP39 的校驗和,但僅用於教育目的。

**關於在所有錢包中使用相同的助記詞:**如果一個錢包兼容 BIP39,那麼它很有可能也兼容 BIP44 以支持多賬戶/多幣,這意味著只要添加了正確的派生路徑即可支持該錢包的開發人員,該加密貨幣將受到支持並且可以與您現有的助記符一起使用(但如果他們使用不同的詞表,例如門羅幣,它不兼容 BIP39)。這就是為什麼我喜歡將助記符視為加密貨幣庫而不是錢包的原因(因為一個助記符可以包含多個加密貨幣賬戶,每個賬戶包含多個錢包,請參閱高畫質錢包以了解基於 BIP32 的更多資訊)。

  • 雖然將所有加密資產合併到一個助記詞上可能很方便,但它也將風險集中在負責管理該助記詞的託管方面,而擁有多個具有多個加密貨幣的助記詞會增加管理更多加密金庫的負擔,但降低風險以防萬一受到損害(我認為大多數精明的加密貨幣投資者都有多個,因為一個或多個可用於連接網際網路的設備上的熱錢包,而用於冷儲存的其他助記符在硬體上永遠不會線上連接的錢包或設備。

**要點:**最好使用底層代幣/加密貨幣項目提供的軟體,因為一些項目使用不同的詞表,和/或其他可能導致助記詞不兼容並導致資金永久損失或其他不便的差異,例如如果根種子或其他步驟因未知原因而出現分歧,即使選擇相同的派生路徑,相同的助記符也可以派生在軟體中不匹配的不同地址(並且這種故障排除對於發現潛在錯誤非常技術性)。

隨機生成的助記符的範例技術數據(請勿將其用於真實資金):


Initial entropy of 128 bits in hex format: 659b8a03bfbb80cdcdc3c383d4b0d505 bytearray(b'e\x9b\x8a\x03\xbf\xbb\x80\xcd\xcd\xc3\xc3\x83\xd4\xb0\xd5\x05') <--- Entropy as bytes c993b627272ef0cbc683ce275cf47ff82f73403ece8155bdd92c2dca2d86e3b1 <--- SHA-256 hash digest of entropy bytes, in hex format c <--- Partial fragment of initial "byte" of hash representing first 4 bits. c <--- First n bits of hash to convert to hex 1100 <--- Checksum (hex to bits) Initial entropy + checksum = total bits: 011001011001101110001010000000111011111110111011100000001100110111001101110000111100001110000011110101001011000011010101000001011100 Length of total bits: 132 divided into 12 groups of 11 bits ['01100101100', '11011100010', '10000000111', '01111111011', '10111000000', '01100110111', '00110111000', '01111000011', '10000011110', '10100101100', '00110101010', '00001011100'] Corresponding index values for each group (in base 10): [812, 1762, 1031, 1019, 1472, 823, 440, 963, 1054, 1324, 426, 92] Corresponding mnemonic: grain sword liberty legal retreat group damage journey long pitch crystal argue


引用自:https://bitcoin.stackexchange.com/questions/89500