加密錢包恢復指南

專注比特幣、以太坊等主流加密貨幣錢包的助記詞與密碼恢復,提供經驗證的方法、工具教學與資產安全預防指南。

Solana 助記詞生成原理詳細解析:從 BIP-39 到 Ed25519 的完整金鑰派生流程

Solana 助記詞生成原理詳細解析:從 BIP-39 到 Ed25519 的完整金鑰派生流程

引言:助記詞是錢包主權的起點

在 Solana 生態中,助記詞通常由 12 或 24 個英文單詞組成。它是使用者備份與恢復錢包的核心,但本身並不是私鑰,也不是可直接簽署交易的位元組。真正發生的事情,是一條嚴謹的密碼學流水線:隨機熵經過 BIP-39 編碼為人類可讀詞語,再透過 PBKDF2 產生種子,最後用 SLIP-0010 與 Ed25519 派生金鑰,並以 Base58 輸出 Solana 地址。理解這條流水線,能幫助使用者正確備份,也能讓開發者避免實作錯誤。

一、BIP-39:把熵變成助記詞

1. 熵與詞數的關係

BIP-39 規定助記詞的熵長度可為 128、160、192、224 或 256 位元,對應 12、15、18、21、24 個單詞。Solana 錢包最常見的是 12 詞與 24 詞。BIP-39 詞表固定為 2048 個單詞,因此每個單詞可表示 11 位元,因為 2^11 = 2048。

生成時,錢包先使用密碼學安全偽隨機數生成器取得熵。例如 128 位元熵會產生 12 詞助記詞;256 位元熵會產生 24 詞助記詞。這裡最重要的是熵必須來自 CSPRNG,不能由使用者自行亂選,也不能用時間戳或簡單隨機函式替代。

2. 校驗和如何附加

BIP-39 會對熵做一次 SHA-256 雜湊,並取雜湊前 ENT/32 位元作為校驗和。12 詞的熵為 128 位元,校驗和為 4 位元;24 詞的熵為 256 位元,校驗和為 8 位元。

接著,系統把「熵 + 校驗和」的位元串每 11 位元切成一組。每一組的數值介於 0 到 2047,對應 BIP-39 詞表中的索引。12 詞的總位元數是 128 + 4 = 132,正好可分為 12 組 11 位元;24 詞則是 256 + 8 = 264,正好可分為 24 組 11 位元。

3. 為什麼順序與詞表很重要

SLIP-0010

助記詞的詞序不可任意調換,因為位元分組與索引映射具有固定順序。不同語言可能有不同 BIP-39 詞表,但同一組熵在不同詞表下會產生不同單詞序列。實務上,錢包恢復時必須使用相同語言詞表與相同順序,否則會得到錯誤的助記詞或無法通過校驗。

二、從助記詞到 64 位元組種子

BIP-39 助記詞本身不是最終私鑰。BIP-39 定義了從助記詞派生種子的方法:將助記詞句子與可選的 passphrase 進行 NFKD 正規化,然後使用 PBKDF2-HMAC-SHA512,迭代次數為 2048,salt 為「mnemonic」串接 passphrase,輸出 512 位元,也就是 64 位元組種子。

這裡的 passphrase 常被稱為 BIP-39 passphrase,它不同於錢包 App 的登入密碼或 PIN。加入 passphrase 會讓同一組助記詞產生完全不同的種子,因此也會派生完全不同的 Solana 地址。若使用者忘記 passphrase,即使助記詞正確,也無法恢復對應錢包。沒有 passphrase 時,salt 就是「mnemonic」。

三、Solana 的 Ed25519 金鑰派生

1. 為什麼不是比特幣式派生

Solana 使用 Ed25519 作為數位簽章演算法,而不是比特幣與以太坊常見的 secp256k1。這代表金鑰派生不能直接照搬 BIP-32 的 secp256k1 派生。Solana 錢包通常採用 SLIP-0010 的 Ed25519 派生規則。SLIP-0010 為 Ed25519 定義了只支援硬化派生的層級金鑰樹,因此路徑中的每一層通常都帶有單引號,例如 m/44'/501'/0'/0'。

其中 44' 代表 BIP-44 的 purpose,501' 是 SLIP-0044 中註冊給 Solana 的 coin type。Solana 常見預設派生路徑是 m/44'/501'/0'/0',部分錢包會透過改變帳戶索引派生多個帳戶,例如 m/44'/501'/1'/0'。要注意的是,不同錢包或不同設定可能採用不同派生路徑;同一組助記詞若使用不同路徑,會得到不同地址。

