【密码学】数字签名的华丽新章:RSA-PSS的崛起

admin 2024年10月28日13:31:01评论25 views字数 2212阅读7分22秒阅读模式

【密码学】数字签名的华丽新章:RSA-PSS的崛起

【密码学】数字签名的华丽新章:RSA-PSS的崛起

之前,我们讲解过OAEP,然后呢,我发现,PSS还没有水(啊不是,写)文章,那么本篇文章呢,我们就来聊一聊PSS, 也就是RSA当中另一种签名的方案 。

为了能更好的多水一点字数呢,我们首先,来回顾一下,有关于数字签名和RSA的签名的相关知识

背景介绍

数字签名

数字签名是一种基于数学算法的电子验证技术,用于确认数字信息的来源和完整性。它类似于传统手写签名或盖章,但在数字环境中提供了更高的安全性和可靠性。数字签名的核心功能是通过使用一种公钥加密算法,确保信息在传输过程中没有被篡改,并验证信息的创建者身份。

具体来说,当一个消息或文件需要签名时,发送者会利用其私钥对信息进行加密,生成一段独特的签名。接收者随后可以使用发送者的公钥对签名进行验证,以确认消息确实来源于宣称的发送者,并且内容未被篡改。

对于数字签名来说,我们一般分为以下几个步骤,分别是

  1. 摘要生成: 首先,对于需要签名的消息,生成一个摘要值,因为一般来说,我们可以用摘要值来代替我们原始的消息,具体原因可以参考下有关于摘要的知识
  2. 生成签名: 通过签名者的私钥,对于摘要进行签名,从而生成具体的数字签名
  3. 验签过程: 签名验证者,通过公钥进行验签,最终判定签名的合法性。

RSA签名

RSA签名是一种使用RSA公钥加密算法实现的数字签名机制,用于验证消息的真实性和完整性。它利用RSA算法的特性,通过私钥对消息的哈希值进行加密生成签名,接收方使用公钥进行验证。

密钥生成

这里,和普通的RSA加密的密钥一样,也就是公钥是e, 然后,私钥是d, 这个相信各位读者,应该并不陌生。

签名算法

签名的消息通过哈希函数(如SHA-256)处理,生成一个固定长度的哈希值,采用私钥d进行签名,最终可以得到签名的结果

其中H是一个哈希函数,m是原始的消息。

签名验证

对于接收到的消息,重新生成哈希值,并且用公钥计算验签后的消息,也就是

然后,判断是否相等,来判断签名是否是合法的,这里,其实会对于消息进行一个PKCS#1的Padding,对于具体的Padding的方法呢,可以参考我之前写过的文章,或者说,其他相关的资料。

PSS(Probabilistic signature scheme)签名方案

PSS[2]是一种由Mihir Bellare和Phillip Rogaway设计的加密签名方案。RSA-PSS是他们工作的一个改进版,并作为PKCS#1 v2.1的一部分标准化。一般来说,RSA-PSS应作为RSA-PKCS#1 v1.5的替代方案使用。接下来,我们来看一下,这个签名算法的过程

掩码生成函数

这里,实际上,我们在讲解OAEP的过程当中,已经提到过这个函数了,我们来回顾一下这个函数的过程。

Mask Generation Function (MGF) 是一种加密原语,类似于加密哈希函数,但与哈希函数输出固定大小不同,MGF 支持可变长度的输出。从这个角度来看,MGF 可以被视为可扩展输出函数(XOF):它可以接受任意长度的输入并处理它以产生任意长度的输出。掩码生成函数是完全确定性的:对于任何给定的输入和任何期望的输出长度,输出总是相同的。

参数

  • 哈希函数 输出长度为hLen

输入

  • X 被遮蔽的字符串
  • maskLen 掩蔽的长度,单位为字节

输出

  • mask 长度为maskLen的字符串

过程

  1. 初始化变量
    1. T = 空字符串
  2. 计算中间值
    1. T = T || Hash(X || counter)
  3. 输出结果
    1. T的前maskLen字节

签名过程

【密码学】数字签名的华丽新章:RSA-PSS的崛起

然后,我们来看一下,具体签名所用到的一些参数

  • EM长度: 表示最终,我们需要签名生成的EM的长度,这里需要比n要小。
  • padding1: 64个0位的串
  • padding2: 长度为emLen - sLen - hLen  - 2字节的0串,后面拼接01
  • salt: 伪随机数
  • bc: 这里,就是16进制的0xBC

然后,我们根据上图,来看一下,具体的签名的过程。

  1. 生成消息的哈希值
  2. 生成一个随机的salt串,得到
  3. 生成的哈希值
  4. 构成数据分组
  5. 利用H生成掩码
  6. 计算
  7. 将MaskedDB字节左侧位填充为0

然后,我们采用RSA的算法,利用私钥d计算

验签过程

对于验签过程,也比较简单,我们简单来描述下,这里,我们采用RSA的公钥e,进行运算,拿到EM,也就是

  1. 生成M的哈希值
  2. 判断,EM最后,是不是0xBC,如果不是,验签失败
  3. 分离MaskedDB以及H,因为我们知道哈希算法,确定了这两个值的具体大小
  4. 通过H,计算
  5. 然后,解密获取到
  6. 拆分得到salt,然后计算
  7. 生成的哈希值
  8. 然后,验证是否和H相等,如果相等,则验签通过,否则验签不通过。

总结

本篇文章呢,我们介绍了一个有关于RSA的一个新的签名方案PSS, 这个方案呢,采用了随机化的过程,比起之前的确定的签名算法,有更加优越的安全性,这也说明了,就算是签名算法,他的密文,也可能是不一样的,哈哈,好了,快乐的时光过得特别快,又到了说再见的时候了,我们下次再见。

参考资料

  1. https://en.wikipedia.org/wiki/Probabilistic_signature_scheme
  2. https://web.archive.org/web/20170714022144/http://grouper.ieee.org/groups/1363/P1363a/contributions/pss-submission.pdf

原文始发于微信公众号(Coder小Q):【密码学】数字签名的华丽新章:RSA-PSS的崛起

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月28日13:31:01
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【密码学】数字签名的华丽新章:RSA-PSS的崛起https://cn-sec.com/archives/3319312.html

发表评论

匿名网友 填写信息