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