跳至主要內容
高級 隱私

Silent Payments 靜默支付

Silent Payments (BIP-352) 是一種隱私增強協議,允許接收者公開一個靜態地址,而每筆收到的付款都會發送到獨特的鏈上地址,無法被外部觀察者關聯。

20 分鐘

地址重用問題

比特幣最佳實踐建議每個地址只使用一次。但這在實際操作中很困難:

  • 捐款地址:網站上公開的地址會收到多筆付款
  • 商家收款:需要為每個客戶生成新地址
  • 社交媒體:個人簡介中的比特幣地址
  • 名片/QR碼:印刷後無法更改

地址重用的風險:

  • • 所有付款者可以看到該地址的完整交易歷史
  • • 任何人可以追蹤該地址的餘額
  • • 多筆付款可被關聯到同一個接收者
  • • 嚴重損害發送者和接收者的隱私

Silent Payments 如何運作

Silent Payments 使用橢圓曲線 Diffie-Hellman (ECDH) 密鑰交換, 讓發送者為每筆付款計算一個唯一的輸出地址,而無需與接收者互動。

簡化流程

1

接收者公開靜態地址

Bob 公開他的 Silent Payment 地址(sp1q...)

2

發送者計算唯一地址

Alice 用她的私鑰和 Bob 的公鑰進行 ECDH

3

付款發送到派生地址

輸出發送到只有 Bob 能花費的唯一 Taproot 地址

4

接收者掃描並識別

Bob 掃描區塊鏈,識別屬於他的付款

密碼學原理

接收者設置

# 接收者生成兩對密鑰

掃描密鑰:(b_scan, B_scan = b_scan·G)

花費密鑰:(b_spend, B_spend = b_spend·G)

# Silent Payment 地址包含兩個公鑰

SP 地址 = Bech32m(B_scan || B_spend)

發送流程

# 發送者有輸入私鑰 a(來自 UTXO)

A = a·G (輸入的公鑰)

# ECDH 共享密鑰

shared_secret = SHA256(a·B_scan || A)

# 計算輸出公鑰

P_output = B_spend + SHA256(shared_secret)·G

# 發送到 Taproot 地址

輸出地址 = P2TR(P_output)

接收者掃描

# 對每筆交易,接收者用掃描密鑰計算

shared_secret = SHA256(b_scan·A || A)

# 檢查輸出是否匹配

expected_P = B_spend + SHA256(shared_secret)·G

if output_pubkey == expected_P:

# 這筆付款是給我的!

# 計算花費私鑰

p_output = b_spend + SHA256(shared_secret)

地址格式

Silent Payment 地址使用 Bech32m 編碼,以 sp1q 開頭:

# 主網 Silent Payment 地址

sp1qqgste7k9hx0qftg6qmwlkqtwuy6cycyavzmzj85c6qdfhjdpdjtdgq7c2zfthc7ugp6h3mdfhs6sxnc9vjkxunqmgqsy

網路 前綴 HRP
主網 sp1q... sp
測試網 tsp1q... tsp
Signet tsp1q... tsp

標籤功能

Silent Payments 支援標籤(Labels),允許接收者區分不同來源的付款:

標籤用途

  • 商家:為每個客戶生成帶標籤的地址
  • 個人:區分薪資、投資、禮物等來源
  • 組織:為不同部門或活動使用不同標籤

# 帶標籤的地址派生

label = SHA256("label" || b_scan || m)

B_m = B_spend + label·G

# m 是標籤編號(0, 1, 2, ...)

與其他方案比較

特性 普通地址 BIP-47 PayNym Silent Payments
需要互動 每次 首次 從不
鏈上足跡 無額外 通知交易 無額外
地址重用風險
掃描成本 中等
輕客戶端支援 簡單 簡單 需要額外數據

掃描效率

接收者需要掃描區塊鏈來識別付款。這是 Silent Payments 的主要權衡:

掃描優化

  • 只掃描 Taproot 輸出:減少檢查範圍
  • Tweaked 公鑰索引:全節點可預計算
  • 輕客戶端過濾器:BIP-158 擴展
  • 批量掃描:多個輸入可合併計算

掃描成本: 接收者每筆交易需要執行約 1 次橢圓曲線乘法。 對於每天 300,000 筆交易的區塊鏈,現代硬體可以在幾秒內完成掃描。

發送者要求

Silent Payments 對發送者有特定要求:

  • ! 必須使用支援的輸入類型(P2PKH、P2WPKH、P2TR)
  • ! 需要存取輸入的私鑰(無法使用 watch-only 錢包發送)
  • ! 多簽錢包需要特殊處理

隱私特性

無地址重用

每筆付款使用唯一地址

無鏈上關聯

不同付款的輸出地址無法被關聯

與 Taproot 相同外觀

輸出看起來像普通 Taproot 交易

無需信任第三方

不依賴中心化服務

限制與權衡

  • 掃描開銷:接收者需要掃描所有交易
  • 輕客戶端複雜:需要額外基礎設施支援
  • 發送者限制:需要私鑰參與計算
  • 僅限 Taproot:輸出只能是 P2TR 類型

錢包支援

Cake Wallet 支援
Silentium 支援
Bitcoin Core 開發中
BlueWallet 計劃中

BIP-352 規範

BIP-352 定義了 Silent Payments 的完整規範,包括:

  • • 地址格式和編碼
  • • 密鑰派生和共享密鑰計算
  • • 輸出生成和掃描演算法
  • • 標籤系統
  • • 輕客戶端支援
  • • 多輸入處理

相關資源

已複製連結
已複製到剪貼簿