区块链中的哈希到底是什么?

本文深入解析了哈希在区块链中的核心作用,介绍了哈希的基本原理,以及如何通过哈希值确保区块链数据的完整性和安全性。同时,文章详细阐述了Merkle Tree(马尔科夫树)在大规模数据验证中的应用,以及它如何帮助提高区块链的效率。
AI助手已提取文章相关产品:

来源 | hackernoon

编译 | 张涛

责编 | Carol

出品 | 区块链大本营(ID:blockchain_camp)

 

什么是哈希?

哈希是将任意长的输入编程加密的固定长度输出的过程。哈希并不等同于加密方法,因为无法解密哈希值来获取原始数据。事实上哈希是一种单项加密函数。

有了哈希函数,就可以将互联网上的数据以固定长度字符串的形式来保存。其中一种方法就是SHA-256(安全哈希算法-256位),SHA-256是SHA-1的后继者,SHA-1的输出是160位的。

哈希是如何应用在区块链中的?

在区块链中,每个区块中都有前一个区块的哈希值,前一个区块叫做当前区块的父区块。由于每个区块都有前一个区块的哈希值,当修改当前区块的任意数据都会导致区块的哈希值发生变化,这会对前一个区块产生影响,因为其中含有前一个区块的地址。

比如,当前有两个区块,一个是当前区块,一个是父区块。当前区块中有父区块的地址,如果需要修改当前区块的数据,就需要对父区块链进行修改。如果只有两个区块就比较好修改数据,但事实上区块链上有很多的区块。

截至2020年1月24日12:32,一共有614272个区块,第614272个区块的哈希值为00000000000000000007a6be31011560f1e3abe8f125e356a31db6051753334e。如果想要修改第614272个区块的数据,那么614271区块的哈希地址就会发生改变,但是修改所有614271个区块的哈希值是不可能的,因此区块链中数据的不可篡改和可信赖的。区块链的第一个区块叫做Genesis(创始)区块。

研究人员对该过程进行了可视化:

如果对输入产生小的修改,都可能会导致输出产生大的改变。

哈希是区块链技术和不可篡改和潜力的核心基础和最重要的方面。哈希维护了记录和查看数据的真实性,区块链的完整性也是这样的。

这也是区块链技术最重要的技术特征的一部分,只有理解了哈希才能了解区块链不可篡改性的潜力和价值。

Merkle Tree(马尔科夫树)是什么?

当有大量数据需要验证时,就需要消耗大量的内存来存储和确保安全,这个过程很难。但是又了马尔科夫树(Merkle tree),就可以轻易解决这些问题。

马尔科夫树是区块链技术的基础,在该结构中,可以很容易地在大量数据中找出哪些数据发生了变化,整个数据验证的过程非常高效。比特币和以太坊中都使用了马尔科夫树。

从上图可以看出,所有的交易都在底部,最顶部的哈希值叫做Root hash或Merkle root(马尔科夫根)。

如上图所示,有4个交易A、B、C、D。A和B哈希后会形成一个哈希值,C和D会形成另一个哈希值,AB的哈希结果和CD哈希结果会组合来形成一个新的哈希值——Root hash或Merkle RootABCD。

Root hash有所有交易的信息。马尔科夫树会重复计算节点对的哈希值,直到只剩下一个哈希值,就是Root hash。

Merkle tree是一个二叉树,所以需要偶数个叶子结点,如果交易数是奇数,那么最后一个哈希值会复制一次来创建偶数个叶子节点。

如上图所示,可以看出奇数值的交易数中有复制的交易进行了哈希,表明Merkle tree会计算奇数的叶子树。

 

所有交易数据会总结称一个Root hash,保存在区块头(block header)中。数据中有任何改变,整个哈希值就会变化,如果哈希值变化了,Merkle root就会发生变化。Merkle tree可以帮助维护数据的完整性。

Merkle tree的另一个好处是如果想要了解特定交易的状态,无需下载整个区块链,只需要请求竖直证明(vertical proof)和树的特定分支,验证一个特定的交易分支。

如何用哈希来确保数据安全?

哈希还增加了数据的安全性。因为没有加密数据,所以无需也无法解密数据。因为哈希函数是单向加密函数,加密哈希函数需要满足一些关键特征才能保证是有用的,包括:

  1. 每个哈希值都是不同的

  2. 相同的消息会生成相同的哈希值

  3. 无法根据哈希值确定输入值

  4. 输入值的微小变化也会导致整个哈希值的变化

哈希可以帮助确定数据是否被修改过。比如,之前下载了一些重要信息,为确定数据是否被修改过,可以对数据进行哈希计算,并比较数据的哈希值和接收到的数据的哈希值。

如果哈希值相同,就表明数据没有被修改过,如果哈希值不匹配,就表明数据在发送后接收前被修改了。

推荐阅读

老铁们求在看!????

猛戳“阅读原文”,填写中国远程办公-调查问卷

您可能感兴趣的与本文相关内容

### 哈希单双预测在区块链游戏中的原理 区块链游戏中的哈希单双预测机制通常依赖于哈希函数的随机性和不可预测性。哈希算法通过将任意长度的输入数据转换为固定长度的输出值,使得任何微小的输入变化都会导致输出哈希值的分布发生不可预测的变化,这种特性被称为“可隐匿性”(puzzle friendly)[^2]。因此,即便是在游戏中使用哈希值的奇偶性作为预测依据,其结果仍然具有高度的随机性。 在区块链游戏中,哈希单双预测通常用于生成随机结果,例如决定游戏胜负、分配奖励等。游戏开发者会使用特定的输入数据(如区块时间、玩家操作等)生成哈希值,并根据该哈希值的最后一位判断结果是单数(奇数)还是双数(偶数)。由于哈希函数的输出具有均匀分布特性,理论上每个哈希值的最后一位为0(偶数)或1(奇数)的概率各为50%[^1]。 为了确保公平性和安全性,区块链游戏通常采用以下几种策略: - **使用区块哈希值**:许多游戏会使用特定区块的哈希值作为随机性来源。由于区块哈希由矿工通过工作量证明(PoW)机制生成,其生成过程具有不可控性,因此可以作为可靠的随机数来源[^3]。 - **引入随机性因子**:在生成哈希值时,游戏系统会引入额外的随机性因子,如玩家的操作时间、交易哈希、区块时间戳等,以进一步增加预测难度[^2]。 - **验证机制**:玩家可以通过输入数据重新计算哈希值,以验证游戏结果是否公平。由于哈希函数具有快速验证的特性,只需比较哈希值即可确认数据是否被篡改。 - **去中心化随机性协议**:一些高级游戏会采用去中心化的随机性协议,如可验证随机函数(VRF)或链上熵源(Entropy Source),以确保随机性来源的透明性和安全性。这些机制通常结合多个节点的随机输入,生成最终的哈希值,从而避免单一来源的操控风险[^2]。 尽管如此,哈希单双预测本质上仍然是一种基于概率的随机决策机制,无法被准确预测。任何声称能够稳定预测哈希单双结果的工具或方法都缺乏理论依据,甚至可能是误导或欺诈行为[^1]。 ```python import hashlib import random def hash_parity(data): hash_value = hashlib.sha256(data.encode()).hexdigest() last_digit = int(hash_value[-1], 16) return "Even" if last_digit % 2 == 0 else "Odd" # 示例:测试100次哈希单双预测 results = {"Even": 0, "Odd": 0} for _ in range(100): input_data = str(random.random()) results[hash_parity(input_data)] += 1 print(f"Even: {results['Even']}, Odd: {results['Odd']}") ``` ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值