CN112015734A - 一种面向区块链的紧凑Merkle多值证明并行生成及验证方法 - Google Patents
一种面向区块链的紧凑Merkle多值证明并行生成及验证方法 Download PDFInfo
- Publication number
- CN112015734A CN112015734A CN202010781649.7A CN202010781649A CN112015734A CN 112015734 A CN112015734 A CN 112015734A CN 202010781649 A CN202010781649 A CN 202010781649A CN 112015734 A CN112015734 A CN 112015734A
- Authority
- CN
- China
- Prior art keywords
- value
- index
- merkle
- data
- proof
- 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.)
- Granted
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/2246—Trees, e.g. B+trees
-
- 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
- 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
Abstract
本发明公开了一种面向区块链的紧凑Merkle多值证明并行生成及验证方法,包括Merkle Forest的构建、紧凑Merkle多值证明的生成以及基于紧凑Merkle多值证明的验证。为快速并行获取Merkle多值证明,充分利用当代计算机多核处理器的特性,以及更好适用于海量数据集下的Merkle多值证明的相关操作,本发明提出了一种支持多线程方式的称之为Merkle Forest的数据结构。本发明克服了现有技术下稀疏的多值证明在生成及验证证明时,需要更多的内存和CPU周期上的缺陷,以及解决了稀疏的多值证明难以并行地生成和验证上的问题,实现了快速高效的多值证明生成及验证。
Description
技术领域
本发明属于区块链技术领域,尤其涉及Merkle证明技术,具体是一种面向区块链的紧凑Merkle多值证明并行生成及验证方法。
背景技术
默克尔树(Merkle tree,MT)是一种哈希二叉树,1979年由Ralph Merkle发明。在计算机领域,Merkle树大多用来进行完整性验证处理。在处理完整性验证的应用场景中,特别是在分布式环境下进行这样的验证时,Merkle树会大大减少数据的传输量以及计算的复杂度。Merkle哈希树是一类基于哈希值的二叉树或多叉树,其叶子节点上的值通常为数据块的哈希值,而非叶子节点上的值是将该节点的所有子节点的组合结果的哈希值。Merkle树由于可快速比较大量数据,即当两个默克尔树根相同时,则意味着所代表的数据必然相同(哈希算法决定的),而常用于区块链系统中来快速归纳和校验区块数据的完整性。
区块链中的Merkle树是二叉树,用于存储交易信息。每个交易两两配对,构成Merkle树的叶子节点,进而生成整个Merkle树。Merkle树使得用户可以通过从区块头得到的Merkle树根和别的用户所提供的中间哈希值列表去验证某个交易是否包含在区块中。提供中间哈希值的用户并不需要是可信的,因为伪造区块头的代价很高,而中间哈希值如果伪造的话会导致验证失败。虽然对于Merkle树的研究已经很久了,但是大多数工作几乎都关注于一个值的验证,而没有考虑到压缩Merkle证明以及多个值的验证。近年来,部分工作开始将重心转移到证明多个值存在于同一棵Merkle树上的方法,即将一棵Merkle树中的一组证明打包在一起从而获得多值证明(multiproof),这在一定程度上可以为证明一棵Merkle树上存在多个值时提供空间上较为节约的证明。但是,现有技术下稀疏的多值证明在生成及验证证明时,需要更多的内存和CPU周期,稀疏的多值证明难以并行地生成和验证,并且很难适用于海量数据集下的Merkle多值证明的相关操作。
因此,有必要提出一种面向区块链的基于多线程方式的紧凑Merkle多值证明快速生成及验证方法。
发明内容
本发明是以快速获取Merkle多值证明以及基于多值证明快速验证多个值为目标,针对现有技术的缺失,提出一种面向区块链的紧凑Merkle多值证明并行生成及验证方法,其中包括Merkle Forest的构建、紧凑Merkle多值证明的生成以及基于紧凑Merkle多值证明的验证。
为快速并行获取Merkle多值证明,充分利用当代计算机多核处理器的特性,以及更好适用于海量数据集下的Merkle多值证明的相关操作,本发明提出了一种支持多线程方式的称之为Merkle Forest的数据结构。在Merkle Forest的构建过程,首先会将大数据集按照区间范围切分成多个数据块,然后利用多线程并行方式基于每个数据块构建Merkle树形成多个子树,最后再基于得到的子树以多线程方式向上构建新的Merkle树,依次迭代生成子树直到得到最后一棵子树,将其称之为根子树。在紧凑Merkle多值证明的生成过程中,将基于得到的多个不同的子树来并行的生成多值证明,在Merkle Forest中从下往上依次迭代生成证明。在基于紧凑Merkle多值证明的验证过程中,将基于得到的多值证明快速生成树根进行验证。
实现本发明目的的具体技术方案是:
一种面向区块链的紧凑Merkle多值证明并行生成及验证方法,该方法包括以下具体步骤:
步骤1:Merkle Forest的构建,具体包括以下子步骤;
步骤1-1:将初始数据集按照区间范围进行切分得到多个数据块data-block,并将其按序放入队列Q中;
步骤1-2:多个线程将依次从Q中获取data-block,并基于获得的数据块构建Merkle树,直到队列为空,这将生成新一层的一组子树;
步骤1-3:获取所有步骤1-2中得到的子树的树根sub-root,若子树的个数等于1则表明这已经是最后一棵子树了,终止迭代过程,跳转到步骤1-4;否则,将所有的sub-root作为新一轮迭代的初始数据集并进行步骤1-1的操作;
步骤1-4:多轮的子树并行向上迭代得到多层级子树,最终汇总得到MerkleForest。
步骤2:紧凑Merkle多值证明的生成,具体包括以下子步骤;
步骤2-1:对于如何获得被验证的数据集I的多值证明multiproofs,只需关注于那些与I中数据有关的部分子树即可;对于数据集I中数据无关的子树,由于这部分子树内节点值的变化并不会影响到对数据集I的multiproofs的获取过程,因此可直接这部分子树的不进行处理;
步骤2-2:根据I中数据的有序索引index将其按照区间范围进行切分,与MerkleForest构建时候的范围保持一致,根据切分得到的index区间就可以计算出所有与I中数据有关的第一层子树;
步骤2-3:从下向上迭代遍历每一层中所涉及到的子树,对于同一层的多个子树可用不同的线程同时并行的处理来获得单个子树内的证明;
步骤2-4:如果某一层的某个子树是被涉及的,则它的根是一定能够通过已得到的证明计算得到的,并且这个根将作为下一层迭代中需要被验证的输入数据;
步骤2-5:多轮的子树并行向上迭代生成子树内的证明,最终得到I的multiproofs。
其中,步骤2-3中,对于sub-tree内的证明的生成,具体包括以下步骤:
步骤2-3-1:从下至上按层遍历这棵子树,如果当前层需要被验证的数据集I’的大小等于当前层sub-tree的节点数,则需要对该层中需要被验证的所有数据提供证明,即当前层之后的每一层的证明都是可以通过该层的得到的证明被计算出来的而不用额外提供其它证明,则无需继续遍历可跳转到步骤2-3-6;否则,进行步骤2-3-2;
步骤2-3-2:为了确保完整性,将遍历I’以得到相对应的证明,此时会有两种不同的情况。如果当前遍历到的值的索引值index为偶数,则首先需要判断其是否是I’中的最后一个值。如果是,并且它不是sub-tree当前层的最后一个值,则应该维护这个值的证明;否则,若该值是当前层的最后一个值,则其可以通过与它自身一起来计算得到父亲节点的值。如果不是最后一个值,则进行步骤2-3-3;
步骤2-3-3:首先需要判断与该值相邻的下一个值即索引值为index+1的值是否也在I’中。如果在,可以使用该值以及数据集I’中index+1对应的值一起来计算得到它们的父亲节点的值,无需做任何操作可直接在遍历过程中跳过它和下一个值。否则,则应该添加对于该值的证明;
步骤2-3-4:如果当前遍历到的值的索引值index为奇数时,说明I’中没有能够与其一起生父亲节点的值,因此需要维护与其相邻的上一个值即索引值为index-1的证明;
步骤2-3-5:无论index是偶数还是奇数,都必须记录下索引值等于index/2的父亲节点索引以作为下一次迭代所需的初始数据;
步骤2-3-6:通过依次向上迭代遍历该sub-tree直到获得所有相对应的证明,最终将基于该子树得到所需被验证数据紧凑多值证明multiproofs。
步骤3:基于紧凑Merkle多值证明的验证,具体包括以下子步骤:
步骤3-1:由于数据集是经过切分的,则可以使用多线程的方式并行基于multiproofs计算Merkle Forest的根,同样地将计算整个Merkle Forest的根按照层级划分成对多个层的多棵子树的计算;
步骤3-2:根据需要被验证的数据集I的有序索引index将其按照区间范围进行切分,与Merkle Forest构建时候的范围保持一致,从而得到多个数据块micro-data;
步骤3-3:基于得到的micro-data以及与其相关的多值证明从下向上迭代得到该子树sub-tree的根;
步骤3-4:多轮的并行向上迭代生成子树的根,最终得到Merkle Forest的根。
其中,步骤3-3中,对于sub-tree内的基于证明的验证,具体包括以下步骤:
步骤3-3-1:根据multiproofs从下向上迭代计算,得到sub-tree的根结点;由于multiproofs中没有记录索引,所以必须要判断当前的证明proof是否为multiproofs中的最后一层最后一个数据。如果是,则表明当前的proof已经是最后一个值即该子树的根,无需继续直接转向步骤3-3-7;否则,进行步骤3-3-2;
步骤3-3-2:每轮迭代的时候都需要从multiproofs中获取当前层的proof计作clp,并在迭代过程中获取下一层需要被验证的初始数据nlv以及与其相对应的索引值nli,用vl来标记当前层需要被验证的数据,vi来标记与vl中值对应的有序索引集合;
步骤3-3-3:依次遍历当前层需要被验证的数据的有序索引集合vi,对于vi中的每一个索引值index,如果它是偶数并且不是vi中的最后一个值,则需要判断索引值为index+1的值是否在vi中,这是为了判断索引值为index+1的值是否在vl中即是否是已知的。如果在,由于它们是一对并且与其相对应的值是已知的,则可直接利用这两个索引对应的值计算得到新的值并将其添加到nlv中,然后在遍历vi的过程中直接跳过这两个值;否则,从clp中移出第一个值并与该index对应的值一起生成新的值并添加进nlv中;如果该index是vi的最后一个值,则转向步骤3-3-5;如果该index是奇数,则转向步骤3-3-6;
步骤3-3-4:当index是vi的最后一个值时,需要首先判断clp是否为空,如果是,下一个值将仅由该index对应的值计算得到,计算得到的新的值将被放入nlv;如果不是,下一个值将由该index对应的值和clp中的最后一个值计算得到,计算得到的新的值将被放入nlv;
步骤3-3-5:当index是奇数时,则从clp中移出第一个值并与该index对应的值一起计算得到新的值,新得到的值将被放入nlv;
步骤3-3-6:当vi遍历结束后,需要将nlv赋值给vl并将nli赋值给vi以进行下一层的迭代计算,转向步骤3-3-2;
步骤3-3-7:最后,vl中只有一个值,将它作为证明的根返回。
本发明的有益效果包括:
本发明提出了一种面向区块链的紧凑Merkle多值证明并行生成及验证方法,在生成证明的过程中所有值的证明都是一起生成、一起得到验证的。生成及验证时,只需要把要验证的多个值,以及多个值对应的证明都拿出来即可。充分利用了当代多核处理器的优势,支持海量数据下的多值证明的生成和验证,通过将数据集进行切分生成多个子集,由多个线程根据不同的子集并行生成子树,然后将生成的子树根作为新一轮的初始数据进行迭代,最终得到最后一棵子树,所有子树汇集成一棵Merkle Forest。当需要生成多值证明时,首先将需要验证的数据集根据其索引按照同样标准进行切分得到验证数据子集,然后由不同的线程根据验证数据子集和其对应的子树得到该验证数据子集的多值证明。当要验证证明时,同样是根据子树以及相对应的多值证明的子集进行并行验证。
附图说明
图1显示的是标准的Merkle树结构;
图2显示的是本发明中Merkle Forest结构;
图3显示的是本发明中构建紧凑Merkle多值证明过程示例图;
图4显示的是本发明中基于紧凑Merkle多值证明的验证过程示例图。
具体实施方式
结合以下具体实施例和附图,对本发明作进一步的详细说明。实施本发明的过程、条件、实验方法等,除以下专门提及的内容之外,均为本领域的普遍知识和公知常识,本发明没有特别限制内容。
本发明公开了一种面向区块链的紧凑Merkle多值证明并行生成及验证方法,包括Merkle Forest的构建、紧凑Merkle多值证明的生成以及基于紧凑Merkle多值证明的验证。为快速并行获取Merkle多值证明,充分利用当代计算机多核处理器的特性,以及更好适用于海量数据集下的Merkle多值证明的相关操作,本发明提出了一种支持多线程方式的称之为Merkle Forest的数据结构。本发明克服了现有技术下稀疏的多值证明在生成及验证证明时,需要更多的内存和CPU周期上的缺陷,以及解决了稀疏的多值证明难以并行地生成和验证上的问题,实现了快速高效的多值证明生成及验证。
本发明是一种面向区块链的紧凑Merkle多值证明并行生成及验证方法,该方法包括以下具体步骤:
一种面向区块链的紧凑Merkle多值证明并行生成及验证方法,该方法包括以下具体步骤:
步骤1:Merkle Forest的构建,具体包括以下子步骤;
步骤1-1:将初始数据集按照区间范围进行切分得到多个数据块data-block,并将其按序放入队列Q中;
步骤1-2:多个线程将依次从Q中获取data-block,并基于获得的数据块构建Merkle树,直到队列为空,这将生成新一层的一组子树;
步骤1-3:获取所有步骤1-2中得到的子树的树根sub-root,若子树的个数等于1则表明这已经是最后一棵子树了,终止迭代过程,跳转到步骤1-4;否则,将所有的sub-root作为新一轮迭代的初始数据集并进行步骤1-1的操作;
步骤1-4:多轮的子树并行向上迭代得到多层级子树,最终汇总得到MerkleForest。
步骤2:紧凑Merkle多值证明的生成,具体包括以下子步骤;
步骤2-1:对于如何获得被验证的数据集I的多值证明multiproofs,只需关注于那些与I中数据有关的部分子树即可;
步骤2-2:根据I中数据的有序索引index将其按照区间范围进行切分,与MerkleForest构建时候的范围保持一致,从而获得所有与I中数据有关的第一层子树;
步骤2-3:从下向上迭代遍历每一层中所涉及到的子树,对于同一层的多个子树可用不同的线程同时并行的处理来获得单个子树内的证明;
步骤2-4:如果某一层的某个子树是被涉及的,则它的根是必须要能够被计算得到的,并且这个根将作为下一层迭代中需要被验证的输入数据;
步骤2-5:多轮的子树并行向上迭代生成子树内的证明,最终得到I的multiproofs。
其中,步骤2-3中,对于sub-tree内的证明的生成,具体包括以下步骤:
步骤2-3-1:从下至上按层遍历这棵子树,如果当前层需要被验证的数据集I’的大小等于当前层sub-tree的节点数,则需要对该层中需要被验证的所有数据提供证明,即当前层之后的每一层的证明都是可以通过该层的得到的证明被计算出来的而不用额外提供其它证明,则无需继续遍历可跳转到步骤2-3-6;否则,进行步骤2-3-2;
步骤2-3-2:为了确保完整性,将遍历I’以得到相对应的证明,此时会有两种不同的情况。如果当前遍历到的值的索引值index为偶数,则首先需要判断其是否是I’中的最后一个值。如果是,并且它不是sub-tree当前层的最后一个值,则应该维护这个值的证明;否则,若该值是当前层的最后一个值,则其可以通过与它自身一起来计算得到父亲节点的值。如果不是最后一个值,则进行步骤2-3-3;
步骤2-3-3:首先需要判断与该值相邻的下一个值即索引值为index+1的值是否也在I’中。如果在,可以很简单地通过这两个值来计算得到它们的父亲节点的值,无需做任何操作可直接在遍历过程中跳过它和下一个值。否则,则应该添加对于该值的证明;
步骤2-3-4:如果当前遍历到的值的索引值index为奇数时,说明I’中没有能够与其一起生父亲节点的值,因此需要维护与其相邻的上一个值即索引值为index-1的证明;
步骤2-3-5:无论index是偶数还是奇数,都必须记录下索引值等于index/2的父亲节点索引以作为下一次迭代所需的初始数据;
步骤2-3-6:通过依次向上迭代遍历该sub-tree直到获得所有相对应的证明,最终将基于该子树得到所需被验证数据紧凑多值证明multiproofs。
步骤3:基于紧凑Merkle多值证明的验证,具体包括以下子步骤:
步骤3-1:由于数据集是经过切分的,则可以使用多线程的方式并行基于multiproofs计算Merkle Forest的根,同样地将计算整个Merkle Forest的根按照层级划分成对多个层的多棵子树的计算;
步骤3-2:根据需要被验证的数据集I的有序索引index将其按照区间范围进行切分,与Merkle Forest构建时候的范围保持一致,从而得到多个数据块micro-data;
步骤3-3:基于得到的micro-data以及与其相关的多值证明从下向上迭代得到该子树sub-tree的根;
步骤3-4:多轮的并行向上迭代生成子树的根,最终得到Merkle Forest的根。
其中,步骤3-3中,对于sub-tree内的基于证明的验证,具体包括以下步骤:
步骤3-3-1:根据multiproofs从下向上迭代计算,得到sub-tree的根结点;由于multiproofs中没有记录索引,所以必须要判断当前的证明proof是否为multiproofs中的最后一层最后一个数据。如果是,则表明当前的proof已经是最后一个值即该子树的根,无需继续直接转向步骤3-3-7;否则,进行步骤3-3-2;
步骤3-3-2:每轮迭代的时候都需要从multiproofs中获取当前层的proof计作clp,并在迭代过程中获取下一层需要被验证的初始数据nlv以及与其相对应的索引值nli,用vl来标记当前层需要被验证的数据,vi来标记与vl中值对应的有序索引集合;
步骤3-3-3:依次遍历当前层需要被验证的数据的有序索引集合vi,对于vi中的每一个索引值index,如果它是偶数并且不是vi中的最后一个值,则需要判断索引值为index+1的值是否在vi中,这是为了判断索引值为index+1的值是否在vl中即是否是已知的。如果在,由于它们是一对并且与其相对应的值是已知的,则可直接利用这两个索引对应的值计算得到新的值并将其添加到nlv中,然后在遍历vi的过程中直接跳过这两个值;否则,从clp中移出第一个值并与该index对应的值一起生成新的值并添加进nlv中;如果该index是vi的最后一个值,则转向步骤3-3-5;如果该index是奇数,则转向步骤3-3-6;
步骤3-3-4:当index是vi的最后一个值时,需要首先判断clp是否为空,如果是,下一个值将仅由该index对应的值计算得到,计算得到的新的值将被放入nlv;如果不是,下一个值将由该index对应的值和clp中的最后一个值计算得到,计算得到的新的值将被放入nlv;
步骤3-3-5:当index是奇数时,clp中肯定会存在与其相对应的值,因此只需使用它们两计算得到新的值即可,新得到的值将被放入nlv;
步骤3-3-6:当vi遍历结束后,需要将nlv赋值给vl并将nli赋值给vi以进行下一层的迭代计算,转向步骤3-3-2;
步骤3-3-7:最后,vl中只有一个值,将它作为证明的根返回。
实施例
本实施例是在区块链系统上实施的一种紧凑Merkle多值证明并行生成及验证方法。
图1展示的是标准的Merkle哈希树结构,Merkle树是一类基于哈希值的二叉树或多叉树,其叶子节点上的值通常为数据块的哈希值,而非叶子节点上的值是将该节点的所有子节点的组合结果的哈希值。在图1中,节点H0’的值必须通过节点H0和H1上的值计算而得到。叶子结点H0和H1分别存储数据块01和02的哈希值,而非叶子节点H0’存储的是其子节点H0和H1的组合的哈希值,这类非叶子节点的哈希值被称作路径哈希值,而叶子节点的哈希值是实际数据的哈希值。Merkle证明即在整棵树尚未完整下载的情况下,仅通过下载的部分数据来进行完整性校验,快速判断某数据是否在其应处的位置。生成完整性证明的过程,从Merkle树根节点出发,到指向满足查找指定的数据块的叶子节点,路径上的所有节点的兄弟节点作为该数据块的完整性证明,如图可知,H1和H1’是数据块01的证明。
图2展示的是本发明中Merkle Forest结构。为了提高生成多值证明和基于证明验证数据完整性的并行性,对于数据集D,本发明设计了由k+1个子树组成的Merkle Forest,其中第1到第k个子树中包含的数据的个数(即叶子结点数)为2N(N为用户自定义的),第k+1个子树的叶子节点数为m=|D|-k*2N,其中m∈[0,2N)。与传统的Merkle树相比,MerkleForest中的每个子树的树高较小,因此可以扩展到更大的数据集,并且可以通过使用多个线程快速并行地生成证明和验证数据完整性。对于前k个子树,构建了k个完整的Merkle树即满树,而由剩下的m个数据构建的第k+1棵树是不完整,并且小于其前k棵子树。将所有的这些k+1个子树的根视为新的数据集D’,可以根据上述规则继续迭代构建多个Merkle子树,按层划分(一层就是一次迭代,一层的子树就是一次迭代过程中生成的所有子树),直到某一层得到的Merkle树的数量等于1,即得到了最后一棵树,称为根树。这样,对于一个非常大的数据集,可以获得多层的多个Merkle子树并将它们组织在一起成为一个Merkle Forest。图2是一个N=1时候的Merkle Forest的简单示例,此处有7个值(椭圆),与其相对应的哈希值为7,因此k=3和m=1。在最底下一层上(即第一层),有三棵满树和一棵只包含了H6的非满树,所有用虚线框处理的都是一棵子树,比如第一层就有3棵子树。第一层的子树的根将作为第二层子树的叶子节点来迭代计算新的子树,直到得到根树。对于已知的数据集,可以将k+1设置为内核数来最大化每个核的计算性能,因此Merkle Forest可以充分利用多核处理器的特性。
为了更好地阐述本发明,以下所有具体实施方式都是以图2中的Merkle Forest结构进行举例说明。
图3展示的是本发明中构建紧凑Merkle多值证明过程示例图。其中数据2、7和6是需要被验证的数据,则其所对应的有序索引列表vi={1,4,6}。首先,将vlist初始化为vi以作为第一层索引值列表。然后,按序遍历vlist。vlist中的第一个值是奇数1,因此它需要索引值为0的左边兄弟节点即H0一起计算得到H0’,同时将该索引值对应的父亲节点索引0加入nli中,并将H0加入到记录当前层证明列表clp中。vlist中的第二个值是偶数4,因此它需要索引值为5的右边兄弟节点H5一起计算得到H2’,此时首先将判断vlist中是否包含索引值5,若包含则无需另外提供H5。否则,将H5加入到记录当前层证明列表clp中。不管是否满足条件,最后都将会该索引值4对应的父亲节点索引2加入nli中。对于vlist中的最后一个索引值6,由于它没有右边兄弟节点,则无需另外提供任何值,它将与自身一起计算得到H3’,并直接将其对应的父亲节点索引3加入nli中。经过第一层遍历将得到第一层clp={H0,H5},nli={0,2,3},将clp添加进多值证明mmp中,并将nli赋值给vlist以进行第二轮的迭代,同上得到第二层的clp={H1’},将其添加到mmp中。第二轮结束后,由于H0”和H1”都是可以被mmp中已有值计算得到,所以无需额外计算。最终得到的紧凑Merkle多值证明mmp={<H0,H5>,<H1’>}。单个子树内构建紧凑Merkle多值证明如算法1所示:
图4展示的是本发明中基于紧凑Merkle多值证明的验证过程示例图。根据算法1得到紧凑Merkle多值证明mmp={<H0,H5>,<H1’>},被验证数据的有序索引列表vi={1,4,6},以及与vi中相对应的数据值列表vl={2,7,6}。由于mmp非空,则可获取第一层证明clp={H0,H5}。按序遍历vi,由于vi中的第一个值1位奇数,则直接从clp中获取与其对应的兄弟节点的值H0与vl中对应的值一起计算得到父亲节点的值,并将父亲节点的值加入下一层初始数据值nlv中,父亲节点索引0加入下一层索引列表nli中。对于vi中的第二个值4,因为它是一个偶数并且不是vi中的最后一个值,由于与其相对应的下一个索引值5并不在vi中,则从clp中获取与其对应的右边兄弟节点的值H5与vl中对应的值一起计算得到父亲节点的值,并将获得的值加入nlv中,父亲节点索引2加入nli中。对于vi中的最后一个值6,由于它是一个偶数并且是vi中的最后一个值,同时clip为空,则它将与其自身一起计算得到父亲节点值,并将获得的值加入nlv中,父亲节点索引3加入nli中。这样就得到了下一轮遍历的初始数据vi=nli={0,2,3},vl=nlv={H0’,H2’,H3’},并进入第二轮迭代过程。按上述规则继续迭代知道mmp为空且和vi中只有唯一时值为止,这个唯一值即为得到的树根。单个子树内基于紧凑Merkle多值证明的验证如算法2所示:
本发明的保护内容不局限于以上实施例。在不背离发明构思的精神和范围下,本领域技术人员能够想到的变化和优点都被包括在本发明中,并且以所附的权利要求书为保护范围。
Claims (6)
1.一种面向区块链的紧凑Merkle多值证明并行生成及验证方法,其特征在于,包括以下具体步骤:
步骤1:Merkle Forest的构建;
步骤2:紧凑Merkle多值证明的生成;
步骤3:基于紧凑Merkle多值证明的验证。
2.根据权利要求1所述的面向区块链的紧凑Merkle多值证明并行生成及验证方法,其特征在于,所述步骤1具体包括:
步骤1-1:将初始数据集按照区间范围进行切分,得到多个数据块data-block,并将其按序放入队列中;
步骤1-2:多个线程依次从队列中获取数据块data-block,并基于获得的数据块构建Merkle树,直到队列为空,生成新一层的一组子树;
步骤1-3:获取所有步骤1-2中得到的子树的树根;若子树的个数等于1,则表明是最后一棵子树,终止迭代过程,跳转到步骤1-4;否则,将所有的树根作为新一轮迭代的初始数据集并跳转到步骤1-1的操作;
步骤1-4:多轮的子树并行向上迭代得到多层级子树,最终汇总得到Merkle Forest。
3.根据权利要求2所述的面向区块链的紧凑Merkle多值证明并行生成及验证方法,其特征在于,所述步骤2具体包括:
步骤2-1:关注于与数据集I中数据有关的部分子树获得被验证的数据集I的多值证明multiproofs;对于数据集I中数据无关的子树不进行处理;
步骤2-2:根据数据集I中数据的有序索引index,将其按照区间范围进行切分,与Merkle Forest构建时候的范围保持一致,根据切分得到的index区间就可以计算出所有与数据集I中数据有关的第一层子树;
步骤2-3:从下向上迭代遍历每一层中所涉及到的子树,对于同一层的多个子树用不同的线程同时并行的处理来获得单个子树内的证明;
步骤2-4:如果某一层的某个子树是被涉及的,则它的根是一定能够通过已得到的证明计算得到,并且这个根将作为下一层迭代中被验证的输入数据;
步骤2-5:多轮的子树并行向上迭代生成子树内的证明,最终得到数据集I的multiproofs。
4.根据权利要求3所述的面向区块链的紧凑Merkle多值证明并行生成及验证方法,其特征在于,所述步骤2-3具体包括:
步骤2-3-1:从下至上按层遍历这棵子树,如果当前层被验证的数据集I’的大小等于当前层sub-tree的节点数,则对该层中被验证的所有数据提供证明,即当前层之后的每一层的证明都是可以通过该层的得到的证明被计算出来的而不用额外提供其它证明,则无需继续遍历可跳转到步骤2-3-6;否则,进行步骤2-3-2;
步骤2-3-2:为了确保完整性,将遍历数据集I’以得到相对应的证明,此时会有两种不同的情况:如果当前遍历到的值的索引值index为偶数,则首先判断其是否是数据集I’中的最后一个值,如果是,并且它不是sub-tree当前层的最后一个值,则维护这个值的证明;否则,若该值是当前层的最后一个值,则其可以通过与它自身一起来计算得到父亲节点的值;如果不是最后一个值,则进行步骤2-3-3;
步骤2-3-3:首先判断与该值相邻的下一个值即索引值为index+1的值是否在数据集I’中,如果在,可以使用该值以及数据集I’中index+1对应的值一起来计算得到它们的父亲节点的值,无需做任何操作可直接在遍历过程中跳过它和下一个值;否则,则应该添加对于该值的证明;
步骤2-3-4:如果当前遍历到的值的索引值index为奇数时,说明数据集I’中没有能够与其一起生父亲节点的值,因此维护与其相邻的上一个值即索引值为index-1的证明;
步骤2-3-5:无论index是偶数还是奇数,都记录下索引值等于index/2的父亲节点索引以作为下一次迭代所需的初始数据;
步骤2-3-6:通过依次向上迭代遍历该sub-tree直到获得所有相对应的证明,最终将基于该子树得到所需被验证数据紧凑多值证明multiproofs。
5.根据权利要求1所述的面向区块链的紧凑Merkle多值证明并行生成及验证方法,其特征在于,所述步骤3具体包括:
步骤3-1:使用多线程的方式并行基于multiproofs计算Merkle Forest的根,同样地将计算整个Merkle Forest的根按照层级划分成对多个层的多棵子树的计算;
步骤3-2:根据被验证的数据集I的有序索引index将其按照区间范围进行切分,与Merkle Forest构建时候的范围保持一致,从而得到多个数据块micro-data;
步骤3-3:基于得到的micro-data以及与其相关的多值证明从下向上迭代得到该子树sub-tree的根;
步骤3-4:多轮的并行向上迭代生成子树的根,最终得到Merkle Forest的根。
6.根据权利要求5所述的面向区块链的紧凑Merkle多值证明并行生成及验证方法,其特征在于,所述步骤3-3具体包括:
步骤3-3-1:根据multiproofs从下向上迭代计算,得到sub-tree的根结点;判断当前的证明proof是否为multiproofs中的最后一层最后一个数据;如果是,则表明当前的proof已经是最后一个值即该子树的根,转向步骤3-3-7;否则,进行步骤3-3-2;
步骤3-3-2:每轮迭代的时候都从multiproofs中获取当前层的proof计作clp,并在迭代过程中获取下一层被验证的初始数据nlv以及与其相对应的索引值nli,用vl来标记当前层被验证的数据,vi来标记与vl中值对应的有序索引集合;
步骤3-3-3:依次遍历当前层被验证的数据的有序索引集合vi,对于vi中的每一个索引值index,如果它是偶数并且不是vi中的最后一个值,则判断索引值为index+1的值是否在vi中;如果在,则直接利用这两个索引对应的值计算得到新的值并将其添加到nlv中,然后在遍历vi的过程中直接跳过这两个值;否则,从clp中移出第一个值并与该index对应的值一起生成新的值并添加进nlv中;如果该index是vi的最后一个值,则转向步骤3-3-5;如果该index是奇数,则转向步骤3-3-6;
步骤3-3-4:当index是vi的最后一个值时,首先判断clp是否为空,如果是,下一个值将仅由该index对应的值计算得到,计算得到的新的值将被放入nlv;如果不是,下一个值将由该index对应的值和clp中的最后一个值计算得到,计算得到的新的值将被放入nlv;
步骤3-3-5:当index是奇数时,则从clp中移出第一个值并与该index对应的值一起计算得到新的值,新得到的值将被放入nlv;
步骤3-3-6:当vi遍历结束后,将nlv赋值给vl并将nli赋值给vi以进行下一层的迭代计算,转向步骤3-3-2;
步骤3-3-7:vl中只有一个值,将它作为证明的根返回。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010781649.7A CN112015734B (zh) | 2020-08-06 | 2020-08-06 | 一种面向区块链的紧凑Merkle多值证明并行生成及验证方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010781649.7A CN112015734B (zh) | 2020-08-06 | 2020-08-06 | 一种面向区块链的紧凑Merkle多值证明并行生成及验证方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112015734A true CN112015734A (zh) | 2020-12-01 |
CN112015734B CN112015734B (zh) | 2021-05-07 |
Family
ID=73499376
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010781649.7A Active CN112015734B (zh) | 2020-08-06 | 2020-08-06 | 一种面向区块链的紧凑Merkle多值证明并行生成及验证方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112015734B (zh) |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101005459A (zh) * | 2007-01-18 | 2007-07-25 | 西安电子科技大学 | 基于密钥链的无线传感器访问控制方法 |
CN107015868A (zh) * | 2017-04-11 | 2017-08-04 | 南京大学 | 一种通用后缀树的分布式并行构建方法 |
CN107247773A (zh) * | 2017-06-07 | 2017-10-13 | 北京邮电大学 | 一种基于区块链的在分布式数据库中进行交易查询的方法 |
CN108322306A (zh) * | 2018-03-17 | 2018-07-24 | 北京工业大学 | 一种基于可信第三方的面向隐私保护的云平台可信日志审计方法 |
CN109993531A (zh) * | 2019-04-01 | 2019-07-09 | 辽宁大学 | 一种支持跨区块链交易的数据验证方法 |
CN110163007A (zh) * | 2019-04-23 | 2019-08-23 | 西安邮电大学 | 基于区块链的数据完整性验证方法、设备和存储介质 |
CN110189435A (zh) * | 2019-05-31 | 2019-08-30 | 西安电子科技大学 | 一种无人机日志存储和分析方法 |
CN110688377A (zh) * | 2019-08-30 | 2020-01-14 | 阿里巴巴集团控股有限公司 | 一种更新状态默克树的方法及装置 |
US20200076613A1 (en) * | 2018-09-04 | 2020-03-05 | Red Hat, Inc. | Signature verification using blockchain |
CN111080298A (zh) * | 2019-12-26 | 2020-04-28 | 电子科技大学 | 一种适用于能源区块链的区块生成与交易验证方法 |
CN111209591A (zh) * | 2019-12-31 | 2020-05-29 | 浙江工业大学 | 一种按时间排序的存储结构与快速查询的方法 |
US20200301944A1 (en) * | 2019-03-18 | 2020-09-24 | Electronics And Telecommunications Research Institute | Method and apparatus for storing off-chain data |
-
2020
- 2020-08-06 CN CN202010781649.7A patent/CN112015734B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101005459A (zh) * | 2007-01-18 | 2007-07-25 | 西安电子科技大学 | 基于密钥链的无线传感器访问控制方法 |
CN107015868A (zh) * | 2017-04-11 | 2017-08-04 | 南京大学 | 一种通用后缀树的分布式并行构建方法 |
CN107247773A (zh) * | 2017-06-07 | 2017-10-13 | 北京邮电大学 | 一种基于区块链的在分布式数据库中进行交易查询的方法 |
CN108322306A (zh) * | 2018-03-17 | 2018-07-24 | 北京工业大学 | 一种基于可信第三方的面向隐私保护的云平台可信日志审计方法 |
US20200076613A1 (en) * | 2018-09-04 | 2020-03-05 | Red Hat, Inc. | Signature verification using blockchain |
US20200301944A1 (en) * | 2019-03-18 | 2020-09-24 | Electronics And Telecommunications Research Institute | Method and apparatus for storing off-chain data |
CN109993531A (zh) * | 2019-04-01 | 2019-07-09 | 辽宁大学 | 一种支持跨区块链交易的数据验证方法 |
CN110163007A (zh) * | 2019-04-23 | 2019-08-23 | 西安邮电大学 | 基于区块链的数据完整性验证方法、设备和存储介质 |
CN110189435A (zh) * | 2019-05-31 | 2019-08-30 | 西安电子科技大学 | 一种无人机日志存储和分析方法 |
CN110688377A (zh) * | 2019-08-30 | 2020-01-14 | 阿里巴巴集团控股有限公司 | 一种更新状态默克树的方法及装置 |
CN111080298A (zh) * | 2019-12-26 | 2020-04-28 | 电子科技大学 | 一种适用于能源区块链的区块生成与交易验证方法 |
CN111209591A (zh) * | 2019-12-31 | 2020-05-29 | 浙江工业大学 | 一种按时间排序的存储结构与快速查询的方法 |
Non-Patent Citations (4)
Title |
---|
CHRISTOPHER EHMKE ET AL.: "Proof-of-Property - A Lightweight and Scalable Blockchain Protocol", 《2018 IEEE/ACM 1ST INTERNATIONAL WORKSHOP ON EMERGING TRENDS IN SOFTWARE ENGINEERING FOR BLOCKCHAIN》 * |
DONGDONG YUE ET AL.: "Blockchain Based Data Integrity Verification in P2P Cloud Storage", 《2018 IEEE 24TH INTERNATIONAL CONFERENCE ON PARALLEL AND DISTRIBUTED SYSTEMS》 * |
蔡磊 等: "面向区块链的高效物化视图维护和可信查询", 《软件学报》 * |
高艳芳 等: "基于区块链的无线体域网数据云存储完整性研究", 《东北大学学报(自然科学版)》 * |
Also Published As
Publication number | Publication date |
---|---|
CN112015734B (zh) | 2021-05-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108920720B (zh) | 基于深度哈希和gpu加速的大规模图像检索方法 | |
Zhang et al. | Scalable skyline computation using object-based space partitioning | |
US8971665B2 (en) | Hierarchical cluster determination based on subgraph density | |
CN107180079B (zh) | 基于卷积神经网络以及树与哈希结合索引的图像检索方法 | |
US8892566B2 (en) | Creating indexes for databases | |
CN110598061A (zh) | 一种多元图融合的异构信息网嵌入方法 | |
CN113158041B (zh) | 一种基于多属性特征的文章推荐方法 | |
CN111324577A (zh) | 一种Yml文件读写的方法及装置 | |
CN104142946A (zh) | 一种同款业务对象聚合、搜索的方法和系统 | |
CA3033201A1 (en) | Large scale social graph segmentation | |
Chu et al. | Variational cross-network embedding for anonymized user identity linkage | |
Elkin | A new compressed cover tree for k-nearest neighbour search and the stable-under-noise mergegram of a point cloud | |
CN112015734B (zh) | 一种面向区块链的紧凑Merkle多值证明并行生成及验证方法 | |
Ryu et al. | An Effective Clustering Method over CF $^+ $+ Tree Using Multiple Range Queries | |
CN111291085B (zh) | 层次化兴趣匹配方法、装置、计算机设备和存储介质 | |
Kokkala et al. | Classification of Graeco‐Latin Cubes | |
Blenn et al. | Crawling and detecting community structure in online social networks using local information | |
CN104376000A (zh) | 确定网页属性的方法及装置 | |
Jebabli et al. | Overlapping community detection versus ground-truth in amazon co-purchasing network | |
Kim et al. | Task-Equivariant Graph Few-shot Learning | |
Rachkovskij | Fast similarity search for graphs by edit distance | |
Bachrach et al. | Optimal coalition structures in graph games | |
Rawashdeh | Performance based comparison between several link prediction methods on various social networking datasets (Including Two New Methods) | |
CN110990017B (zh) | 一种基于可信树的特征存储与匹配方法 | |
CN110190979B (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 |