Skip to main content

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):

  1. EMSA-PSS编码: 对消息M应用EMSA-PSS编码操作以生成长度为⌈(modBits-1)/8⌉个八位字节的编码消息EM,其中modBits是RSA模数n的长度(以比特为单位): EM = EMSA-PSS-ENCODE(M, modBits - 1). 如果编码操作输出 "message too long" 或 "encoding error",输出相应错误并停止.

  2. RSA签名:

    • 将编码消息EM转换为整数消息代表值m: m = OS2IP(EM)
    • 应用RSASP1签名原语: s = RSASP1(K, m)
    • 将签名代表值s转换为长度为k的签名S: S = I2OSP(s, k)
  3. 输出签名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):

  1. 长度检查: 如果签名S的长度不是k个八位字节,输出 "invalid signature" 并停止.

  2. 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)
  3. 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验证方法