CN115098893A - 基于区块链的数据存储方法及装置 - Google Patents
基于区块链的数据存储方法及装置 Download PDFInfo
- Publication number
- CN115098893A CN115098893A CN202210762348.9A CN202210762348A CN115098893A CN 115098893 A CN115098893 A CN 115098893A CN 202210762348 A CN202210762348 A CN 202210762348A CN 115098893 A CN115098893 A CN 115098893A
- Authority
- CN
- China
- Prior art keywords
- data
- tree
- blockchain
- file
- hash value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Business, Economics & Management (AREA)
- Bioethics (AREA)
- Computer Hardware Design (AREA)
- Accounting & Taxation (AREA)
- General Health & Medical Sciences (AREA)
- Finance (AREA)
- Health & Medical Sciences (AREA)
- General Business, Economics & Management (AREA)
- Technology Law (AREA)
- Strategic Management (AREA)
- Marketing (AREA)
- Development Economics (AREA)
- Economics (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开提供了一种基于区块链的数据存储方法及装置。所述方法包括:将第一文件划分成多个数据块;根据所述多个数据块,生成所述第一文件对应的第一默克尔树;将所述第一默克尔树的根哈希值上传至区块链;响应于所述多个数据块中的至少一个数据块被修改,生成所述第一文件对应的第二默克尔树,所述第一默克尔树和所述第二默克尔树中的节点一一对应,所述第二默克尔树包括基于所述至少一个数据块生成的目标节点,所述第二默克尔树还包括除所述目标节点之外的剩余节点,且所述剩余节点与所述第一默克尔树中的与所述剩余节点对应的节点的哈希值相同;将所述第二默克尔树的根哈希值上传至所述区块链。
Description
技术领域
本公开涉及区块链技术领域,具体涉及一种基于区块链的数据存储方法及装置。
背景技术
现有技术中,完整的数据(如一个文件)采用一个哈希值上链,当数据修改时,无法追溯该修改。
发明内容
本公开实施例提供一种基于区块链的数据存储方法及装置,以降低存储开销。
第一方面,提供一种基于区块链的数据存储方法,所述方法包括:将第一文件划分成多个数据块;根据所述多个数据块,生成所述第一文件对应的第一默克尔树;将所述第一默克尔树的根哈希值上传至区块链;响应于所述多个数据块中的至少一个数据块被修改,生成所述第一文件对应的第二默克尔树,所述第一默克尔树和所述第二默克尔树中的节点一一对应,所述第二默克尔树包括基于所述至少一个数据块生成的目标节点,所述第二默克尔树还包括除所述目标节点之外的剩余节点,且所述剩余节点与所述第一默克尔树中的与所述剩余节点对应的节点的哈希值相同;将所述第二默克尔树的根哈希值上传至所述区块链。
可选地,在一些实施例中,所述多个数据块包括未被修改的第一数据块,所述第一数据块被存储至第一存储空间,所述第一默克尔树包括与所述第一数据块对应的第一叶子节点,所述第二默克尔树包括与所述第一数据块对应的第二叶子节点,所述第一叶子节点和所述第二叶子节点均指向所述第一存储空间。
可选地,在一些实施例中,所述第一数据为多方共享数据。
可选地,在一些实施例中,所述将所述第二默克尔树的根哈希值上传至所述区块链包括:将第一信息上传至区块链,所述第一信息包括所述第二默克尔树的根哈希值以及所述第一默克尔树的引用。
可选地,在一些实施例中,所述区块链为联盟链或私有链。
可选地,在一些实施例中,所述方法用于区块链管理系统。
第二方面,提供一种基于区块链的数据存储装置,所述装置包括:分割模块,用于将第一文件划分成多个数据块;生成模块,用于根据所述多个数据块,生成所述第一文件对应的第一默克尔树;上传模块,用于将所述第一默克尔树的根哈希值上传至区块链;所述生成模块还用于响应于所述多个数据块中的至少一个数据块被修改,生成所述第一文件对应的第二默克尔树,所述第一默克尔树和所述第二默克尔树中的节点一一对应,所述第二默克尔树包括基于所述至少一个数据块生成的目标节点,所述第二默克尔树还包括除所述目标节点之外的剩余节点,且所述剩余节点与所述第一默克尔树中的与所述剩余节点对应的节点的哈希值相同;所述上传模块还用于将所述第二默克尔树的根哈希值上传至所述区块链。
可选地,在一些实施例中,所述多个数据块包括未被修改的第一数据块,所述第一数据块被存储至第一存储空间,所述第一默克尔树包括与所述第一数据块对应的第一叶子节点,所述第二默克尔树包括与所述第一数据块对应的第二叶子节点,所述第一叶子节点和所述第二叶子节点均指向所述第一存储空间。
可选地,在一些实施例中,所述第一数据为多方共享数据。
可选地,在一些实施例中,所述将所述第二默克尔树的根哈希值上传至所述区块链包括:将第一信息上传至区块链,所述第一信息包括所述第二默克尔树的根哈希值以及所述第一默克尔树的引用。
可选地,在一些实施例中,所述区块链为联盟链或私有链。
可选地,在一些实施例中,所述装置为区块链的管理系统。
第三方面,提供一种基于区块链的数据存储装置,包括:存储器,用于存储指令;处理器,用于执行所述存储器中存储的指令,以执行第一方面所述的方法。
第四方面,提供了一种计算机程序产品,所述计算机程序产品包括:计算机程序代码,当所述计算机程序代码在计算机上运行时,使得计算机执行第一方面所述的方法。
第五方面,提供了一种计算机可读介质,所述计算机可读介质存储有程序代码,当所述计算机程序代码在计算机上运行时,使得计算机执行第一方面所述的方法。
本公开实施例将文件分割为多个数据块,基于数据块生成默克尔树。当某个数据块被修改时,依据被修改的数据块重新生成第二默克尔树,并保证第二默克尔树中与修改数据不相关的节点的哈希值保持不变,从而实现数据修改的可追溯。
附图说明
图1是本公开一实施例提供的区块链系统的示意性结构图。
图2是本公开一实施例提供的基于区块链的数据存储方法的示意性流程图。
图3是本公开又一实施例提供的基于区块链的数据存储方法的示意性流程图。
图4是本公开一实施例提供的基于区块链的数据存储方法的示意性结构图。
图5是本公开一实施例提供的基于区块链的数据存储装置的示意性框图。
图6是本公开又一实施例提供的基于区块链的数据存储装置的示意性框图
具体实施方式
下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本公开一部分实施例,而不是全部的实施例。
区块链(Blockchain)
参见图1,区块链100是一个典型的分布式协同系统。该系统包括多个区块链节点110。该多个区块链节点110可以共同维护一个不断增长的分布式数据记录。这些记录的数据可以通过密码学技术保护内容和时序,使得任何一方难以篡改、抵赖、造假。区块链节点110可以是具有计算能力的设备,例如,服务器、服务器组、区块链芯片等,其中,服务器组可以是集中式的,也可以是分布式的。在另一些实现方式中,上述服务器还可以是为云平台提供服务的服务器。
在区块链中,数据(例如,交易信息、交易执行结果等)可以以区块(Block)的形式被封装。区块彼此之间可以通过前向的引用彼此链接形成“链”,即区块链。通常,可以将区块链中的第一个区块称为“创始区块”或“初始区块”,将区块链中位于当前区块之前的一个区块称为“上一区块”,将区块链中位于当前区块之后的一个区块称为“后继块”。
通常,区块可以包括区块头和区块体。区块头可以包含当前区块的基本信息,用以保证当前区块能正确的进入区块链。例如,区块头可以记录当前区块的上一区块的区块哈希值。又如,区块头还可以记录当前区块的区块高度。区块高度简称“块高”,用来识别区块在区块链中的位置。在一些实现方式中,创始区块的块高为0。区块体可以用于记录交易信息。该交易信息例如可以包括交易数量和交易数据等信息。
区块链一般被划分为三种类型:公有链(Public Blockchain),私有链(PrivateBlockchain)和联盟链(Consortium Blockchain)。此外,还可以有上述多种类型的结合,比如私有链+联盟链、联盟链+公有链等。本公开所提供的实施方式能够在合适类型的区块链中实现。
共识机制
共识机制可以理解为区块链中的负责记账的节点(或称记账节点)之间如何达成共识,以认定一个记录的有效性。
区块链的共识机制具备“少数服从多数”以及“人人平等”的特点,其中“少数服从多数”并不完全指节点个数,也可以是计算能力、股权数或者其他的计算机可以比较的特征量。“人人平等”是当节点满足条件时,所有节点都有权优先提出共识结果、直接被其他节点认同后并最后有可能成为最终共识结果。以比特币为例,采用的是工作量证明,只有在控制了全网超过51%的记账节点的情况下,才有可能伪造出一条不存在的记录。当加入区块链的节点足够多的时候,这基本上不可能,从而杜绝了造假的可能。
区块链的自信任主要体现于分布于区块链中的用户无须信任交易的另一方,也无须信任一个中心化的机构,只需要信任区块链协议下的软件系统即可实现交易。这种自信任的前提是区块链的共识机制,即在一个互不信任的市场中,要想使各节点达成一致的充分必要条件是每个节点出于对自身利益最大化的考虑,都会自发、诚实地遵守协议中预先设定的规则,判断每一笔记录的真实性,最终将判断为真的记录记入区块链之中。换句话说,如果各节点具有各自独立的利益并互相竞争,则这些节点几乎不可能合谋欺骗你,而当节点们在网络中拥有公共信誉时,这一点体现得尤为明显。区块链技术正是运用一套基于共识的数学算法,在机器之间建立“信任”网络,从而通过技术背书而非中心化信用机构来进行全新的信用创造。
区块链的共识机制例如可以是以下共识机制中的一种:工作量证明机制(ProofOf Work,PoW)、权益证明机制、股份授权证明机制、验证池机制以及实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)。
智能合约
智能合约是一套以数字形式定义的承诺,包括合约参与方可以在上面执行这些承诺的协议。或者说,智能合约可以理解为部署在计算机系统上的一段程序,当智能合约的触发条件被满足时,智能合约可以被自动地执行。
区块链的出现为智能合约的实现提供了技术支撑。将智能合约以数字化的形式写入区块链中,由区块链技术的特性保障智能合约的存储、读取、执行整个过程透明可跟踪、不可攥改。另一方面,可以由区块链自带的共识算法构建出一套状态机系统,使得智能合约能够高效地运行。
在一些实现方式中,用户可以通过向区块链系统提交交易的方式,调用智能合约,并对智能合约中记录的数据进行设置,并将设置后的智能合约存储在区块链中。相应地,当智能合约的特定条件被触发后,区块链节点可以执行智能合约,并记录智能合约的执行结果,智能合约的执行状态。
目前,各行业乃至行业中某些领域(例如,金融、公益、保险、跨境支付等)会根据自身的产业结构来搭建不同类型的区块链,并且在区块链上记录该行业或产业中有价值的信息与资产。
区块链的使用者可以根据需要将一些数据存储在区块链中。将数据存储在区块链中也可以称为将数据上链。数据可以指以数字形式存储的任意数据。例如,数据可以包括文字数据或音视频数据等。
区块链通常仅存储数据量较小的数据。当一份数据对应的数据量较大(例如数据量超过2k或2M)时,可以将数据本身存储在区块链下,而仅将可以代表该数据的信息上传至区块链中存证。数据可以以任意形式存储。例如,数据可以存储在用户本地。又如,数据可以存储在第三方存储系统中。第三方存储系统例如可以包括OSS。
作为一个示例,可以根据数据量较大的数据计算出该数据对应的哈希值。哈希技术是一种数字摘要技术,该技术通过哈希函数(又称散列函数)把任意一串字符串或其他类型的数据映射到一个固定长度的整数。哈希值也可以称为哈希摘要。本公开实施例计算数据哈希值使用的哈希函数不做限定。
计算出数据对应的哈希值后,可以将哈希值存储在区块链中,将数据存储在第三方存储系统中。使用同一个哈希函数计算相同的数据,将得到相同的哈希值。而使用同一个哈希函数计算不同的数据,将得到不同的哈希值。因此,计算出数据对应的哈希值,将哈希值上传至区块链中,使得数据可验证。
文件上传至区块链后,可能由于各种原因被修改。现有技术中将一个文件作为一个整体生成一个哈希值,当该文件被修改后,无法追溯文件的修改。
有鉴于此,本公开实施例提供一种基于区块链的数据存储方法,以实现文件修改可追溯。
下面结合图2,对本公开实施例提供的基于区块链的数据存储方法进行详细描述。
图2是本公开一实施例提供的基于区块链的数据存储方法的示意性流程图。本公开实施例提供的方法可以用于多方数据共享。
在一些实施例中,本公开实施例提供的方法可以用于区块链的管理系统。区块链的管理系统也可以称为业务系统。区块链的管理系统可以用于与用户交互,并将用户的数据上传至区块链中。作为一个示例,区块链的管理系统可以指区块链客户端。作为另一个示例,区块链的管理系统可以位于多个数据共享方的业务系统和区块链之间,用于将数据共享方的业务系统的数据上传至区块链中存证。当区块链的管理系统位于多个数据共享方的业务系统和区块链之间时,区块链的管理系统可以具备多业务系统扩展能力,从而适用于各种多方数据共享系统。
参见图2,在步骤S210,将第一文件划分成多个数据块。第一文件可以指任意的需要上传至区块链中存证的文件。本公开实施例对第一文件的数据量大小、数据形式等不做限定。例如,第一文件可以指一份交易合同。又如,第一文件可以指一份视频数据。
可以采用多种方式对第一文件进行划分,本公开实施例对具体的划分规则不做限定。作为一个示例,可以按照一定的数据量大小将第一数据进行划分。例如,可以将第一文件按照每W数据量为一个数据块进行分割,得到多个数据块。W可以是任意值,例如,W可以为2k或1M等。
多个数据块可以指将第一文件进行分割后得到的多个子数据集。每个子数据集可以称为一个数据块。应理解,将第一文件进行划分后,多个数据块应该包含第一数据的所有数据。即,应该可以根据多个数据块还原出第一文件。
在步骤S220,根据多个数据块,生成第一文件对应的第一默克尔树。默克尔树是一种树的数据结构,由一组叶子节点、一组中间节点和一个根节点组成。可以通过多种方式根据多个数据块生成第一文件对应的第一默克尔树,本公开实施例对生成第一默克尔树的具体方式不做限定。
作为一个示例,首先,计算多个数据块中每个数据块的哈希值,将每个数据块的哈希值作为一个第一默克尔树的叶子节点,得到多个叶子节点。叶子节点也可以简称为叶子。应理解,叶子节点也可以直接由第一数据子集组成,本公开实施例对叶子节点的具体组成不做限定。
其次,将多个叶子节点进行分组,每M个叶子节点作为一组。根据每组叶子节点计算出一个哈希值,该哈希值对应一个中间节点。依次计算每组叶子节点对应的哈希值,得到多个中间节点,将该多个中间节点记为第一层中间节点。将第一层中间节点进行分组,每M个第一层中间节点为一组。计算每组的哈希值,得到第二层中间节点。以此类推,直到某一层中间节点只有一个节点时,该节点即为第一默克尔树的根节点。根节点可以对应一个根哈希值。
M可以是任意的正整数。作为一个示例,M可以为2。此时,第一默克尔树为一棵二叉树。二叉树结构简单,便于实现。
在一些实施例中,根据多个第一数据子集生成第一默克尔树可以由一个计算节点完成,也可以由多个计算节点共同完成。计算节点可以指具有计算能力的软硬件设备。例如,一个计算节点可以指一台计算机或云主机。由多个计算节点共同生成第一默克尔树,可以实现分布式计算,提升计算效率。同时,可以防止由于某个计算节点计算超大数据量产生的性能瓶颈。例如,可以防止由于某个计算节点计算较大的数据量而产生宕机。
在步骤S230,将第一默克尔树的根哈希值上传至区块链。对第一文件进行任何修改后,第一文件对应的默克尔树的根哈希值与修改前的第一文件对应的根哈希值不同。因此,将默克尔树的根哈希值上传至区块链中存证,使第一文件可验证。从而可以保证第一文件为可信的,未被篡改的文件。
应理解,在将第一默克尔树的根哈希值上传至区块链时,还可以同时上传与第一文件相关的其他数据。例如,可以上传第一默克尔树的根哈希值的存储地址、第一文件的数据所有者、第一文件的上传时间等。本公开实施例对将第一文件上传至区块链中存证过程中具体存证的数据不做限定,只要该数据中包含第一文件对应的默克尔树的根哈希值即可。
区块链可以是任意的区块链,本公开实施例对上传第一信息的区块链不做限定。在一些实施例中,本公开提供的方法可以用于联盟链和私有链。联盟链和私有链的使用者可能需要修改存储在区块链中的数据。因此,对于联盟链和私有链,使用本公开提供的方法,可以有效地减少存储开销,降低存储成本。
在步骤S240,响应于多个数据块中的至少一个数据块被修改,生成第一文件对应的第二默克尔树。第一默克尔树和第二默克尔树中的节点一一对应。第二默克尔树包括基于至少一个数据块生成的目标节点。第二默克尔树还包括除目标节点之外的剩余节点。且剩余节点与第一默克尔树中的与剩余节点对应的节点的哈希值相同。
第一文件被修改后,根据被修改后的第一文件生成第二默克尔树。对第一文件的修改可以对应于对多个数据块的修改。例如,以图4为例,可以将第一文件(文件1)划分为8个数据块。对第一文件的修改可以指修改其中一个数据块对应的数据,例如,修改数据块8对应的数据为8’。修改后的数据块可以对应于第二默克尔树的目标节点。目标节点可以是第二默克尔树的部分节点,这部分节点对应的哈希值的计算要依赖于第一数据块对应的数据。例如,图4中修改后的第一文件的目标节点可以指第一层节点的节点4’、第二层节点的节点2’以及第三层节点1’。换言之,当第一数据块的数据修改后,目标节点对应的哈希值将对应的改变。除目标节点外,第二默克尔树剩余的节点上的哈希值与第一默克尔树对应的节点上的哈希值相同。
在步骤S250,将第二默克尔树的根哈希值上传至区块链。可以仅将第二默克尔树的根哈希值上传至区块链,也可以同时将与修改后的第一文件相关的信息上传至区块链中,本公开实施例对具体上传的数据不做限定。
本公开实施例将文件分割为多个数据块,基于数据块生成默克尔树。当某个数据块被修改时,依据被修改的数据块重新生成第二默克尔树,并保证第二默克尔树中与修改数据不相关的节点的哈希值保持不变,从而实现数据修改的可追溯。
在一些实施例中,对第一文件修改后,多个数据块包括未被修改的第一数据块。第一数据块被存储至第一存储空间。第一默克尔树包括与第一数据块对应的第一叶子节点,第二默克尔树包括与第一数据块对应的第二叶子节点。第一叶子节点和第二叶子节点均指向第一存储空间。
在本实施例中,通过使第一默克尔树和第二默克尔树对应的相同的数据存储在同一块存储空间中,实现数据的增量存储。即,仅另外存储被修改的数据块。因此,相比于将第一文件作为一个整体进行存储的方式,本公开实施例提供的存储方法,可以降低数据存储量,从而降低存储开销。
可以通过多种方式使第一叶子节点和第二叶子节点均指向第一存储空间。作为一个示例,可以根据每个数据块得到每个数据块对应的哈希值。可以通过任意一种哈希函数计算每个数据块对应的哈希值,本公开对此不做限定。
得到每个数据块对应的哈希值后,可以根据哈希值得到该叶子节点对应的数据块的存储地址。存储地址例如可以指物理存储地址或虚拟存储地址。可以根据多种方式根据哈希值得到叶子节点对应的数据块的存储地址。例如,可以直接将哈希值对应的地址作为存储地址。又如,可以根据映射函数将哈希值映射为一个存储地址。映射函数可以根据实际需要进行设置,本公开实施例对由哈希值映射为存储地址的映射函数的具体函数实现不做限定。
由于使用相同哈希函数计算不同的数据,通常会得到不同的哈希值。而使用相同的哈希函数计算相同的数据,会得到相同的哈希值,因此,通过将数据存储在数据的哈希值对应的存储地址中,可以实现数据快速去重。通过将数据存储在数据的哈希值对应存储地址中,可以简化寻址,快速定位数据。
在一些实施例中,在得到第二默克尔树后,也可以将第一信息上传至区块链。第一信息可以包括第二默克尔树的根哈希值以及第一默克尔树的引用。将第二默克尔树的根哈希值和第一默克尔树的引用共同作为第一信息上传至区块链,可以使数据的修改过程更易被追溯。
可以通过多种方式对第一第一默克尔树引用。例如,可以在第一信息中存储第一默克尔树的根哈希值或存储地址,以便快速定位到第一默克尔树,从而提高数据追溯效率。
本公开实施例在区块链中存储修改后的第一文件对应的第二默克尔树的根哈希值,以及对第一默克尔树的引用,实现文件修改的动态可追溯。
在一些实施例中,本公开实施例提供的方法还可以包括,存储第一默克尔树至共享数据集。共享数据集可以存储在本地,也可以存储在第三方存储系统中,本公开实施例对共享数据集的存储方式不做限定。
可以通过多种方式存储第一默克尔树至共享数据集。例如,可以直接将默克尔树存储到共享数据集中。又如,可以将默克尔树的索引存储在共享数据集中。通过在共享数据集中存储第一默克尔树,可以使数据便于管理。
在一些实施例中,本公开实施例提供的方法还可以包括,根据共享数据集验证待验证数据的合法性。待验证数据可以指数据共享方获得的需要验证的数据。例如,对于多方数据共享的场景,数据共享方A从数据共享方B处获得了文件1。数据共享方A需要对文件1进行验证。验证数据的合法性例如可以指验证该数据是否为在区块链中存证的数据。
本公开实施例通过建立共享数据集,存储数据共享方在区块链中存证的数据,可以简化数据验证流程,避免通过区块链验证数据带来的性能损失。
在一些实施例中,共享数据集中可以仅存储每个数据最新修改的结果。可以理解,数据共享方通常需要验证自己获得的数据是否为最新修改的数据。通过在共享数据集中存储每个数据最新修改的结果,可以快速验证一个数据是否为最新的数据。通过在共享数据集中仅存储最新修改的结果,可以简化存储结构,降低存储开销。
例如,可以根据待验证的数据生成默克尔树。生成默克尔树的规则需要与存储该数据时使用的生成默克尔树的规则相同。搜索共享数据集中是否存在该默克尔树的根哈希值。如果存在,说明该数据为最新修改的数据。如果不存在,说明该数据为篡改过的数据,或修改前的数据。
在一些实施例中,可以对第一信息进行加密。可以理解,第一信息用于存储第一数据。第一数据中可以包括第一默克尔树的根哈希值。在一些实施例中,通过第一默克尔树的根哈希值可以定位到第一默克尔树的根节点。通过根节点可以还原出第一数据。因此,通过对第一信息进行加密,可以保证数据存储的可靠性,提升数据存储安全。可以通过多种方式对第一信息进行加密。例如,可以利用数据共享方的私钥对第一信息进行加密。当另一方需要获取第一信息时,可以利用数据共享方的公钥解密。
在一些实施例中,该方法还可以包括:在上传第一文件前,对第一文件的上传方进行身份验证,验证通过后允许上传方接入区块链管理系统。通过对数据上传方的身份进行验证,可以保证仅经过验证的数据上传方可以操作区块链管理系统。例如,仅经过验证的数据上传方可以通过区块链管理系统将文件在区块链中存证。又如,仅经过验证的数据上传方可以修改存储在区块链管理系统中的文件。又如,仅经过验证的数据上传方可以验证文件的合法性。通过增加身份验证,可以保证具备权限的数据上传方才可以操作区块链管理系统,从而提高区块链管理系统的可靠性,进一步保障数据安全。
为了便于理解,下面结合图3和图4以具体的实施例介绍本公开提供的基于区块链的数据存储方法。
图3以联盟链为例。联盟链中包括两个成员A和B。每个成员通过自己的业务系统接入本公开实施例提供的区块链管理系统320。区块链管理系统320可以与区块链330通信,以将数据上传至区块链330中存证以及获取区块链330提供的凭证。该凭证也可以称为存储凭证、区块链凭证或区块链存储凭证。
A有一份合同文件(记为文件1)需要上传并由B方确认。如图3所示,在步骤S301,接收A的文件1管理申请。区块链管理系统320确认A为经过认证的用户,同意A接入区块链管理系统320并接收文件1。
在步骤S302,生成文件1的默克尔树。区块链管理系统320可以根据文件1生成默克尔树。具体地,区块链管理系统320可以将文件1划分成多个数据块(记为数据块1、数据块2,…,数据块N)。划分规则例如可以包括将文件1按照每1M为一个数据块划分。假设文件1的大小为8M,则区块链管理系统320将文件1划分为8个数据块,每个数据块中的数据大小为1M。应理解,文件1的数据大小可能不为整数,因此,最后一个数据块的大小可能小于1M。
得到多个数据块后,区块链管理系统320可以根据多个数据块生成第一默克尔树。可以通过多种方式根据多个数据块生成第一默克尔树。作为一个示例,如图4所示,区块链管理系统320可以将文件1分割为多个数据块(数据块1、数据块2、…、数据块8)。区块链管理系统320可以计算每个数据块的哈希值,得到多个叶子节点(叶子1、叶子2、…、叶子8)。计算每个数据块的哈希值可以分布式完成。例如,数据块1至数据块4可以在第一计算节点上计算,数据块5至数据块8可以在第二计算节点上执行。可以根据实际的业务需求动态调整每个计算节点上计算的数据块的数量。使用分布式计算,可以避免某一个计算节点由于处理大数据导致的性能急剧下降,同时可以提高处理效率。
继续参见图4,计算出每个数据块的哈希值后,可以将叶子节点两两结合,得到默克尔树的第一层中间节点。可以将第一层中间节点的哈希值两两结合,得到第二层中间节点。依此类推,直到得到默克尔树的根节点。根节点可以对应一个根哈希值。应理解,计算中间节点也可以通过分布式完成。
每个中间节点上可以记录当前中间节点的哈希值以及生成该中间节点的上一层中间节点的哈希值。例如,如图4所示,第一层中间节点的节点1可以根据叶子1和叶子2计算得到。节点1可以记录叶子1和叶子2的哈希值和节点1本身的哈希值。其他中间节点依此类推。即,每个节点上记录该节点对应的哈希值以及组成该节点的节点的哈希值。
在一些实施例中,每个中间节点上还可以存储该中间节点对应的上一次的哈希值。例如,叶子8中记录的数据发生了改变,叶子8变为了叶子8’。叶子8对应的哈希值由hash变为hash’。叶子8’中可以同时记录hash和hash’。此时,定位到叶子8’,即可找到叶子8’存储的数据子集8’修改前的数据子集8。通过在当前节点中存储该节点上一次的哈希值,可以实现动态追溯,便于数据管理。
在一些实施例中,根据文件1生成默克尔树后,可以将文件1对应的默克尔树存储在区块链管理系统320中。可以将文件1对应的默克尔树存储在区块链管理系统320的本地存储空间中。例如,可以将文件1对应的默克尔树存储在区块链管理系统320的硬盘中。也可以将文件1对应的默克尔树存储在第三方存储系统中。
在一些实施例中,可以将文件1存入共享数据集中。在一些实施例中,当文件1为第一次存入区块链管理系统320的文件时,可以在共享数据集中新增文件1对应的记录。当文件1为对已经存储的文件(记为文件X)的修改时,可以在共享数据集中更新文件X的存储内容。例如,可以将文件X对应的记录修改为文件1对应的默克尔树的索引。
应理解,此实施例中,文件1为对文件X修改后生成的文件。例如,文件X为一份交易记录,文件1为在文件X的交易记录上增加了10条交易记录的文件。对于数据共享方而言,文件1和文件X是同一份文件的不同修改版本。在区块链管理系统320中仅存储最新修改的文件,可以简化存储结构。
在另一些实施例中,也可以在共享数据集中存储文件的所有中间修改结果。例如,可以在共享数据集中同时存储文件1和文件X的默克尔树。此时,可以便于检索文件的中间修改记录。
可以将每个数据子集存在该数据子集对应的哈希值映射的存储地址中。例如,可以根据数据子集1计算出叶子1的哈希值(记为hash1)。hash1可以映射一个存储地址(记为ad1)。可以将数据子集1存储在存储地址ad1中。通过这种存储方式,可以直接根据数据对应的哈希值定位到该数据,便于记录和查找数据。同时,由于相同的数据计算出的哈希值相同,通过这种方式存储,可以实现数据去重。即,相同的数据被存储在相同的存储地址中,因此,相同的数据在存储系统中仅会存储一份。可见,本公开实施例通过简单地地址映射可以进一步降低数据的存储开销。
重新参见图3,在步骤S303,将第一信息上传至区块链。第一信息可以包括默克尔树的根节点。在一些实施例中,第一信息还可以包括默克尔树的根节点对应的存储地址。存储地址例如可以指全网可达的存储地址。作为一个示例,默克尔树的根节点的存储地址可以为http地址。
在步骤S304至步骤S305,接收区块链凭证以及转发区块链凭证。数据存储至区块链后,区块链可以提供一个存储凭证,以证明该数据存储在区块链中,从而提高数据的可靠性。区块链管理系统320接收到区块链提供的凭证后,可以将该凭证转发给A。
在步骤S306,A提供文件1’给B。
在步骤S307,接收B发送的文件1’,以验证文件1’的合法性。区块链管理系统320接收到B发送的文件1’后,可以对文件1’进行验证,以验证文件1’的合法性。文件1’的合法性例如可以指文件1’是否与A在区块链中存证的文件1相同。
作为一个示例,区块链管理系统320可以根据文件1’生成默克尔树。生成方式与根据文件1生成默克尔树的方式相同。区块链管理系统320可以对比系统中存储的文件1的默克尔树的根哈希值与文件1’的默克尔树的根哈希值是否相同。如果二者相同,则证明文件1’与文件1相同,是同一份文件。
作为另一个示例,区块链管理系统320并不知道文件1’对应的是哪一份文件。此时,区块链管理系统320可以根据文件1’生成默克尔树,并将该默克尔树的根哈希值与区块链管理系统320中存储的共享数据集进行匹配。若能够从共享数据集中匹配到文件1’的默克尔树的根哈希值,则说明文件1’为在区块链中存证的数据。即,认为文件1’为合法数据。
在步骤S308,返回验证结果。区块链管理系统320验证文件1’后,可以向B返回对文件1’的验证结果。B可以根据区块链管理系统320返回的验证结果,决定是否接受文件1’。
重新参见图4,A上传了一份文件。该文件可以是一个订单信息。该文件包括4个文件(文件1、文件2、文件3和文件4)。4个文件可以分别对应订单的用户信息、商品信息、物流信息以及资金信息。
区块链管理系统320可以分别根据该4个文件生成4棵默克尔树。由于上述4个文件同属于一份订单信息中,因此,A可以分别将每个文件的默克尔树的根哈希值上传至区块链中存证,也可以选择将4个文件合成一个总的默克尔树,并将总默克尔树的根哈希值上传至区块链中存证。
图4中的虚线和虚框表示对订单信息的修改。可以看出,本次修改修改了文件1中的数据子集8和文件4中的数据子集16。修改后,区块链管理系统320可以根据修改后的订单信息生成新的默克尔树。修改后的默克尔树为虚线表示的分支。由于哈希函数的性质,任何一个数据的修改,最终都会生成新的哈希值。因此,本公开实施例提供的数据存储方法可以保证数据可追溯不可篡改。
由图4可以看出,对修改前订单信息的大部分数据无需修改,仅更新修改后的分支以及根哈希值即可。因此,本公开实施例提供的存储方法可以简化存储流程,减少数据重复存储,降低存储开销。由图4还可以看出,文件的每次修改不需要全量同步,只需要进行增量同步即可,因此,可以减少同步的数据量,提高系统性能。
如图4所示,对文件进行修改后,新的默克尔树可以引用旧的默克尔树,以形成默克尔DAG树,从而实现文件修改的可追溯。
上文结合图1至图4,详细描述了本公开的方法实施例,下面结合图5至图6,详细描述本公开的装置实施例。应理解,方法实施例的描述与装置实施例的描述相互对应,因此,未详细描述的部分可以参见前面方法实施例。
图5是本公开实施例提供的基于区块链的数据存储装置的结构示意图。如图5所示,该装置可以包括分割模块510、生成模块520以及上传模块530。
分割模块510可以用于将第一文件划分成多个数据块。
生成模块520可以用于根据所述多个数据块,生成所述第一文件对应的第一默克尔树。
上传模块530用于将所述第一默克尔树的根哈希值上传至区块链。
生成模块520还可以用于响应于多个数据块中的至少一个数据块被修改,生成第一文件对应的第二默克尔树,第一默克尔树和第二默克尔树中的节点一一对应,第二默克尔树包括基于至少一个数据块生成的目标节点,第二默克尔树还包括除目标节点之外的剩余节点,且剩余节点与第一默克尔树中的与剩余节点对应的节点的哈希值相同。
上传模块530还可以用于将第二默克尔树的根哈希值上传至区块链。
可选地,在一些实施例中,所述多个数据块包括未被修改的第一数据块,所述第一数据块被存储至第一存储空间,所述第一默克尔树包括与所述第一数据块对应的第一叶子节点,所述第二默克尔树包括与所述第一数据块对应的第二叶子节点,所述第一叶子节点和所述第二叶子节点均指向所述第一存储空间。
选地,在一些实施例中,所述第一数据为多方共享数据。
可选地,在一些实施例中,所述将所述第二默克尔树的根哈希值上传至所述区块链包括:将第一信息上传至区块链,所述第一信息包括所述第二默克尔树的根哈希值以及所述第一默克尔树的引用。
可选地,在一些实施例中,所述区块链为联盟链或私有链。
可选地,在一些实施例中,所述装置为区块链的管理系统。
图6是本公开又一实施例提供的基于区块链的数据存储装置的示意性框图。图6所示的装置600可以是区块链管理系统的服务器。该装置600例如可以是具有计算功能的计算设备。比如,装置600可以是服务器。装置600可以包括存储器610和处理器620。存储器610可用于存储可执行代码。处理器620可用于执行所述存储器610中存储的可执行代码,以实现前文描述的各个方法中的步骤。在一些实施例中,该装置600还可以包括网络接口630,处理器620与外部设备的数据交换可以通过该网络接口630实现。
应理解,本公开实施例中,该处理器可以为中央处理单元(central processingunit,CPU),该处理器还可以是其他通用处理器、数字信号处理器(digital signalprocessor,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现成可编程门阵列(field programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
应理解,在本公开实施例中,“与A相应的B”表示B与A相关联,根据A可以确定B。但还应理解,根据A确定B并不意味着仅仅根据A确定B,还可以根据A和/或其它信息确定B。
应理解,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
应理解,在本公开的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本公开实施例的实施过程构成任何限定。
在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本公开实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber Line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够读取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,数字通用光盘(digital video disc,DVD))或者半导体介质(例如,固态硬盘(solid state disk,SSD))等。
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以所述权利要求的保护范围为准。
Claims (13)
1.一种基于区块链的数据处理方法,包括:
将第一文件划分成多个数据块;
根据所述多个数据块,生成所述第一文件对应的第一默克尔树;
将所述第一默克尔树的根哈希值上传至区块链;
响应于所述多个数据块中的至少一个数据块被修改,生成所述第一文件对应的第二默克尔树,所述第一默克尔树和所述第二默克尔树中的节点一一对应,所述第二默克尔树包括基于所述至少一个数据块生成的目标节点,所述第二默克尔树还包括除所述目标节点之外的剩余节点,且所述剩余节点与所述第一默克尔树中的与所述剩余节点对应的节点的哈希值相同;
将所述第二默克尔树的根哈希值上传至所述区块链。
2.根据权利要求1所述的方法,所述多个数据块包括未被修改的第一数据块,所述第一数据块被存储至第一存储空间,所述第一默克尔树包括与所述第一数据块对应的第一叶子节点,所述第二默克尔树包括与所述第一数据块对应的第二叶子节点,所述第一叶子节点和所述第二叶子节点均指向所述第一存储空间。
3.根据权利要求1所述的方法,所述第一数据为多方共享数据。
4.根据权利要求1所述的方法,所述将所述第二默克尔树的根哈希值上传至所述区块链包括:
将第一信息上传至区块链,所述第一信息包括所述第二默克尔树的根哈希值以及所述第一默克尔树的引用。
5.根据权利要求1所述的方法,所述区块链为联盟链或私有链。
6.根据权利要求1-5中任一项所述的方法,所述方法用于区块链管理系统。
7.一种基于区块链的数据存储装置,所述装置包括:
分割模块,用于将第一文件划分成多个数据块;
生成模块,用于根据所述多个数据块,生成所述第一文件对应的第一默克尔树;
上传模块,用于将所述第一默克尔树的根哈希值上传至区块链;
所述生成模块还用于响应于所述多个数据块中的至少一个数据块被修改,生成所述第一文件对应的第二默克尔树,所述第一默克尔树和所述第二默克尔树中的节点一一对应,所述第二默克尔树包括基于所述至少一个数据块生成的目标节点,所述第二默克尔树还包括除所述目标节点之外的剩余节点,且所述剩余节点与所述第一默克尔树中的与所述剩余节点对应的节点的哈希值相同;
所述上传模块还用于将所述第二默克尔树的根哈希值上传至所述区块链。
8.根据权利要求7所述的装置:
所述多个数据块包括未被修改的第一数据块,所述第一数据块被存储至第一存储空间,所述第一默克尔树包括与所述第一数据块对应的第一叶子节点,所述第二默克尔树包括与所述第一数据块对应的第二叶子节点,所述第一叶子节点和所述第二叶子节点均指向所述第一存储空间。
9.根据权利要求7所述的装置,所述第一数据为多方共享数据。
10.根据权利要求7所述的装置,所述将所述第二默克尔树的根哈希值上传至所述区块链包括:
将第一信息上传至区块链,所述第一信息包括所述第二默克尔树的根哈希值以及所述第一默克尔树的引用。
11.根据权利要求7所述的装置,所述区块链为联盟链或私有链。
12.根据权利要求7-11中任一项所述的装置,所述装置为区块链的管理系统。
13.一种基于区块链的数据存储装置,包括:
存储器,用于存储指令;
处理器,用于执行所述存储器中存储的指令,以执行如权利要求1-6中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210762348.9A CN115098893A (zh) | 2022-06-30 | 2022-06-30 | 基于区块链的数据存储方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210762348.9A CN115098893A (zh) | 2022-06-30 | 2022-06-30 | 基于区块链的数据存储方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115098893A true CN115098893A (zh) | 2022-09-23 |
Family
ID=83295693
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210762348.9A Pending CN115098893A (zh) | 2022-06-30 | 2022-06-30 | 基于区块链的数据存储方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115098893A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116069788A (zh) * | 2023-03-24 | 2023-05-05 | 杭州趣链科技有限公司 | 数据处理方法、数据库系统、计算机设备和存储介质 |
-
2022
- 2022-06-30 CN CN202210762348.9A patent/CN115098893A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116069788A (zh) * | 2023-03-24 | 2023-05-05 | 杭州趣链科技有限公司 | 数据处理方法、数据库系统、计算机设备和存储介质 |
CN116069788B (zh) * | 2023-03-24 | 2023-06-20 | 杭州趣链科技有限公司 | 数据处理方法、数据库系统、计算机设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10892898B2 (en) | Shared blockchain data storage | |
US11422981B2 (en) | Information management and access control in a database | |
CN111144881A (zh) | 对资产转移数据的选择性访问 | |
US11394556B2 (en) | Blockchain-enabled computing | |
CN115210741B (zh) | 部分有序的区块链 | |
EP3776250B1 (en) | Performing map iterations in blockchain-based system | |
US20230316273A1 (en) | Data processing method and apparatus, computer device, and storage medium | |
US11314885B2 (en) | Cryptographic data entry blockchain data structure | |
US10637666B1 (en) | Migrating data for decentralized applications between disparate backend storage providers | |
US10880076B1 (en) | Backup of encrypted information stored off-chain in a blockchain-based decentralized storage system | |
JP2023504492A (ja) | データ・オブジェクトの効率的しきい値ストレージ | |
EP3759864A1 (en) | Computer implemented voting process and system | |
EP3769233B1 (en) | Performing map iterations in a blockchain-based system | |
CN115004625A (zh) | 用于区块链分类账的索引结构 | |
CN112511316B (zh) | 单点登录接入方法、装置、计算机设备及可读存储介质 | |
JP2023535914A (ja) | 機密保護プロトコルを使用するサプライ・チェーン用の持続可能なトークン | |
CN112000632A (zh) | 密文的分享方法、介质、分享客户端及系统 | |
CN112084186A (zh) | 拆分和合并存储 | |
CN115208628B (zh) | 基于区块链的数据完整性验证方法 | |
CN111698198B (zh) | 秘密生成和份额分发 | |
CN115098893A (zh) | 基于区块链的数据存储方法及装置 | |
CN117371010A (zh) | 数据匿踪查询方法、电子设备和可读存储介质 | |
CN114338081B (zh) | 多区块链统一身份认证方法、装置、计算机设备 | |
US20220191034A1 (en) | Technologies for trust protocol with immutable chain storage and invocation tracking | |
US20220399988A1 (en) | Linking blockchain operations |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |