你在硬體錢包螢幕上按下的每一次「確認」,背後其實有一份結構化檔案在流動。它從聯網電腦出發,攜帶著收款地址、金額、手續費率與簽名所需的中繼資料,傳入離線設備完成密碼學簽名,再送回協調端組合成全網節點認可的原始交易。這份扮演橋樑角色的標準化檔案就是 PSBT。徹底拆解這條流水線的每一步,能幫助你清楚掌握資金控制權的轉移時刻,並精準識別最關鍵的安全防線。
PSBT 解決了什麼現實問題
比特幣交易的私鑰簽名必須在絕對隔離的環境中執行,這是冷儲存的核心價值。然而,建構一筆完整的交易必須即時查詢鏈上狀態:包含當前可用的未花費交易輸出(UTXO)、腳本類型、找零路徑以及全網記憶池(Mempool)的擁塞費率。這導致了一項結構性矛盾:聯網設備具備組裝交易的全部資訊,卻絕不能接觸私鑰;離線冷錢包握有私鑰,卻對鏈上即時數據一無所知。
PSBT(Partially Signed Bitcoin Transaction,部分簽名比特幣交易)正是為了解決這項跨環境協同難題而制定的標準協議。依據 BIP 174 所定義的 PSBTv0,整筆未簽名交易被完整包裝在資料結構中;隨後由 BIP 370 提出的 PSBTv2 則將未簽名交易拆分為獨立欄位,大幅優化了欄位解析效率,並原生支援多重簽名動態增刪輸入與 Taproot(BIP 341)複雜花費路徑。目前主流錢包軟體與硬體設備正陸續完善對 v2 的支援,但整體生態仍廣泛相容並運行著 v0 格式。
PSBT 就像一張填妥金額、收款方與找零規則的實體支票授權書,由電腦開出後交由持有印鑑的負責人核印。由於這張授權書在傳輸過程中可能面臨軟體竄改風險,因此硬體錢包螢幕上的核對環節,是抵禦惡意攻擊的最後底線。
流程中的四個角色與信任邊界
一筆典型的離線簽名交易涉及四個核心參與角色。釐清各角色的職責與權限範圍,有助於建立清晰的威脅模型。
| 參與角色 | 核心職責 | 網絡狀態 | 私鑰持有 |
|---|---|---|---|
| 協調軟體(Sparrow、Specter、Electrum 等) | 構建交易、計算費率、生成 PSBT、最終化提取 Raw Tx | 聯網 | 否 |
| 硬體錢包(冷簽名設備) | 解析 PSBT 結構、獨立螢幕渲染、驗證派生路徑、調用私鑰簽名 | 絕對離線 | 是 |
| 觀察錢包(Watch-only) | 儲存擴展公鑰(xpub)或輸出描述符(Output Descriptors),同步餘額 | 聯網 | 否 |
| 節點 / 廣播通道 | 接收 Hex 原始交易、執行腳本驗證並轉發至 P2P 記憶池 | 聯網 | 否 |
這種設計確立了極高的容錯邊界:協調電腦即便遭受惡意木馬感染、剪貼簿遭到劫持,只要私鑰保留在離線設備內部,且使用者在硬體錢包螢幕上進行了嚴格核對,攻擊者依然無法擅自轉移資產。

