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

技术编号:9436172 阅读:218 留言:0更新日期:2013-12-12 01:38
本发明专利技术涉及一种用于产生Merkle树签名方案认证路径的新方法,该方法利用完全二叉树的性质,以及双栈结构,获取Merkle签名树中叶子节点的认证路径。本发明专利技术的方法不仅适合于完全二叉树,也适合于其它的认证树,比如H-CRT(Huffman?Certification?Revocation?Tree)树,该方法简单、明了、可行性好。

【技术实现步骤摘要】
【专利摘要】本专利技术涉及,该方法利用完全二叉树的性质,以及双栈结构,获取Merkle签名树中叶子节点的认证路径。本专利技术的方法不仅适合于完全二叉树,也适合于其它的认证树,比如H-CRT(Huffman?Certification?Revocation?Tree)树,该方法简单、明了、可行性好。【专利说明】—种用于产生Merkle树签名方案认证路径的新方法
本专利技术涉及信息安全领域,特别是涉及,应用于数字签名领域。
技术介绍
数字签名是安全通信应用中不可缺少的部分。以往的数字签名机制,如DSA(Digital Signature Scheme)签名机制和RSA签名机制依赖于解决离散对数问题和大因子分解问题的困难性。目前,还没有解决这些困难问题的有效办法。但这并不意味着没有解决这些问题的算法存在,而且,在量子计算机存在的情况下已有相关算法能解决这些困难问题。因此,在DSA签名机制和RSA签名机制不再安全的情况下有必要提出新的签名机制。Merkle签名机制正是这样的签名方案。Merkle签名机制是依赖于安全hash函数的一次签名机制。一次签名机制存在的主要问题是密钥的管理。因此,1979年Merkle提出了 Merkle签名方案MSS(MerkleSignature Scheme),该方案中只需一个公钥就可实现多个消息的签名。怎样有效地求得各叶子节点的认证路径是Merkle签名方案中非常重要的一环。目前,认证路径节点值计算使得Merkle签名方案效率低下,并且认证路径节点值庞大的计算量也使Merkle签名方案很难应用于实际。如图1所示,若有8个消息A8..A15需要签名,Merkle签名方案的思想是根据这8个消息的hash值作为叶子节点构建完全二叉树,内部节点是其左右孩子节点值级联后的hash值。根节点的值Ii1即为签名机制的公钥。如图2所示,叶子节点Node11对应消息m的签名为sig=(sig’ I Node1 NodeE |Nodec)。其中,sig’即为消息m的hash值,斜线节点定义为叶子节点Nodea的认证路径节点,它是叶子节点Nodea到根节点NodeA路径上各节点的兄弟节点。怎样有效地求得各叶子节点的认证路径是Merkle签名方案中非常重要的一环。
技术实现思路
本专利技术的目的在于提出一种新的方法用于产生Merkle树签名方案的认证路径。本专利技术根据完全二叉树的性质,利用双栈结构,获取Merkle签名树中叶子节点的认证路径。本专利技术的目的可以通过以下措施来达到:,包括以下步骤:首先设置两个栈,分别为stackNode和stackAuth,并将所述两栈初始化为空栈,分别用于存储签名树中的当前访问的节点及其认证路径节点,并将栈中的当前访问节点和认证路径节点分别设置一个标志位flag,用于记录栈中节点的左右孩子是否已经入栈。当标记为O时表示其孩子节点未曾入栈,当标记为I时表示其孩子节点已经入栈,执行如下的步骤: 第一步,将Merkle签名树的根节点左右孩子节点分别入栈stackNode和stackAuth,并设进栈元素的flag标志为O ;第二步,判断栈stackNode是否为空?若不为空则进行第三步,若为空,则结束;第三步,获取stackNode栈中的栈顶元素curNode,判断curNode是否为内部节点?若是,则进行第四步,否则进行第五步;第四步,判断curNode节点的flag标志?(I)若curNode节点的flag标志为0,则其对应的左右孩子分别进栈,并设置curNode节点的flag标志为I,跳转到第二步;(2)若curNode节点的flag标志为I,则判断curNode节点与另一栈stackAuth的栈顶节点即stackAuth.Top O的关系?(a)若 curNode 节点的右兄弟为 stackAuth.Top (),则两栈 stackNode 和stackAuth 的栈顶兀素交换位置,即 stackNode.Top O〈一>stackAuth.Top O ;(b)若curNode节点是stackAuth.TopO的右兄弟,则两栈栈顶元素出栈,即stackNode.pop O,并且 stackAuth.pop O,跳转到第二步;第五步,输出stackAuth栈中的全部节点,这些节点即为curNode节点的认证路径上的所有节点,并判断curNode节点与stackAuth栈栈顶元素的关系?(I)若stackAuth栈栈顶元素即stackAuth.Top O是curNode节点的右兄弟,则两栈 stackNode 和 stackAuth 的栈顶兀素交换位置,即 stackNode.Top () <—>stackAuth.Top O ;(2)若curNode节点的右兄弟为为空,则两栈stackNode和stackAuth的栈顶元素出栈,即 stackNode.pop O , stackAuth.pop (),跳转到第二步。当前访问的节点curNode是叶子节点时,stackAuth中存储的节点即为该叶子节点的认证路径。当前访问的节点curNode是内部节点时,stackAuth中存储的节点即为该内部节点的认证路径。本专利技术相比现有技术具有如下优点:1.不仅适合于完全二叉树,也适合于其它的认证树,比如H-CRT (HuffmanCertification Revocation Tree)树和 Skew Merkle 树。方法简单明了,很容易理解。2.利用两个栈实现认证路径节点的输出,效率高,可行性好。【专利附图】【附图说明】图1.是Merkle签名方案中签名树的建立示意图。图2.是签名树中叶子节点H及其认证路径示意图。图3.是本专利技术stackNode栈的栈顶元素为内部节点,且flag标志为O时的变化示意图。图4.是本专利技术stackNode栈的栈顶元素为内部节点,flag标志为1、右兄弟节点是stackAuth栈栈顶元素时的变化示意图。图5.是本专利技术stackNode栈的栈顶元素为内部节点,flag标志为1、是stackAuth栈栈顶元素的右兄弟时的变化示意图。图6.是本专利技术stackNode栈的栈顶元素为叶子节点,首先输出叶子节点的所有认证路径节点,叶子节点的右兄弟节点是stackAuth栈栈顶元素时的变化示意图。图7.是本专利技术stackNode栈的栈顶元素为叶子节点,首先输出叶子节点的所有认证路径节点,叶子节点没有右兄弟时的变化示意图。【具体实施方式】以下结合附图对本专利技术进行详细说明,图中当前访问的叶子节点用菱形表示,入stackNode栈中的节点用点填充表示,入stackAuth栈中的节点用斜线填充表示。本专利技术一种新的Merkle树签名方案认证路径产生方法实施步骤通过以下部署可以达到:首先设置两个栈stackNode和stackAuth,初始化为空栈,分别用于存储签名树中的当前访问的节点及其认证路径节点。设置一个标志位flag,用于记录栈中节点的左右孩子是否已经入栈。当标记为O时表示其孩子节点未曾入栈,当标记为I时表示其孩子节点已经入栈。第一步,将Merkle签名树的根节点左右孩子节点分别入栈stackNode和stackAuth,并设进栈元素的flag标本文档来自技高网
...

