本文首次發(fā)布在先知社區(qū)止状,鏈接為:https://xz.aliyun.com/t/2965
區(qū)塊鏈技術(shù)大量依賴(lài)于P2P網(wǎng)絡(luò),可以說(shuō)沒(méi)有P2P就沒(méi)有區(qū)塊鏈現(xiàn)在的發(fā)展攒霹。而區(qū)塊鏈擁有去中心化的應(yīng)用理論怯疤,所以對(duì)P2P的過(guò)程有著近似嚴(yán)苛的安全要求。本文圍繞P2P網(wǎng)絡(luò)的基礎(chǔ)架構(gòu)以及安全協(xié)議展開(kāi)論述催束。內(nèi)容是通過(guò)我的大量文獻(xiàn)閱讀之后進(jìn)行的提煉集峦。希望大家多多交流!
一抠刺、概述P2P網(wǎng)絡(luò)
1 何為P2P塔淤?
P2P(peer-to-peer)網(wǎng)絡(luò)又稱(chēng)為對(duì)等式網(wǎng)絡(luò),或者點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)速妖。這是一種無(wú)中心的服務(wù)器高蜂、完全由用戶(hù)群進(jìn)行交換信息的互聯(lián)網(wǎng)體系,P2P網(wǎng)絡(luò)的每一個(gè)用戶(hù)即是一個(gè)客戶(hù)端罕容,同時(shí)也具備服務(wù)器的功能备恤。在P2P技術(shù)之前稿饰,我們所有的網(wǎng)絡(luò)應(yīng)用都采用C/S或者B/S架構(gòu)來(lái)實(shí)現(xiàn)的,然而在之前C/S架構(gòu)的應(yīng)用程序中烘跺,客戶(hù)端軟件向服務(wù)器發(fā)出請(qǐng)求湘纵,服務(wù)器然后對(duì)客戶(hù)端請(qǐng)求做出響應(yīng),在這種情況下滤淳,如果客戶(hù)端越多梧喷,此時(shí)服務(wù)器的壓力就越大。然而采用P2P技術(shù)實(shí)現(xiàn)的每臺(tái)計(jì)算機(jī)既是客戶(hù)端脖咐,也是服務(wù)器铺敌,他們的功能都是對(duì)等的。對(duì)于安裝了P2P軟件(如迅雷屁擅,QQ等)的計(jì)算機(jī)加入一個(gè)共同的P2P網(wǎng)絡(luò)偿凭,網(wǎng)絡(luò)中的節(jié)點(diǎn)之間可以直接進(jìn)行數(shù)據(jù)傳輸和通信。
那么有讀者可能會(huì)提問(wèn):那我傳統(tǒng)的P2P架構(gòu)與C/S或者B/S架構(gòu)有什么異同點(diǎn)呢派歌?
2 P2P架構(gòu)和C/S架構(gòu)的比較
相比于C/S弯囊,P2P有其自己獨(dú)特的優(yōu)勢(shì):所有的客戶(hù)端都能夠提供資源,包括帶寬胶果、存儲(chǔ)空間已經(jīng)計(jì)算能力匾嘱。所以其網(wǎng)絡(luò)容量可以遠(yuǎn)超其他模式。具體來(lái)說(shuō):
- 1.對(duì)等模式
P2P系統(tǒng)中的客戶(hù)端能夠同時(shí)扮演客戶(hù)端和服務(wù)器的角色早抠,使兩臺(tái)計(jì)算機(jī)之間能夠不通過(guò)服務(wù)器直接進(jìn)行信息分享霎烙。也就是說(shuō)信息的傳輸分散在各個(gè)節(jié)點(diǎn),無(wú)須經(jīng)過(guò)某個(gè)中心服務(wù)器蕊连,用戶(hù)的隱私信息被竊聽(tīng)和泄露的可能大大減少悬垃。
- 網(wǎng)絡(luò)資源的分布式存儲(chǔ)
在C/S架構(gòu)中,所有客戶(hù)端都直接從服務(wù)器下載所有數(shù)據(jù)資源甘苍,這樣勢(shì)必會(huì)加重服務(wù)器的負(fù)擔(dān)尝蠕,而P2P則改變了以服務(wù)器為中心的狀態(tài),使每個(gè)節(jié)點(diǎn)可以先從服務(wù)器上個(gè)下載一部分载庭,然后再相互從對(duì)方或者其他節(jié)點(diǎn)下載其余部分趟佃。采用這種方式,當(dāng)大量客戶(hù)端同時(shí)下載時(shí)昧捷,就不會(huì)形成網(wǎng)絡(luò)堵塞現(xiàn)象了闲昭。
而C/S架構(gòu)有下面的缺點(diǎn):
- 服務(wù)器負(fù)擔(dān)過(guò)重。當(dāng)大量用戶(hù)訪問(wèn)C/S系統(tǒng)的服務(wù)器時(shí)靡挥,服務(wù)器常常會(huì)出現(xiàn)網(wǎng)絡(luò)堵塞等現(xiàn)象序矩。
- 系統(tǒng)穩(wěn)健性和服務(wù)器關(guān)聯(lián)密切。指的是——如果服務(wù)器出現(xiàn)了問(wèn)題時(shí)跋破,整個(gè)系統(tǒng)的運(yùn)行將會(huì)癱瘓簸淀。
3 區(qū)塊鏈中的P2P
解釋了這么多內(nèi)容瓶蝴,那么我們現(xiàn)在就將區(qū)塊鏈中的P2P技術(shù)單獨(dú)拿出來(lái),具體的分析下其中蘊(yùn)含的道理租幕。
從技術(shù)方面來(lái)分析舷手,區(qū)塊鏈技術(shù)就是——P2P+共識(shí)機(jī)制+密碼學(xué)。具體來(lái)說(shuō)劲绪,區(qū)塊鏈就是P2P的網(wǎng)絡(luò)架構(gòu)男窟,通過(guò)密碼學(xué)來(lái)保證數(shù)據(jù)的安全,通過(guò)共識(shí)算法來(lái)保證數(shù)據(jù)的一致性贾富。對(duì)于其他架構(gòu)來(lái)說(shuō)歉眷,故障是不可避免的。但是對(duì)于區(qū)塊鏈的分布式P2P網(wǎng)絡(luò)來(lái)說(shuō)颤枪,其基本不存在單點(diǎn)故障汗捡。就算節(jié)點(diǎn)頻繁的進(jìn)退也不會(huì)對(duì)整個(gè)系統(tǒng)產(chǎn)生影響。
而我們知道區(qū)塊鏈的落地項(xiàng)目有許多畏纲,但是我們可以將這些內(nèi)容大致的分為三類(lèi)——公鏈扇住、私有鏈、聯(lián)盟鏈盗胀。而公鏈?zhǔn)蔷哂型耆_(kāi)放的特性的台囱,所以其決定了它不回在網(wǎng)絡(luò)中采用P2P加密。而對(duì)于其余的兩者來(lái)說(shuō)(尤其是聯(lián)盟鏈)读整,其節(jié)點(diǎn)間互相合作卻又不完全信任的情況使P2P網(wǎng)絡(luò)顯的尤為重要。
二咱娶、P2P的分類(lèi)
P2P 網(wǎng)絡(luò)自身有多方面優(yōu)點(diǎn)米间,在區(qū)塊鏈的應(yīng)用如下:
- 1 去中心化
區(qū)塊鏈的資源和服務(wù)分布在所有參與節(jié)點(diǎn)上,通過(guò)共識(shí)機(jī)制維護(hù)區(qū)塊鏈網(wǎng)絡(luò)一致性膘侮,無(wú)須中心系統(tǒng)的存在屈糊。
- 2 可擴(kuò)展性。
區(qū)塊鏈節(jié)點(diǎn)可以自由加入琼了、退出逻锐,網(wǎng)絡(luò)系統(tǒng)根據(jù)節(jié)點(diǎn)自由擴(kuò)展。
- 3 健壯性雕薪。
區(qū)塊鏈網(wǎng)絡(luò)沒(méi)有中心節(jié)點(diǎn)昧诱,也就沒(méi)有了攻擊對(duì)象。參與節(jié)點(diǎn)分布在網(wǎng)絡(luò)中所袁,部分節(jié)點(diǎn)遭到破壞對(duì)區(qū)塊鏈系統(tǒng)無(wú)影響盏档。(我們知道許多協(xié)議均是依靠CA來(lái)進(jìn)行處理的,這也就成為了許多黑客攻擊的對(duì)象燥爷。然后區(qū)塊鏈并沒(méi)有CA這種機(jī)制蜈亩,所以也就規(guī)避了風(fēng)險(xiǎn))懦窘。
- 4隱私保護(hù)。
區(qū)塊信息采用廣播機(jī)制稚配,無(wú)法定位廣播初始 節(jié)點(diǎn)畅涂,防止用戶(hù)通信被監(jiān)聽(tīng),保護(hù)用戶(hù)隱私道川。
- 5 負(fù)載均衡午衰。
區(qū)塊鏈通過(guò)限制節(jié)點(diǎn)連接數(shù)等配置,避免資源負(fù)載愤惰、網(wǎng)絡(luò)阻塞苇经。
針對(duì)區(qū)塊鏈應(yīng)用特點(diǎn),按照 P2P 網(wǎng)絡(luò)是否去中心化宦言、節(jié)點(diǎn)地址是否結(jié)構(gòu)化兩個(gè)方面扇单,將 P2P 網(wǎng)絡(luò)分為如下四類(lèi)。
1 中心化 P2P 網(wǎng)絡(luò)
在中心化網(wǎng)絡(luò)中存在“中心服務(wù)器”奠旺,而其作用為保存接入節(jié)點(diǎn)的地址信息蜘澜。倘若兩個(gè)peer之間想要進(jìn)行通信,那么它們可以通過(guò)中心服務(wù)器進(jìn)行對(duì)方地址的索要响疚。例如:
將音樂(lè)文件與 保存文件的節(jié)點(diǎn)相互關(guān)聯(lián)鄙信,用戶(hù)查找某個(gè)音樂(lè)時(shí),中心服務(wù)器告知儲(chǔ)存節(jié)點(diǎn)地址忿晕,用戶(hù)點(diǎn)對(duì)點(diǎn)連接以獲得音樂(lè)装诡。
由此可知,中心服務(wù)器是用來(lái)提供地址索引的(其他架構(gòu)的中心服務(wù)器是提供所有的服務(wù))践盼。倘若其出現(xiàn)故障鸦采,那么整個(gè)系統(tǒng)就出現(xiàn)癱瘓了。
對(duì)小型網(wǎng)絡(luò)而言咕幻,中心化拓?fù)淠P驮诠芾砗涂刂品矫嬲家欢▋?yōu)勢(shì)渔伯。但鑒于其存在的上述缺陷,該模型并不適合大型網(wǎng)絡(luò)應(yīng)用肄程。
2 全分布式非結(jié)構(gòu)化 P2P 網(wǎng)絡(luò)
因?yàn)樗鼪](méi)有中央索引服務(wù)器锣吼,每臺(tái)機(jī)器在網(wǎng)絡(luò)中是真正的對(duì)等關(guān)系,既是客戶(hù)機(jī)同時(shí)又是服務(wù)器蓝厌。
全分布 P2P 節(jié)點(diǎn)可以自由加入退出玄叠,并且沒(méi)有中心節(jié)點(diǎn), 節(jié)點(diǎn)地址沒(méi)有結(jié)構(gòu)化統(tǒng)一標(biāo)準(zhǔn)拓提,整個(gè)網(wǎng)絡(luò)結(jié)構(gòu)呈隨機(jī)圖的結(jié)構(gòu)诸典, 無(wú)固定網(wǎng)絡(luò)結(jié)構(gòu)圖。然而完全的自由意味著新節(jié)點(diǎn)無(wú)法得知 P2P 網(wǎng)絡(luò)節(jié)點(diǎn)信息,從而無(wú)法加入網(wǎng) 絡(luò)狐粱。全分布式 P2P 網(wǎng)絡(luò)更加自由化的同時(shí)也帶來(lái)節(jié)點(diǎn)管理的問(wèn)題舀寓,節(jié)點(diǎn)頻繁加入、退出使得整個(gè)網(wǎng)絡(luò)結(jié)構(gòu)無(wú)法穩(wěn)定肌蜻, 大量的廣播消息不僅造成資源浪費(fèi)互墓,甚至?xí)枞W(wǎng)絡(luò)。
而比特幣采用的就是這種 P2P 網(wǎng)絡(luò)結(jié)構(gòu)蒋搜,全分布式使得任 何人任何節(jié)點(diǎn)都可以參與篡撵,非結(jié)構(gòu)化使得節(jié)點(diǎn)間既可以通過(guò)區(qū) 塊鏈 P2P 協(xié)議同步區(qū)塊數(shù)據(jù),又保持匿名隱私保護(hù)豆挽。
舉例如下:
當(dāng)一臺(tái)計(jì)算機(jī)要下載一個(gè)文件育谬,它首先以文件名或者關(guān)鍵字生成一個(gè)查詢(xún),并把這個(gè)查詢(xún)發(fā)送給與它相連的所有計(jì)算機(jī)帮哈,這些計(jì)算機(jī)如果存在這個(gè)文件膛檀,則與查詢(xún)的機(jī)器建立連接,如果不存在這個(gè)文件娘侍,則繼續(xù)在自己相鄰的計(jì)算機(jī)之間轉(zhuǎn)發(fā)這個(gè)查詢(xún)咖刃,直到找到文件為止。為了控制搜索消息不至于永遠(yuǎn)這樣傳遞下去憾筏,一般通過(guò)TTL (Time To Live)的減值來(lái)控制查詢(xún)的深度嚎杨。
3 全分布式結(jié)構(gòu)化 P2P 網(wǎng)絡(luò)
全分布式最大的問(wèn)題在于節(jié)點(diǎn)地址管理,節(jié)點(diǎn)間沒(méi)有固定規(guī)則約束氧腰,無(wú)法精確定位節(jié)點(diǎn)信息枫浙,只能通過(guò)洪泛查詢(xún)方式進(jìn)行查找,對(duì)網(wǎng)絡(luò)的消耗很大古拴。而結(jié)構(gòu)化網(wǎng)絡(luò)采用分布式哈希表 (distributed Hash table, DHT)箩帚,通過(guò)如 Hash 函數(shù)一類(lèi)的加密散列函數(shù),將不同節(jié)點(diǎn)地址規(guī)范為標(biāo)準(zhǔn)長(zhǎng)度數(shù)據(jù)斤富。
結(jié)構(gòu)化模型與非結(jié)構(gòu)化模型相思,但結(jié)構(gòu)化模型的節(jié)點(diǎn)管理有固定結(jié)構(gòu)圖锻狗。例如:
以太坊將節(jié)點(diǎn)橢圓加密算法的公鑰轉(zhuǎn)換為 64 Byte 長(zhǎng)度的 NodeID 作為唯一標(biāo)志符來(lái)區(qū)分節(jié)點(diǎn)满力,使得以太坊可以在沒(méi)有中心服務(wù)器的情況下實(shí)現(xiàn)節(jié)點(diǎn)地址精確查找。
4 半分布式 P2P 網(wǎng)絡(luò)
結(jié)合中心化和分布式模型各有的優(yōu)點(diǎn)轻纪,半分布式 P2P 網(wǎng)絡(luò)
將節(jié)點(diǎn)分類(lèi)成普通 節(jié)點(diǎn)和超級(jí)節(jié)點(diǎn)油额,從而構(gòu)成了半分布式網(wǎng)絡(luò)結(jié)構(gòu)。
超級(jí)節(jié)點(diǎn)維護(hù)部分網(wǎng)絡(luò)節(jié)點(diǎn)地址刻帚、文件索引等工作潦嘶,超級(jí)節(jié)點(diǎn)共同實(shí) 現(xiàn)中心服務(wù)器功能。超級(jí)節(jié)點(diǎn)本身卻是分布式崇众,可以自由擴(kuò)展退出掂僵,具備分布式網(wǎng)絡(luò)優(yōu)點(diǎn)航厚。
超級(jí)賬本 hyperledger fabric 采用的 P2P 網(wǎng)絡(luò)結(jié)構(gòu)就如此。其將節(jié)點(diǎn)分為普通用戶(hù)節(jié)點(diǎn)和超級(jí)節(jié)點(diǎn)(排序锰蓬、背書(shū)節(jié)點(diǎn)等)幔睬。超級(jí)節(jié)點(diǎn)可以由普通節(jié)點(diǎn)選舉,也可以自行配置芹扭,單獨(dú)一個(gè)超級(jí)節(jié)點(diǎn)停機(jī)不影響系統(tǒng)運(yùn)行麻顶。
三、密碼協(xié)議解決方案分析
我們?cè)谏厦娴膬?nèi)容中介紹了P2P網(wǎng)絡(luò)中的幾種類(lèi)型舱卡。下面我們?cè)敿?xì)介紹下關(guān)于區(qū)塊鏈中的具體安全加密算法辅肾。
在描述協(xié)議前,我們先討論下我們?yōu)樯秱円褂肞2P加密轮锥?
我們?cè)趨^(qū)塊鏈的節(jié)點(diǎn)之間矫钓、客戶(hù)端之間需要建立安全的加密隧道,并防止在信息傳輸?shù)倪^(guò)程中將敏感信息暴露給外人交胚。除此之外份汗,其也可以減少網(wǎng)絡(luò)安全監(jiān)管工作,提高安全性蝴簇。
1 傳統(tǒng)通用SSL服務(wù)
簡(jiǎn)單來(lái)說(shuō)杯活,在比特幣“錢(qián)包”的應(yīng)用中,早起其應(yīng)用使用了SSL進(jìn)行客戶(hù)端之間數(shù)據(jù)的加密熬词。而SSL/TLS可以結(jié)合HTTP協(xié)議組合成HTTPS來(lái)加密web的內(nèi)容旁钧,也可以與一些常用的FTP等協(xié)議進(jìn)行組合來(lái)保證P2P網(wǎng)絡(luò)中應(yīng)用數(shù)據(jù)層的安全。
具體來(lái)說(shuō)如下:
1. 客戶(hù)端發(fā)出一個(gè) client hello 消息互拾,攜帶的信息包括:
所支持的SSL/TLS 版本列表歪今;支持的與加密算法;所支持的數(shù)據(jù)壓縮方法颜矿;隨機(jī)數(shù)A;
2. 服務(wù)端響應(yīng)一個(gè) server hello 消息寄猩,攜帶的信息包括:
協(xié)商采用的SSL/TLS 版本號(hào);會(huì)話(huà)ID骑疆;隨機(jī)數(shù)B田篇;服務(wù)端數(shù)字證書(shū) serverCA;
由于雙向認(rèn)證需求箍铭,服務(wù)端需要對(duì)客戶(hù)端進(jìn)行認(rèn)證泊柬,會(huì)同時(shí)發(fā)送一個(gè) client certificate request,表示請(qǐng)求客戶(hù)端的證書(shū)诈火;
3. 客戶(hù)端校驗(yàn)服務(wù)端的數(shù)字證書(shū)兽赁;校驗(yàn)通過(guò)之后發(fā)送隨機(jī)數(shù)C,該隨機(jī)數(shù)稱(chēng)為pre-master-key,使用數(shù)字證書(shū)中的公鑰加密后發(fā)出刀崖;
由于服務(wù)端發(fā)起了 client certificate request惊科,客戶(hù)端使用私鑰加密一個(gè)隨機(jī)數(shù) clientRandom隨客戶(hù)端的證書(shū) clientCA一并發(fā)出;
4. 服務(wù)端校驗(yàn)客戶(hù)端的證書(shū)蒲跨,并成功將客戶(hù)端加密的隨機(jī)數(shù)clientRandom 解密译断;
根據(jù) 隨機(jī)數(shù)A/隨機(jī)數(shù)B/隨機(jī)數(shù)C(pre-master-key) 產(chǎn)生動(dòng)態(tài)密鑰 master-key,加密一個(gè)finish 消息發(fā)至客戶(hù)端或悲;
5. 客戶(hù)端根據(jù) 同樣的隨機(jī)數(shù)和算法 生成master-key孙咪,加密一個(gè)finish 消息發(fā)送至服務(wù)端;
6. 服務(wù)端和客戶(hù)端分別解密成功巡语,至此握手完成翎蹈,之后的數(shù)據(jù)包均采用master-key進(jìn)行加密傳輸。
詳細(xì)內(nèi)容參考 SSL/TLS算法流程解析
然而男公,由于比特幣官方的理念為“錢(qián)包”用戶(hù)的身份應(yīng)該是嚴(yán)格限定的荤堪,所以其在設(shè)計(jì)之初就保證了用戶(hù)的身份是合法的,所以其SSL在后續(xù)的版本中并沒(méi)有進(jìn)行維護(hù)枢赔。
2 站間協(xié)議(station to station)
由于P2P之間的信息傳遞不可避免的要進(jìn)行TCP連接澄阳,所以保證其連接的安全性是尤為重要的。然而我們?nèi)绾伪WC會(huì)話(huà)的前向安全性呢踏拜?具體的算法流程是如何實(shí)現(xiàn)的呢碎赢?
站間協(xié)議(station to station)是秘鑰協(xié)商方案,其基于經(jīng)典的DH秘鑰交換算法速梗,提供了秘鑰與實(shí)體的認(rèn)證肮塞。
也保證了秘鑰的前向安全性。
對(duì)于前向安全性姻锁,我們簡(jiǎn)單總結(jié)為:A與B之間的所有會(huì)話(huà)均有一個(gè)公共秘鑰枕赵。但是假如我的這個(gè)公共秘鑰丟失了那么我之前的所有會(huì)話(huà)均會(huì)被泄密。所以我們?cè)诿看螘?huì)話(huà)過(guò)程中需要根據(jù)公共秘鑰來(lái)生成一個(gè)“會(huì)話(huà)秘鑰”位隶,而需要根據(jù)這個(gè)會(huì)話(huà)秘鑰來(lái)進(jìn)行當(dāng)前會(huì)話(huà)拷窜。
1 建立連接之前,A與B雙方需要設(shè)置好共享的數(shù)據(jù)(Diffie-Hellman算法)涧黄,包括
雙方的公鑰篮昧、大素?cái)?shù)n、發(fā)生器g
弓熏。2 節(jié)點(diǎn)A生成隨機(jī)數(shù)x恋谭,計(jì)算并將指數(shù)g^x發(fā)送給節(jié)點(diǎn)B糠睡。
3 節(jié)點(diǎn)B生成隨機(jī)數(shù)y挽鞠,計(jì)算指數(shù)g^y。
4 節(jié)點(diǎn)B計(jì)算共享秘鑰 `K = (gx)y。
5 B計(jì)算(g^y , g^x)信认,并用B的私鑰簽名材义,然后用共享秘鑰K加密(這里是兩層)。然后將
密文嫁赏、g^y
發(fā)送給A其掂。6 節(jié)點(diǎn)A使用B的公鑰驗(yàn)證B的簽名。
7 A將(g^x , g^y)使用A的私鑰簽名潦蝇,然后用K加密款熬,傳送給B(跟步驟5相似)。
8 B用A的公鑰驗(yàn)證信息的來(lái)源是否是A攘乒。
9 至此贤牛,A與B互相認(rèn)證過(guò),并且有共同的秘鑰则酝。之后就可以使用K進(jìn)行會(huì)話(huà)加密殉簸。
由于傳統(tǒng)的DH秘鑰交換協(xié)議沒(méi)有設(shè)計(jì)驗(yàn)證部分,所以很大可能會(huì)存在中間人攻擊的情況沽讹。但是STS就很好的經(jīng)過(guò)協(xié)商設(shè)計(jì)添加了對(duì)對(duì)方身份驗(yàn)證的過(guò)程般卑,來(lái)避免了中間人攻擊的可能。
而協(xié)議中使用密碼學(xué)“離散對(duì)數(shù)問(wèn)題”來(lái)保證其安全性爽雄。即正向計(jì)算C = F(M)
容易蝠检,但是在不知道秘鑰K的情況下計(jì)算M = F^-1(C)
是困難的。
例如上述圖中盲链,a蝇率,b不泄露只是傳遞x與y的話(huà),任何人是沒(méi)有辦法通過(guò)結(jié)果x刽沾,y來(lái)推出秘密a本慕,b。
3 Sphinx協(xié)議
Sphinx是由學(xué)術(shù)研究者George Danezis和Ian Goldberg設(shè)計(jì)的一種協(xié)議侧漓,用于在一種點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)上轉(zhuǎn)播匿名信息锅尘。這種解決方案于2009年5月首次被提出,最初與閃電網(wǎng)絡(luò)甚至比特幣沒(méi)有任何關(guān)系布蔗。閃電實(shí)驗(yàn)室的Olaoluwa Osuntokun意識(shí)到Sphinx可以被利用藤违,他與Blockstream的Christian Decker合作對(duì)這種協(xié)議進(jìn)行了修改從而更好地適配閃電網(wǎng)絡(luò)。
Sphinx與著名的匿名化通信工具Tor(洋蔥路由)具有很多相似之處纵揍。與Tor一樣顿乒,使用Sphinx發(fā)送的所有數(shù)據(jù)包都可以進(jìn)行加密——包括接收的IP地址。然后這種加密要進(jìn)行好幾次泽谨,直到產(chǎn)生多個(gè)‘加密層’(所以用‘洋蔥’來(lái)比喻Tor)璧榄。
通過(guò)使用聰明的加密技巧特漩,所有的加密層都被應(yīng)用,從而每個(gè)沿著路由朝向最終加密包目的地的中介都只能打開(kāi)一個(gè)‘加密層’骨杂。這一層會(huì)向中介展示要將這個(gè)加密包轉(zhuǎn)向何處涂身。(與Tor相比,Sphinx使用經(jīng)過(guò)改進(jìn)的加密算法搓蚪,并創(chuàng)建了一種大小固定的數(shù)據(jù)包來(lái)更好地模糊路由中節(jié)點(diǎn)的位置蛤售。)
簡(jiǎn)單來(lái)說(shuō),Sphinx協(xié)議是中間傳話(huà)的人并不知道起點(diǎn)和終點(diǎn)妒潭,它們只知道上一個(gè)人已經(jīng)下一個(gè)人悴能。
例如我們兒時(shí)在教室向其他人傳紙條。假設(shè)兩個(gè)人隔的很遠(yuǎn)雳灾,那么我傳遞紙條的時(shí)候要在中間經(jīng)過(guò)許多人的手搜骡。但是我紙條的內(nèi)容又不能讓其他人看到,所以此時(shí)我就要想辦法既能傳出去佑女,又不會(huì)泄露记靡。
下面請(qǐng)看我分析。
假設(shè)A要給D傳紙條团驱,那么中間有 A B C D E摸吠。
這里要用到公鑰的思想,假如我的ABCDE均會(huì)配合我傳遞信息嚎花。那么我A首先要計(jì)算路徑寸痢,嗯,紊选,A說(shuō):“我發(fā)現(xiàn)最近的傳遞方法是經(jīng)過(guò) B C D到E”啼止。于是他就要開(kāi)始處理自己的消息了。
假設(shè)消息為M兵罢。公鑰分別為Pa Pb Pc Pd Pe献烦。地址分別為Addr_a,Addr_b卖词,Addr_c巩那,Addr_d,Addr_e此蜈。
之后A進(jìn)行倒序操作即横,先使用E進(jìn)行處理。Pe(M)---對(duì)M用e的私鑰加密裆赵。之后用D的消息處理东囚。 Pd(Addr_e , Pe(M))........直到最后用B的私鑰簽名Pb(xxxxxxx)。
至此战授,A就可以將處理過(guò)的消息以此傳遞页藻,首先給B抛蚁,B解密后發(fā)現(xiàn)地址是C,所以B傳遞給C惕橙。C解密后給D.........直到到了E處,E解密得到消息钉跷。每個(gè)參與者只知道各自這一跳的前一個(gè)和下一個(gè)節(jié)點(diǎn)弥鹦。
四、區(qū)塊鏈中P2P的應(yīng)用
根據(jù)我們上述的內(nèi)容可以知道爷辙,像比特幣彬坏、以太坊這樣的公鏈?zhǔn)切枰?jié)點(diǎn)自由進(jìn)出的,所以其不存在使用P2P加密的可能膝晾。
但是比特幣其匿名性不足的缺點(diǎn)區(qū)塊鏈安全—匿名性以及隱私性
對(duì)于處理區(qū)塊鏈隱私性的問(wèn)題栓始,現(xiàn)在比較有前景的解決方案是閃電網(wǎng)絡(luò) + Sphinx協(xié)議。
閃電網(wǎng)絡(luò)的本質(zhì)是在比特幣主鏈外建立可以雙向流動(dòng)的微支付通道血当,幣可以跨節(jié)點(diǎn)傳遞幻赚。將大量小額放到閃電網(wǎng)絡(luò)上,減少主鏈的負(fù)荷并提高小額交易的速度臊旭。
閃電網(wǎng)絡(luò)實(shí)現(xiàn)了一種基于稱(chēng)為Sphinx的方案的洋蔥路由協(xié)議落恼。該路由協(xié)議確保支付發(fā)送者可以通過(guò)閃電網(wǎng)絡(luò)構(gòu)建和通信路徑,使得:
中間節(jié)點(diǎn)可以驗(yàn)證和解密其部分路由信息离熏,并找到下一跳佳谦。
除了上一跳和下一跳,他們不能了解作為路徑一部分的任何其他節(jié)點(diǎn)滋戳。
他們無(wú)法識(shí)別支付路徑的長(zhǎng)度钻蔑,或者他們自己在該路徑中的位置。
路徑的每個(gè)部分被加密奸鸯,使得網(wǎng)絡(luò)級(jí)攻擊者不能將來(lái)自路徑的不同部分的數(shù)據(jù)包彼此關(guān)聯(lián)咪笑。
不同于Tor(互聯(lián)網(wǎng)上的洋蔥路由匿名協(xié)議),沒(méi)有可以被監(jiān)視的“退出節(jié)點(diǎn)”娄涩。付款不需要傳輸?shù)奖忍貛艆^(qū)塊鏈蒲肋,節(jié)點(diǎn)只是更新通道余額。
而將Sphinx與閃電網(wǎng)絡(luò)結(jié)合后钝满,將網(wǎng)絡(luò)中的數(shù)據(jù)包進(jìn)行多次加密兜粘,閃電網(wǎng)絡(luò)中間層只能打開(kāi)相應(yīng)的加密層,這一層主要是展示這個(gè)包的路由信息弯蚜。這樣就實(shí)現(xiàn)了在網(wǎng)絡(luò)上隱藏詳細(xì)的交易細(xì)節(jié)孔轴。