作者:Bennet
來源:https://bennet.org/learn/silent-payments-bitcoin-privacy/
“應該為每一筆交易使用一對新的密鑰,以確保這些交易不會被關聯起來指向一位共同的主人。”
—— 中本聰
在比特幣白皮書中,中本聰暗示了,重複使用相同的地址會付出隱私性代價。
像電子郵件地址那樣公開一個比特幣地址 —— (舉例而言)為了接受捐贈 —— 意味著把你用這個地址收取支付的永久記錄公開給全世界,就不必說你日後從中花費的記錄了。如果這個地址會被關聯到你在真實世界的身份,那問題就更嚴重了。 另一種做法是不斷輪換地址,也就是給每個支付者生成一個新的收款地址。這對隱私性更好,但也有點麻煩(插句話,我曾經開發過一個開源的工具,幫你自動化這個操作)。
今天,靜默支付提供了第三種選擇。你公開 一個 地址,它以 sp1 開頭,你可以隨意分享它。然後,每個給你支付的人都會把錢發送到 不同 的比特幣地址上,也就是沒人能從中分辨出它們的收款方是同一個人。而且,收款方不需要跟支付方交互 —— 不需要提供閃電發票或者 LNURL 端點,更不必提供 XPUB(擴展公鑰)。
實際上,自從 BIP-352 敲定以來,這在理論上就可能實現了,但行業基礎設施的支持到現在才起步。 2026 年,Sparrow Wallet 發佈了對靜默支付的支持(我是這款桌面端錢包的最賣力鼓吹者)。結合一種新的服務端軟件,叫做 “Frigate”,靜默支付終於變得實用了。
這是我編寫的手把手教學。讀完整篇文章,你將擁有一個屬於自己的 sp1 靜默支付地址。
靜默支付的工作原理
首先,你要知道,sp1 開頭的靜默支付地址 並不是 “常規的” 比特幣地址。常規的比特幣地址對應著一個比特幣腳本,bc1q 開頭的隔離見證地址和 bc1p 開頭的 Taproot 地址就是這樣的。靜默支付地址所編碼的 確實 也是公鑰,但這些公鑰不會直接出現在區塊鏈上 —— 我們稍後細說。所以,直接在區塊瀏覽器網站上搜索 sp1 地址,是找不到的。
一個 sp1 地址是由以下兩種元素構成的:
- 一個掃描公鑰,用來 發現 給你的支付
- 一個花費公鑰,用來 花費 這些錢
這兩個公鑰都有自己的私鑰。這兩個公鑰,帶上校驗和以及 sp1 前綴,就形成了一個可以告人的靜默支付地址。
以下是其他人給這個靜默支付地址發送支付的過程:
- 發送者的錢包軟件取出各交易輸入的私鑰、將它們與接收方的掃描公鑰(編碼在
sp1地址中的兩個公鑰之一)相結合,計算出一個共享秘密值。 - 然後,這個共享秘密值會被用來調整接受者的花費公鑰,產生一個全新的比特幣地址(具體來說,是一個
bc1pTaproot 輸出);只有發送者和接收者能夠知道這個地址的來歷。 - 當錢幣被髮送到這個 Taproot 地址時,不會有外在的標記表明這是一筆靜默支付,但接收者的錢包能夠使用掃描私鑰,識別出它是一筆給自己的支付。
graph TD sa[發送者 A] --> sp[sp1 地址] sb[發送者 B] --> sp sp -.-> ta1[bc1p...q7x] sp -.-> ta2[bc1p...m4k]在接收方這一頭,錢包軟件的工作是識別出這些支付。因為一筆靜默支付的最終目的地(收款地址)部分取決於交易的 輸入(即用來構造交易的 UTXO),所以沒有辦法預先計算出所有可能的收款地址。相反,錢包只能掃描區塊鏈、尋找給接收方的 Taproot 輸出。找到之後,錢包能夠使用花費私鑰 —— 在使用同一個共享秘密值調整之後 —— 花費這些資金。
關鍵在於:兩個不同的發送者,哪怕給同一個 sp1 地址支付,也會產生兩個看起來毫無關聯的 Taproot 輸出,它們之間沒有公開的關聯,也不能回溯到最初的 sp1 地址。這種不可關聯性,為雙方都帶來了隱私性好處。
滿足你好奇的更多密碼學細節
靜默支付背後的密碼學叫做 “橢圓曲線上的 Diffie-Hellman 密鑰交換(ECDH)”。這種技術也被用來保護今天互聯網上的絕大部分加密通信。ECDH 讓發送者和接收者可以獨立地獲得同一個共享秘密值,這樣雙方都能計算出地址,而且不用預先打招呼。
如果你已經開始讀這些文字了,說明你可能想找到更加深入的解釋。我無法在這裡提供,因此,我推薦了兩份閱讀材料,它們對我幫助最大:
- 第一篇,來自 Greg Walker 的《比特幣中的橢圓曲線密碼學》,這是一份一般性的介紹,值得一讀。
- 第二批,來自 Sebastian 和 Benma 的文章,解釋了靜默支付中的 ECDH,是一份非常好的、通俗易懂的介紹。
讀完這兩份材料之後,我推薦你自己讀一讀 BIP352 規範。
為什麼掃描很難,為什麼要用 Frigate
找到這些支付需要耗費許多計算。一個層級式確定性錢包有一組固定的地址,一個普通的 Electrum 服務端就足以監視這些地址。但是在靜默支付中,沒有可以觀察的固定地址:每一筆支付都會產生一個新派生出的輸出,這是收款方無法預測的。發現你的錢幣的唯一辦法就是取得每一筆可能的交易、使用掃描密鑰重複一遍推導共享秘密值的計算,看看是否命中。
這部分額外的工作,對於一個全節點來說是 可以承擔的(雖然在當前流行的節點實現上,支持非常有限)。但是在移動端錢包上,就完全不現實了:移動端錢包只會間歇性運行,帶寬和電池都有限,並不是一個全節點。
Frigate 就是 Sparrow 的回答。它是一種 Electrum 服務端實現 —— 跟幫助你連接自己的錢包到全節點的服務端是同一種 —— 只是增加了額外的方法,可以為你掃描靜默支付。它是專為速度而優化的:橢圓曲線運算就發生在數據庫中,並且可以選擇用 GPU 來加速。它還能實時接收交易池數據,所以,甚至在你的入賬交易得到區塊確認前,你就能在錢包中看到它。
現在有一個公開的服務端實例運行在 frigate.2140.dev —— 由 Sparrow 和 2140.dev 聯合維護 —— 任何人都能使用這個服務端。這就是讓靜默支付變得對大部分人可用的辦法,也包括那些沒有運行自己的節點的人。當然,你可以運行你自己的服務端,其中的好處我們後文會說。
你的掃描私鑰有多敏感?
為了掃描發送給你的靜默支付,Frigate 需要來自你的錢包的兩件東西:你的掃描私鑰和花費公鑰。如果你將這些東西託付給一個公開的 Frigate 服務端,理論上這個服務端可以做什麼?
簡單來說,它可以找出每一筆發送到你的 sp1 地址的支付,並將它們與你關聯起來。它沒辦法花費這些錢,但惡意的或者遭到劫持的服務端可能會從你的收款歷史中拼湊出你的形象 —— 這是靜默支付希望阻止的事。在這個意義上,你交出去的密鑰很像一個 XPUB —— 它會暴露你的 收款/支付 歷史,只是沒法移動資金。
信任一個公開的 Frigate 服務端,近似於信任一個公開的 Electrum 服務端,它能看到你的錢包所查詢的地址。Frigate(本身是一種開源的軟件,就像 Sparrow),在內存中保存你發送的密鑰,僅允許你的會話訪問,就像一個普通的服務端臨時保存你的地址。你要信任運營者不會搞鬼。(BIP-352 確實支持一種更加私密的模式 —— 服務端發送 “調整” 數據給你,你的錢包軟件自己在本地匹配,完全不洩露掃描密鑰 —— 但對於客戶端來說要重得多,這也是 Frigate 選擇服務端掃描的原因。)如果這份信任超出了你願意接受的範圍,你可以自己運行 Frigate 服務端。不過運行它的辦法超出了本文的範圍。
在 Sparrow 中建立一個靜默支付錢包
現在,我們來建立一個新的靜默支付錢包。你需要使用最新版本的 Sparrow(在我最後一次更新本文之時,是 2.5.2 版本),安裝到你的電腦上。
創建錢包
打開 Sparrow 軟件的界面,在菜單選擇 File → New Wallet(文件 -> 新錢包),給錢包安一個名字,開始創建它。在 “Policy Type”(花費條款類型) 一欄,選擇 “Single Signature SP”(單簽名靜默支付)。 Taproot 是唯一一種可用的腳本類型,我們前面已經解釋過了。

