Shabal函数没有使用S-Box 可满足较难的加密函数和运算速度

2019-08-15 17:00:21
来源: 新浪

  【摘要】 Shabal函数没有使用S

近期区块链中 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团队)