比特幣錢包內部運作機制完整指南
深入解析比特幣錢包的內部運作原理,包括 HD 錢包 BIP-32/39/44 標準、私鑰管理、地址生成、交易建構與簽章流程,以及錢包備份與安全策略。
比特幣錢包技術深度解析:從 HD 錢包到MPC的完整指南
概述
比特幣錢包是用戶與比特幣網路互動的關鍵介面,其技術架構涉及密碼學、分散式系統和使用者體驗的多個層面。理解比特幣錢包的內部運作機制,對於確保資金安全和做出正確的技術決策至關重要。本篇文章將深入探討比特幣錢包的各類型、密鑰管理機制、助記詞標準,以及最新的多方計算(MPC)錢包技術。
比特幣錢包的核心概念
什麼是比特幣錢包
比特幣錢包(Bitcoin Wallet)並不「儲存」比特幣——比特幣實際上保存在區塊鏈上,錢包的作用是管理用戶的私鑰(Private Key),以便授權比特幣轉移。從技術上講,錢包應該被稱為「密鑰管理器」更為準確。
比特幣錢包的核心功能包括:
- 生成和管理比特幣地址
- 創建和簽署交易
- 查詢區塊鏈餘額(透過全節點或第三方 API)
- 管理多個地址和 UTXO
錢包與私鑰的關係
比特幣採用非對稱密碼學,每個地址對應一組公鑰和私鑰:
- 公鑰(Public Key):可自由分享,用於接收比特幣
- 私鑰(Private Key):必須嚴格保密,用於簽署交易
私鑰生成示例:
Private Key (256 bits): 0x8eeb1c6e8a9c4d2f1e3b5a7c9d0e2f4a6b8c0d2e4f6a8b0c2d4e6f8a0b2c
透過橢圓曲線乘法生成公鑰:
Public Key = Private Key × G (secp256k1 基點)
比特幣錢包的分類
根據密鑰導出方式分類
1. 非確定性錢包(Random Wallet)
最早的比特幣錢包類型,每個地址對應隨機生成的私鑰。這種錢包難以備份和管理,當地址數量增加時,用戶需要保存所有私鑰。
非確定性錢包的問題:
- 每次生成新地址都需要完整備份
- 地址數量增加導致錢包檔案增大
- 難以記住所有私鑰
- 隱私問題:難以實現地址輪換
2. 確定性錢包(Deterministic Wallet)
根據單一种子(Seed)透過密碼學單向函數導出所有私鑰。這種設計使得只需備份种子即可恢復整個錢包。
確定性錢包導出公式:
Child Private Key = HMAC-SHA512(Chain Code, Parent Private Key || Index)
3. 分層確定性錢包(HD Wallet)
目前主流的錢包架構,採用 BIP-32 標準,支援無限層級的密鑰派生樹結構。HD 錢包的主要優勢包括:
- 單一.seed 可生成無限數量的地址
- 支持派生子公鑰而無需暴露子私鑰(用於冷存儲場景)
- 組織結構清晰,適用於企業和個人用戶
HD 錢包密鑰派生路徑示例:
m / purpose' / coin_type' / account' / change / address_index
比特幣(主網):
m / 84' / 0' / 0' / 0 / 0
說明:
- m: 主私鑰(Master Key)
- 84': BIP-84(Taproot 地址)
- 0': 比特幣主網硬幣類型
- 0': 第一個帳戶
- 0: 外部鏈(用於接收地址)
- 0: 第一個地址索引
根據存儲方式分類
1. 熱錢包(Hot Wallet)
連接網路的錢包,便利性高但安全風險較大。適合存放少量日常交易資金。
熱錢包特點:
- 私鑰存儲在連網設備(手機、電腦、服務器)
- 便利性高,適合小額交易
- 易受網路攻擊威脅
- 建議資金上限:不超過總資產的 5-10%
2. 冷錢包(Cold Wallet)
離線存儲私鑰的錢包,安全性高但操作不便。適合存放大量比特幣長期儲備。
冷錢包特點:
- 私鑰完全離線,不暴露在網路中
- 安全性極高
- 交易需要離線簽署,流程較繁瑣
- 適合:大額、長期持倉
3. 硬體錢包(Hardware Wallet)
專用設備存儲私鑰,結合了安全性和相對便利性。目前市場主流產品包括:
主流硬體錢包比較:
| 型號 | 安全晶片 | 螢幕 | 開源韌體 | 支援 Taproot |
|------|----------|------|----------|--------------|
| Ledger Nano X | 是 | 是 | 否 | 是 |
| Trezor Model T | 是 | 是 | 是 | 是 |
| Coldcard Mk4 | 是 | 是 | 是 | 是 |
| Foundation Passport | 是 | 是 | 是 | 是 |
4. 紙錢包(Paper Wallet)
將私鑰和地址以紙張形式列印存儲,完全離線但易於物理損壞和丟失。
紙錢包生成步驟:
1. 在離線電腦上使用錢包軟體
2. 生成密鑰對
3. 將地址和私鑰列印在紙上
4. 妥善保管紙張(防水、防火、防盜)
注意事項:
- 避免使用網路生成的紙錢包
- 建議使用專用離線設備
- 建議生成多份備份
根據驗證方式分類
1. 全節點錢包
運行完整的比特幣節點,獨立驗證所有交易和區塊。提供最高級別的安全性和隱私保護。
全節點錢包示例:
- Bitcoin Core(官方客戶端)
- Bitcoin Knots
優點:
- 完全獨立驗證,不依賴第三方
- 最高隱私保護
- 支援完整比特幣功能
缺點:
- 需要下載完整區塊鏈(~730GB)
- 占用大量儲存空間和頻寬
- 同步時間較長
2. 輕量級錢包(SPV Wallet)
使用簡化支付驗證(Simplified Payment Verification),只下載區塊頭而非完整區塊。依賴全節點提供交易證明。
輕量級錢包示例:
- Electrum
- BlueWallet
- Samourai Wallet
工作原理:
- 下載區塊頭(~80 bytes/區塊)
- 透過梅克爾證明(Merkle Proof)驗證交易存在
- 依賴全節點提供區塊數據
優點:
- 資源需求低,適合移動設備
- 快速同步
- 功能完整
缺點:
- 隱私較差(需向第三方節點查詢)
- 依賴第三方節點的正確性
BIP 標準詳解
比特幣改進提案(BIP)中有多個關於錢包的標準,統稱為「BIP 家族」。
BIP-39:助記詞標準
BIP-39 定義了將隨機數字轉換為易於記憶的助記詞(Mnemonic)的標準。這使得錢包備份變得非常簡單。
助記詞生成過程:
1. 生成隨機熵(Entropy)
- 128 bits = 12 個助記詞
- 160 bits = 15 個助記詞
- 192 bits = 18 個助記詞
- 224 bits = 21 個助記詞
- 256 bits = 24 個助記詞
2. 計算校驗和(Checksum)
- SHA256(entropy) 取前 n bits
- n = entropy bits / 32
3. 分割為助記詞
- 將 entropy + checksum 分割為 11-bit 片段
- 每個 11-bit 值對應 BIP-39 詞典中的一個詞
BIP-39 詞典包含 2048 個常用英語單詞
示例:12 個助記詞可表示 128 + 4 = 132 bits
2^132 ≈ 5 × 10^39 種可能性
助記詞轉換為種子的流程:
1. 助記詞 + 可選密碼(Passphrase)
2. 應用 PBKDF2 密鑰拉伸函數
- 助變函數:HMAC-SHA512
- 疊代次數:2048
- 輸出:512 bits(64 bytes)种子
Python 實現示例:
import hashlib
import hmac
def mnemonictoseed(mnemonic, passphrase=''):
BIP-39 使用的鹽是 "mnemonic" + passphrase
salt = 'mnemonic' + passphrase
PBKDF2 參數
iterations = 2048
key_length = 64 # 512 bits
使用 HMAC-SHA512 作為 PRF
seed = hashlib.pbkdf2_hmac(
'sha512',
mnemonic.encode('utf-8'),
salt.encode('utf-8'),
iterations,
dklen=key_length
)
return seed
結果:512 bits 的种子
前 256 bits:用於生成主私鑰
後 256 bits:用於主鏈編碼(Chain Code)
BIP-32:分層確定性錢包
BIP-32 定義了 HD 錢包的密鑰派生機制,允許從單一种子生成整個密鑰樹。
BIP-32 密鑰派生機制:
CM = 決定性密鑰導出函數
PK = 公鑰
SK = 私鑰
K = 密鑰數據
C = 鏈編碼
父私鑰 → 子私鑰:
CKDpriv((K^par, C^par), i) → (K_i, C_i)
其中:
I = HMAC-SHA512(Key=C^par, Data=K^par || i)
K_i = parse256(I[0:32]) + K^par
C_i = I[32:64]
父公鑰 → 子公鑰:
CKDpub((PK^par, C^par), i) → (PK_i, C_i)
增強派生(hardened derivation):
- 使用私鑰而非公鑰進行派生
- i ≥ 2^31(i' = i - 2^31)
- 防止子公鑰推導父私鑰
HD 錢包結構示例:
m
/ \
/ \
/ \
m/0 m/1
/ \
/ \
m/0/0 m/1/0
/ \ / \
0/0 0/1 1/0 1/1
| | | |
地址1 地址2 地址3 地址4
普通派生(non-hardened):
- 可以從父公鑰派生子公鑰
- 適合線上錢包查看無限地址
增強派生(hardened):
- 需要父私鑰
- 安全性更高,適合冷存儲
BIP-44:多帳戶錢包路徑
BIP-44 定義了 HD 錢包的路徑層級結構,確保不同錢包之間的兼容性。
BIP-44 路徑結構:
m / purpose' / coin_type' / account' / change / address_index
各層級定義:
purpose (44', 49', 84'):
- 44': BIP-44(P2PKH 地址)
- 49': BIP-49(P2SH-P2WPKH 地址)
- 84': BIP-84(P2WPKH 地址,Taproot 之前)
coin_type (0' = Bitcoin, 1' = Bitcoin Testnet):
- 比特幣主網:0'
- 比特幣測試網:1'
account (0', 1', 2', ...):
- 用於將地址分組
- 例如:不同帳戶代表不同用途
change (0 = 外部鏈, 1 = 內部鏈):
- 外部鏈:用於接收付款
- 內部鏈:用於找零地址
address_index (0, 1, 2, ...):
- 地址索引
- 從 0 開始遞增
不同地址類型的 BIP 路徑:
1. P2PKH(Legacy 地址,1 開頭)
m/44'/0'/0'/0/0
2. P2SH-P2WPKH(嵌套隔離見證,3 開頭)
m/49'/0'/0'/0/0
3. P2WPKH(原生隔離見證,bc1q 開頭)
m/84'/0'/0'/0/0
4. P2TR(Taproot,bc1p 開頭)
m/86'/0'/0'/0/0
BIP-45:多簽名錢包結構
BIP-45 定義了多簽名錢包的路徑結構。
BIP-45 路徑結構:
m / purpose' / cosigner_index / change / address_index
cosigner_index:
- 0: 第一個共同簽名者
- 1: 第二個共同簽名者
- ...
- n: 第 n 個共同簽名者
示例(2-of-3 多簽名):
Alice: m/45'/0'/0'/0/0
Bob: m/45'/1'/0'/0/0
Carol: m/45'/2'/0'/0/0
交易創建與簽署流程
交易的組成
比特幣交易由以下部分組成:
交易結構:
| 欄位 | 大小 | 說明 |
|------|------|------|
| version | 4 bytes | 交易版本號 |
| inputs | 變長 | 交易輸入列表 |
| outputs | 變長 | 交易輸出列表 |
| locktime | 4 bytes | 鎖定時間 |
輸入結構(UTXO 引用):
| 欄位 | 大小 | 說明 |
|------|------|------|
| previous txid | 32 bytes | 前一筆交易 ID |
| output index | 4 bytes | 輸出索引 |
| script length | 變長 | 解鎖腳本長度 |
| script | 變長 | 解鎖腳本 |
| sequence | 4 bytes | 序列號 |
輸出結構(新 UTXO):
| 欄位 | 大小 | 說明 |
|------|------|------|
| amount | 8 bytes | 比特幣數量(satoshi)|
| script length | 變長 | 鎖定腳本長度 |
| script | 變長 | 鎖定腳本 |
交易創建步驟
交易創建完整流程:
1. 確定輸入(UTXO 選擇)
- 錢包查詢區塊鏈以獲取可用 UTXO
- 選擇足夠覆蓋目標金額 + 費用的 UTXO
- 考慮 UTXO Consolidation 的時機
2. 確定輸出
- 目標地址和金額
- 找零地址(如果有 UTXO 餘額)
3. 計算費用
- 費用 = 輸入數量 - 輸出數量
- 費用率(sat/vB)取決於網路擁塞程度
- 費用估算:estimatefee 或 mempool.space API
4. 構建交易
- 填充版本號、輸入、輸出
- 設定 locktime(通常為 0)
5. 簽署交易
- 對每個輸入使用對應私鑰簽署
- 填入解鎖腳本
6. 廣播交易
- 發送到比特幣網路
- 等待確認
交易簽署的技術細節
交易簽署流程(ECDSA):
1. 創建交易摘要(Transaction Digest)
- 交易的 SIGHASH 類型決定簽名範圍
- 每個輸入單獨簽署
2. 計算 SIGHASH
SIGHASH_ALL(最常見):
- 簽署所有輸入和輸出
SIGHASH_NONE:
- 簽署所有輸入,不簽署任何輸出
- 輸出可由任何人修改
SIGHASH_SINGLE:
- 簽署所有輸入,但只簽署對應索引的輸出
SIGHASH_ANYONECANPAY:
- 只簽署當前輸入
- 允許添加其他輸入
3. ECDSA 簽名生成
- 選擇隨機 nonce k
- 計算 r = (k * G).x mod n
- 計算 s = k^(-1) * (hash + r * privateKey) mod n
- 輸出 (r, s) 對
4. 腳本驗證
- 節點執行:解鎖腳本 + 鎖定腳本
- 驗證簽名是否有效
比特幣腳本簽署類型:
1. SIGHASH_ALL (0x01)
- 簽署所有輸入和輸出
- 最安全,確保金額不被篡改
2. SIGHASH_NONE (0x02)
- 簽署所有輸入,不簽署輸出
- 輸出可被任何人修改
- 用途:捐贈、眾籌
3. SIGHASH_SINGLE (0x03)
- 簽署所有輸入
- 只簽署對應索引的輸出
- 其他輸出無效
4. SIGHASH_ANYONECANPAY (0x81/0x82/0x83)
- 與以上組合
- 只簽署當前輸入
- 用途:CoinJoin、部分簽名
錢包備份與恢復
助記詞備份最佳實踐
助記詞備份原則:
1. 正確數量
- 12 個助記詞:128 bits 安全
- 24 個助記詞:256 bits 安全
2. 物理安全
- 寫在紙上或蝕刻在金屬上
- 避免數位存儲(截圖、雲端)
- 製作多份備份
3. 地理分散
- 多地點存放
- 避免單點故障
4. 保密性
- 不告訴任何人
- 不在不安全場所展示
5. 密碼(Passphrase)
- 添加額外安全層
- 即使助記詞被發現,資金仍安全
- 必須記住,無法恢復
助記詞存儲方案:
方案一:紙質備份
- 使用防水紙張
- 多份副本
- 存放在不同地點
方案二:金屬備擊
- 不锈钢/鈦金屬板
- 防火、防水、防腐蝕
- 示例:Cryptosteel、Coldbit Steel
方案三:保險箱
- 銀行保險箱
- 家庭保險箱
- 親戚處存放
錢包恢復測試
錢包恢復測試步驟:
1. 準備測試環境
- 使用測試網或隔離環境
- 準備少量比特幣測試
2. 恢復錢包
- 在新設備或新錢包軟體導入助記詞
- 確保使用正確的 BIP 路徑
3. 驗證地址
- 檢查生成地址是否與原錢包一致
- 使用第一個地址(index=0)測試
4. 測試交易
- 發送小額測試交易
- 確認可以正常簽署和廣播
5. 驗證找零
- 測試包含找零的交易
- 確保找零地址正確
注意:
- 切勿在主網進行首次恢復測試
- 測試完成後清除測試環境
- 確認助記詞在整個流程中未暴露
進階錢包技術
閾值簽名方案(TSS)
閾值簽名方案(Threshold Signature Scheme)將私鑰分割為多個份額,需要最少數量的份額才能完成簽名。
2-of-3 TSS 示例:
1. 密鑰生成階段
- 三方各自生成隨機數
- 共同計算公鑰
- 各方獲得一個私鑰份額
2. 簽署階段
- 任意兩方協作生成簽名
- 無需完整私鑰
- 簽名與普通 ECDSA 無法區分
優勢:
- 無單點故障
- 分散風險
- 與普通地址外觀相同
應用場景:
- 企業資金管理
- 交易所冷存儲
- 家族資產傳承
多方計算(MPC)錢包
MPC(Multi-Party Computation)錢包使用密碼學協議,讓多方共同計算函數而无需暴露各自輸入。
MPC 錢包工作原理:
1. 密鑰生成(GG18 協議)
- 各參與者生成各自的金鑰份額
- 共同生成完整的公私鑰對
- 任何單一參與者無法獲得完整私鑰
2. 簽署過程
- 各參與者使用份額進行部分簽名
- 合併部分簽名生成完整簽名
- 整個過程保護各方隱私
3. 恢復機制
- 可設定 m-of-n 門限
- 指定數量份額可恢復訪問
- 份額丟失不意味資金丟失
MPC 錢包供應商:
| 供應商 | 門限方案 | 特色 |
|--------|----------|------|
| Fireblocks | 3-of-6 | 企業級安全 |
| BitGo | 3-of-3, 2-of-3 | 多重簽名 + MPC |
| Coinbase | 2-of-2 | 交易所托管 |
| Casa | 3-of-5 | 個人托管解決方案 |
| Unbound | 2-of-3 | 密鑰分割 |
比特金庫(Bitcoin Vault)
比特金庫(Vault)是一種增強安全性的比特幣存儲機制,透過時間鎖和延遲提款提供額外保護。
比特金庫運作機制:
1. 設定
- 主地址(Vault Address)
- 延遲期(Delay Period):如 24 小時、7 天
- 恢復地址(Recovery Address)
- 緊急聯繫人(如有多重簽名)
2. 正常提款流程
a. 發起提款請求
b. 進入延遲期(原持有者可以監控)
c. 延遲期結束後,提款完成
3. 恢復流程
a. 檢測到未授權提款
b. 使用恢復地址發起交易
c. 比原提款更早確認
d. 資金轉回安全地址
4. 經濟激勵
- 延遲期內:提款費用較低
- 延遲期後:提款費用較高
- 鼓勵使用恢復路徑
錢包安全最佳實踐
個人用戶安全建議
錢包安全分層模型:
Layer 1: 日常交易(小額)
- 熱錢包或行動錢包
- 不超過總資產的 5%
- 適合日常支付
Layer 2: 中額儲備
- 硬體錢包
- 不超過總資產的 20%
- 適合數月生活費
Layer 3: 大額長期儲備
- 硬體錢包 + 助記詞金屬備份
- 多重簽名或 TSS
- 完全離線存儲
- 不超過總資產的 75%
Layer 4: 超大額儲備
- 深度冷存儲
- 多重地理分散
- 多重身份要求
- 專業托管解決方案
機構用戶安全建議
機構比特幣托管最佳實踐:
1. 權限分離
- 批准、執行、審計職責分離
- 多人簽名機制
- 審計日誌完整記錄
2. 金鑰管理
- 硬體安全模組(HSM)
- 地理分散的密鑰份額
- 定期輪換計畫
3. 存取控制
- 多因素認證
- IP 白名單
- 操作時間限制
4. 業務連續性
- 詳細的緊急應變計畫
- 密鑰持有者意外處理
- 定期演練
5. 保險與儲備
- 加密資產保險
- 緊急儲備金
- 風險評估報告
錢包的未來發展
後量子密碼學遷移
錢包的後量子遷移:
1. 短期(2025-2030)
- 監控 NIST 標準化進展
- 錢包開發者準備升級路徑
- 用戶繼續使用 ECDSA
2. 中期(2030-2035)
- 混合簽名方案(ECDSA + Dilithium)
- 新錢包預設使用混合地址
- 舊錢包可選遷移
3. 長期(2035+)
- 純後量子簽名成為標準
- 逐步淘汰 ECDSA
- 新地址格式普及
錢包標準化趨勢
比特幣錢包的未來標準:
1. 互通性提升
- 跨錢包地址導入/導出
- 標準化助記詞格式
- 統一的交易類型
2. 隱私保護
- 原生 PayJoin 支持
- Tor/洋蔥網路整合
- 隱私地址標準
3. 智慧功能
- 自動化費用策略
- 閾值觸發的交易
- 與第二層協議深度整合
4. 使用者體驗
- 零確認交易可靠性提升
- 跨鏈原子交換簡化
- 與傳統金融系統整合
結論
比特幣錢包技術是比特幣生態系統的重要基礎設施。從最初的隨機私鑰錢包到現代的 HD 錢包和 MPC 錢包,錢包技術持續演進以滿足不斷變化的安全和使用需求。
選擇適合的錢包類型需要平衡安全性、便利性和使用場景。對於大多數用戶,推薦使用硬體錢包存放大額比特幣,配合手機熱錢包進行日常交易。對於機構用戶,應該實施多層安全策略,包括硬體安全模組、多重簽名和專業的托管解決方案。
隨著比特幣技術的持續發展,錢包將繼續演進以支持新功能並應對新的安全挑戰。用戶和機構都應該持續關注錢包技術的最新發展,並適時更新他們的安全實踐。
相關文章
- 比特幣錢包運作原理完整教學:從私鑰到交易的技術深度解析 — 深入理解比特幣錢包的底層技術原理,從密碼學基礎到交易構造,從地址類型到錢包軟體實現,提供完整的技術知識體系。
- HD Wallet 完整實作指南:從 BIP-32/39/44 到 testnet 金鑰派生 — 深入探討階層式確定性錢包(HD Wallet)的技術原理與實作。涵蓋 BIP-32 派生机制的數學推導、BIP-39 助記詞規範、完整的 BIP-44 多帳戶錢包結構,以及從零開始建構 HD Wallet 的 Python 程式碼範例。提供可直接在 testnet 上驗證的完整實作流程。
- 比特幣密碼學基礎 — 深入理解比特幣核心密碼學技術:SHA-256、RIPEMD-160、secp256k1 橢圓曲線、ECDSA 與 Schnorr 簽章。
- 比特幣階層確定性錢包(HD Wallet)技術深度解析:從 BIP-32 到 BIP-44 完整指南 — 深入解析比特幣 HD 錢包的密碼學原理與 BIP 標準家族,涵蓋 BIP-32 密鑰派生、BIP-39 助記詞標準、BIP-44 多用途路徑結構,以及在冷熱錢包隔離、多重簽名和企業級比特幣管理中的實際應用。
- OP_CHECKTEMPLATEVERIFY 深度技術分析 — 深入分析 BIP 119 提出的 CTV 技術原理、應用場景、優勢與風險,以及當前發展狀態。
延伸閱讀與來源
這篇文章對您有幫助嗎?
請告訴我們如何改進:
評論
發表評論
注意:由於這是靜態網站,您的評論將儲存在本地瀏覽器中,不會公開顯示。
目前尚無評論,成為第一個發表評論的人吧!