非对称密钥包摘要
本文档定义了私钥信息的语法及其内容类型。 私钥信息包括指定公钥算法的私钥和一组属性。 RFC 5652 中定义的加密消息语法 (CMS) 可用于对非对称密钥格式内容类型进行数字签名、摘要、验证或加密。 本文档废弃了 RFC 5208。
本备忘录的状态
这是一份 Internet 标准跟踪文档。 本文档是 Internet 工程任务组 (IETF) 的产品。 它代表了 IETF 社区的共识。 它已接受公众审查,并已被互联网工程指导小组 (IESG) 批准发布。 有关 Internet 标准的更多信息,请参阅 RFC 5741 的第 2 节。有关本文档的当前状态、任何勘误表以及如何提供反馈的信息,请访问 http://www.rfc-editor.org/info /rfc5958。
一、简介
本文档定义了私钥信息的语法和它的加密消息语法 (CMS) [RFC5652] 内容类型。 私钥信息包括指定公钥算法的私钥和一组属性。 CMS 可用于对非对称密钥格式内容类型进行数字签名、摘要、验证或加密。 本文档废弃了 PKCS #8 v1.2 [RFC5208]。
1.3. RFC 5208 更新摘要 下面总结了 [RFC5208] 的更新: - 将名称“PrivateKeyInfo”更改为“OneAsymmetricKey”。 这反映了 publicKey 字段的添加,以允许单独传送非对称密钥的两个部分。 并非所有算法都会使用这两个字段; 但是,为了完整性添加了 publicKey 字段。 - 定义非对称密钥包 CMS 内容类型。 - 从属性中删除了冗余的 IMPLICIT。 - 将公钥添加到 OneAsymmetricKey 并更新了版本号。
- 添加了可能支持 PKCS #9 属性。
- 添加了与其他私钥格式的兼容性的讨论。
- 添加了编码规则集的要求。
- 将导入从 PKCS #5 更改为 [RFC5912] 和 [RFC5911]。
- 用 [RFC5912] 中的 ALGORITHM 替换了 ALGORITHM-IDENTIFIER。
- 注册 application/pkcs8 媒体类型和 .p8 文件扩展名。
2. 非对称密钥包 CMS 内容类型
非对称密钥包 CMS 内容类型用于将一个或多个明文非对称密钥从一方传输到另一方。 非对称密钥包可以封装在一种或多种 CMS 保护内容类型中(参见第 4 节)。 本规范 [RFC5208] 的早期版本没有指定特定的编码规则集,但生成器应该使用 DER [X.690] 并且接收器必须支持 BER [X.690],其中还包括 DER [X.690]。 非对称密钥包内容类型具有以下语法:
OneAsymmetricKey 的语法包含版本号、与私钥一起使用的非对称算法的指示、私钥、可选的密钥材料属性(例如,来自 [X.520] 的 userCertificate)和可选的公钥。 通常,将提供公钥或证书。 在极少数情况下,公钥和证书都存在,因为这包括公钥的两个副本。 OneAsymmetricKey 重命名了 [RFC5208] 中定义的 PrivateKeyInfo 语法。 新名称更好地反映了携带私钥和公钥组件的能力。 通过版本号保留与原始 PrivateKeyInfo 的向后兼容性。 OneAsymmetricKey中的字段使用如下:
- version 标识 OneAsymmetricKey 的版本。 如果公钥
存在,则版本设置为 v2,否则版本设置为 v1。
- privateKeyAlgorithm 标识私钥算法并可选地包含与非对称密钥对关联的参数。 该算法由对象标识符 (OID) 标识,参数的格式取决于 OID,但 PrivateKeyAlgorithms 信息对象集限制了允许的 OID。 放置在 privateKeyAlgorithmIdentifier 中的值是发起者将应用的值,以指示哪种算法将与私钥一起使用。
ECC私钥pkcs8:
RSA私钥pkcs8:
- privateKey 是包含私钥值的 OCTET STRING。 内容的解释在私钥算法的注册中定义。 例如,DSA 密钥是 INTEGER,RSA 密钥表示为 [RFC3447] 中定义的 RSAPrivateKey,而椭圆曲线密码术 (ECC) 密钥表示为 [RFC5915] 中定义的 ECPrivateKey。
- 属性是可选的。 它包含与公钥对应的信息(例如,证书)。 属性字段使用 ATTRIBUTE 类,该类受 OneAsymmetricKeyAttributes 信息对象集的限制。 OneAsymmetricKeyAttributes 是本文档中的一个开放式集合。 其他文档可以限制这些值。 可以支持 [RFC2985] 中的属性。
- 公钥是可选的。 如果存在,它包含以 BIT STRING 编码的公钥。 BIT STRING 中的结构(如果有的话)取决于 privateKeyAlgorithm。 例如,DSA 密钥是一个 INTEGER。 请注意,根据 [RFC3447],RSA 公钥包含在 RSAPrivateKey 中(即存在 n 和 e),而根据 [RFC5915],ECC 公钥包含在 ECPrivateKey 中(即,在 publicKey 字段中)。