区块链学习心得1:三个关于区块链数据安全性的重要常识性知识

2023-11-02

☞ ░ 前往老猿Python博文目录

前面介绍了区块链的基础知识,包括什么是区块链、区块链类型、共识算法、Merkle树(默克尔树)和Merkle根、区块链的分叉、出块、最长链原则、主链等概念,在对这些概念理解较为彻底的基础上,老猿总结了几个常识性的问题和知识点,以供对区块链不太熟悉的人们了解区块链的相关特性。

一、为什么说区块链数据是不可篡改的?

区块链中已经在链上被过半数以上节点接受的区块,就称为区块链主链中的区块,后续新增的区块都是在该区块及其后的区块后面链接添加。由于区块链的区块头中的Merkle根不但是通过本区块的相关数据散列而成,而且也是这些数据与上一区块的Merkle根散列而成,同时会写入下一区块头中,因此任何一个区块的数据篡改会更改本区块的Merkle根,从而导致其后所有区块都不能识别该区块。

同时区块链中关于交易和区块数据的广播,仅限于未打包的区块的交易和新出区块的广播,历史已经打包交易和区块是不能再广播相关数据变化,这就导致篡改的数据无法广播出去,同时其Merkle根会发生变化,不能被链中后续区块所接受。因此已经打包上链被过半数节点接受的区块数据是无法窜改的。

二、以太币为什么要挖矿?

我们知道,以太币是靠挖矿来获得记账权,从而得到记账权的节点,可以根据区块链可以打包的最大交易笔数抽取未打包的部分或所有交易(需要看交易数据是否不超出新区块存储的交易数据空间)打包生成新的情况,从而得到区块链系统奖励的打包手续费。

新区块产生以后,需要在网络上进行传播,确保最后大多数节点都能接受该区块,因此在这种分布式环境中,新区块的产生速度不能太快,否则传播时会遇到多个新区块同时传播,而各节点接收顺序错乱,导致各节点记录的新区块不一致,从而出现区块链分叉导致的交易混乱,为此以太币规定了约10分钟左右产生一个新区块,以确保新区块能被网络中的大多数节点所接受。

对于10分钟的区块产生速度控制,以太币是通过共识机制POW来控制新区块的产生速度始终保持在10分钟左右一个区块。比特币网络中任何一个节点,如果想生成一个新的区块并写入区块链,必须解出比特币网络出的工作量证明的迷题。这道题关键的三个要素是工作量证明函数、区块及难度值。工作量证明函数是这道题的计算方法,区块决定了这道题的输入数据,难度值决定了这道题的所需要的计算量。(具体请参考《区块链共识算法-POW》的介绍)。

挖矿的具体过程为:参与者综合上一个区块的Hash值,上一个区块生成之后的新的验证过的交易内容,再加上自己猜测的一个随机数X,一起打包到一个候选新区块,让新区块的hash值小于比特币网络中给定的一个数。为了满足条件,每个参与挖矿的节点通过不停调整随机数的值来进行hash运算,以期望获得的hash值小于比特币网络中给定的数。

系统每隔两周即经过2016个区块会根据上一周期的挖矿时间来调整挖矿难度(通过调整限制数的大小),调节生成区块的时间稳定在10分钟左右。

关于难度值的更多介绍,请参考《比特币工作量证明难度值及难度调整详解》、《简单解释 bitcoin 中的难度》。

三、为什么说51%算力攻击可以伪造比特币网络中的任何数据?

前面第一点介绍了区块链数据的不可篡改,为什么又说51%算力攻击可以伪造比特币网络中的任何数据?
这二者是否矛盾?

这个看似矛盾的问题其实并不矛盾,在第一个问题中,特别说明了新区块的确认需要网络过半数的节点同意,这样区块就会被整个网络所接受。但如果某方拥有整个系统50%以上的计算节点,则一方面可以控制只接收其认可的新区块,控制新区块的产生,另一个方面可以通过对某个区块K后面的区块的交易进行伪造,并在伪造区块后持续产生新区块导致区块链分叉,由于其拥有50%以上算力,因此能确保其控制的区块链长度超过原有的主链,从而替换掉原有主链K区块之后的所有区块,导致这些区块的交易失效,而这些失效的交易可能已经发生了比特币和现实货币、实物或其他代币的交易,从而导致这些交易的比特币接受方蒙受损失。因此比特币的伪造数据是通过控制算力来实现区块链的软分叉来实现的。

但这种伪造区块的情况并不能伪造所有数据,如不能凭空给自己增加比特币余额。更多51%算力攻击请参考《比特币51%算力攻击?》。

老猿认为,类似的,除了POW共识算法外,其他共识算法也存在类似的攻击可能性,这种攻击都是通过控制达成共识的要素来实现的。

更多关于区块链的内容请见老猿专栏《零基础学区块链》或《零基础学区块链专栏文章目录》。

跟老猿学Python、5G、区块链!

☞ ░ 前往老猿Python博文目录

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

区块链学习心得1:三个关于区块链数据安全性的重要常识性知识 的相关文章

  • Windows安装Mysql(免安装版)

    Windows安装Mysql8 0 25教程 免安装版 1 下载mysql Mysql官网下载地址 2 配置初始化文件my ini 在根目录 与bin目录同级 下创建my txt文件 将以下内容复制到该文件中 其中mysql的安装目录和数据
  • 想将PPT的文字转换到Word文档?看这一篇就够了!!!

    将PPT的文字转换到Word文档 又到了期末考试复习周呢 一些老师会给我们复习的PPT 为了方便 我们当然会选择把它打印出来 但是看到这么多页的PPT 比如下面这张图就是我们老师给的PPT 我简直震惊 于是开始探索将PPT转化为Word的方

