比特幣錢包內部運作機制完整指南
深入解析比特幣錢包的內部運作原理,包括 HD 錢包 BIP-32/39/44 標準、私鑰管理、地址生成、交易建構與簽章流程,以及錢包備份與安全策略。
比特幣錢包內部運作機制完整指南
比特幣錢包是使用者與比特幣網路互動的橋樑,其內部運作機制涉及複雜的密碼學與資料結構。理解錢包的內部運作原理,不僅有助於正確使用比特幣,更能確保資產安全並避免常見的錯誤認知。本文將深入解析比特幣錢包的各個層面,從金鑰生成到交易建構,提供完整的技術脈絡。
錢包的本質:私鑰管理容器
比特幣錢包的核心功能是安全管理私鑰(Private Key),而非「存放」比特幣。比特幣本質上只是區塊鏈帳本上的數字紀錄,誰擁有對應私鑰的控制權,誰就能支配這些比特幣。這一基本事實是理解比特幣錢包的起點。
私鑰的數學基礎
比特幣私鑰是一個在 secp256k1 橢圓曲線上隨機生成的 256 位元整數。根據比特幣共識規則,有效的私鑰必須滿足以下條件:
- 私鑰必須在 1 到 n-1 之間,其中 n ≈ 1.158×10⁷⁷(這是 secp256k1 曲線的階)
- 私鑰必須均勻隨機分布,確保無法被猜測
從私鑰可以透過橢圓曲線標量乘法計算對應的公鑰(Public Key),公式為:
公鑰 = 私鑰 × G
其中 G 是 secp256k1 曲線的生成點(Generator Point),具有確定的標準化座標:
- Gx = 0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798
- Gy = 0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8
橢圓曲線單向函數的數學特性保證了從公鑰無法推導出私鑰,這是比特幣安全性的數學基礎。
橢圓曲線密碼學深入探討
secp256k1 曲線是比特幣採用的橢圓曲線,其方程式為:
y² = x³ + 7 (mod p)
其中 p = 2²⁵⁶ - 2³² - 2⁹ - 2⁸ - 2⁷ - 2⁶ - 2⁴ - 1
這是一個定義在有限域上的橢圓曲線。曲線上的點(x, y)滿足上述方程式,加上位於無窮遠處的特別點 O(稱為無窮遠點),構成一個循環群。
橢圓曲線標量乘法的計算複雜度隨著位元數增加而線性增長,但逆向運算(即離散對數問題)沒有已知的多項式時間演算法,這保證了比特幣金鑰對的安全性。
隨機數生成與安全性
私鑰的隨機性直接決定了錢包的安全性。弱的隨機數生成器(Random Number Generator,RNG)可能導致私鑰可被預測,這是比特幣歷史上多起安全事件的根本原因。評估比特幣錢包時,應確認其使用的隨機數生成方案:
- 硬體隨機數生成器(HRNG):利用硬體元件的物理雜訊產生真正的隨機數,是最安全的選擇
- 作業系統隨機數:如 Linux 的 /dev/urandom、Windows 的 CryptGenRandom、macOS 的 /dev/random
- 助記詞(Seed)衍生:從高熵隨機種子透過確定性演算法衍生私鑰,是現代錢包的標準做法
私鑰格式與編碼
比特幣私鑰有多種編碼格式,用於不同的應用場景:
不同私鑰格式:
1. 原始格式(Raw):
- 32 位元組的隨機數
- 二進制資料
2. HEX 格式:
- 64 個十六進制字元
- 例如:0000000000000000000000000000000000000000000000000000000000000001
3. WIF(Wallet Import Format):
- Base58Check 編碼
- 52 個字元(未壓縮)/ 51 個字元(壓縮)
- 版本位元組:0x80(主網)/ 0xEF(測試網)
4. WIF-C(WIF Compressed):
- 壓縮格式,附加 0x01
- 對應壓縮公鑰
5. Mini Format:
- 只有 6 位元組
- 用於 QR 碼等空間受限場景
公鑰的計算與格式
從私鑰計算公鑰是橢圓曲線標量乘法的過程:
公鑰計算過程:
1. 私鑰 d 為隨機整數(1 到 n-1)
2. 公鑰 Q = d × G
3. G 為生成點
4. Q = (x, y) 為曲線上的點
公鑰格式:
1. 未壓縮格式(65 位元組):
- 前綴 0x04
- x 座標(32 位元組)
- y 座標(32 位元組)
- 例如:0479BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8
2. 壓縮格式(33 位元組):
- 前綴 0x02(y 為偶數)或 0x03(y 為奇數)
- x 座標(32 位元組)
- 例如:0279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798
分層確定性錢包(HD Wallet)架構
現代比特幣錢包普遍採用分層確定性錢包(Hierarchical Deterministic Wallet,HD Wallet)架構,透過單一種子生成整個錢包的所有私鑰,大幅簡化了備份與管理流程。
BIP-32 標準:確定性金鑰衍生
BIP-32(Bitcoin Improvement Proposal 32)定義了從單一種子衍生金鑰樹的標準方法。其核心特性包括:
確定性衍生:相同的种子永远产生相同的金鑰序列,這使得錢包備份變得極為簡單——只需備份 12-24 個單詞的助記詞,即可恢復整個錢包。
分層結構:金鑰可以組織成樹狀結構,支援不同用途的金鑰分支,例如:
m/0/0/0 - 主要收款地址(用於一般收款)
m/0/0/1 - 主要收款地址(下一個)
m/0/1/0 - 次要收款地址(用於不同用途)
m/1/0/0 - 變更地址(用於交易找零)
m/44'/0'/0'/0/0 - BIP-44 建議的路徑(硬體錢包標準)
m/84'/0'/0'/0/0 - 原生隔離見證(Native SegWit)
m/86'/0'/0'/0/0 - Taproot
BIP-32 派生演算法詳解
BIP-32 的核心是 CKD(Child Key Derivation)函數:
CKDpriv 函數(從父私鑰派生子私鑰):
輸入:
- 父私鑰 (k_par)
- 父鏈碼 (c_par)
- 索引 (i)
輸出:
- 子私鑰 (k_i)
- 子鏈碼 (c_i)
步驟:
1. 如果 i >= 2^31(硬化派生):
- I = HMAC-SHA512(key=k_par, data=0x00 || ser256(k_par) || ser32(i))
2. 否則(普通派生):
- I = HMAC-SHA512(key=k_par, data=serP(point(k_par)) || ser32(i))
3. k_i = parse256(I[0:32]) + k_par (mod n)
4. c_i = I[32:64]
5. 如果 k_i = 0,無效,需要處理邊界情況
CKDpub 函數(從父公鑰派生子公鑰):
只用於普通派生(i < 2^31):
- I = HMAC-SHA512(key=c_par, data=serP(K_par) || ser32(i))
- K_i = point(parse256(I[0:32])) + K_par
- c_i = I[32:64]
BIP-39 助記詞標準
BIP-39 將二進制種子轉換為人類可讀的助記詞單詞列表。目前最常見的配置是 12 個單詞(128 位元熵)或 24 個單詞(256 位元熵)。
助記詞的生成過程:
- 產生隨機熵(128 或 256 位元)
- 計算 SHA-256 產生校驗和(4 或 8 位元)
- 將熵與校驗和連接
- 每 11 位元映射到 BIP-39 詞典中的一個單詞
- 產生 12 或 24 個單詞的助記詞
安全性計算:
- 12 個單詞:128 位元熵 + 4 位元校驗和 = 132 位元,約 2¹³² 種可能性
- 24 個單詞:256 位元熵 + 8 位元校驗和 = 264 位元,約 2²⁶⁴ 種可能性
即使攻擊者知道助記詞的單詞順序,暴力破解在計算上仍不可行。
BIP-44、BIP-49、BIP-84:BIP-44 相容性
不同地址類型對應不同的 BIP 派生路徑:
- BIP-44(m/44'/0'/0'):最早的確定性錢包標準,用於 P2PKH 地址
- BIP-49(m/49'/0'/0'):用於 P2SH-wrapped SegWit 地址(3 開頭地址)
- BIP-84(m/84'/0'/0'):用於原生隔離見證地址(bc1 開頭地址)
- BIP-86(m/86'/0'/0'):用於 Taproot 地址(bc1p 開頭地址)
選擇正確的派生路徑對於錢包相容性至關重要。導入助記詞時,錢包軟體需要根據地址類型選擇正確的 BIP 路徑。
種子的生成與 PBKDF2
BIP-39 使用 PBKDF2 函數從助記詞生成种子:
PBKDF2 參數:
- Password:助記詞(Unicode NFKD)
- Salt:"mnemonic" + 可選密碼
- Iterations:2048
- Hash function:HMAC-SHA512
- Output length:512 位元(64 位元組)
Seed = PBKDF2(password, salt, 2048, 512, HMAC-SHA512)
密碼功能:
- 可選擇添加密碼增加安全性
- 密碼不影響助記詞本身
- 忘記密碼 = 無法恢復資金
地址生成與格式
比特幣地址是公鑰的雜湊表示,作為收款的目標。理解不同地址格式有助於選擇適合的錢包類型並確保交易相容性。
P2PKH(Pay to Public Key Hash)
最早的比特幣地址格式,使用 Base58Check 編碼:
步驟:
1. 公鑰 → RIPEMD-160(SHA-256(公鑰)) = 20 位元組公鑰雜湊
2. 版本位元組(0x00)+ 公鑰雜湊 = 21 位元組
3. SHA-256(SHA-256(前一步)) 取前 4 位元組作為校驗和
4. 21 位元組 + 4 位元組校驗和 = 25 位元組
5. Base58Check 編碼 = 地址(1 開頭)
地址範例:1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2
P2PKH 地址的特點:
- 以「1」開頭
- 安全性較低(公鑰在花費時暴露)
- 交易費用較高(較大的交易資料)
P2SH(Pay to Script Hash)
透過腳本雜湊(而非公鑰雜湊)作為收款目標:
步驟:
1. 腳本 → SHA-256 → RIPEMD-160 = 20 位元組腳本雜湊
2. 版本位元組(0x05)+ 腳本雜湊 = 21 位元組
3. 加入校驗和
4. Base58Check 編碼 = 地址(3 開頭)
地址範例:3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy
P2SH 的典型應用包括多簽名腳本(需要 M-of-N 私鑰簽章)和隔離見證的相容包裝。
P2WPKH 與 P2WSH(SegWit)
隔離見證(Segregated Witness,SegWit)引入了新的地址格式:
- P2WPKH(Pay to Witness Public Key Hash):bc1q 開頭,用於單簽名
- P2WSH(Pay to Witness Script Hash):bc1q 開頭,用於更複雜的腳本
SegWit 地址的優勢:
- 交易費用降低 30-50%(因為 witness 資料不計入區塊空間收費)
- 消除交易延展性問題
- 支援更大的區塊容量
P2TR(Pay to Taproot)
Taproot 升級帶來了最新的地址格式,以「bc1p」開頭:
P2TR 地址的特點:
- 支援 Schnorr 簽章聚合
- 更高的隱私性(所有交易在外觀上相似)
- 更靈活的腳本條件(Merkle 抽象語法樹,MAST)
交易建構與簽章流程
比特幣交易的建構涉及多個步驟,每個步驟都需要正確處理以確保交易有效並能被網路接受。
UTXO 選擇與輸入建構
比特幣採用 UTXO(未花費交易輸出)模型,這意味著錢包必須管理一組未花費的交易輸出:
錢包內部資料結構:
- UTXO 集合:錢包控制的所有未花費輸出
- 每個 UTXO 包含:
* 交易 ID(TXID)
* 輸出索引(VOUT)
* 金額(satoshi)
* 腳本(ScriptPubKey)
* 確認次數
選擇要花費的 UTXO 是交易建構的關鍵步驟,錢包通常採用以下策略:
- oldest first:優先選擇最早的 UTXO(簡單但可能增加費用)
- smallest first:優先選擇最小的 UTXO(優化比特幣面額整理)
- coin selection:複雜的選擇演算法,平衡費用與輸入數量
比特幣金額系統
比特幣使用最小的可分割單位 satoshi:
金額單位:
- 1 BTC = 100,000,000 satoshi
- 1 satoshi = 0.00000001 BTC
最小輸出金額:
- 546 satoshi(灰塵閾值)
- 小於此金額可能被視為灰塵,不會被節點轉發
灰塵限制原因:
- 防止灰塵攻擊
- 減少區塊鏈膨脹
- 保護網路資源
交易費用的計算
比特幣交易費用基於交易的虛擬大小(vsize,單位為 vbytes)與市場費率(sat/vB)計算:
費用 = vsize × feerate
vsize 計算:
- 非 SegWit:資料大小(位元組)
- SegWit:基礎資料 × 3 + 總資料(位元組) / 4
- 典型 P2WPKH 交易:約 140-150 vbytes
費用率選擇指南:
- fastest fee(>100 sat/vB):下一個區塊確認
- half hour fee(50-100 sat/vB):1-3 個區塊
- hour fee(20-50 sat/vB):3-6 個區塊
- economy fee(<20 sat/vB):較低費用,等待時間長
錢包軟體通常提供以下費用選項:
- fastest fee:下一個區塊確認(最高費用)
- half hour fee:3 個區塊內確認
- hour fee:6 個區塊內確認
- economy fee:較低費用,等待時間較長
簽章過程
交易簽章是比特幣安全的核心,確保只有私鑰持有者能夠花費比特:
ECDSA 簽章流程:
1. 交易資料正規化(序列化,不含簽章)
2. 計算交易的 SHA-256 雙重雜湊
3. 使用私鑰對雜湊值進行 ECDSA 簽章
4. 產生 (r, s) 簽章對
5. 附加 DER 編碼的簽章與 sighash 類型
Schnorr 簽章流程(Taproot):
1. 交易資料雜湊
2. 雜湊值 + 私鑰 → 計算挑戰值
3. 計算回應值:k = hash(d || m) × d⁻¹ mod n
4. 最終簽章:(R, s)
5. 單一簽章可聚合多位參與者
交易廣播
簽章完成的交易需要廣播到比特幣網路:
廣播路徑:
1. 錢包 → 連接的比特幣節點(透過 P2P 協議)
2. 節點驗證交易有效性
3. 節點將交易傳播到其他節點(gossip 協議)
4. 交易進入節點的 mempool(記憶池)
5. 礦工從 mempool 選擇交易打包進區塊
廣播方法:
- 直接連接比特幣全節點
- 使用區塊瀏覽器 API(如 mempool.space)
- 錢包服務商 API
- 交易所 API
錢包軟體類型與安全考量
不同類型的比特幣錢包提供不同的安全性與便利性權衡。
完整節點錢包
Bitcoin Core 是最具安全性的錢包選項:
- 下載並驗證整個區塊鏈(約 730+ GB,截至 2026 年 3 月)
- 完全獨立驗證交易與區塊
- 不依賴第三方服務
- 最佳隱私性(不向第三方暴露地址)
缺點包括需要高性能硬碟、大量頻寬、以及較長的首次同步時間。
輕量錢包
SPV(Simplified Payment Verification)錢包不下载完整區塊鏈:
- 依賴全節點提供的梅克爾證明
- 需要信任連接的節點(安全性較低)
- 適合日常使用,資源需求低
硬體錢包
硬體錢包將私鑰存儲在專用安全晶片中:
- 私鑰永遠不會離開設備
- 在設備上進行交易簽章
- 支援 BIP-32/39/44 標準
- 最佳的安全性與便利性平衡
主流硬體錢包包括 Ledger、Trezor、Coldcard 等。
托管錢包
交易所或第三方提供的錢包服務:
- 資產由服務商托管
- 需要 KYC/AML 驗證
- 便利性高但存在交易對手風險
- 歷史上多次交易所倒閉事件
錢包備份與恢復策略
正確的備份策略是保護比特幣資產的關鍵。
助記詞備份
HD 錢包的備份核心是 12-24 個單詞的助記詞:
最佳實踐:
1. 將助記詞寫在紙上(至少兩份)
2. 存放在不同地理位置
3. 使用金屬備份板防火防水
4. 切勿數位化存儲(截圖、雲端)
5. 驗證拼寫正確性
6. 確認錢包軟體支持該助記詞
金屬備份選擇:
- 建議使用不銹鋼、金屬蝕刻等方式
- 抗腐蝕、耐高溫
- 可抵抗火灾、水災等災害
私鑰匯出備份
部分錢包支援匯出原始私鑰或 WIF(Wallet Import Format)格式:
WIF 格式:
1. 版本位元組(0x80)+ 私鑰 + 壓縮標誌(可選)
2. Base58Check 編碼
私鑰匯出風險較高:
- 每個地址需要單獨備份
- 不相容 HD 錢包路徑
- 建議作為輔助備份
測試恢復流程
在存放大量比特幣前,必須測試備份的有效性:
測試步驟:
1. 建立測試錢包
2. 發送少量比特幣(小於 10 美元)
3. 清除錢包資料
4. 使用助記詞恢復錢包
5. 確認比特幣餘額正確
6. 確認交易歷史可見
注意:
- 測試應在安全的網路環境進行
- 避免在公用電腦上操作
- 確認恢復路徑正確
常見錢包安全風險與防護措施
理解錢包的安全風險是保護資產的前提。
常見攻擊向量
1. 社會工程攻擊
- 假冒客服
- 誘騙授權交易
- 防護:驗證對方身份、不輕易授權
2. 惡意軟體
- 鍵盤側錄
- 剪貼簿攻擊
- 防護:使用硬體錢包、防毒軟體
3. 網路攻擊
- DNS 綁架
- 中間人攻擊
- 防護:使用 VPN、驗證 SSL 憑證
4. 物理攻擊
- 盜竊設備
- 防護:啟用 PIN 碼、加密存儲
5. 供應鏈攻擊
- 預安裝惡意軟體
- 防護:只從官方來源購買
多簽名錢包
多簽名(Multisig)錢包提供額外的安全層:
M-of-N 多簽名:
- 需要 N 把金鑰中的 M 把才能轉帳
- 常用配置:2-of-3、3-of-5
優勢:
- 單點故障防護
- 支援團隊/家庭共同管理
- 遺產傳承規劃
實現方式:
- P2SH(較舊、相容性好)
- P2WSH(SegWit、費用較低)
- P2TR(最新、隱私最好)
結論
比特幣錢包的內部運作機制是一個複雜但優雅的系統,結合了密碼學、資料結構與網路協定。理解這些基礎概念不僅有助於正確使用比特幣,更能在選擇錢包、制定安全策略時做出明智的決定。記住那句比特幣的核心原則:「沒有私鑰,就沒有比特幣」——保護好你的私鑰,就是保護好你的比特幣。
參考資料與數據來源:
- Bitcoin Wiki - Wallet: https://en.bitcoin.it/wiki/Wallet
- BIP-32, BIP-39, BIP-44 規範文件:https://github.com/bitcoin/bips
- Bitcoin Core 錢包文件:https://developer.bitcoin.org/examples/wallet.html
- secp256k1 標準文件:ANSI X9.62-1998
- 數據截止日期:2026 年 3 月
相關文章
- 比特幣密碼學基礎 — 深入理解比特幣核心密碼學技術:SHA-256、RIPEMD-160、secp256k1 橢圓曲線、ECDSA 與 Schnorr 簽章。
- Nakamoto 共識機制 — 深入分析比特幣的革命性共識機制:工作量證明、最長鏈原則、激勵相容性與安全性分析。
- Taproot 全面解析 — 比特幣最新的腳本升級:MAST、BIP-340/341/342。
- OP_CHECKTEMPLATEVERIFY 深度技術分析 — 深入分析 BIP 119 提出的 CTV 技術原理、應用場景、優勢與風險,以及當前發展狀態。
- 比特幣腳本語言入門 — 理解 Bitcoin Script 的基本指令與運作原理。
延伸閱讀與來源
這篇文章對您有幫助嗎?
請告訴我們如何改進:
評論
發表評論
注意:由於這是靜態網站,您的評論將儲存在本地瀏覽器中,不會公開顯示。
目前尚無評論,成為第一個發表評論的人吧!