【问题标题】:Block Encoding format in PKCSPKCS 中的块编码格式
【发布时间】:2018-02-05 09:51:43
【问题描述】:

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

【问题讨论】:

  • 在填充方案中,0x00 0x01 用于签名操作,0x00 0x02 用于PKCS1 加密填充。如果这就是你的意思。
  • 感谢您回答问题。在上面提供的参考链接中它说:“对于私钥操作,块类型应为 00 或 01。对于公钥操作,应为 02。”是不是指签名为私钥操作,验证为公钥操作?

标签: rsa pkcs#1


【解决方案1】:

来自https://www.rfc-editor.org/rfc/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://www.rfc-editor.org/rfc/rfc2437) 中没有出现“块类型”这一短语

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

9.4 加密-块解析

加密块 EB 应被解析为块类型 BT,a 根据公式(1)填充字符串PS,数据D。

如果出现以下任何一种情况都是错误的:

  • 无法解析加密块 EB 明确(参见第 8.1 节的注释)。
  • 填充字符串 PS 包含少于八个 八位字节,或与块类型BT不一致。
  • 解密过程是公钥操作 并且块类型BT不是00或者01,或者解密 进程是私钥操作,块类型是 不是02

(强调我的)

使用 RFC2313 中的术语:

  • 签名生成是一个加密过程,它是一种私钥操作 (BT=01)
  • 签名验证是一个解密过程,它是一个公钥操作 (BT=01)
  • Initiate Key Transfer / Enveloping 是一种加密过程,它是一种公钥操作 (BT=02)
  • 接收密钥传输是一个解密过程,它是一个私钥操作 (BT=02)。

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

【讨论】:

    猜你喜欢
    • 2021-04-17
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    相关资源
    最近更新 更多