建立未簽名交易:PSBT 的構建起點
UTXO 選擇與手動選幣策略
協調端在發起轉帳時,首先掃描錢包現有的可用 UTXO。每個 UTXO 均標註有鎖定腳本類型(如 Native SegWit P2WPKH、Nested SegWit P2SH-P2WPKH 或 Taproot P2TR)、確認數以及在 HD 派生路徑上的索引。軟體會根據目標支付額挑選一組輸入,其總和必須足以支付主轉帳金額與預估礦工費。
選幣策略直接影響交易成本與鏈上隱私。挑選極小額的 UTXO 會產生「粉塵輸入」,使手續費消耗過高;挑選遠高於轉帳額的 UTXO 則會產生大額找零。高階使用者通常採用 Coin Control(手動選幣),避免將不同業務來源、不同 KYC 背景的 UTXO 合併花費在同一筆交易中,防止鏈上分析機構進行所有權關聯追蹤。
輸出驗證、找零機制與 BIP32 派生路徑
交易輸出通常由「收款輸出」與「找零輸出」構成。收款地址由交易對象提供;找零地址則由觀察錢包的內部鏈派生路徑(如 BIP 44/49/84/86 定義的內部鏈索引 change=1)自動生成。
協調軟體在生成 PSBT 時,必須為找零輸出附帶完整的 BIP32_DERIVATION 中繼資料(包含主密鑰指紋 Master Key Fingerprint 與完整派生路徑)。硬體錢包在解析 PSBT 時,會主動比對內部私鑰種子能否推導出該地址:
- 若派生路徑匹配成功,硬體錢包判定該輸出為「內部找零」,螢幕上將標註為 Change,或直接在主畫面顯示扣除找零後的淨支出;
- 若軟體遭到篡改,惡意將找零導向黑客地址或移除了派生證明,硬體錢包將無法識別該地址為自身找零,轉而將其渲染為一筆獨立的「外部轉帳輸出」,提示使用者注意資金流向異常。
手續費率、RBF 替換與鎖定時間
費率通常以 sat/vB(每虛擬位元組聰數)為計量單位。為保留交易在擁塞時動態加速的能力,協調端通常會開啟 BIP 125 費率替換機制(RBF),將輸入的 nSequence 序列號設為小於 0xfffffffe。此外,亦可指定交易層級的 nLockTime。這些元數據均會被完整編碼進 PSBT 的 Global 與 Input 結構中。
PSBT 內部核心架構拆解
在底層資料層面,PSBT 是一組遵循二進位 Key-Value 格式的序列化資料,常以 Base64 字串或動態二維碼的形式進行傳播。其結構嚴格分為三大層級:
| 資料層級 | 關鍵欄位定義 | 功能與驗證邏輯 |
|---|---|---|
| Global Map (全局映射) |
PSBT_GLOBAL_UNSIGNED_TX (v0) PSBT_GLOBAL_TX_VERSION (v2) PSBT_GLOBAL_FALLBACK_LOCKTIME |
記錄交易骨架、版本標識與全局鎖定屬性。v2 格式下不再封裝完整 Unsigned Tx,改由獨立鍵值動態定義。 |
| Input Map (輸入映射列表) |
WITNESS_UTXO / NON_WITNESS_UTXO BIP32_DERIVATION PARTIAL_SIG / TAP_KEY_SIG |
提供前序交易輸出資訊(確保設備能精準計算總輸入金額與手續費)、公鑰派生路徑,並在簽名完成後存放各方產生的部分簽名。 |
| Output Map (輸出映射列表) |
REDEEM_SCRIPT WITNESS_SCRIPT BIP32_DERIVATION |
包含找零輸出的派生路徑與贖回腳本,供硬體設備驗證找零歸屬權及辨識多簽結構。 |
將 PSBT 傳入硬體設備與螢幕核對
將 PSBT 傳遞至離線設備的媒介選擇,決定了整體的便利性與物理攻擊面:
- MicroSD 卡 / 實體儲存媒體:完全隔絕電氣連接(Air-Gapped),適合高安全度金庫。操作時將 .psbt 檔案匯入記憶卡,插入冷錢包簽名後再插回電腦讀取。
- 動態光學二維碼(UR / BBQr 標準):透過設備攝影機與高密度動態二維碼雙向掃描傳遞資料,具備極高的透明度與可審計性,徹底阻斷實體硬體介面帶來的數據滲透風險。
- 有線 USB 連接(WebUSB / HID):最普遍且高效的操作途徑。即便存在物理電氣連接,通訊協定僅限於傳遞 PSBT 封包,簽名權限依然嚴格受限於設備內部的確認機制。
- 近場通訊(NFC / 藍牙):主打行動端簽名場景,傳輸速度快,但對韌體射頻通訊模組的安全防禦能力有較高要求。
鐵律:聯網電腦上的螢幕可能被木馬欺騙,剪貼簿可能遭到惡意置換;只有硬體錢包自研安全韌體直接渲染在實體螢幕上的字元,才是唯一具備密碼學真實性的核對依據。
在設備螢幕上簽署 PSBT 前,必須逐項執行黃金核對清單:
- 收款地址完整校驗:逐段對照接收方提供的完整字元,嚴禁僅比對前幾位與末尾幾位字元(防範 vanity address 碰撞詐騙)。
- 實際淨支付金額:確認主輸出扣除找零後的轉出數值與業務要求完全一致。
- 內部找零標記:確認找零輸出已被設備正確認證為內部地址(Change / Internal),未被混入額外的外部支付輸出。
- 絕對礦工費與費率:檢視總手續費(總輸入減去總輸出)是否處於合理區間,防止因手動設定錯誤導致過高手續費。
離線簽名:密碼學授權的生成
當使用者在實體鍵盤或觸控螢幕上按下確認後,安全晶片(Secure Element)或主控 MCU 開始運作:
- 設備根據 BIP 143(SegWit)或 BIP 341(Taproot)規範,對交易摘要計算單向雙重 SHA-256 雜湊,產生 SigHash。
- 調用內部受保護的私鑰,透過 ECDSA 或 Schnorr 演算法對該 SigHash 進行非對稱簽名。標準交易一律採用 SIGHASH_ALL 模式,確保交易內的所有輸入與輸出不可受到任何竄改。
- 生成的簽名資料被寫回該輸入專屬的 PARTIAL_SIG 或 TAP_KEY_SIG 欄位。
產出的檔案依然是一份標準 PSBT。在多重簽名(Multisig)場景中,該檔案可按任意順序跨空間、跨設備傳遞給其他聯署人,依序簽名直至滿足閾值條件(如 2-of-3、3-of-5)。
合併、最終化與提取原始交易
帶有完整簽名的 PSBT 傳回協調端後,需經過最後的組裝階段:
- 合併(Combine):若多簽聯署人分別基於同一 PSBT 產生了多份帶簽名副本,協調軟體將各個檔案中的 PARTIAL_SIG 彙整至同一份 PSBT 中。
- 最終化(Finalize):驗證簽名門檻已達成後,解析器將 Input Map 內的簽名與解鎖腳本轉換為標準的 final_scriptSig 或 final_scriptWitness,並清除過程中的中繼中繼資料。在 Bitcoin Core RPC 中對應為 finalizepsbt 指令。
- 提取原始交易(Extract):將最終化完成的 PSBT 封裝轉譯為十六進位(Hex)字串,生成符合全網共識規則的 Raw Transaction。
廣播交易與進入記憶池後的處置路徑
協調軟體透過自建 Bitcoin Core 全節點或第三方 Electrum 伺服器,調用 sendrawtransaction 將 Hex 交易轉發至全網 P2P 節點。

