比特幣并不是完全使用純技術(shù)手段,而是將技術(shù)與激勵機制相結(jié)合做到了去中心化雌贱。
通盤認識去中心化帽芽。
比特幣的運行機制。
為什么比特幣確實是安全的披泪。
互聯(lián)網(wǎng)其實就是一個著名的去中心化系統(tǒng)艾少。 電子郵件通過SMTP(Simple Mail Transfer Protocol)去中心化的系統(tǒng)翼悴。IM鹦赎、短信等這些通信方式往往是一種混合模式,其實并沒有一種系統(tǒng)是完全的中心化或完全的去中心化的雏吭。雖然比特幣系統(tǒng)是區(qū)中心化的但是比特幣交易所杖们、錢包軟件及用戶管理比特幣軟件摘完,可以是中心化的婚温,也可以是去中心化的栅螟。
有了以上的考慮力图,我們把比特幣如何做到去中心化這個問題分解為下面5和問題:
誰在維護交易賬本掺逼?
誰有權(quán)利批準哪個交易是正當有效的?
誰在制造新的比特幣刑桑?
誰在制定系統(tǒng)變化的規(guī)則祠斧?
比特幣是如何取得交易貨幣的價值的拱礁?
比特幣從不同方面的不同點涉及了中心化和去中心化呢灶。點對點的網(wǎng)絡(luò)是最接近去中心化的系統(tǒng)。任何一個人都可以運行一個比特幣節(jié)點鲸阻,只需要下載一個比特幣客戶端赘娄; 從技術(shù)上講遣臼,bitcoin mining(比特幣挖礦)挖礦過程也是向所有人開放的拾并,但需要投入很多資金嗅义,所以挖礦具有非常高的中心化;比特幣運行節(jié)點的更新蝙眶。
2幽纷、分布式共識 distributed consensus
建立一個分布式的電子現(xiàn)金系統(tǒng)的關(guān)鍵技術(shù)問題就是要達成分布式共識 distributed consensus 友浸。即去中心化收恢。
在一個有n個節(jié)點的系統(tǒng)中,每個節(jié)點都有一個輸入值火窒,其中一些節(jié)點具有故障驮肉,甚至是惡意的缆八。一個分布式共識協(xié)議有一下兩個屬性:
輸入值得終止必須經(jīng)所有誠實節(jié)點來確定。
這個輸入值必須油誠實節(jié)點來生成栏妖。
分布式共識在比特幣bitcoin中的含義:我們需要記住比特幣是點對點的系統(tǒng)吊趾,網(wǎng)絡(luò)上所有節(jié)點的交易行為是廣播的论泛。
網(wǎng)絡(luò)中有各種各樣的用戶在想網(wǎng)絡(luò)廣播交易错负,節(jié)點必須對哪些交易可以進行廣播和交易發(fā)生的次序達成共識,以此系統(tǒng)將形成一個唯一的全球交易總賬折联。在bitcoin中也是將每個區(qū)塊進行共識處理诚镰。
在任何時點祥款,所有在p2p網(wǎng)絡(luò)上的節(jié)點都有包含一系列區(qū)塊的總賬本,每個區(qū)塊中都包含了已經(jīng)被所有節(jié)點達成共識的交易清單函筋。除此之外跌帐,每個節(jié)點還有一堆沒有被打包進入進入?yún)^(qū)塊的交易绊率,就是那些網(wǎng)絡(luò)節(jié)點已經(jīng)被通知、交易已經(jīng)發(fā)生脸狸,但還沒有被寫入?yún)^(qū)塊的交易炊甲。網(wǎng)絡(luò)節(jié)點對于這些交易還沒有達成共識卿啡、所以每個節(jié)點都有一個略有差異菱父、尚待確認的交易池。
所有節(jié)點是如何對一個區(qū)塊達成共識的呢官辽?
方法一:每隔十分鐘同仆,每個節(jié)點都提議自己的未被認可的交易成為以達成共識的區(qū)塊鏈后面的下一個區(qū)塊裙品,然后執(zhí)行共識的協(xié)議清酥,每個節(jié)點把自己的提議作為輸入焰轻。但不可避免有寫節(jié)點是惡意的,存心把不當?shù)慕灰追胚M區(qū)塊辱志,其他節(jié)點則是誠實的揩懒。如果共識協(xié)議能夠順利完成已球,一個有效的區(qū)塊會被作為輸出辅愿。
方法一和bitcoin不完全一樣点待,以上的做法存在的技術(shù)問題:
達成共識一般是個難題癞埠,因為有些節(jié)點會死機或根本就是惡意的節(jié)點苗踪。
就bitcoin而言削锰,p2p網(wǎng)絡(luò)是不完美的,并不是所有節(jié)點兩兩相連测暗。
由于交易信息是分布在互聯(lián)網(wǎng)上的碗啄,信息的傳遞有可能會被延遲
全球時間上的不統(tǒng)一給共識協(xié)議算法帶來了很多的限制稚字,有許多關(guān)于達成分布式共識具備不可能性結(jié)論已經(jīng)被證實胆描。一個經(jīng)典的案例“拜占庭將軍問題”(Byzantins Generals Problem).
還有一個關(guān)于不可能性的結(jié)論,是著名的“Fischer-Lynch-Paterson ”不可能性結(jié)果昌讲。指的是在一定條件下短绸,甚至在只有一個缺陷的過程中筹裕,達成共識都是不可能的。比較著名的就是Paxos協(xié)議证逻。Paxos能做大不產(chǎn)生不一致的結(jié)果囚企。但所做的妥協(xié)是死機卡住,從而無法繼續(xù)運行扯罐。
不可能性結(jié)論都是在一些特定的情況下成立烦衣。bincoin的情況遠比理論上告訴我們的要好的多花吟。 bitcoin到底打破了經(jīng)典模型里的哪些假設(shè)衅澈?
bitcoin引入了獎勵的概念今布,這對分布式共識來說是個全新的理念部默。人們?yōu)榻疱X獎勵而變得誠實造虎。所以bitcoin并沒有真正解決分布式共識的問題算凿,只在bitcoin中解決了這個問題氓轰。
bitcoin體系包含隨機性這個概念署鸡。共識算法很大程度上依賴于隨機性。共識是通過一段較長時間而達成侍筛。
下面探討的是bitcoin共識算法的技術(shù)細節(jié)禽笑。
bitcoin身份缺失的原因:
p2p網(wǎng)絡(luò)中沒有一個中央的權(quán)威機構(gòu)來發(fā)放身份。
化名制pseudonymity 也是bitcoin想達到的一個目標佳镜。雖然bitcoin還不能保證真正的匿名蟀伸,即一個用戶做的交易是有辦法被最終追蹤到的啊掏,但bitcoin并沒有強迫用戶用真實身份加入這是bitcoin的重要特性及核心理念迟蜜。
implicit consensus - 對隨意節(jié)點選擇的假設(shè)娜睛。 implicit consensus 隱性共識解決的問題就是當隨機一個惡意節(jié)點,我們的應(yīng)對辦法就是implicit consensus方库,其他節(jié)點可以通過隱性的接受或是拒絕隨機出來的節(jié)點薪捍。如果拒絕他們就選擇前一個曾經(jīng)接受的區(qū)塊酪穿。
這個算法的簡化假設(shè)是被济,可以隨意選擇一個節(jié)點只磷,這些節(jié)點不會受到女巫攻擊的影響钮追。
新的交易被廣播到所有node上。
每個節(jié)點都將新的交易放到一個區(qū)塊。
在每個回合炭晒,一個隨機的節(jié)點可以廣播他的區(qū)塊
其他節(jié)點可以選擇接受這個區(qū)塊网严,前提是正當交易(即有真的簽名)
節(jié)點們可以把以上區(qū)塊的哈希放進自己的區(qū)塊中震束,以此表示他們對那個新區(qū)塊的認可驴一。
由于盜取者要偽造bitcoin擁有者的數(shù)字簽名休雌,如果數(shù)字簽名是安全的灶壶,他就無法辦到
誠實節(jié)點發(fā)起區(qū)塊---->交易記錄就會放進區(qū)塊
發(fā)起交易--->向整個網(wǎng)絡(luò)廣播這筆交易--->某個誠實節(jié)點制造下一個區(qū)塊,把這筆交易放到區(qū)塊中杈曲。 交易的數(shù)據(jù)結(jié)構(gòu)包含 數(shù)字簽名驰凛、公鑰(地址)的指令和一個哈希值。哈希值是
一個指針担扑,指向前一筆交易的輸出并且是以被共識連的某個之前的區(qū)塊所認可的交易恰响。
我們?nèi)绾沃朗欠駷殡p重支付攻擊?取決于最后那個區(qū)塊會被納入長期的共識鏈涌献。誠實的節(jié)點會遵循在最長有效分支后面延展這一規(guī)則胚宦,選擇下一個區(qū)塊的節(jié)點可以決定建立在其中一個區(qū)塊上。這個選擇就決定了雙重支付攻擊的成功與否燕垃。雙重支付攻擊的概率將隨著確認的數(shù)目的增加而指數(shù)級降低。
總結(jié),防止不正當?shù)慕灰淄耆怯妹艽a學(xué)的方法。當這些方法被共識所加強侦锯,即一個節(jié)點如果想放進一個密碼學(xué)上不正當?shù)慕灰祝@個交易不會被納入長期共識鏈的唯一原因是絕大多數(shù)的節(jié)點是誠實的。另外皂甘,防止雙重支付攻擊完全依賴于共識户辫,密碼學(xué)是不起作用。從密碼學(xué)的角度來看,共識可以決定哪個被放進長期共識鏈。最后你無法100%保證你感興趣的交易被放進了長期共識鏈哀峻,但指數(shù)級概率保證了不錯的結(jié)果喻旷,6筆交易后,實際你就沒有犯錯的可能了
bitcoin的區(qū)中心化一部分通過技術(shù)手段鼓择,一部分通過激勵設(shè)計來實現(xiàn)抑堡。
bitcoin里有兩種獎勵機制:
區(qū)塊獎勵。創(chuàng)建區(qū)塊的節(jié)點可以在區(qū)塊中加入一筆特別的交--造幣交易象踊,節(jié)點指定這筆交易的接收地址。節(jié)點通常都會選擇一個屬于字節(jié)的地址。你可以把這視為節(jié)點在共識鏈上進行創(chuàng)建區(qū)塊服務(wù)的報酬。
交易費颖杏。任何交易的制造者都可以選擇讓交易輸出值比輸入值小获讳,第一個創(chuàng)建區(qū)塊把交易放進區(qū)塊鏈的人可以取得這個差額偎肃。作為交易費。用戶需要交易費來保證交易的質(zhì)量最冰。
工作量證明proof of work 的核心理念是把隨機選取節(jié)點改為根據(jù)節(jié)點占有某種資源的比例來選取節(jié)點篇裁,我們希望這種資源是沒有人可以壟斷的。如果這個資源是計算力 那我們稱之為工作量證明系統(tǒng)产还∨S纾或者這個資源可以是某種幣的擁有量丈攒,我們稱之為權(quán)益證明proof of stake碘耳。
工作量證明proof of work -- 根據(jù)計算能力來選擇節(jié)點到底是什么意思慷妙。
允許節(jié)點用他們的計算能力來相互競爭導(dǎo)致的結(jié)果是:計算能里的比例決定了被動選中的概率。工作量證明還有一種理解方式:把制造新省份的難度適當提高了办绝。這對女巫的攻擊是有抑制作用的佳鳖。
bitcoin是用哈希函數(shù)解謎來證明工作量的月弛。任何提議-->創(chuàng)建區(qū)塊-->制造下一塊谴垫,都要找到一個臨時隨機數(shù),當你把臨時隨機數(shù)筷登、前序哈希值、交易列表逊桦、組成一整串字符,然后用哈希計算輸出值须鼎,這個輸出值正好在一個相對于這個哈希函數(shù)所有可能的輸出中很小的目標區(qū)間內(nèi)蝌焚。這個區(qū)塊還包含了指向前一個區(qū)塊的哈希指針誓斥。臨時隨機數(shù)是為了適度提高發(fā)現(xiàn)符合要求的臨時隨機數(shù)的難度,即包含臨時隨機數(shù)在內(nèi)的整個區(qū)塊的哈希值組合在一起舀武,輸出結(jié)果是一種特定形式奕剃。符合謎題友好的特性嘁锯。那唯一解出哈希謎題的辦法就是去是足夠多的臨時隨機數(shù),知道成功蓄愁。
哈希謎題的三特性:
有一定難度
可參數(shù)化成本
易于證實