為什麼現代錢包都是 HD 錢包?
回到 2012 年以前,加密貨幣使用者每建立一個新地址,錢包就會隨機產生一組全新的私鑰。這意味著:如果你這週產生 50 個接收地址,你就有 50 把互不相關的私鑰要管理。弄丟其中一把,那個地址裡的資產就永遠鎖死。備份也是惡夢 — 每次增加地址都要重新備份整個錢包檔案。
於是 2012 年,Bitcoin 開發者 Pieter Wuille 提出了一份名為 BIP-32(Bitcoin Improvement Proposal 32)的規範,引入了「階層式確定性錢包」(Hierarchical Deterministic Wallet,HD Wallet)的概念。它的核心想法非常優雅:從一顆「種子」出發,透過數學衍生出無限多把私鑰。你只要備份那顆種子,就備份了未來所有會衍生的地址。
隔年,BIP-39(助記詞)與 BIP-44(多鏈衍生路徑)接續推出,補齊了「人類可抄寫的輸入」與「跨錢包互通的輸出」兩個缺口。這三份規範共同組成了今天所有主流錢包(MetaMask、Ledger、Trezor、Trust Wallet、ArcSign)的共同骨幹。
核心收穫
這篇文章會帶你從 12 字助記詞,一路走到你在 Etherscan 上看到的那個 0x 開頭地址 — 讓你清楚知道中間每一步是怎麼用數學串接起來的。看完之後,你會理解為什麼「助記詞」是唯一需要小心保管的東西,以及為什麼 ArcSign 可以用同一支 USB 同時管理 BTC、ETH、BNB、Polygon 等 7 條鏈。
BIP-39:把隨機熵變成 12 字助記詞
BIP-39 處理的問題很單純:**如何把一串 128-bit 或 256-bit 的隨機亂數,變成人類可以抄寫、不容易出錯的東西?**答案是:用一個 2048 字的標準字典,把每 11 bits 對應一個英文單字。
1
產生熵(Entropy)
用密碼學安全的隨機數生成器(CSPRNG)產生 128 bits(12 字)或 256 bits(24 字)的隨機數。這是整個錢包唯一真正「隨機」的部分 — 熵的品質決定了錢包的安全性。
2
加上檢查碼(Checksum)
對熵做一次 SHA-256,取前 N/32 個 bit 當作檢查碼接在原熵後面(N 是熵長)。128-bit 熵 + 4-bit 檢查碼 = 132 bits;256-bit 熵 + 8-bit 檢查碼 = 264 bits。檢查碼讓錢包可以在你輸入助記詞時立刻偵測出抄寫錯誤。
3
切成 11-bit 段並對應到字典
把總 bits 切成 11-bit 一段,每段對應到 BIP-39 官方字典的一個單字。132 ÷ 11 = 12 個單字;264 ÷ 11 = 24 個單字。這就是你看到的「abandon ability able about …」。
4
經 PBKDF2 轉成 512-bit 種子
把助記詞字串 + 使用者選擇的 passphrase(可選,空字串也行)輸入 PBKDF2-HMAC-SHA512,迭代 2,048 次,產出一個 512-bit 的種子(seed)。這個種子是後續 BIP-32 的輸入。
為什麼是 2048 字的字典?
因為 2048 = 211,這讓每個單字精確對應 11 bits。字典本身也經過嚴選:每個單字前 4 個字母都獨一無二(方便容錯輸入)、沒有拼寫接近的干擾字、避免低俗字眼。不同語言(英文、日文、韓文、繁中、簡中)有各自的 2048 字字典,但建議優先使用英文 — 這是跨錢包最穩的選擇。
BIP-32:一顆種子、無限金鑰
BIP-32 的核心魔術是 HMAC-SHA512:給定一個父金鑰,加上一個「索引值」,可以算出一個子金鑰。而且這個運算是單向的 — 你知道父金鑰可以輕鬆算出所有子金鑰,但從某個子金鑰反推父金鑰在計算上不可行(等同於破解 SHA-512)。
從種子到主金鑰
BIP-39 產生的 512-bit 種子,前 256 bits 當作主私鑰,後 256 bits 當作鏈碼(Chain Code)。主私鑰 + 鏈碼 = 一個「擴展私鑰」(Extended Private Key,xprv),這是整個 HD 錢包樹的根節點。
12 字助記詞
abandon × 11 + about
↓ PBKDF2-HMAC-SHA512(2048 次迭代)
512-bit 種子
5eb00bbddcf069084889a8ab9…
↓ HMAC-SHA512 with key "Bitcoin seed"
主私鑰 + 鏈碼
xprv9s21ZrQH143K…
子金鑰衍生(Child Key Derivation)
有了主金鑰,就可以衍生出第一層子金鑰。對父擴展私鑰 (k_par, c_par) 與索引值 i,BIP-32 定義:
計算
I = HMAC-SHA512(c_par, data)
子私鑰
k_i = (前 256 bits of I) + k_par (mod n)
子鏈碼
c_i = 後 256 bits of I
關鍵在於:同樣的父金鑰 + 同樣的索引值,永遠得到同樣的子金鑰 — 這就是「Deterministic(確定性)」的由來。你的助記詞產生的 HD 樹,今天在 ArcSign 上衍生、明天換一支 USB 用 Ledger 衍生、後天用 MetaMask 衍生,出來的地址一模一樣。
BIP-44:給金鑰樹一個標準化的門牌號
BIP-32 定義了「怎麼衍生」,但沒規定「要怎麼分類」。如果每個錢包自由決定哪個分支給 BTC、哪個分支給 ETH,那不同錢包之間的助記詞就無法互通 — 你從 MetaMask 匯出的助記詞,到 Trust Wallet 可能會顯示完全不同的地址。
BIP-44 解決這個問題。它規定了一個五層階層的標準路徑:
標準路徑
m / purpose' / coin_type' / account' / change / address_index
範例(ETH)
m / 44' / 60' / 0' / 0 / 0
五層路徑的意義
| 層級 | 名稱 | 範例值 | 用途 |
|---|---|---|---|
| m | Master(主金鑰) | — | HD 樹的根節點,來自 BIP-39 種子 |
| 44’ | Purpose | 44’(硬化) | 固定 44’,表示「我遵循 BIP-44 規範」 |
| coin_type’ | Coin Type | 0’(BTC)、60’(ETH)、714’(BNB) | 不同鏈有不同的官方編號(SLIP-44 表) |
| account’ | Account | 0’、1’、2’… | 同一條鏈下的不同「帳戶」(類似銀行分帳戶) |
| change | Change | 0 = 外部、1 = 內部(找零) | 比特幣用於區分收款與找零地址;ETH 通常固定 0 |
| address_index | Address Index | 0、1、2… | 該帳戶下遞增的地址編號 |
常見鏈的 coin_type 對照
SLIP-44(Satoshi Labs Improvement Proposal 44)維護了各條鏈的 coin_type 註冊表。以下是你會遇到的主要鏈:
| 鏈 | coin_type | 標準路徑 |
|---|---|---|
| Bitcoin (BTC) | 0’ | m/44'/0'/0'/0/0 |
| Ethereum (ETH) | 60’ | m/44'/60'/0'/0/0 |
| BNB Smart Chain | 714’(也常用 60’) | m/44'/60'/0'/0/0 |
| Polygon | 60’(EVM 相容) | m/44'/60'/0'/0/0 |
| Solana | 501’ | m/44'/501'/0'/0' |
| Litecoin (LTC) | 2’ | m/44'/2'/0'/0/0 |
為什麼 EVM 鏈大多共用 60'?
因為 Ethereum、Polygon、BNB Chain、Arbitrum、Base、Optimism 等 EVM 相容鏈的地址格式、簽名演算法、私鑰長度完全相同。共用 coin_type 60’ 意味著:同樣的助記詞,在 Polygon、BNB Chain、Arbitrum 上都會產生同一個 0x 地址。這也是為什麼你的 MetaMask 在切換網路時,地址永遠是同一個 — 你管理的是同一把私鑰。ArcSign 在內部仍然支援依鏈分類的帳戶樹,讓你可以選擇「所有 EVM 鏈共用一把地址」或「為重要鏈單獨拆開帳戶」。
硬化衍生(Hardened):單引號背後的安全意義
你一定注意到 BIP-44 路徑裡前三層(44'、60'、0')都帶單引號。這個單引號代表硬化衍生(Hardened Derivation),是 BIP-32 為了防禦一種特定攻擊而設計的變體。
非硬化 vs 硬化的差別
| 類型 | 索引範圍 | 可從「父公鑰」衍生子公鑰? | 適用場合 |
|---|---|---|---|
| 非硬化 (Normal) | 0 ~ 231-1 | ✓ 可以 | Change、Address Index 層(需要對外分享公鑰) |
| 硬化 (Hardened) | 231 ~ 232-1(寫作 0’、1’…) | ✗ 不可 | Purpose、Coin Type、Account 層(安全邊界) |
為什麼上層一定要硬化?
非硬化衍生有一個方便但危險的特性:如果攻擊者同時取得你的父擴展公鑰(xpub)與任何一把子私鑰,他就可以反推出整顆子樹的所有子私鑰 — 甚至推回父私鑰。這被稱為 xpub leakage attack。
硬化衍生徹底阻斷這個攻擊路徑:計算 HMAC 時不使用父公鑰,而是使用父私鑰。這樣一來,即使攻擊者擁有 xpub 和某個子私鑰,在硬化邊界上他們仍然推導不出父金鑰。BIP-44 將前三層(purpose、coin_type、account)全部設為硬化,為錢包的不同「用途 / 鏈 / 帳戶」建立彼此隔離的安全邊界。
記憶訣竅
「帶引號 = 強安全邊界」。凡是你不希望被 xpub leakage 攻擊打穿的層級,都用硬化衍生。比特幣社群的共識是:purpose'/coin_type'/account' 三層一定要硬化,最後兩層(change / address_index)非硬化是為了讓看帳(Watch-only)錢包可以透過 xpub 衍生所有收款地址,而不需要持有私鑰。
ArcSign 如何實作這套規範
ArcSign 完整遵循 BIP-39 / BIP-32 / BIP-44 規範,但在三個地方做了額外強化,讓標準 HD 錢包變成「USB 冷儲存等級」的 HD 錢包:
1
助記詞 + .arcsign 備份雙軌並行
你建立錢包時,ArcSign 會顯示 12 字 BIP-39 助記詞讓你抄寫,同時允許你匯出 .arcsign 加密備份檔(AES-256-GCM + Argon2id,匯出即加密)。助記詞可以在任何相容錢包恢復;.arcsign 則是一鍵恢復包含所有自訂帳戶、地址簿、代幣清單、連線歷史等設定 — 抄寫助記詞解決「跨錢包互通」,.arcsign 解決「還原使用體驗」。
2
種子從不以完整形式留存
從 BIP-39 產生 512-bit 種子的那一刻起,ArcSign 立即用 XOR 三分片加密把種子拆成三片存回 USB。簽名時,三片在 mlock 保護的記憶體中短暫重組成完整種子、衍生出當前路徑的私鑰、完成簽名後整塊記憶體歸零。整個過程的私鑰曝露窗口控制在 1–5 毫秒。
3
同一顆種子,7 條鏈的私鑰
ArcSign 內建 7 條鏈的 BIP-44 路徑表(Bitcoin 主網 / 6 條主流 EVM 相容鏈)。當你在 Dashboard 切換鏈時,ArcSign 只是在背後切換衍生路徑 — 例如從 m/44'/0'/0'/0/0(BTC)切到 m/44'/60'/0'/0/0(ETH)。私鑰不需要重新生成、不需要重新備份,所有鏈的資產共用同一組 12 字助記詞。
Watch-only 地址產生:xpub 的實戰價值
BIP-32 的「擴展公鑰(xpub)」在 ArcSign 還有一個進階用途 — 你可以把某個帳戶的 xpub 匯出到手機或另一台電腦,讓它在完全沒有私鑰的情況下,只用於顯示餘額與產生新的收款地址。這就是 Watch-only 錢包的原理。因為最後兩層(change / address_index)是非硬化衍生,xpub 就足以計算所有子公鑰與地址。
用戶最常踩到的 5 個坑
1
以為「助記詞 + passphrase」可以事後補救
BIP-39 的 passphrase(又稱「第 25 個字」)是在種子衍生時加進 PBKDF2 的輸入。不同 passphrase 會產生完全不同的種子,也就是完全不同的錢包。如果你忘了當初設定的 passphrase,助記詞再正確都救不回來 — 因為它指向的是另一個(空)錢包。設定 passphrase 請務必另外備份它,且不要使用「猜得到的」字串。
2
抄寫助記詞時順序寫反或跳字
BIP-39 的字序至關重要 — 第 5 個字和第 6 個字交換就是完全不同的錢包。而且 BIP-39 的檢查碼只能驗證「整個 12 字是否構成合法助記詞」,無法告訴你「第幾字寫錯」。建議抄寫時每 3 字分組、編號(1-3、4-6、7-9、10-12),並在另一時段用另一隻筆重抄一次核對。
3
把 xpub 當作公開資訊隨便貼
xpub 雖然不包含私鑰,但它會暴露你的所有歷史與未來地址。有心人拿到你的 xpub,就可以追蹤你整個 HD 樹的資金流向、標記你的行為模式,甚至用於針對性釣魚。只有在「你確定要讓對方看到全部交易歷史」時才分享 xpub — 一般收款請分享單一地址即可。
4
以為不同鏈的地址是「獨立的錢包」
其實都是同一顆種子的不同分支。如果你的助記詞洩漏,BTC、ETH、BNB、Polygon、Arbitrum 上的所有資產會同時陷落 — 攻擊者只需要把助記詞輸入任何相容錢包,自動掃描所有 coin_type 的餘額。這也是為什麼「同一組助記詞不要同時當冷錢包和日常熱錢包」。
5
用線上工具「檢驗助記詞」
任何叫你把助記詞輸入到網頁、Discord Bot、Telegram Bot 的工具都是詐騙 — 合法錢包永遠不需要你把助記詞交給第三方。BIP-39 的驗證演算法完全是本地運算:如果真的要檢驗,請在離線環境下用開源工具(如 Ian Coleman 的 BIP-39 工具,斷網執行)。ArcSign 在建立錢包時會在本地即時驗證檢查碼,不需要任何線上查詢。
延伸閱讀
想看種子如何被拆成三片存到 USB,請看 XOR 三分片加密圖解。想了解助記詞本身有哪 5 種備份方式,請看 助記詞保管終極指南。想知道整支 USB 被偷走時會發生什麼事,請看 USB 備份策略。
常見問題 FAQ
Q:一組 12 字助記詞為什麼可以管理 7 條鏈的錢包?
因為 BIP-39 把 12 字助記詞轉換成一個 512-bit 的種子(seed),再透過 BIP-32 的單向 HMAC-SHA512 衍生出主金鑰。之後 BIP-44 的路徑(m/44'/coin_type'/account'/change/index)透過 coin_type 欄位為每條鏈分配獨立的子樹 — 比特幣是 0'、以太坊是 60'、BNB Chain 是 714'。同一組助記詞,可以用數學確定地衍生出數十條鏈、無限多個子地址,而且每個子地址彼此在密碼學上完全獨立。
Q:BIP-32、BIP-39、BIP-44 有什麼差別?
BIP-32 定義「從一顆種子衍生出無限子金鑰」的數學規範(Hierarchical Deterministic Wallet);BIP-39 定義「把隨機熵轉成人類可讀的 12/24 字助記詞」以及助記詞轉種子的流程;BIP-44 在 BIP-32 的基礎上規定標準化的路徑格式(m/44'/coin_type'/account'/change/index),讓不同錢包可以互通。簡單記法:BIP-39 是「輸入端」,BIP-32 是「引擎」,BIP-44 是「輸出的結構標籤」。
Q:如果我遺失 USB 但還留著 12 字助記詞,資產還能救回來嗎?
可以。因為 HD 錢包的設計就是「助記詞是唯一的真相來源」。你可以把 12 字助記詞輸入任何支援 BIP-39 / BIP-44 的相容錢包(ArcSign、Ledger、Trezor、MetaMask、Trust Wallet 等),該錢包會用同樣的數學流程還原出完全相同的主金鑰、所有子地址與餘額。ArcSign 還額外提供 .arcsign 加密備份檔,一鍵匯入就能恢復所有設定,比逐字輸入助記詞更方便。
Q:HD 錢包的私鑰真的是數學衍生出來的嗎?那它安全嗎?
是的,而且非常安全。衍生流程每一步都使用 HMAC-SHA512 這個單向函數:你從父金鑰可以輕鬆算出子金鑰,但從子金鑰反推父金鑰在計算上是不可行的(等同於破解 SHA-512)。BIP-32 還有 Hardened Derivation(硬化衍生,路徑中帶單引號的部分,例如 44')— 這種衍生方式連「公鑰 + 鏈碼」都無法推導出子金鑰,必須有私鑰才行。這是你常在路徑裡看到單引號的原因。整套規範經過超過十年、數千萬個錢包的實戰檢驗,是目前加密貨幣世界最成熟、最被信任的密鑰管理架構。