8. Signature Scheme with Appendix (带附录的签名方案)
带附录的签名方案 (Signature Scheme with Appendix) 由签名生成操作和签名验证操作组成,其中签名生成操作使用签名者的RSA私钥从消息生成签名,签名验证操作使用签名者的RSA公钥验证签名的真实性.
为了签署消息M,签名者对M应用消息编码操作以生成编码消息EM,然后应用签名原语产生签名S. 为了验证签名S,验证者对S应用验证原语以恢复编码消息EM,然后应用验证操作以确定签名是否对消息有效.
两种签名方案在本文档中规定: RSASSA-PSS和RSASSA-PKCS1-v1_5.
虽然不强制,但RSASSA-PSS推荐用于新应用. RSASSA-PKCS1-v1_5包含是为了与现有应用程序兼容.
8.1. RSASSA-PSS
RSASSA-PSS结合了RSASP1和RSAVP1原语(第5.2节)与EMSA-PSS编码方法. 它基于Bellare和Rogaway提出的概率签名方案 (Probabilistic Signature Scheme, PSS) [RSARABIN] [PSS].
PSS的安全性基于RSA问题的难度和MGF的随机预言模型. 已证明在随机预言模型下,如果MGF行为类似于随机预言且RSA问题是困难的,那么PSS签名方案对于选择消息攻击 (Chosen Message Attack) 是安全的.
RSASSA-PSS不是确定性的:对于给定的消息,可以生成多个可能的签名. 这是因为签名生成操作期间包含了随机盐值.
8.1.1. Signature Generation Operation (签名生成操作)
RSASSA-PSS-SIGN (K, M)
输入 (Input):
- K: 签名者的RSA私钥
- M: 要签名的消息,长度为任意的八位字节串
输出 (Output):
- S: 签名,长度为k的八位字节串,其中k是RSA模数n的长度(以八位字节为单位)
错误 (Errors):
- "message too long" (消息过长)
- "encoding error" (编码错误)
步骤 (Steps):
-
EMSA-PSS编码: 对消息M应用EMSA-PSS编码操作以生成长度为⌈(modBits-1)/8⌉个八位字节的编码消息EM,其中modBits是RSA模数n的长度(以比特为单位): EM = EMSA-PSS-ENCODE(M, modBits - 1). 如果编码操作输出 "message too long" 或 "encoding error",输出相应错误并停止.
-
RSA签名:
- 将编码消息EM转换为整数消息代表值m: m = OS2IP(EM)
- 应用RSASP1签名原语: s = RSASP1(K, m)
- 将签名代表值s转换为长度为k的签名S: S = I2OSP(s, k)
-
输出签名S.
8.1.2. Signature Verification Operation (签名验证操作)
RSASSA-PSS-VERIFY ((n, e), M, S)
输入 (Input):
- (n, e): 签名者的RSA公钥
- M: 消息,长度为任意的八位字节串
- S: 要验证的签名,长度为k的八位字节串
输出 (Output):
- "valid signature" (有效签名) 或 "invalid signature" (无效签名)
步骤 (Steps):
-
长度检查: 如果签名S的长度不是k个八位字节,输出 "invalid signature" 并停止.
-
RSA验证:
- 将签名S转换为整数签名代表值s: s = OS2IP(S)
- 应用RSAVP1验证原语: m = RSAVP1((n, e), s). 如果RSAVP1输出 "signature representative out of range",输出 "invalid signature" 并停止.
- 将消息代表值m转换为长度为emLen = ⌈(modBits - 1)/8⌉的编码消息EM: EM = I2OSP(m, emLen)
-
EMSA-PSS验证: 应用EMSA-PSS验证操作: Result = EMSA-PSS-VERIFY(M, EM, modBits - 1). 如果Result = "consistent",输出 "valid signature"; 否则输出 "invalid signature".
8.2. RSASSA-PKCS1-v1_5
RSASSA-PKCS1-v1_5结合了RSASP1和RSAVP1原语(第5.2节)与EMSA-PKCS1-v1_5编码方法. 它与IEEE 1363 [IEEE1363] 中的IFSSA方案兼容,其中使用DigestInfo值的哈希函数来生成消息代表值.
RSASSA-PKCS1-v1_5的安全性依赖于RSA问题的难度. 虽然没有已知的攻击成功破解该方案,但也没有像PSS那样的安全性证明.
8.2.1. Signature Generation Operation (签名生成操作)
RSASSA-PKCS1-V1_5-SIGN (K, M)
步骤与RSASSA-PSS类似,但使用EMSA-PKCS1-v1_5编码方法
8.2.2. Signature Verification Operation (签名验证操作)
RSASSA-PKCS1-V1_5-VERIFY ((n, e), M, S)
步骤与RSASSA-PSS类似,但使用EMSA-PKCS1-v1_5验证方法