一种用于产生Merkle树签名方案认证路径的新方法

文档序号:8003707阅读:358来源:国知局
一种用于产生Merkle树签名方案认证路径的新方法
【专利摘要】本发明涉及一种用于产生Merkle树签名方案认证路径的新方法,该方法利用完全二叉树的性质,以及双栈结构,获取Merkle签名树中叶子节点的认证路径。本发明的方法不仅适合于完全二叉树,也适合于其它的认证树,比如H-CRT(Huffman?Certification?Revocation?Tree)树,该方法简单、明了、可行性好。
【专利说明】—种用于产生Merkle树签名方案认证路径的新方法
【技术领域】
[0001]本发明涉及信息安全领域,特别是涉及一种用于产生Merkle树签名方案认证路径的新方法,应用于数字签名领域。
【背景技术】
[0002]数字签名是安全通信应用中不可缺少的部分。以往的数字签名机制,如DSA(Digital Signature Scheme)签名机制和RSA签名机制依赖于解决离散对数问题和大因子分解问题的困难性。目前,还没有解决这些困难问题的有效办法。但这并不意味着没有解决这些问题的算法存在,而且,在量子计算机存在的情况下已有相关算法能解决这些困难问题。因此,在DSA签名机制和RSA签名机制不再安全的情况下有必要提出新的签名机制。Merkle签名机制正是这样的签名方案。
[0003]Merkle签名机制是依赖于安全hash函数的一次签名机制。一次签名机制存在的主要问题是密钥的管理。因此,1979年Merkle提出了 Merkle签名方案MSS(MerkleSignature Scheme),该方案中只需一个公钥就可实现多个消息的签名。怎样有效地求得各叶子节点的认证路径是Merkle签名方案中非常重要的一环。目前,认证路径节点值计算使得Merkle签名方案效率低下,并且认证路径节点值庞大的计算量也使Merkle签名方案很难应用于实际。
[0004]如图1所示,若有8个消息A8..A15需要签名,Merkle签名方案的思想是根据这8个消息的hash值作为叶子节点构建完全二叉树,内部节点是其左右孩子节点值级联后的hash值。根节点的值Ii1即为签名机制的公钥。
[0005]如图2所示,叶子节点Node11对应消息m的签名为sig=(sig’ I Node1 NodeE |Nodec)。其中,sig’即为消息m的hash值,斜线节点定义为叶子节点Nodea的认证路径节点,它是叶子节点Nodea到根节点NodeA路径上各节点的兄弟节点。
[0006]怎样有效地求得各叶子节点的认证路径是Merkle签名方案中非常重要的一环。
【发明内容】

[0007]本发明的目的在于提出一种新的方法用于产生Merkle树签名方案的认证路径。本发明根据完全二叉树的性质,利用双栈结构,获取Merkle签名树中叶子节点的认证路径。
[0008]本发明的目的可以通过以下措施来达到:
[0009]一种用于产生Merkle树签名方案认证路径的新方法,包括以下步骤:
[0010]首先设置两个栈,分别为stackNode和stackAuth,并将所述两栈初始化为空栈,分别用于存储签名树中的当前访问的节点及其认证路径节点,并将栈中的当前访问节点和认证路径节点分别设置一个标志位flag,用于记录栈中节点的左右孩子是否已经入栈。当标记为O时表示其孩子节点未曾入栈,当标记为I时表示其孩子节点已经入栈,执行如下的步骤:
[0011 ] 第一步,将Merkle签名树的根节点左右孩子节点分别入栈stackNode和stackAuth,并设进栈元素的flag标志为O ;
[0012]第二步,判断栈stackNode是否为空?若不为空则进行第三步,若为空,则结束;
[0013]第三步,获取stackNode栈中的栈顶元素curNode,判断curNode是否为内部节点?若是,则进行第四步,否则进行第五步;
[0014]第四步,判断curNode节点的flag标志?
[0015](I)若curNode节点的flag标志为0,则其对应的左右孩子分别进栈,并设置curNode节点的flag标志为I,跳转到第二步;
[0016](2)若curNode节点的flag标志为I,则判断curNode节点与另一栈stackAuth的栈顶节点即stackAuth.Top O的关系?
[0017](a)若 curNode 节点的右兄弟为 stackAuth.Top (),则两栈 stackNode 和stackAuth 的栈顶兀素交换位置,即 stackNode.Top O〈一>stackAuth.Top O ;
[0018](b)若curNode节点是stackAuth.TopO的右兄弟,则两栈栈顶元素出栈,即stackNode.pop O,并且 stackAuth.pop O,跳转到第二步;
[0019]第五步,输出stackAuth栈中的全部节点,这些节点即为curNode节点的认证路径上的所有节点,并判断curNode节点与stackAuth栈栈顶元素的关系?
[0020](I)若stackAuth栈栈顶元素即stackAuth.Top O是curNode节点的右兄弟,则两栈 stackNode 和 stackAuth 的栈顶兀素交换位置,即 stackNode.Top () <—>stackAuth.Top O ;
[0021](2)若curNode节点的右兄弟为为空,则两栈stackNode和stackAuth的栈顶元素出栈,即 stackNode.pop O , stackAuth.pop (),跳转到第二步。
[0022]当前访问的节点curNode是叶子节点时,stackAuth中存储的节点即为该叶子节点的认证路径。
[0023]当前访问的节点curNode是内部节点时,stackAuth中存储的节点即为该内部节点的认证路径。
[0024]本发明相比现有技术具有如下优点:
[0025]1.不仅适合于完全二叉树,也适合于其它的认证树,比如H-CRT (HuffmanCertification Revocation Tree)树和 Skew Merkle 树。方法简单明了,很容易理解。
[0026]2.利用两个栈实现认证路径节点的输出,效率高,可行性好。
【专利附图】

