一、前言
按照惯例传统,还是要讲讲为什么来学习这个东西。我的原则学习无非是项目驱动、和知识联系。
学习这个是因为在看代码的时候看到了RSA一个宏定义后面加了一个PSS,我就奇了怪了,这玩意是个啥呢?
咱们得循序渐进哦!!!
- SSA = Signature Scheme with Appendix
- PSS = Probabilistic Signature Scheme
- ES = Encryption Schemes
SSA是填充、封装格式;PSS是私钥签名流程;ES是公钥加密流程。
即中间人有办法控制m。
二、来讲讲RSASA-PSS
2018年发布的 TLS v1.3(TLS:Transport Layer Security,传输安全层协议,TLS v1.3 对应 RFC 8446)中,其支持的数字签名算法有:RSASSA-PKCS1-v1_5、RSASSA-PSS、ECDSA(Elliptic Curve Digital Signature Algorithm,椭圆曲线签名算法)、EdDSA(Edwards-Curve Digital Signature Algorithm,爱德华曲线签名算法)。
这些算法已经是标准(或者是事实上的标准),不过从某种意义上说,这些算法也代表着美国签名算法流派。
除美国外,俄罗斯在1994年发布数字签名算法标准 GOST R 34.10-94,并在2001年发布椭圆曲线数字签名算法标准GOST R34.10- 2001。GOST R34.10-2001在2012年更新为 GOST R34.10-2012。韩国在1998年发表韩国基于证书的数字签名算法 KCDSA 和 EC- KCDA,对应标准发布于[88,89]。德国在 2005 年发布德国椭圆曲线数字签名算法标准 EC- GDSA。中国在 2012 年发布 SM2 椭圆曲线数字签名算法标准,在 2016 年发布 SM9 标识密码数字签名算法标准。
作为重要的国际标准化组织,ISO/IEC 同样也发布了一系列的数字签名算法标准:ISO/IEC 9796、ISO/ IEC 14888、ISO/IEC 20008、ISO/IEC 18370、ISO/IEC 23264 等等。
弱水三千,只取一瓢。由于文章主题和篇幅的关系,本文只介绍 RSASA-PSS 算法。
PSS (Probabilistic Signature Scheme,概率签名方案)是私钥签名的一种填充方式。RSASA(RSA Signature Algorithm,RSA 数字签名算法)目前支持两种算法:RSASSA-PKCS1-v1_5、RSASSA-PSS。由于安全的原因,RSASSA-PKCS1-v1_5 现在的使用场景仅仅是为了兼容,当前主流推荐使用 RSASSA-PSS 算法。
PSS 方案首先由 Bellare和Rogaway 首先提出,PSS 与 OAEP(Optimal Asymmetric Encryption Padding,最优非对称加密填充)非常相像,当然 OAEP也是由这两位大神提出的。
Mihir Bellare是加州大学圣地亚哥分校(UCSD,University of California, San Diego)计算机科学与工程系的教授。Bellare 于1986年在加州理工学院获得学士学位,1991年在麻省理工学院获得博士学位。1991年至1995年,Bellare 在IBM担任研究员 Bellare 是HMAC、RSA-OAEP、RSA-PSS和OCB的联合开发者。Bellare 是 ACM 和 IACR 的研究员。他曾获得 ACM 巴黎Kanellakis 理论与实践奖,RSA 会议数学奖,David 和 Lucille Packard基金会科学与工程奖学金,以及NSF职业奖( He has received an ACM Paris Kanellakis Theory and Practice Award, an RSA Conference Award in Mathematics, a David and Lucille Packard Foundation Fellowship in Science and Engineering, and an NSF Career award)。
Phillip Rogaway 是美国加州大学戴维斯分校(UCD,University of California, Davis)计算机科学系的教授。Rogaway 本科毕业于加州大学伯克利分校(UCB,University of California, Berkeley),并于1991年到麻省理工计算理论小组攻读博士学位(MIT s Theory of Computation group )。博士毕业之后,Rogaway 到 IBM 担任安全架构师,然后于1994年到 UCD 工作。Rogaway 获得过 Levchin 奖(2016),PET 奖(2015),IACR 研究员(2012),ACM巴黎 Kanellakis 奖(2009),RSA 数学奖(2003)(Levchin prize (2016), PET Award (2015), IACR Fellow (2012), ACM Paris Kanellakis Award (2009), RSA Award in Mathematics (2003))。
1-那RSA和RSASSA是个什么关系
RSA 数字签名算法(RSASA)的本质,仍然是 RSA 加密/解密算法,如图2所示。
从图中可以看到,RSSSA 分为两步。
- 将待签名的 M 进行 Hash,从而得到 H
- 将 H 进行 RSA 私钥加密
既然是 RSA 加密,就绕不开 RSA 那个致命问题——能够非常简单地被选择密文攻击所破解,于是也就引发了 RSA 填充算法。
RSASSA-PKCS1-v1_5 采用的就是 RSA_PKCS1_PADDING_v1_5 填充算法,而 RSASSA-PSS 的填充算法则与 RSA_PKCS1_OAEP_PADDING 填充算法比较相像。下面我们就介绍 RSASSA-PSS 算法(一个填充算法)。
2-RSASSA-PSS 的填充算法
RSASSA-PSS 算法本质就是在 RSA 算法的基础上叠加上一种填充算法(为了便于表述,这种填充算法也可以称为 RSA-PSS 填充算法,或者 RSA-PSS 编码),如图3所示。
在 Hash 之后,在 RSA 之前,RSASA-PSS 算法插入了一个 RSA-PSS 填充算法。RSA-PSS 的具体算法,如图所示:
图中,RSA-PSS 填充算法,分为四步。下面我们分别讲述这四步。
1 M 转换成 M1
2 构建 DB
3 MGF
4 构建 EM
2-RSASA-PSS 的签名算法
经过 RSA-PSS 填充以后,接下来的签名算法,就比较简单了,
EM = RSA-PSS(M)
S = RSAEP(EM)
3-RSASA-PSS 的签名验证
RSASA-PSS 签名验证,分为如下几个步骤。
1 解密
2 分割 EM
3 计算 salt
4 校验 Hash
4-RSAES-PKCS1-v1_5 加密流程
作⽤:RSA公钥加密
常见于使⽤RSA算法的TLS握⼿,例如客户端拿到服务端的公钥后,对⾃⼰⽣成的key进⾏加密。
5-RSASSA-PKCS1-V1_5-SIGN 签名流程
该签名流程,使⽤了EMSA-PKCS1-v1_5 封装格式
就是RSA签名,常见于 数字证书的签名,例如CA证书是RSA证书,那么由他⽣成的下级证书,就会⽤CA证书的私钥进⾏签名,获得⼀个值插在下级证书⾥⾯。
感谢前辈的文章
参考链接:
https://www.51cto.com/article/663141.html
https://wenku.baidu.com/view/1367392cf48a6529647d27284b73f242336c3192.html?*wkts*=1675347108003&bdQuery=PKCS1_PSS
版权归原作者 Hkcoco 所有, 如有侵权,请联系我们删除。