赣州新闻网

首页 / 科技

区块链中的散列函数及Filecoin的选择

2020-03-30 · 赣州新闻网 · 科技

摘要: 技术解码 |区块链中的散列函数及Filecoin的选择

散列(hash)函数是区块链所利用的技术中的最为基础的部分了,也是非常重要的部分之一。一个好的散列函数在一个密码体系中的地位也十分重要。Filecoin作为v m x P s新一代的区块链,在散列函数的采用上也十分大胆。其中Posaidon就是比较新的散列算{ z k [ | 5 dsh)再熟悉不过了。Hash表% 2 } o是一种基本的数据结构,而这种数据结构是依靠hash函数来进行索引和访问的。由于Hash函数在寻址上具有很高u 3 ^ v j的效率上的优势,算法$ 0 h _复杂度基本上是O(1)。因此,Hash函数被广泛应用与数据库和其他数据处理系统中。

简单/ 8 1 L f } + k M来说,散列函数就m J ) J X是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。通常输入的数据长度要大于运算得出的散列值,同时因为这个散列值一定程度上可以代表原数据,因此也被成为摘要。工程师比较熟悉的 mdR [ T U v K E X5 就是使用最为广泛的 hashi S h V 7 函数,一般用来验证数据的完整性。

因为散列值是一个固定长度,比如说md5sum的输出是128位,也就是16字节,那么这个散列R 4 j ; W u值的所有可能性就是m 0 q 2^128。这个范围和IPv6的地址范围差不多。

一个 hash 函数可以由以下特性来进行评估:

  • 均匀度(Uniformity):前面提到了一个散列值的空间,那么一个hash函数对于一个输入的运算结果落到这个散列值空间中的概率最好是均等的。d d 7这样可以降低碰撞率(不同的输入得出相同结果的比率)

  • 效率(Efficiency):hash函数本身的计算复杂度也 ) c是一个考量因素。在很多场合,要求快速响应,因此最好计算简单。但是太简单的hash^ ! 5 ) b现。而广泛使用的SHA256函数的碰撞安全性是 md5 的 2^64 倍,

    IPFS 中使用的散列函数

    IPFS 与传统存储系统的一个E U F / | E S重要区别在于采S / f 6 u } n } @用内容寻址。所谓内容寻址就是对内容做has* K ] ) 7 f sh运算,把散列值作为内容的索引。由于hash函数的确定性和唯一性,可L r , b 4以用散列值来s + { a /代表数据。

    IPFS的CID(内容标识,也就是散列之)在数据格式的定义上采用MultiHash,也就是说,是一个可扩展的数据格I P 4 /式和方案。用户可以根据需要随时支持新的协议。其格式大致如下:

    大家常见的以 QG 6 K v n [ _ 4 m 打头的CID是采用SHA256算法的,Qm是SHA256的basI f ! ? { ;e58编码后的结果。当前,IPFS支持的常见hash算法包括:

    • SHA-1:160bits. ! i V o k K j,

    • SHA-2-25L & N F ) 86, SHA-2-512

    • SHA-3-256

    • blake2b-256

    注1: SHA家族的算法,由美国国家安全局(NSA)所设计,并由美国国家标准与j K 0技术研究院(NIST)发布,是美国的政府标准。SHA-xF ) a 0 _ [表示第x代。

    注2: BLAKE2的改进版本于2012年12月21日宣布推出。它由Jean-Philippe Aumasson、Samuel Neves、Zooko Wilcox-O\'Hearn和Christian Winnerlein设计,用于取代广泛使用但已被攻破的MD5和SHA-1算法。Blake2的特点是计算更快,安全性高。

    由于 Filecoin 的代码基于IPFS之上,因此IPFS中使用的hash算法,也就自然在Filecoin中被采用4 ? U y M 2 r o P 7 ] y +。因此,blake2在F| ^ ?ilecoin中被广泛采用。

    在Filecoin中 blake2b 使用在以下一些地方:

    • blake2b-256 :IPLD,用于区块$ % W D t I k C和消息

    • blake2b-4 :用于校验

    • bl( j r n V Q 6ack2b-160:用于取代RIPEMD-160来生成 secp25K 5 7 K m 86k1 地址,也就是现在的y 4 # k . + v } { t1 地址,通常是客户端采用的地址

    Filecoin区别于现有区块链的一个显w z 3 V A :著特点是它的证明系统,也就是h t % c n其复制证明和y k S j时空证明机制。在这一套机制中,hash算法也被广& i = =泛用到。

    Feistel算法

    Feistel 算法本来| S I j p y L是一个k | U K对称密码算法,采用数据块链式加密的方式。没有太高的复杂度。为什么会用来作为hash函数呢?在2005年,有人就发现采用Feistel算法可以实现一个完全散列均匀的分布,而且满足随= / 2 | ^ Q : I机性。因此,这个刚好切合 SDR 中exp parents node的选取规则。

    基于Feistel算法的hash函+ 4 I ) _ ; % 8数,又成为F-Hash。Filecoin采用F-Hash来为SDR过程中的每一个节点计算找寻父节点,这些父节点随机分布,没有规律,同时,这些父节点又完全均匀地分布在整个r N x q A + Gsector的空间中。这简直就是使用F-Hash的最佳场合。

    PedersenHash

    区块链业界对零知识证明进行孜孜不倦的探索者就是令人尊敬的ZCash团队。ZCash团队一直在追寻如何更快S ? x { ~ g 9 9 ?更安全地进行零知识证明,

    在ZCash中,PedersenHash 是为 PedersenCommitment服务,这在ZCash的交易中起到举足轻重的作用。Filecoin的复制证明和时空证明采用与ZCash类似的零知识证明,所以顺理成章地采用Pedersw } # 9 LenHash。

    PoseidonHash

    但是,技术在不断进步。随着ZCash的研究,2019年5月,i j A Q / T一篇论文横空出世:Starkad and Poseidon: New Hash FunctionsV y 6 for Zero-Knowledge ProQ { s c y d _of Systems。此论文号称,采用Poseidon,其约束复杂度相对Pedersen而言,减少8倍。因此电路k ; 3 h = N复杂度大大减小。& V | i # l Q证明和验证也就更快了。

    在这9 ~ Z ) b种情况下,F_ ^ D Gilecoin团队毅然决定,在Filecoin的证明系统中,c p ! ~ @ I a 2与零知识证} j 3 5 4 d ^ o明N 5 O S v * ~ x相关的hash算法采Z h P ; = z q p用 Pedersen Poseidon。

    用得最多的还是 SHA256

    尽管前面提到多种不同的Has* d Z L lh算法,但是,在Filecoin中,SHA256还是使用的最多的一种。特别是在SDR的第一个阶j s I _ Q 8 y n f段,进行每一层的计算之中,所有的node计算全部采用SHA256。

    这带来一个问题,那就是对SHA又特殊支持的芯片效率要高很多。这也就是为什么Filecoin团队最近一直在暗示AMD CPU效率更高的原因,因为AMD的多数芯片都支持 SHA-NI,而Intel目前并不支持。A { ! g 4 { Y G i这个问题是的Intel设备非常尴尬,也使得市场处于一个不平衡的状态。

    既然如此,为什么Filecoin团队不换一个Hash算法,来达成某种平衡,不同的设备都可以进入网络进行竞争对Filecoin网络来说不是更好吗?但@ f y 3 d X是,我的判断u n g 是,并不会。2 N ` % ( B & a 5因为这里又充分的理由采用SHA-256。具体原因是什么,] S 2 u & 7 / m留给读者自己思考。

    (1、 内容来自链得得内容开放平台“得得M Y ; * ~ l a号”,稿件内容仅代表作者观点$ n 4 ! } 5 % $,不代表链得得官方立场。2、 凡“得得号”文章,原创性和内容的真实性由投稿人保证,如果稿件因抄袭、作假等行为导致的法律后果,由y k {投稿人本人负责。3、 得得号平台发; p p r h ! h布文章,如有侵权、违规及其他不当言论内容,请广大读者监督,一经证实,平台会立即下线。如遇文章内容问题,请发送至邮箱:chengyiniu@chaindd.com)

文章代表交易国家大余选择函数区块链散列