【附图说明】
[0027]图1.是Merkle签名方案中签名树的建立示意图。
[0028]图2.是签名树中叶子节点H及其认证路径示意图。
[0029]图3.是本发明stackNode栈的栈顶元素为内部节点,且flag标志为O时的变化示意图。
[0030]图4.是本发明stackNode栈的栈顶元素为内部节点,flag标志为1、右兄弟节点是stackAuth栈栈顶元素时的变化示意图。
[0031]图5.是本发明stackNode栈的栈顶元素为内部节点,flag标志为1、是stackAuth栈栈顶元素的右兄弟时的变化示意图。
[0032]图6.是本发明stackNode栈的栈顶元素为叶子节点,首先输出叶子节点的所有认证路径节点,叶子节点的右兄弟节点是stackAuth栈栈顶元素时的变化示意图。
[0033]图7.是本发明stackNode栈的栈顶元素为叶子节点,首先输出叶子节点的所有认证路径节点,叶子节点没有右兄弟时的变化示意图。
【具体实施方式】
[0034]以下结合附图对本发明进行详细说明,图中当前访问的叶子节点用菱形表示,入stackNode栈中的节点用点填充表示,入stackAuth栈中的节点用斜线填充表示。
[0035]本发明一种新的Merkle树签名方案认证路径产生方法实施步骤通过以下部署可以达到:
[0036]首先设置两个栈stackNode和stackAuth,初始化为空栈,分别用于存储签名树中的当前访问的节点及其认证路径节点。
[0037]设置一个标志位flag,用于记录栈中节点的左右孩子是否已经入栈。当标记为O时表示其孩子节点未曾入栈,当标记为I时表示其孩子节点已经入栈。
[0038]第一步,将Merkle签名树的根节点左右孩子节点分别入栈stackNode和stackAuth,并设进栈元素的flag标志为O。
[0039]第二步,判断栈stackNode是否为空?若不为空则进行第三步,若为空,则结束。
[0040]第三步,获取stackNode栈中的栈顶元素curNode,判断其是否为内部节点?若是,则进行第四步,否则进行第五步。
[0041]第四步,判断curNode节点的flag标志?
[0042](I)若curNode节点的flag标志为0,则其对应的左右孩子分别进栈。并设置curNode节点的flag标志为I。跳转到第二步。
[0043](2)若curNode节点的flag标志为I,则判断curNode节点与另一栈stackAuth的栈顶节点即stackAuth.Top O的关系?
[0044](a)若 curNode 节点的右兄弟为 stackAuth.Top O,则两栈 stackNode 和stackAuth 的栈顶兀素交换位置,即 stackNode.Top O〈一>stackAuth.Top O。
[0045](b)若curNode节点是stackAuth.Top O的右兄弟,则两栈栈顶元素出栈,即stackNode.pop O,并且 stackAuth.pop O °
[0046]跳转到第二步。
[0047]第五步,输出stackAuth栈中的全部节点,这些节点即为curNode节点的认证路径上的所有节点。并判断curNode节点与stackAuth栈栈顶元素的关系?
[0048](I)若stackAuth栈栈顶元素即stackAuth.Top O是curNode节点的右兄弟,贝丨J两栈 stackNode 和 stackAuth 的栈顶兀素交换位置,即 stackNode.Top () <—>stackAuth.Top O。
[0049](2)若curNode节点的右兄弟为为空,则两栈stackNode和stackAuth的栈顶元素出找,即 stackNode.pop O , stackAuth.pop ()。
[0050]跳转到第二步。
[0051]本发明将结合附图作进一步详述:[0052]图3,图4,图5,图6,图7显示了本发明工作的工作过程。
[0053]如图3所示,变化前(左侧)stackNode栈的栈顶元素为B,为内部节点,flag标志为O,则根据本发明提供的方法,节点B的左右孩子分别入栈stackNode和stackAuth,变化后如右则所示。
[0054]如图4所示,变化前(左侧)stackNode栈的栈顶元素为D,D为内部节点,flag标志为I。则根据本发明提供的方法,判断其与stackAuth栈栈顶节点E的关系,E为D节点的右兄弟,则D,E交换位置。变化后如右则所示。
[0055]如图5所示,变化前(左侧)stackNode栈的栈顶元素为E,E为内部节点,flag标志为I。则根据本发明提供的方法,判断其与stackAuth栈栈顶节点D的关系,E为D节点的右兄弟,则E,D分别出栈。变化后如右则所示。
[0056]如图6所示,变化前(左侧)stackNode栈的栈顶元素为H,H为叶子节点,则根据本发明提供的方法,H对应的认证路径节点即为stackAuth栈中的所有元素,即节点1、E、C。输出认证路径后,判断stackNode栈的栈顶元素为H与stackAuth栈的栈顶元素I的关系,I为H的右兄弟,则H,I交换位置。变化后如右则所示。
[0057]如图7所示,变化前(左侧)stackNode栈的栈顶元素为I,I为叶子节点,则根据本发明提供的方法,I对应的认证路径节点即为stackAuth栈中的所有元素,即节点H、E、C。输出认证路径后,判断stackNode栈的栈顶元素是否有右兄弟,I没有右兄弟,则两栈stackNode和stackAuth的栈顶元素出栈,变化后如右则所示。
[0058]应当理解,以上借助优选实施例对本发明的技术方案进行的详细说明是示意性的而非限制性的。本领域的普通技术人员在阅读本发明说明书的基础上可以对各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
【权利要求】
1.一种用于产生Merkle树签名方案认证路径的新方法,其特征在于:包括以下步骤: 首先设置两个栈,分别为StackNode和stackAuth,并将所述两栈初始化为空栈,分别用于存储签名树中的当前访问的节点及其认证路径节点,并将栈中的当前访问节点和认证路径节点分别设置一个标志位flag,用于记录栈中节点的左右孩子是否已经入栈,当标记为O时表示其孩子节点未曾入栈,当标记为I时表示其孩子节点已经入栈,执行如下的步骤: 第一步,将Merkle签名树的根节点左右孩子节点分别入栈StackNode和stackAuth,并设进栈元素的flag标志为O ; 第二步,判断栈StackNode是否为空?若不为空则进行第三步,若为空,则结束; 第三步,获取StackNode栈中的栈顶元素curNode,判断curNode是否为内部节点?若是,则进行第四步,否则进行第五步; 第四步,判断curNode节点的flag标志? (1)若curNode节点的flag标志为0,则其对应的左右孩子分别进栈,并设置curNode节点的flag标志为I,跳转到第二步; (2)若curNode节点的flag标志为I,则判断curNode节点与另一栈stackAuth的栈顶节点即stackAuth.Top O的关系? (a)若curNode 节点的右兄弟为 stackAuth.Top O ,则两栈 stackNode 和 stackAuth 的栈顶兀素交换位置,即 stackNode.Top O <—>stackAuth.Top O ; (b)若curNode节点是stackAuth.Top O的右兄弟,则两栈栈顶元素出栈,即stackNode.pop O,并且 stackAuth.pop O,跳转到第二步; 第五步,输出stackAuth栈中的全部节点,这些节点即为curNode节点的认证路径上的所有节点,并判断curNode节点与stackAuth栈栈顶元素的关系? (1)若stackAuth栈栈顶元素即stackAuth.TopO是curNode节点的右兄弟,则两栈 stackNode 和 stackAuth 的栈顶兀素交换位置,即 stackNode.Top () <—>stackAuth.Top O ; (2)若curNode节点的右兄弟为为空,则两栈stackNode和stackAuth的栈顶元素出栈,即 stackNode.pop O , stackAuth.pop (),跳转到第二步。
2.根据权利要求1所述的一种用于产生Merkle树签名方案认证路径的新方法,其特征在于:当前访问的节点curNode是叶子节点时,stackAuth中存储的节点即为该叶子节点的认证路径。
3.根据权利要求1所述的一种用于产生Merkle树签名方案认证路径的新方法,其特征在于:当前访问的节点curNode是内部节点时,stackAuth中存储的节点即为该内部节点的认证路径。
【文档编号】H04L9/32GK103441845SQ201310341001
【公开日】2013年12月11日 申请日期:2013年8月7日 优先权日:2013年8月7日
【发明者】彭双和, 韩臻, 刘吉强 申请人:北京交通大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1