主页 > 合法imtoken钱包下载 > 揭秘区块链核心技术的“哈希与加密算法”

揭秘区块链核心技术的“哈希与加密算法”

合法imtoken钱包下载 2023-01-16 23:31:57

这里写图片描述

众所周知,区块链的关键技术组成部分有:P2P网络协议、共识机制、密码学、账户和存储模型。在这些技术中比特币的加密算法,密码学和共识机制是核心。那么今天,我们就来详细聊一聊密码学,看看密码学是如何在区块链中应用的。

首先,我们需要知道区块链中使用了哪些加密算法?其实有两大类:

- 哈希算法

- 非对称加密算法

一、区块链中的哈希算法

哈希算法是区块链中使用最多的算法,广泛用于构建区块和确认交易的完整性。

它是一种数学函数算法,也称为哈希算法比特币的加密算法,需要具备三个基本特征:

1.它的输入可以是任意大小的字符串

2.它产生一个固定大小的输出

3.计算效率高,即可以在合理的时间内计算出输出值

如果要求哈希算法具有密码安全性,我们还要求它具有以下三个附加属性:

比特币的加密算法

1. 防撞:

意味着对于两个不同的输入,必须产生两个不同的输出。如果两个不同的输入产生相同的输出,那么就没有抗碰撞性,或者说抗碰撞性很弱。

2. 隐身:

也叫不可逆性,意思是在y = HASH(x)中,通过输入值x,可以计算出输出值y,但是不能从y值计算出x值。为了保证不可逆性,x的值必须取自一个非常广泛的集合,很难通过计算来推断x的值。

3. 益智游戏:

这个特性可以理解为拼图公平友好,比如算法中的y = HASH(x),如果y是已知值,想要得到x值,就必须暴力枚举,尽量不断地做,没有比这更好的方法了,没有捷径。

哈希算法有很多种,比特币使用的主要是SHA-256算法。

除此之外,还有其他流行的哈希算法,如MD5、SHA-1、SHA-2 (SHA-224、SHA -256、SHA-384、SHA-512)、SHA-3等,其中MD5、SHA-1已被证明无强抗碰撞性,安全性能不够高,市场上不再推荐。

我们以比特币为例,看看哈希算法的具体应用:

在比特币中,使用哈希算法算法生成交易的数据摘要,当前区块包含前一个区块的哈希值,下一个区块包含当前区块的哈希值,所以它们是连通的由一个组成一个哈希指针。链表,如下图:

比特币的加密算法

这里写图片描述

以上只是示意图,那么在实际的比特币系统中,每个区块包含哪些内容:

这里写图片描述

关注上图:

- Prev Block:记录一个块的hash地址,32字节

- Merkle Root:是记录当前区块中所有交易信息的数据摘要哈希值,32字节

- Nonce:一个随机值,需要用它来寻找某个条件的哈希值(挖矿),4字节

以上只说明了几个关键领域,其他领域应该从字面上理解就很容易理解了,就不一一解释了。

这所有的字段共同组成了区块头(block header),然后需要对区块头进行两次hash,计算出来的值就是当前比特币区块的hash值。因为比特币系统要求计算出来的hash值满足一定的条件(小于一定的值),所以我们需要不断的遍历Nonce值,计算出一个新的hash值才能满足要求,只有满足要求的hash值是找到了,那么这是一个合法的区块(这一系列的Action也叫挖矿)

示例:
SHA-256(SHA-256 (Block Header)

比特币的加密算法

让我们看看上面的另一个重要字段:Merkle 树字段。

Merkle tree 又称默克尔树,也是哈希算法的重要应用。

它实际上是用哈希指针构建的二叉树或多叉树。

默克尔树如图:

这里写图片描述

树的顶部称为Merkle Root,Merkle Root也是一个哈希值。是怎么计算的?

在比特币中,对每笔交易进行一次哈希计算,然后将每2笔交易的哈希值组合起来做一个哈希。如图所示,交易A的哈希值为H(A)。 B的hash值为H(B),将这两个交易的hash合并后为H(hA|hb)。这样,计算继续向上,最终的根就是Merkle Root。

Merkle 树结构在比特币和以太坊中都有使用,但以太坊为了实现更复杂的功能而拥有三棵 Merkle 树。

至此,已经介绍了哈希算法在区块链中的应用。接下来,我们来看看非对称加密算法。

二、区块链中的非对称加密算法

比特币的加密算法

区块链中一个很关键的点就是账户问题,但是比特币没有账户的概念是的,那么如何进行转账交易呢?

这里要先介绍一下区块链中的非对称加密技术。

非对称加密技术有很多,如:RSA、ECC、ECDSA等,比特币中使用了ECDSA算法。

ECDSA 是美国政府标准,它使用椭圆曲线的升级版本。该算法经过多年仔细的密码分析,被广泛认为是安全可靠的。

所谓非对称加密是指我们在加密和解密数据时需要使用两个不同的密钥。例如,我们可以使用 A 密钥对数据进行加密,并使用 B 密钥对其进行解密。反过来,我们可以用B加密,用A解密。那么如果我想给某人发信息,我可以先用A加密,然后再把密文发给她。得到密文后,她可以用手中的B密钥解密。这两个密钥,一个叫公钥,一个叫私钥。

在比特币中,每个用户都有一对密钥(公钥和私钥),比特币系统使用用户的公钥作为交易账户。

我们先看下面这张图:

这里写图片描述

如图所示,在第一条交易记录中,是用户U0发起交易,如何将代币支付给用户U1?

1.首先,用户U0写入交易信息:数据(明文,例如:用户U0向用户U转账100元1)

比特币的加密算法

2. 用户U0使用哈希算法计算交易信息得到H = hash(data),然后用自己的私钥对H进行签名,即S(H)。这一步其实是为了防止交易信息被篡改

3.然后基于区块链网络,将签名S(H)和交易信息数据传递给用户U1

3.用户U1使用用户U0的公钥解密S(H),得到交易信息的哈希值H。

4.同时用户U1也使用哈希算法计算交易信息数据,得到H2 = hash(data)

5. 对比以上两个哈希值,如果H1==H2,则交易合法。说明用户U0确实拥有真实的私钥,有权发起自己账户的交易。

6.网络中的每个节点都可以参与上述验证步骤。

这个例子是比特币交易的签名过程,它结合了哈希算法和非对称算法对比特币交易的数字签名。

另外,在比特币中,公钥和私钥的生成,地址的生成也是通过非对称加密算法来保证的。

以上是核心技术的哈希算法和加密算法在区块链系统中的应用。欢迎交流。

本文首发于微信公众号“不止于思考”。欢迎关注和交流互联网认知、工作管理、大数据、Web、区块链技术。

这里写图片描述

p>