CN103441845A - 一种用于产生Merkle树签名方案认证路径的新方法 - Google Patents
一种用于产生Merkle树签名方案认证路径的新方法 Download PDFInfo
- Publication number
- CN103441845A CN103441845A CN2013103410018A CN201310341001A CN103441845A CN 103441845 A CN103441845 A CN 103441845A CN 2013103410018 A CN2013103410018 A CN 2013103410018A CN 201310341001 A CN201310341001 A CN 201310341001A CN 103441845 A CN103441845 A CN 103441845A
- Authority
- CN
- China
- Prior art keywords
- node
- stack
- stackauth
- curnode
- stacknode
- 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
Landscapes
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明涉及一种用于产生Merkle树签名方案认证路径的新方法,该方法利用完全二叉树的性质,以及双栈结构,获取Merkle签名树中叶子节点的认证路径。本发明的方法不仅适合于完全二叉树,也适合于其它的认证树,比如H-CRT(Huffman Certification Revocation Tree)树,该方法简单、明了、可行性好。
Description
技术领域
本发明涉及信息安全领域,特别是涉及一种用于产生Merkle树签名方案认证路径的新方法,应用于数字签名领域。
背景技术
数字签名是安全通信应用中不可缺少的部分。以往的数字签名机制,如DSA(Digital Signature Scheme)签名机制和RSA签名机制依赖于解决离散对数问题和大因子分解问题的困难性。目前,还没有解决这些困难问题的有效办法。但这并不意味着没有解决这些问题的算法存在,而且,在量子计算机存在的情况下已有相关算法能解决这些困难问题。因此,在DSA签名机制和RSA签名机制不再安全的情况下有必要提出新的签名机制。Merkle签名机制正是这样的签名方案。
Merkle签名机制是依赖于安全hash函数的一次签名机制。一次签名机制存在的主要问题是密钥的管理。因此,1979年Merkle提出了Merkle签名方案MSS(Merkle Signature Scheme),该方案中只需一个公钥就可实现多个消息的签名。怎样有效地求得各叶子节点的认证路径是Merkle签名方案中非常重要的一环。目前,认证路径节点值计算使得Merkle签名方案效率低下,并且认证路径节点值庞大的计算量也使Merkle签名方案很难应用于实际。
如图1所示,若有8个消息A8..A15需要签名,Merkle签名方案的思想是根据这8个消息的hash值作为叶子节点构建完全二叉树,内部节点是其左右孩子节点值级联后的hash值。根节点的值h1即为签名机制的公钥。
如图2所示,叶子节点NodeH对应消息m的签名为sig=(sig’||NodeI||NodeE||NodeC)。其中,sig’即为消息m的hash值,斜线节点定义为叶子节点NodeH的认证路径节点,它是叶子节点NodeH到根节点NodeA路径上各节点的兄弟节点。
怎样有效地求得各叶子节点的认证路径是Merkle签名方案中非常重要的一环。
发明内容
本发明的目的在于提出一种新的方法用于产生Merkle树签名方案的认证路径。本发明根据完全二叉树的性质,利用双栈结构,获取Merkle签名树中叶子节点的认证路径。
本发明的目的可以通过以下措施来达到:
一种用于产生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(),跳转到第二步。
当前访问的节点curNode是叶子节点时,stackAuth中存储的节点即为该叶子节点的认证路径。
当前访问的节点curNode是内部节点时,stackAuth中存储的节点即为该内部节点的认证路径。
本发明相比现有技术具有如下优点:
1.不仅适合于完全二叉树,也适合于其它的认证树,比如H-CRT(Huffman Certification Revocation Tree)树和Skew Merkle树。方法简单明了,很容易理解。
2.利用两个栈实现认证路径节点的输出,效率高,可行性好。
附图说明
图1.是Merkle签名方案中签名树的建立示意图。
图2.是签名树中叶子节点H及其认证路径示意图。
图3.是本发明stackNode栈的栈顶元素为内部节点,且flag标志为0时的变化示意图。
图4.是本发明stackNode栈的栈顶元素为内部节点,flag标志为1、右兄弟节点是stackAuth栈栈顶元素时的变化示意图。
图5.是本发明stackNode栈的栈顶元素为内部节点,flag标志为1、是stackAuth栈栈顶元素的右兄弟时的变化示意图。
图6.是本发明stackNode栈的栈顶元素为叶子节点,首先输出叶子节点的所有认证路径节点,叶子节点的右兄弟节点是stackAuth栈栈顶元素时的变化示意图。
图7.是本发明stackNode栈的栈顶元素为叶子节点,首先输出叶子节点的所有认证路径节点,叶子节点没有右兄弟时的变化示意图。
具体实施方式
以下结合附图对本发明进行详细说明,图中当前访问的叶子节点用菱形表示,入stackNode栈中的节点用点填充表示,入stackAuth栈中的节点用斜线填充表示。
本发明一种新的Merkle树签名方案认证路径产生方法实施步骤通过以下部署可以达到:
首先设置两个栈stackNode和stackAuth,初始化为空栈,分别用于存储签名树中的当前访问的节点及其认证路径节点。
设置一个标志位flag,用于记录栈中节点的左右孩子是否已经入栈。当标记为0时表示其孩子节点未曾入栈,当标记为1时表示其孩子节点已经入栈。
第一步,将Merkle签名树的根节点左右孩子节点分别入栈stackNode和stackAuth,并设进栈元素的flag标志为0。
第二步,判断栈stackNode是否为空?若不为空则进行第三步,若为空,则结束。
第三步,获取stackNode栈中的栈顶元素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()。
跳转到第二步。
本发明将结合附图作进一步详述:
图3,图4,图5,图6,图7显示了本发明工作的工作过程。
如图3所示,变化前(左侧)stackNode栈的栈顶元素为B,为内部节点,flag标志为0,则根据本发明提供的方法,节点B的左右孩子分别入栈stackNode和stackAuth,变化后如右则所示。
如图4所示,变化前(左侧)stackNode栈的栈顶元素为D,D为内部节点,flag标志为1。则根据本发明提供的方法,判断其与stackAuth栈栈顶节点E的关系,E为D节点的右兄弟,则D,E交换位置。变化后如右则所示。
如图5所示,变化前(左侧)stackNode栈的栈顶元素为E,E为内部节点,flag标志为1。则根据本发明提供的方法,判断其与stackAuth栈栈顶节点D的关系,E为D节点的右兄弟,则E,D分别出栈。变化后如右则所示。
如图6所示,变化前(左侧)stackNode栈的栈顶元素为H,H为叶子节点,则根据本发明提供的方法,H对应的认证路径节点即为stackAuth栈中的所有元素,即节点I、E、C。输出认证路径后,判断stackNode栈的栈顶元素为H与stackAuth栈的栈顶元素I的关系,I为H的右兄弟,则H,I交换位置。变化后如右则所示。
如图7所示,变化前(左侧)stackNode栈的栈顶元素为I,I为叶子节点,则根据本发明提供的方法,I对应的认证路径节点即为stackAuth栈中的所有元素,即节点H、E、C。输出认证路径后,判断stackNode栈的栈顶元素是否有右兄弟,I没有右兄弟,则两栈stackNode和stackAuth的栈顶元素出栈,变化后如右则所示。
应当理解,以上借助优选实施例对本发明的技术方案进行的详细说明是示意性的而非限制性的。本领域的普通技术人员在阅读本发明说明书的基础上可以对各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (3)
1.一种用于产生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(),跳转到第二步。
2.根据权利要求1所述的一种用于产生Merkle树签名方案认证路径的新方法,其特征在于:当前访问的节点curNode是叶子节点时,stackAuth中存储的节点即为该叶子节点的认证路径。
3.根据权利要求1所述的一种用于产生Merkle树签名方案认证路径的新方法,其特征在于:当前访问的节点curNode是内部节点时,stackAuth中存储的节点即为该内部节点的认证路径。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310341001.8A CN103441845B (zh) | 2013-08-07 | 2013-08-07 | 一种用于产生Merkle树签名方案认证路径的新方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310341001.8A CN103441845B (zh) | 2013-08-07 | 2013-08-07 | 一种用于产生Merkle树签名方案认证路径的新方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103441845A true CN103441845A (zh) | 2013-12-11 |
CN103441845B CN103441845B (zh) | 2016-05-25 |
Family
ID=49695514
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310341001.8A Expired - Fee Related CN103441845B (zh) | 2013-08-07 | 2013-08-07 | 一种用于产生Merkle树签名方案认证路径的新方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103441845B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107425960A (zh) * | 2017-08-04 | 2017-12-01 | 中国地质大学(武汉) | 一种检防端到端网络数据坏点的方法、设备及其存储设备 |
CN108173651A (zh) * | 2018-02-11 | 2018-06-15 | 众算(上海)数据科技有限公司 | 一种自有后量子密钥分配方法 |
CN108540586A (zh) * | 2018-03-06 | 2018-09-14 | 南京邮电大学 | 一种基于Merkle树的校园网IPv6地址划分方法 |
CN110189435A (zh) * | 2019-05-31 | 2019-08-30 | 西安电子科技大学 | 一种无人机日志存储和分析方法 |
WO2021003550A1 (en) * | 2019-07-11 | 2021-01-14 | ISARA Corporation | Managing nodes of a cryptographic hash tree in a hash-based digital signature scheme |
CN112989405A (zh) * | 2021-02-05 | 2021-06-18 | 武汉北大高科软件股份有限公司 | 一种数据存证的可信化存储方法、装置、设备和存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101741845A (zh) * | 2009-12-08 | 2010-06-16 | 中国科学院声学研究所 | 一种基于分片的内容认证方法 |
US20100212017A1 (en) * | 2009-02-18 | 2010-08-19 | International Business Machines Corporation | System and method for efficient trust preservation in data stores |
-
2013
- 2013-08-07 CN CN201310341001.8A patent/CN103441845B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100212017A1 (en) * | 2009-02-18 | 2010-08-19 | International Business Machines Corporation | System and method for efficient trust preservation in data stores |
CN101741845A (zh) * | 2009-12-08 | 2010-06-16 | 中国科学院声学研究所 | 一种基于分片的内容认证方法 |
Non-Patent Citations (1)
Title |
---|
何永忠等: "不可靠信道上抗主动攻击的组播认证", 《电子学报》, vol. 36, no. 7, 31 July 2008 (2008-07-31), pages 1249 - 1255 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107425960A (zh) * | 2017-08-04 | 2017-12-01 | 中国地质大学(武汉) | 一种检防端到端网络数据坏点的方法、设备及其存储设备 |
CN107425960B (zh) * | 2017-08-04 | 2020-04-10 | 中国地质大学(武汉) | 一种检防端到端网络数据坏点的方法、设备及其存储设备 |
CN108173651A (zh) * | 2018-02-11 | 2018-06-15 | 众算(上海)数据科技有限公司 | 一种自有后量子密钥分配方法 |
CN108540586A (zh) * | 2018-03-06 | 2018-09-14 | 南京邮电大学 | 一种基于Merkle树的校园网IPv6地址划分方法 |
CN108540586B (zh) * | 2018-03-06 | 2020-12-18 | 南京邮电大学 | 一种基于Merkle树的校园网IPv6地址划分方法 |
CN110189435A (zh) * | 2019-05-31 | 2019-08-30 | 西安电子科技大学 | 一种无人机日志存储和分析方法 |
WO2021003550A1 (en) * | 2019-07-11 | 2021-01-14 | ISARA Corporation | Managing nodes of a cryptographic hash tree in a hash-based digital signature scheme |
CN112989405A (zh) * | 2021-02-05 | 2021-06-18 | 武汉北大高科软件股份有限公司 | 一种数据存证的可信化存储方法、装置、设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN103441845B (zh) | 2016-05-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103441845A (zh) | 一种用于产生Merkle树签名方案认证路径的新方法 | |
Fernández-Caramés | From pre-quantum to post-quantum IoT security: A survey on quantum-resistant cryptosystems for the Internet of Things | |
US10116450B1 (en) | Merkle signature scheme using subtrees | |
CN109660555B (zh) | 基于代理重加密的内容安全分享方法和系统 | |
CN103049709B (zh) | 基于生成元扩展彩虹表的密码恢复系统及其恢复方法 | |
CN110800008A (zh) | 构建区块链世界状态默克尔帕特里夏字典树子树 | |
WO2019179538A3 (en) | Shared blockchain data storage | |
CN106612172A (zh) | 云存储中一种可验证还原数据真实性的数据篡改恢复算法 | |
CN108038184A (zh) | 一种基于区块链的数据存储方法及系统、一种智能区块链 | |
US10581616B1 (en) | Managing nodes of a cryptographic hash tree in a hash-based digital signature scheme | |
CN103905469A (zh) | 应用于智能电网无线传感网络和云计算的安全控制系统及方法 | |
CN113098691B (zh) | 数字签名方法、签名信息的验证方法、相关装置及电子设备 | |
CN105956492B (zh) | 一种文件存储加密方法及装置 | |
Chandran et al. | Information-theoretic local non-malleable codes and their applications | |
CN104168264A (zh) | 一种低成本、高安全性物理不可克隆函数 | |
CN103810247A (zh) | 基于分桶算法的灾备数据比对方法 | |
CN107103031A (zh) | 一种云计算中安全最近邻检索方法 | |
US20230229401A1 (en) | Computer language and code for application development and electronic and optical communication | |
Hsiao et al. | Utilizing blockchain technology to improve WSN security for sensor data transmission | |
CN110601857B (zh) | 一种基于局部-全局区块链协同的数据交互方法 | |
CN112364387A (zh) | 一种基于区块链网络的身份认证方法及装置、介质和设备 | |
Wang et al. | Dual time synchronisation method for wireless sensor networks | |
CN105790928B (zh) | 一种基于数字摘要的文件分割方法 | |
Zhang et al. | Concurrent regenerating codes | |
CN111932265A (zh) | 一种基于双层链式架构区块链的区块交易转化方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160525 Termination date: 20160807 |