在 “Keystores”(密鑰媒介)欄目中,點擊 “New or Imported Software Wallet”(新的或導入軟件私鑰)。在 “Mnemonic Words (BIP39)”(BIP39 助記詞)一欄,選擇你喜歡的詞組長度。點擊 “Generate New”(生成新的),然後使用紙幣抄下這組種子詞並安全保管它們。

妥善備份之後,點擊 “Confirm Backup”(確認備份)。會有彈窗讓你重新輸入詞組,以驗證你的備份的完整性。驗證完之後,點擊 “Import Keystore”(導入密鑰),回到軟件主界面。不要改變m/352'/0'/0' 的派生路徑。點擊右下角的 “Apply”(生效) 按鈕 —— 你會被詢問是否要為這個錢包添加一個口令。
全部完成後,你會回到 Sparrow 錢包軟件主界面:

請注意,你剛剛創建的是一個 “熱錢包”,意思是所有的私鑰都放在你的(聯網的)電腦上。我們會在下文討論冷錢包(即專用的硬件簽名器)對發送和接收靜默支付的支持。
連接一個靜默支付服務端
普通的比特幣節點無法告訴你靜默支付送達了,所以 Sparrow 需要你告知一個可以掃描支付的服務端 —— 換句話說,一個 Frigate 服務端。
打開軟件的 “Settings”(設定)頁面,點擊左側的 “Server”(服務端)。如果你運行了自己的 Frigate 實例(在你自己的節點上),就選 “Private Electrum”(私人 Electrum 服務端),然後輸入它的細節。否則,就使用公開的服務端,點擊 “Public Server”,選擇 frigate.2140.dev。點擊 “Test Connection”(測試通信),等待成功消息。

