【基于哈希的密码体系】Lamport签名方案(1979)

admin 2024年10月10日10:07:59评论45 views字数 1892阅读6分18秒阅读模式

【基于哈希的密码体系】Lamport签名方案(1979)

【基于哈希的密码体系】Lamport签名方案(1979)

由于NIST最后发布的三个抗量子加密体系,我之前讲过两个了,其中那两个都是基于格来设计的协议,还剩下一个呢,是基于无状态哈希的方案,要想理解这个方案呢,那么我们就先来看一下,他的一个演化过程,首先,我们先来介绍有状态的哈希函数的方案,先来理解这个的原理,然后再来看SLH-DSA[1]的具体过程。

那么,提到基于哈希函数的密码体系,不得不提的那肯定是第一个算法,也就是Lamport的签名方案[2],因此,本篇文章呢,我们先来看一下,这个方案的具体过程。

前置知识

首先,我们来看一下,什么是One Way Function。

单项函数(One-way Function)

单项函数是一种对于每个输入都容易计算的函数,但在给定一个随机输入的输出时,很难反向求解出输入。

然后,我们发现,密码学安全的哈希函数,实际上是满足这个条件的,也就是,我们计算哈希函数的值是非常容易的,但是,如果我们给定一个和哈希函数输出等长的一个随机的输出,来求解,输入,这显然是比较困难的,举一个例子,比如,

a60636d79a54d4b844a09c3af280a5b0

给定这么一个随机字符串,我们想要求解,满足输出结果是它的md5的输入,有兴趣的读者可以试试,能不能搞出来,或者说,能不能判定,这个值是否存在都不简单,因为这个是我随机生成的,因此,我也不知道,存不存在。

当然,我这个描述呢,实际上是比较通俗的,稍微正式一点的定义如下,

一个函数是一个「One-way function」,满足一下条件:

  • 易于计算: 存在多项式算法A,对于任意的输入x,有
  • 难以反向计算:对于所有多项式的随机算法B,存在一个可以忽略的函数,使得

Lamport签名方案

好了,理解了,上面的单项函数的知识,接下来,我们就可以来看一下具体的签名方案了,我们假设给定消息m签名,哈希函数H,可以换成任意的安全的哈希函数,假设哈希函数的输出长度为n。

密钥生成

这里,我们需要生成私钥和公钥,首先,来看一下私钥的生成过程。

随机选择2n个整数,这里,整数可以取的稍微大一些,因为这些整数只能用一次,至于为什么,我们看签名过程就理解了。

将生成的2n个整数分成两组,分别记作和,这里,这些整数,构成私钥。

而对于公钥,我们需要计算以及,其中, 由于哈希函数的特性,这里,我们通过计算得到S的概率在计算上是可忽略的,不理解的,可以看下上文当中的那个例子。

签名算法

计算消息的哈希函数,然后,按照如下的关系来生成签名。

  • 如果的第位是0,那么签名值的第位是
  • 否则,签名值的第位是

从这里,我们可以看到,这个实际上泄露了私钥的一半,因此,如果多次使用重复的密钥的话,显然是不安全的,并且,也不能抵抗选择明文攻击。因为,我们虽然说是,生成完整的哈希函数是的输入是困难的,但是,控制指定的比特,还是相对来说容易的。

这里,还是,给大家来看一个例子吧,比如,我们想要第一位是0,那么,我们可以很轻松的构造一个输入,满足这个条件。

【基于哈希的密码体系】Lamport签名方案(1979)

如果,我们想要构造,第一位是1,那么,只需要,稍微改动一下,这就可以实现了。

【基于哈希的密码体系】Lamport签名方案(1979)

所以,如果私钥,重复使用的话,我们将可以很轻松的构造一系列输入,来拿到完整的私钥。

验签过程

验签过程,也比较好理解,签名者计算H(m), 然后,使用后H(m)的各位数据的取值来选择对应的公钥,因此,如果第k位是1,则选择,然后将签名中的n个哈希值和公钥选择的n个哈希值进行比较,如果全匹配,则签名验证通过。

总结

本文,简单描述了,Lamport所设计的基于哈希函数的签名方案,当然,这个签名是存在一些问题的,比如,签名的公钥和私钥都非常大,因为我们要计算2n个哈希值,并且,我们的私钥是不能重复使用的,因此,追踪那些私钥被使用过了,也是一个非常困难的问题,至于如何来改进这些问题呢,我们后面再聊,好了,本篇文章,到这里就结束了,感谢读者的观看,因为本人的水平有限,因此,难免会出现哪里理解的不到位的地方,也欢迎读者和我交流。

参考资料

  • https://csrc.nist.gov/pubs/fips/205/final
  • https://www.microsoft.com/en-us/research/uploads/prod/2016/12/Constructing-Digital-Signatures-from-a-One-Way-Function.pdf
  • https://en.wikipedia.org/wiki/One-way_function

原文始发于微信公众号(Coder小Q):【基于哈希的密码体系】Lamport签名方案(1979)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月10日10:07:59
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【基于哈希的密码体系】Lamport签名方案(1979)https://cn-sec.com/archives/3247602.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息