CN111444197B - 一种块链式账本中数据记录的验证方法、装置及设备 - Google Patents
一种块链式账本中数据记录的验证方法、装置及设备 Download PDFInfo
- Publication number
- CN111444197B CN111444197B CN202010538204.6A CN202010538204A CN111444197B CN 111444197 B CN111444197 B CN 111444197B CN 202010538204 A CN202010538204 A CN 202010538204A CN 111444197 B CN111444197 B CN 111444197B
- Authority
- CN
- China
- Prior art keywords
- data
- data record
- user
- block
- ledger
- 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.)
- Active
Links
Images
Classifications
-
- 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/64—Protecting data integrity, e.g. using checksums, certificates or signatures
-
- 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)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Data Mining & Analysis (AREA)
- Business, Economics & Management (AREA)
- Software Systems (AREA)
- Finance (AREA)
- Accounting & Taxation (AREA)
- General Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Bioethics (AREA)
- Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Development Economics (AREA)
- Economics (AREA)
- Marketing (AREA)
- Strategic Management (AREA)
- Technology Law (AREA)
- General Business, Economics & Management (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
公开了一种块链式账本中数据记录的验证方法、装置及设备。通过本说明书实施例所提供的方案,在清除账本时,对于用户相关的数据记录进行筛选,得到第一数据记录集合,进而根据第一数据记录集合构建出第一默克尔树,并写入账本中,从而可以根据账本中所存储的第一默克尔树对已经清除掉的第一数据记录进行验证。
Description
技术领域
本说明书实施例涉及信息技术领域,尤其涉及一种块链式账本中数据记录的验证方法、装置及设备。
背景技术
在以中心化的块链式账本对外提供服务的数据库服务端中,可以对块链式账本执行清除操作,清除掉的账本即视为不存在。但是在清除掉的账本中仍然存在一些用户相关的数据记录,用户可能需要对于这些已经清除的数据记录进行完整性验证。
发明内容
本申请实施例的目的是提供一种在块链式账本中对于已经清除的数据记录可以进行验证的方案。
为解决上述技术问题,本申请实施例是这样实现的:
一种块链式账本中数据记录的验证方法,应用于以块链式账本存储数据记录的中心化的数据库服务端中,包括:
执行用户所确定的在所述账本中的第一次清除指令,清除指令用于在所述账本中清除最前端的连续的部分账本;
确定被清除的部分账本中与所述用户相关的第一数据记录,构成包含第一数据记录的第一数据记录集合;
根据所述第一数据记录集合构建出第一默克尔树;
将所述第一默克尔树以数据记录的形式写入所述块链式账本中,以便根据账本中所存储的第一默克尔树对所述第一数据记录进行验证。
对应的,本说明书实施例还提供一种块链式账本中数据记录的验证装置,应用于以块链式账本存储数据记录的中心化的数据库服务端中,包括:
清除模块,执行用户所确定的在所述账本中的第一次清除指令,清除指令用于在所述账本中清除最前端的连续的部分账本;
确定模块,确定被清除的部分账本中与所述用户相关的第一数据记录,构成包含第一数据记录的第一数据记录集合;
生成模块,根据所述第一数据记录集合构建出第一默克尔树;
写入模块,将所述第一默克尔树以数据记录的形式写入所述块链式账本中,以便根据账本中所存储的第一默克尔树对所述第一数据记录进行验证。
通过本说明书实施例所提供的方案,在清除账本时,对于用户相关的数据记录进行筛选,得到第一数据记录集合,进而根据第一数据记录集合构建出第一默克尔树,并写入账本中,从而可以根据账本中所存储的第一默克尔树对已经清除掉的第一数据记录进行验证,满足用户的需要,提高用户体验。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书实施例。
此外,本说明书实施例中的任一实施例并不需要达到上述的全部效果。
附图说明
为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1为本说明书实施例所涉及的***架构示意图;
图2为本说明书实施例所提供的一种生成块链式账本的流程示意图;
图3为本说明书实施例所提供的一种数据块的块头的示意图;
图4是本说明书实施例提供的一种块链式账本中数据记录的验证方法的流程示意图;
图5为本说明书实施例所给出的第二默克尔树的生成方式示意图;
图6是本说明书实施例提供的一种块链式账本中数据记录的验证装置的结构示意图;
图7是用于配置本说明书实施例方法的一种设备的结构示意图。
具体实施方式
为了使本领域技术人员更好地理解本说明书实施例中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行详细地描述,显然,所描述的实施例仅仅是本说明书的一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于保护的范围。
首先对本说明书实施例中所涉及的以块链式账本存储数据记录的中心化的数据库服务端进行说明。
数据库服务端面向的常常为各种机构,各机构则可以将它们与第三方用户(包括其它机构或者个人)之间所产生的数据记录在数据库服务方进行存储。如图1所示,图1为本说明书实施例所涉及的***架构示意图。在该示意图中,一个企业机构可以面向多名机构或者用户提供服务,而每个用户均可以直接的或者间接地将数据记录存储至数据服务端中。
例如,数据库服务端对接的机构是某金融产品公司,数据记录可以是个人用户在该金融产品公司的理财记录;或者,对接的机构可以是政府部门,其中的数据记录是政府部门对于该部门所管理的公共项目的开销明细;或者,数据库服务方对接的机构是某个医院,其中的数据记录是病人的病历;或者,数据库服务方对接的机构是第三方支付机构,数据记录可以是个人用户通过该机构的支付记录,等等。
此外需要说明的是,在一个账本中,可能会存在多个参与方,例如,对于用户A、B和C而言,共同参与了一个项目,从而各用户都会产生相应的数据记录,进而用户A、B和C均可以往项目所对应的账本中进行数据记录的存储。
在中心化的数据库服务提供方,块链式的账本通过如下方式生成,如图2所示,图2为本说明书实施例所提供的一种生成块链式账本的流程示意图,包括:
S201,接收待存储的数据记录,确定各数据记录的哈希值。
如前所述,此处的待存储的数据记录,可以是客户端个人用户的各种消费记录,也可以是应用服务器基于用户的指令,在执行业务逻辑时产生的业务结果、中间状态以及操作记录等等。具体的业务场景可以包括消费记录、审计日志、供应链条、政府监管记录、医疗记录等等。
在一种实施例中,数据记录中可以包含有业务属性。在每个与数据库服务方对接的机构中,所述业务属性在所述对接机构中,一般而言是唯一存在的,业务属性基于不同的业务场景,可以包括用户名、用户身份证号、驾照编号、手机号、项目唯一编号、数据记录的种类(例如,各种报表的型号、收据、***或者支出表等)等等。
例如,对于第三方支付机构而言,数据记录是用户的消费记录,此时的业务属性即为用户标识(包括手机号、身份证号、用户名等等),或者对该用户标识进行哈希算法所得到的哈希值;或者,对于政府机构而言,数据记录为多个公共项目的开销流水,则此时的业务属性可以为每个项目的唯一编号。
业务属性可以存储于数据记录中的指定字段(例如,数据记录的头部或者尾部),从而可以方便数据库服务端以及用户从中获取该数据记录的业务属性。
需要说明的是,在同一账本中,可以包含有多条数据记录。这些数据记录的业务属性则很可能是不一样的。例如,在一个账本面向多个用户开放时,数据记录可能来源于不同的用户,若业务属性为用户标识,则容易理解不同的数据记录中常常包含了不同的用户标识。
在同一用户所上传的数据记录中,也可能包含有多种不同的业务属性。例如,在账本中用于记录资金往来时,数据记录的业务属性可能是各种报表的型号、收据、***或者收入/支出表等等。
S203,当达到预设的成块条件时,确定待写入数据块中的各数据记录,生成包含数据块的哈希值和数据记录的第N个数据块。
所述预设的成块条件包括:待存储的数据记录数量达到数量阈值,例如,每接收到一千条数据记录时,生成一个新数据块,将一千条数据记录写入块中;或者,距离上一次成块时刻的时间间隔达到时间阈值,例如,每隔5分钟,生成一个新数据块,将在这5分钟内接收到的数据记录写入块中。
此处的N指的是数据块的序号,换言之,在本说明书实施例中,数据块是以块链的形式,基于成块时间的顺序先后排列,具有很强的时序特征。其中,数据块的块高基于成块时间的先后顺序单调递增。块高可以是序号,此时第N个数据块的块高即为N;块高也可以其它方式生成。
当N=1时,即此时的数据块为初始数据块。初始数据块的哈希值和块高基于预设方式给定。例如,初始数据块中不包含数据记录,哈希值则为任一给定的哈希值,块高blknum=0;又例如,初始数据块的生成触发条件与其它数据块的触发条件一致,但是初始数据块的哈希值由对初始数据块中的所有内容取哈希确定。
当N>1时,由于前一数据块的内容和哈希值已经确定,则此时,可以基于前一数据块(即第N-1个数据块)的哈希值生成当前数据块(第N个数据块)的哈希值,例如,一种可行的方式为,确定每一条将要写入第N个块中的数据记录的哈希值,按照在块中的排列顺序,生成一个默克尔树,将默克尔树的根哈希值和前一数据块的哈希值拼接在一起,再次采用哈希算法,生成当前块的哈希值。又例如,还可以按照块中数据记录的顺序进行拼接并取哈希得到整体数据记录的哈希值,拼接前一数据块的哈希值和整体数据记录的哈希值,并对拼接得到的字串进行哈希运算,生成数据块的哈希值。
用户在上传数据成功后,即可以得到对应的数据记录的哈希值以及所处的数据块的哈希值,并保存,并且可以基于该哈希值发起完整性验证。具体的验证方式包括重新计算数据记录自身的哈希值以及所处的数据块的哈希值,与本地所保存的进行对比。
上述方式生成的数据块,可以包括块头和块体两个部分。块体中可以用于存储拼接数据的明文,或者拼接数据的哈希值等等;块头中可以用于存储有关本数据块的元数据,例如,账本的版本号,前一数据块的哈希值,自身数据块中的拼接数据所组成的默克尔树的根哈希值,自身数据块的哈希值,用于记录拼接数据的***作状态的状态数组等等。如图3所示,图3为本说明书实施例所提供的一种数据块的块头的示意图。
通过前述的数据块的生成方式,每一个数据块通过哈希值确定,数据块的哈希值由数据块中的数据记录的内容、顺序以及前一数据块的哈希值决定。用户可以随时基于数据块的哈希值发起完整性验证,对于数据块中任何内容(包括对于数据块中数据记录内容或者顺序的修改)的修改都会造成在验证时计算得到的数据块的哈希值和数据块生成时的哈希值不一致,而导致验证失败,从而实现了中心化下的不可篡改。
完整性验证包括对于一个数据块的完整性验证,即,根据数据块中数据记录的哈希值重新组成默克尔树,计算默克尔树的根哈希值,并且根据默克尔树的根哈希值与前一数据块的哈希值重新计算该数据块的哈希值,与事先保存的数据块的哈希值进行一致性对比。
完整性验证还可以包括对于若干连续数据块的完整性验证,即根据数据块的块头中所保存的默克尔树的根哈希值与前一数据块的哈希值重新计算该数据块的哈希值,并与事先保存的数据块的哈希值进行对比。
完整性验证还可以包括对某条数据记录进行的完整性验证。在块链式账本中,对于数据记录的完整性进行验证时,一种方式可以是:确定数据记录所处的数据块,并且根据该数据块中的数据记录构建默克尔树,并计算当前的默克尔树的根哈希值,从而可以与块头中所存储的默克尔树的根哈希值进行一致性对比,若不一致,则说明该数据记录已经被篡改。
另一种方式则可以是,在用户或者对接机构将数据记录上传服务端时,自己本地保存有数据记录的备用副本或者备用副本的哈希值,从而可以计算该数据记录的当前哈希值,并且与备用副本的哈希值进行一致性对比,以实现完整性验证。
前述部分对于本说明书所涉及的中心化的块链式账本进行了说明。在一个账本中,随着时间的推移,数据记录的数量也就越来越多,账本中的块高也就越来越大,而其中靠前的部分数据的有效性也就越来越低。
而由于用户的数据不断的增加,导致存储空间占用的越来越多,或者一些较长时间的历史数据对于用户已经不再有价值此时,此时数据库服务方还可以基于用户的需求,对数据块进行相应的部分清除。部分清除时,可以基于块高或者时间点进行。本说明书实施例中的“清除”指的是在账本中清除最前端的连续的部分账本。
例如,用户指定账本ID以及块高,服务方基于块高确定块高之前的数据块均为需要清除的数据块,然后清除这些确定需要清除的数据块,具体的,可以由清除指令PURGE(lgid,d-a,blkbound) 实现。其中的“lgid”即为账本ID,“d-a”即为指定的块高值,“blkbound”用于指示基于块高值进行清除。
又例如,用户指定账本ID以及时间点,服务方基于时间点确定在该时间点之前最后一个生成的数据块,将该数据块之前生成的数据块均确定为需要清除的数据块,然后清除这些确定需要清除的数据块,具体的,可以由清除指令PURGE(lgid,d-a,‘timestmp’) 实现。其中的“lgid”即为账本ID,“d-a”即为指定的时间值,“timestmp”用于指示基于时间值进行清除。由于块高的连续性,显然,此时的清除是将指定的时间之前的连续的部分账本都进行了清除。
在执行部分清除之后,由于清除后的链式数据块中的第一个数据块的哈希值是基于前一数据块(已经被清除)的哈希值生成的,此时,还需要生成一个伪初始数据块,伪初始数据块的哈希值等于被确定的需要清除的最后一个数据块的哈希值,这样,可以避免在以后进行验证时出现错误。最后一个数据块的哈希值可以从预先建立的索引中查询获取,也可以从初始数据块开始进行顺序计算得到该数据块的哈希值,或者从该数据块中查询获取。
新生成的伪初始数据块中的内容可以为空,也可以记载一些相应的备注,例如,生成的时间等等。但是,伪初始数据块的内容与伪初始数据块的哈希值无关。以及,服务方还可以对该伪初始数据块进行签名。
前述部分对于服务端在块链式账本中如何执行清除进行了说明。在实际应用中,仍然存在如下可能,用户在自己的本地终端中仍然保留了部分已经清除的数据的备份。例如,在一个多方参与的项目中,用户A从一开始就保留了自己与其它的资金结算数据。而在一次清除的过程中可能,可能在该项目所对应的账本中将一年以前的所有参与方的数据记录都进行了清除,那么用户A如果想要在清除以后对资金结算数据进行验证,就不能实现了。
基于此,本说明书实施例提供一种在块链式账本中对于已经清除的数据记录可以进行验证的方案。以下结合附图,详细说明本说明书各实施例提供的技术方案。如图4所示,图4是本说明书实施例提供的一种块链式账本中数据记录的验证方法的流程示意图,应用于以块链式账本存储数据记录的中心化的数据库服务端中,该流程具体包括如下步骤:
S401,执行用户所确定的在所述账本中的第一次清除指令,清除指令用于在所述账本中清除最前端的连续的部分账本。
在块链式账本中执行清除指令时,如果该账本涉及到同时存储了多方用户的数据记录,那么需要账本中每一用户对清除指令进行确认。如果仅涉及到一个用户,那么只需要接收到该用户所发送的清除指令即可。
具体的清除指令的形式,以及清除的执行方式在前文已经进行了说明,此处不再赘述。此处的清除指令是在账本中进行的第一次清除时的指令。
例如服务端通过判断账本中的初始数据块是不是原始的初始数据块方式来判断该账本是不是已经执行过清除。如果一个账本执行过清除指令就会产生一个伪数据块,而伪数据块中的内容与原始的初始数据块中包含的信息不同。如果一个账本中包含伪初始数据块,显然就是已经清除过,如果一个账本中没有伪初始数据块,则没有执行过清除。
S403,确定被清除的部分账本中与所述用户相关的第一数据记录,构成包含第一数据记录的第一数据记录集合。
如前所述,在清除账本时,会清除掉从初始数据块到指定数据块之前的所有数据块。那么,针对任一用户,服务端可以发起是否需要保留相关数据记录的提示,用于该用户选择是否需要保留相关的数据记录。如果用户选择保留,那么进一步,服务端可以在页面中展示相关的可选控件,让用户选择如何进行相关数据的保留。
例如,服务端列出该用户所存储的数据记录中所包含的所有业务属性,用户可以针对性的对业务属性进行选择,从而在被清除的部分账本中确定出包含由用户所选择的业务属性的数据记录,将其确定为与用户相关的第一数据记录。
又例如,用户还可以指示,在一个多方参与的块链式账本中,只要包含有该用户签名的数据记录都进行保留。从而服务端可以对被清除的账本进行遍历,获取该用户的公钥对于账本中的每条数据记录进行解密验证,如果解密验证成功,即可以证明该数据记录是包含了该用户私钥签名的数据记录,从而可以将包含所述用户签名的数据记录确定为第一数据记录。
在获得了各第一数据记录之后,即可以生成包含各数据记录的第一数据记录集合。
S405,根据所述第一数据记录集合构建出第一默克尔树。
由于集合中的数据记录本身是无序的,在构建第一默克尔树时本身也可以进行无序方式的构建。即,对于第一数据记录集合中的各数据记录进行随机排序,进而根据各第一数据记录的哈希值,以二叉树或者多叉树的形式生成第一默克尔树,即生成的第一默克尔树中仅需要包含各第一数据记录的哈希值,方便存储。
在一种实施方式中,还可以按照第一数据记录集合中的每一数据记录在所述账本中的位置先后依序排列,并根据依序排列后的部分数据记录的哈希值构建出第一默克尔树。
在本说明书实施例所提供的数据块中,对于一个数据记录的位置信息,可以通过其所处的数据块的块高和在数据块中的偏移量进行确定。
而在本说明书,块高是单调递增的,越小的数据块排序越靠前;在同一个数据块中,数据记录的排序也已经固定,因此一个数据记录在该数据块中的偏移量也是明确的。例如,在数据记录的长度为固定单位时,序号同样可以用于明确该数据记录在其所处的数据块中的位置信息。即,序号同样也可以用于指示偏移量,并且序号越小,在同一个数据块中排序就越靠前。即一个数据记录在账本中的位置先后与块高和偏移量均负相关,块高和偏移量越小,位置排序越靠前。
基于此,可以在第一数据记录集合中进行排序。例如,假设集合中存在的五条数据记录的位置信息为(2,08),(5,01),(300,999),(2,10),(300,89),那么排序后即为(2,08),(2,10),(5,01),(300,89),(300,999)。通过对第一数据记录集合进行排序,可以更好的反应出各数据记录的实际顺序,生成的第一默克尔树也有利于提高用户的验证和查询效率。
S407,将所述第一默克尔树以数据记录的形式写入所述块链式账本中。
如前所述,生成的第一默克尔树中仅包含了各第一数据记录的哈希值。在存储时,可以直接存储于数据服务端中。在一种实施方式中,还可以将第一默克尔树以数据记录的形式写入到所述块链式账本中,从而作为不可篡改的证据保留在了账本中。
进一步地,在将第一默克尔树写入账本之前,服务端还可以对所述第一默克尔树进行数字签名,并将第一默克尔树和服务端的数字签名发送至用户端确认,用户在本地验证了第一默克尔树的真实性以及服务端的数字签名的真实性之后,再对第一默克尔树进行用户签名,从而可以保证第一默克尔树是双方都已经验证过并且签名保证了真实无误的。
具体而言,用户可以采用根据服务端中一样的排序方法在本地对于第一数据记录的备份进行排序,并在本地生成另一个默克尔树,从而可以对比两个默克尔树的根哈希的一致性,如果一致,而说明服务端所生成的第一默克尔树完整无误,并进行用户签名。
通过本说明书实施例所提供的方案,在清除账本时,对于用户相关的数据记录进行筛选,得到第一数据记录集合,进而根据第一数据记录集合构建出第一默克尔树,并写入账本中,从而可以根据账本中所存储的第一默克尔树对已经清除掉的第一数据记录进行验证,满足用户的需要,提高用户体验。
在将第一默克尔树写入了账本之后,用户即可以随时对自己相关的第一数据记录进行验证。例如,用户发送的包含待验证的数据记录的哈希值的验证指令至服务端,所述待验证的数据记录属于所述第一数据记录集合,服务端根据账本中所保存的第一默克尔树对所述哈希值执行完整性验证。验证一个哈希值是否在一棵默克尔树中在当前已经很成熟,完整性验证在前文也已经进行了相应说明,此处不再赘述。
进一步地,对于已经执行过至少一次或者多次清除指令的账本,还有可能面临需要再次清除。例如,在一个账本中,每隔一个月即定期清除距离当前时间2年以上的数据块。
在这样的情形下,数据库服务端需要执行用户所确定的另一清除指令,为描述方便,称为第K清除指令,K>1。显然,在第K清除指令中就会产生与另一批与用户相关的数据记录,称为第K数据记录。第K数据记录的确定方式可以与第一数据记录的方式相同,即根据是否包含用户签名或者是否包含指定的业务属性来确定,从而得到包含第K数据记录的第K数据记录集合。
进一步地,此时在生成第K默克尔树时存在如下两种方式:
第一种,即仅根据第K数据记录集合来生成第K默克尔树,在这种方式会造成在服务端将会需要存储多个没有交集的不同的默克尔树(例如,第一默克尔树和第二默克尔树互不相干),对于用户日后的验证很不友好。
即用户在验证时,可能并不清楚自己的数据记录对应于那一棵默克尔树,而服务端则首先需要确定发来的哈希属于那一棵默克尔树,在没有额外信息时,则服务端需要遍历每一棵默克尔树进行验证(在这种方式下,账本中经历了K次清除,就会产生K棵 不相关的默克尔树),效率太低。
第二种,服务端根据所述第K数据记录集合与前一默克尔树(即第K-1默克尔树)构建出第K默克尔树。例如,在第二次清除时,将第二数据记录集合中的第二数据记录作为叶子节点直接从最右边添加至第一默克尔树中,从而生成得到第二默克尔树,如图5所示,图5为本说明书实施例所给出的第二默克尔树的生成方式示意图。进而可以将所述第二默克尔树以数据记录的形式写入所述块链式账本中。同样的方式,还可以根据第三次清除时所产生的数据记录集合与第二默克尔树生成第三默克尔树。
通过这样的方式,从第一次执行清除开始,以后每一次生成第K默克尔树之后,之前的第K-1默克尔树就可以不再使用,在验证过程中只需要使用第K默克尔树即可。
例如,在第三次清除时,即可以根据第二次清除时所产生的第二默克尔树与第三次清除时所产生的“第三数据记录集合”更新产生“第三默克尔树”,一直迭代下去。从而可以无论清除次数的多少,在完整性验证时只需要使用最后产生的第K默克尔树即可以完成。
用户在验证时,可以直接发送包含待验证的数据记录的哈希值,此处的待验证的数据记录可以属于所述第一数据记录集合至第K数据记录集合中的任意一个即可。即,只要该数据记录属于被清除的数据记录与用户相关的数据记录,用户并不需要提供额外信息。从而,服务端在验证时可以直接根据最后所产生的第K默克尔树对所述哈希值执行完整性验证,提高了效率。
对应的,本说明书实施例还提供一种块链式账本中数据记录的验证装置,应用于以块链式账本存储数据记录的中心化的数据库服务端中,如图6所示,图6是本说明书实施例提供的一种块链式账本中数据记录的验证装置的结构示意图,包括:
清除模块601,执行用户所确定的在所述账本中的第一次清除指令,清除指令用于在所述账本中清除最前端的连续的部分账本;
确定模块603,确定被清除的部分账本中与所述用户相关的第一数据记录,构成包含第一数据记录的第一数据记录集合;
生成模块605,根据所述第一数据记录集合构建出第一默克尔树;
写入模块607,将所述第一默克尔树以数据记录的形式写入所述块链式账本中,以便根据账本中所存储的第一默克尔树对所述第一数据记录进行验证。
进一步地,在所述装置中所述确定模块603,遍历所述被清除的账本,确定被清除的账本中包含所述用户签名的数据记录,将包含所述用户签名的数据记录确定为第一数据记录;或者,获取用户所指定的业务属性,确定被清除的账本中包含所述业务属性的数据记录,将包含所述业务属性的数据记录确定为与用户相关的第一数据记录。
进一步地,在所述装置中所述生成模块605,按照第一数据记录集合中的每一数据记录在所述账本中的位置先后依序排列,所谓位置包括数据记录所处的块高和在数据块中的偏移量,块高和偏移量越小,位置排序越靠前;根据依序排列后的部分数据记录的哈希值构建出第一默克尔树。
进一步地,在所述装置中所述写入模块607,服务端和所述用户均对所述默克尔树进行数字签名,将包含所述服务端的数字签名和所述用户的数字签名的默克尔树以数据记录的形式写入所述块链式账本中。
进一步地,在所述装置中还包括第一验证模块609,接收用户所发送的验证指令,所述验证指令中包含待验证的数据记录的哈希值,所述待验证的数据记录属于所述第一数据记录集合;根据所述第一默克尔树对所述哈希值执行完整性验证。
进一步地,在所述装置中所述清除模块601还用于,执行用户所确定的在所述账本中的第K次清除指令, K>1;相应,所述确定模块603还用于,确定所述第K次清除指令所清除的账本中与用户相关的第K数据记录,构成包含第K数据记录的第K数据记录集合;相应的,所述生成模块605,获取第K-1次清除时所产生的第K-1默克尔树,根据所述第K数据记录集合与所述第K-1默克尔树构建出第K默克尔树;相应的,所述写入模块607,将所述第K默克尔树以数据记录的形式写入所述块链式账本中。
进一步地,在所述装置中还包括第二验证模块611,接收用户所发送的验证指令,所述验证指令中包含待验证的数据记录的哈希值,所述待验证的数据记录属于被清除的数据记录中与用户相关的数据记录;根据所述第K默克尔树对所述哈希值执行完整性验证。
进一步地,在所述装置中还包括数据块生成模块613,接收用户所发送的待存储的数据记录,确定所述数据记录的哈希值;当达到预设的成块条件时,确定待写入数据块中的各数据记录,生成包含数据块的哈希值和数据记录的第N个数据块:
当N=1时,初始数据块的哈希值和块高基于预设方式给定;
当N>1时,根据待写入数据块中的各数据记录和第N-1个数据块的哈希值确定第N个数据块的哈希值,生成包含第N个数据块的哈希值和各数据记录的第N个数据块,其中,数据块的块高基于成块时间的先后顺序单调递增。
本说明书实施例还提供一种计算机设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现图4所示的块链式账本中数据记录的验证方法。
图7示出了本说明书实施例所提供的一种更为具体的计算设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作***和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现图4所示的块链式账本中数据记录的验证方法。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书实施例可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书实施例各个实施例或者实施例的某些部分所述的方法。
上述实施例阐明的***、方法、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于方法实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的方法实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护范围。
Claims (17)
1.一种块链式账本中数据记录的验证方法,应用于以块链式账本存储数据记录的中心化的数据库服务端中,包括:
执行用户所确定的在所述账本中的第一次清除指令,清除指令用于在所述账本中清除最前端的连续的部分账本;所述部分账本为初始数据块到指定数据块之前的所有数据块;
确定被清除的部分账本中与所述用户相关的第一数据记录,构成包含第一数据记录的第一数据记录集合;
根据所述第一数据记录集合构建出第一默克尔树;
将所述第一默克尔树以数据记录的形式写入所述块链式账本中,以便根据账本中所存储的第一默克尔树对所述第一数据记录进行验证。
2.如权利要求1所述的方法,确定被清除的数据记录中与用户相关的第一数据记录,包括:
遍历所述被清除的账本,确定被清除的账本中包含用户签名的数据记录,将包含用户签名的数据记录确定为第一数据记录;
或者,获取用户所指定的业务属性,确定被清除的账本中包含所述业务属性的数据记录,将包含所述业务属性的数据记录确定为与用户相关的第一数据记录。
3.如权利要求1所述的方法,根据所述第一数据记录集合构建出第一默克尔树,包括:
按照第一数据记录集合中的每一数据记录在所述账本中的位置先后依序排列,所谓位置包括数据记录所处的块高和在数据块中的偏移量,块高和偏移量越小,位置排序越靠前;
根据依序排列后的部分数据记录的哈希值构建出第一默克尔树。
4.如权利要求1所述的方法,将所述默克尔树以数据记录的形式写入所述块链式账本中,包括:
服务端对所述默克尔树进行数字签名,并将服务端的数字签名和所述默克尔树发送至用户,以便用户在验证所述服务端的数字签名之后对所述默克尔树进行数字签名;
接收用户发送的用户的数字签名, 将包含所述服务端的数字签名和用户的数字签名的默克尔树以数据记录的形式写入所述块链式账本中。
5.如权利要求1所述的方法,所述方法还包括:
接收用户所发送的验证指令,所述验证指令中包含待验证的数据记录的哈希值,所述待验证的数据记录属于所述第一数据记录集合;
根据所述第一默克尔树对所述哈希值执行完整性验证。
6.如权利要求1所述的方法,所述方法还包括:
执行用户所确定的在所述账本中的第K次清除指令,K>1;
确定所述第K次清除指令所清除的账本中与用户相关的第K数据记录,构成包含第K数据记录的第K数据记录集合;
获取第K-1次清除时所产生的第K-1默克尔树,根据所述第K数据记录集合与所述第K-1默克尔树构建出第K默克尔树;
将所述第K默克尔树以数据记录的形式写入所述块链式账本中。
7.如权利要求6所述的方法,所述方法还包括:
接收用户所发送的验证指令,所述验证指令中包含待验证的数据记录的哈希值,所述待验证的数据记录属于被清除的数据记录中与用户相关的数据记录中与用户相关的数据记录;
根据所述第K默克尔树对所述哈希值执行完整性验证。
8.如权利要求1所述的方法,在所述块链式账本中,数据块通过如下方式生成:
接收用户所发送的待存储的数据记录,确定所述数据记录的哈希值;
当达到预设的成块条件时,确定待写入数据块中的各数据记录,生成包含数据块的哈希值和数据记录的第N个数据块:
当N=1时,初始数据块的哈希值和块高基于预设方式给定;
当N>1时,根据待写入数据块中的各数据记录和第N-1个数据块的哈希值确定第N个数据块的哈希值,生成包含第N个数据块的哈希值和各数据记录的第N个数据块,其中,数据块的块高基于成块时间的先后顺序单调递增。
9.一种块链式账本中数据记录的验证装置,应用于以块链式账本存储数据记录的中心化的数据库服务端中,包括:
清除模块,执行用户所确定的在所述账本中的第一次清除指令,清除指令用于在所述账本中清除最前端的连续的部分账本;所述部分账本为初始数据块到指定数据块之前的所有数据块;
确定模块,确定被清除的部分账本中与所述用户相关的第一数据记录,构成包含第一数据记录的第一数据记录集合;
生成模块,根据所述第一数据记录集合构建出第一默克尔树;
写入模块,将所述第一默克尔树以数据记录的形式写入所述块链式账本中,以便根据账本中所存储的第一默克尔树对所述第一数据记录进行验证。
10.如权利要求9所述的装置,所述确定模块,遍历所述被清除的账本,确定被清除的账本中包含用户签名的数据记录,将包含用户签名的数据记录确定为第一数据记录;或者,获取用户所指定的业务属性,确定被清除的账本中包含所述业务属性的数据记录,将包含所述业务属性的数据记录确定为与用户相关的第一数据记录。
11.如权利要求9所述的装置,所述生成模块,按照第一数据记录集合中的每一数据记录在所述账本中的位置先后依序排列,所谓位置包括数据记录所处的块高和在数据块中的偏移量,块高和偏移量越小,位置排序越靠前;
根据依序排列后的部分数据记录的哈希值构建出第一默克尔树。
12.如权利要求9所述的装置,所述写入模块,服务端对所述默克尔树进行数字签名,并将服务端的数字签名和所述默克尔树发送至用户,以便用户在验证所述服务端的数字签名之后对所述默克尔树进行数字签名;接收用户发送的用户的数字签名, 将包含所述服务端的数字签名和用户的数字签名的默克尔树以数据记录的形式写入所述块链式账本中。
13.如权利要求9所述的装置,还包括第一验证模块,接收用户所发送的验证指令,所述验证指令中包含待验证的数据记录的哈希值,所述待验证的数据记录属于所述第一数据记录集合;根据所述第一默克尔树对所述哈希值执行完整性验证。
14.如权利要求9所述的装置,所述清除模块还用于,执行用户所确定的在所述账本中的第K次清除指令, K>1;相应,所述确定模块还用于,确定所述第K次清除指令所清除的账本中与用户相关的第K数据记录,构成包含第K数据记录的第K数据记录集合;相应的,所述生成模块,获取第K-1次清除时所产生的第K-1默克尔树,根据所述第K数据记录集合与所述第K-1默克尔树构建出第K默克尔树;相应的,所述写入模块,将所述第K默克尔树以数据记录的形式写入所述块链式账本中。
15.如权利要求14所述的装置,还包括第二验证模块,接收用户所发送的验证指令,所述验证指令中包含待验证的数据记录的哈希值,所述待验证的数据记录属于被清除的数据记录中与用户相关的数据记录;根据所述第K默克尔树对所述哈希值执行完整性验证。
16.如权利要求9所述的装置,还包括数据块生成模块,接收用户所发送的待存储的数据记录,确定所述数据记录的哈希值;当达到预设的成块条件时,确定待写入数据块中的各数据记录,生成包含数据块的哈希值和数据记录的第N个数据块:
当N=1时,初始数据块的哈希值和块高基于预设方式给定;
当N>1时,根据待写入数据块中的各数据记录和第N-1个数据块的哈希值确定第N个数据块的哈希值,生成包含第N个数据块的哈希值和各数据记录的第N个数据块,其中,数据块的块高基于成块时间的先后顺序单调递增。
17.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现如权利要求1至8任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010538204.6A CN111444197B (zh) | 2020-06-12 | 2020-06-12 | 一种块链式账本中数据记录的验证方法、装置及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010538204.6A CN111444197B (zh) | 2020-06-12 | 2020-06-12 | 一种块链式账本中数据记录的验证方法、装置及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111444197A CN111444197A (zh) | 2020-07-24 |
CN111444197B true CN111444197B (zh) | 2020-12-11 |
Family
ID=71655557
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010538204.6A Active CN111444197B (zh) | 2020-06-12 | 2020-06-12 | 一种块链式账本中数据记录的验证方法、装置及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111444197B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112507014B (zh) * | 2021-02-07 | 2021-06-04 | 支付宝(杭州)信息技术有限公司 | 一种基于可信账本数据库的数据存储方法、装置及*** |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190147065A1 (en) * | 2017-11-16 | 2019-05-16 | International Business Machines Corporation | Method and system for verification of deleted data for blockchains |
CN110008203A (zh) * | 2019-01-31 | 2019-07-12 | 阿里巴巴集团控股有限公司 | 一种数据清除方法、装置及设备 |
CN110264187A (zh) * | 2019-01-23 | 2019-09-20 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、计算机设备及存储介质 |
-
2020
- 2020-06-12 CN CN202010538204.6A patent/CN111444197B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190147065A1 (en) * | 2017-11-16 | 2019-05-16 | International Business Machines Corporation | Method and system for verification of deleted data for blockchains |
CN110264187A (zh) * | 2019-01-23 | 2019-09-20 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、计算机设备及存储介质 |
CN110008203A (zh) * | 2019-01-31 | 2019-07-12 | 阿里巴巴集团控股有限公司 | 一种数据清除方法、装置及设备 |
Also Published As
Publication number | Publication date |
---|---|
CN111444197A (zh) | 2020-07-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110188096B (zh) | 一种数据记录的索引创建方法、装置及设备 | |
CN109902086B (zh) | 一种索引创建方法、装置及设备 | |
CN109902071B (zh) | 业务日志存储方法、***、装置及设备 | |
CN110162662B (zh) | 一种块链式账本中数据记录的验证方法、装置及设备 | |
CN109951290B (zh) | 一种链式账本的授时认证方法、装置及设备 | |
CN110162526B (zh) | 一种块链式账本中数据记录的查询方法、装置及设备 | |
CN110825737A (zh) | 索引创建和数据查询方法、装置及设备 | |
CN111444196B (zh) | 块链式账本中全局状态的哈希的生成方法、装置及设备 | |
CN110022315B (zh) | 一种块链式账本中的权重管理方法、装置及设备 | |
CN111444192B (zh) | 块链式账本中全局状态的哈希的生成方法、装置及设备 | |
CN110349019B (zh) | 一种块链式账本中的验证方法、装置及设备 | |
CN111352935B (zh) | 一种块链式账本中的索引创建方法、装置及设备 | |
CN110008743B (zh) | 一种块链式账本中的数据属性标识方法、装置及设备 | |
CN110061843B (zh) | 一种链式账本中的块高创建方法、装置及设备 | |
CN110837502B (zh) | 一种块链式账本中的数据存储方法、装置及设备 | |
CN110879687B (zh) | 一种基于磁盘存储的数据读取方法、装置及设备 | |
CN110347679B (zh) | 一种基于收据的数据存储方法、装置及设备 | |
CN110008203B (zh) | 一种数据清除方法、装置及设备 | |
CN111046052B (zh) | 一种数据库中的操作记录存储方法、装置及设备 | |
CN110059088B (zh) | 一种块链式账本中的数据属性标识方法、装置及设备 | |
CN110362568B (zh) | 一种针对块链式账本的压缩方法、装置及设备 | |
CN110750533A (zh) | 一种基于多条业务属性的数据存储方法、装置及设备 | |
CN111046069A (zh) | 一种块链式账本中的聚合计算方法、装置及设备 | |
CN111444197B (zh) | 一种块链式账本中数据记录的验证方法、装置及设备 | |
CN110059087B (zh) | 一种块链式账本中的数据属性标识方法、装置及设备 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40034077 Country of ref document: HK |