由 0 開始用 Ethereum
助記詞與路徑

很多人以為助記詞是把 Private key 轉換成人類能理解的單字,但事實上並非如此,現在就讓我們一起探索助記詞與路徑的關係吧。

稱呼

助記詞,原文為 Mnemonic,後來 Metamask 因應 NFT 熱潮而在 2022 年改稱為 Seed-phrase。

技術歷史

在 Bitcoin 歷史上,並非由一開始就有助記詞這項技術。助記詞是基於 BIP-39、BIP-32 及 BIP-44 等多個 Bitcoin 改進計畫而成。

助記詞的功能

助記詞並不是把 Private key 轉換成人類能理解的單字,事實恰恰相反,是使用者先建立助記詞,然後再用軟件順序轉換成 Private key 和 address。

每條助記詞只能建立一條地址?

很多人以為每條助記詞只能建立一條地址,停用地址時必須連同助記詞一同放棄,但其實這是常見誤解。
助記詞並非單獨使用,而是需要連同「路徑(Derivation Path)」一同使用才能做到助記詞本應有的效果。

因此,如果使用者面對助記詞外洩,情況會比 Private key 外洩更嚴重。

路徑

剛才提到每條助記詞可以建立不同的多條地址,這都歸功於路徑。
路徑就像 m/44'/60'/0'/0/0
以下是各數字的意思對照表:
44 60 0 0 0
purpose
用途
(44 代表 BIP-44)
coin_type
網絡編號
例如 60 代表 Ethereum(以太坊)
0 代表 Bitcoin
account
戶口
change
衍生戶口
index
編號

覺得太複雜?
不要緊,高手都不會把全部意思都背誦起來,高手會背誦的只有網絡編號。

這是因為當中的 purpose 在絕大部分情況下都是 44 不會變,account、change 和 index 可以完全由用戶自由選擇。
網絡編號則需要由 Satoshilabs 注冊並寫入列表,從而讓所有人跟隨,以統一的做法達至助記的效果,不會令使用者因為忘記自己的路徑導致遺失資產。
(網絡編號之列表可參考注1)
(注意這個網絡編號是設計予助記詞使用,與其他區塊鏈的編號並無絕對關係,特別是 EVM 的 chain ID)

示範相同助記詞能產生不同 address
Mnemonic / 助記詞 abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about
coin_type / 網絡編號 路徑 Private key / 私鑰 Address / 地址
Ethereum (60) m/44'/60'/0'/0/0 1ab42cc412b618bdea3a599e3c9bae199ebf030895b039e9db1e30dafb12b727 0x9858EfFD232B4033E47d90003D41EC34EcaEda94
Tron (195) m/44'/195'/0'/0/0 b5a4cea271ff424d7c31dc12a3e43e401df7a40d7412a15750f3f0b6b5449a28 TUEZSdKsoDHQMeZwihtdoBiN46zxhGWYdH(以 Base58_check 預設編碼顯示)
0xC8599111F29c1e1E061265b4AF93eA1F274aD78A(以 Hex(16進數)編碼顯示)

可以先產生自己喜歡的 address,再轉換成 Private key 或助記詞嗎?

不可能。
以上3者的產生順序,必須是 助記詞 => Private key => Address,這個順序不能逆轉。只不過助記詞並非產生 address 前的必須步驟,因此可以省略。
因此之故,如果使用者沒有由一開始就產生助記詞,之後亦無方法取得它。
不過有一種名為虛榮地址(Vanity address)的做法,是先產生自己喜歡的格式,然後再用暴力破解找出符合要求的助記詞或 Private key。
虛榮地址沒有絕對的識別方法,廣義上只要該 address 的任何部分對任何一個人有特別意思,那就是虛榮地址。(例如以「1Bitcoin」開首的 Bitcoin address)

  1. Registered coin types (SLIP-44)
  2. Tron的Base58_check及Hex地址轉換器