摘要:從外因的角度來說,系統(tǒng)應該能夠容忍黑客攻擊受托人作弊的情況。這里的黑客攻擊不是說,造成的后果最多是部分服務器宕機,我們已經(jīng)歸到內(nèi)因里去了,這里的黑客攻擊主要是指通過入侵拿到部分受托人密鑰并獲取權(quán)限,然后利用這些權(quán)限獲利。
0 前言
我曾分析了DPOS算法的漏洞并且模擬了一個簡單的攻擊的方法,然后實現(xiàn)了一個簡化的PBFT算法模型試圖去修復該漏洞,并且對比了效果。
隨后在正式的產(chǎn)品中實現(xiàn)了完整版的算法,并且部署了10臺機器進行了測試。測試的結(jié)果在安全性方面完全符合預期,即經(jīng)過頻繁的重啟、不按常規(guī)的廣播區(qū)塊、少數(shù)受托人聯(lián)合作弊的情況下,整個系統(tǒng)依然不會分叉;但是在性能方面,不太理想,在沒有任何交易的情況下,網(wǎng)路流量的峰值(廣播區(qū)塊的瞬間)達到了1.5Mbps。
其實這個流量也不算離譜,為了安全性,付出一些帶寬的代價也算合理,但我們認為還有很大的優(yōu)化空間,而且asch作為一個開發(fā)平臺,平臺底層的效率和穩(wěn)定性是很重要的,帶寬方面的優(yōu)化是很有必要的,我們立刻著手去做了。截止到8月9號,系統(tǒng)已升級到0.9.5版本,在49個節(jié)點組成的testnet中,帶寬的峰值在600kbps左右。
帶寬統(tǒng)計
下面我們會對比下這幾個版本共識算法的差異和基本原理。為了方便起見,我們把最初實現(xiàn)的dpos with pbft算法稱為AC0.5(AC即asch consensus),優(yōu)化后的版本稱為AC1.0。
1 AC0.5與DPOS
我們之前分析過,DPOS的主要問題在于受托人的權(quán)力過高,而其他節(jié)點對區(qū)塊的有效性驗證過于簡單,這就很容造成一個局面,即不同內(nèi)容、但相同高度的區(qū)塊共存于網(wǎng)絡中的不同節(jié)點,也就是所謂的分叉,進而造成雙重支付。
PBFT算法的本質(zhì)則是讓每一個節(jié)點都盡可能知道其他節(jié)點的決策,并以此來確定自己的決策。
因此,PBFT帶來額外的流量消耗就可以理解了,其根源也找到了。在AC0.5算法中,這個額外的流量或者說“其他節(jié)點的決策”指的就是每個節(jié)點對下一個區(qū)塊的投票信息,投票信息主要內(nèi)容有4個部分,即區(qū)塊高度、區(qū)塊ID、簽名、公鑰,其中區(qū)塊高度和區(qū)塊ID的長度可以忽略不計,簽名的長度為64字節(jié),公鑰的長度為32字節(jié),一個區(qū)塊達成共識需要全部受托人總數(shù)的2/3的投票,在asch系統(tǒng)中受托人總數(shù)為101人,也就是說需要至少67個投票。一個區(qū)塊的大小大約是200字節(jié),相當于2個投票的大小,因此AC0.5中流量消耗是原始DPOS的30多倍(在沒有交易的空block情況下,如果有交易則交易不會消耗額外的流量)。
2 AC1.0做了哪些改進
2.1 序列化方法
AC0.5中服務器之間的消息傳遞使用json格式,二進制字段則是轉(zhuǎn)化為hex編碼后再進行傳輸,投票中的二進制字段包括公鑰和簽名,之前我們算的是100字節(jié),轉(zhuǎn)化為hex編碼后則翻1倍,變成200字節(jié)了。
另外json的字段信息和冗余的分隔符所占的字節(jié)數(shù)也不少。
AC1.0對這一點做了改進,使用了protobuf作為序列化方法,效果很不錯,帶寬降為原來的60%左右。
consensus proto
2.2 算法流程
AC0.5的流程為
廣播一個待確認區(qū)塊
收集選票(以廣播的形式)
收集確認信息(以廣播的形式)
確認區(qū)塊
AC1.0的流程為
propose (廣播一個區(qū)塊的元信息及當前generator的ip信息)
collect votes (其他節(jié)點采用一對一的方式直接將選票發(fā)送給當前generator)
commit and broadcast(廣播一個已經(jīng)確認的區(qū)塊并攜帶投票信息)
通過對比可以發(fā)現(xiàn),AC0.5需要三次廣播,AC1.0僅需要兩次廣播,并且在propose環(huán)節(jié),只廣播了區(qū)塊的元信息,不包括交易信息,只廣播元信息有個好處,可以防止在區(qū)塊無法達成共識的情況下白白浪費流量,因為如果連元信息都無法通過,那就沒必要廣播交易信息了。
2.3 廣播協(xié)議
AC0.5使用的廣播協(xié)議為最樸素也最粗暴的gossip算法,即隨機選取一定數(shù)量的相鄰節(jié)點然后將消息廣播給它們, 這個一定數(shù)量固定為100. 任何一個節(jié)點在收到一條信息后,會計算這個消息的hash,如果發(fā)現(xiàn)沒有收到過,就會繼續(xù)廣播給它的相鄰節(jié)點。也就是說一輪廣播需要進行100 * N次通訊,在N小于100的情況下,相當于復雜度為O(N^2), 在這里N為整個網(wǎng)絡的節(jié)點個數(shù)。
AC1.0把這個固定數(shù)量改為sqrt(N), 也就是說假如有100個節(jié)點,每個節(jié)點只需要廣播給10個相鄰節(jié)點。
這個改動很小,但是參數(shù)的設置卻是非常需要經(jīng)驗的,我們做過了大量的測試后,認為sqrt(N)可以達到比較理想的效果,一次廣播需要的通訊次數(shù)略高于N * sqrt(N)。
除此之外,我們還實現(xiàn)了一個基于一致性哈希的廣播算法,性能達到了極致,算法復雜度降低到了O(N), 但是這個算法需要更多的測試,其穩(wěn)定性和可靠性也不如更簡單的隨機算法。
算法的demo版本在這里,有興趣的可以研究下。
gossip topology
3 容錯性
關(guān)于容錯性,我認為可以從內(nèi)因和外因兩個方面來說。
從內(nèi)因的角度來說,系統(tǒng)應該能容忍正常節(jié)點出錯,這些錯誤主要是指服務器宕機、硬件錯誤、網(wǎng)絡擁塞等。Asch系統(tǒng)能夠容忍最多1/3的受托人節(jié)點同時出錯,假如某個受托人的節(jié)點出錯了,那輪到該受托人生產(chǎn)區(qū)塊的時候,就會缺失一個,并順延到下一個10秒。假如超過1/3節(jié)點同時出錯,那么系統(tǒng)將暫停工作,等到足夠的節(jié)點恢復正常后,系統(tǒng)就可以立即恢復正常。
假如1/3以上的節(jié)點永遠無法恢復(這種情況是存在的,比如他們的密鑰丟了),那么系統(tǒng)必須要通過一次軟件升級來恢復,并且這個升級不強制所有節(jié)點執(zhí)行,只要部分節(jié)點升級,區(qū)塊生產(chǎn)恢復正常后,通過受托人投票把那些不正常的節(jié)點撤銷掉,系統(tǒng)就恢復如常了。
從外因的角度來說,系統(tǒng)應該能夠容忍黑客攻擊、受托人作弊的情況。這里的黑客攻擊不是說DDOS,DDOS造成的后果最多是部分服務器宕機,我們已經(jīng)歸到內(nèi)因里去了,這里的黑客攻擊主要是指通過入侵拿到部分受托人密鑰并獲取權(quán)限,然后利用這些權(quán)限獲利。獲利的手段無非是廣播多個版本的區(qū)塊,在短時間內(nèi)造成分叉,然后進行雙重支付。在asch系統(tǒng)中,黑客必須要同時獲得1/3以上節(jié)點的密鑰,才能夠發(fā)動連續(xù)攻擊,使網(wǎng)絡的分叉持續(xù)下去,否則系統(tǒng)將通過最長鏈同步算法迅速消除分叉,分叉之間的差距不會超過1個區(qū)塊高度,也就是說2次確認以上的交易基本上不可能被回滾了。
從現(xiàn)有的使用DPOS算法的系統(tǒng)來看,包括bitshares、crypti、lisk在內(nèi),這些系統(tǒng)出現(xiàn)的分叉都是內(nèi)因造成的,甚至大多數(shù)是算法實現(xiàn)上的bug所導致的。黑客攻擊DPOS的案例還沒有聽說過,雖然存在理論上的漏洞,但要想真正的攻擊,需要高超的技術(shù)和昂貴的資源,成本和收益不對等,因此也不會有人去攻擊,當一個DPOS系統(tǒng)的市值慢慢增大,我們可以繼續(xù)提高受托人節(jié)點的數(shù)量,進一步提高攻擊的成本,因此外因的風險基本可以忽略。
最后,我想解釋一下分叉這個詞,分叉來源于英文的fork,fork根據(jù)上下文的不同,我認為可以翻譯成兩種意思,一個是分叉,另一個是分裂。
分叉指的是在社區(qū)成員團結(jié)一致的情況下系統(tǒng)因為bug或被攻擊造成的不一致性,而分裂是指社區(qū)成員因觀念分化造成軟件走向不同的方向。
分叉強調(diào)的是系統(tǒng)的bug和不一致性,強調(diào)了物的因素,分叉后系統(tǒng)可能還是一個系統(tǒng),并且是很可能被復原的;而分裂則是強調(diào)了人為的因素,一旦社區(qū)分裂,則系統(tǒng)一分為二,變成兩個系統(tǒng)。
從這個角度來說,asch對于分叉可以做到事前的預防和事后的修復,但無法應對社區(qū)的分裂,任何一個區(qū)塊鏈系統(tǒng)也無法解決分裂的問題,包括比特幣和任何一個聲稱可以避免分叉的PBFT系統(tǒng)。
關(guān)于側(cè)鏈和區(qū)塊鏈開發(fā)的問題,歡迎加群:485979564,一起討論交流
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/86539.html
摘要:事實上,已經(jīng)成功了一半目前在區(qū)塊鏈領(lǐng)域融資金額排行第二,僅次于以太坊。以上這些,就是我們經(jīng)過深思熟慮后,雖有以太坊等珠玉在前,但我們依然要做一個同類型的產(chǎn)品的原因。 0 前言 首先要聲明一點,我們和我們的一些朋友都是lisk的投資人和支持者,我們也相信lisk會成功。 事實上,lisk已經(jīng)成功了一半,目前在區(qū)塊鏈領(lǐng)域融資金額排行第二,僅次于以太坊。 那為什么我們還要做一個類似的Asch...
摘要:事實上,已經(jīng)成功了一半目前在區(qū)塊鏈領(lǐng)域融資金額排行第二,僅次于以太坊。以上這些,就是我們經(jīng)過深思熟慮后,雖有以太坊等珠玉在前,但我們依然要做一個同類型的產(chǎn)品的原因。 0 前言 首先要聲明一點,我們和我們的一些朋友都是lisk的投資人和支持者,我們也相信lisk會成功。 事實上,lisk已經(jīng)成功了一半,目前在區(qū)塊鏈領(lǐng)域融資金額排行第二,僅次于以太坊。 那為什么我們還要做一個類似的Asch...
摘要:解決生產(chǎn)力問題我們在中為側(cè)鏈提供了一套模板,或者說腳手架,也可以叫做開發(fā)框架,側(cè)鏈的大部分底層功能都是寫好的,開發(fā)者只需要關(guān)心具體的業(yè)務邏輯,在這一點上,與以太坊的開發(fā)難度相當。 asch使用的是不同于以太坊和比特幣的側(cè)鏈架構(gòu),dapp是運行在側(cè)鏈上的,每套側(cè)鏈對應一個dapp。 側(cè)鏈的獨立性側(cè)鏈架構(gòu)的好處是代碼和數(shù)據(jù)獨立,不增加主鏈的負擔,避免數(shù)據(jù)過度膨脹,實際上是一種天然的分片機制...
摘要:沒有哪種共識機制是完美的,各共識機制都有其優(yōu)缺點,有些共識機制就是為了解決一些特定問題而生區(qū)塊鏈中的共識算法分為驗證池,工作證明。網(wǎng)絡延遲有可能使某些代表沒能及時廣播他們的區(qū)塊,而這將導致區(qū)塊鏈分叉。 沒有哪種共識機制是完美的,各共識機制都有其優(yōu)缺點,有些共識機制就是為了解決一些特定問題而生 區(qū)塊鏈中的共識算法分為:POW、POS、DPOS、PBFT、POOL驗證池 1、POW:Pro...
閱讀 2168·2021-11-23 09:51
閱讀 3730·2021-10-20 13:49
閱讀 1735·2021-09-06 15:13
閱讀 1854·2021-09-06 15:02
閱讀 3248·2021-09-02 15:11
閱讀 918·2019-08-29 15:37
閱讀 1768·2019-08-29 13:24
閱讀 2302·2019-08-29 11:28