区块链数据不可篡改的详细解释

背景介绍

本人新人一枚,学习区块链的过程中,在网上看到了很多讨论区块链区块数据不可篡改的文章,以比特币为例哈,主要存在2种解释:
解释1:由于哈希指针的存在,假设存在某节点修改的了当前区块数据,带来的后果就是其后所有N级子区块的数据要全部修改,代价巨大云云…
解释2:由于哈希指针的存在,假设存在某节点修改的了当前区块数据,要往父区块回溯,修改父区块直到创世区块,而创世区块是链的开始,是无法更改的(不然就不是这个链了)。
暂且不说谁说的是正解,反正我乍一看,搞得浑身热血沸腾,觉得哈希指针老牛逼了!应该给哈希指针颁一个联合国和平奖啥的。
通过仔细的学习和思考以及请教两位专家博哥和锋哥(感谢两位的答疑解惑),发现这些文章其实根本回答不了区块链数据不可篡改的真正原因,因此在这里有必要写点东西以正视听!

关于防篡改

由于文章有点长,且如果没有基础可能会不好懂,为了避免大家没耐心,我先说结论——区块链防篡改的真正原因可以从2个层面上解释(以比特币为例):
(1) 从全网的角度分析——分布式P2P网络是关键:以比特币为例,全网所有节点的(虽然只有全节点有完整数据库)都存有一份“相同”的区块头,想作恶的话不是少数一批节点可以做的。整个网络的架构决定了数据要篡改只能使用算力攻击,因为P2P网络的数据维护是靠算力竞争记账权并全网复制的。这就最大程度保证了安全性!想攻击网络,必须要拥有大量的算力,但是拥有大量算力的节点还有必要做“偷鸡不成蚀把米”的事吗?就好比一个公司的大股东为什么要毁掉公司的资产和价值呢?这是比特币“组织架构”的天然优势!

(2) 从单个节点角度—— “数据不是你想改,想该就能改!”
很多朋友上来就谈,“假设某个节点修改了一个区块”,然后怎么怎么 …根本不介绍区块数据生产的逻辑是什么,要怎么修改,这就带来了一个先入为主的误导(举个不恰当的玩笑为例: 今天动物园开会大象没来,是因为有个家伙把大象放冰箱里了! 大哥,难道在问大象来不来开会前,我们是不是要先看看“把大象放冰箱”这个命题可能性有多大啊???)
也就是说,如果“修改某个区块数据”这一步过不去,根本就谈不上什么“回溯到创世区块”还是“修改所有N级子区块”!
那么,我们接下来详细解释为什么对于单个节点的某一次运算,区块数据“几乎”改不了!(想改也可以,回到上一个话题,拥有大量的算力,1次不行就同时试它个1亿亿亿次…这当然又是个悖论,你都拥有这么大的算力,闲着没事给自己挖坑干嘛)

为了便于理解,我们以比特币为例,某次挖矿获得到记账权的节点,必然满足以下条件:
恰好通过哈希碰撞,得到了随机数Nonce,使其满足了如下条件:
即H(block header)≤target
即哈希列表头部的2次SHA256运算值要满足前面N个bit位都是0。
这里我们将比特币的区块头的结构列出来:

字段 描述
版本 4字节数据,版本号
父区块哈希值 32字节数据,父区块数据的哈希值
Merkle根 32字节数据, 本区块交易的Merkle 数根哈希值
时间戳 4字节数据,区块生产的时间
难度目标 4字节数据,用于调整工作量证明算法中的难度
Nonce 4字节数据,随机数

