跳至主要內容
進階

Hardware Wallet

深入了解 Bitcoin Core 與硬體錢包的整合,使用 HWI 實現安全的冷存儲。

12 分鐘

硬體錢包整合概覽

Bitcoin Core 可以通過 Hardware Wallet Interface (HWI) 與各種硬體錢包整合, 實現私鑰離線存儲的同時使用 Core 的完整節點驗證功能。

支援的硬體錢包

Ledger

  • • Nano S / S Plus
  • • Nano X

Trezor

  • • Model One
  • • Model T

其他

  • • Coldcard
  • • BitBox02
  • • Jade

架構

硬體錢包整合架構:

┌─────────────────────────────────────────────────────────────┐
│                     Bitcoin Core                             │
│  ┌─────────────────────────────────────────────────────────┐│
│  │  Watch-Only Wallet                                      ││
│  │  ├── 公鑰/描述符                                         ││
│  │  ├── 地址生成                                           ││
│  │  ├── 餘額追蹤                                           ││
│  │  └── PSBT 創建                                          ││
│  └─────────────────────────────────────────────────────────┘│
│                           │                                  │
│                           ▼                                  │
│  ┌─────────────────────────────────────────────────────────┐│
│  │  HWI (Hardware Wallet Interface)                        ││
│  │  ├── Python 工具                                         ││
│  │  ├── 設備發現                                           ││
│  │  ├── PSBT 簽名                                          ││
│  │  └── 密鑰導出                                           ││
│  └─────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────┘
                           │
                           ▼
┌─────────────────────────────────────────────────────────────┐
│                   Hardware Wallet                            │
│  ├── 私鑰存儲(安全元件)                                    │
│  ├── 交易簽名                                               │
│  └── 用戶確認(螢幕 + 按鈕)                                 │
└─────────────────────────────────────────────────────────────┘

安裝 HWI

# 安裝 HWI
pip3 install hwi

# 或從源碼安裝
git clone https://github.com/bitcoin-core/HWI.git
cd HWI
pip3 install .

# 驗證安裝
hwi --version

