Security

助記詞的私鑰,安全嗎?

  • May 14, 2021

執行以下操作是否安全?

假設我不想要 HD 錢包,但我想要使用助記詞來記住私鑰的便利。我知道我可以將私鑰的十六進製表示轉換為字節格式,從中我可以得到二進制格式,從那裡我可以按照 BIP-39 生成由該私鑰表示的 24 個單詞(因為一般地址是通過隨機生成一個256 位字,相當於 24 個字)。我現在可以使用這些“助記詞”來記住我的私鑰,並且完全忽略它(因為我總是可以使用這些詞來找回私鑰)。我想我想知道是否存在不同的私鑰可以產生相同的 24 個單詞集合的情況。

這是將 256 位(64 個十六進製字元)種子轉換為 Electrum 種子詞助記符並再返回的兩種機制。

#1 基於 JavaScript

#2 C++ - 基於

但是,下面的命令行界面範例使用機制 #2,使用最不安全的私有種子之一,僅用於展示參考目的。

1%迴聲-n“0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff”| ./bytes_to_words

rover akin begun nifty laboratory point injury upper eldest enjoy gotten suffice batch snake hospital veteran eagle weird sieve podcast mighty oozed bimonthly biggest upper

2%迴聲“Rover Akin 開始漂亮的實驗室點傷上老大享受得到足夠的批次蛇醫院老鷹怪篩播客強大的軟泥雙月刊最大上”| ./inverse_mnemonics

0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff

使用機制#1,結果是可重複的。

BIP 39 不需要可逆性支持(類似於 Electrum 單詞的 ./inverse_mnemonics),儘管它可以實現。請參閱如何為 bip39 種子片語生成有效雜湊?完成這項任務的方法。

以十六進制形式返回到 BIP 39 根種子的映射保證是唯一的。然而,由於與 ed25519 密碼學相關的規範化,比特幣目前未使用,因此可能有多個兩組 25 個 Electrum 單詞映射到相同的功能私鑰。

簡短的回答是肯定的,但你不應該,請參閱下面的第 1 點,而長答案是不,它不安全或不可取。

我想說的是,由於以下幾個原因,您提出的類似於腦錢包式單個私鑰/公鑰對的建議是不可取的:

1)最大的風險是缺少退換貨地址(由於沒有BIP32)在發送任何小於全額餘額的情況下將導致100%的差額損失(更多見這裡

2)因為 BIP39中使用的校驗和會改變您粘貼的二進制數據(即粘貼 256 位 24 個字稍後將返回 264 位,因為附加到最後 11 位組的 8 位校驗和)。

2) 除了 Electrum,大多數錢包只允許導入符合 BIP39 校驗和的助記詞恢復片語,不允許你使用橢圓曲線私鑰。在我看來,最好有一個符合校驗和的助記符,儘管它的安全性是 256 位,或者比沒有有效校驗和的 264 位助記符低 8 位。因為它可以在錢包中更廣泛地使用,以防電子產品出現故障或不再工作/支持等……

**3) 解碼風險:**如果您使用的是生成 Base58 格式的私鑰的軟體,則附加了潛在的有效載荷/校驗和數據,這將增加手動轉換回十六進制時出錯的風險。否則,如果您正在獲取十六進制格式的私鑰,並且絕對確定根據橢圓曲線計算得出的公鑰和後續比特幣格式地址是正確的,您可以將該字元串備份到多種方式。

不過,最好備份整個 bip 39 Mnemonic 加密保險庫,然後使用離線工具訪問任何相關的所需私鑰,例如離線Ian Coleman 的 BIP39 工具(注意:我是該 Github 儲存庫的貢獻者)。儘管您仍然需要處理轉換 Base58 編碼的私鑰,除非您 100% 知道如何做到這一點而不會出錯,否則我不建議您這樣做。

4) 錯誤檢查:根據比特幣中使用的橢圓曲線規範,並非所有 256 位數字都是有效的私鑰(這裡是相關的適用文章)。因此,如果您自己手動生成私鑰,則必須進行錯誤檢查,以確保密鑰小於最大允許值0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141

**5)關於私鑰與助記詞的潛在衝突:**是的,存在這種衝突,這將等於兩個人隨機選擇或猜測相同的私鑰(即,如果助記詞的初始熵與橢圓曲線的熵相同私鑰)。否則,私鑰的密鑰空間就是上面第 4 點中提到的,在比特幣使用的橢圓曲線 secp256k1 上沒有兩個私鑰指向同一個地址。初始熵範圍是 2^256,等於潛在助記符的範圍 2048^24 減去校驗和無效的助記符(否則助記符的密鑰空間將2^264 ==2048^12沒有校驗和要求,但兩者仍然不會改變曲線私鑰空間) .

同樣,我認為遵循行業標準並使用 HD 錢包(您可以使用助記符備份)會更安全。

PS 如果您使用的是英文 BIP39 版本,您可以僅使用 24 個單詞中每個單詞的前 4 個字母進一步壓縮備份,並將它們連接為 44 個字元的字元串。但是當導入錢包時,有些不會自動完成,你可能需要從 2048 個 BIP39 英文單詞列表中手動查找單詞。我使用的編碼方案可以進一步將 44 個字元減少到 22 個字元(包括特殊符號和數字)而不會失去資訊,但僅用於補充備份,而不是作為 BIP39 助記符的獨立替代品。

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