隱私與機密交易

環簽章

環簽章讓一個人能代表一個群體簽署訊息,證明「群體中有人簽了」卻不洩漏究竟是誰。想像一份密封的請願書,由十二位具名參議員中的恰好一位簽署,簽名在數學上保證確有一位真參議員簽了,但任何分析都無法指認是誰。這個群體由簽署者臨時組成——其他成員不需同意、甚至不需知道自己被列入,因為簽署者只需要他們的公鑰,而非私鑰。這正是 Monero 發送方隱私的密碼學核心。

Rivest、Shamir 與 Tauman(2001 年)的原始構造把公鑰串成一個真正的「環」:簽署者用自己的私鑰閉合一圈數值,這圈數值在每個位置看起來都均勻隨機,驗證者能檢查這圈是否自洽,卻無法判斷它是在哪裡被閉合的。然而,純環簽章用於金錢有個問題:沒有東西能阻止你簽兩次而雙重支付。解法是「可連結環簽章」,它確定性地推導出一個金鑰映像(key image,與真正簽署金鑰綁定的唯一標籤)並納入簽名。同一輸出被花兩次會產生相同的金鑰映像,網路便拒絕重複者——但這個金鑰映像仍無法對應到環中任何特定公鑰。

Monero 為提升效率並同時隱藏金額,反覆改良這套設計。它從原始的 CryptoNote 方案演進到 MLSAG(多層可連結自發匿名群簽章),在 RingCT 之下把環簽章與機密交易的金額承諾結合;接著於 2020 年改用 CLSAG(精簡 LSAG),在維持同等安全的前提下把簽名大小縮減約 25%、驗證時間縮減約 20%。匿名集等於環大小:今日 Monero 固定強制環大小為 16,意即每筆花費都藏在 15 個誘餌加上真實輸出之中。

誠實的限制是:16 是很小的匿名集,若誘餌挑選不當、或日後被揭露其實已在別處被花掉,隱私就會劣化。統計與時序分析已在早期環較小或由攻擊者提供誘餌的 Monero 中揭穿過真實花費。正因如此,Monero 正轉向「全鏈成員證明」(FCMP),以對「曾被建立的全部輸出」之集合的零知識成員證明取代固定環——匿名集從十六躍升到數千萬。

為花用輸出 A,你的錢包從鏈上挑出誘餌 B、C、……P,組成 16 個的環,產生一個簽名加一個金鑰映像。驗證者確認簽名對該環有效、且此金鑰映像從未出現過——他們得知花費者擁有 {A..P} 之一,卻不知道是 A。

環大小 16 給出 16 的匿名集;金鑰映像阻止雙重支付。

環簽章把發送方藏在誘餌之中,但本身並不隱藏金額或收款方;Monero 需要再疊上 RingCT(機密金額)與隱形地址,才能達到完整的交易隱私。