開發者會議紀錄 DevMeeting 20170903

  • 大多數的開發人員都在準備這個月將釋出的新版本
    • 由於全網算力的大幅提升,原先預估應分叉的日子會是2017年九月二十一號可能會提早到九月十六號
    • 正在討論是否要將硬分叉的區塊高度調整到某個會比較接近九月二十一號的日子
  • hyc 已經將 SafeSync模式植入了
    • monerod 將會預設使用”FAST”模式來同步區塊, 並在初次同步完成後自動改成”SAFE”模式繼續同步
    • 這項更新將會使同步更加快速並避免資料庫的毀損
    • 另外,也多了一個”salvage”功能來協助修復損毀的資料庫
  • knacc 已經在著手設計RuffCT的原型
    • 目前正在等Sarang與Surae來解決一些註釋問題(notation issues)
    • 在這之後他們就能夠為RuffCT決定一個合理的ringsize了
  • SerHack 已經準備好釋出PrestaShop 的插件了
    • 未來將會釋出WHMCS,Magento,跟Shopify的插件
  • vtnerd 正在改善MyMonero的使用經驗。現在資料庫的呈現有些問題
  • 正在等待Dun跟Bradstreet(以Apple的名義)認證iOS版的MyMonero
  • lessless 有做了一份改良版的API文件
  • 目前還有兩個Monero硬體錢包的提案正在開放討論
  • Rehrar 正在製作Monero Project Quarterly Review文件:
  • MoneroMooo 正在處理 Luigi’s N-1/N MultiSig
  • 下一次開發者會議將會在2017年的九月十七號舉行

繼續閱讀...

Monero的付款ID與整合性地址介紹

你在使用Monero付款時是否會感到困惑有時要附payment id有時卻不用呢? 那就快來好好看看這篇文章嘍!
首先介紹一下Monero的地址(address) 它會是一組格式以4為首的95字元字串,像這樣落落長:

45vzSchYNDcMtFngCX8KAjPUKHDtkqa2yJiHgnAAQMisV3YVs9MPFgxhuBUw4wmFM1Q7Jd36Gcvu91mkNo7L5kkbJmxm5f5

一個錢包只對應到一個地址,是在創建錢包時由種子碼(seed)產生而來,由於Monero的地址不會直接紀錄在區塊鏈上,所以同一組地址是可以放心公開並重複使用的,就像是若公開你的銀行帳號也不需擔心會被他人窺視餘額。

接著是付款ID(payment id),譬如像這樣短短一條:

bfa232d70e4579ba

這是一個使用者可選擇性使用的交易附帶資訊,但各位若在交易所應該都遇過強制要求附上付款id吧?這原因就來自於Monero的匿名性,假設今天有人直接轉了10XMR進交易所的錢包地址,交易所根本無從分辨是哪一個客戶轉的,總不能每次都要求客戶提供tx key證明吧?所以付款ID就像是在寄包裹到某地址時的署名,收款方才得以知道這筆費用是做什麼用的,譬如商家分辨這是來自哪一筆訂單的付款,或是多個好友同時要還你同金額的錢的時候,提供付款ID就可以讓你快速辨別交易,所以有個結論很重要:

沒有附payment id並不會讓錢轉到不見,但是可能會讓交易所無法辨認這筆錢是誰的

只要地址正確,錢就會進到該對應的錢包,但因為不知道是誰的,交易所就沒有辦法把這筆資金正確入帳到對應客戶的名下,若不幸發生了,此時付款者可能就必須提供交易私鑰(tx key)、金額和交易時間,向交易所客服證明這筆tx id真的是屬於他的付款,GUI錢包中的進階功能/檢查交易功能就可以驗證其是否為真。

最後就是整合型地址(integrated address),這很簡單地就是上述的地址與付款ID的合成版地址,譬如以上介紹的地址與付款id合成的整合型地址就會是長得像這樣:

4FdfTRX2yV8MtFngCX8KAjPUKHDtkqa2yJiHgnAAQMisV3YVs9MPFgxhuBUw4wmFM1Q7Jd36Gcvu91mkNo7L5kkbTPMoje2BpacN4swpLH

目前poloniex已改用這種整合型地址接受入金,所以使用者就不需額外輸入付款id,交易後該筆交易就會自動帶出付款id。 經過以上介紹,希望大家以後在付款時看到這些名詞不會再緊張嘍!

開發者會議紀錄 DevMeeting 20170820

  • RingCT 2.0團隊已與我們聯絡
    • 但目前這方案似乎不太可行,因RingCT2.0需要一個信任設置(trusted setup)的過程。
  • 在RingCT 2.0中,Tim Ruffing 提出了透過次級線性環狀簽名+CT的方案來改進 Monero
    • 這篇論文的作者為Time Ruffing、Sri Aravinda Krishnan Thyagarajan、Viktoria Ronge 跟 Dominique Schröder。
    • Knacc 將會把資訊統整後透過java來試著植入。
    • surae表示 RuffCT 極為有效的讓環狀簽名的容量大幅上升(100k以上)。 “有這個之後,幾乎每筆交易都可以輕鬆地直接跟半個區塊鍊的交易資訊環簽在一起”。
    • surae表示 “這感覺像是外星人突然降臨然後給我們比光速還快的移動能力”。
    • 後續在Reddit上Tim 解釋了100k以上的附註可能無法實行,但至少比現有的環簽容量提升許多。
    • 這方案有可能影響到MultiSig,因為現有的MultiSig程式碼都需要重寫,所以 MultiSig 應該會先用原樣發布,等到RuffCT上線後再重新植入。
  • 手機錢包的部分
    • “app store的帳號正在等待Apple要求的鄧白氏環球編碼(D-U-N-S)程序,已將文件掃描後寄到Google跟M$了”
  • 為了準備Monero即將到來的版本釋出跟分叉(還有其他東西),已在Github上開了新的分支。
  • 針對”專案要更頻繁釋出版本”的討論,這問題是會大幅增加開發者們的負擔,而且我們其實一年也已有數個版本在釋出了。
    • 上述提到的專案分支也許可以解決這個問題。

繼續閱讀...

Monero新版本代號Helium Hydra已開始在testnet公開測試

例行每半年一次的Monero硬分叉更新即將於九月登場 這次的分叉版本名為Helium Hydra 分叉區塊高度預定為1400000 為了要讓礦工與節點有足夠的時間升級到新版本,將在近期內釋出正式執行檔 但為了讓此次更新盡可能避免出現預期外的問題,我們鼓勵社群成員一起加入測試 若您有興趣參加測試請至消息來源Reddit原文依作業系統下載 點我看Reddit原文

繼續閱讀...

開發者會議紀錄 DevMeeting 20170806

  • 關於環簽交易使用的交易輸入預設值將有更動
    • 已經有普遍的共識將由規劃中的3改為5,不過改用8或10的方案也同時在討論中
    • 也許要找社群裡的數學家Surae跟(或)Sarang來提供點意見比較好
  • 測試網路(Testnet)的硬分叉將在2017的八月七號禮拜一進行
  • GUI最新資訊
    • Android和iOS系統的官方GUI已經在封閉/公開測試
    • 而iOS的部分則因為app store帳號問題而延宕了
    • Android的版本則因linux box空間不足而耽擱了。1.5個月前的版本在此: https://github.com/monero-project/monero-core/pull/780
    • 正在分析iOS的測試狀況,至於MyMonero,基本上是個”超想趕快把這玩意上架”的狀況。
  • monerod的記憶體流失(memory leak)的問題已經在著手處理

繼續閱讀...

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