【技术保护点】
一种用于产生Merkle树签名方案认证路径的新方法,其特征在于:包括以下步骤:首先设置两个栈,分别为stackNode和stackAuth,并将所述两栈初始化为空栈,分别用于存储签名树中的当前访问的节点及其认证路径节点,并将栈中的当前访问节点和认证路径节点分别设置一个标志位flag,用于记录栈中节点的左右孩子是否已经入栈,当标记为0时表示其孩子节点未曾入栈,当标记为1时表示其孩子节点已经入栈,执行如下的步骤:第一步,将Merkle签名树的根节点左右孩子节点分别入栈stackNode和stackAuth,并设进栈元素的flag标志为0;第二步,判断栈stackNode是否为空?若不为空则进行第三步,若为空,则结束;第三步,获取stackNode栈中的栈顶元素curNode,判断curNode是否为内部节点?若是,则进行第四步,否则进行第五步;第四步,判断curNode节点的flag标志?(1)若curNode节点的flag标志为0,则其对应的左右孩子分别进栈,并设置curNode节点的flag标志为1,跳转到第二步;(2)若curNode节点的flag标志为1,则判断curNode节点与另一栈stackAuth的栈顶节点即stackAuth.Top()的关系?(a)若curNode节点的右兄弟为stackAuth.Top(),则两栈stackNode和stackAuth的栈顶元素交换位置,即stackNode.Top()stackAuth.Top();(b)若curNode节点是stackAuth.Top()的右兄弟,则两栈栈顶元素出栈,即stackNode.pop(),并且stackAuth.pop(),跳转到第二步;第五步,输出stackAuth栈中的全部节点,这些节点即为curNode节点的认证路径上的所有节点,并判断curNode节点与stackAuth栈栈顶元素的关系?(1)若stackAuth栈栈顶元素即stackAuth.Top()是curNode节点的右兄弟,则 两栈stackNode和stackAuth的栈顶元素交换位置,即stackNode.Top()stackAuth.Top();(2)若curNode节点的右兄弟为为空,则两栈stackNode和stackAuth的栈顶元素出栈,即stackNode.pop(),stackAuth.pop(),跳转到第二步。...

【技术特征摘要】

【专利技术属性】
技术研发人员:彭双和韩臻刘吉强
申请(专利权)人:北京交通大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1