Monero 技術介紹 (三) – 環簽交易(RingCT)

Monero 是一種安全且無法追蹤的電子加密貨幣。它來自一個開放原始碼、去中心化且任何人皆可自由參閱的開發專案。 在這篇文章中,我們要來談談環狀簽名保密交易,通常簡稱為環簽交易(RingCT)。 在上一篇文章中,我們呈現了 Monero 是如何藉由創造無法區分的交易輸入以保護付款者的隱私。 過程中使用了數位簽名的技術,將真正的交易簽署者隱藏在數個環狀簽名輸入中完成一筆交易。

另外,我們也闡述了金鑰映像(key image)是如何用來防止交易輸入被重複花費。 然而為了更徹底的增加交易雙方的隱私,一個稱為環簽保密交易(RingCT)的協定被用來隱藏交易的金額。

在 Monero 發展早期開始啟用 RingCT 之前, Monero 的交易金額需要先分割成特別的單位數量。 譬如,一筆金額為 12.5 的交易輸出會被分割成三筆分別為10、2、0.5的金額。 這樣的方式可以讓環狀簽名在建構時可以有足夠等同的輸入來源,因為環狀簽名的輸入金額必須是一致的。 但在這個交易步驟中,每一筆交易金額都是可見的。 為了改善這個缺點, Monero 在 2017 年的一月啟用了 RingCT 協定。 在啟用 RingCT 的一個月後,大約有 98% 的交易都是使用 RingCT 協定。 而在 2017 年的九月之後,所有的 Monero 交易都會是強制使用 RingCT 協定。

如今在使用 RingCT 的協定下,每個在挖礦中新產生的 Monero 會先以可見金額的形式存在於交易輸出中。 而當這些新產生的 Monero 在第一次被轉移時,將會產生帶有金額遮罩的 RingCT 交易輸出。 如此一來, Monero 的交易將不再需要被分割為特定的單位數量。 這代表著錢包在交易時可以任意挑選一個 RingCT 的交易輸出,這大幅提高了匿蹤性。 值得注意的是,一個環狀簽名裡無法同時包含在 RingCT 啟用前的舊交易輸出與帶有金額遮罩的新交易輸出。 所以就如同新產生的 Monero 的處理方式,在 RingCT 啟用前的舊時期交易輸出必須要先轉換成 RingCT 的交易輸出,接著才能與 RingCT 的輸出形成環狀簽名。 讓我們來舉個例子來解釋 RingCT 是如何運作的。

舉例來說,若 Alice 擁有一個金額為 12.56 的交易輸出並想付款 2.5 個 Monero 給 Bob。 由於輸出是無法被花費兩次的,所以這個輸出將會被整筆花費出去,之後才會將找零返回給 Alice 。 以這個例子為例, Alice 的這筆交易將會有一筆 12.56 Monero 的輸入和兩筆輸出,第一個輸出會是要付款給 Bob 的 2.5 Monero ,而另一筆將會是 10.06 Monero 的找零將會傳送回她原本自己的錢包。 為了防止 Monero 在交易的過程中被偽造而無中生有,每一筆 Monero 的交易輸入與交易輸出各自的金額總和必須相同。 而在 RingCT 的交易中, Alice 會被要求提供一個此筆交易輸出的資訊,此資訊僅包含了讓交易網路可以驗證此筆交易的資訊,而不會公開實際上到底花費了多少金額。 儘管提供的這些資訊看起來像是隨機的數字,礦工們仍然可以從這其中驗證轉帳給 Bob 的金額與可用的餘額相同(詳見註1)。 在 RingCT 交易中,

另一個重要的機制是”範圍保護”,這個可以防止有人提交了負值的交易金額, 範圍保護在加密學上保證了交易中的金額是大於零並小於特定的數字,以保護 Monero 的發行量。 基於以上的各種機制設計,使得即使外部觀察者的角度無法從交易輸出中得知真正的交易金額,但依舊是可以驗證此筆交易為有效的。

