PKCS 中的块编码格式
Block Encoding format in PKCS
在 RSA 的 PKCS 块编码格式中,块类型 01 和 02 有什么区别?什么时候使用它们?
来自 https://www.rfc-editor.org/rfc/rfc2313#section-8.1(感谢 James):
8.1 Encryption-block formatting
块类型BT,填充字符串PS,数据D为
格式化为八位字节串EB,即加密块。
EB = 00 || BT || PS || 00 || D . (1)
块类型 BT 应为单个八位字节,指示结构
加密块。对于这个版本的文件,它应该有
值 00、01 或 02。对于私钥操作,块类型
应为 00 或 01。对于 public 键操作,应为 02。
值得注意的是,PKCS#1 v2.0 RFC (https://www.rfc-editor.org/rfc/rfc2437)
中并没有出现短语“块类型”
稍后我们看到验证一半:
9.4 加密块解析
加密块EB要解析成块类型BT,a
padding string PS,数据D根据等式(1).
如果出现以下任何一种情况,则为错误:
- 无法解析加密块EB
明确地(见第 8.1 节的注释)。
- 填充字符串PS少于八个
八位字节,或者与块类型BT不一致。
- 解密过程是public-密钥操作
并且块类型BT不是00或者01,或者解密
进程是私钥操作,块类型是
不是 02.
(强调我的)
使用 RFC2313 中的术语:
- 签名生成是一个加密过程,是一个私钥操作 (BT=01)
- 签名验证是一个解密过程,它是一个 public-密钥操作 (BT=01)
- 启动密钥传输/封装是一个加密过程,它是一个 public-密钥操作 (BT=02)
- Receive Key Transfer是一个解密过程,是一个私钥操作(BT=02)。
RFC 2437 (PKCS#1 2.0) 替换了许多这些术语,并完全摆脱了块类型的概念。对于 PKCS#1 签名格式,该字节简单地规定为 01
,对于 PKCS#1 加密规定为 02
。对于 OAEP(加密)或 PSS(签名)填充方案,该字节不是固定的。
在 RSA 的 PKCS 块编码格式中,块类型 01 和 02 有什么区别?什么时候使用它们?
来自 https://www.rfc-editor.org/rfc/rfc2313#section-8.1(感谢 James):
8.1 Encryption-block formatting
块类型BT,填充字符串PS,数据D为 格式化为八位字节串EB,即加密块。
EB = 00 || BT || PS || 00 || D . (1)
块类型 BT 应为单个八位字节,指示结构 加密块。对于这个版本的文件,它应该有 值 00、01 或 02。对于私钥操作,块类型 应为 00 或 01。对于 public 键操作,应为 02。
值得注意的是,PKCS#1 v2.0 RFC (https://www.rfc-editor.org/rfc/rfc2437)
中并没有出现短语“块类型”稍后我们看到验证一半:
9.4 加密块解析
加密块EB要解析成块类型BT,a padding string PS,数据D根据等式(1).
如果出现以下任何一种情况,则为错误:
- 无法解析加密块EB 明确地(见第 8.1 节的注释)。
- 填充字符串PS少于八个 八位字节,或者与块类型BT不一致。
- 解密过程是public-密钥操作 并且块类型BT不是00或者01,或者解密 进程是私钥操作,块类型是 不是 02.
(强调我的)
使用 RFC2313 中的术语:
- 签名生成是一个加密过程,是一个私钥操作 (BT=01)
- 签名验证是一个解密过程,它是一个 public-密钥操作 (BT=01)
- 启动密钥传输/封装是一个加密过程,它是一个 public-密钥操作 (BT=02)
- Receive Key Transfer是一个解密过程,是一个私钥操作(BT=02)。
RFC 2437 (PKCS#1 2.0) 替换了许多这些术语,并完全摆脱了块类型的概念。对于 PKCS#1 签名格式,该字节简单地规定为 01
,对于 PKCS#1 加密规定为 02
。对于 OAEP(加密)或 PSS(签名)填充方案,该字节不是固定的。