若廣播失敗,通常會收到明確的節點錯誤碼:如手續費低於最低中繼標準(min relay fee not met)、所選 UTXO 已被使用(missing inputs / bad-txns-inputs-missingorspent),或時間鎖尚未滿足(non-final)。
一旦交易成功被節點接收並進入記憶池(Mempool),在獲得礦工打包區塊前,若因全網費率激增導致交易停滯,可採取兩種標準補救方案:
- RBF 費率替換(BIP 125):若發起時開啟了 RBF,發送方可直接構建一筆消耗相同輸入但附加更高礦工費的新交易進行全網覆蓋。
- CPFP 子為父償(Child Pays for Parent):若交易未標記 RBF,接收方或擁有找零輸出的發送方可花費該筆「未確認交易的輸出」發起一筆高費率子交易。礦工為了獲取子交易的高額手續費,會將父交易與子交易一同打包進區塊。
常見問題 FAQ
硬體錢包若沒有螢幕,安全性會受到影響嗎?
會受到重大影響。沒有實體螢幕的設備無法向使用者提供獨立的可信展示,所有交易細節(收款人、金額、找零歸屬)均依賴聯網主機渲染。若主機遭木馬劫持,使用者將在毫不知情的情況下授權被惡意竄改的交易。
PSBT 檔案本身具有時效性嗎?
PSBT 標準本身並未設定內建過期時間。但其有效性取決於鏈上狀態:若 PSBT 引用的 UTXO 在廣播前已被另一筆交易花費(Double-Spent),該 PSBT 在最終廣播時將會被節點判定為無效並拒絕。
簽署完成的 PSBT 如果一直不廣播,會有安全風險嗎?
存在潛在風險。已簽名的 PSBT 相當於隨時可兌現的支票,任何持有該檔案的人均可在未來任意時間點完成最終化並向全網廣播。若欲作廢已簽署但未廣播的交易,應立即構建一筆消耗相同 UTXO 的新交易搶先廣播上鏈,使先前的簽名徹底失效。
PSBTv0 與 PSBTv2 在日常使用中該如何相容?
絕大多數現代協調軟體(如 Sparrow)具備向下相容與自動降級機制。若硬體錢包韌體較舊僅支援 BIP 174(v0),軟體在導出時會自動轉譯為 v0 格式;使用者在遇到「格式無法解析」報錯時,通常只需在協調軟體設定中手動切換 PSBT 導出版本,或將硬體錢包韌體升級至最新版本即可。



