比特幣錢包內部運作機制完整指南

深入解析比特幣錢包的內部運作原理,包括 HD 錢包 BIP-32/39/44 標準、私鑰管理、地址生成、交易建構與簽章流程,以及錢包備份與安全策略。

比特幣錢包技術深度解析:從 HD 錢包到MPC的完整指南

概述

比特幣錢包是用戶與比特幣網路互動的關鍵介面,其技術架構涉及密碼學、分散式系統和使用者體驗的多個層面。理解比特幣錢包的內部運作機制,對於確保資金安全和做出正確的技術決策至關重要。本篇文章將深入探討比特幣錢包的各類型、密鑰管理機制、助記詞標準,以及最新的多方計算(MPC)錢包技術。

比特幣錢包的核心概念

什麼是比特幣錢包

比特幣錢包(Bitcoin Wallet)並不「儲存」比特幣——比特幣實際上保存在區塊鏈上,錢包的作用是管理用戶的私鑰(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 錢包的主要優勢包括:

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 錢包,錢包技術持續演進以滿足不斷變化的安全和使用需求。

選擇適合的錢包類型需要平衡安全性、便利性和使用場景。對於大多數用戶,推薦使用硬體錢包存放大額比特幣,配合手機熱錢包進行日常交易。對於機構用戶,應該實施多層安全策略,包括硬體安全模組、多重簽名和專業的托管解決方案。

隨著比特幣技術的持續發展,錢包將繼續演進以支持新功能並應對新的安全挑戰。用戶和機構都應該持續關注錢包技術的最新發展,並適時更新他們的安全實踐。

延伸閱讀與來源

這篇文章對您有幫助嗎?

評論

發表評論

注意:由於這是靜態網站,您的評論將儲存在本地瀏覽器中,不會公開顯示。

目前尚無評論,成為第一個發表評論的人吧!