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