跳到主要内容

Appendix B. DER Expectations (附录 B. DER 预期)

本附录是信息性的。请查阅相应的标准以获取规范性规则。

DER 是 BER [X.690] 的受限配置文件 (restricted profile); 因此, 数据值的所有 DER 编码都是 BER 编码, 但对于一个数据值, 只有一个 BER 编码是 DER 编码。在执行密码操作时, 规范编码 (canonical encoding) 很重要; 此外, 规范编码对解析器具有某些效率优势。使用 DER 编码有三个主要原因:

  1. 数字签名 (应该) 是对语义内容的 DER 编码计算的, 因此提供除 DER 编码之外的任何内容都是没有意义的。(在实践中, 实现者可能会选择让实现按原样解析和摘要数据, 但这种做法相当于猜测。)

  2. 在实践中, 密码哈希是对 DER 编码进行计算以进行标识。

  3. 在实践中, 内容很小。DER 总是以定长形式 (definite-length form) 编码数据值 (其中长度在编码开始时声明); 因此, 解析器可以预先预测内存或资源使用情况。

图 20 将本文档中的结构与 DER 编码的特定原因相匹配:

章节标签原因
5CERTIFICATE1 2 ~3
6X509 CRL1
7CERTIFICATE REQUEST1 ~3
8PKCS7*
9CMS*
10PRIVATE KEY3
11ENCRYPTED PRIVATE KEY3
12ATTRIBUTE CERTIFICATE1 ~3
13PUBLIC KEY2 3

图 20: DER 编码指南

* 密码消息语法 (Cryptographic Message Syntax) 设计用于任意长度的内容; 不定长编码 (indefinite-length encoding) 使得在生成编码时能够进行单遍处理 (流式处理, streaming)。只有某些部分 -- 即签名和认证的属性 -- 需要进行 DER 编码。

~ 尽管不总是 "小", 这些编码的结构不应该特别 "大" (例如, 超过 16 千字节)。解析器应该在任何情况下预先得知大型内容; 这是首先进行 DER 编码这些内容的另一个原因。