關於燒毀漏洞的事後檢討

這篇文章要來談一個被稱為燒毀(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指令在運作,因此重複的交易公鑰將會導致計算出錯誤的金額。

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

核心開發團隊公告

在Monero上的2018年,許多令人興奮的新技術正順利地進行著,然而為了保持Monero可以走在隱私保護與區塊鏈技術的尖端,技術並不是全部。考慮到這點,核心開發團隊(Core Team )想要在以下的文章提醒整個社群關於核心開發者在這專案中所扮演的角色和地位。

核心開發者在Monero中的角色常常是個讓人難以理解的事情,尤其是與其他的加密貨幣專案領導結構相比之下顯得不同。有鑑於不需信任(trustless)的社群經營尚無法實現,在某些情況下還是要有人負責需要信任的那些工作。簡單的例子就像是域名的管理(如getmonero.org)或是伺服器的管理(getmonero.org網站所在的伺服器),目前是沒有辦法讓一個去中心化的社群一起來擁有一個域名,所以有人就必須負責擁有這個域名。這種概念就像是核心開發團隊負責作為一個去中心化社群與中心化現實世界的橋樑。

閱讀更多核心開發團隊公告

關於PoW共識機制更動與重複使用金鑰

PoW共識機制的更動

最近常常可以看到關於抵抗ASIC礦機和如何面對潛在的ASIC礦機威脅等話題,這篇文將會(稍微)認真地指出: 我們對於如何藉由在硬分叉時調整PoW共識機制以維持抗ASIC礦機特性的立場。

特殊應用積體電路(Application Specific Integrated Circuit)簡稱ASIC在這邊指得是被特殊設計出來的挖礦硬體,舉例來說,BTC的ASIC礦機被設計用來挖SHA256演算法的加密貨幣。由於這種硬體是被特別設計用來挖礦的,也因此會比CPU、GPU、甚至是FPGA等日常使用的硬體來得有大量的效能優勢。因此,任何被設計出來的ASIC將會顯著地主宰全網算力並導致中心化的問題。

閱讀更多關於PoW共識機制更動與重複使用金鑰

關於Monero手續費的一份筆記

近期社群中不斷有抱怨認為Monero交易的手續費過於昂貴。雖然我們並不同意其中的一些意見,但我們還是必須先徹底地分析一下這個情況。在那之前我們必須回應一點,有些抱怨認為開發者理當要將手續費直接修改降低後釋出新版本,但這樣的作法是因小失大的,因為 1. 這個方法只是把問題向後拖延;2. 改變參數與公式需要進行硬分叉,而這需要全面的共識;3. 每當價格變化後就得介入調整手續費的作法與去中心化的生態是矛盾的。

這就讓我們拿幾個同是使用工作證明(POW)的區塊鏈貨幣來做個每單位容量(kB)手續費比較:

  • 比特幣 Bitcoin: ~$26.90
  • 乙太幣 Ethereum: ~$2.91
  • 萊特幣 Litecoin: ~$0.10
  • 達世幣 Dash: ~$0.07
  • 門羅幣 Monero: ~$0.24

比較起來,Monero的每單位容量手續費其實並不算高。但是由於每筆交易所需的容量較大,實質的費用就因此變得相當高。但必須注意的是,Monero較大的交易容量是來自於預設的隱私保護功能。例如隱藏交易金額功能RingCT中的Range proofs可以佔到12kB的容量;但RingCT在強化交易隱私上是絕對必要的,當這功能還沒有啟用時,讓許多交易洩漏了隱私。 不過有個好消息是,未來Bulletproofs協定的啟用將會降低Monero至少80%的交易容量。

閱讀更多關於Monero手續費的一份筆記

防彈協定(Bulletproofs)將為Monero帶來更低的手續費

這是一篇關於防彈協定(Bulletproofs)的進度簡述與其在Monero上的應用介紹。簡單來說: 這協定令人驚艷,有效地降低了手續費,且已準備好要在測試網路(testnet)上開始測試。

現行的保密交易技術(confidential transactions, CT)可將Monero的交易金額隱藏,但為了確保所有人都可以驗證交易輸入和輸出的總和為零,我們使用具有代數性質的承諾協議(commitment),此外,我們還需要確保所有數值為正值以免造成溢位(overflow)的風險,此時範圍保護(range proofs)就發揮了作用。範圍保護可以讓每個人得以將承諾協議限制在一個特定的範圍內進行驗證,並完全不洩漏其他的交易資訊。我們現行的範圍保護協定會因交易輸出增加與範圍長度(目前為64bit)而使得容量大小呈現線性成長,這就造成了肥大的交易容量。不僅如此,若是交易中有多筆輸出,每筆輸出都需要分別有各自獨立的範圍保護,更會大幅增加交易容量,這並不是一件好事。

感謝Bünz、Bootle 與其他作者近期發表的一篇論文 (原文在此),他們在論文中提出了一個更有效率的範圍保護協定,稱為防彈協定。

閱讀更多防彈協定(Bulletproofs)將為Monero帶來更低的手續費

將MyMonero網頁版錢包匯入至GUI錢包

MyMonero是許多人使用的熱門網頁版錢包,使用上方便不須煩惱同步問題,但畢竟是線上服務,偶爾會發生服務中斷或延遲等狀況,這篇要來教你怎麼把MyMonero的金鑰匯入到官方的GUI錢包。

首先必須說明一點,Mymonero用的種子碼是舊式的13字記憶種子碼(seed),而官方的錢包是25字種子碼,所以MyMonero的13字並無法適用一般的25字種子碼的回復方法,必須從MyMonero網站上取得個別的金鑰來匯入GUI錢包。

閱讀更多將MyMonero網頁版錢包匯入至GUI錢包

更改錢包/節點的區塊資料庫位置教學

目前Monero的區塊鏈大小約為34GB,雖然不是非常巨大但也不算個小數字。在運行GUI錢包或是架設獨立節點時,從網路上同步下載的資料庫預設都是儲存在C:\ProgramData\bitmonero之中,對於許多C槽空間緊迫的人往往會想要把它移至其他位置,以下介紹如何更改預設區塊鏈資料庫儲存位置。

閱讀更多更改錢包/節點的區塊資料庫位置教學

架設Monero獨立節點教學

本篇文章將帶領你建架設獨立的完整節點(Full-node)或是遠端節點(Remote-node)

錢包跟節點的關係?

一個完整的Monero錢包 = 區塊鏈同步程式 (節點) + 錢包工具程式

以上就是Monero錢包的基本架構,這就也是為什麼每次打開GUI錢包時會自動出現區塊鏈同步程式啟動的原因。

因為錢包的運作需要依賴區塊鏈同步程式將區塊鏈的資料經由點對點(P2P)的方式下載到電腦上,再經由錢包工具程式掃描在區塊鏈中屬於自己的可用餘額;而每當你需要發送交易時,則是透過錢包工具程式利用私鑰簽署完交易之後,再經由區塊鏈同步程式透過P2P的方式將交易廣播到網路上。因此,運作中的區塊鏈同步程式在Monero點對點的網路中就是扮演一個節點(node)的角色。

節點、完整節點、遠端節點 有什麼不一樣?

前一段提到的錢包節點,它所負擔的工作只有下載區塊鏈資料和廣播錢包發出的交易,這樣可以確保區塊鏈資料是經過自己驗證的,但是,這些區塊鏈資料是從哪裡來的呢?

閱讀更多架設Monero獨立節點教學

Monero發布新版本v0.11.1.0更新

更新總覽

此次發布的版本 v0.11.1.0為小幅度的問題修正更新。

此項更新是基於v0.11主版本的更新修正而來,主版本v0.11為因應先前九月十五號硬分叉的必要更新。該次分叉將提高了環狀簽名的大小限制為5,並踢除在環狀簽名中重複的交易輸入。這次釋出的新版本提供了許多改進並及大量的bug修復。

閱讀更多Monero發布新版本v0.11.1.0更新