2. 主金鑰與子金鑰

SLIP-0010 的 Ed25519 主金鑰派生大致如下:以「ed25519 seed」作為 HMAC-SHA512 的金鑰,對 64 位元組 BIP-39 種子做 HMAC-SHA512,得到 64 位元組輸出。左半部分成為主私鑰,右半部分成為鏈碼。

BIP-39

子金鑰派生時,對於硬化索引,資料會是 0x00 加上父私鑰,再串接索引與鏈碼,透過 HMAC-SHA512 產生新的私鑰與鏈碼。硬化索引通常表示為 index + 2^31。最終得到的 32 位元組私鑰種子,會用來建立 Ed25519 金鑰對。

3. Ed25519 金鑰對與 Solana 地址

Ed25519 會從私鑰種子擴展出簽章所需的純量與前綴,再透過曲線運算產生 32 位元組公鑰。Solana 的 keypair 檔案通常表示為 64 位元組陣列,內容是 32 位元組私鑰種子加上 32 位元組公鑰。最後,Solana 地址就是將 32 位元組公鑰進行 Base58 編碼。這個過程不像以太坊那樣再取 Keccak-256 雜湊,也不是比特幣的 Base58Check;Solana 地址本質上就是公鑰的 Base58 表示。

四、完整流程總覽

以下用一個簡化表格整理從隨機數到 Solana 地址的步驟:

| 階段 | 輸入 | 主要標準或演算法 | 輸出 |
| --- | --- | --- | --- |
| 1 | CSPRNG 隨機熵 | BIP-39 | 128 或 256 位元熵 |
| 2 | 熵 | SHA-256 校驗和 | 熵加校驗和位元串 |
| 3 | 位元串 | 11 位元分組與 BIP-39 詞表 | 12 或 24 詞助記詞 |
| 4 | 助記詞與可選 passphrase | PBKDF2-HMAC-SHA512,2048 次迭代 | 64 位元組 BIP-39 種子 |
| 5 | 種子與派生路徑 | SLIP-0010 Ed25519 | 派生私鑰種子 |
| 6 | 私鑰種子 | Ed25519 | 32 位元組公鑰 |
| 7 | 公鑰 | Base58 | Solana 地址 |

Ed25519

這條流程有一個關鍵特性:只要熵、passphrase、詞表、派生路徑與錢包實作一致,任何相容錢包都能恢復出相同地址與私鑰。反之,只要其中任一項不同,結果就會不同。

五、安全要點與常見誤區

第一,助記詞等同於資金控制權。任何取得助記詞的人,都能在沒有硬體錢包的情況下重建私鑰並轉走資產。不要截圖、不要上傳雲端、不要貼到聊天室,也不要輸入到來路不明的網站。

第二,BIP-39 校驗和只能檢測部分輸入錯誤,例如錯字、順序錯誤或無效詞,無法防止惡意竊取。通過校驗也不代表這組助記詞沒有被洩露。

第三,passphrase 不是錢包密碼。錢包密碼通常只解鎖本機介面,而 BIP-39 passphrase 會參與種子派生。若使用 passphrase,必須與助記詞分開備份,並確保長期可取得。

第四,同一組助記詞在不同派生路徑下會生成不同地址。從舊錢包遷移到新錢包時,若看不到資產,應先確認派生路徑設定,而不是急著認定助記詞失效。

第五,Solana 地址可以公開分享,因為它只是公鑰表示;私鑰與助記詞則必須保密。開發者應使用經過審計的函式庫,例如 BIP-39、SLIP-0010、Ed25519 與 Solana SDK 的標準實作,不應自行發明加密流程。

六、理解原理的實務價值

對一般使用者而言,理解生成原理能建立正確備份觀念:助記詞是熵的編碼,passphrase 是額外因子,派生路徑決定帳戶位置,地址只是公鑰輸出。對開發者而言,理解 BIP-39 到 Ed25519 的每一步,能避免錢包恢復、硬體錢包整合、多帳戶派生與離線簽名中的常見錯誤。

總結

Solana 助記詞生成原理可以濃縮為一條標準化管線:CSPRNG 產生熵,BIP-39 加入校驗和並映射為 12 或 24 個單詞,PBKDF2-HMAC-SHA512 將助記詞與可選 passphrase 轉為 64 位元組種子,SLIP-0010 以 Ed25519 規則派生金鑰,最後將公鑰以 Base58 編碼成 Solana 地址。掌握這套流程,不僅能更安全地備份錢包,也能在跨錢包恢復與開發實作時做出正確判斷。