靜默支付 Silent Payments

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

靜默支付 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(草案階段)
2026/11/15 6:50 PM


更多文章