一种基于区块链的数据防篡改方法与流程

文档序号:17443506发布日期:2019-04-17 05:08阅读:3809来源:国知局
一种基于区块链的数据防篡改方法与流程

本发明涉及一种基于区块链技术的数据存储协议,尤其涉及一种基于区块链的数据防篡改方法。



背景技术:

区块链技术,区块链是一种新型去中心化分布式账本技术,能安全地存储数字货币交易或其他数据,特点是存储在区块链上的信息不可伪造和篡改,区块链共识算法驱动区块链上的每个节点都参与到交易的验证过程中,保证区块链上交易都是经过确认可信的,区块链上每个节点都维护一个公共的账本,用于存储区块链网络上所有用户的余额和智能合约数据,任何一个节点对自己所维护的账本的修改都将不被其他节点所承认,从而保证公共账本不可被伪造和篡改。

由于区块链本身的公开不可篡改的特性,一些不愿公开的数据无法存储在区块链中,同时存储在区块链中的数据需要通过共识这一环节,导致完成存储时间过长,效率低下。

数据库能够存储所需的数据,但是在频繁的读写操作中,难以发现数据是否被篡改,滞后性严重,一旦发现问题可能已经造成无法挽回的损失。

通过查询数据库日志虽然能够发现数据是否被篡改,面对大量的操作日志可读性差,操作难度高,难以区分正常修改和恶意篡改。直接查询获取区块链中的数据进行对比,虽然也能发现数据篡改,但是耗时长效率低下。



技术实现要素:

本发明的目的是针对现有技术的不足,提供一种基于区块链的数据防篡改方法。

本发明的目的是通过以下技术方案来实现的:一种基于区块链的数据防篡改方法,增加数据的透明度,及时发现矛盾数据并修改,具体包括如下步骤:

(1)使用者将数据保存在自己管理的数据库;

(2)将存储的数据做一定的计算,转换成可以公开的真实数据,发送到防篡改节点;

(3)将步骤(2)中的可公开数据做一次统一结构化处理,作为一条记录,存放在记录池中;

(4)当步骤(3)中记录池到达一定数量,或者到达最晚打包时间时,将记录打包成记录表,记录表中包含表号,随机表签名,最后表签名,错误表序列;

(5)验证随机表和最后表的正确性,将步骤(4)的表添加自身签名,合并错误表序列和错误数据,添加错误表序列签名,将产生的表添加到准备发布的区块中;

(6)将步骤(5)中验证出来错误的记录表号添加到错误数组中,并将区块发布到区块链网络中;

(7)当步骤(5)产生的区块被共识后,返回块中记录相关的区块号和表号;

(8)从最新表往前验证表正确性,错误表号添加到错误数组,错误数组与所有表中的错误表序列合并,更新错误表序列签名;

(9)重复步骤(3)-步骤(8)直至处理完记录池中所有记录,最终将使用者所有可公开记录备份在区块链网络中,并且无法被篡改,同时使用者可以通过对比防篡改节点中的数据验证数据。

进一步地,步骤(1)中用户将完整的数据保存在自己管理的数据库中,无需向外界公开。

进一步地,步骤(2)中用户对数据进行自定义的处理,制定规则将收到的数据做一层封装,将可以公开的信息展示出来作为一条记录存在防篡改节点中。

进一步地,步骤(3)中多条记录构成记录表,记录表中数据不重复,最新表中包含上一个表的签名,以及随机表的签名,构成了链式结构,同时错误表序列不参与自身签名的产生。

进一步地,步骤(4)中将记录表写入区块中,参与共识,保证了可公开数据的真实性。

进一步地,步骤(5)中发现表被篡改后不影响后续表的产生。

进一步地,步骤(6)中迅速扩散错误表信息,增加篡改难度。

进一步地,步骤(7)中返回给使用者公开信息所在的区块号和表号,能够快速查询公开数据的在区块链网络中的位置。

进一步地,步骤(8)中对记录表进行完整的审计,检测在防篡改节点对应的本地数据有无被篡改。

进一步地,针对防篡改节点可以获取错误表序列,通过区块链网络中出错表所在区块来恢复防篡改节点的本地数据;针对使用者需要对某一数据进行操作前,可与防篡改节点中的数据进行对比,恢复正确数据。

本发明的有益效果是:通过对数据存储结构进行链式设计,使用区块链技术作为数据备份的手段,将存储和验证分离,达到公开信息可共用同时防篡改的效果。

附图说明

图1是防篡改方法基本流程;

图2是打包记录表流程。

具体实施方式

下面根据附图和具体实施例详细描述本发明,本发明的目的和效果将变得更加明显。

如图1所示,一种基于区块链的数据防篡改方法,增加数据的透明度,及时发现矛盾数据并修改,具体包括如下步骤:

(1)使用者将数据保存在自己管理的数据库;

(2)将存储的数据做一定的计算,转换成可以公开的真实数据,发送到防篡改节点;

(3)将步骤(2)中的可公开数据做一次统一结构化处理,处理后的数据至少包含数据内容,使用者id,数据id,数据内容序列化为json或protobuf的形式保存在新的数据结构中,作为一条记录,存放在记录池中;

(4)当步骤(3)中记录池到达一定数量,或者到达最晚打包时间时,将记录打包成记录表,记录表中包含表号,随机表签名,最后表签名,错误表序列;

(5)验证随机表和最后表的正确性,将步骤(4)的表添加自身签名,合并错误表序列和错误数据,添加错误表序列签名,将产生的表添加到准备发布的区块中;通过本地存储的所有记录表来验证随机表和最后表的正确性,给步骤(4)的表添加自身签名,通过表号,随机表签名,最后表签名,打包的记录共同产生最新记录表的签名,错误表相关信息不参与签名;将错误表数组中的内容合并到错误表序列,添加错误表序列签名,将产生的表添加到准备发布的区块中,最初的错误表数组来源于链上最后一块中的记录表的错误表序列。

