本发明涉及区块链技术领域,具体涉及一种区块链防篡改技术的优化方法。

背景技术:

区块链是比特币等数字虚拟货币的底层技术,通过去中心化的数据记录,由全网所有的节点共同维护数据,实现安全地存储数据,具有不可伪造性、不可篡改性、可追溯性、匿名性等特点。

区块链的去中心化技术方案是以区块为基本单位来管理和存储数据。区块由两个部分的数据结构组成,分别为区块头部和梅克尔树结构。区块的头部包括矿工可以修改的临时随机数、前序区块的哈希值、时间戳、挖矿难度、交易树的树根等数据。区块的另一部分是梅克尔树,用来存储有效交易。当包含交易数据信息的区块有序链接时,就形成了区块链。

由此可见,区块链是一个分布式账本,每个节点维护一份账本数据,每个账本数据包括了所有的历史交易信息,账本之间通过哈希指针连接。正常情况下,全网维护共同的区块链数据,单个节点存储的数据与全网的数据一致。但是如果有攻击者试图篡改该节点的历史数据,账本的原始数据被毁坏,那么智能合约就无法通过该节点的账本获取准确的历史交易数据,基于账本历史数据的所有应用均将受到影响。如何保证节点所存账本的安全性,确保节点账本数据及应用的有效性,成为亟待解决的技术问题。

技术实现要素:

本发明提出了一种发现区块链上某个节点所存储的账本数据被篡改的方法。

为解决上述技术问题,本发明采用以下技术方案:

本发明通过检测该节点上每个区块的哈希值,与其紧邻的后一个区块头部所存储的前序区块哈希值pre_H相比较,如果出现不一致则说明该节点账本数据被篡改。

上述方法通过下列步骤得以实现:

一种区块链防篡改技术的优化方法,包括如下步骤:

1、检验节点中除最后一个区块外的所有区块是否被篡改,并定位被篡改的区块:

1.1)在每个节点中,由最先的区块开始,遍历验证所存储区块链区块的哈希值与紧邻后续区块pre_H值是否一致,如果出现不一致认为此区块已被篡改,并记录此区块的pre_H,用于数据恢复,如果所有区块的哈希值与紧邻后续区块的pre_H一致,则需根据后续步骤判断该区块是否被篡改;

1.2)在遍历验证所有区块的哈希值是否与紧邻后续区块pre_H值一致的同时,根据每个区块的时间戳,将同一天内的所有区块存储在同一个文件内,前一个文件的最后一个区块的哈希值,作为后一个文件的第一个区块的哈希指针,以此将区块链按日拆分,如果同一天内的文件中没有发现前一区块的哈希值与紧邻后续区块pre_H不同,则计算该文件的哈希值H,并将H存储在临时文件夹中;

2、检验节点中最后一个区块,并根据检验结果定位并恢复区块链中被篡改的区块:

2.1)对于节点中最后一个区块存储的pre_H和数据,在该区块被挂上节点的区块链时用节点的私钥分别进行签名,并单独存储。当节点区块链新挂区块时该存储动态更新为最新区块存储的pre_H和数据的签名;

2.2)将最后一个区块内存储的数据与单独存储的签名中的数据进行比较,如一致则认为最后一个区块的数据未被篡改。如果不一致,说明最新区块的数据被篡改,此时向邻近节点询问最新区块并恢复数据。

将最后一个区块内存储的pre_H与单独存储的签名中的pre_H进行比较,以此校验区块的pre_H值是否做了修改。如果不一致,通过在网上向其他节点从最近区块开始依次询问获取区块,通过比较定位出被篡改的区块,并恢复数据。

将步骤1.1)中的pre_H作为ID,通过在网上询问其他节点pre_H的区块(不一致的pre_H作为请求其他节点寻找区块的ID,并且在获得区块后验证),从而能够找到前序区块。用同样的方法可以得到之前的区块,通过比较,从而定位并恢复被篡改的数据。

对于未被篡改的文件,对临时文件夹里存储的文件的H标记为正式存储的文件哈希值,对于被篡改的数据恢复后计算所属文件的正式存储文件哈希值。

3、快速验证区块链是否正确:

第一次检测完成以后,再次检验是否被篡改,直接进行文件检测:

3.1)重新计算区块链中每一天的文件的哈希值file_hash;

3.2)比较file_hash与步骤2中正式存储的文件H;

3.3)若file_hash与H相同,则认为数据未被篡改,否则针对文件里的区块重复步骤1和2,对于有过N次篡改经历的(N≥1)的高危块,设置并记录文件的高危参数标识r,r为该文件内的块被篡改的加权次数,其中k为被篡改的次数,m为对应被篡改k次的区块个数。针对r>0的区块,单独设置每单位时间内(如每隔一周)扫描r次,作为扫描频率。每次扫描完后更新高危参数标识,计算下一次该文件扫描的时间,设置定时任务。

