靜默支付 Silent Payments
靜默支付,是讓接收者公開一組固定地址,發送者每次付款時卻能各自產生不同的一次性輸出地址的收款方式。外界無法將它與接收者的固定地址連結在一起,也不需要發送者與接收者事先互動,或額外發送通知交易。

靜默支付,Silent Payments,是讓接收者公開一組固定地址,發送者每次付款時卻能各自產生不同的一次性 Taproot 輸出地址的收款方式。
靜默支付由 BIP 352 定義,發送者利用自己交易輸入的私鑰與接收者的公開金鑰,計算出只有雙方才知道的共享秘密,再由共享秘密推導出該筆付款專用的輸出公鑰。
鏈上看起來是一般的 P2TR 輸出,外界無法將它與接收者的固定地址連結在一起,也不需要發送者與接收者事先互動,或額外發送通知交易。
靜默支付解決的是地址重用的隱私問題:接收者可以公開一個固定地址,例如放在個人網站或社群帳號,卻不會讓所有付款在鏈上互相關聯。
Silent Payments 基本概念
-
靜態地址
接收者只需要公開一組固定的靜默支付地址,可以重複使用,也可以印成 QR Code 放在公開的地方。
與一般比特幣地址不同,這組地址本身不會直接出現在區塊鏈上。
-
一次性輸出
每一次付款,發送者都會計算出一個新的 P2TR 輸出公鑰。
不同發送者的付款,甚至同一位發送者的不同付款,在鏈上都是互不相同的輸出,彼此看不出關聯。
-
雙金鑰結構
靜默支付地址包含兩把公鑰:掃描公鑰 Scan Key 與花費公鑰 Spend Key。
掃描私鑰用來在區塊鏈上找出屬於自己的付款,花費私鑰則用來花費這些資金。兩者分工,使掃描與花費可以分開處理。
-
共享秘密
發送者以交易輸入的私鑰與接收者的掃描公鑰,進行橢圓曲線 Diffie-Hellman 運算,得到共享秘密。
接收者則以自己的掃描私鑰與交易輸入的公鑰,算出相同的結果,雙方因此不需要交換任何資料,就能得到同一把秘密。
-
無需通知交易
BIP 47 等早期的可重用付款碼方案,需要先在鏈上送出一筆通知交易,建立雙方的關聯。
靜默支付不需要,付款交易本身就包含接收者掃描所需的全部資訊。
-
建立於 Taproot 與 Schnorr
靜默支付的輸出為 P2TR 單一金鑰輸出,使用 secp256k1 曲線的 x-only 公鑰。
輸出在鏈上與一般 Taproot Key Path 輸出完全相同。
Silent Payments 組成結構
-
地址格式
靜默支付地址使用 Bech32m 編碼,主網的前綴為
sp,測試網為tsp,後面接版本號與兩把公鑰。因為包含 33 位元組的兩把公鑰,所以地址比一般比特幣地址長許多,通常以 QR Code 或複製貼上的方式使用。
-
掃描公鑰 B_scan 與花費公鑰 B_spend
掃描公鑰用於產生共享秘密,花費公鑰則是接收者最終輸出公鑰的基礎。
輸出公鑰的計算概念為:
P = B_spend + hash(共享秘密 ‖ k) × G。
-
輸入雜湊 input_hash
共享秘密的計算中,會加入由交易的最小 Outpoint 與輸入公鑰總和所算出的 input_hash。
這使每筆交易得到不同的共享秘密,即使同一位發送者重複付款給同一個地址,輸出也會不同。
-
輸出索引 k
若同一筆交易需要付款給同一個靜默支付地址多次,索引 k 從 0 開始遞增,使每個輸出的公鑰各不相同。
-
標籤 Label
接收者可以從花費公鑰衍生出多把帶標籤的花費公鑰,並產生對應的多組地址。
這些地址共用同一組掃描金鑰,用來區分付款來源,例如不同的客戶或用途,卻不需要增加掃描成本。
標籤 0 保留給找零使用。
-
衍生路徑
BIP 352 建議從種子以 HD 錢包的方式衍生金鑰:
掃描金鑰為
m/352'/coin_type'/account'/1'/0,花費金鑰為m/352'/coin_type'/account'/0'/0。
Silent Payments 運作方式
-
取得接收者地址
發送者取得接收者公開的靜默支付地址,從中解出掃描公鑰與花費公鑰。
-
選擇符合條件的輸入
發送者需要能使用自己控制的私鑰簽署所有輸入。
BIP 352 支援的輸入類型包括 P2TR Key Path、P2WPKH、P2PKH 與 P2SH-P2WPKH。
-
計算共享秘密與輸出公鑰
發送者將所有輸入私鑰相加,乘上 input_hash 與接收者的掃描公鑰,得到共享秘密。
再由共享秘密與花費公鑰,計算出這筆付款專用的 P2TR 輸出公鑰。
-
建立並廣播交易
發送者將計算出的輸出放入交易,簽署並廣播。
交易在鏈上與一般的 Taproot 付款完全相同,不含任何額外標記。
-
接收者掃描區塊鏈
接收者對每一筆符合條件的交易,利用交易輸入的公鑰總和與自己的掃描私鑰,算出共享秘密。
再推導出預期的輸出公鑰,比對該交易的輸出是否存在,若存在,這筆付款便屬於自己。
-
花費收到的資金
接收者以花費私鑰加上共享秘密推導出的調整值,得到該輸出對應的私鑰,並使用該私鑰簽署交易,花費這筆 UTXO。
Silent Payments 應用
-
公開收款與捐款
網站、社群帳號或募款頁面,可以長期公開同一組靜默支付地址。
每一筆捐款都使用不同的鏈上輸出,旁觀者無法由鏈上資料統計出總收款金額。
-
避免地址重用
傳統做法為了隱私,需要為每位付款人產生新地址,並且須由接收者主動提供。
靜默支付讓接收者不必逐次產生地址,也能避免重用地址,不再依賴付款人是否遵守好習慣。
-
商家與服務收款
商家可以使用標籤區分不同客戶或訂單,並共用同一組掃描金鑰,不需要為每位客戶維護獨立地址。
-
搭配輕量掃描服務
掃描需要逐筆交易計算,資源消耗較大。
輕量錢包可以將掃描私鑰交給外部服務協助掃描,花費私鑰仍保留在本機,服務僅能看見收款,無法花費資金。
-
與 xpub 的差異
xpub 讓持有者能推導出所有地址,擴展公鑰一旦外流,整個帳戶的地址與餘額都會被看見。
靜默支付公開的只是兩把公鑰,無法由它推算出收款地址,除非持有掃描私鑰,才能辨識出屬於這個地址的鏈上付款。
Silent Payments 注意事項
-
發送者必須能簽署所有輸入
共享秘密的計算需要所有輸入的私鑰,因此交易輸入必須由單一方控制。
CoinJoin、多重簽名與多方共同簽署的交易,不能直接用於發送靜默支付。
-
接收者需要掃描區塊鏈
接收者必須檢查每一筆符合條件的交易,運算量比單純監控地址大得多。
全節點可以在驗證區塊時順便掃描,輕量錢包則通常需要仰賴額外的服務或資料來源。
-
還原錢包需要重新掃描
僅備份助記詞還原錢包時,需要從錢包建立時的區塊高度開始重新掃描。
建議一併記錄錢包的起始區塊高度,以縮短掃描時間。
-
掃描金鑰外流會洩漏隱私
掃描私鑰可以辨識所有屬於該地址的付款,包含金額與時間,但無法花費資金。
若將掃描金鑰交給第三方,需要信任對方不會洩漏這些資訊。
-
只隱藏付款關聯,不隱藏金額
靜默支付隱藏的是收款地址與接收者之間的關聯。
交易金額、時間、輸入來源與找零等資訊仍公開,鏈上分析仍可能透過其他特徵推測關係。
-
發送者知道接收者地址
發送者持有接收者的固定地址,因此知道自己付款給誰。
若發送者與接收者的身分被關聯,旁觀者仍可能透過其他資訊拼湊出來。
-
軟體支援仍在發展
靜默支付較新,錢包、硬體裝置與交易所的支援程度不一。
使用前需要確認發送端與接收端的軟體,是否支援 BIP 352。
Silent Payments 相關 BIP
- BIP 352:Silent Payments
- BIP 340:Schnorr Signatures for secp256k1
- BIP 341:Taproot: SegWit version 1 spending rules
- BIP 350:Bech32m Format for v1+ Witness Addresses
- BIP 32:Hierarchical Deterministic Wallets
- BIP 375:Sending Silent Payments with PSBTs(草案階段)

更多文章