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

架构设计图

分析

  • 为了保障档案数据的安全性和隐私性,存储档案附件和档案属性存储加密存储在私有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),是行为型设计模式之一。命令模式相对于其他的设计模式来说并没有那么多的条条框框,其实它不是一个很”规范“的模式,不过,就是基于这一点,命令模式相对于其…

C++ 序列化和反序列化学习

定义 程序员在编写应用程序的时候往往需要将程序的某些数据存储在内存中,然后将其写入某个文件或是将它传输到网络中的另一台计算机上以实现通讯。这些过程将会涉及到程序数据转化成能被存储并传输的格式,因此被称为“序列化”(Serializatio…

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

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

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

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

c++ memory 头文件详细介绍

类 指针特征 pointer_traits (C11) 提供关于指针式类型的信息 (类模板) 垃圾收集器支持 pointer_safety (C11) 列出指针安全模式 (枚举) 分配器 allocator 默认的分配器 (类模板) allocator_traits (C11) 提供关于分配器类型的信息 (类模板) allocator_arg_t (C11) 标签类型…

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

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

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

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

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

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

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

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

C++类模板template <class T>简单使用方法

一个简单的例子 两个数比大小 如果两个数都是int类型 class Compare_int { public :Compare(int a,int b){xa;yb;}int max( ){return (x>y)?x:y;}int min( ){return (x<y)?x:y;} private :int x,y; }; 如果两个数是float类型 class Compare_float { public :Compare(…

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

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

C++智能指针中unique_ptr部分内容的讲解

参考链接 std::unique_ptr 介绍 定义位于头文件<memory>std::unique_ptr 是通过指针占有并管理另一对象&#xff0c;并在 unique_ptr 离开作用域时释放该对象的智能指针。 在下列两者之一发生时用关联的删除器释放对象&#xff1a;1&#xff0c;销毁了管理的 unique_pt…

Java基础——Java多线程中sleep()、wait()和notify()

一、sleep()sleep()方法源码&#xff1a;/** * Causes the currently executing thread to sleep (temporarily cease * execution) for the specified number of milliseconds, subject to * the precision and accuracy of system timers and schedulers. The thread * does …

Key_handle的学习

代码 一切尽在不言中 #pragma once#include "common/common.h" #include "sdf/sdf.h"#include <memory>namespace sdf {namespace algorithm {class KeyHandle {public:using erased_internal_data_t char; //使用erased_internal_data_t等效于ch…

Java基础——虚拟机结构

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

解决 SSH Connection closed by foreign host 问题

用 Xshell 连接服务器总是报错 : Connection closed by foreign host.Disconnected from remote host... 原因可能是 SSH 服务器没设置保活时间间隔 , 具体设置如下 : 操作 # vim /etc/ssh/sshd_config 添加两行 , 或去掉注释 : ClientAliveInterval 60ClientAliveCountMax…

Java基础——synchronized

synchronized重要&#xff01;重要&#xff01;重要&#xff01;重要的事情说三遍&#xff0c;一定要记下来哦。 Java语言的关键字&#xff0c;当它用来修饰一个方法或者一个代码块的时候&#xff0c;能够保证在同一时刻最多只有一个线程执行该段代码。一、当两个并发线程访问同…