目前基于区块链的档案防篡改系统的设计如何实现防篡改

架构设计图

分析

  • 为了保障档案数据的安全性和隐私性,存储档案附件和档案属性存储加密存储在私有IPFS集群,档案的IPFS地址和数字指纹存储在私有区块链上。公有区块链定期存储和检查私有区块链最新不可逆区块的高度和哈希值,以保障私有区块链上数据的真实性。(私有链上的数据准确无误之后,才会将区块的哈希信息定期存储到公有链上,虽然引入了公有链保障了数据的安全性和可靠性,但是往公有链上记录数据需要花费手续费,因此可改用联盟链,但是联盟链的安全性相对于公有链很差,是一个半中心化的平台,需要进一步优化)
  • MongoDB则用于存储区块链数据管理平台中的用户信息、档案统计信息和档案属性的最新信息,用于档案的模糊查询。

智能合约架构设计

分析

  • 区块链保护子系统中的智能合约架构如上图所示,私有链保护合约(PfivNeChain Protection Contract,PCPC)是运行在公有链上的智能合约,用于存储私有链区块的高度和哈希值等信息,实现私有区块链的保护。
  • 档案保护控制合约(Archive Protection Controller Contract,APCC)、自我保护合约(Self ProtectionContract,SPC)、工厂类合约(Factory ClassContract,FCC)是运行在私有链上的全局合约,其中SPC合约用于记录智能合约写入数据的次数,并定期与公有区块链进行锚定;FCC合约会在新增档案时,为每个档案创建对应的档案信息存储合约(AISC),AISC合约存储了档案的所有历史版本的摘要信息,包括档案对象哈希值和IPFS地址等;APCC合约存储了档案编号和AISC合约的对应关系。

区块链结构图

BlockChain 与Ethereum 介绍| 王子亭的博客

具体的流程图(区块链+IPFS)

如何防篡改

  • 该系统是信任数字档案管理子系统的权限控制和发出的RESTful调用请求操作的,并且通过存储档案多个历史版本的方式,实现了档案修改历史的追溯和档案信息的恢复。
  • 数字据档案管理系统具有自己的权限管理机制,只有具备相应权限的管理员才能执行新增或修改电子档案的操作,并通过RESTful接口调用的方式更新区块链和智能合约中的内容。
  • 即使档案管理系统的管理员账户和密码被黑客获取,以该管理员的身份更新本地数据库和区块链中档案信息。IPFS中存储了数字档案每个更新后的版本的完整信息,区块链中存储了每个版本档案的IPFS地址,通过RESTful接口依然可以查询到该档案的修改历史,并且恢复到某个历史状态。RESTful接口的设计非常关注数据传输的安全性和可靠性,在使用https协议的基础上,还对档案信息进行了AES加密传输,并通过时间戳、随机数、数字签名参数解决了重放攻击和数据篡改的问题。
  • 即使https被黑客攻击,只要没有获得区块链数据保护子系统的私有密钥就不能解密得到档案的原始信息,并且只要没有获得档案馆的私有密钥就不能重新计算数字签名,也就不能篡改加密后的档案数据、时间戳和随机数参数,不能对RESTful接口发起重放攻击。
  • IPFS是基于内容存储的文件系统,它以内容的哈希值作为地址,取出内容时还会验证哈希值是否与地址一致,因此使用IPFS存储档案数据具有很强的防篡改性。此外,智能合约在存储了档案IPFS地址的同时,也存储了档案的哈希值,在从IPFS取出数据之后,还能够再次验证档案数据的真实性。智能合约的数据存储在区块上,而区块一旦生成内容就不能够被篡改,只能通过“分叉”的方式来替换已有区块的内容,并且生成越早的区块,被替换的难度就越大。以太坊公有链主要使用PoW共识机制,因此存在51%攻击的可能性,它是指如果某个节点拥有了全网51%的计算能力之后,就能够比其他节点更快的生成区块,使现有区块链的主链分叉,形成更长的一条区块链并最终被其他所有节点接受,成为新的主链。但由于整个以太坊区块链的计算能力是非常巨大的,某个个体或组织很难拥有全网51%的计算能力,因此可以被认为是安全的。本地的私有链环境则使用了PoA共识机制,它兼具了区块链的不可篡改性和本地环境的可管理性,即区块只能由授权节点产生而与节点的计算能力无关,因此能够免51%攻击的问题。并且私有链区块的高度和哈希值也会一定频率存储到公有链上进行保护,如果私有链出现了分叉的情况,必然会导致已生成区块哈希值的变化,通过与公有链存储的区块高度和哈希值的对比也能够及时发现。该方案基于区块链和IPFS技术实现了一种链式保护机制,即通过公有链智能合约存储私有链区块摘要信息的方式实现对私有链上数据的保护与验证,通过私有链智能合约存储档案对象IPFS地址和哈希值的方式实现对IPFS中档案对象的保护与验证,通过IPFS中的档案对象实现了对本地数据库中的档案信息的保护与验证。每次档案馆通过RESTful接口获取档案时,RESTful服务器都会在后台对数据的真实性进行验证,能够及时地发现并定位私有区块链、IPFS的数据篡改行为,档案馆自身也可以通过本地数据库与档案对象的比对,发现本地的数据篡改行为并进行处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/447016.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IPFS的文件存储模式

IPFS是如何进行文件存储的 IPFS采用的索引结构是DHT(分布式哈希表),数据结构是MerkleDAG(Merkle有向无环图) DHT(分布式哈希表) 参考链接MerkleDAG(Merkle有向无环图) 参考链接MerkleDAG功能…

Android设计模式之——解释器模式

