近期區塊鏈中 PoC(Proof of Capacity)共識機制越來越火。在市面中正在使用 PoC 共識機制的幣就有 Burst、BTCHD 等。由于 PoC 的自身機制,使得
近期區塊鏈中 PoC(Proof of Capacity)共識機制越來越火。在市面中正在使用 PoC 共識機制的幣就有 Burst、BTCHD 等。由于 PoC 的自身機制,使得其對加密函數的復雜度和運算速度有一定的要求,而 Shabal 函數正好可以實現這個特殊的需求,所以在 BurstCoin 中,廣泛使用 Shabal 算法作為 PoC 共識的基礎。
Shabal 名字來源于一位名為 S´ebastien Chabal 的法國橄欖球運動員,因為其比賽時的勇猛表現和他那標志性的胡須和長發,被人起了個綽號叫“穴居人”,可見當時 Shabal 的團隊對于他們研發的算法的期望是很高的。
Shabal 函數是加密哈希函數的一種,由法國代理商(ANR)組織和研究的一個項目,其團隊成員均為業界有一定影響力的人物。Shabal 在名字上與常用的另一種加密哈希函數 SHA-256 相似,但實則完全不同。SHA-256 全稱為(Secure Hash Algorithm),即安全哈希算法,是美國國家安全局(NSA)設計,美國國家標準與技術研究院(NIST)發布的一系列密碼散列函數的一個變體。而 Shabal-256 是 Shabal 函數的一個變體,作為標準哈希函數的競爭者之一被提交給 NIST,雖然最后 Shabal 并沒有被選中,但是因為其優秀的性能和特點,也越來越廣泛地被大家所認知。
Shabal 算法
Shabal算法是一種很慢的算法,允許輸入任意長度的有序位序列,甚至是一個空序列。也適應任何長度的字節流,但是由于考慮到安全性,適用長度最好小于 2^7 位。輸入長度可以是任何整數值和8的倍數。假如給定一個bit序列,按其左右順序索引編號,即第一位的索引為0。使用左和右來描述有序的位序列:序列中的第一位稱為最左位,最后一位稱為最右位。
Shabal的使用的數據(數據的預處理):首先輸入序列,即以默認方式添加額外的長度不等于0并且是32的倍數的bit數加入序列,然后將序列分成8位組,此時一個組即為一個byte(字節)。第一個字節由最左邊的八位組成,接下來的八位為第二個字節,依此類推。由于輸入的序列長度是32的倍數,所以這個過程中會產生整數個字節,并且字節數是4的倍數。每個字節的值都在0和255之間(包括255)。
此時字節值可以看做是以 2 為基底從 8 位的序列中派生出來的,此時最左邊的字節是最重要的(其代表了數的正負)。如果一個八位的位組被表示為 b0,b1,b2...b7,那么這個字節的值等于
在 byte 字節產生時,會給最左邊的位自動設置為 1(即表示為一個正數)。所以當所給這個字節輸入一個 8 位的數時,其數的最大值是 128,因為最左邊的位數不表示數的大小,而表示的是數的正負。
Shabal 算法的優點和缺點:
優點:
1. 設計簡單:Shabal 在設計的一個目標就是保持簡單的同時保證其安全性。
2. 安全性:Shabal 的結構式不可微的,并且有足夠良好的次原象攻擊抗性(這一點是可以被證明的),并且這一點也是 Shabal 算法與其他的哈希算法相比的主要優勢之一。
3. 性能相對較好:Shabal 中沒有使用其他加密算法中非常流行的 S-Box ,因為它的性能成本非常高,對于硬件和軟件都是如此。雖然使用它能夠抵抗各種各樣的攻擊,但是在這里并沒有采用它,所以 Shabal 能夠擁有相對較好的性能
缺點:
1. 速度較慢
上圖表示了在不同的平臺中不同算法的表現。Shabal 的表現處于中下游水準,所以Shabal是一個相對來說較慢的算法。
2.數據量相對較大:
上圖表示了不同算法的數據量,Shabal 算法也處于一個比較尷尬的位置,相對于其他算法來說,Shabal的數據量是比較大的。
Shabal
由上述內容可以知道,Shabal 算法是很適合 PoC 共識的一種算法,但是在數字貨幣中,并不是只有一種加密算法存在,每一種幣都會涉及到幾種算法,比如 BurstCoin中不僅僅使用了 Shabal 256,還使用了 Curve25519、RIPEMD160 等等,在不同的地方實現不同的功能,在此先簡單介紹,如果想要了解更多,請關注我們。與此同時,第一個 Shabal256 應用將在 Gravity 計算平臺啟用,敬請關注。(Gravity團隊)