關閉設定頁面,打開錢包的 “Transactions”(交易)側邊欄。你可能會看到 “Wallet loading history for SP-Demo ”這樣的一句話,表示在為你加載歷史。給它一些時間,也許比你為使用普通 Electrum 服務端掃描普通錢包而等待的時間要更長,最終你會看到 “Finished loading ”(加載結束)。你的隱私性之旅就此開啟!
獲得靜默支付地址
打開 “Receive”(收款)側邊欄。跟普通錢包不一樣,你不會每次都看到一個新地址,只會得到同一個靜默支付地址,也就是 sp1... 這一串字符,以及它的 QR 碼錶現形式。這個就是你可以公開、重複使用、自由分享的靜默支付地址了!你永遠不需要改變這個地址。

打開 “Transactions”(交易)和 “UTXO” 側邊欄,你會注意到其界面也跟 “普通” 比特幣錢包有些區別:它們一開始是完全空白的,因為地址不是提前推導出來的。 你收到支付後,這些屏幕才會開始充實起來。以下是你收到第一筆靜默支付之後它們的樣子:


每次你在 Sparrow 軟件載入這個錢包,服務端都會掃描發送給你的靜默支付。出現在你的 “Transactions”(交易)和 “UTXO” 頁面中的支付跟任何 “普通” 的支付一模一樣,因為從區塊鏈上看,確實沒什麼區別:只是普通的 Taproot 輸出,只有你的錢包能識別出它們是給你的支付。
所以,我們這就講完收款這一部分了。那該怎麼向靜默支付地址發送支付呢?
向靜默支付地址發送支付
對 發送 到sp1 地址的支持比收款端更加完善。除了 Sparrow,還有 BlueWallet、Wasabi、Nunchuk、Cake 等軟件錢包,都可以發送靜默支付。 Silentpayments.xyz 頁面提供了一個全面的兼容性表格。
我會講解在 Sparrow 上發送靜默支付的過程。點擊 “Send”(發送)側邊來,把你知道的其他人的 sp1 地址複製進去,輸入你要發送的數額和手續費,然後點擊 “Create transaction”(創建交易)。在交易構造頁面,你會看到收款目的地依然作為 sp1 地址列出:

