門羅幣是互聯(lián)世界的現(xiàn)金,用門羅幣連接的交易蹋盆,快速费薄、私密且安全。在門羅幣的世界里栖雾,你可以成為自己的銀行楞抡,除了你自己,沒有人知道你賬戶的地址析藕、資產(chǎn)召廷,沒有人能追蹤你的交易歷史,沒有人知道你是誰账胧。
1 門羅幣的發(fā)展歷史
2013年竞慢,Nicolas van Saberhagen發(fā)表了“CryptoNote protocol”,Bytecoin是第一個基于這個協(xié)議的貨幣(Bytecoin誕生于CryptoNote協(xié)議發(fā)表之前)治泥。與中本聰一樣筹煮,Bytecoin的發(fā)明者也保持了匿名,通過Bitcointalk來推進Bytecoin的發(fā)展居夹。
盡管在2012年败潦,Bytecoin就已經(jīng)寫好了,但是直到2014年3月才隨著CryptoNote的第二版白皮書一起面世吮播。社區(qū)就產(chǎn)生了疑惑:為什么這樣一個厲害的貨幣在過去兩年一致沒有消息变屁?為什么白皮書是第二版本?經(jīng)過考察之后意狠,社區(qū)發(fā)現(xiàn)Bytecoin涉嫌偽造簽名粟关、時間戳、階段任務等,這讓Bytecoin陷入巨大的質疑漩渦闷板。社區(qū)成員thankful_for_today通過研究Bytecoin的釋放曲線(emission curve)澎灸,發(fā)現(xiàn)82%的Bytecoin已經(jīng)釋放出來了,這就說明幣的供給是嚴重中心化的遮晚。但Bytecoin完全否認了這項指控性昭,并于2017年發(fā)布了澄清說明。
最終县遣,貪婪的預挖行為損害了Bytecoin的信用與推廣糜颠。thankful_for_today重新組建了一個開發(fā)團隊,2014年落地了Monero加密貨幣萧求。
2 門羅的設計宗旨
1 去中心化網(wǎng)絡(network decentralization):門羅網(wǎng)絡是全球分布的其兴,一個節(jié)點的關閉、一個國家的所有節(jié)點關閉夸政,不會影響網(wǎng)絡的其他部分正常處理交易元旬。
2 金融安全性(financial security):傳統(tǒng)金融市場中,需要第三方機構做信任背書守问,我們的賬戶信息匀归、交易信息都會暴露在第三方機構的視野里。門羅網(wǎng)絡中耗帕,信任是通過不可篡改的算法來保證的穆端,互相不信任的節(jié)點可以根據(jù)算法驗證交易的有效性,甚至交易者本人就可以驗證他們自己的賬本兴垦。
3 金融隱私性(financial privacy):很多加密貨幣項目犧牲了隱私性來提高安全性徙赢,而門羅幣是把用戶的隱私性放在第一位的。交易過程中無需暴露交易雙方身份探越、交易金額狡赐,從而你的消費行為無法被任何人追蹤。
4 可交換性(fungibility):某個資產(chǎn)的不同種類是可以互相交換的钦幔。比如枕屉,鄰居向你借了1千克面粉去做面包,下一周還了你1千克面粉鲤氢。那么面粉是可以交換的搀擂。但是,如果鄰居向你借了自行車卷玉,下周還了你一個別的自行車哨颂,你是不會同意的,因為你還是想要自己的車子相种。那么車子就是不可交換的威恼。
門羅幣具有可交換性,這個性質是由門羅幣的不可追溯特性決定的。你可能會問箫措,可交換性有什么作用呢腹备?沒有可交換性,不影響交易啊斤蔓,從alice手中獲得的btc植酥,與從bob手中獲得的btc,都可以用來買咖啡弦牡。但是友驮,如果alice是販毒分子,賣咖啡的老板可能會拒絕你用從alice手中獲得的btc支付驾锰。如果使用門羅幣喊儡,咖啡店老板無法獲知你的門羅幣來源,也就不會拒絕售賣咖啡稻据。
3 門羅幣的兩個特性
門羅幣的交易是私密的、抗審查的(censorship-resistant)买喧,也就是說捻悯,門羅網(wǎng)絡上的交易,我們無法獲悉其發(fā)送者淤毛、接受者今缚、交易的門羅幣數(shù)量。表現(xiàn)為門羅幣的兩個特性:
- untraceability:交易的發(fā)送者等可能地來自于一個集合中的任何成員低淡。
- unlinkability:無法證明兩個交易的接受者是同一個人姓言。也就是說,即使幾筆交易是屬于同一個人的蔗蹋,但是它們看起來卻沒有任何關系何荚。
滿足以上兩種特性的加密貨幣,才能保護用戶隱私猪杭,做到真正的匿名性餐塘。第一個特性的核心在于環(huán)簽名(ring signature),用于保護交易發(fā)送者的匿名性皂吮,同時將加密機制整合進環(huán)簽名算法中戒傻,保證了交易數(shù)量的隱匿性。第二個特性的核心在于創(chuàng)新的公鑰機制(unlinkable payments)蜂筹,用于保護交易接收者的匿名性需纳,交易接收者不是直接用自己的地址接收,而是用由該地址產(chǎn)生的一個針對本次交易的一次性地址接收艺挪。
4 unlinkable payments
如果用戶想通過一個地址不翩,接收不同的交易,并且這不同的幾筆交易無法看出有內(nèi)在聯(lián)系(發(fā)送到同一個地址),我們提出了一個辦法慌盯。交易不再是發(fā)送到一個地址周霉,而是發(fā)送到與這個地址(?)和某個隨機數(shù)有關的公鑰亚皂。從而由于隨機數(shù)的不同俱箱,不同的交易會得到不同的公鑰,從而其他人無法判定兩筆交易是否發(fā)送給了相同的接受人灭必,即無法將兩筆交易聯(lián)系起來狞谱。這個算法中的使用到了diffie-hellman安全協(xié)議。
4.1 diffie-hellman
DH算法是一個在不安全網(wǎng)絡上交換密鑰的安全協(xié)議禁漓,讓雙方在完全沒有對方任何預先信息的條件下通過不安全信道建立起一個密鑰跟衅,這個密鑰一般作為“對稱加密”的密鑰而被雙方在后續(xù)數(shù)據(jù)傳輸中使用。
交易的雙方alice和bob播歼,分別生成自己的密鑰對 和
伶跷,公開自己的公鑰
。注意到:
從而alice和bob可以通過一個公開的密鑰S秘狞,來交換自己的密鑰信息叭莫。比如,alice向bob傳輸一段信息 烁试,可以先計算
雇初,然后將
發(fā)送給bob。bob接收到信息之后减响,計算
靖诗,然后得到
。
第三方只擁有 的人是無法獲得信息
的支示,哪怕他擁有無窮的算力刊橘,因為他沒有足夠的信息。
4.2 交易過程
alice是發(fā)送人悼院,bob是接受人伤为,bob的地址是一對公鑰 ,公開在網(wǎng)絡上据途。
- alice隨意生成一個整數(shù)
,和bob的地址绞愚,計算一次性公鑰(接收地址):
- 計算
(R是alice與bob通過diffie-hellman產(chǎn)生的shared secret的一部分),將之打包到交易當中颖医,發(fā)送到P位衩。
- bob遍歷網(wǎng)絡上的每一個交易,計算
熔萧,其中
是bob的半個私鑰糖驴,如果
僚祷,那么bob判定這個交易的接受人是他自己。這意味著:
- bob利用自己的完整私鑰
計算出一次性私鑰:
(即
)贮缕,之后bob消費接收到的幣時辙谜,就可以用這個私鑰
對交易進行簽名。
在驗證交易方面感昼,bob只需要提供 (白皮書中稱作tracing key)給其他節(jié)點進行驗證装哆。其他節(jié)點檢驗
,即可判定交易是有效的定嗓。因為第三方并不知道另一半私鑰
蜕琴,所以無法消費屬于bob的收入。
如果交易的輸出不是一個(single-input)而是多個(multi-output)呢宵溅?如何在兩個或多個交易輸出的接收者實際上是同一個地址的情況下凌简,保證一次性接收地址是不同的呢?也就是說如何在多輸出的情況下恃逻,保證unlinkability雏搂?答案是,可以為每一個輸出編號寇损,比如畔派,有p個輸出,那么分別對這p個輸出編號 润绵,在alice對shared secret(即
)哈希之前,塞入編號
胞谈,即:
尘盼。這就能保證每個輸出發(fā)送到不同的地址。
那么alice如何證明她發(fā)送了交易呢烦绳?她可以公開隨機數(shù) 或者通過零知識證明的方法證明她知道
(比如說用
對交易進行簽名卿捎,簽名方法ring signature) 。
每一筆交易径密,都利用隨機數(shù) 與公鑰
產(chǎn)生一個一次性的地址午阵,從而第三方無法判定兩個交易是否屬于同一個接收人。也就是保證了 unlinkability 特性享扔。
5 ring signature(RS)
RF簽名包含一個環(huán)和一個簽名底桂。簽名是由一個單一的私鑰和一系列與私鑰不相關的公鑰生成的;環(huán)(ring)是由與私鑰相關的公鑰惧眠、與私鑰不相關的一系列公鑰組成的籽懦。其他人可以驗證簽名是由某個成員創(chuàng)造的,但是不知道是哪個成員氛魁。
RF的一些特性對交易是否匿名起了關鍵作用:
- 混淆簽名者(Signer Ambiguity)暮顺。如上所述厅篓,驗證者可以驗證簽名者是這個環(huán)的一個成員,但無法確定是哪一個成員捶码。這個特性可以混淆交易的發(fā)送者羽氮。
- 可連接(linkability):門羅中用這個特性來避免雙花。交易的時候惫恼,每個輸入對應一個一次性私鑰档押,只有擁有這個一次性私鑰的人,才能花費這筆錢尤筐。所以證明者提供簽名汇荐,來證明自己的正當使用權。在證明者公布的簽名內(nèi)容中盆繁,有一項是密鑰圖像(key image)掀淘,它的計算與私鑰有關,因此油昂,如果驗證者發(fā)現(xiàn)兩個交易的密鑰圖像一致革娄,那么判定第二次交易為雙花交易。
- 攻擊者無法偽造簽名冕碟。
5.1 EdDSA
EdDSA 是Monero中使用的簽名算法拦惋。可以帶來兩個好處:1 注意到安寺,alice在證明自己是交易的發(fā)送者時厕妖,需要產(chǎn)生一個隨機數(shù)。如果隨機算法選擇不好挑庶,導致某兩次交易的隨機數(shù)相同了言秸,可能會造成一次性交易地址不再是一次性的,而是重合的迎捺【倩考慮到哈希函數(shù)配合私鑰、發(fā)送內(nèi)容基本不可能輸出相同的結果凳枝,所以用這種方法產(chǎn)生隨機整數(shù)抄沮。2 可以防止cache timing attacks.
5.2 簽名與驗證
令 是要簽名的消息本身,或者消息的哈希值岖瑰;公鑰集合(ring/group)
, 私鑰
叛买,它的公鑰
,
是秘密索引蹋订,兩個哈希函數(shù)
聪全, 將輸入映射到0到l上。
生成簽名:
環(huán)簽名包含 簽名 , 密鑰鏡像
辅辩,環(huán)
难礼。
驗證簽名:
我們可以舉一個具體的例子娃圆,來觀察環(huán)簽名的簽名與驗證方式。環(huán)(公鑰集合),并且私鑰
蛾茉。
生成簽名
生成密鑰圖像(key image):
生成隨機數(shù):
初始化簽名循環(huán)(signature loop):
開始迭代 :
結束循環(huán)迭代讼呢,計算
將代入3中的式子,可得:
生成最終環(huán)簽名:
驗證簽名
上面講的例子是單一輸入(single-input)的環(huán)簽名谦炬,然而悦屏,實際中很多交易是多個輸入(multi-input)的。簽名與驗證過程與上面類似键思,只是每一個輸入都有自己的私鑰础爬, 比如 個輸入就對應
把私鑰,那么就需要用這
把私鑰對交易進行簽名吼鳞,相應地看蚜,公鑰集合
就包含
個元素。最終生成的環(huán)簽名:
赔桌,即
個整數(shù)供炎,
個公鑰,
個密鑰圖像疾党。
6 交易量的匿名性
截至目前音诫,講述了Monero中如何保證交易雙方的匿名性,但是還沒有思考交易量如何匿名雪位,以及交易量被隱匿之后竭钝,驗證者如何驗證與交易量相關的交易的有效性,也就是雹洗,證明者應如何在交易量匿名的情況下蜓氨,證明交易的輸入=輸出?且輸入队伟、輸出>0?
引入Pedersen commitment。這是一種加密commitment方案幽勒,可以在不揭露某個值的情況下嗜侮,證明確知這個值。Pedersen Commitment一個重要特性就是同態(tài)可加性啥容,比如锈颗, 和
分別是兩個值
和
的commitment,那么
咪惠。將此性質應用到我們匿名交易有效性的證明击吱,即可在不揭露輸入、輸出數(shù)量的前提下遥昧,證明輸入=輸出覆醇。
什么樣的函數(shù)具有這樣的性質呢朵纷?橢圓曲線加密函數(shù)。它滿足:永脓,如果我們只是簡單地令
袍辞,會存在一定的風險。比如常摧,當
時容易知道
是什么搅吁,從而就能推測出真實的輸入輸出數(shù)量。因此落午,我們可以添加一個遮蔽因子(blinding factor)和另外一個生成器
谎懦,
涛菠,從而很難單單從
中知道
是什么上真。在Monero中,
姊舵。
因此盐类,我們可以將數(shù)量 的commitment設置為
寞奸,其中,
是一個遮蔽因子在跳。有許多組不同的
可以產(chǎn)生相同的
枪萄,從而攻擊者無法得到真正的交易數(shù)量
。
舉例 交易有 個輸入
和
個輸出
猫妙。我們想證明:
而commitment是同態(tài)可加的瓷翻,既要證明總輸入Commitment=總輸出Commitment,即:
為了避免交易發(fā)送者的身份被暴露割坠,Shen Noether 提出了總輸入Commitment-總輸出Commitment=非零值齐帚。即:
被稱作“commitment to zero”,因為數(shù)量=0彼哼。
門羅幣的應用場景
以比特幣為代表的眾多加密貨幣对妄,在某些應用場景中,作用受到限制敢朱。而門羅幣剪菱,就有了用武之地。
1 價格操縱(Price Manipulation)拴签。Sofia是小鎮(zhèn)唯一的汽修工孝常,她向顧客收取比特幣,顧客換取相應服務蚓哩。某次交易之后构灸,她通過在區(qū)塊鏈賬本上查閱自己的地址,按圖索驥發(fā)現(xiàn)顧客的錢包里有巨額比特幣岸梨,足以買下幾個蘭博基尼喜颁。那么等下次顧客過來維修的時候稠氮,Sofia可能就會收取更高昂的費用。但是洛巢,如果顧客使用Monero支付括袒,Sofia就無法追蹤到顧客的地址,無法獲知顧客的賬戶余額稿茉,從而無法操縱價格锹锰。
2 金融監(jiān)管(Financial Surveillance)。Oleg的父母向他的錢包里打入1個比特幣讓他購買學習資料漓库,并時刻監(jiān)控這1個比特幣的流向恃慧。結果Oleg將這筆錢剩余的部分全部打入了慈善機構公開在網(wǎng)絡上的捐獻地址。Oleg的父母發(fā)現(xiàn)了這一行為渺蒿,并責罵了他痢士。如果Oleg和父母使用的是Monero,就會避免這種情況茂装,用戶的任何交易行為不會被監(jiān)視怠蹂。
3 供應鏈隱私(Supply Chain Privacy)。Kyung-seok經(jīng)營著一家便利店少态,生意非常好城侧,平時都是用比特幣作為交易媒介的。他的競爭對手就可以追蹤到他所有的客戶彼妻,并與之聯(lián)系嫌佑,最后為這些客戶提供一個更低的價格,從而搶走Kyung-seok的生意侨歉。如果Kyung-seok一開始用的是Monero就會避免這種情況屋摇。
4 歧視(Discrimination)。Ramona租到了一個離工作地點非常近的房子幽邓,性價比高炮温。每個月向房東支付2個比特幣作為房租。幾次支付過后牵舵,房東發(fā)現(xiàn) Ramona的比特幣都是來自于一個合法的在線賭場柒啤,她非常討厭賭博,于是堅決拒絕 Ramona的再次租房請求棋枕。如果 Ramona使用的是Monero,房東不會發(fā)現(xiàn)她的收入來源妒峦,從而不會因為偏見而拒絕租房給她重斑。
5 交易安全性/隱私性(Transaction Privacy/security)。
6 污染幣(tainted coins)肯骇。