什麼是隱私幣?私密加密貨幣如何運作

· 7 分鐘閱讀

本指南介紹什麼是隱私幣、一般區塊鏈會暴露你支付的哪些資訊,以及隱私幣用來隱藏付款人、收款人與金額的密碼學技術。最後以 Blocknet 為實例,並介紹如何透過挖礦取得你的第一批私密幣。

什麼是隱私幣?

簡短回答

隱私幣是一種加密貨幣,它的設計讓支付不會公開顯示付款人、收款人或金額。它使用環簽章、一次性隱身地址與隱藏金額等密碼學技術,因此每個節點仍能驗證每一筆支付,而查看區塊鏈的人幾乎得不到任何資訊。

每種加密貨幣都維護一本共享帳本,也就是區塊鏈,由許多獨立的電腦複製並檢查。正是這種公開性,讓互不相識的人不必透過銀行居中就能對誰擁有什麼達成共識。隱私幣要回答的問題是:這本帳本需要顯示每筆支付的多少內容。

比特幣顯示了大部分內容。它的白皮書用一句話描述了其隱私模型:「The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone.」(大眾可以看到有人向另一個人發送了一筆金額,但沒有資訊把這筆交易與任何人連結起來。)名字不在上面,但地址與金額是公開的。隱私幣更進一步,把每筆支付的細節留在公開紀錄之外,同時仍能證明這筆支付遵守規則。

公開的區塊鏈會暴露你的什麼?

在比特幣這樣的透明鏈上,任何知道你某個地址的人,都可以在區塊鏈瀏覽器中查詢它,並看到:

那裡沒有寫你的名字,但地址很少能長期不被連結。在商店付款、從交易所提領或公布一個用於捐款的地址,都會把它和你連結起來,從那時起,整段歷史都可以被讀取。這有點像把你的銀行對帳單貼在公告欄上,只是用帳號取代了你的名字。你付款的每個人都能看到你持有多少,付款給你的每個人都能看到你怎麼花這筆錢。

隱私幣的設計目標,是讓公告欄上只顯示發生了有效的支付。

隱私幣如何隱藏付款人、收款人與金額?

簡短回答

許多隱私幣結合了三種技術。環簽章把真實的幣與誘餌混在一起來隱藏付款人,一次性隱身地址為每筆支付產生一個新地址來隱藏收款人,承諾加範圍證明在證明金額有效的同時隱藏金額。很多隱私幣還保護網路層,讓交易的來源保持隱藏。

每種技術負責支付的一個部分。以下用淺白的話說明它們如何運作。

環簽章隱藏付款人

環簽章讓你可以代表一個群體簽章,而不透露是哪個成員簽的。Ron Rivest、Adi Shamir 與 Yael Tauman 在 2001 年提出了這個想法,2013 年的 CryptoNote 設計把它帶進了加密貨幣。花費時,你的錢包會從鏈上挑選其他輸出作為誘餌,並為整個群體簽章。任何人都能檢查其中有一個被花費了,而簽章不會說明是哪一個。

隱私幣使用可連結環簽章,它增加了一個金鑰映像:這是真實被花費的幣獨有的標記,但不會透露它是環中的哪個成員。如果同一個金鑰映像出現兩次,網路會拒絕第二次花費,所以私密的幣依然不能被花費兩次。Monero 與 Blocknet 使用一種更精簡的版本,稱為 CLSAG。

隱身地址隱藏收款人

在隱身地址方案中,你分享的地址從不出現在鏈上。你的地址包含兩個公鑰:檢視金鑰與花費金鑰。每次付款時,付款方的錢包會把這兩個公鑰和一個新的隨機值混合,推導出一個只用一次、不再重複的地址。在你這一端,私有檢視金鑰讓你的錢包掃描區塊鏈並找出發給你的輸出,私有花費金鑰讓你花費它們。

如果十個人向你網站上的地址付款,鏈上顯示的是十個彼此獨立的一次性地址,看不出它們之間有任何關聯,所以沒有人能算出你總共收到了多少。

承諾與範圍證明隱藏金額

金額以 Pedersen 承諾的形式儲存,它鎖定一個數字卻不顯示它。承諾可以相加,所以每個節點都能確認進入交易的金額與流出的金額(含手續費)相符,而看不到其中任何一個數字。範圍證明再表明沒有任何隱藏金額是負數,因此沒有人能憑空造出幣來。Bünz 等人在 2018 年發表的 Bulletproofs 讓這類證明小了很多。

網路隱私隱藏支付的起點

即使是完全私密的交易,也可能透過觀察哪個節點最先廣播它,被追查到發出它的那台電腦。2018 年發表的 Dandelion++ 因應這個問題的方法是:先把新交易沿著一條「莖」從一個節點悄悄傳給下一個節點,再從更遠處的一個隨機點向全網擴散。