拜 Monero 擁有的隱私設計所賜,使用者可以隨意地發送給任何對象,而不用擔心有人會得知交易的金額或是交易雙方的身分。 這些特性使得 Monero 成為在保護隱私需求中最先進的數位貨幣,但這些創新的腳步不會停歇於此。 在下一部影片中,我們將討論 Kovri ,一個用 C++ 打造的 I2P 路由技術,將使得 Monero 的交易更加安全。

如果你有興趣了解是什麼讓 Monero 成為最重視隱私的加密貨幣,請參閱我們其他的文章或參閱 getmonero.org。


註1: 交易中須公開的資訊由這個公式而來:rct = x_G + a_H(G) 。

在這邊最重要的變數為a與x。
H(G)和G是關係到許多在這篇文章所述之外的因素故在此不做解釋。
a是在交易中的真正金額,在文章中的例子也就是2.5。
x是用來作為金額遮罩的隨機數字,由錢包所自動產生。
簡單來說,這個公式可以被簡單敘述為 rct = 隨機數字 + 真正的交易金額。

在RingCT的交易中,rct的值將會被發佈到交易網路中作為一個交易輸出,而交易網路或礦工將可使用這個rct值去驗證交易輸入是否等於交易輸出的金額,以確認沒有額外的 Monero 被偽造產生。 然而,對於一個外部的觀察者來說,並無從得知變數x的實際金額,所以無法得知有多少金額在交易中被實際的花費掉。

本篇翻譯來源 https://github.com/alvinjoelsantos/promo-video/blob/master/ringct.md

Monero 技術介紹 (二) – 環狀簽名

Monero 是一種安全且無法追蹤的電子加密貨幣。它來自一個開放原始碼、去中心化且任何人皆可自由參閱的開發專案。在這篇文章中,我們要來談談環狀簽名。

上一篇文章中,我們討論了 Monero 是如何藉由隱匿性地址來避免交易輸出被連結到收款者的公開地址。這是使用了一次性公鑰所達成的效果。一次性公鑰僅能被收款者所再花費,且僅有收款者得以查看其在區塊鏈上所擁有的交易輸出。因此所有的交易輸出都是無法被追蹤的,可以確保收款者的隱私無虞。

而在交易輸入的這端,也就是付款者的隱私,則是藉由環狀簽名(ring signatures)來保護。

環狀簽名是一種數位形式的簽署方式,藉由混合一群簽署者的簽名來製造一份無法分辨來源的簽名,而得以授權一份交易。這可以類比是從一個共同銀行帳戶發出的支票,但無法得知真正的簽署者是誰。這份數位簽名是由一位簽署者與多位非簽署者組成的”環”所簽署,每一位參與者都是同等的。其中真正用來簽署的一次性花費金鑰,是來自於該付款者的前一筆收款交易輸出。其餘非簽署用的數個來源是來自區塊鏈上舊有的交易輸出,作為誘餌。這些輸出將被合成一個新的交易輸入。從第三方的角度來看,每一個交易輸入都是相同而無法區分彼此的。這個過程可以幫助付款者隱藏其先前的交易來源。

此時您可能會產生疑問,如果第三方無法驗證哪一個交易輸出尚未被花費,那要如何防止有人重複的花費同一筆交易輸出呢? 這種狀況可以用金鑰映像(key image)來解決。 金鑰映像是來自於交易輸出被花費時產生的一組加密金鑰,會被包含在每一筆環狀簽名的交易中。基於加密學的原理,每一個交易輸出只會對應一個金鑰映像存在於區塊鏈上,但無法回推是哪一組金鑰映像是由哪一筆交易輸出產生。所有的金鑰映像清單會被紀錄於區塊鏈中,使礦工得以驗證交易輸出沒有被重複花費。

讓我們用一個例子來看看這是怎麼運作的。