网上的有些同志执着于讲“哈希指针”是保证了整个不可篡改机制的最大功臣,矿工表示咱们得先对“挖矿”的原理做个介绍!
假设,我们的幸运节点挖矿成功,找打了一个4字节的随机数Nonce,使得当前数据区块的头部80个字节的2重哈希运算值满足了前面比如N个0。
那么,问题来了,当你修改了交易数据,必然导致Merkle根发生变化,从而导致了80字节的数据包发生了变化。必须要重新启动一次Nonce随机数的哈希碰撞的“撞大运摸彩票的”运算。这里大家要明白一个原理,SHA256运算输出的值域空间是:
[0 ~ 2^256], 这个值域空间是一个巨大的区间!
而Nonce的值域空间只有0~2^32, 而且非常不幸的是一个“幸运儿”即便算力很牛逼,“猜出”随机数的也不是纯靠实力,而是有运气成分(为什么比特币这么公平就在于此!)因为每个矿工计算时候的“初始状态不同— 打包的交易数据不同,时间戳不同”,所以有可能算力不太牛X的节点,就是比较幸运,10分钟之内“算”到了这个随机数,而有些节点却很难算出来或根本算不出(即便是遍历整个取值空间,也落不在解空间)。
具体解释,在比特币网络发展到一定程度以后,算力和节点都比较稳定了,那么即使给这个“做恶”节点充分的时间去修改数据,重新计算Nonce,也几乎不可能找到满足合适的Nonce,因为一旦修改了一个点点数据,就造成了“蝴蝶效应”,Nonce的值域空间只有0~2^32完全都落在了目标区间以外,因为不满足条件的哈希值太多了…
举个栗子: 已比特币为例,在SHA256算法下,第一个bit位以1开头的哈希值有多少?这个比较容易推导,因为有一半的哈希值都是以1开始的,这个空间依然是超级巨大的… 那么区区2^32个数字的尝试,大概率是会落在这个根本不满足条件的空间!
BLOCK块头部数据结构是有游戏规则的,改了交易数据后的那个区块,Nonce随机值很可能“无解”(在新的条件下)! 而且不要认为在已经找到了一个Nonce值满足规则的前提下, BLOCK数据部分“只改动一点点”,是不是还能找到一个新的Nonce值满足游戏规则,或者距离“成功中奖”也只有一步之遥? SHA256函数表示它被创造出来不是“吃素”的, 闯江湖的几把刷子其中之一就是“不可测”性… 蒙中奖本身就是小概率事件!
用数学语言描述:
大概率下,在某节点篡改了某区块的交易数据后的条件下,在这次计算中里,随机数的取值空间[0~2^32]内,是找不到一个合适的“解”Nonce,仍然使其满足下式:
即H(block header)≤target
用“人话”描述:
当一个大兄弟在树下乘凉,被一道晴天霹雳劈中(绝对小概率事件),120给送医院了(这就类似于挖矿,对单个节点而言,已经相当不容易才“蒙”到答案)。 但是这位大兄弟大难不死,当他坐着轮椅在朋友们的鲜花和掌声中离开医院时候,这个大兄弟突发感慨,想回去看看那棵曾经患难与共的树(类似于非要在已经很不容易才算出的结果上改造希望再次得到一个幸运值),刚到树下这时突然风骤起, “裤衩”一道闪电又劈了下来 ……
看到这里你还要问我,这个大兄弟后来是不是又去那家医院了,他胃口还好吗?上楼腿脚利索不,补钙时喝的是不是哈药六厂的蓝瓶的口服液… 我觉得咱们就没法再一起愉快的聊天了,因为在同一棵树下被2次雷劈的故事就特么不可能出现好吧!!!

一句话,单个节点连续“中奖”,这种可能性就好比这个大兄弟先后在不同时间点,站在同一棵树下,被雷劈2次 … 这是几乎不会发生的!那么,杠精们又可能会说了,也不是没有可能啊!?是的,你要想实现这个大兄弟被雷连续劈2次,你得让丫天天去那棵树底下待着去(多节点同时计算也行,多找几棵树呗),还要在不同的天气情况下(不同的初始条件,不停的修改区块头部,创造出多种可能的初始条件),日复一日的抱着树守望闪电. 如果1年不行就10年,10年不行就100年,100年不够,就向天再借500年(大量的创造试的机会,去“蒙”出一个合适的随机数)… 总之,还是那句话,你得拥有全网的“大量算力”才有可能!!!

此外,这里大家一定搞懂:对于单个节点具体的一次挖矿运算的行为(记住我说的这个前提),哪怕一个节点拥有全网十分之一的算力,是不是就一定比拥有全网万分之一算力节点,成功概率大1000倍?
子曰:当然不是,很可能这个牛叉的节点很不幸落在了“无解空间”,因为“出身条件(初始条件)”不好… 比特币挖矿是一个有时间限制的竞赛游戏,而且单次挖矿是带有“幸运”属性的,因为你不知道自己的“初始位置”距离王冠上的明珠有多远,也没法逆推(SHA256函数的特性决定了)无法去利用已经得到的计算结果 “帮助提速”啥的!

文末,总结一下结论(以比特币为例):
(1)P2P架构的分布式存储,决定了以及上链的数据在全网内不可篡改(很难作恶)!除非你拥有巨大的算力,重新制造一条分叉链,取而代之!
(2)从单节点的角度出发,“一个人连续被雷劈2次”的概率极低,很可能对某一次尝试,这个区块数据压根就改不出来!要改,除非你拥有绝大算力,先实现一个小目标,1秒试它个1亿亿次!

最后,还是那句话,必须要拥有巨大算力才可能实现攻击!然后这个命题就回到了中本聪比特币设计的天才之处——出于人性的自私而维护的网络最终演化成了最公平的网络,是啊,我拥有全网51%的算力,作为比特币的控股股东,我没必要砸自己的饭碗…

本人系初识区块链,文中有错误和不足在所难免,欢迎大家多多指教和交流!

