關於燒毀漏洞的事後檢討

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

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

關於重複計數漏洞的事後檢討

這篇文章要來談重複計數(multiple counting)的漏洞,其包括了兩個變種。這篇文章的目標是對上述的漏洞提供完整的細節,解釋這是如何被用來攻擊線上服務、商家與交易所,並且 Monero (開發)社群是如何處理這個漏洞。

重複計數漏洞的兩個變種存在於子地址(subaddress)功能中,這功能用了個不同的交易金鑰程式碼架構。第一個漏洞的變種簡單來說就是沒有對重複的公鑰進行檢查,因此攻擊者可以重複將同份交易公鑰包含在交易中,這結果導致了接收者的錢包會回報收到了x倍於其真正收到的的交易數量(x是代表收到幾次交易金鑰的一個整數),所有用來回報收到交易的指令(如show_transfers (CLI), get_transfers (RPC))都被此漏洞影響。但是餘額並沒有受到影響,錢包依舊會回報正常的資金餘額。可惜的是,大多數的交易所都是利用 get_transfers 或 get_payments RPC指令在運作,因此重複的交易公鑰將會導致計算出錯誤的金額。

閱讀更多關於重複計數漏洞的事後檢討

CryptoNote 系列加密貨幣存在重大漏洞的資訊揭露

總覽

我們已在 Monero 上找到並修復一個重要的漏洞,這個漏洞同時影響了所有使用 CryptoNote 演算法的加密貨幣,藉由這個漏洞,無限量的錢幣可以被不知不覺的產生。

我們已在好一段時間以前就將這個漏洞修復完成,並且確認過 Monero 的區塊鏈從未被利用這個漏洞產生出偽造的錢幣,但直到數周前的硬分叉後我們才能確保整個 Monero 網路都已經更新這項修復。

在分叉完成後,當我們一確認整個網路都已經更新,我們就將此漏洞通知了其他所有還在開發的 CryptoNote 加密貨幣專案包括CryptoNote本身、 Bytecoin、Forknote、Boolberry、DashCoin 與 DigitalNote。

請注意,發文(原文)的此刻,只有Monero、Aeon、Boolberry與Forknote已修復這個漏洞。我們已盡量提供其他貨幣專案盡可能足夠的時間修復,但已無法再繼續限制這項資訊揭露。

我們強烈建議避免使用、交易、兌換或使用以下被此漏洞影響的貨幣相關服務:
Bytecoin、DashCoin、DigitalNote

閱讀更多CryptoNote 系列加密貨幣存在重大漏洞的資訊揭露