区块链数字货币四种哈希算法区别比较

来源:知乎  

作者:刘杨

谁能想到,我们之前用作校验文件,核验数据的一种算法,现在却奠定了区块链数字货币帝国大厦,这个算法有很多名字,比如一般叫做哈希算法(HASH的英文而来),有的也称在杂凑算法(很形象~~)或者散列算法等(以下我们统称哈希)。那么现在我们就来解开这种算法的层层面纱,在本文中,我们将解析加密货币中最常用的四种加密哈希函数的特性和差异。但在此之前,还是需要了解哈希的含义。

什么是HASH(哈希)

简单来说,哈希意味着输入任意长度的字符串通过密码运算来实现固定长度的输出。在像比特币这样的加密货币的情况下,交易被视为输入并通过哈希算法(比特币使用SHA-256)运行(该算法提供固定长度的输出)。

先了解下哈希算法是如何工作的。我们以SHA-256(256位安全哈希算法)为例。

在SHA-256的情况下,无论你的输入有多大或多小,输出总是有一个固定的256位长度。这对于处理大量的数据和事务校验时非常关键,这里先看看哈希函数的各种特性以及它们在区块链中的实现方式。

加密哈希算法特性

哈希算法其特俗的特性使得非常适合密码应用,加密哈希算法具有以下几个特性:

区块链数字货币四种哈希算法区别比较_第1张图片

因为我们已经知道从它的哈希值中确定原始输入并不是“不可能”的。举个例子吧。

假设你掷骰子,输出是骰子出现的数字的哈希。我们将如何确定原始号码是什么?很简单,所要做的就是从1-6中找出所有数字的哈希值并进行比较。由于哈希函数是确定性的,所以特定输入的哈希总是相同的,因此 我们可以简单地比较哈希并找出原始输入。

但是,只有在给定的数据量非常少的情况下,这才有效。当你有大量的数据时会发生什么?假设你正在处理128位哈希。唯一必须找到原始输入的方法是使用“暴力群举”。暴力群举基本上意味着你必须选取一个随机输入,对其进行哈希,然后将输出与目标哈希进行比较并重复,直到找到匹配。

如果你使用这种暴力方法后:

最好的结果: 你可能在第一次尝试时获得答案,不过这只是理论上的可能,因为他的概率是2的128次方分之1(自己去算算)。

最坏的情况:你在2 ^ 128 - 1次之后得到答案。基本上,这意味着你会在所有数据的末尾找到你的答案。

平均情景:在2 ^ 128/2 = 2 ^ 127次之后, 你会在中间的某处找到它。从这个角度来看,2 ^ 127 = 1.7 *10 ^ 38。换句话说,这是一个巨大的数字。

所以,虽然可以通过暴力方法来打破单向性,但同时也要有巨大的算力投入。

区块链数字货币四种哈希算法区别比较_第2张图片

什么是生日悖论?

如果你在街上碰到任何陌生人,那么你们两个都有相同的生日的可能性非常低。事实上,假设一年中的所有日子都有生日的可能性,另一个人分享你的生日的机会是1/365,这是0.27%:概率非常低。

不过,如果你在一个房间里聚集20-30人,那么两个分享完全相同生日的人的几率会大幅度上升。

区块链数字货币四种哈希算法区别比较_第3张图片

生日悖论

这是基于一个简单的概率原理:

假设你有一个事件发生N种不同的可能性,那么你需要N个随机项的平方根,以使它们有50%的碰撞几率。

因此,将这个理论应用于生日时, 你有365种不同的生日可能性,所以 你只需要Sqrt(365),即约23%,随机选择两个人分享生日的可能性为50%。

假设你有一个128位哈希,有2 ^ 128种不同的可能性。通过使用生日悖论,你有50%的几率在sqrt(2 ^ 128)= 2 ^ 64的情况下打破防碰撞机制。

正如你所看到的,打破防碰撞要比打破单向性容易得多。所以,如果你使用的是SHA-256这样的函数,假设如果H(A)= H(B),那么A = B是可以认为成立。

那么,你如何创建一个抗碰撞的哈希函数?为此,我们使用一种称为Merkle-Damgard的结构。

什么是Merkle-Damgard结构?

该结构非常简单,并且遵循以下原则:给定短消息的防碰撞哈希函数,我们可以为长消息构造防碰撞哈希函数。

区块链数字货币四种哈希算法区别比较_第4张图片

图片来源:youtube

记住上面的图表,注意以下几点:

区块链数字货币四种哈希算法区别比较_第5张图片

几种加密哈希函数的举例与比较

