Shabal算法的優(yōu)點(diǎn)和缺點(diǎn)解析
近期區(qū)塊鏈中 PoC(Proof of Capacity)共識(shí)機(jī)制越來(lái)越火。在市面中正在使用 PoC 共識(shí)機(jī)制的幣就有 Burst、BTCHD 等。由于 PoC 的自身機(jī)制,使得其對(duì)加密函數(shù)的復(fù)雜度和運(yùn)算速度有一定的要求,而 Shabal 函數(shù)正好可以實(shí)現(xiàn)這個(gè)特殊的需求,所以在 BurstCoin 中,廣泛使用 Shabal 算法作為 PoC 共識(shí)的基礎(chǔ)。
Shabal 名字來(lái)源于一位名為 S′ebastien Chabal 的法國(guó)橄欖球運(yùn)動(dòng)員,因?yàn)槠浔荣悤r(shí)的勇猛表現(xiàn)和他那標(biāo)志性的胡須和長(zhǎng)發(fā),被人起了個(gè)綽號(hào)叫“穴居人”,可見(jiàn)當(dāng)時(shí) Shabal 的團(tuán)隊(duì)對(duì)于他們研發(fā)的算法的期望是很高的。
Shabal 函數(shù)是加密哈希函數(shù)的一種,由法國(guó)代理商(ANR)組織和研究的一個(gè)項(xiàng)目,其團(tuán)隊(duì)成員均為業(yè)界有一定影響力的人物。Shabal 在名字上與常用的另一種加密哈希函數(shù) SHA-256 相似,但實(shí)則完全不同。SHA-256 全稱為(Secure Hash Algorithm),即安全哈希算法,是美國(guó)國(guó)家安全局(NSA)設(shè)計(jì),美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究院(NIST)發(fā)布的一系列密碼散列函數(shù)的一個(gè)變體。而 Shabal-256 是 Shabal 函數(shù)的一個(gè)變體,作為標(biāo)準(zhǔn)哈希函數(shù)的競(jìng)爭(zhēng)者之一被提交給 NIST,雖然最后 Shabal 并沒(méi)有被選中,但是因?yàn)槠鋬?yōu)秀的性能和特點(diǎn),也越來(lái)越廣泛地被大家所認(rèn)知。
Shabal 算法
Shabal算法是一種很慢的算法,允許輸入任意長(zhǎng)度的有序位序列,甚至是一個(gè)空序列。也適應(yīng)任何長(zhǎng)度的字節(jié)流,但是由于考慮到安全性,適用長(zhǎng)度最好小于 2^7 位。輸入長(zhǎng)度可以是任何整數(shù)值和8的倍數(shù)。假如給定一個(gè)bit序列,按其左右順序索引編號(hào),即第一位的索引為0。使用左和右來(lái)描述有序的位序列:序列中的第一位稱為最左位,最后一位稱為最右位。
Shabal的使用的數(shù)據(jù)(數(shù)據(jù)的預(yù)處理):首先輸入序列,即以默認(rèn)方式添加額外的長(zhǎng)度不等于0并且是32的倍數(shù)的bit數(shù)加入序列,然后將序列分成8位組,此時(shí)一個(gè)組即為一個(gè)byte(字節(jié))。第一個(gè)字節(jié)由最左邊的八位組成,接下來(lái)的八位為第二個(gè)字節(jié),依此類推。由于輸入的序列長(zhǎng)度是32的倍數(shù),所以這個(gè)過(guò)程中會(huì)產(chǎn)生整數(shù)個(gè)字節(jié),并且字節(jié)數(shù)是4的倍數(shù)。每個(gè)字節(jié)的值都在0和255之間(包括255)。
此時(shí)字節(jié)值可以看做是以 2 為基底從 8 位的序列中派生出來(lái)的,此時(shí)最左邊的字節(jié)是最重要的(其代表了數(shù)的正負(fù))。如果一個(gè)八位的位組被表示為 b0,b1,b2.。.b7,那么這個(gè)字節(jié)的值等于
在 byte 字節(jié)產(chǎn)生時(shí),會(huì)給最左邊的位自動(dòng)設(shè)置為 1(即表示為一個(gè)正數(shù))。所以當(dāng)所給這個(gè)字節(jié)輸入一個(gè) 8 位的數(shù)時(shí),其數(shù)的最大值是 128,因?yàn)樽钭筮叺奈粩?shù)不表示數(shù)的大小,而表示的是數(shù)的正負(fù)。
Shabal 算法的優(yōu)點(diǎn)和缺點(diǎn):
優(yōu)點(diǎn):
1. 設(shè)計(jì)簡(jiǎn)單:Shabal 在設(shè)計(jì)的一個(gè)目標(biāo)就是保持簡(jiǎn)單的同時(shí)保證其安全性。
2. 安全性:Shabal 的結(jié)構(gòu)式不可微的,并且有足夠良好的次原象攻擊抗性(這一點(diǎn)是可以被證明的),并且這一點(diǎn)也是 Shabal 算法與其他的哈希算法相比的主要優(yōu)勢(shì)之一。
3. 性能相對(duì)較好:Shabal 中沒(méi)有使用其他加密算法中非常流行的 S-Box ,因?yàn)樗男阅艹杀痉浅8?,?duì)于硬件和軟件都是如此。雖然使用它能夠抵抗各種各樣的攻擊,但是在這里并沒(méi)有采用它,所以 Shabal 能夠擁有相對(duì)較好的性能
缺點(diǎn):
1. 速度較慢
上圖表示了在不同的平臺(tái)中不同算法的表現(xiàn)。Shabal 的表現(xiàn)處于中下游水準(zhǔn),所以Shabal是一個(gè)相對(duì)來(lái)說(shuō)較慢的算法。
2.數(shù)據(jù)量相對(duì)較大:
上圖表示了不同算法的數(shù)據(jù)量,Shabal 算法也處于一個(gè)比較尷尬的位置,相對(duì)于其他算法來(lái)說(shuō),Shabal的數(shù)據(jù)量是比較大的。