Silent Payments:比特幣的下一代隱私方案
前言
比特幣的透明性是其核心特性之一,但這也意味著所有交易都可以被追蹤。Silent Payments (BIP 352) 是一個優雅的解決方案,允許接收者公開一個靜態地址,但每次支付都會產生不同的鏈上地址,從而大幅提升接收方的隱私。
一、比特幣隱私的挑戰
地址重用問題
當你多次使用同一個地址接收比特幣時:
- 所有支付者都能看到你的餘額
- 鏈上分析可以關聯所有交易
- 一旦身份暴露,所有交易歷史都被連結
現有解決方案的限制
| 方案 | 優點 | 缺點 |
|---|---|---|
| HD 錢包 | 每次生成新地址 | 需要通訊協調 |
| BIP 47 Reusable Payment Codes | 無需每次協調 | 需要鏈上通知交易 |
| Stealth Addresses | 單次靜態公開 | 掃描效率低 |
二、Silent Payments 原理
核心概念
Silent Payments 巧妙地利用了橢圓曲線的數學特性:
接收者:
- 公開一個「靜態支付地址」(不是傳統比特幣地址)
- 格式:
sp1q...
發送者:
- 使用自己的私鑰和接收者的公鑰
- 為接收者派生一個唯一的一次性地址
- 這個地址只有接收者能識別和花費
技術細節
密鑰派生
假設:
- 接收者的靜態公鑰:
B = b * G - 發送者的輸入公鑰:
A = a * G
派生過程:
1
2
3
4
5
6
7
8
# 共享秘密
shared_secret = SHA256(a * B) = SHA256(b * A)
# 一次性公鑰
P = B + shared_secret * G
# 接收者可以計算私鑰
p = b + shared_secret
關鍵洞察:
- 發送者用
a(私鑰)和B(接收者公鑰)計算共享秘密 - 接收者用
b(私鑰)和A(發送者公鑰)計算相同的共享秘密 - 只有接收者知道
b,因此只有接收者能花費
使用輸入公鑰
Silent Payments 的創新在於使用交易輸入的公鑰作為派生因子:
1
2
3
# 交易輸入提供公鑰 A
# 不需要額外的鏈上數據
# 每個發送者自然產生不同的派生地址
這意味著:
- 零額外鏈上開銷(不像 BIP 47 需要通知交易)
- 每個發送者產生不同地址(同一交易的不同輸入也不同)
三、與其他方案比較
對比表
| 特性 | 地址重用 | HD 錢包 | BIP 47 | Silent Payments |
|---|---|---|---|---|
| 靜態公開標識 | ✅ | ❌ | ✅ | ✅ |
| 無需交互 | ✅ | ❌ | ✅ | ✅ |
| 無額外鏈上數據 | ✅ | ✅ | ❌ | ✅ |
| 隱私保護 | ❌ | ⚠️ | ✅ | ✅ |
| 輕錢包友好 | ✅ | ✅ | ✅ | ⚠️ |
BIP 47 vs Silent Payments
BIP 47 Reusable Payment Codes:
- 需要鏈上「通知交易」建立連結
- 通知交易暴露付款關係
- 一次通知後可重複使用
Silent Payments:
- 無需通知交易
- 每筆交易完全獨立
- 接收者需要掃描所有 Taproot 交易
四、掃描機制
挑戰
接收者如何知道哪些交易是給自己的?
由於每個地址都是唯一的,接收者必須:
- 掃描所有相關交易
- 嘗試用自己的私鑰派生
- 檢查是否匹配輸出
優化策略
僅掃描 Taproot 輸出
Silent Payments 只支援 Taproot 輸出(bc1p…),大幅減少掃描範圍。
UTXO 集索引
全節點可以預計算索引:
1
2
3
4
# 對每個 Taproot 輸出
index[output] = hash(input_pubkeys)
# 接收者只需查詢匹配的索引
輕客戶端協議
正在開發中的方案:
- BIP 158 過濾器增強
- 伺服器端預計算
- 隱私保護的掃描代理
掃描效率
| 場景 | 掃描負擔 | 解決方案 |
|---|---|---|
| 全節點用戶 | 低 | 本地索引 |
| 輕錢包(已知發送者) | 中 | 過濾器 |
| 輕錢包(未知發送者) | 高 | 掃描服務 |
五、實際應用
捐款地址
傳統方式的問題:
- 公開地址被所有人看到餘額
- 每個捐款者的交易被關聯
- 需要不斷更換地址
Silent Payments 解決方案:
1
2
3
4
5
# 公開靜態地址
sp1qg5l0w87w6pdtwqyqp6rxwdm2r0fk6xpz7d5jwh6d4qe7jhnmxhhqjs8qk3k
# 每個捐款者發送到不同的派生地址
# 無法從鏈上關聯這些捐款
商家收款
場景: 線上商店接受比特幣
優勢:
- 公開單一收款標識
- 每筆訂單使用不同地址
- 顧客隱私得到保護
- 商家收入無法被輕易追蹤
工資支付
場景: 公司定期發放比特幣工資
優勢:
- 員工只需提供一次靜態地址
- 每次支付使用不同鏈上地址
- 其他員工無法看到彼此的收入
六、標籤功能
多帳戶管理
Silent Payments 支援「標籤」功能,允許從單一靜態地址派生多個子地址:
1
2
3
4
5
6
7
# 主地址
sp1q...main
# 帶標籤的子地址
sp1q...main/label1 # 用於捐款
sp1q...main/label2 # 用於薪資
sp1q...main/label3 # 用於銷售
應用場景
- 會計分類:不同收入來源使用不同標籤
- 發票追蹤:每張發票使用唯一標籤
- 隱私隔離:不同身份使用不同標籤
七、限制與注意事項
發送方要求
- 必須使用 Taproot 輸入(或其他暴露公鑰的輸入類型)
- 不支援純 P2PKH/P2SH 輸入(公鑰未暴露)
接收方挑戰
- 掃描負擔:需要檢查所有 Taproot 交易
- 輕錢包支援:需要額外基礎設施
- 實時通知:可能有延遲
安全考量
- 輸入關聯:同一交易的多個輸入被關聯
- 時間分析:交易時間可能洩漏資訊
- 金額分析:輸出金額仍然公開
八、錢包實現狀態
已支援/開發中
| 錢包 | 狀態 | 備註 |
|---|---|---|
| Cake Wallet | 開發中 | 首批支援 |
| Sparrow | 計劃中 | 桌面錢包 |
| Bitcoin Core | 提案中 | 全節點 |
| BlueWallet | 評估中 | 移動端 |
開發資源
- BIP 352 - 完整規範
- silentpayments.xyz - 教育網站
- 參考實現 - Bitcoin Core PR
九、與其他隱私技術的配合
CoinJoin + Silent Payments
1
2
3
# CoinJoin 混合後的輸出
# 使用 Silent Payments 發送給接收者
# 雙重隱私保護
Payjoin + Silent Payments
接收者提供 Silent Payment 地址,發送者構建 Payjoin 交易:
- 打破輸入輸出關聯
- 接收者獲得隱私地址
閃電網路
理論上可以用 Silent Payments 開設閃電通道:
- 通道對手方獲得隱私
- 通道資金來源更難追蹤
十、未來展望
標準化進程
- BIP 352 正在積極討論中
- 多個錢包團隊參與實現
- 預計 2025 年更廣泛採用
可能的改進
- 更高效的掃描協議
- 跨錢包相容性標準
- 輕客戶端友好的伺服器協議
- 硬體錢包支援
生態系統影響
如果 Silent Payments 被廣泛採用:
- 捐款變得更隱私
- 商家收款更安全
- 鏈上分析難度增加
- 比特幣成為更好的價值儲存
結論
Silent Payments 是比特幣隱私技術的重要進步:
- 無需交互 - 發布靜態地址即可接收隱私支付
- 無鏈上開銷 - 不需要通知交易或額外數據
- 原生 Taproot 支援 - 利用最新協議優勢
- 實用設計 - 平衡隱私和可用性
雖然接收方的掃描負擔是一個挑戰,但隨著基礎設施的完善,Silent Payments 有望成為比特幣隱私的標準解決方案。
建議:
- 關注支援 Silent Payments 的錢包
- 考慮在適當場景使用
- 了解其限制和安全模型
參考資料
Cypherpunks Taiwan
密碼學使自由和隱私再次偉大。Cryptography makes freedom and privacy great again.