Skip to main content

9. Encoding Methods for Signatures with Appendix (带附录签名的编码方法)

编码方法用于将消息转换为编码消息,编码消息随后可以通过RSA签名原语进行签名. 本节规定了两种编码方法: EMSA-PSS和EMSA-PKCS1-v1_5.

9.1. EMSA-PSS

EMSA-PSS (Encoding Method for Signatures with Appendix - Probabilistic Signature Scheme) 是一种概率编码方法,包含随机性,因此对于给定的消息可以生成多个不同的编码消息.

9.1.1. Encoding Operation (编码操作)

EMSA-PSS-ENCODE (M, emBits)

输入 (Input):

  • M: 要编码的消息,长度为任意的八位字节串
  • emBits: 编码消息的最大比特长度,至少为8hLen + 8sLen + 9

输出 (Output):

  • EM: 编码消息,长度为emLen = ⌈emBits/8⌉的八位字节串

步骤 (Steps):

  1. 如果M的长度大于哈希函数Hash的输入限制(2^61 - 1个八位字节对于SHA-1),输出 "message too long" 并停止.

  2. 令mHash = Hash(M),长度为hLen的八位字节串.

  3. 如果emLen < hLen + sLen + 2,输出 "encoding error" 并停止.

  4. 生成长度为sLen的随机八位字节串salt.

  5. 令M' = (0x)00 00 00 00 00 00 00 00 || mHash || salt; M'是长度为8 + hLen + sLen的八位字节串.

  6. 令H = Hash(M'),长度为hLen的八位字节串.

  7. 生成由emLen - sLen - hLen - 2个零八位字节组成的八位字节串PS.

  8. 令DB = PS || 0x01 || salt; DB是长度为emLen - hLen - 1的八位字节串.

  9. 令dbMask = MGF(H, emLen - hLen - 1).

  10. 令maskedDB = DB ⊕ dbMask.

  11. 将maskedDB的最左边8emLen - emBits位设置为零.

  12. 令EM = maskedDB || H || 0xbc.

  13. 输出EM.

9.1.2. Verification Operation (验证操作)

EMSA-PSS-VERIFY (M, EM, emBits)

输入 (Input):

  • M: 消息,长度为任意的八位字节串
  • EM: 要验证的编码消息,长度为emLen = ⌈emBits/8⌉的八位字节串
  • emBits: 编码消息的最大比特长度

输出 (Output):

  • "consistent" (一致) 或 "inconsistent" (不一致)

步骤: (验证步骤与编码步骤相反,检查所有约束)

9.2. EMSA-PKCS1-v1_5

EMSA-PKCS1-v1_5 (Encoding Method for Signatures with Appendix - PKCS #1 v1.5) 是一种确定性编码方法,对于给定的消息总是生成相同的编码消息.

EMSA-PKCS1-v1_5-ENCODE (M, emLen)

输入 (Input):

  • M: 要编码的消息,长度为任意的八位字节串
  • emLen: 编码消息的预期长度(以八位字节为单位),至少为tLen + 11,其中tLen是DigestInfo值的八位字节长度

输出 (Output):

  • EM: 编码消息,长度为emLen的八位字节串

步骤 (Steps):

  1. 对消息M应用哈希函数以生成哈希值H: H = Hash(M). 如果哈希函数输出 "message too long",输出 "message too long" 并停止.

  2. 使用第9.2节注释中的技术,将DigestInfo值编码为T,用于哈希函数.

  3. 如果emLen < tLen + 11,输出 "intended encoded message length too short" 并停止.

  4. 生成由emLen - tLen - 3个值为0xff的八位字节组成的八位字节串PS.

  5. 连接PS和其他填充以形成编码消息EM: EM = 0x00 || 0x01 || PS || 0x00 || T

  6. 输出EM.