2009 年,中本聰提出比特幣的概念,自那以后,比特幣已迅速在主流應(yīng)用和商業(yè)用途中傳播開來(lái),成為首個(gè)吸引大量用戶的數(shù)字貨幣,是數(shù)字貨幣史上的里程碑。不過從完成交易的角度來(lái)看比特幣接收的情形,我們可以發(fā)現(xiàn)一個(gè)重要問題,就是比特幣區(qū)塊確認(rèn)交易的時(shí)間過長(zhǎng),而傳統(tǒng)的支付公司已找出使買賣雙方實(shí)現(xiàn)比特幣交易零確認(rèn)的解決方案,但這一解決方案通常是要在協(xié)議之外采用可信賴的第三方完成交易。
比特幣提供匿名交易,實(shí)現(xiàn)發(fā)送者和接受者之間一對(duì)一交易的關(guān)系,并能永遠(yuǎn)記錄全網(wǎng)發(fā)生過的交易。比特幣只提供低層次的隱私保護(hù),這點(diǎn)在學(xué)術(shù)界眾所周知,盡管有此不足,許多人仍然相信區(qū)塊鏈記錄的轉(zhuǎn)賬歷史。
基于中本聰成果,MomoCash 是以保護(hù)隱私為要旨的加密數(shù)字貨幣。我們?cè)诒忍貛鸥拍畹幕A(chǔ)上進(jìn)行了一系列的改進(jìn),由此誕生出一個(gè)去中心化的和具備良好匿名性的加密數(shù)字貨幣,它支持防篡改的即時(shí)交易,又有能為 MomoCash 網(wǎng)絡(luò)提供服務(wù)獎(jiǎng)勵(lì)制的點(diǎn)對(duì)點(diǎn)次級(jí)網(wǎng)絡(luò)。
主節(jié)點(diǎn)網(wǎng)絡(luò)
全節(jié)點(diǎn)是運(yùn)行在 p2p 網(wǎng)絡(luò)上的服務(wù)器,讓小節(jié)點(diǎn)使用它們來(lái)接受來(lái)自全網(wǎng)的動(dòng)態(tài)變化。這些全節(jié)點(diǎn)需要顯著的流量和要消耗大量成本的其它資源,由此在一段時(shí)間內(nèi)會(huì)觀察到比特幣網(wǎng)絡(luò)上的這些節(jié)點(diǎn)數(shù)量呈現(xiàn)穩(wěn)步下降的趨勢(shì),使區(qū)塊廣播的時(shí)間需要額外增加 40 秒。為解決這問題,提出了許多方案,例如引入微軟研究的新獎(jiǎng)勵(lì)計(jì)劃和 Bitnodes 激勵(lì)計(jì)劃。這些節(jié)點(diǎn)對(duì)網(wǎng)絡(luò)的健康而言十分重要,它們能讓客戶端同步和通過全網(wǎng)快速?gòu)V播信息。我們提議增加次級(jí)網(wǎng)絡(luò),名為MomoCash 主節(jié)點(diǎn)網(wǎng)絡(luò)。這些節(jié)點(diǎn)將具有高可用性,而且在為網(wǎng)絡(luò)提供符合一定要求的服務(wù)后能夠得到主節(jié)點(diǎn)服務(wù)獎(jiǎng)勵(lì)。
1、主節(jié)點(diǎn)獎(jiǎng)勵(lì)計(jì)劃——成本和獎(jiǎng)勵(lì)
比特幣網(wǎng)絡(luò)全節(jié)點(diǎn)銳減的主要原因是缺乏對(duì)運(yùn)行節(jié)點(diǎn)的獎(jiǎng)勵(lì)。隨著時(shí)間的推移,全網(wǎng)接入的用戶會(huì)更多,對(duì)帶寬的需求會(huì)更高,對(duì)節(jié)點(diǎn)運(yùn)行者的資金需求也更多,結(jié)果使運(yùn)行全節(jié)點(diǎn)的成本提高。考慮到成本的上升,節(jié)點(diǎn)運(yùn)行者必須要降低他們的運(yùn)行成本或者運(yùn)行輕客戶端,但這樣完全不利于網(wǎng)絡(luò)健康。
正如比特幣網(wǎng)絡(luò)一樣,主節(jié)點(diǎn)是全節(jié)點(diǎn),但不同的是主節(jié)點(diǎn)必須對(duì)全網(wǎng)提供一定的服務(wù),并需要一定量的押金才能加入。押金不會(huì)丟失,在主節(jié)點(diǎn)運(yùn)行時(shí)也是安全的。這可讓投資者為全網(wǎng)提供服務(wù)的同時(shí),賺取一定的投資收益,減少了價(jià)格的波動(dòng)性。
運(yùn)行一個(gè)主節(jié)點(diǎn),需要存儲(chǔ) 1000MOC。當(dāng)主節(jié)點(diǎn)生效時(shí),它可為全網(wǎng)的客戶端提供服務(wù),并以利息的形式獲取獎(jiǎng)勵(lì)。這就使得用戶為這項(xiàng)服務(wù)投資,但同時(shí)得到一定的回報(bào)。主節(jié)點(diǎn)獲取的收益是來(lái)自同一個(gè)礦池,大約有 45%的區(qū)塊獎(jiǎng)勵(lì)納入到這個(gè)計(jì)劃中。
考慮到主節(jié)點(diǎn)獎(jiǎng)勵(lì)計(jì)劃的獎(jiǎng)勵(lì)率是固定的百分比,還有主節(jié)點(diǎn)網(wǎng)絡(luò)節(jié)點(diǎn)存在波動(dòng)的事實(shí),預(yù)計(jì)主節(jié)點(diǎn)獎(jiǎng)勵(lì)會(huì)根據(jù)當(dāng)前生效的主節(jié)點(diǎn)總數(shù)作出變化。通過以下的計(jì)算公式可計(jì)算出運(yùn)行主節(jié)點(diǎn)一整天的收益:
n: 運(yùn)行者控制的主節(jié)點(diǎn)數(shù)
t: 主節(jié)點(diǎn)的總數(shù)
r: 當(dāng)前的區(qū)塊獎(jiǎng)勵(lì)(當(dāng)前平均獎(jiǎng)勵(lì)是 5MOC)
b: 平均每天的區(qū)塊數(shù),當(dāng)前 MOC 網(wǎng)絡(luò)每天區(qū)塊通常是 576 個(gè)
a: 主節(jié)點(diǎn)的平均獎(jiǎng)勵(lì)(平均每個(gè)區(qū)塊獎(jiǎng)勵(lì)的 45%)
運(yùn)行主節(jié)點(diǎn)的收益公式:
(式子中的變量與上述相同)
運(yùn)行主節(jié)點(diǎn)需要成本,這在網(wǎng)絡(luò)上創(chuàng)建了生效節(jié)點(diǎn)的硬限制和軟限制。目前有10 萬(wàn) MOC 流通,只有 30 個(gè)節(jié)點(diǎn)可能可以在網(wǎng)絡(luò)上運(yùn)行。軟限制由配置節(jié)點(diǎn)所花的成本和平臺(tái)的滯留量所致,因?yàn)?MOC 是流通的貨幣,而不僅僅是為投資所用。
2. 確定順序
使用特定的確定算法創(chuàng)建主節(jié)點(diǎn)的偽隨機(jī)排序。使用為每個(gè)區(qū)塊設(shè)計(jì)的工作量證明機(jī)制的哈希算法,挖礦網(wǎng)絡(luò)可以提供支持這個(gè)排序的安全性。
選擇主節(jié)點(diǎn)的代碼:
示例代碼還可以進(jìn)一步擴(kuò)展為主節(jié)點(diǎn)排序,“第二”,“第三”和“第四”個(gè)主節(jié)點(diǎn)的計(jì)算依此類推。
3、 非信任制的 Quorum
當(dāng)前 MOC 網(wǎng)絡(luò)大約具有 30 個(gè)生效的主節(jié)點(diǎn),而需要 1000 MOC 擔(dān)保才可成為一個(gè)生效的主節(jié)點(diǎn)。我們創(chuàng)建了一個(gè)系統(tǒng),其中沒有一人能控制整個(gè)主節(jié)點(diǎn)網(wǎng)絡(luò)。例如,如果有人想控制 50%的主節(jié)點(diǎn)網(wǎng)絡(luò),他們將不得不從公開市場(chǎng)上購(gòu)買 3萬(wàn)個(gè) MOC。這將極大提高幣價(jià),所以獲得如此多 MOC 是不可能的。
在擁有主節(jié)點(diǎn)網(wǎng)絡(luò)和擔(dān)保條件的前提下,我們以非信任制的方式使用該次級(jí)網(wǎng)絡(luò)進(jìn)行高度敏感的任務(wù),其中沒人能控制網(wǎng)絡(luò)的演變結(jié)果。從總池中選擇 N 個(gè)偽隨機(jī)主節(jié)點(diǎn)來(lái)執(zhí)行相同的任務(wù),這些節(jié)點(diǎn)可以充當(dāng)裁判,過程無(wú)需整個(gè)網(wǎng)絡(luò)的參與。
例如,一個(gè)非信任制的 Quorum 發(fā)現(xiàn) InstantSend,InstantSend 會(huì)使用 Quorum確認(rèn)交易和鎖定輸入。
另一個(gè)例子是,非信任制的 Quorum 可以利用主節(jié)點(diǎn)網(wǎng)絡(luò)作為金融市場(chǎng)的去中心化預(yù)言者,這讓實(shí)現(xiàn)去中心化的合同成為可能。例如蘋果公司的股價(jià)在 2016 年12 月 31 日超過 300 美元的話,就提交公約 A,否則提交公約 B。
4、角色和服務(wù)量證明機(jī)制
主節(jié)點(diǎn)可以向網(wǎng)絡(luò)提供任意的額外服務(wù)。正如在概念中指出,我們的成功應(yīng)用是PrivateSend(匿名發(fā)送)和 InstantSend(即時(shí)支付)。使用我們稱之為“服務(wù)量證明”的機(jī)制,可以要求這些節(jié)點(diǎn)處于在線狀態(tài),即使在正確的區(qū)塊高度上也要作出響應(yīng)。
惡意者也可以運(yùn)行主節(jié)點(diǎn),但不會(huì)對(duì)網(wǎng)絡(luò)提供任何實(shí)質(zhì)性的服務(wù)。為了減少這些人使用系統(tǒng)做出對(duì)自己節(jié)點(diǎn)有利事情的概率,必須 ping 剩余網(wǎng)絡(luò)以確保它們保持活躍。這項(xiàng)工作通過主節(jié)點(diǎn)網(wǎng)絡(luò)在每個(gè)區(qū)塊選擇 2 個(gè) Quorum 來(lái)完成。Quorum A檢查 Quorum B 每個(gè)區(qū)塊的服務(wù)。Quorum A 是與當(dāng)前區(qū)塊哈希最接近的節(jié)點(diǎn),而Quorum B 是遠(yuǎn)離所說區(qū)塊哈希最遠(yuǎn)的節(jié)點(diǎn)。
主節(jié)點(diǎn) A(1)檢查主節(jié)點(diǎn) B(2300) 主節(jié)點(diǎn) A(2)檢查主節(jié)點(diǎn) B(2299) 主節(jié)點(diǎn) A(3)檢查主節(jié)點(diǎn) B(2298)
檢查網(wǎng)絡(luò)就是要驗(yàn)證節(jié)點(diǎn)是生效的,這由主節(jié)點(diǎn)自身完成。全網(wǎng)區(qū)塊的 1%會(huì)受到檢查。這使整個(gè)網(wǎng)絡(luò)在一天中會(huì)被檢查大約 6 次。為了保持這個(gè)系統(tǒng)是非信任制的,我們使用 Quorum 系統(tǒng)中隨機(jī)選擇節(jié)點(diǎn),但我們最少也需要六次檢查來(lái)排查一個(gè)惡意節(jié)點(diǎn)。
為達(dá)到欺騙系統(tǒng)的目的,攻擊者需要在一輪中被選中六次。否則,欺騙的目的就被系統(tǒng)發(fā)現(xiàn),使其不會(huì)得逞,其它節(jié)點(diǎn)也是這樣。
表 1 在服務(wù)性證明機(jī)制失衡的情況下,一個(gè)獨(dú)立的主節(jié)點(diǎn)欺騙系統(tǒng)的概率n:攻擊者控制的主節(jié)點(diǎn)數(shù) t:全網(wǎng)主節(jié)點(diǎn)總數(shù) r:區(qū)塊鏈深度 基于 Quorum 系統(tǒng),主節(jié)點(diǎn)的選擇是偽隨機(jī)的。
5. 主節(jié)點(diǎn)協(xié)議
主節(jié)點(diǎn)使用一系列擴(kuò)展協(xié)議在全網(wǎng)進(jìn)行廣播,包括主節(jié)點(diǎn)消息 announce 機(jī)制和主節(jié)點(diǎn)消息 ping 機(jī)制。這兩類機(jī)制用來(lái)確認(rèn)全網(wǎng)節(jié)點(diǎn)處于生效狀態(tài),除了它們,執(zhí)行服務(wù)量證明機(jī)制需求的還有 PrivateSend 和 InstantSend。
在錢包中發(fā)送 1000MOC 到特定地址,就激活代碼自然生成能在全網(wǎng)進(jìn)行廣播的主節(jié)點(diǎn), 隨之次級(jí)私鑰生成,它是用來(lái)對(duì)其它所有信息進(jìn)行簽名,另外在運(yùn)行單機(jī)模式時(shí)還可用來(lái)完全鎖定錢包。
在兩***立的機(jī)器上使用次級(jí)私鑰讓冷模式成為可能。主要的“熱”客戶端對(duì)1000 MOC 的輸入進(jìn)行簽名,此過程包含使用二級(jí)私鑰對(duì)信息進(jìn)行簽名。 之后,“冷”客戶端能發(fā)現(xiàn)包含次級(jí)私鑰的信息并將主節(jié)點(diǎn)激活。這讓“熱”客戶端失效(客戶端關(guān)閉),這樣攻擊者訪問激活后的主節(jié)點(diǎn)也不可能獲得竊取其中的1000MOC。
主節(jié)點(diǎn)開始運(yùn)行時(shí),會(huì)向全網(wǎng)發(fā)送“主節(jié)點(diǎn)廣播”信息,包含有:
信息:(1000MOC 輸入,可訪問的 IP 地址,簽名,簽名時(shí)間,含有 1000MOC 的公鑰,次級(jí)公鑰,用于捐贈(zèng)的公鑰,捐贈(zèng)的百分比)此后每隔 15 分鐘,一條 ping 信息會(huì)對(duì)外發(fā)送,證明節(jié)點(diǎn)生效中。
信息:(1000MOC 的輸入,簽名(使用次級(jí)私鑰),簽名時(shí)間)隨著時(shí)間的推移,網(wǎng)絡(luò)會(huì)移除失效的節(jié)點(diǎn),讓該節(jié)點(diǎn)不再被客戶端利用或再用于支付。節(jié)點(diǎn)也可以不停地 ping 網(wǎng)絡(luò),但如果它們的端口不打開,最終會(huì)被標(biāo)記為失效狀態(tài),不再用于支付。
6. 主節(jié)點(diǎn)列表的廣播
進(jìn)入 MOC 網(wǎng)絡(luò)的新客戶端必須發(fā)現(xiàn)當(dāng)前全網(wǎng)活躍的主節(jié)點(diǎn),這樣才可以使用它們的服務(wù)。一旦它們加入網(wǎng)狀網(wǎng)絡(luò),它們的節(jié)點(diǎn)就會(huì)收到請(qǐng)求主節(jié)點(diǎn)列表的指令。
設(shè)置緩存的目的是讓客戶端記錄主節(jié)點(diǎn)及其當(dāng)前狀態(tài),因此當(dāng)客戶端重新啟動(dòng)時(shí),他們只需簡(jiǎn)單加載該文件,不需重新請(qǐng)求主節(jié)點(diǎn)的完整列表。
7. 使用挖礦進(jìn)行支付和強(qiáng)制規(guī)定
為了確保每個(gè)主節(jié)點(diǎn)都獲得應(yīng)有的區(qū)塊獎(jiǎng)勵(lì),網(wǎng)絡(luò)必須強(qiáng)制每個(gè)區(qū)塊支付獎(jiǎng)勵(lì)給正確的主節(jié)點(diǎn)。如果礦工不愿意的話,他們的區(qū)塊必須被網(wǎng)絡(luò)拒絕,否則作弊就會(huì)產(chǎn)生。
我們提出一個(gè)策略,就是一個(gè)主節(jié)點(diǎn)代表一個(gè) Quorum,選擇其中優(yōu)勝的主節(jié)點(diǎn)然后廣播它們的信息。信息得到 N 次廣播后,會(huì)選擇同一目標(biāo)接收者,這樣達(dá)成共識(shí)后選中的區(qū)塊要對(duì)該主節(jié)點(diǎn)支付獎(jiǎng)勵(lì)。
在網(wǎng)上挖礦時(shí),礦池(礦池的作用是將單獨(dú)的礦工整合起來(lái))使用 RPC API 接口獲取生成有關(guān)區(qū)塊的信息。為了向主節(jié)點(diǎn)支付獎(jiǎng)勵(lì),必須添加次級(jí)接收者到GetBlockTemplate 來(lái)擴(kuò)展接口。礦池之后廣播自己的成功開采的區(qū)塊,使自己和主節(jié)點(diǎn)之間保持同步。
匿名支付
我們相信,為了能在客戶端提高強(qiáng)度保護(hù)用戶隱私,實(shí)現(xiàn)標(biāo)準(zhǔn)的非信任制是很重要的。例如 electrum,Android 和 iPhone 這些客戶端,也會(huì)直接嵌入相同的匿名層和很好利用協(xié)議擴(kuò)展性。這讓用戶使用堅(jiān)實(shí)穩(wěn)固的系統(tǒng)匿名發(fā)送資金時(shí)有著相同的體驗(yàn)。
PrivateSend 是 CoinJoin(提供匿名技術(shù)的軟件)的改進(jìn)和擴(kuò)展版本。除了擁有 CoinJoin 的核心理念,我們還進(jìn)行一系列的改進(jìn),例如去中心化、使用鏈接實(shí)現(xiàn)強(qiáng)匿名、相同面值和被動(dòng)先進(jìn)的混幣技術(shù)。
在提高隱私和加密數(shù)字貨幣的可互換性時(shí),最大的挑戰(zhàn)是,無(wú)法做到加密整個(gè)區(qū)塊鏈。在以比特幣為基礎(chǔ)的加密數(shù)字貨幣體系內(nèi),能看到哪些輸出是沒發(fā)送,哪些是已發(fā)送,通常將其稱為 UTXO,全稱是未使用交易輸出。這讓每個(gè)用戶在公共帳本中都可充當(dāng)誠(chéng)實(shí)交易保證者的角色。比特幣的協(xié)議是在不依賴第三方參與的前提下設(shè)計(jì)的,沒有第三方的參與,仍能通過公共區(qū)塊鏈隨時(shí)讀取用戶信息實(shí)現(xiàn)審計(jì)是至關(guān)重要的。我們的目標(biāo)是在不失去這些要素的前提下提高保密性和可互換性,我們堅(jiān)信這是創(chuàng)建成功數(shù)字貨幣的關(guān)鍵。
使用數(shù)字貨幣范圍內(nèi)去中心化的混幣服務(wù),我們能讓貨幣本身具備完全可互換的能力。可互換性是金錢的屬性,決定貨幣的各單位要保持平等。當(dāng)你以通貨的形式接收資金時(shí),資金不應(yīng)該保留之前用戶的使用記錄,或者用戶能很輕易地與之前的使用歷史撇清開來(lái),從而做到所有貨幣是平等的。與此同時(shí),任何用戶在不影響他人隱私的情況下,保證公共賬本的每筆交易都是誠(chéng)實(shí)的。
為了提高可互換性和保持公共區(qū)塊鏈的誠(chéng)實(shí)性,我們提議使用先進(jìn)的非信任制去中心化混幣技術(shù),為了保持通貨的可互換性,這項(xiàng)服務(wù)直接整合到這個(gè)貨幣體系中,對(duì)于每個(gè)用戶而言都可容易和安全使用。
1. Coinjoin 通過賬戶可追蹤資金流向
一個(gè)簡(jiǎn)單的策略是在現(xiàn)有的比特幣基礎(chǔ)上整合 Coinjoin,就是單純將交易合并在一起。通過追蹤聯(lián)合交易的用戶資金流向就會(huì)將用戶的身份暴露出來(lái)。
圖 2:例如將 2 個(gè)用戶的交易整合為 Coinjoin 交易
在這項(xiàng)交易里,0.05 個(gè)比特幣使用混幣技術(shù)對(duì)外發(fā)送,為了追蹤這筆資金的來(lái)源,僅需要把右邊的數(shù)額加起來(lái)再和左邊的數(shù)額匹配就可得知。
重新組合交易
0.05+0.0499+0.0001(fee) = 0.10BTC.
0.0499+0.05940182+0.0001(fee) = 0.10940182BTC.
隨著更多用戶加入到混幣的過程中,獲得結(jié)果的難度會(huì)以指數(shù)級(jí)增長(zhǎng)。然而,在以后某個(gè)時(shí)間點(diǎn)結(jié)果還是可以被追蹤出來(lái),匿名性失效。
2. 直接鏈接和中繼鏈接
在 Coinjoin 其它實(shí)現(xiàn)的應(yīng)用里,用戶先把資金匿名化,最后把交易發(fā)送到知道發(fā)送者身份的平臺(tái)或個(gè)體,這點(diǎn)是有可能實(shí)現(xiàn)的。但這打破了匿名性,能讓其它人往前追蹤用戶的交易,我們稱這類型的攻擊為“中繼鏈接”。
圖 3: 中繼轉(zhuǎn)換鏈接
在這個(gè)例子中,Alice 匿名發(fā)送 1.2BTC,分別以 1BTC 和 0.2BTC 對(duì)外輸出,然后從 1BTC 的輸出中再對(duì)外輸出 0.7BTC,剩余 0.3BTC,這 0.3BTC 輸出發(fā)送到可識(shí)別對(duì)象去,但實(shí)質(zhì)上 Alice 已經(jīng)將 0.7BTC 成功匿名發(fā)送出去。
為了確定匿名交易的發(fā)送者身份,要從“交換交易”環(huán)節(jié)開始,通過區(qū)塊鏈往前追溯,直至找到“Alice 匿名發(fā)送 0.7 個(gè) BTC”。一旦找到的話,你會(huì)發(fā)現(xiàn)那是你的用戶最近匿名購(gòu)買了東西,從而看透這個(gè)匿名交易。我們稱這種類型的攻擊為“中介轉(zhuǎn)換鏈接”。
圖 4:中介轉(zhuǎn)換鏈接
在第二個(gè)例子中,Alice 在 coinbase 處花費(fèi)了 1.2BTC,然后將這數(shù)額匿名化再以 1BTC 輸出。接著,她又花費(fèi) 1BTC,剩余 0.3BTC 再結(jié)合之前的 0.2BTC,組成為 0.5BTC 對(duì)外輸出。
結(jié)合匿名交易和 CoinJoin 交易,將前后的整個(gè)交易歷史整理一遍,從而可徹底看穿這個(gè)匿名功能。
3. 增強(qiáng)的隱私和 DOS 防護(hù)
多方的交易可以合并為一個(gè)交易,PrivateSend 很好地利用了這點(diǎn),它將多方的資金合并在一起對(duì)外發(fā)送,這樣一旦整合后就無(wú)法再次拆分。考慮到PrivateSend 交易是專門為用戶支付設(shè)置的,這個(gè)系統(tǒng)是高度安全防盜竊,用戶的貨幣是十分安全的。目前,使用 PrivateSend 的混幣技術(shù)至少需要 3 方參與。
三個(gè)用戶的資金合并到一個(gè)共同交易,用戶會(huì)以新的打亂過的形式對(duì)外輸出資金。
為了從整體上增強(qiáng)系統(tǒng)的隱私性,我們提以使用 0.1MOC,1MOC,10MOC 和 100MOC的相同面值。在每輪混幣過程中,所有用戶應(yīng)該以相同面值的形式輸入和輸出資金。除了使用相同面值外,交易手續(xù)費(fèi)會(huì)被移除,而且所有交易會(huì)分解成分散的、獨(dú)立的、前后沒有關(guān)聯(lián)的小交易。
接下是應(yīng)對(duì)可能的 DOS 攻擊,我們提議所有用戶在加入時(shí)把交易以押金的形式提交到礦池去,交易最后還是輸出到用戶,同時(shí)又可向礦工支付一筆高的報(bào)酬。也就是說,用戶向混幣池提高請(qǐng)求時(shí),交易一開始就要提供押金。如果某個(gè)時(shí)候用戶不合作了,例如拒絕簽名,押金交易會(huì)自動(dòng)在全網(wǎng)廣播,若要在匿名網(wǎng)絡(luò)上進(jìn)行持續(xù)攻擊,所付出的代價(jià)是極其高昂的。
4. 被動(dòng)的資金和區(qū)塊鏈匿名
PrivateSend 每輪的混幣限制為 1000MOC,并多輪混幣才能匿名混合相當(dāng)數(shù)量的資金。為了讓用戶體驗(yàn)方便和攻擊變得困難,PrivateSend 以被動(dòng)的模式運(yùn)行。同時(shí)設(shè)定時(shí)間間隔,用戶的客戶端要通過主節(jié)點(diǎn)連接其它客戶端。一旦進(jìn)入主節(jié)點(diǎn),用戶要求需要匿名的面值數(shù)額會(huì)在全網(wǎng)依次排隊(duì)廣播,但是沒有信息會(huì)將用戶的身份暴露出來(lái)。
每輪的 PrivateSend 過程可視為增強(qiáng)用戶資金匿名性的獨(dú)立事件,然而每輪只限制 3 個(gè)參與者,因此觀察者有三分之一的機(jī)會(huì)追蹤交易,為了提高匿名的質(zhì)量,會(huì)采用鏈接的方法,將資金通過多個(gè)主節(jié)點(diǎn)依次發(fā)送出去。
5. 安全性考慮
由于交易合并在一起,主節(jié)點(diǎn)在用戶資金流過時(shí)有可能進(jìn)行“窺探”。由于每個(gè)主節(jié)點(diǎn)都被要求持有 1000 MOC 和用戶選用隨機(jī)主節(jié)點(diǎn)來(lái)部署他們的資金,所以“窺探”的影響性不大。通過區(qū)塊鏈追蹤交易的概率計(jì)算如下所示。
n: 攻擊者控制總的節(jié)點(diǎn)數(shù) t: 全網(wǎng)主節(jié)點(diǎn)總數(shù) r: 區(qū)塊鏈深度 主節(jié)點(diǎn)的選
擇是隨機(jī)的
考慮到 MOC 的有限供應(yīng)(此時(shí)此刻撰寫白皮書時(shí)有 530 萬(wàn)個(gè) MOC 在流通)和市場(chǎng)上低的流動(dòng)性,在一次攻擊中控制如此之多的主節(jié)點(diǎn)是不可能的。
通過遮掩主節(jié)點(diǎn)上發(fā)生的交易來(lái)擴(kuò)展系統(tǒng),也會(huì)大大提高系統(tǒng)的安全性。
6. 使用中繼系統(tǒng)遮掩主節(jié)點(diǎn)
在4 一節(jié),我們描述了使用 PrivateSend 多輪混幣技術(shù)追蹤單一交易的概率。這可以進(jìn)一步通過遮掩主節(jié)點(diǎn)加以強(qiáng)化,使他們不能看到用戶輸入/輸出方向。要做到這一點(diǎn),我們提出一個(gè)簡(jiǎn)單的可讓用戶保護(hù)自己的身份的中繼系統(tǒng)。
我們不讓用戶向礦池直接提交輸入和輸出的交易,而是讓他們從全網(wǎng)隨機(jī)選擇主節(jié)點(diǎn)然后要求它將輸入/輸出/的簽名中繼傳輸?shù)侥繕?biāo)主節(jié)點(diǎn)。這意味著,主節(jié)點(diǎn)將接收 N 次的輸入/輸出和 N 組簽名。每輪混幣只為其中一個(gè)用戶服務(wù),但主節(jié)點(diǎn)無(wú)法知道究竟是哪個(gè)用戶。
使用 InstantSend 進(jìn)行即時(shí)交易
使用主節(jié)點(diǎn)的 Quorum,用戶能夠發(fā)送和接收即時(shí)不可逆轉(zhuǎn)交易。一旦 Quorum 形成,該交易的輸入被鎖定到對(duì)應(yīng)的特定交易去,而目前全網(wǎng)交易鎖定的時(shí)間是大約 4 秒。如果在主節(jié)點(diǎn)網(wǎng)絡(luò)達(dá)成鎖定的共識(shí),所有與之沖突的交易和區(qū)塊將被永遠(yuǎn)拒絕,除非它們能匹配當(dāng)時(shí)鎖定的交易對(duì)應(yīng) ID。
這將允許商家在現(xiàn)實(shí)商業(yè)中使用移動(dòng)設(shè)備來(lái)替換傳統(tǒng) POS 機(jī)器,用戶可像使用傳統(tǒng)紙幣一樣快速進(jìn)行面對(duì)面的非商業(yè)交易。這過程是沒有中心權(quán)威的干預(yù)。此功能的廣泛綜述可以在 InstantSend 白皮書中找到。
其他改進(jìn)
1.Neoscrypt 算法
采用的挖礦算法是 Neoscrypt 算法。它是一款新的專為普通計(jì)算機(jī)硬件設(shè)計(jì)的內(nèi)存密集型加密算法。 Neoscrypt 算法的主要作用是防礦機(jī), 它是一種主要基于 Salsa20 和 ChaCha20 算法,采用串聯(lián)或并聯(lián)運(yùn)行模式。Neoscrypt 算法可以采用 CPU\GPU 挖礦,不僅支持 AMD 顯卡,而且對(duì) Nvidia 顯卡也很友好。當(dāng)ASIC 突破此算法后,MomoCash 將采用改進(jìn)升級(jí) POW 算法。
跨鏈哈希運(yùn)算的另一個(gè)好處是高端的 CPU 有著跟同級(jí) GPU 接近的平均回報(bào)。GPU消耗的功率已有 30-50%的下降,比大多數(shù)加密數(shù)字貨幣使用的 Scrypt 算法的功率少得多。
在密碼學(xué)中,密鑰導(dǎo)出函數(shù)(KDF)使用偽隨機(jī)函數(shù)從秘密值(eg.主密鑰)導(dǎo)出一個(gè)或多個(gè)密鑰。KDF 可用于將密鑰擴(kuò)展到更長(zhǎng)的密鑰或獲得所需格式的密鑰(eg.將作為 Diffie-Hellman 密鑰交換的結(jié)果的組元素轉(zhuǎn)換為用于 AES 的對(duì)稱密鑰)。密鑰加密哈希函數(shù)是用于密鑰推導(dǎo)的偽隨機(jī)函數(shù)的流行示例。密鑰導(dǎo)出函數(shù)通常與非秘密參數(shù)一起使用,以從公共秘密值導(dǎo)出一個(gè)或多個(gè)密鑰。這樣的使用可以防止獲得派生密鑰的攻擊者學(xué)習(xí)關(guān)于輸入秘密值或任何其他導(dǎo)出密鑰的有用信息;也可以使用 KDF 來(lái)確保派生密鑰具有其他期望的屬性,諸如在某些特定加密系統(tǒng)中避免“弱密鑰”。KDFs 最常見的用途是將密碼散列的方法來(lái)密碼驗(yàn)證,我們將非秘密參數(shù)稱之為 salt。KDFs 也通常用作多方密鑰協(xié)商協(xié)議的組成部分,這些關(guān)鍵推導(dǎo)函數(shù)的示例包括 KDF1 和 ANSI X9.42 中的類似功能。特別的,基于 HMAC 的提取和擴(kuò)展密鑰導(dǎo)出功能(HKDF) 是一種簡(jiǎn)單的基于 HMAC的 KDF,可用作各種協(xié)議和應(yīng)用暴力攻擊的難度隨著迭代次數(shù)的增加而增加。迭代計(jì)數(shù)的實(shí)際限制是用戶不愿容忍登錄計(jì)算機(jī)或看到解密消息的可察覺延遲。使用 salt 可以防止攻擊者預(yù)先計(jì)算派生密鑰的字典。類似的,當(dāng)下還有另一種方法叫做密鑰強(qiáng)化(key strengthening),使用隨機(jī)鹽擴(kuò)展鍵,但是不像密鑰延伸一樣可以安全地刪除 salt。這將強(qiáng)制攻擊者和合法用戶對(duì) salt 值執(zhí)行強(qiáng)力搜索。
2. 挖礦供應(yīng)
MOC 采用另一種可降低挖礦引起的通脹的方法,就是每年的供應(yīng)進(jìn)行 7%的減產(chǎn),這不同于其它數(shù)字貨幣的減半。另外,每個(gè)區(qū)塊的供應(yīng)量與全網(wǎng)的礦工數(shù)直接相關(guān),更多礦工的參與意味著更少的挖礦獎(jiǎng)勵(lì)。
MOC 的開取計(jì)劃會(huì)在本世紀(jì)持續(xù),慢慢直至到下世紀(jì)中葉,最終在 2150 年左右挖礦才會(huì)停止。
結(jié)論
本文介紹各種旨在提高比特幣協(xié)議的概念,這對(duì)于普通用戶來(lái)說意味著,有更好的隱私性、可互換性、更少的價(jià)格波動(dòng)和全網(wǎng)更快的信息廣播。這一切都是通過使用 two-tier 激勵(lì)模型,而不是借用其它數(shù)字貨幣如比特幣現(xiàn)有的single-tier 模型來(lái)實(shí)現(xiàn)。使用這個(gè)可替代的網(wǎng)絡(luò)設(shè)計(jì)讓添加更多類型的服務(wù)成為可能,例如去中心化的混幣技術(shù)、即時(shí)交易和使用主節(jié)點(diǎn) quorum 的去中心化預(yù)言。
評(píng)論
查看更多