目前基于區塊鏈的檔案防篡改系統的設計如何實現防篡改

架構設計圖

分析

  • 為了保障檔案數據的安全性和隱私性,存儲檔案附件和檔案屬性存儲加密存儲在私有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.pswp.cn/news/447016.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/447016.shtml
英文地址,請注明出處:http://en.pswp.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;能夠保證在同一時刻最多只有一個線程執行該段代碼。一、當兩個并發線程訪問同…