区块链数据不可篡改的详细解释相关推荐

  1. 区块如何防篡改_区块链数据不可篡改的详细解释

    区块链数据不可篡改的详细解释 背景介绍 本人新人一枚,学习区块链的过程中,在网上看到了很多讨论区块链区块数据不可篡改的文章,以比特币为例哈,主要存在2种解释: 解释1:由于哈希指针的存在,假设存在某节 ...

  2. 区块链100讲:梅克尔树保障区块链数据不可篡改,想换根就要砍树!

    2019独角兽企业重金招聘Python工程师标准>>> 区块链100讲上期我们讲了哈希算法和公开密钥算法,说到哈希算法提到了一个名词"Merkle tree",梅 ...

  3. 《迅雷链精品课》第六课:主流区块链数据存储分析(一)

    上一节课我们学习了区块链中的账户与账本,了解区块链账户的特点和本质.今天我们将系统地学习区块链数据存储,在课程学习前,大家可以先思考下列问题:区块链的数据是如何存储的?区块链如何在没有中心信任节点的情 ...

  4. 井通区块链数据上链介绍

    井通区块链数据上链介绍 1.概述 本文主要描述井通区块链上通过Memo的方式进行数据上链,以及进行数据上链之后的数据查询等. 基本流程如下: 1) 创建钱包 2) 激活钱包 3) 抽取业务数据 4) ...

  5. 区块链数据存在哪里?解析区块链数据存储和安全性

    区块链是一个去中心化的分布式账本系统,是一种新型的数字资产管理方式.区块链的本质是由一系列区块组成的链式结构,每个区块中都包含了一些数据.那么,区块链数据存在哪里呢?下面将对区块链数据的存储和安全性进 ...

  6. 区块链软件之五大特点详细介绍

    您真正需要的是一套稳定,安全,流畅的系统,当您对比其他的时候,请考虑优质的服务的以及周边的配套设施,因为,这正是我们服务最核心的价值. -----虫洞科技老吴 ![在这里插入图片描述](https:/ ...

  7. 区块链数据服务 - BDS

    区块链数据服务(Blockchain Data Service,BDS)是京东云区块链产品部发推出的,其将区块链的链式.非结构化数据通过技术手段进行结构化存储,实时同步到高性能数据仓库中. 用户可以通 ...

  8. 业内首发 | 区块链数据服务 - BDS

    区块链数据服务(Blockchain Data Service,BDS)是京东云区块链产品部发推出的,其将区块链的链式.非结构化数据通过技术手段进行结构化存储,实时同步到高性能数据仓库中. 用户可以通 ...

  9. 使用 Web3.js 连接以太坊节点并查询区块链数据

    Web3.js 是一个用于连接以太坊网络的 JavaScript 库.在本文中,我们将介绍如何使用 Web3.js 来连接以太坊节点,并且查询以太坊区块链上的数据. 1. 安装 Web3.js 首先, ...

最新文章

  1. IOS/Android模拟器运行APP调试方法
  2. java.util.ConcurrentModificationException(并发修改错...
  3. [小算法] 找出单链表中的中间元素
  4. HDU 2065 红色病毒问题(生成函数)
  5. Canvas 波形图
  6. MVC Scaffolding SmartCode-Engine 更新
  7. java学习(142):file类的基本创建
  8. 上传github代码
  9. 用汇编的眼光看C++(之算术符重载)
  10. c语言 字体点阵取模,[汉字取模软件怎么用]单片机点阵汉字显示需要用
  11. 浏览器UI线程更新机制
  12. R语言︱文本挖掘——词云wordcloud2包
  13. python多元线性回归实例_关于多元线性回归分析——PythonSPSS
  14. 一个c++程序员对大学生的友情提醒
  15. ThinkPHP 3.1.2 模板中的变量
  16. Vue引入vue-qr组件实现生成二维码,且实现在二维码中间加入logo图片功能
  17. 局域网ip扫描工具_IP Scanner Pro——ip局域网扫描工具
  18. Android之简洁天气
  19. 关于轩微电子ADS1256+stm32f103开发板的一点使用小tip
  20. C#执行js中的函数的问题,以sohu邮箱登陆密码js的MD5为例

热门文章

  1. 博睿数据一体化智能可观测平台入选中国信通院2022年“云原生产品名录”
  2. Nice v5.3.7
  3. Acer Aspire V3-572G电脑 Hackintosh 黑苹果efi引导文件
  4. 用html5写一段文字画布中,超全的HTML5画布(Canvas)实例
  5. 《在东软的工作随想》评论之评论
  6. LFSR python实现
  7. 生存分析(survival analysis)
  8. 推荐一个Ubuntu的主题——POP
  9. 【Android】安卓AVD无法上网解决方案
  10. vscode运行python程序