随机推荐

  • 【C++自我精讲】基础系列五 隐式转换和显示转换

    C 自我精讲 基础系列五 隐式转换和显示转换 前言 1 C 的类型转换分为两种 一种为隐式转换 另一种为显式转换 2 C 中应该尽量不要使用转换 尽量使用显式转换来代替隐式转换 1 隐式转换 定义 隐式转换是系统跟据程序的需要而自动转换的
  • 从零到独自开发一个网站(后端)

    从零到独自开发一个网站 后端 2015 09 15 16 22 25 本博客采用创作共用版权协议 要求署名 非商业用途和保持一致 转载本博客文章必须也遵循署名 非商业用途 保持一致的创作共用协议 折腾了9个小时终于把服务器架好了 因为uws
  • Altium designer(21) PCB除选中层,其它层变灰色,如何变回正常模式

    如下图所示 AD21软件 在PCB画图时 当前在TOP layer 其他层全部变成灰色了 看起来有些奇怪 原因 此时选择的应该是single layer mode 将这个模式关闭即可 步骤 右下角 panels gt view config
  • 从数据类型 varchar 转换为 numeric 时出错.

    如果说你的数据库字段是varchar 但是存储的数据是数值 在出报表时需要转成int或numeric时 无论怎么样都报错 错误信息 消息 8114 级别 16 状态 5 第 1 行 从数据类型 varchar 转换为 numeric 时出错
  • java基础知识

    java基础知识 1 常见的数据源 dbcp 半自动化操作 不能自己连接 c3p0 自动化操作 自动加载配置文件 并且自动配置设置到对象中 druid hikari 2 url pattern配置为 和 的区别 首先 可以匹配所有url 包
  • [1109]Maven全局配置文件settings.xml详解

    文章目录 一 概要 1 settings xml的作用 2 settings xml文件位置 3 配置的优先级 二 settings xml元素详解 1 顶级元素概览 1 1 LocalRepository 1 2 InteractiveM
  • Livox 学术小课堂|基于高精度反射率的建图色彩优化

    武汉大学VaST 课题组的王昱升博士最近分享了他们在轨道交通场景下利用Livox 激光雷达进行建图 并基于高精度反射率对点云图进行色彩优化 辅助轨道交通语义地图构建的工作 实测场景及点云图 项目组计划通过自研SLAM算法针对大场景铁路环境进
  • anconda配置环境变量

    1 将anconda安装根目录添加进环境变量path中 2 将anconda根目录下的Scripts路径添加进环境变量path中 这样就可以在cmd中打开notebook了 如图
  • Python中tkFileDialog实现文件选择、保存和路径选择

    tkFileDialog文件选择 保存和路径选择 概述 示例 概述 看了下Tkinter的文档 对于Pop up dialog有三类 现在用到的是tkFileDialog tkFileDialog有三种形式 一个是 askopenfilen
  • 解决跨域的配置

    这里写自定义目录标题 解决跨域问题 解决跨域问题 在网关中添加跨域的配置文件 Configuration public class MymallCorsConfiguration Bean public CorsWebFilter cors
  • 开源项目选型考虑的四个方面

    http www trinea cn other open source choice
  • 基于多视角学习和个性化注意力机制的新闻推荐

    NPA Neural News Recommendation with Personalized Attention 2019 7 链接 https arxiv org abs 1907 05559 发表在 IJCAI 2019和 KDD
  • 常见的排序算法总结

    排序简介 简介 排序算法 英语 Sorting algorithm 是一种将一组特定的数据按某种顺序进行排列的算法 排序算法多种多样 性质也大多不同 性质 稳定性 稳定性是指相等的元素经过排序之后相对顺序是否发生了改变 拥有稳定性这一特性的
  • ArrayList 集合 嵌套HashMap集合

    开发工具与关键技术 IDEA 撰写时间 2022 5 27 ArrayList 集合 嵌套HashMap集合 首先创建一个ArrayList集合 然后在ArrayList的 lt gt 里添加HaspMap集合 HaspMap集合的里键值对
  • 环境配置篇

    旧机子经常卡 代码打不动 换了一台 温习一遍配置 开一篇记录一下 1 jdk 安装jdk 还是别装最新的 经不起因为最新的原因导致各种bug 下载网址 点击打开链接 配置JAVA HOME 找到对应文件 以后要更新jdk修改这个文件就行 配
  • Yii Framework 开发教程(35) Zii组件-Button示例

    CJuiButton 显示按钮 CJuiButton 既可以做为Submit 提交 按钮 也可以做为普通按钮 按钮基本用法如下 php view plain copy print
  • Linux:基础开发工具之Makefile和缓冲区的基本概念

    文章目录 动静态库 自动化构建代码 缓冲区 原理实现 具体实现 动静态库 首先要知道什么是链接 C程序中 并没有定义printf的函数实现 且在预编译中包含的stdio h中也只有该函数的声明 而没有定义函数的实现 系统把这些函数实现都被做
  • new date()标准时间转yyyy-mm-dd hh:mm 24小时制

    知识点 es6的Object方法 正则表达式 循环对象等 直接贴代码
  • 解决Linux关机重启连不上网的异常

    NetworkManager 解决开机连不上网的问题 1 Systemctl status NetworkManager 查看NetworkManager的状态 2 如果NetworkManager的状态为运行状态 关闭NetworkMan
  • 区块链学习心得1:三个关于区块链数据安全性的重要常识性知识

    前往老猿Python博文目录 前面介绍了区块链的基础知识 包括什么是区块链 区块链类型 共识算法 Merkle树 默克尔树 和Merkle根 区块链的分叉 出块 最长链原则 主链等概念 在对这些概念理解较为彻底的基础上 老猿总结了几个常识性