不過,在簽名和廣播交易之後,Sparrow 就會顯示真正的 Taproot 地址(以 bc1p 開頭),來表示這些錢幣發送到了哪裡:

在這個頁面背後,Sparrow 已經完成了本文第一節所介紹的發送方數學運算 —— 從交易的各個輸入以及接收方公開的公鑰,派生出一次性的 Taproot 輸出 —— 並廣播了最終的交易。到 mempool.space 網站看看,你會發現它看起來就是一筆普通的 Taproot 支付。根本看不出來它是一筆靜默支付,也無法跟你知道的那個 sp1 地址關聯起來。
一個值得一說的細節,跟硬件簽名器有關:目的地輸出 取決於被花費的輸入。因此,在簽名時,錢包必須使用輸入的私鑰運行一次 ECDH 運算。對於放在軟件中的私鑰來說,這很容易。但對於一個冷錢包設備來說,它的整個設計目標就是保證私鑰不要離開設備,這就產生了一個全新的兼容性問題。 這就是下一章的要點。
硬件簽名器和冷存儲
硬件支持是拖慢靜默支付普及的主要障礙。
在發送方這一頭,要給 Bitbox 豎一個大拇指,他們是第一個完全支持發送支付到 sp1 地址的硬件簽名器製造商。我 認為 通過 PSBT 文件(BIP 375),讓一個空氣隔離的 Coldcard 簽名器簽名靜默支付交易,也是有可能的,但我還沒自己驗證過。等我搞清楚了,我會更新這個頁面。
除此之外,其他家的用戶就不太走運了 —— Trezor、Ledger 和 Blockstream Jade 簽名器的用戶,都 還不能 發送支付到靜默支付地址。
那麼收款呢?要是你跟著我的教程做,但嘗試導入一個來自硬件的密鑰,你會看到這樣的消息:

撇開設備識別錯誤 —— 我連接的是 Safe 3,不是 Trezor T —— 這個報錯是準確的:現在你還無法 收取 靜默支付到冷錢包。只要你讀了前面的解釋,你就知道,使用 sp1 地址來收款 不是 換個公鑰派生路徑這麼簡單 —— 為了檢測入賬支付,錢包必須持有掃描私鑰,並對幾乎每一筆交易的輸入公鑰運行 ECDH 。硬件簽名器的設計用途是 永遠不要暴露私鑰 。雖然 BIP352 允許暴露掃描密鑰(它只能掃描,不能花費),做到這個還是需要專門的固件支持。
所以,總結一下:大部分人都可以先從一個熱錢包開始私密地 收取 小額款項,然後將大額的款項轉入你的冷錢包,就跟普通熱錢包的使用方法一樣。你必須接受,絕大部分的硬件簽名器的用戶還無法向你的 sp1 地址發送支付。
如果靜默支付對你來說還不夠成熟
靜默支付是個全新的東西。我前面提到的缺點可能使它不適合你的用途,這完全可以理解 —— 而且,這正是我開發我的無服務端受捐軟件的原因。不停輪換地址依然是一種接受比特幣支付的可靠方法,適合所有錢包,而且不會犧牲你的隱私性。
自己試一試
讀過本指南,繼續瞭解靜默支付的最好辦法就是自己試一試。提醒一句,靜默支付的技術規範還比較新,所以,在使用真實資金測試時,務必非常小心。
如果你缺少一個兼容靜默支付的錢包,而且你更多隻是想實驗一下這套協議,那麼 Silent Amulet 值得關注。它是一個完全的 BIP-352 錢包,作為單個 HTML 文件在瀏覽器內運行。甚至你可以配置它連接你自己的 Blindbit 索引器,在本地掃描,而不需要把掃描密鑰交給一個服務端,這是我在第二節提到的更加隱私的模式。
你可以通過掃描下面的 QR 碼,來測試你正在使用的錢包軟件是否可以解析一個 sp1 地址:

如果你認為這個指南有用,並且你也有兼容的錢包,捐贈無論多少聰,都讓我感激,並且能支持這個指南網站繼續運行。如果你的錢包 不支持 靜默支付,你也可以通過可靠的隔離見證錢包或是閃電支付給卷則。
我也建議你給 Sparrow wallet 捐贈。這是最好的比特幣項目之一,由僅僅一位開發者維護,並且是完全免費和開源的。
感謝閱讀,祝囤聰順利。
(完)

