区块hash可以被算出来吗?

775 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第3天,点击查看活动详情

哈希算法

指纹是人类手指上的印记,因其独一无二的特性,通常用来识别罪犯,而hash值就可将其视为是数据的“指纹”。

哈希算法的特征

  1. 能为任意类型的数据快速创建哈希值
  2. 确定性
  3. 伪随机
  4. 单向函数
  5. 防碰撞

本文主要讲解一下伪随机,伪随机的意思是当输入数据被改变时,哈希算法返回的哈希值的变化是不可预测的。即使输入数据只有一点变化,所得到的哈希值也无法被预测。

区块哈希是什么?

在区块链中哈希的用处

  • 存储交易数据,及时发现数据的改变
  • 提取交易数据的指纹
  • 想要修改数据就要解哈希难题(算力大于50%)

在区块链中,哈希难题的解答过程常被称为工作量证明

区块哈希那么重要,但在区块链中,区块hash并不是随机的,而是通过一些参数加密后产生的

例如:

比特币hash计算

1.block的版本 version

2.上一个block的hash值: prev_hash

3.需要写入的交易记录的hash树的值: merkle_root

4.更新时间: ntime

5.当前难度: nbits

挖矿的过程就是找到x使得SHA256(SHA256(version + prev_hash + merkle_root + ntime + nbits + x ))

假设有个链有100台机器,有人有51台机器,他就能修改geth代码,然后只用来打包自己的一个交易,这个区块里只有一个交易,它的hash就是可以算出来的,算出来以后,其他49个节点都是错的,只要这边算的足够块,那每一个节点都是可以被算出来的,如果是一个hash赌博性质的活动,别人是完全可以看程序,将这些hash给拆出来的