本发明采用以上技术方案与现有技术相比,具有以下技术效果:

1、能够判断单一节点的区块链是否被篡改的同时修复区块链数据。

2、验证次数较少,验证效率高。

附图说明

图1为区块的数据结构图;

图2为将文件按天划分为文件的示意图;

图3为区块链结构示意图;

图4为未篡改到最后一个区块的区块链示意图;

图5为对最后一个区块的签名存储;

图6为检验文件哈希值时的示意图;

图7为完成文件划分后的区块链示意图;

图8为实施例的流程图。

具体实施方式

下面结合附图对本发明的技术方案做进一步的详细说明:

假设节点A维护一条如图3所示的区块链,每个块按照时间戳T,通过前序区块的哈希值进行互联,当前有n个区块,每个区块内容包括:区块的数据D和上一个区块的哈希指针pre_H。

区块链上的哈希指针可简化为:

pre_H(1)=hash(D(1))

pre_H(2)=hash(pre_H(1)||D(1))

……

pre_H(n-2)=hash(pre_H(n-3)||D(n-2))

pre_H(n-1)=hash(pre_H(n-2)||D(n-1))

pre_H(n)=hash(pre_H(n-1)||D(n))

防篡改检测机制如下步骤:

1、开始第一次检测,主要对整个区块链进行区块间pre_H对比检测,如图1所示,如果pre_H(m)=hash(pre_H(m-1)||D(m)),则此次检测通过;否则检测不通过,并将有问题的pre_H(m)记录下来,用于后面的数据恢复。

2、在进行区块间pre_H对比检测的同时,统计各个区块的时间戳,将同一个时间段的区块划分为一个文件,文件以天为单位进行划分。假设区块1、2、3的时间戳属于文件1的时间段2018-6-1,将这三个区块归于文件1,如图2所示。

其中file_H1=hash(D1||pre_H1||D2||pre_H2||D3),当所有属于文件1的区块都统计完成后,计算文件1的文件哈希值file_H1,并将该文件哈希值存储于临时文件夹里。

3、如果有篡改者篡改块m中的数据D(m),并且篡改者未篡改到最后一个区块存储的pre_H(n),那么按照技术方案第一条的方法来比较,总能发现某个区块的哈希值与紧邻后序区块存储的pre_H的值不同。如图4所示,如果D(m)、pre_H(m)、pre_H(m+1)被修改,则通过比较块m+2的哈希值与pre_H(m+2),因为不一致从而发现数据被篡改。

4、通过在网上询问其他节点pre_H(m+2)的区块(pre_H(m+2)作为请求其他节点寻找区块的ID,并且在获得区块后验证),从而能够找到块m+2。用同样的方法,找到块m+1和块m,通过核验比较,从而定位出数据D(m)被篡改,并恢复数据。

5、节点核验新区块通过以后,在挂链的同时,节点增加一项工作,即:对于该新进区块的存储的pre_H和数据用节点的私钥进行签名,并单独存储。这样,节点为了验证最新区块的pre_H,只需将区块存储的pre_H与所存的签名中的pre_H进行比较,以此校验区块的pre_H值是否做了修改。如果篡改者修改的是最新区块的数据,可通过比较数据的签名,同样可以发现篡改。如图5所示。

6、若第5步中pre_H(n-1)值比较的结果不同,向其他节点询问最新区块,按步骤4可定位篡改区块并恢复成原来的正确数据。若第5步中数据值比较的结果不同,向其他节点询问最新区块,恢复最后一个区块的数据。

7、第一次检测时,进行如上步骤,对于未被篡改的文件,将第2步临时文件夹里存储的文件的H进行标记,对于被篡改的数据恢复后重新计算文件的哈希值,以后的检测可直接通过检测文件的哈希值file_H即可,以提高扫描效率,如图6所示。

8、整个区块链完成区块间检测和文件划分,假设现在节点A的区块链由三个完整的文件和当天还未归为文件的剩余区块组成,如图7所示。

9、检测过程中定位具体被篡改的区块后,将该区块打上被篡改的标签,并在每一次被发现篡改后累加次数。对于有过N次篡改经历的(N≥1)的高危块,设置并记录文件的高危参数标识r,r为该文件内的块被篡改的加权次数,其中k为被篡改的次数,m为对应被篡改k次的区块个数。如某个文件中,有1个被2次篡改的区块,和2个被3次篡改的区块,该文件的标签为2次*1+3次*2=8次。单独设置每单位时间内(如每隔一周)扫描r次,作为扫描频率。每次扫描完后更新高危参数标识,计算下一次该文件扫描的时间,设置定时任务。