Alice 想要用環簽大小(ringsize)為5的方式付 Monero 給 Bob。此時5個交易輸入的其中1個輸入即會是來自於 Alice 的錢包,將會在交易中被消耗。其餘4個交易輸入則是隨意的在區塊鏈中挑選而來,作為誘餌。這就會形成一個5個輸入的環狀簽名,每一個輸入皆有可能為真的簽名。 對一個外部的觀察者,包括 Bob 本人,都無法得知哪一個輸入才是真正來自 Alice 的一次性花費金鑰。如此一來,藉由使用環狀簽名的技術來混淆交易輸入的來源, Monero 可以保護付款者的隱私安全,確保每一個 Monero 的來源都是無法追蹤的。

為了要提高交易雙方的隱私保護,環狀簽名保密交易,通常簡稱為 RingCT,被用來隱藏 Monero 的交易金額。

RingCT 為環狀簽名協定帶來了許多好處。我們將會在下一篇討論。

如果你有興趣了解是什麼讓 Monero 成為最重視隱私的加密貨幣,請參閱我們其他的文章或參閱 getmonero.org。

本篇翻譯來源 https://github.com/alvinjoelsantos/promo-video/blob/master/ring_signatures.md

開發者會議紀錄 DevMeeting 20170709

  • Mac智慧挖礦(Mac Smart Mining) PR#1936OSX Background Mining的幫忙下完成了
  • ZeroMQ 距離提交到github上不遠了。 JSON PRC跟ZeroMQ的指令可能在初期還會更動。
  • MRL 開始著手寫打算跟SubAddresses 一起發布的文案
  • hyc 想要聽聽看各方對於LMDB使用條款改變的想法
  • Pigeons 開始彙整在Android NDK上加入Docker file的事宜
  • FFS(論壇資助系統)的重新規劃
    • 讓整個流程更明確一點
      • 拿超額募款來說好了, 現在超額的部分就流入一般公積金, 準備給以後的FFS計畫使用
    • 對某些計畫來說需要有里程碑不是甚麼好事
    • FFS的處理狀況容得下沒資助的人置喙的空間嗎?
      • Mooo 建議說他應該可以寫一個投票平台來確認那些人是有資助的
    • 如果有人有資助, 可是不真的”夠格”討論技術問題呢?
  • gkruja 提供了一些新開發的Android 錢包的螢幕截圖: http://imgur.com/a/mluUb

繼續閱讀...

Monero的預設環簽交易(RingCT)大小將調升

根據reddit社群上SamsungGalaxyPlayer的消息整理指出 依照2015年時 Monero 研究室的研究報告中規劃,在今年2017年時的9月例行分叉後,環簽交易的預設大小下限應訂為5。 但目前技術的進步是在當時沒有預料到的,包括現在新增一個輸入到環簽所增加的成本降低了,環簽輸入5與輸入10所占用的區塊容量差異也已大幅降低,這使得社群正重新考慮要提升這個下限值。 這項提議從今年二月就開始持續在GitHub上被討論,由各個開發者提出他們的分析結果來找出最佳的環簽大小下限值。其中一些重點如下:

  • 需要更好的交易輸入選擇演算法。這會讓創造環簽時所挑選的交易輸入更加地有效率,這將使得提升環簽大小的同時可以不會增加太多的交易容量。
  • 交易容量主要取決於交易輸出的數量,這代表大幅提升環簽大小對於區塊容量的增加是有限度的。
  • 其中亦討論到了EAB與EABE的攻擊,這指得是當某人持續在某些情況下重複地與特定對象交易時,有可能造成資訊被追蹤的風險,這個狀況將無法直接由提高環簽大小來迴避。此時將會需要一個稱為攪動(churning)的動作來迴避,就是使用者將資金直接從自己的錢包重複傳送到自己的錢包內數次。但提高環簽大小可以減少需要這個動作的機會,這個部分還在持續被討論中,而 surae 正在著手研究這樣的攻擊模式帶來的威脅,另一個成員亦提出了一個新的迴避的技術(環簽下限亦設定為10),尚待社群的同儕審查。
  • 需要是固定的環簽大小選項,而非使用者自行選擇的任意數字。因為大部分的交易都會使用預設最小的環簽大小,若有少數使用者使用特別大的環簽設定將使得匿蹤效果提升有限。