(6)将步骤(5)中验证出来错误的记录表号添加到错误数组中,并将区块发布到区块链网络中;区块等待共识。

(7)当步骤(5)产生的区块被共识后,返回块中记录相关的区块号和表号;共识成功的结果至少包含区块号和表号,共识失败也需要将失败信息传回。

(8)从最新表往前验证表正确性,错误表号添加到错误数组,数组保持有序,防止随机审计出现遗漏,错误数组与所有表中的错误表序列合并,更新错误表序列签名;

(9)重复步骤(3)-步骤(8)直至处理完记录池中所有记录,最终将使用者所有可公开记录备份在区块链网络中,并且无法被篡改,同时使用者可以通过对比防篡改节点中的数据验证数据。

进一步地,步骤(1)中用户将完整的数据保存在自己管理的数据库中,无需向外界公开,使用者保存的原始数据本身就是正确的,不包含错误信息。

进一步地,步骤(2)中用户对数据进行自定义的处理,制定规则将收到的数据做一层封装,将可以公开的信息展示出来作为一条记录存在防篡改节点中。处理操作可以包括剪裁,加密,处理过后的数据可以被任何人获取,处理后的数据也是不包含任何错误的,同一个数据有且仅有一个数据id。

进一步地,步骤(3)中多条记录构成记录表,记录表中数据不重复,最新表中包含上一个表的签名,以及随机表的签名,构成了链式结构,同时错误表序列不参与自身签名的产生。制定合理的协议,将使用者处理过后的数据进行封装,过程是可逆的,记录生成后会尽快打包成记录表一定程度防止恶意篡改。另外,随机表签名和最后表签名增加篡改难度,同时也能快速发现被篡改表,随机表签名是正确的表的签名,当随机数在错误数组中时会重新生成随机数。

进一步地,步骤(4)中将记录表写入区块中,参与共识,保证了可公开数据的真实性。

进一步地,步骤(5)中发现表被篡改后不影响后续表的产生。虽然有可能不断更新错误数组,但由于不参与签名不会影响记录表的打包。同样错误表序列也不参与共识。

进一步地,步骤(6)中迅速扩散错误表信息,增加篡改难度。

进一步地,步骤(7)中返回给使用者公开信息所在的区块号和表号,能够快速查询公开数据的在区块链网络中的位置,有助于数据恢复,最好是与原始数据相关联,以便日后需要时审计。

进一步地,步骤(8)中对记录表进行完整的审计,检测在防篡改节点对应的本地数据有无被篡改,从表尾开始逐一检验是为了防止漏验,增加数据安全性,发现被篡改块,从链上将正确数据取出替换错误数据。

进一步地,针对防篡改节点可以获取错误表序列,通过区块链网络中出错表所在区块来恢复防篡改节点的本地数据;针对使用者需要对某一数据进行操作前,可与防篡改节点中的数据进行对比,恢复正确数据。在防篡改系统中,使用者自行管理的数据与防篡改系统存储的数据进行对比时,从记录表尾往前查找,最先查到的数据是本系统备份的最新数据。

另外,若在步骤(3)中对数据进行篡改,虽然错误数据会被共识,当使用者操作该数据与防篡改系统中存储的数据对比发现异常时,通过链上的信息,可以定位到数据发送者,发送者通过查看自身数据库日志,证明数据在步骤(3)时已被篡改,同时将最新数据再次发送至其他防篡改节点同步到区块链中;若将处理后的数据中的使用者id也一并篡改,则使用者无法获取共识后的结果,将会重新发起请求。

若在步骤(4)中篡改数据,有概率在步骤(4)发现,必定会在步骤(8)中发现。若是验证发现最后一个记录表被篡改,将先通过区块链恢复被篡改的记录表后继续打包记录表。若是发现随机表被篡改,重新选择随机表,不会影响新表的产生。

若记录表中的错误表序列被篡改,可以通过检验错误表序列签名来判断,直接改成错误表数组的内容;若错误表序列签名一并被修改,在合并错误表数组的同时检测所有独有的表是否被篡改。错误表序列的内容来源于被共识的最后记录表的错误表序列。

若使用者自己管理的数据被篡改,在对比时会产生错误,可以通过查询自身的数据库日志恢复,也可以通过查询数据id来恢复最后的正确版本的数据。

下面用一个基于区块链的数据防篡改方法实例来说明具体的实施方式:

模拟一个使用数据防篡改方法的流程,如图1所示,使用者将已经存储的数据处理成可公开形式将数据发送到防篡改节点。

防篡改节点从本地获取节点本地已经存储的记录表,从链上获取最新的错误表数组。同时开始合并本地所有记录表中的错误表序列字段。

防篡改节点从最后表往前开始逐一检验,发现篡改的记录表要更新错误表数组。

防篡改节点接收使用者发来的数据,经过统一风格的处理存入本地的记录池中。

当记录池中记录到达一定数量,或者到了最晚出表时间,将记录池中的记录打包成记录表,打包过程如图2所示,生成表号,验证最后表正确性,验证随机表正确性,对最新记录表中的数据进行签名,产生最新记录表。

将记录表存入区块中,将最新块发送到区块链网络中等待共识。

将共识后的结果不论成功还是失败均把结果发送给使用者。

使用者对公开数据存疑时,通过查看本地记录表查找数据最后被备份的记录,如果对比发现可能被篡改,使用者需要查看自己管理的数据库日志,确定链上同步数据为正确数据。使用者可以通过记录表中的记录来恢复被篡改的数据,同时也可以上传最新的数据来覆盖记录。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1