区块如何防篡改_一种区块链防篡改技术的优化方法与流程相关推荐

  1. apk 路由器劫持_一种在路由器上防止网页劫持的方法与流程

    本发明属于网络技术领域,尤其涉及一种在路由器上防止网页劫持的方法. 背景技术: HTTP请求在网络中进行明文传输,传输过程中常常会被网络节点中的路由设备进行连接并修改,以实现广告插入和将请求导流到钓鱼 ...

  2. aes子密钥生成c语言_一种基于流密码算法的子密钥生成方法与流程

    本发明涉及一种用于分组加解密算法的子密钥的生成方法. 背景技术: 随着信息技术的发展,信息安全性的问题却愈来愈显得突出,保证信息安全的一个重要技术就是密码学.密码学在信息安全技术中扮演着基础的角色,是 ...

  3. mysql查询耗时_一种数据库高耗时查询的自动取消方法与流程

    本发明涉及数据库的查询方法,特别涉及一种数据库高耗时查询的自动取消方法. 背景技术: 有很多关系型数据库查询业务非常耗时,比如查询企业实时报表之类的,一次查询可能需要几分钟甚至更长.在很多时候,前端业 ...

  4. 光纤耦合角度_一种光纤准直器的耦合找光方法与流程

    本发明涉及在线光无源器件的生产制造领域,具体是一种光纤准直器的耦合找光方法. 背景技术: 光纤准直器是在线光无源器件的基本元件,其主要作用是将经由光纤输出的光转换成发散角很小的近似平行光束,以增加光路 ...

  5. led数码显示控制plc实验_一种LED数码显示的PLC控制程序及方法与流程

    本发明涉及程序控制技术领域,特别是一种简单高效.安全可靠.逻辑性强.响应时间短的一种LED数码显示的PLC控制程序及方法. 背景技术: LED数码显示管可以显示数字或字母,通常也用来显示时间.速度.系 ...

  6. 电容屏物体识别_一种基于触摸屏触摸点的物体识别方法与流程

    本发明涉及触摸屏触摸点物体识别技术领域,具体为一种基于触摸屏触摸点的物体识别方法. 背景技术: 多触点触摸屏支持多个触点同时输入,通过触摸屏的点的特征,进行物体识别是一个成熟的技术,以下简称物体识别为 ...

  7. 麦克风声源定位原理_一种利用麦克风阵列进行声源定位的方法与流程

    本发明涉及计算机信号处理领域,具体涉及一种用麦克风阵列时延估计定位声源的方法. 背景技术: 20世纪80年代以来,麦克风阵列信号处理技术得到迅猛的发展,并在雷达.声纳及通信中得到广泛的应用.这种阵列信 ...

  8. bim 模型web页面展示_一种操纵BIM模型在网页展示的方法与流程

    本发明涉及操纵BIM模型在网页展示的方法. 背景技术: : 现有网页展示BIM模型使用的是同步传输技术,同步传输的比特分组较大,它不是独立地发送每个字符,每个字符都有自己的开始位和停止位,而是把它们组 ...

  9. 企业微信推送消息延迟_一种基于企业微信的消息推送方法与流程

    本发明涉及消息推送技术领域,特别涉及一种基于企业微信的消息推送方法. 背景技术: 随着微信公众号的普及,微信企业号也越来越受到人们的关注.而腾讯公司在微信企业号的基础上又进行了进一步的升级,提供了类似 ...

最新文章

  1. 浅谈MySQL存储引擎-InnoDBMyISAM
  2. 网络编程学习方法和图书推荐
  3. pygame从入门到提高(1)
  4. Python Excel表格操作总结
  5. 最新版Kubernetes常用命令大全
  6. 最难面试IT公司的测试题
  7. c语言用户自己建立数据类型,C语言程序设计学习笔记--用户建立数据类型
  8. 三星电脑计算机主板图,三星S10E+拆解图文教程
  9. 如何在PS(Adobe Photoshop)安装Portraiture3插件教程
  10. BZOJ 2563 : 阿狸和桃子的游戏
  11. nginx日志格式分析
  12. resnet50结构图
  13. 快速排序的优化——枢轴数的选择
  14. 京东口罩到货,邮件实时通知
  15. 手把手教你给KEGG pathway图标注颜色
  16. n2n内网穿透及代理服务
  17. (一)图像文字检测论文:CTPN方法
  18. python读取mat文件格式_Python读取mat文件,并保存为pickle格式的方法
  19. icon图标素材免费搜索下载网站分享
  20. 2021年云南省职工职业技能大赛CTF流量分析题(wireshark)WriteUp

热门文章

  1. Linux内核学习笔记——Linux中的用户组和权限管理(UID是什么?)
  2. 龟兔赛跑编程c语言蓝桥,龟兔赛跑
  3. chrome 切换标签页快捷键_如何在Chrome浏览器中切换标签页
  4. django母版用法
  5. H5活动之家平台,开启国庆双十一福利,活动全免费
  6. MINIGUI3.2 设置按钮前景色
  7. 网上看到的!!很值得欣赏~~(没耐…
  8. Tableau 中多张表的联接
  9. ReactOS研究班
  10. SCS【13】单细胞转录组之识别细胞对“基因集”的响应 (AUCell)