截至目前為止,環簽大小下限值將從原先規劃的5提升到10是一個普遍被接受的共識。此外許多人同意交易網路應該要只接受環簽大小為10,譬如環簽大小設定為19的交易應該要被拒絕。

此外,比10更大的環簽大小亦有被考慮到,但目前以環簽10的安全性來看,使用者尚未有明顯的威脅,所以提升到10會比提升到20來得合理。

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

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

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

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

換句話說,一個交易即是指,屬於某個錢包的舊交易經過轉形之後,轉移到屬於另一個錢包的新交易輸出的過程。

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

在每一個交易中,隱匿性的地址,也就是一次性的公鑰,將會被自動產生並紀錄在交易之中來表明是誰在之後的交易中可以使用這些交易輸出。 以旁觀者的角度來看,並無法從區塊鏈上得知資金是否從 Alice 移動到 Bob 或是任何錢包的地址與這此筆交易相關。 因此,當Alice 轉帳 Monero 給 Bob 時,Bob 所收到的交易輸出並不會與 Bob 的錢包地址出現關聯。

但是,如果 Alice 需要證明她真的有轉帳 Monero 給 Bob,她的錢包亦可做出交易有確實傳送的的驗證。 所以 Bob 可以確信沒有其他人能夠得知這筆 Monero 的交易發生在何時或甚至是否存在。 如果 Bob 是一個商人,那這個功能就非常有好處,因為沒有其他人可以從區塊鏈上得知他的客戶組成和數量。

好了,接下來要注意了,因為我們將要深入到技術層面的解釋。

每一個 Monero 地址是95字元的字串,是由 public view key 與 public spend key 組成。 當Alice 轉帳 Monero 給 Bob 時, Alice 的錢包會使用 Bob 的 public view key 與 public spend key 再加上一些隨機資料來產生獨特的一次性公鑰供 Bob 的後續交易使用。 所有人都能夠在區塊鏈上看見一次性公鑰,但只有 Alice 和 Bob 自己知道他們的錢包之間有交易的發生。

當 Bob 的錢包在區塊鏈上獲取到該次的交易輸出後,錢包就能透過其一次性公鑰推算出一次性私鑰,最後就可以用 private spend key 去花費掉這些交易輸出。 這整個交易的過程完全不需要讓 Bob 的錢包地址在區塊鏈上與任何交易顯示出關聯。

由此你可以發現,隱匿性地址可以防止交易輸出被連結至錢包地址。 而發送者的隱私將被環狀簽名(ring signatures)所保護。 環狀簽名可以幫助混淆這些交易輸出的來源。 在下一篇文章,我們將會進一步詳細討論環狀簽名的概念,並了解這個功能是如何讓 Monero 成為無法追蹤的匿蹤特性。

如果你有興趣了解是什麼讓 Monero 成為最重視隱私的加密貨幣 請參閱我們其他的文章或參閱 getmonero.org。  

本篇翻譯來源 https://github.com/alvinjoelsantos/promo-video/blob/master/stealth_addresses.md

開發者會議紀錄 DevMeeting 20170625

內容概要

  • twinget在ZeroMQ RPC Daemon/Server上的植入工作的快要完成,接著將會植入錢包。
  • vtnerd已開始著手處理:
    • 更快速的Mymonero後台importing
    • x86 ASM的錢包匯入功能已上線約莫一個月了
    • 更快、更強、更好的mempool後台處理程序
  • Jaquee正在為官方的GUI錢包上加上能夠使用 MyMonero/OpenMonero 的輕錢包功能
    • 這將同時支援Android跟iOS的客戶端
  • kenshi84正在處理錢包的subaddress,已幾乎準備好、僅剩些許的檢查和測試了
    • 僅是個錢包的更動,不需要硬分岔
  • 對於預設Ring的大小的討論依然在進行中
  • 從Kovri會議中得知,rehrar已將Monero網站重新設計完成,正等待上線中

    繼續閱讀...

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

