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

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

imtoken钱包下载 2023-10-23 05:09:18

【IT168点评】众所周知,区块链的关键技术构成有:P2P网络协议、共识机制、密码学技术、账户和存储模型。 在这些技术中,密码学和共识机制是核心。 那么今天我们就来详细聊聊密码学,看看密码学技术在区块链中是如何应用的。

首先,我们要知道区块链使用的密码算法有哪些? 其实分两类:

·哈希算法

·非对称加密算法

1. 区块链中的哈希算法

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

它是一种数学函数算法,又称哈希算法,需要具备三个基本特征:

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

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

3、可以进行有效的计算,即可以在合理的时间内计算出输出值

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

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

隐蔽性:又称不可逆性,是指在y = HASH(x)中,输入值x可以计算出输出值y,但不能通过推导y的值来计算出x的值。 为了保证不可逆性,x的值必须来自一个非常宽的集合,这样就很难通过计算推导出x的值。

Puzzle-friendly:这个特性可以理解为拼图是公平友好的。 比如算法中,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:记录签署一个区块的哈希地址,32字节

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

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

上面只解释了几个关键字段,其他字段通过字面量应该很容易理解,就不一一解释了。 所有这些字段共同组成了区块头(block header),然后区块头需要进行两次哈希计算比特币二次加密,计算出的值就是当前比特币区块的哈希值。 因为比特币系统要求计算出的哈希值满足一定的条件(小于某个值),所以我们需要不断遍历Nonce值,计算出新的哈希值来满足要求。 只有找到符合要求的哈希值,那么这才是一个合法的区块(这一系列动作也叫挖矿)

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

我们再来看看上面另一个重要的字段:Merkle树字段。 默克尔树简称默克尔树,也是哈希算法的一个重要应用。 它实际上是用哈希指针构建的二叉树或多树。

Merkle树如图所示:

比特币加密原理_比特币加密病毒恢复_比特币二次加密

树的顶部称为 Merkle Root。 Merkle Root 也是一个哈希值。 它是如何计算的?

在比特币中,对每一笔交易都进行一次哈希计算,然后将每两笔交易的哈希值组合起来做一个哈希值。 图中,交易A的哈希值为H(A),交易B的哈希值为H(B),将这两个交易的哈希合并后,得到H(hA|hb)。 这样比特币二次加密,组合计算一直进行下去,直到最后的根是Merkle Root。

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

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

2. 区块链中的非对称加密算法

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

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

非对称加密技术有很多种,例如:RSA、ECC、ECDSA等,比特币中使用的是ECDSA算法。 ECDSA 是美国政府标准,使用升级版的椭圆曲线,该算法经过多年仔细的密码分析,被广泛认为安全可靠。

所谓非对称加密,就是我们在对数据进行加密和解密时,需要使用两个不同的密钥。 例如,我们可以使用 A 密钥加密数据,然后使用 B 密钥解密数据。 反之,我们也可以先用B加密,再用A解密。 所以如果我要给某人发信息,我可以先用A加密,然后把密文传给她。 她得到密文后,就可以用手中的B密钥解密。 在这两个密钥中,一个称为公钥,另一个称为私钥。

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

比特币加密原理_比特币加密病毒恢复_比特币二次加密

从图中可以看出,在第一条交易记录中,交易是由用户U0发起的。 如何支付代币给用户U1?

首先,用户U0写入交易信息:data(明文,例如:用户U0转100元给用户U1)

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

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

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

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

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

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

本例为比特币交易的签名过程,结合哈希算法和非对称算法对比特币交易进行数字签名。 另外,在比特币中,公私钥的生成以及比特币地址的生成,也是通过非对称加密算法来保证的。

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