PKCS(Public-Key Cryptography Standards)是由 RSA 实验室发布的一系列公钥密码学标准,定义了在公钥基础设施(PKI)中广泛使用的数据格式、算法和协议。以下是对 PKCS #1 及后续主要 PKCS 标准的介绍:
一、目前在用的PKCS标准
PKCS #1 – RSA Cryptography Standard RSA算法标准
-
主要内容:定义了 RSA 公钥和私钥的数学定义、结构(ASN.1语法)以及使用RSA算法进行加密和签名的方案。
-
核心用途:
-
RSA密钥表示:规定了如何编码RSA公钥(模数n和公钥指数e)和私钥。
-
加密方案:如RSAES-PKCS1-v1_5(旧版)和更安全的RSAES-OAEP。
-
签名方案:如RSASSA-PKCS1-v1_5(旧版)和更安全的RSASSA-PSS。
-
-
在GM/T文件中的关联:在 GM/T 0014-2023 中,明确规定“凡涉及 RSA 密钥算法的,其密钥结构应符合 PKCS #1 的规定”。它是构建数字签名和数字信封(当使用RSA算法时)的基础。
PKCS #7 – Cryptographic Message Syntax (CMS) 密码消息语法
-
主要内容:定义了一种通用的密码消息语法标准,用于对任意内容(如数据、证书、CRL)进行数字签名、摘要、加密或封装。
-
核心用途:
-
数字签名:创建签名的数据结构(SignedData)。
-
数字信封:创建加密的数据结构(EnvelopedData),用接收者的公钥加密会话密钥。
-
数据封装:可以嵌套多种操作(如先签名后加密)。
-
-
在GM/T文件中的关联:GM/T 0014-2023 中规定,“其封装结构应符合 PKCS #7 的规定”。它常用于证书(如附件中的证书链)、CRL的封装传输,以及安全协议报文(如CMC)的底层封装格式。
PKCS #8 – Private-Key Information Syntax Standard 私钥信息语法
-
主要内容:定义了私钥信息的语法,包括私钥本身以及可选的属性集。私钥通常会被加密保护。
-
核心用途:安全地存储和传输私钥。它是许多系统(如OpenSSL)导出和导入私钥的默认格式。
-
特点:可以封装各种算法(如RSA、DSA、EC)的私钥。
PKCS #10 – Certification Request Syntax Standard 证书请求语法
-
主要内容:定义了向证书认证机构(CA)申请数字证书时使用的数据格式。
-
核心结构:一个认证请求(CertificationRequest)包含:待签发的证书信息(公钥、主体名称等)、请求者信息,并由请求者使用自己的私钥对整个请求进行签名。
-
核心用途:证书签名请求(CSR)的标准格式。RA或终端实体向CA提交CSR以申请证书。
-
在GM/T文件中的关联:在 GM/T 0014-2023 附录C(RA与CA间协议) 中,
PKIBody的选项之一就是p10cr [4] CertificationRequest,即PKCS #10格式的证书请求。
PKCS #11 – Cryptographic Token Interface Standard (Cryptoki) 密码令牌接口
-
主要内容:定义了一个与硬件密码设备(如智能卡、USB Key、HSM)进行交互的通用API接口,独立于具体设备。
-
核心用途:为应用程序提供一套统一的函数来调用硬件密码设备中的密码服务(如密钥生成、签名、加密),而无需关心底层设备的差异。
PKCS #12 – Personal Information Exchange Syntax Standard 个人信息交换语法
-
主要内容:定义了用于安全存储和传输用户个人身份信息(如私钥、对应证书、其他秘密)的文件格式。文件通常使用密码(口令)进行保护。
-
核心用途:将用户的私钥和证书链打包成一个受密码保护的
.p12或.pfx文件,方便在客户端(如浏览器、操作系统)之间备份、恢复或导入数字身份。 -
特点:支持基于口令的加密,是Windows系统、浏览器等广泛支持的证书/密钥对分发格式。
其他相关说明
-
PKCS #15:定义了密码令牌上存储的加密对象的通用格式,旨在促进不同厂商令牌的互操作性。
-
与国密标准的关系:在中国的密码体系中,与PKCS #1和PKCS #7功能对应的是 GM/T 0009 (SM2算法规范) 和 GM/T 0010 (SM2加密签名消息语法规范)。GM/T标准规定了国产SM2算法对应的密钥结构、签名和加密信封的格式。在 GM/T 0014-2023 中明确要求:凡涉及SM2算法的,需符合GM/T 0009和0010;凡涉及RSA算法的,则需符合PKCS #1和#7。这体现了在支持国际通用算法(RSA)的同时,对国产密码算法的标准化要求。
总结表格
| 标准编号 | 核心名称与用途 | 在GM/T体系中的角色 |
|---|---|---|
| PKCS #1 | RSA算法标准(密钥结构、加密/签名方案) | RSA算法的基础遵从标准(密钥结构、签名/信封基础) |
| PKCS #7 | 密码消息语法(通用签名/加密封装格式) | RSA算法的封装遵从标准(证书链、CRL、协议报文封装) |
| PKCS #8 | 私钥信息语法(私钥存储格式) | 通用私钥存储和传输格式 |
| PKCS #10 | 证书请求语法(CSR标准格式) | RA/用户向CA申请证书的标准请求格式之一 |
| PKCS #11 | 密码令牌接口(硬件密码设备API) | 调用硬件密码设备的通用编程接口 |
| PKCS #12 | 个人信息交换语法(.p12/.pfx文件格式) | 用户证书和私钥的分发、备份标准格式 |
| GM/T 0009/0010 | SM2算法及消息语法规范 | 国密对标标准,在涉及SM2算法时取代PKCS #1和#7的角色 |
这些标准共同构成了构建和运营一个互操作性强、安全可靠的PKI系统(如GM/T 0034所描述的证书认证系统)所必需的技术基础。
二、已合并或废弃的PKCS标准
-
PKCS #2 – RSA Encryption of Message Digests
-
内容:专门定义了如何使用 RSA 算法来加密消息摘要(即数字签名)。
-
现状:其功能被完全合并并纳入到 PKCS #1 中。现在 PKCS #1 中的
RSASSA-PKCS1-v1_5和RSASSA-PSS签名方案就是它的继承者。因此#2已被撤销。
-
-
PKCS #4 – RSA Key Syntax
-
内容:专门定义了 RSA 公钥和私钥的语法(ASN.1 结构)。
-
现状:其内容同样被完全合并到 PKCS #1 中。现在 PKCS #1 的第7章 “
语法” 明确定义了 RSA 公钥 (RSAPublicKey) 和私钥 (RSAPrivateKey) 的结构。因此#4也被撤销。
-
-
PKCS #6 – Extended-Certificate Syntax Standard
-
内容:定义了一种“扩展证书”格式,它在 X.509 证书的基础上增加了一组可被签名的属性。
-
现状:这个标准试图解决证书携带额外属性(如发证策略)的需求。然而,这项功能后来被更灵活、更通用的 X.509 v3 证书的扩展项机制 完美取代。因此 PKCS #6 已被淘汰和废弃。
-
三、已被其他标准和技术取代的PKCS标准
-
PKCS #3 – Diffie-Hellman Key Agreement Standard
-
内容:定义了 Diffie-Hellman 密钥协商协议的参数和密钥的 ASN.1 语法。
-
现状:虽然 DH 协议本身仍然重要且在使用,但其标准化工作已被纳入更广泛的框架中。例如,在 RFC 3279 (Algorithms and Identifiers for PKIX) 和 RFC 7919 (Negotiated FF DHE for TLS) 等 IETF 标准中对其进行了定义。作为独立的 PKCS 标准,它已不再活跃。
-
-
PKCS #5 – Password-Based Cryptography Standard
-
内容:定义了一系列基于口令(密码)的密码学标准,核心是 PBKDF1 和 PBKDF2 (Password-Based Key Derivation Function) 算法。
-
现状:PKCS #5 v2.1 仍然是一个重要且被广泛引用的标准,尤其是在从弱口令生成强加密密钥的场景。然而,它后来被采纳为 IETF 的 RFC 8018。所以,虽然它的思想和算法依然至关重要,但“PKCS #5”这个标签在最新语境下可能不如“RFC 8018”或直接说“PBKDF2”常见。它并未消失,而是“升级”并融入了更广泛的互联网标准体系。
-
-
PKCS #9 – Selected Attribute Types
-
内容:定义了一组在 PKCS #6, #7, #8, #10 等标准中通用的、可选的属性类型(如
challengePassword,unstructuredName,contentType等)。 -
现状:这些属性定义非常有用,被广泛实现。后来,这些属性的绝大部分被吸收并标准化到了 IETF 的 PKIX 工作组 的相关文档中。例如,在 RFC 2985 (PKCS #9) 中仍有定义,但它已更多地被视为 PKIX (X.509) 标准体系的一部分,而非独立的 PKCS 标准。
-
总结表格
| 缺失编号 | 标准名称 | 现状与原因 |
|---|---|---|
| PKCS #2 | RSA消息摘要加密 | 被合并,功能纳入 PKCS #1(签名方案)。 |
| PKCS #3 | DH密钥协商 | 被取代,由 IETF RFC 标准(如RFC 3279, 7919)定义。 |
| PKCS #4 | RSA密钥语法 | 被合并,内容纳入 PKCS #1(密钥结构)。 |
| PKCS #5 | 基于口令的密码学 | 被采纳升级,成为 IETF RFC 8018,PBKDF2算法仍极重要。 |
| PKCS #6 | 扩展证书语法 | 被淘汰,被 X.509 v3 证书扩展项 完全取代。 |
| PKCS #9 | 选定属性类型 | 被吸收,属性定义融入 IETF PKIX (X.509) 标准体系。 |
结论:
PKCS 标准系列在90年代初期推出时编号连续,但随着密码学技术和公钥基础设施(PKI)的快速发展,部分标准因功能重叠、技术过时或被更优方案取代而自然消亡。其核心思想和技术要么被合并到更基础的标准(如#1),要么被更广泛的国际标准(如IETF RFC)所吸收和演进。


被折叠的 条评论
为什么被折叠?



