CN109685525B - 一种基于Merkle树的可自毁商品追溯信息存储方法 - Google Patents
一种基于Merkle树的可自毁商品追溯信息存储方法 Download PDFInfo
- Publication number
- CN109685525B CN109685525B CN201811441947.0A CN201811441947A CN109685525B CN 109685525 B CN109685525 B CN 109685525B CN 201811441947 A CN201811441947 A CN 201811441947A CN 109685525 B CN109685525 B CN 109685525B
- Authority
- CN
- China
- Prior art keywords
- node
- nodes
- self
- hash
- leaf
- 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
- 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
- G06Q30/00—Commerce
- G06Q30/018—Certifying business or products
- G06Q30/0185—Product, service or business identity fraud
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Business, Economics & Management (AREA)
- Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- General Physics & Mathematics (AREA)
- Finance (AREA)
- Entrepreneurship & Innovation (AREA)
- Marketing (AREA)
- General Business, Economics & Management (AREA)
- Economics (AREA)
- Development Economics (AREA)
- Accounting & Taxation (AREA)
- Strategic Management (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于Merkle树的可自毁商品追溯信息存储方法,包含Merkle树叶子节点生成过程、非叶子节点生成过程、非叶子节点汇聚过程和节点维护过程。通过创建带有时间戳的Merkle树节点,自底向上迭代计算节点的散列值并构造二叉Merkle树,实现了商品追溯信息的完整性控制及按时自毁功能,预防恶意实体对于商品产品追溯信息的非法篡改,便于对所存储的商品产品追溯信息进行基于分布式技术的完整性校验;根据时间戳定时销毁已过期的Merkle树节点,释放所占用的存储空间,降低商品追溯信息数据存储及维护成本;通过基于Merkle树的存储结构,实现了商品追溯信息数据结构的标准化、统一化,提高对于商品追溯信息的预防性控制、检查性控制和恢复性控制能力。
Description
技术领域
本发明属于信息技术领域中的信息获取与处理技术,特别涉及了一种可自毁商品追溯信息存储方法。
背景技术
Merkle树在区块链技术中常被用于存储记录型数据,由于Merkle树的特性,使得其任意叶子节点或子树被删除之后,不会影响其余所有节点的节点哈希。因此,Merkle树最初的设计目的是能够灵活地移除任意过期记录数据。
在商品流通过程中,一般需要存储大量条块化的商品及其追溯信息,如商品编码、交易记录等。此类数据在长期持久化保存的过程中将会产生较高的开销,提高了追溯成本,降低了追溯效率。而商品实体一般具有保质期的属性,在保质期到期之后,商品实体的生命周期结束,其追溯信息在法律规定的保存周期结束后也应当进行销毁,从而回收其占据的存储空间,节约成本。
目前的区块链存储方案中,仅能够对于过期记录手动进行删除,无法自动处理,由此引发的数据膨胀问题在不久的将来可能会对整个系统的可用性、性能等产生深远影响。
如何通过数据自毁技术和区块链技术在二叉Merkle树结构的基础上,实现商品追溯信息的完整性控制、按时自毁等功能,预防恶意实体对于商品产品追溯信息的非法篡改,对所存储的商品产品追溯信息进行基于分布式技术的完整性校验,并降低商品追溯信息数据存储及维护成本,是当下具有研究价值和应用价值的问题。
发明内容
为了解决上述背景技术提出的技术问题,本发明提供了一种基于Merkle树的可自毁商品追溯信息存储方法。
为了实现上述技术目的,本发明的技术方案为:
一种基于Merkle树的可自毁商品追溯信息存储方法,包括以下步骤:
(1)Merkle树叶子节点生成过程,具体步骤如下:
根据输入的可自毁商品追溯信息,生成相应的Merkle树叶子节点LN,LN至少包括以下属性:
节点编号NS;
父节点编号PNS,其默认值为0;
节点数据ND,其默认值为序列化的可自毁商品追溯信息;
节点哈希NH,其默认值为节点数据ND的散列值;
自毁时间戳TOD,其默认值为商品保质期的到期时间;
将所有输入的可自毁商品追溯信息存入Merkle树叶子节点LN后,检查LN的数量是否为奇数,若是,则额外生成一个新的叶子节点LN,将其节点数据ND值设为空;若否,则不作处理,本过程结束;
(2)非叶子节点生成过程,具体步骤如下:
对任意2个叶子节点LN,计算其节点哈希NH进行联合哈希后得到的散列值,生成这2个叶子节点LN的父节点NN,并更新这2个叶子节点LN中父节点编号PNS的值为父节点NN中节点编号NS的值,直到所有的叶子节点LN都存在与其对应的父节点NN;所述父节点NN至少包括以下属性:
节点编号NS;
父节点编号PNS,其默认值为0;
节点哈希NH,其默认值为NN对应的2个叶子节点LN中节点哈希NH进行联合哈希后得到的散列值;
自毁时间戳TOD,其默认值为NN对应的2个叶子节点LN中较大的自毁时间戳TOD值;
重复上述过程,直到当所有叶子节点LN都生成了与其对应的父节点NN后,当前所有节点构成了若干棵独立的二叉Merkle树,本过程结束;
(3)非叶子节点汇聚过程,具体步骤如下:
设任意2颗独立的二叉Merkle树的根节点为RN,根据2个根节点RN中的节点哈希NH进行联合哈希后得到的散列值,生成2个根节点RN的父节点NN,并更新2个根节点RN中PNS的值为父节点NN中NS的值;
上述过程完成后,当前所有节点汇聚成了若干棵新的Merkle树;检查新Merkle树的数量是否为1,若否,则重复非叶子节点汇聚过程;若是,则不作处理,本过程结束;
(4)节点维护过程,具体步骤如下:
每隔等待周期T,循环检查所有节点的自毁时间戳TOD;设延时周期DT为一个用户配置的环境变量,若TOD与DT之和小于等于系统当前时间CT,则删除该节点;否则不作处理;
节点维护过程以监视进程的形式驻留后台,不随前述其他过程的结束而结束。
进一步地,在Merkle树叶子节点生成过程中,Merkle树叶子节点LN中各属性的数据类型设置如下:
节点编号NS的数据类型为自增长的64位无符号整型;
父节点编号PNS的数据类型为64位无符号整型;
节点数据ND的数据类型为字符串;
节点哈希NH的数据类型为字符串;
自毁时间戳TOD的数据类型为日期时间。
进一步地,在非叶子节点生成过程中,父节点NN中各属性的数据类型设置如下:
节点编号NS的数据类型为自增长的64位无符号整型;
父节点编号PNS的数据类型为64位无符号整型;
节点哈希NH的数据类型为字符串;
自毁时间戳TOD的数据类型为日期时间。
进一步地,在非叶子节点汇聚过程中,若仅存在1棵二叉Merkle树,则不作处理;若存在数量大于1的奇数棵二叉Merkle树,则选取任一根节点RN不参加本过程,直到除该节点外其他所有根节点RN都生成了与其对应的父节点NN;若存在偶数棵二叉Merkle树,重复本过程,直到所有的根节点RN都生成了与其对应的父节点NN。
进一步地,在节点维护过程中,等待周期T的数据类型为整型,单位为毫秒;延时周期DT的数据类型为整型。
采用上述技术方案带来的有益效果:
本发明通过创建带有时间戳的Merkle树节点,自底向上迭代计算子节点的散列值并构造二叉Merkle树,实现了商品追溯信息的完整性控制及按时自毁功能,可有效预防恶意实体对于商品产品追溯信息的非法篡改,便于对所存储的商品产品追溯信息进行基于分布式技术的完整性校验。根据时间戳定时销毁已过期的Merkle树节点,释放所占用的存储空间,可有效降低商品追溯信息数据存储及维护成本;通过基于Merkle树的存储结构,实现了商品追溯信息数据结构的标准化、统一化,能够提高企业、消费者、行政主管部门对于商品追溯信息的预防性控制、检查性控制和恢复性控制能力,有利于促进商品产品追溯信息透明度,并增强社会各界对于商品质量的安全意识与参与程度。
附图说明
图1是本发明的整体流程图;
图2和图3是实施例中叶子节点生成过程示意图;
图4是实施例中非叶子节点生成过程示意图;
图5和图6是实施例中非叶子节点汇聚过程示意图。
具体实施方式
以下将结合附图,对本发明的技术方案进行详细说明。
设Merkle树是一颗二叉树,由叶子节点LN与非叶子节点NN构成。叶子节点LN与非叶子节点NN均为抽象数据类型,可以通过面向对象分析方法(Object-Oriented Analysis)中的类(Class)进行实现。
当需要构造一颗用以存储商品追溯信息的Merkle树时,首先执行叶子节点生成过程LNP。LNP根据输入的可自毁商品追溯信息,生成相对应的叶子节点LN,LN至少包括以下属性:
1、节点编号NS:数据类型为自增长的64位无符号整型,含义为该节点的唯一标识;
2、父节点编号PNS:数据类型为64位无符号整型,含义为该节点的父节点的唯一标识,默认值为0;
3、节点哈希NH:数据类型为字符串,含义为该节点中所存储的包含可自毁商品追溯信息的散列值,默认值为节点数据ND的散列值;
4、自毁时间戳TOD:数据类型为日期时间,含义为该节点生命周期结束时被系统删除销毁的时间,默认值为商品保质期到期时间;
5、节点数据ND:数据类型为字符串,含义为该节点中所存储的包含可自毁商品追溯信息,默认值为序列化的可自毁商品追溯信息。
对于输入的每一条可自毁商品追溯信息,都生成1个相对应的Merkle树叶子节点LN。当所有的追溯信息输入完成之后,检查LN的数量是否为奇数。若是,则额外生成1个新的叶子节点LN,将其节点数据ND值设为空。若否,则不作处理,叶子节点生成过程LNP结束,开始执行非叶子节点生成过程NNP。
非叶子节点生成过程NNP根据上一步骤中生成的叶子节点LN,生成LN的父节点NN,具体步骤如下:
选择任意2个叶子节点LN,对其节点哈希NH进行连接运算,然后使用MD5、SHA1或其他算法计算连接运算结果的哈希值,生成上述2个叶子节点LN的父节点NN;更新上述2个叶子节点LN中父节点编号PNS的值为新生成父节点NN中节点编号NS的值;重复上述过程,直到所有的叶子节点LN都生成了与其对应的父节点NN,显然所有的NN均为非叶子节点,NN至少包括以下属性:
1、节点编号NS:数据类型为自增长的64位无符号整型,含义为该节点的唯一标识;
2、父节点编号PNS:数据类型为64位无符号整型,含义为该节点的父节点的唯一标识,默认值为0;
3、节点哈希NH:数据类型为字符串,含义为该节点的2个子节点的联合哈希,默认值为NN对应的2个叶子节点LN中节点哈希NH进行联合哈希后得到的散列值;
4、自毁时间戳TOD:数据类型为日期时间,含义为该节点生命周期结束时被系统删除销毁的时间,默认值为NN对应的2个叶子节点LN中较大的自毁时间戳TOD值。
迭代执行上述过程,直到所有叶子节点LN都生成了与之对应的父节点NN后,当前所有叶子节点LN和非叶子节点NN构成了若干颗独立的二叉Merkle树,非叶子节点生成过程NNP结束,开始执行非叶子节点汇聚过程CNP。
非叶子节点汇聚过程CNP根据上一步骤中生成的若干颗二叉Merkle树,生成其根节点RN的父节点NN,直至不存在1颗以上的独立二叉Merkle树,具体步骤如下:
选取任意2颗独立二叉Merke树,设其根节点为RN,对其节点哈希NH进行连接运算,然后使用MD5、SHA1或其他算法计算连接运算结果的哈希值,生成上述2个根节点RN的父节点NN;更新上述2个根节点RN中父节点编号PNS的值为新生成父节点NN中节点编号NS的值;若仅存在1颗Merkle树,则说明所有二叉Merkle树已汇聚成1颗Merkle树,不作处理;若存在数量大于1的奇数颗Merkle树,则选取任1个独立二叉Merke树的根节点RN不参加上述过程,直到除该根节点RN外其他所有的根节点RN都生成了与其对应的父节点NN;若存在偶数颗Merkle树,重复上述过程,直到所有的根节点RN都生成了与其对应的父节点NN。
当上述过程完成后,当前所有叶子节点LN和非叶子节点NN汇聚成了若干颗新的Merkle树,检查Merkle树的数量是否为1;若否,则再次迭代执行非叶子节点汇聚过程CNP;若是,则不作处理,不存在1颗以上的独立二叉Merkle树,非叶子节点汇聚过程CNP结束。
节点维护过程MP根据每个叶子节点LN和非叶子节点NN中的自毁时间戳TOD判断相应节点是否过期,并删除已过期节点,具体步骤如下:
节点维护过程MP随应用系统启动加载,并以监视进程的形式驻留后台,每隔等待周期T,检查所有节点的自毁时间戳TOD。等待周期T的数据类型为整型,单位为毫秒,含义为相邻2次检查的间隔时间;设延时周期DT为一个用户配置的环境变量,数据类型为整型,含义为在自毁时间戳TOD到期之后系统继续存储该节点的时间长度,超过这一时间后节点将被删除;若TOD与DT之和小于等于系统当前时间CT,则将该节点删除;若TOD与DT之和大于系统当前时间,则不作处理。
迭代执行节点维护过程MP,直至MP所在的监视进程被终结。节点维护过程MP不随上述其他过程结束而结束。
整个过程如图1所示。
本实施例提出一种计算机介质,存储有以Java为开发语言、Eclipse为集成开发环境的程序,从而实现上述技术方案。
将二叉Merkle树的叶子节点LN编写为以下类(Class):
将二叉Merkle树的叶子节点NN编写为以下类(Class):
设现有5条需要存入Merkle树的商品追溯信息,已序列化成字符串类型数据,分别为D1、D2、D3、D4、D5。
首先,执行叶子节点生成过程LNP,分别根据D1、D2、D3、D4、D5构造叶子节点LN的实例LN1、LN2、LN3、LN4、LN5,如图2所示。设其自毁时间戳分别为”2018-12-01 00:00:00”、”2018-12-02 00:00:00”、”2018-12-0300:00:00”、”2018-12-04 00:00:00”、”2018-12-0500:00:00”,具体过程如下:
…
LN1=new LN(D1,”2018-12-01 00:00:00”,);
LN1.NH=MD5.Hash(LN1.ND);
…
LN2=new LN(D2,”2018-12-02 00:00:00”,);
LN2.NH=MD5.Hash(LN2.ND);
…
LN3=new LN(D3,”2018-12-03 00:00:00”,);
LN3.NH=MD5.Hash(LN3.ND);
…
LN4=new LN(D4,”2018-12-04 00:00:00”,);
LN4.NH=MD5.Hash(LN4.ND);
…
LN5=new LN(D5,”2018-12-05 00:00:00”,);
LN5.NH=MD5.Hash(LN5.ND);
…
叶子节点生成过程LNP执行完成后,得到如下LN的实例:
LN1:{“NS”:”1”,“PNS”:”0”,“NH”:”03A25D12B6D720A6294003356C6194EC”,
“TOD”:”2018-12-01 00:00:00”,“ND”:…}
LN2:{“NS”:”2”,“PNS”:”0”,“NH”:”B84FFE503148902F39485616A0C3F7B1”,
“TOD”:”2018-12-02 00:00:00”,“ND”:…}
LN3:{“NS”:”3”,“PNS”:”0”,“NH”:”EBF016BA683E42594658A07CB0A7871D”,
“TOD”:”2018-12-03 00:00:00”,“ND”:…}
LN4:{“NS”:”4”,“PNS”:”0”,“NH”:”719E8D4C69623296272FAE294B54C5BD”,
“TOD”:”2018-12-04 00:00:00”,“ND”:…}
LN5:{“NS”:”5”,“PNS”:”0”,“NH”:”661C43CD9ABB04350C83EAFEACB42C26”,
“TOD”:”2018-12-05 00:00:00”,“ND”:…}
显然,生成的叶子节点LN的实例数量为5,不为偶数,因此叶子节点生成过程LNP额外生成1个实例LN6,如图3所示,LN6的节点数据ND为空,此处使用一个单独的空格符号””表示,自毁时间戳TOD设与前1个实例,即LN5的TOD值相同:
LN6:{“NS”:”6”,“PNS”:”0”,“NH”:”7215EE9C7D9DC229D2921A40E899EC5F”,
“TOD”:”2018-12-05 00:00:00”,“ND”:””}
叶子节点生成过程LNP结束,开始执行非叶子节点生成过程NNP。
非叶子节点生成过程NNP依次选取LN1和LN2、LN3和LN4、LN5和LN6,构造它们的父节点NN1、NN2、NN3,如图4所示。NN1、NN2、NN3均为非叶子节点NN的实例,具体过程如下:
…
NN1=new NN();
NN1.NH=MD5.Hash(LN1.NH+LN2.NH);
LN1.PNS=NN1.NS;
LN2.PNS=NN1.NS;
NN1.TOD=GetMax(LN1.TOD,LN2.TOD);
…
NN2=new NN();
NN2.NH=MD5.Hash(LN3.NH+LN4.NH);
LN3.PNS=NN2.NS;
LN4.PNS=NN2.NS;
NN2.TOD=GetMax(LN3.TOD,LN4.TOD);
…
NN3=new NN();
NN3.NH=MD5.Hash(LN5.NH+LN6.NH);
LN5.PNS=NN3.NS;
LN6.PNS=NN3.NS;
NN3.TOD=GetMax(LN5.TOD,LN6.TOD);
…
非叶子节点生成过程NNP执行完成后,得到如下NN的实例:
NN1:{“NS”:”7”,“PNS”:”0”,“NH”:”3AB53FB30017A77A8B742ECBE690E07A”,
“TOD”:”2018-12-02 00:00:00”}
NN2:{“NS”:”8”,“PNS”:”0”,“NH”:”F13B9F671A3E65A78D3778C0FCCD2934”,
“TOD”:”2018-12-04 00:00:00”}
NN3:{“NS”:”9”,“PNS”:”0”,“NH”:”4F955BC7E0E5939342067C322E3E3D07”,
“TOD”:”2018-12-05 00:00:00”}
LN1、LN2、LN3、LN4、LN5、LN6的PNS更新后,具体内容如下:
LN1:{“NS”:”1”,“PNS”:”7”,“NH”:”03A25D12B6D720A6294003356C6194EC”,
“TOD”:”2018-12-01 00:00:00”,“ND”:…}
LN2:{“NS”:”2”,“PNS”:”7”,“NH”:”B84FFE503148902F39485616A0C3F7B1”,
“TOD”:”2018-12-02 00:00:00”,“ND”:…}
LN3:{“NS”:”3”,“PNS”:”8”,“NH”:”EBF016BA683E42594658A07CB0A7871D”,
“TOD”:”2018-12-03 00:00:00”,“ND”:…}
LN4:{“NS”:”4”,“PNS”:”8”,“NH”:”719E8D4C69623296272FAE294B54C5BD”,
“TOD”:”2018-12-04 00:00:00”,“ND”:…}
LN5:{“NS”:”5”,“PNS”:”9”,“NH”:”661C43CD9ABB04350C83EAFEACB42C26”,
“TOD”:”2018-12-05 00:00:00”,“ND”:…}
LN6:{“NS”:”6”,“PNS”:”9”,“NH”:”7215EE9C7D9DC229D2921A40E899EC5F”,
“TOD”:”2018-12-05 00:00:00”,“ND”:””}
此时所有LN和NN的实例共同构成了3颗二叉Merkle树,不存在任何单独的叶子节点或非叶子节点,非叶子节点生成过程NNP结束,开始执行非叶子节点汇聚过程CNP。
非叶子节点汇聚过程CNP查找当前所有独立的二叉Merkle树的根节点,显然,任何父节点编号PNS为0的非叶子节点NN的实例都是根节点,NN1、NN2、NN3均满足这一充要条件。设根节点RN的实例分别为RN1、RN2、RN3,其数量为奇数,选取RN3不参加汇聚,RN1和RN2先进行汇聚,如图5所示,具体操作步骤如下:
…
RN1=NN1;
RN2=NN2;
RN3=NN3;
…
NN4=new NN();
NN4.NH=MD5.Hash(RN1.NH+RN2.NH);
NN1.PNS=RN1.PNS=NN4.NS;
NN2.PNS=RN2.PNS=NN4.NS;
NN4.TOD=GetMax(RN1.TOD,RN2.TOD);
…
得到如下NN的实例:
NN4:{“NS”:”10”,“PNS”:”0”,“NH”:”67123391812FE4DC5AC0BB0562705E5C”,
“TOD”:”2018-12-04 00:00:00”}
此时,除RN3以外所有根节点的实例均生成了父节点,共有2颗二叉Merkle树,再次迭代执行非叶子节点汇聚过程CNP。显然,NN3和NN4是根节点,具体操作步骤如下:
…
RN3=NN3;
RN4=NN4;
…
…
NN5=new NN();
NN5.NH=MD5.Hash(RN3.NH+RN4.NH);
NN3.PNS=RN3.PNS=NN5.NS;
NN4.PNS=RN4.PNS=NN5.NS;
NN5.TOD=GetMax(RN3.TOD,RN4.TOD);
…
得到如下NN的实例:
NN5:{“NS”:”11”,“PNS”:”0”,“NH”:”99BFAFA21F14142506FACF0F771E4719”,
“TOD”:”2018-12-05 00:00:00”}
NN1、NN2、NN3、NN4的PNS更新后,具体内容如下::
NN1:{“NS”:”7”,“PNS”:”10”,“NH”:”3AB53FB30017A77A8B742ECBE690E07A”,
“TOD”:”2018-12-02 00:00:00”}
NN2:{“NS”:”8”,“PNS”:”10”,“NH”:”F13B9F671A3E65A78D3778C0FCCD2934”,
“TOD”:”2018-12-04 00:00:00”}
NN3:{“NS”:”9”,“PNS”:”11”,“NH”:”4F955BC7E0E5939342067C322E3E3D07”,
“TOD”:”2018-12-05 00:00:00”}
NN4:{“NS”:”10”,“PNS”:”11”,“NH”:”67123391812FE4DC5AC0BB0562705E5C”,
“TOD”:”2018-12-04 00:00:00”}
此时,有且仅有1颗二叉Merkle树,根节点为NN5,如图6所示。不存在1颗以上的独立二叉Merkle树,非叶子节点汇聚过程CNP结束。
当恶意实体试图篡改任意叶子节点LN的实例中的节点数据ND时,其节点哈希NH的值将与使用哈希算法计算ND得到的值不同,此时可以轻易定位受到篡改的LN实例;若恶意实体试图篡改任意叶子节点LN和非叶子节点NN的实例中的节点哈希NH,则该节点的父节点实例中的节点哈希NH与被篡改节点实例及其兄弟节点实例中NH的联合哈希值也将不同,同样可以定位被篡改的实例。
节点维护过程MP每隔等待周期T,循环检查每个叶子节点LN和非叶子节点NN的实例中TOD与延时周期DT之和是否小于等于系统当前时间;若是,则将该实例删除。此处设等待周期T的值为500毫秒,延时周期DT的值为30天,具体操作步骤如下
节点维护过程MP运行在单独的进程中,除非该进程被终止,否则一直驻留后台,不随上述任何过程结束而结束。
显然,在”2018-12-31 00:00:00”时刻,实例LN1最先被删除。在”2019-01-0400:00:00”时刻,实例NN5,即二叉Merkle树的根,最后被删除。该时刻之后,Merkle树任何节点都不再存在,所有存储空间均被释放。整个维护过程无需人工干预,由节点维护过程MP自动完成。
实施例仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明保护范围之内。
Claims (5)
1.一种基于Merkle树的可自毁商品追溯信息存储方法,其特征在于,包括以下步骤:
(1)Merkle树叶子节点生成过程,具体步骤如下:
根据输入的可自毁商品追溯信息,生成相应的Merkle树叶子节点LN,LN至少包括以下属性:
节点编号NS;
父节点编号PNS,其默认值为0;
节点数据ND,其默认值为序列化的可自毁商品追溯信息;
节点哈希NH,其默认值为节点数据ND的散列值;
自毁时间戳TOD,其默认值为商品保质期的到期时间;
将所有输入的可自毁商品追溯信息存入Merkle树叶子节点LN后,检查LN的数量是否为奇数,若是,则额外生成一个新的叶子节点LN,将其节点数据ND值设为空;若否,则不作处理,本过程结束;
(2)非叶子节点生成过程,具体步骤如下:
对任意2个叶子节点LN,计算其节点哈希NH进行联合哈希后得到的散列值,生成这2个叶子节点LN的父节点NN,并更新这2个叶子节点LN中父节点编号PNS的值为父节点NN中节点编号NS的值,直到所有的叶子节点LN都存在与其对应的父节点NN;所述父节点NN至少包括以下属性:
节点编号NS;
父节点编号PNS,其默认值为0;
节点哈希NH,其默认值为NN对应的2个叶子节点LN中节点哈希NH进行联合哈希后得到的散列值;
自毁时间戳TOD,其默认值为NN对应的2个叶子节点LN中较大的自毁时间戳TOD值;
重复上述过程,直到当所有叶子节点LN都生成了与其对应的父节点NN后,当前所有节点构成了若干棵独立的二叉Merkle树,本过程结束;
(3)非叶子节点汇聚过程,具体步骤如下:
设任意2颗独立的二叉Merkle树的根节点为RN,根据2个根节点RN中的节点哈希NH进行联合哈希后得到的散列值,生成2个根节点RN的父节点NN,并更新2个根节点RN中PNS的值为父节点NN中NS的值;
上述过程完成后,当前所有节点汇聚成了若干棵新的Merkle树;检查新Merkle树的数量是否为1,若否,则重复非叶子节点汇聚过程;若是,则不作处理,本过程结束;
(4)节点维护过程,具体步骤如下:
每隔等待周期T,循环检查所有节点的自毁时间戳TOD;设延时周期DT为一个用户配置的环境变量,若TOD与DT之和小于等于系统当前时间CT,则删除该节点;否则不作处理;
节点维护过程以监视进程的形式驻留后台,不随前述其他过程的结束而结束。
2.根据权利要求1所述基于Merkle树的可自毁商品追溯信息存储方法,其特征在于:在Merkle树叶子节点生成过程中,Merkle树叶子节点LN中各属性的数据类型设置如下:
节点编号NS的数据类型为自增长的64位无符号整型;
父节点编号PNS的数据类型为64位无符号整型;
节点数据ND的数据类型为字符串;
节点哈希NH的数据类型为字符串;
自毁时间戳TOD的数据类型为日期时间。
3.根据权利要求1所述基于Merkle树的可自毁商品追溯信息存储方法,其特征在于:在非叶子节点生成过程中,父节点NN中各属性的数据类型设置如下:
节点编号NS的数据类型为自增长的64位无符号整型;
父节点编号PNS的数据类型为64位无符号整型;
节点哈希NH的数据类型为字符串;
自毁时间戳TOD的数据类型为日期时间。
4.根据权利要求1所述基于Merkle树的可自毁商品追溯信息存储方法,其特征在于:在非叶子节点汇聚过程中,若仅存在1棵二叉Merkle树,则不作处理;若存在数量大于1的奇数棵二叉Merkle树,则选取任一根节点RN不参加本过程,直到除该节点外其他所有根节点RN都生成了与其对应的父节点NN;若存在偶数棵二叉Merkle树,重复本过程,直到所有的根节点RN都生成了与其对应的父节点NN。
5.根据权利要求1所述基于Merkle树的可自毁商品追溯信息存储方法,其特征在于:在节点维护过程中,等待周期T的数据类型为整型,单位为毫秒;延时周期DT的数据类型为整型。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811441947.0A CN109685525B (zh) | 2018-11-29 | 2018-11-29 | 一种基于Merkle树的可自毁商品追溯信息存储方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811441947.0A CN109685525B (zh) | 2018-11-29 | 2018-11-29 | 一种基于Merkle树的可自毁商品追溯信息存储方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109685525A CN109685525A (zh) | 2019-04-26 |
CN109685525B true CN109685525B (zh) | 2020-12-29 |
Family
ID=66185111
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811441947.0A Active CN109685525B (zh) | 2018-11-29 | 2018-11-29 | 一种基于Merkle树的可自毁商品追溯信息存储方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109685525B (zh) |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100485611C (zh) * | 2006-06-13 | 2009-05-06 | 上海海加网络科技有限公司 | 一种基于二叉平衡树的SessionCache方法 |
CN102571949B (zh) * | 2011-12-31 | 2014-05-07 | 河海大学 | 一种基于网络的数据自毁方法 |
CN103023820B (zh) * | 2013-01-08 | 2015-06-10 | 武汉大学 | 一种可分片预留接纳控制方法 |
CN105653198A (zh) * | 2014-11-13 | 2016-06-08 | 杭州迪普科技有限公司 | 数据处理方法及装置 |
US10193696B2 (en) * | 2015-06-02 | 2019-01-29 | ALTR Solutions, Inc. | Using a tree structure to segment and distribute records across one or more decentralized, acylic graphs of cryptographic hash pointers |
KR20180089682A (ko) * | 2017-02-01 | 2018-08-09 | 삼성전자주식회사 | 블록체인 기반의 데이터의 무결성을 검증하는 전자 장치 및 방법 |
CN108182482A (zh) * | 2017-11-20 | 2018-06-19 | 广东中科南海岸车联网技术有限公司 | 基于区块链的种植作物的培育监控方法及装置 |
CN108717666B (zh) * | 2018-05-10 | 2020-08-07 | 山东大学 | 基于区块链的个性化车险计算方法、系统和终端 |
CN108876616A (zh) * | 2018-06-13 | 2018-11-23 | 众安信息技术服务有限公司 | 基于区块链的交易信息处理方法、装置和资产登记结算系统 |
-
2018
- 2018-11-29 CN CN201811441947.0A patent/CN109685525B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN109685525A (zh) | 2019-04-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20210243007A1 (en) | Maintaining blocks of a blockchain in a partitioned blockchain network | |
CA2851904C (en) | System and method for incrementally replicating investigative analysis data | |
Palm et al. | Selective blockchain transaction pruning and state derivability | |
CN103425771B (zh) | 一种数据正则表达式的挖掘方法及装置 | |
CN104679772A (zh) | 分布式数据仓库中删除文件的方法、装置、设备及系统 | |
CN112256715B (zh) | 索引的更新方法、装置、电子设备以及存储介质 | |
CN109359283A (zh) | 表格数据的汇总方法、终端设备及介质 | |
CN111444196A (zh) | 块链式账本中全局状态的哈希的生成方法、装置及设备 | |
CN114385760A (zh) | 增量数据实时同步的方法、装置、计算机设备及存储介质 | |
CN113439424B (zh) | 建立具有包括可调数量的事务区块和多个中间区块的区块的区块链 | |
US10803051B2 (en) | System for performing a lineage control in a data network | |
CN109685525B (zh) | 一种基于Merkle树的可自毁商品追溯信息存储方法 | |
US20200218600A1 (en) | System for generating dataflow lineage information in a data network | |
CN104750849A (zh) | 用于维护基于树形结构的目录关系的方法和系统 | |
CN113986942B (zh) | 一种基于人机对话的消息队列管理方法及装置 | |
Rinberg et al. | DSON: JSON CRDT using delta-mutations for document stores | |
US11146475B2 (en) | System for performing an integrated data quality control in a data network | |
CN113535727B (zh) | 信息系统的数据输出方法及数据输出装置、电子设备 | |
US10601712B1 (en) | System for performing a variation control in a data network | |
CN111274316A (zh) | 多级数据流转任务的执行方法及装置、电子设备、存储介质 | |
CN111488345A (zh) | 业务数据区块链的存储优化方法及装置 | |
US10812357B2 (en) | System for performing a timeless control in a data network | |
EP4064065A1 (en) | Data retention in a decentralized distributed database | |
US20220269660A1 (en) | Blockchain based protection from data manipulation history in relational databases | |
CN117390117A (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 |