一、介绍 解释器模式(Interpreter Pattern)是一种用的比较少的行为型模式,其提供了一种解释语言的语法或表达式的方式,该模式定义了一个表达式接口,通过该接口解释一个特定的上下文。在这么多的设计模式中&#xff0c…

在Docker里面安装Ubuntu,并且使用ssh进行连接

创建Ubuntu镜像 1,拉取Ubuntu系统的镜像 docker pull ubuntu2、查看拉取是否成功 docker images3,运行容器 docker run --name 新建的容器的名字 -ti -v /AAA:/BBB -d -p 3316:22 ubuntu(这个是镜像的名字)宿主机根目录中的AAA文件夹就映射到了容器…

Android设计模式之——命令模式

一、介绍 命令模式(Command Pattern),是行为型设计模式之一。命令模式相对于其他的设计模式来说并没有那么多的条条框框,其实它不是一个很”规范“的模式,不过,就是基于这一点,命令模式相对于其…

Android设计模式之——观察者模式

一、介绍 观察者模式是一个使用率非常高的模式,它最常用的地方是GUI系统、订阅——发布系统。因为这个模式的一个重要作用就是解耦,将被观察者和观察者解耦,使得它们之间的依赖性更小,甚至做到毫无依赖。以GUI系统来说&#xff0…

Android设计模式之——备忘录模式

一、介绍 备忘录模式是一种行为模式,该模式用于保存对象当前状态,并且在之后可以再次恢复到此状态,这有点像我们平时说的”后悔药“。备忘录模式实现的方式需要保证被保存的对象状态不能被对象从外部访问,目的是为了保护好被保存…

C++ using的三种使用策略以及具体的用法

Using的使用方法 1,命名空间的使用 为了防止代码冲突,都会使用到命名空间。假设这样一种情况,当一个班上有两个名叫 Zara 的学生时,为了明确区分他们,我们在使用名字之外,不得不使用一些额外的信息&#…

Android设计模式之——迭代器模式

一、介绍 迭代器模式(Iterator Pattern)又称为游标(Cursor)模式,是行为型设计模式之一。迭代器模式算是一个比较古老的设计模式,其源于对容器的访问,比如Java中的List、Map、数组等&#xff0c…

Android设计模式之——模板方法模式

一、介绍 在面向对象开发过程中,通常会遇到这样的一个问题,我们知道一个算法所需的关键步骤,并确定了这些步骤的执行顺序,但是,某些步骤的具体实现是未知的,或者说某些步骤的实现是会随着环境的变化而改变…

Android设计模式之——访问者模式

一、介绍 访问者模式是一种将数据操作与数据结构分离的设计模式,它是《设计模式》中23种设计模式中最复杂的一个,但它的使用频率并不高,正如《设计模式》的作者GOF对访问者模式的描述:大多数情况下,你不需要使用访问者…

Android设计模式之——中介者模式

一、介绍 中介者模式(Mediator Pattern)也称为调解者模式或调停者模式,Mediator本身就有调停者和调解者的意思。 在日常生活中调停者或调解者这个角色我们见得比较多的是“和事老”,也就是说调解两个有争端的人的角色&#xff0…

Java基础——虚拟机结构

一、Java平台结构图二、JVM、JRE和JDK关系JVM:Java Virtual Machine(Java虚拟机),负责执行符合规范的Class文件 JRE: Java Runtime Environment (java运行环境),包含JVM和类库 JDK&a…

C++:MAC安装Boost库文件并且使用CLion开发

boost的filestem库 C在17版本的标准库中引入了一个filesystem库,用来处理文件路径,以及文件访问。很多编译器对filesystem库的支持还不是很好。为了解决这个问题,可以临时使用boost::filesystem来替代。其实C17标准中的filesystem库就是从bo…

Java基础——Java异常处理机制

一、引言 try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解。不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单、听话。不信?那你看看下面的代码…

clion在使用sqlite3的时候,显示Undefined symbols for architecture x86_64错误的解决办法

显示Undefined symbols for architecture x86_64错误的原因 1、缺少静态库 环境:在模拟器上报错但在真机上能运行成功,而且报的错误来自于第三方库。原因:architecture x86_64 是指模拟器的架构,意思就是 Crypto 变量在模拟器架…

Java基础——类加载机制及原理

一、什么是类的加载? 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Cl…

在Ubuntu环境下使用vcpkg安装sqlite_orm包文件

Ubuntu安装vcpkg 从github下载vcpkg的安装包,在usr/local路径下面执行如下命令 git clone https://github.com/Microsoft/vcpkg.git cd vcpkg //进入源码目录 ./bootstrap-vcpkg.sh //执行./bootstrap-vcpkg.sh进行编译安装,这个过程很慢 编译安装好…

window电脑查看ssh公钥,以及将自己的公钥添加到Github等类似网站

查看本机的ssh公钥 使用命令 cd ~/.ssh使用命令 ls 可以看到 id_rsa id_rsa.pub known_hosts 三个文件,此处需要的是id_rsa.pub文件使用命令 cat id_rsa.pub 查看文件的内容拷贝这段内容 添加自己的公钥 进入账户的设置页面参照如下步骤,进入SSH Key…

java八大排序算法

一、概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 我们这里说说八大排序就是内部排序。 当n较大,则应采…

windows安装 Git Large File Storage大文件下载工具ge

下载地址 导航到 git-lfs.github.com 并单击Download开始下载git-lfs的用法指南 验证安装成功 打开Git Bash验证安装成功,使用命令 git lfs install ,如果出现 >Git LFS initlized,就代表安装成功参考链接 安装 Git Large File Storag…