既然已经了解了哈希方法以及加密哈希函数的特性,让我们熟悉一些加密货币中最常用的加密哈希函数。

先把几种加密哈希算法列出来:

区块链数字货币四种哈希算法区别比较_第6张图片

安全哈希算法(SHA)

安全哈希算法是由美国国家标准与技术研究院(NIST)发布的美国联邦信息处理标准(FIPS)的一系列加密哈希函数。SHA由以下算法组成:

区块链数字货币四种哈希算法区别比较_第7张图片
区块链数字货币四种哈希算法区别比较_第8张图片

图片来源:维基百科

让我们仔细看看SHA-256和SHA-3。

SHA-256

SHA-256是一个SHA-2函数,它使用32个单词,而不是使用64位单词的SHA-512。比特币在以下两种情况下使用SHA-256:

采矿。

创建地址。

采矿:

比特币采矿涉及矿工解决复杂的计算难题,以找到一个块,然后将其附加到比特币区块链。就是我们经常称的工作量证明(proof-of-work),它涉及SHA-256哈希函数的计算。

创建比特币地址

SHA-256哈希函数用于哈希比特币公钥以生成公共地址。哈希密钥为身份认证增加了一层额外的保护。此外,哈希地址的长度仅比存储更好的比特币公钥更短。

SHA-256运行实例:

输入:Hi

输出:98EA6E4F216F2FB4B69FFF9B3A44842C38686CA685F3F55DC48C5D3FB1107BE4

SHA-3

如上所述,这种算法以前被称为keccak,并被以太坊使用。它是在non-NSA设计师的公开竞赛之后创建的。SHA-3使用“海绵(sponge)机制”。

什么是海绵机制?

区块链数字货币四种哈希算法区别比较_第9张图片

海绵功能是具有有限内部状态的一类算法,其获取任意长度的输入比特流并产生预定长度的输出比特流。

在继续之前,我们需要定义一些术语:

我们知道,在海绵功能中,数据被“ 吸收 ”到海绵中,然后将结果“ 挤出 ”。

所以有一个“ 吸收 ”阶段和一个“ 挤压 ”阶段。

SHA-3举例:

输入:Hi

输出:

154013cb8140c753f0ac358da6110fe237481b26c75c3ddc1b59eaf9dd7b46a0a3aeb2cef164b3c82d65b38a4e26ea9930b7b2cb3c01da4ba331c95e62ccb9c3

RIPEMD-160哈希函数

RIPEMD是由比利时鲁汶的Hans Dobbertin,Antoon Bosselaers和Bart Preneel在鲁汶Katholieke大学的COSIC研究小组开发的一系列加密哈希函数,并于1996年首次发布。

虽然RIPEMD基于MD4的设计原则,但其性能与SHA-1非常相似。RIPEMD-160是这种哈希函数的160位版本,通常用于生成比特币地址。

比特币公钥首先通过SHA-256哈希函数运行,然后通过RIPEMD-160运行。这样做的原因是因为160位的输出比256位小很多,这有助于节省空间。

除此之外,RIPEMD-160是唯一性哈希函数,可以产生最短哈希,其唯一性仍然得到充分保证。

区块链数字货币四种哈希算法区别比较_第10张图片

图片来源:维基百科

上面的图像显示了RIPEMD-160哈希算法压缩函数的子块快照。

RIPEMD -160实例:

输入:Hi

输出:242485ab6bfd3502bcb3442ea2e211687b8e4d89

CryptoNight哈希函数

现在我们拥有由Monero使用的CryptoNight哈希函数。与比特币不同,Monero希望他们的采矿尽可能地不利于GPU。他们可以做到这一点的唯一方法是让他们的哈希算法难以记忆。

输入CryptoNight

CryptoNight是一种内存硬件哈希函数。它被设计为在GPU,FPGA和ASIC体系结构上无法有效计算。CryptoNight的工作原理如下:

该算法首先用伪随机数据初始化一个大暂存器。

之后,大量的读/写操作发生在伪随机地址上

包含在便签簿中。

最后,整个暂存器被哈希以产生最终值。

下图显示了CryptoNight哈希算法的示意图。

区块链数字货币四种哈希算法区别比较_第11张图片

CryptoNight哈希算法的示意图。

CryptoNight实例:

输入:This is a test

输出:a084f01d1437a09c6985401b60d43554ae105802c5f5d8a9b3253649c0be6605

结论

加密货币中最常用的四种哈希算法基本都在这里了。对他们的工作方式有一个基本的认知将让我们更好的理解各类数字货币的区别(比如采矿)。

你可能感兴趣的:(区块链数字货币四种哈希算法区别比较)