主页 > imtoken钱包劫持 > 区块链节点间的数据验证:哈希值与非对称加密

区块链节点间的数据验证:哈希值与非对称加密

imtoken钱包劫持 2023-08-31 05:11:42

在前面的内容中,我们学习了如何在区块链网络中建立连接和相互协作。了解了这些知识之后,有没有想过这两个节点是如何保证传输数据的正确性以及判断是否没有改变的呢?

在本期中,我们将分析区块链网络中节点之间如何进行数据验证,以确保数据的完整性和真实性。其实很简单,看完就知道了!

一、先了解一个概念:哈希值

哈希值是一串固定长度的二进制值,通过哈希算法(Hash algorithm)计算得到。

哈希算法可以将任意长度的二进制值映射为较短的定长二进制值,这个小的二进制值称为哈希值。哈希值是一段数据的唯一且极其紧凑的数字表示。如果被散列的数据甚至改变了段落的一个字母,随后的散列将产生不同的值。

在计算上不可能找到两个不同的输入哈希到相同的值,因此数据的哈希可以验证数据的完整性;通常用于快速查找和加密算法。

用人类的话来说,哈希值是通过哈希算法计算出一条数据得到的值。这个值有两个属性:单向和唯一。

单向

哈希值不能反转得到原始数据。例如,一个数字“1234”可以通过哈希算法得到哈希值A交易区块哈希值如何生成,但是没有办法通过哈希值A解密原来的数字“1234”。

独特性

只有对完全相同的数据进行哈希运算得到的哈希值是相同的,也就是说哈希值和原始数据是唯一对应的,不会出现从两个不同的数据得到相同哈希值的情况。

哈希加密的强大之处在于我不在乎你的内容是什么,只要内容一致,哈希值就一致。这样,你就可以简单粗暴地比较两条信息是否一致,而不必关心数据的细节。

正是由于哈希值的这一特性,哈希算法在区块链网络中发挥着举足轻重的作用。

二、了解另一个概念:非对称加密

非对称加密算法是一种保存密钥的方法。非对称加密算法需要两个密钥:一个公钥(public key)和一个私钥(private key)。公钥和私钥是一对。如果数据是用公钥加密的,只有对应的私钥才能解密;如果数据是用私钥加密的,那么只有对应的公钥才能用来解密数据。

如果您对加密算法和公钥和密钥一无所知,您可以将它们理解为两个密码。如果一个密码锁定了数据,您只能使用另一个密码解锁。

由于使用两个不同的密钥来加密和解密数据,所以这种算法称为非对称加密算法。在区块链网络中,节点的公钥对全网公开,私钥只属于该节点。

三、第一个记录交易的节点做了什么?

以比特币网络中的一个交易信息为例,看看记录交易节点和验证交易节点是如何配合的。

例如,如果在节点 001 上发生了一笔交易 A,那么节点 001 负责记录交易 A 的具体数据。其实首先需要验证交易 A 的合法性(例如,买方是否有足够的余额支付),这不是这个问题的重点。事不宜迟,让我们假设交易 A 是合法的。

001节点拿到交易A后,首先会对交易数据进行哈希运算,生成交易哈希值001,然后用自己的私钥对哈希值001进行签名(加密),生成签名信息,其中包含交易哈希值 001。

001节点完成上述工作后,会向外界广播,广播内容=原始交易信息A+签名信息。

一张图抵千言,处理流程如下图所示。

四、验证数据的节点是做什么的?

假设比特币网络中的节点002接收到节点001发送的广播内容,节点002得到“原始交易信息A”和签名信息。这时候会遇到两个问题:

001节点生成的签名信息是用自己的私钥签名的吗?002节点是否无法判断原始交易信息A在传输过程中是否发生了变化?

如何解决这些问题?

如果节点002可以通过节点001的公钥解密签名信息(逆运算),则可以证明签名信息属于节点001,解密后得到哈希值001。

节点002对接收到的“原始交易信息A”进行哈希运算,得到哈希值002。判断交易信息是否发生变化,只需比较哈希值001和哈希值002是否一致即可.

如果一致,则证明数据传输正确,验证通过。如果不一致,则证明交易信息发生了变化,无法通过验证。

这完美解决了两个节点验证事务一致性的问题。

一张图抵千言,处理流程如下图所示。

五、总结

我把两个节点间数据校验的整体流程整理在一张图上,方便大家建立更宏观的认识。

在数据校验的过程中,我认为哈希算法起到了决定性的作用。有了哈希算法,我们不再需要通过判断交易信息的内部逻辑来判断交易信息是否发生变化,或者根本不需要关心数据内容的复杂性。交易区块哈希值如何生成,并且只需要比较两个值就可以达到判断数据是否一致的目的。

哈希算法真是一个伟大的发明!