PKCS中的块编码格式

时间:2018-02-05 09:51:43

标签: rsa pkcs#1

在RSA的PKCS块编码格式中,块类型01和02的区别是什么?他们什么时候使用?

1 个答案:

答案 0 :(得分:0)

来自https://tools.ietf.org/html/rfc2313#section-8.1(谢谢,詹姆斯):

  

8.1加密块格式

     

块类型BT,填充字符串PS和数据D应为      格式化为八位字节串EB,即加密块。

          EB = 00 || BT || PS || 00 || D .           (1)
     

块类型BT应为单个八位字节,表示结构      加密块。对于此版本的文档,它应具有      值00,01或02.对于私钥操作,块类型      应为00或01.对于公钥操作,应为02。

值得注意的是,“块类型”这个短语没有出现在PKCS#1 v2.0 RFC(https://tools.ietf.org/html/rfc2437

稍后我们会看到验证的一半:

  

9.4加密块解析

     

加密块EB应解析为块类型BT,a      填充字符串PS,以及根据等式(1)的数据D.

     

如果出现以下任何一种情况,则会出错:

     
      
  • 无法解析加密块EB            毫不含糊地(参见8.1节的注释)。
  •   
  • 填充字符串PS由少于八个组成            八位字节,或与块类型BT不一致。
  •   
  • 解密过程是公钥操作            块类型BT不是00或01,或解密            process是私钥操作,块类型是            不是02
  •   

(强调我的)

使用RFC2313中的术语:

  • 签名生成是一种加密过程,它是私钥操作(BT = 01)
  • 签名验证是一种解密过程,它是公钥操作(BT = 01)
  • 启动密钥传输/包络是一种加密过程,是公钥操作(BT = 02)
  • 接收密钥传输是一种解密过程,它是私钥操作(BT = 02)。

RFC 2437(PKCS#1 2.0)取代了许多这些术语,并完全摆脱了块类型的概念。对于PKCS#1签名格式化,该字节简单地被指定为01,并且对于PKCS#1加密,该字节被指定为02。对于OAEP(加密)或PSS(签名)填充方案,该字节不固定。