關於燒毀漏洞的事後檢討

這篇文章要來談一個被稱為燒毀(burning)的漏洞。這篇文章的目標是對上述的漏洞提供完整的細節,解釋這是如何被用來攻擊線上服務、商家與交易所,並且 Monero (開發)社群是如何處理這個漏洞。

這個漏洞基本上來自於錢包在接收到被燒毀的交易時不會發出警告。因此,有心的攻擊者可以利用這點,僅是支付網路交易就能燒毀一個服務機構的錢包內資金。經由此漏洞,攻擊者其實沒有直接的獲益,但是仍然可能有間接的獲益。燒毀的概念上是將數筆交易送至相同的隱匿性地址,而這地址是在先前就已經存在的,這概念的例子可以在先前的討論中看到。不幸的是,這問題被利用來攻擊服務機構的可能性並沒有被察覺,直到 Monero 的一位 reddit 社群成員提出了這個攻擊假設。

目前,Monero的隱匿性地址可以用這樣的公式來表示:

P = Hs(rA||i)*G + B

其中

Hs 是一個雜湊至純量的函式(注意這存量的輸出為 reduced modulo l);
r 是交易私鑰,由發送者隨機產生;
A 是查看公鑰,是收款者的錢包地址字串的其中一部分;
i 是交易輸出索引 (每筆交易輸出都有其索引編號,譬如第一筆交易輸出就是索引0);
G 是標準 Ed25519 的基點;
B 是花費公鑰,是收款者的錢包地址字串的其中一部分;

而 Monero 的金鑰映像可由以下公式表示:

I = xHp(P)

其中

x 是一個私鑰/純量(由收款者的花費私鑰與 ECDH 共享金鑰雜湊純量輸出相加而得);
Hp 是雜湊至點函式;
P 是隱匿性地址;

可以從上面的公式看到,將 Monero 發送至相同的隱匿性地址時將會輸出多個重複的金鑰映像,當區塊鏈網路中出現重複的金鑰映像時,網路將會將之捨棄,因為這相當於重複花費的攻擊。因此每一個隱匿性地址都只能有一個交易輸出被花費一次(錢包會自動挑選面額最大的來使用),而其餘的交易輸出將會無法被花費/被燒毀。此外,發送到同一個隱匿性地址的交易之間關係將可以被連結起來。

閱讀更多關於燒毀漏洞的事後檢討

Monero 技術介紹 (一) – 隱匿性地址

Monero 是一種安全且無法追蹤的電子加密貨幣。
它來自一個開放原始碼、去中心化且任何人皆可自由參閱的開發專案。

在這篇文章中我們要來談談隱匿性地址。但讓我們先來回顧一下 Monero 的重點概念。

我們知道 Monero 使用了去分散式的點對點共識網路去紀錄區塊鏈中的交易輸出。 如果 Alice 擁有 Monero,這代表著她擁有著某些交易輸出的控制權。 當 Alice 轉帳一些 Monero 給 Bob 時,Alice 其實是在對交易網路宣布她想要把某些她可以控制的交易輸出重新打包成一個新的交易輸出並把控制權完全轉移到 Bob的手上。 換句話說,一個交易即是指,屬於某個錢包的舊交易經過轉形之後,轉移到屬於另一個錢包的新交易輸出的過程。

接著讓我們再更進一步,了解隱匿性地址是如何增加使用者的隱私權。

閱讀更多Monero 技術介紹 (一) – 隱匿性地址