hyperledger-fabric - 如何在区块链和超级账本结构中检测到区块链或世界状态中的数据篡改(已添加区块的数据)?
问题描述
我是区块链技术的新手。关于区块链的防篡改机制,我有几个问题。
1)我的理解:我知道[哈希上一个块+当前块的内容]的哈希将作为下一个块的哈希。如果我们篡改一个块的内容,哈希将改变,并且到下一个块的链接将被破坏。
我的问题:如果嫌疑人在添加块后很长时间更改了块的内容,哈希的计算和将哈希放入下一个块中会自动发生吗?假设如果有人已经非法更改了内容并且链接已断开,是否有自动机制触发链接已断开的事件?被篡改的区块链副本什么时候会被识别并失效?
2)我的理解:在超级账本结构中,我理解账本 = 区块链 + 世界状态。世界状态是基于区块链计算的。应用程序将依赖于世界状态值,应用程序不会遍历区块链来查找值。
我的问题是:i)重新计算世界状态的频率如何?
ii) 在重新计算世界状态时是否会检测到断链(如果被篡改)
iii) 如果嫌疑人篡改了对等体的世界状态怎么办。这种情况如何设置正确?在共识或任何其他活动期间是否会检测到篡改?
我阅读并了解区块链是防篡改的,但真的想了解哪些流程可以保护 BC 吗?
解决方案
想象一个区块链世界,其中链有1000 blocks
和100 nodes
。
现在node x
蛋彩画block 950
和改变它的hash
。结果是所有连续块的hash
变化。所以node x
现在有了一个chain
不同于其他的版本99 nodes
。由于大多数节点仍然具有相同的节点,chain
因此将确定node x
有故障chain
,并且node x
在创建新块时不会考虑该决定。这就是区块链如何成为防篡改的方式。
现在让我们考虑一个边缘情况。在 100 个节点中,有 51 个节点带有block 950
并更改其hash
. 现在这些51 nodes
有一个错误chain
但相同的chain
. 结果,这chain
将占上风,实际chain
将被丢弃。这被称为51% attack
.
推荐阅读
- sql - Oracle 随机时间和间隔
- html - 列的最后一项排列在文本的顶部而不是底部
- java - Java:从 Latin-1 字节数组创建字符串
- java - Scala JAR 文件:从 jar 文件中读取数据的有效方法
- python - 比较第一条记录的记录 - Python
- html - 同时设置标题、字体大小和颜色
- python-3.x - 我可以使用 pipenv 创建两个虚拟环境,每个环境都有不同的 python 版本(即 3.7 和 3.6)吗?
- r - 如何总计几列到某个点?
- node.js - node js app.use 抛出一个中间件函数
- java - 在两个线程中交替打印字符串