女巫攻击及其防范
女巫攻擊及其防范
- 什么是女巫攻擊
- 女巫攻擊的防范
- 身份驗證
- 特征向量
- 讓偽造變得困難
- Model 0
什么是女巫攻擊
之前的文章在講拜贊庭容錯的時候,我們提到了女巫攻擊Sybil Attack。那什么是女巫攻擊呢?
女巫攻擊這個詞來源于Flora Rheta Schreiber 在1973年的小說《女巫》,這本小說寫的是對兼具多種人格的Sybil Dorsett進(jìn)行心理治療的故事。一人化身為多人,這個就是女巫攻擊的本質(zhì)。
在一個單純的分布式P2P網(wǎng)絡(luò)中,任何節(jié)點可以隨意的加入和退出P2P網(wǎng)絡(luò),沒有任何限制。它只需要對外暴露其在P2P網(wǎng)絡(luò)中的唯一標(biāo)志即可,除此之外,其他的信息都是私有的。
鑒于P2P網(wǎng)絡(luò)分布式的特性,這就意味著沒有任何中心節(jié)點,或者說沒有特權(quán)節(jié)點。這樣即使大家發(fā)現(xiàn)了惡意的節(jié)點,也沒有權(quán)利去回滾整個網(wǎng)絡(luò)的操作。在P2P網(wǎng)絡(luò)中,我們必須假設(shè)所有的節(jié)點都是不可靠的,跟所有其他節(jié)點的交互都是有風(fēng)險的。
女巫攻擊正是利用了P2P網(wǎng)絡(luò)的分布式特性,將一個節(jié)點偽裝成多個節(jié)點,并將這多個偽裝節(jié)點(也叫做Sybil 節(jié)點)廣播到整個P2P網(wǎng)絡(luò)中,從而做一些莫可名狀的事情,比如獲得網(wǎng)絡(luò)控制權(quán),拒絕響應(yīng),干擾查詢等事情。
考慮到之前我們提到的拜贊庭容錯,如果發(fā)生了女巫攻擊,一個節(jié)點可以偽裝成多個有效節(jié)點,這樣只要偽裝的節(jié)點突破n/3的限制,就能控制整個網(wǎng)絡(luò)。而實際上,惡意節(jié)點可能只有一個。
女巫攻擊的防范
事實上,在某些P2P網(wǎng)絡(luò)中,女巫攻擊并不需要花費太多功夫即可完成。那么我們我們怎么去防范女巫攻擊呢?
身份驗證
既然女巫攻擊的方法就是偽造網(wǎng)絡(luò)ID,那么最簡單的辦法就是讓每個加入的節(jié)點來做身份認(rèn)證。這樣偽造的節(jié)點無法通過認(rèn)證,那么女巫攻擊就完美的解決了。
身份驗證也有兩種方式:
2014年上映了一部德國的片子《我是誰:沒有絕對安全的系統(tǒng)》,這個片子是講的黑客的故事,同樣的,這個世界上也沒有絕對匿名的系統(tǒng)。世界上比較有名的像比特幣,洋蔥路由等都可以通過某些辦法獲得用戶信息,這些我會在后面的文章中具體講述。
可以假如網(wǎng)絡(luò)初始有N的可信任節(jié)點,這些信任節(jié)點可以對其他節(jié)點進(jìn)行擔(dān)保,擔(dān)保其他的節(jié)點也是可信任的。當(dāng)然這里面涉及到一些有效的擔(dān)保算法,這里就不詳細(xì)講述了。
特征向量
我們在做大數(shù)據(jù)的時候,往往需要通過很多特征向量來區(qū)分出是不是同一個用戶,同樣的在P2P網(wǎng)絡(luò)中,我們也可以通過這種特征向量來區(qū)分這個節(jié)點是不是偽造的節(jié)點。當(dāng)然這種方式不能完全避免女巫攻擊,但是可以有效的減少女巫攻擊。這種是有成熟產(chǎn)品的,像SybilGuard 和 the Advogato Trust Metric。
讓偽造變得困難
如果能夠加大偽造的難度,那么女巫攻擊也就不那么有效了。這種最常見的就是POW了,工作量證明,讓節(jié)點通過運算去解決問題,解決了才認(rèn)可你是一個有效的節(jié)點,這樣就有效的杜絕了女巫節(jié)點的存在。
Model 0
在golem網(wǎng)絡(luò)中,他們發(fā)明了一種算法來杜絕女巫攻擊,叫做Model 0。 golem是一個算力付費的區(qū)塊鏈項目,用戶付費然后在區(qū)塊鏈網(wǎng)絡(luò)上面完成計算。
在Model 0中,有兩種節(jié)點:Known 和 unknown, 并且會保存所有請求者的請求歷史。如果一個請求者他歷史記錄里面有3-5個成功交易,那么這個請求者就是Known節(jié)點,其他的沒有發(fā)生過交易的就是unknown節(jié)點。
系統(tǒng)如果一直和Known節(jié)點進(jìn)行交互當(dāng)然不會出現(xiàn)任何問題,但是Known節(jié)點畢竟是有限的,那么系統(tǒng)還是要接收一定的Unknown節(jié)點。怎么保證接收Unknown節(jié)點的過程中,不會受到女巫攻擊呢?
辦法就是構(gòu)造一個量化的機(jī)制,當(dāng)節(jié)點跟Unknown節(jié)點進(jìn)行交互的過程中,如果出現(xiàn)錯誤或者失敗,那么節(jié)點可以暫時拒絕和Unknown節(jié)點的請求,只接收Known節(jié)點的請求。在未來的某個時間再去接收Unknown節(jié)點的請求,這樣就保證了系統(tǒng)在整體上是可用的,不會出現(xiàn)大面積服務(wù)拒絕的情況。
更多精彩內(nèi)容且看:
- 區(qū)塊鏈從入門到放棄系列教程-涵蓋密碼學(xué),超級賬本,以太坊,Libra,比特幣等持續(xù)更新
- Spring Boot 2.X系列教程:七天從無到有掌握Spring Boot-持續(xù)更新
- Spring 5.X系列教程:滿足你對Spring5的一切想象-持續(xù)更新
- java程序員從小工到專家成神之路(2020版)-持續(xù)更新中,附詳細(xì)文章教程
更多教程請參考flydean的博客
總結(jié)
- 上一篇: 理解分布式一致性:拜占庭容错与PBFT
- 下一篇: HMAC算法及其应用