【密码学】数字签名的华丽新章:RSA-PSS的崛起
之前,我们讲解过OAEP,然后呢,我发现,PSS还没有水(啊不是,写)文章,那么本篇文章呢,我们就来聊一聊PSS, 也就是RSA当中另一种签名的方案 。
为了能更好的多水一点字数呢,我们首先,来回顾一下,有关于数字签名和RSA的签名的相关知识
背景介绍
数字签名
数字签名是一种基于数学算法的电子验证技术,用于确认数字信息的来源和完整性。它类似于传统手写签名或盖章,但在数字环境中提供了更高的安全性和可靠性。数字签名的核心功能是通过使用一种公钥加密算法,确保信息在传输过程中没有被篡改,并验证信息的创建者身份。
具体来说,当一个消息或文件需要签名时,发送者会利用其私钥对信息进行加密,生成一段独特的签名。接收者随后可以使用发送者的公钥对签名进行验证,以确认消息确实来源于宣称的发送者,并且内容未被篡改。
对于数字签名来说,我们一般分为以下几个步骤,分别是
-
摘要生成: 首先,对于需要签名的消息,生成一个摘要值,因为一般来说,我们可以用摘要值来代替我们原始的消息,具体原因可以参考下有关于摘要的知识 -
生成签名: 通过签名者的私钥,对于摘要进行签名,从而生成具体的数字签名 -
验签过程: 签名验证者,通过公钥进行验签,最终判定签名的合法性。
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的字符串
过程
-
初始化变量 -
T = 空字符串 -
计算中间值 -
T = T || Hash(X || counter) -
输出结果 -
T的前maskLen字节
签名过程
然后,我们来看一下,具体签名所用到的一些参数
-
EM长度: 表示最终,我们需要签名生成的EM的长度,这里需要比n要小。 -
padding1: 64个0位的串 -
padding2: 长度为emLen - sLen - hLen - 2字节的0串,后面拼接01 -
salt: 伪随机数 -
bc: 这里,就是16进制的 0xBC
然后,我们根据上图,来看一下,具体的签名的过程。
-
生成消息的哈希值 -
生成一个随机的salt串,得到 -
生成的哈希值 -
构成数据分组 -
利用H生成掩码 -
计算 -
将MaskedDB字节左侧位填充为0
然后,我们采用RSA的算法,利用私钥d计算
验签过程
对于验签过程,也比较简单,我们简单来描述下,这里,我们采用RSA的公钥e,进行运算,拿到EM,也就是
-
生成M的哈希值 -
判断,EM最后,是不是 0xBC
,如果不是,验签失败 -
分离MaskedDB以及H,因为我们知道哈希算法,确定了这两个值的具体大小 -
通过H,计算 -
然后,解密获取到 -
拆分得到salt,然后计算 -
生成的哈希值 -
然后,验证是否和H相等,如果相等,则验签通过,否则验签不通过。
总结
本篇文章呢,我们介绍了一个有关于RSA的一个新的签名方案PSS, 这个方案呢,采用了随机化的过程,比起之前的确定的签名算法,有更加优越的安全性,这也说明了,就算是签名算法,他的密文,也可能是不一样的,哈哈,好了,快乐的时光过得特别快,又到了说再见的时候了,我们下次再见。
参考资料
-
https://en.wikipedia.org/wiki/Probabilistic_signature_scheme -
https://web.archive.org/web/20170714022144/http://grouper.ieee.org/groups/1363/P1363a/contributions/pss-submission.pdf
原文始发于微信公众号(Coder小Q):【密码学】数字签名的华丽新章:RSA-PSS的崛起
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论