基于Nervos CKB共識(shí)機(jī)制設(shè)計(jì)的新型哈希算法Eaglesong解析
Eaglesong 是專(zhuān)門(mén)為 Nervos CKB 設(shè)計(jì)的新型哈希算法。這是第一個(gè)成功結(jié)合了創(chuàng)新性、簡(jiǎn)潔性和安全性三個(gè)設(shè)計(jì)要求的哈希算法。今天這篇文章,我們將詳細(xì)解釋Eaglesong的設(shè)計(jì)思路以及它帶來(lái)的優(yōu)勢(shì)。
背 景
Nervos CKB 的共識(shí)機(jī)制(NC-Max)是改進(jìn)版的比特幣中本聰共識(shí)(Nakamoto Consensus, NC),它是就網(wǎng)絡(luò)參與者的支付權(quán)限來(lái)達(dá)成共識(shí)的。通過(guò)這種機(jī)制,只要滿足以下兩個(gè)條件,那么任意節(jié)點(diǎn)都可以對(duì)系統(tǒng)狀態(tài)進(jìn)行更新(這種更新也被稱(chēng)為出塊):
· 該區(qū)塊是有效的;
· 出塊者解出了一個(gè)叫作工作量證明的計(jì)算難題。
不斷嘗試解出這個(gè)難題并爭(zhēng)取下一個(gè)區(qū)塊出塊權(quán)的節(jié)點(diǎn)被稱(chēng)為礦工,礦工會(huì)在難題被解出時(shí)獲得相應(yīng)的獎(jiǎng)勵(lì)。中本聰共識(shí)降低了網(wǎng)絡(luò)所需的安全性,使其不受覆寫(xiě)歷史的攻擊,這是對(duì)算力分布的一種假設(shè),即超過(guò) 50% 的算力都在誠(chéng)實(shí)的礦工手中。
工作量證明難題是根據(jù)提出的塊來(lái)定義的;這保證了難題的解和區(qū)塊一一對(duì)應(yīng),并能夠唯一地證明這一個(gè)塊。具體來(lái)說(shuō),每個(gè)塊都有一個(gè)唯一的 block_header,用于驗(yàn)證待確認(rèn)隊(duì)列中的一系列交易及驗(yàn)證人。以往的工作量證明難題一般會(huì)包括找到一個(gè)有效的隨機(jī)數(shù),比如:
H(block_header || nonce) 《= t 。
這里面:
· t 表示難度系數(shù),該難度系數(shù)是周期性調(diào)整的,以控制平均出塊時(shí)間;
· || 表示比特串(Bit Strings)的串接;
· nonce 是一串隨機(jī)的比特;
· H 是一個(gè)單向加密哈希函數(shù)。
這個(gè)哈希函數(shù) H 有以下幾種作用:
· H 是公開(kāi)的,因此網(wǎng)絡(luò)上的任何節(jié)點(diǎn)都可以?xún)H通過(guò)驗(yàn)證上述公式來(lái)驗(yàn)證所提出的節(jié)點(diǎn)是否有效。此外,任何節(jié)點(diǎn)都可以在無(wú)需許可的情況下成為礦工。
· H 是難以預(yù)測(cè)的,因此礦工的最佳策略是隨機(jī)地猜測(cè) nonces 且不斷嘗試新的 nonce,直到滿足這個(gè)公式為止。這就意味著,礦工得到的獎(jiǎng)勵(lì)與他為保護(hù)整個(gè)網(wǎng)絡(luò)所付出的算力份額相匹配。
比特幣的哈希函數(shù) H 是兩次重復(fù)的 SHA2-256 運(yùn)算。從結(jié)果來(lái)看,重復(fù)這個(gè)函數(shù)兩次似乎有點(diǎn)多此一舉,因?yàn)榻甑拿艽a分析都未能產(chǎn)生真正有意義的攻擊。然而,在比特幣剛出現(xiàn)的時(shí)候,SHA1 正在面臨被破解的危機(jī),那時(shí)的 SHA2 則更新穎一些。當(dāng)然 SHA2 也有可能被 SHA3 取代,如果 SHA2 也到了和 SHA1 同樣的境地的話。
雖然用 SHA2 定義工作量證明難題對(duì)比特幣來(lái)說(shuō)是一個(gè)不錯(cuò)的選擇,但對(duì)后來(lái)的很多加密貨幣來(lái)說(shuō)卻不一樣。很多為了挖比特幣而特意開(kāi)發(fā)的專(zhuān)用設(shè)備現(xiàn)在已經(jīng)過(guò)時(shí)了,而采用相同工作量證明難題的新加密貨幣則可以重新啟用那些過(guò)時(shí)的設(shè)備。甚至那些沒(méi)有過(guò)時(shí)的設(shè)備也可以租出去,重新挖新的幣。因此,算力分布變得非常難以預(yù)測(cè),也可能遇到突然的算力大幅度波動(dòng)。同樣的道理也適用于為 SHA2 而量身定制的算法優(yōu)化,它可以降低函數(shù)的軟件計(jì)算成本,而不需要采用基于降低硬件成本的解決方案。
對(duì)于一種新的加密貨幣來(lái)說(shuō),使用一種其他的加密貨幣尚未使用過(guò)的工作量證明函數(shù)來(lái)定義工作量證明難題是非常可行的。對(duì)于 Nervos CKB 而言,我們會(huì)更進(jìn)一步,選擇一個(gè)全新的、完全不可能面臨過(guò)早優(yōu)化問(wèn)題的工作量證明函數(shù)。
另外,挖礦設(shè)備達(dá)不到預(yù)期的情況僅會(huì)出現(xiàn)在早期。長(zhǎng)遠(yuǎn)來(lái)看,部署專(zhuān)用的挖礦設(shè)備將會(huì)是非常有益的,這大大增加了攻擊網(wǎng)絡(luò)的難度。因此,對(duì)于一種新的加密貨幣來(lái)說(shuō),其工作量證明函數(shù)的前兩個(gè)設(shè)計(jì)目標(biāo),除了創(chuàng)新性以外,還應(yīng)該是簡(jiǎn)單的,這樣它能夠顯著地降低專(zhuān)業(yè)挖礦設(shè)備開(kāi)發(fā)的門(mén)檻。
第三個(gè)設(shè)計(jì)目標(biāo)顯然是安全性。雖然說(shuō),一個(gè)已知的漏洞對(duì)所有礦工來(lái)說(shuō)都是一樣的,大家都可以利用,但這只會(huì)導(dǎo)致更高的難度;而一個(gè)未公開(kāi)的漏洞可能會(huì)給發(fā)現(xiàn)這個(gè)漏洞的礦工帶來(lái)不一樣的挖礦優(yōu)勢(shì),這會(huì)導(dǎo)致他付出的算力和獎(jiǎng)勵(lì)不成正本。為了避免這種情況,最好的方法是為系統(tǒng)的安全性做一個(gè)強(qiáng)有力的論證。
Eaglesong
這時(shí),Eaglesong 的用武之地就顯現(xiàn)了。
Eaglesong 是專(zhuān)門(mén)為 Nervos CKB 工作量證明設(shè)計(jì)的新的哈希函數(shù),它也適用于其他需要安全哈希函數(shù)的應(yīng)用場(chǎng)景。其設(shè)計(jì)標(biāo)準(zhǔn)正是上面列出的那樣:創(chuàng)新、簡(jiǎn)單和安全。我們希望這樣的設(shè)計(jì)足夠新穎,并且想要為技術(shù)的進(jìn)步做一點(diǎn)小小的貢獻(xiàn),同時(shí),也希望這樣的設(shè)計(jì)仍然符合現(xiàn)實(shí)場(chǎng)景,以提出強(qiáng)有力的安全論證。為此,我們選擇使用 ARX 步驟(添加,循環(huán)然后 xor —— 是不是很簡(jiǎn)單?。?gòu)建的排列來(lái)實(shí)例化 Sponge 架構(gòu) (與 Keccak/SHA3 相同),并基于寬路徑策略為其安全性做出論證 (與 AES 的基本論證相同)。
安全到底意味著什么呢?讓哈希函數(shù)適用于(諸如此處描述的)工作量證明難題的這個(gè)屬性被稱(chēng)為多目標(biāo)單向性(Multi-target One-wayness)。該屬性是根據(jù)一場(chǎng)游戲定義的,在這個(gè)游戲中,會(huì)給對(duì)手一個(gè)目標(biāo)列表,如果他能夠在 H 下,對(duì)任意一個(gè)目標(biāo)生成單一原像,那么他就獲勝。除了一個(gè)個(gè)試錯(cuò)之外,如果對(duì)手沒(méi)有其他更好的方法,那么就意味著函數(shù) H 具有此屬性。然而,哈希函數(shù)通常還具有其他屬性,例如抗第二原像攻擊(Second Preimage Resistance),抗碰撞性(Collision Resistance)和相關(guān)不可行性(CorrelaTIon Intractability)。對(duì)一個(gè)屬性的攻擊不會(huì)自動(dòng)轉(zhuǎn)換為對(duì)另一個(gè)屬性的攻擊。因此,從方法論角度來(lái)看,僅用多目標(biāo)單向函數(shù)來(lái)實(shí)例化一個(gè)工作量證明難題是合理的。盡管如此,在 Eaglesong 的設(shè)計(jì)中,我們還是設(shè)定了輪數(shù),這樣一來(lái),我們就無(wú)法區(qū)分所得的結(jié)果是隨機(jī)排列的,還是在給定工作量的情況下排列的。Sponge 框架的結(jié)果是所得到的函數(shù)具有與哈希函數(shù)相關(guān)聯(lián)的所有安全屬性。
來(lái)源: Nervos 中文社區(qū)?