# Linux:設置 udev 規則
sudo cp udev/*.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
sudo udevadm trigger

# 列出連接的設備
hwi enumerate

# 輸出示例
[
  {
    "type": "ledger",
    "model": "ledger_nano_s",
    "path": "usb:001:005",
    "fingerprint": "d34db33f",
    "needs_pin_sent": false,
    "needs_passphrase_sent": false
  }
]

設置流程

# 步驟 1:獲取硬體錢包的 xpub

# 獲取設備指紋
hwi enumerate

# 獲取 xpub(BIP-84 Native SegWit)
hwi -f d34db33f getxpub "m/84h/0h/0h"

# 輸出
{
  "xpub": "xpub6C..."
}

# 步驟 2:創建 watch-only 錢包

bitcoin-cli createwallet "hww" true true "" false true true
#                        name  disable_private_keys
#                              blank
#                                   passphrase
#                                       avoid_reuse
#                                            descriptors
#                                                 load_on_startup

# 步驟 3:導入描述符

# 獲取帶校驗和的描述符
hwi -f d34db33f getdescriptors

# 導入到錢包
bitcoin-cli -rpcwallet=hww importdescriptors '[
  {
    "desc": "wpkh([d34db33f/84h/0h/0h]xpub.../0/*)#checksum",
    "timestamp": "now",
    "range": [0, 999],
    "watchonly": true,
    "active": true,
    "internal": false
  },
  {
    "desc": "wpkh([d34db33f/84h/0h/0h]xpub.../1/*)#checksum",
    "timestamp": "now",
    "range": [0, 999],
    "watchonly": true,
    "active": true,
    "internal": true
  }
]'

接收比特幣

# 生成接收地址
bitcoin-cli -rpcwallet=hww getnewaddress

# 輸出
bc1q...

# 在硬體錢包上驗證地址(重要!)
hwi -f d34db33f displayaddress "m/84h/0h/0h/0/0"

# 設備會顯示地址,確認與 Core 生成的一致

# 查看錢包餘額
bitcoin-cli -rpcwallet=hww getbalance

# 查看交易歷史
bitcoin-cli -rpcwallet=hww listtransactions

安全提示: 在接收大額資金前,務必在硬體錢包螢幕上確認地址,防止惡意軟體篡改地址。

發送比特幣

# 步驟 1:創建 PSBT

bitcoin-cli -rpcwallet=hww walletcreatefundedpsbt \
  '[]' \
  '[{"bc1qrecipient...": 0.1}]' \
  0 \
  '{"fee_rate": 10}'

# 輸出
{
  "psbt": "cHNidP8BAH...",
  "fee": 0.00001410,
  "changepos": 1
}

# 步驟 2:使用 HWI 簽名

hwi -f d34db33f signtx "cHNidP8BAH..."

# 輸出(已簽名的 PSBT)
{
  "psbt": "cHNidP8BAH...(已簽名)"
}

# 步驟 3:完成並廣播

# 完成 PSBT
bitcoin-cli finalizepsbt "cHNidP8BAH...(已簽名)"

# 輸出
{
  "hex": "0200000001...",
  "complete": true
}

# 廣播交易
bitcoin-cli sendrawtransaction "0200000001..."

多簽配置

# 2-of-3 多簽設置(3 個硬體錢包)

# 步驟 1:獲取每個設備的 xpub
hwi -f device1_fp getxpub "m/48h/0h/0h/2h"  # P2WSH 多簽路徑
hwi -f device2_fp getxpub "m/48h/0h/0h/2h"
hwi -f device3_fp getxpub "m/48h/0h/0h/2h"

# 步驟 2:創建多簽錢包
bitcoin-cli createwallet "multisig-hww" true true "" false true

# 步驟 3:導入多簽描述符
bitcoin-cli -rpcwallet=multisig-hww importdescriptors '[
  {
    "desc": "wsh(sortedmulti(2,[fp1/48h/0h/0h/2h]xpub1.../0/*,[fp2/48h/0h/0h/2h]xpub2.../0/*,[fp3/48h/0h/0h/2h]xpub3.../0/*))#checksum",
    "timestamp": "now",
    "range": [0, 100],
    "watchonly": true,
    "active": true,
    "internal": false
  },
  {
    "desc": "wsh(sortedmulti(2,[fp1/48h/0h/0h/2h]xpub1.../1/*,[fp2/48h/0h/0h/2h]xpub2.../1/*,[fp3/48h/0h/0h/2h]xpub3.../1/*))#checksum",
    "timestamp": "now",
    "range": [0, 100],
    "watchonly": true,
    "active": true,
    "internal": true
  }
]'

# 步驟 4:發送時需要 2 個設備簽名
# 創建 PSBT
psbt=$(bitcoin-cli -rpcwallet=multisig-hww walletcreatefundedpsbt ...)

# 第一個設備簽名
psbt=$(hwi -f device1_fp signtx "$psbt" | jq -r '.psbt')

# 第二個設備簽名
psbt=$(hwi -f device2_fp signtx "$psbt" | jq -r '.psbt')

# 完成並廣播
bitcoin-cli finalizepsbt "$psbt"

GUI 整合

Bitcoin Core GUI 硬體錢包支持:

設置 external_signer:
1. 確保 HWI 在 PATH 中
2. 或在 bitcoin.conf 中設置:
   signer=/path/to/hwi

使用 GUI:
1. File → Create Wallet
2. 勾選 "External signer"
3. Core 自動檢測連接的硬體錢包
4. 選擇設備並創建錢包

發送交易:
1. 像普通錢包一樣創建交易
2. Core 自動創建 PSBT
3. 提示在硬體錢包上確認
4. 簽名後自動廣播
# bitcoin.conf 配置

# 指定外部簽名器
signer=/usr/local/bin/hwi

# 或使用包裝腳本
signer=/home/user/hwi-wrapper.sh

# hwi-wrapper.sh 示例:
#!/bin/bash
/usr/bin/python3 -m hwi "$@"

氣隙方案

完全氣隙(Air-gapped)工作流:

┌─────────────────┐     ┌─────────────────┐
│  在線電腦        │     │  離線電腦        │
│  (Bitcoin Core) │     │  (簽名設備)      │
└────────┬────────┘     └────────┬────────┘
         │                       │
    創建 PSBT                    │
         │                       │
         │──── SD 卡/QR ────────→│
         │                       │
         │                  簽名 PSBT
         │                       │
         │←─── SD 卡/QR ─────────│
         │                       │
    廣播交易                     │
         │                       │

使用 Coldcard 的氣隙工作流:

1. 導出公鑰(一次性)
   # 在 Coldcard 上導出到 SD 卡
   # 將 xpub 導入 Core watch-only 錢包

2. 創建交易
   bitcoin-cli -rpcwallet=hww walletcreatefundedpsbt ... > unsigned.psbt

3. 傳輸到 Coldcard
   # 複製 unsigned.psbt 到 SD 卡
   # 插入 Coldcard

4. 簽名
   # Coldcard 上確認交易
   # 簽名後保存到 SD 卡

5. 廣播
   # 將 signed.psbt 複製回電腦
   bitcoin-cli finalizepsbt "$(cat signed.psbt)"
   bitcoin-cli sendrawtransaction "hex..."

安全最佳實踐

推薦做法

  • • 始終在設備上驗證地址
  • • 仔細檢查交易詳情
  • • 使用 Passphrase 額外保護
  • • 備份種子詞在多個安全位置
  • • 定期更新韌體
  • • 使用自己的全節點

避免

  • • 不要在不信任的電腦上使用
  • • 不要忽略設備上的警告
  • • 不要分享種子詞
  • • 不要使用來路不明的設備
  • • 不要依賴單一備份

故障排除

# 設備未識別
# 1. 檢查 udev 規則(Linux)
# 2. 確認設備已解鎖
# 3. 確認 Bitcoin 應用已打開(Ledger)

# 列出詳細信息
hwi enumerate --debug

# 指紋不匹配
# 確保使用正確的派生路徑
hwi -f fingerprint getxpub "m/84h/0h/0h"

# PSBT 簽名失敗
# 1. 確認錢包描述符與設備匹配
# 2. 檢查 PSBT 中的派生路徑
bitcoin-cli decodepsbt "psbt..."

# 重新掃描區塊鏈
bitcoin-cli -rpcwallet=hww rescanblockchain 700000

總結

  • HWI:標準化的硬體錢包接口
  • PSBT:安全的交易簽名流程
  • 多簽:支持多設備多簽配置
  • 驗證:務必在設備螢幕上確認
已複製連結
已複製到剪貼簿