有些隱私幣走的是另一條路。2016 年上線的 Zcash 使用名為 zk-SNARKs 的零知識證明:它的屏蔽地址隱藏付款人、收款人與金額,證明本身則表明交易有效,而不透露其中任何一項。

為什麼預設隱私很重要?

如果隱私是一項需要開啟的功能,使用它的交易就會形成一個較小的群體,而較小的群體更容易被研究。如果每筆交易都以同樣的方式建構,私密支付看起來就和鏈上其他所有支付一樣,也沒有人需要記得去保護它。

預設隱私還能讓每一枚幣都可以互換,這種特性稱為可替代性。在透明鏈上,一枚幣帶著它的全部歷史,兩枚面額相同的幣可能因為來歷不同而被區別對待。當沒有任何幣帶有可見的過去時,一枚幣就和其他任何一枚一樣好,這正是人們對貨幣的期望。

日常的理由很簡單。企業不希望競爭對手看到它付給供應商的款項。員工不希望自己的薪水被每個賣咖啡給他的人看到。捐款給某項志業的人可能更希望不公開。現金與一般銀行帳戶已經給了人們這種隱私,隱私幣則把它帶到數位支付中。

以 Blocknet 為例看隱私幣

Blocknet 是一種隱私幣,它對每一筆支付都套用環簽章、隱身地址、隱藏金額與網路隱私。它的交易格式沒有透明模式:

Blocknet 還支援依名稱付款。像 @alice 這樣的 Blocknet ID 短名稱可以取代 90 多個字元的地址,而付給這個名稱的款項仍然落到全新的隱身地址上,所以公開的名稱不會透露其主人的收入。想深入了解每一層,請閱讀 Blocknet 如何保護支付隱私;想了解全貌,請閱讀 Blocknet 是什麼?

Blocknet 規劃中的 Faraday 升級將擴大每次花費所隱藏其中的群體。用 blocknetcrypto.com 的話說:「Today a spend hides among 16 outputs. After Faraday, it hides among every output on the chain.」(如今一次花費隱藏在 16 個輸出之中。Faraday 之後,它將隱藏在鏈上的每一個輸出之中。)

如何取得隱私幣?

你可以透過挖礦取得。Blocknet 的工作量證明 Argon2id 每次雜湊大約需要 2 GB 記憶體,因此由桌機、筆電與伺服器中一般的 CPU 與記憶體來挖礦。礦池付款會像其他任何 Blocknet 支付一樣到達你手中,落在一次性隱身地址上,金額也是隱藏的。

  1. 取得錢包。 挖礦用 Blocknet 錢包指南介紹了如何建立錢包、備份助記詞並複製你的地址。
  2. 下載 seine。 它是免費、開放原始碼的 Blocknet 挖礦軟體,支援 Windows、macOS 與 Linux,可在下載區取得。它用你的 CPU 挖礦,在 Windows 與 Linux 上還會同時使用任何 NVIDIA 顯示卡,並在執行時自動調校。
  3. 在 bntpool.com 開始挖礦。 貼上你的地址或 @name,接受預設礦池,付款就會私密地到達你的錢包。如何挖 Blocknet 會逐步帶你完成。

常見問題

隱私幣和比特幣有什麼不同?

比特幣以明文記錄每個地址與金額,所以任何人都能追隨幣從一個地址流向下一個地址,並查看每個地址的餘額。隱私幣使用環簽章、一次性地址與隱藏金額等密碼學技術,區塊鏈仍能證明每筆支付有效,但外人幾乎看不出誰付給了誰、付了多少。

所有隱私幣都強制隱私嗎?

不是,各種設計不同。有些幣,例如 Monero 與 Blocknet,對每一筆交易都套用隱私保護,根本沒有公開模式。Zcash 同時提供屏蔽地址與透明地址:屏蔽地址用零知識證明隱藏付款人、收款人與金額,透明地址的用法與比特幣地址很相似。使用者可以在兩者之間移轉資金。

網路如何檢查它看不到的支付?

密碼學讓節點不必讀取支付細節就能驗證它。環簽章證明幾個輸出中有一個被花費,金鑰映像阻止同一筆幣被再次花費,金額承諾可以相加,因此節點能確認輸入等於輸出加手續費。範圍證明則表明沒有任何隱藏金額是負數。

可以用一般電腦挖隱私幣嗎?

可以,只要這種幣使用記憶體密集型工作量證明。Blocknet 使用 Argon2id,每次雜湊大約需要 2 GB 記憶體,因此由一般桌機、筆電與伺服器來挖礦。下載 seine,填入你的 Blocknet 地址或 @name,它就會用你的 CPU 與任何 NVIDIA 顯示卡在 bntpool.com 礦池挖礦。