總覽

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

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

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

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

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

繼續閱讀...

Monero即將於4/15進行1288616硬分叉

官方reddit說明: https://goo.gl/He6J2j

本次硬分叉日期預計會發生在4/15號左右(區塊高度1288616)  

分叉更新內容:
1.提高最小區塊限制由60kB至300kB,縮短交易確認時間。
2.降低手續費的最低計算費率,讓礦工更容易動態提高區塊限制。
3.預設手續費設為x4,使用者亦可為不趕時間的交易使用x1手續費。

總之就是調整動態區塊公式,縮短交易確認時間,降低手續費的更新。  

若你有使用官方的指令介面CLI錢包或圖像化GUI錢包 請記得更新至CLI v0.10.3.1或是 GUI Beta 2 否則硬分叉後會被踢出交易網路

若您是使用MyMonero線上錢包,則不需採取任何動作,伺服器端已經更新完畢 其餘交易所或是礦池得更新狀態請參閱上面連結或自行注意其公告說明

Monero 官方GUI錢包 beta2 釋出

這版的beta2和beta1在介面上差不多,比較多的是細節補足和改進
功能上多了一個solo挖礦,跟之前在cli裡的solo mining是一樣的概念
這功能之後會發展成智慧挖礦,偵測電腦的使用量自動調整算力
目的是讓大家可以在電腦閒置時貢獻一點資源去穩固monero網路的安全

此外,筆者做的繁體中文語言檔也在這版正式加入支援啦!!
http://imgur.com/TCUggkk

歡迎畫面看到台灣的感覺真蘇胡

當初PR中文語系上github時還有人來抱怨可以不要用台灣的國旗唯一代表中文嗎?
這樣把香港放哪去啦~~
很可能會被中國封殺云云… 幸好經過一番解釋,核心開發者還是接受筆者的merge了
不過避免意外筆者還是多做了一份簡體中文語系,不過只是直翻而已
對簡體用語不熟,等有中國開發者加入再讓他們去修

截圖們:

付款 http://imgur.com/60X4dDo
收款 http://imgur.com/nIE203K
歷史紀錄 http://imgur.com/ugZ2bLE
挖礦 http://imgur.com/bNfzGp7
簽署驗證 http://imgur.com/6U7yOdX
交易檢查 http://imgur.com/zy3DSBc
設定 http://imgur.com/sOzLcjU

區塊同步時間實測(皆使用遠端自架node):
從25字seed回復錢包: 30分鐘
新創錢包: 1分鐘
若是從錢包自帶的daemon更新區塊會需要幾個小時 這就依網路狀況而定了

官方消息來源 https://getmonero.org/2017/03/29/monero-gui-beta-2-released.html

開發者會議紀錄 DevMeeting 20170312

內容概要

  • C++11
    • 我們使用了多少的C++11在專案中?
    • 對我們來說好不好維護?
    • 這會增加太多複雜性嗎?
      • 可能會,但長久來說會有好處。
      • 且有機會藉此將Monero的程式碼模組化成各個方便管理的函式庫和工具?
      • 從幾個核心的函式庫開始著手似乎是個不錯的方向。
      • 最好需要先進行更深入的回顧那些程式碼需要被重寫。
      • 這將被結合到下一次要討論的議題…
  • 版本0.10.2.2 差不多準備好可以上標籤了。
    • 這些問題修復後,可以重啟自動編譯器,接著準備發佈。
      • 還有兩個 PR’s 需要被合併。
      • 有一個 race condition 的問題需要處理,應該再一天內就可以完成。
      • “Fluffy blocks” 問題。

        繼續閱讀...