什么是 PKCS?
PKCS(Public-Key Cryptography Standards,公钥加密标准)是由 RSA 实验室(RSA Laboratories)于 1990 年代初与全球安全开发者共同制定的一系列标准。
当时,公钥密码学(如 RSA)刚开始商业化,但缺乏统一的实现规范。PKCS 的诞生解决了互操作性问题,使不同的软件和系统能够安全地交换证书、密钥和加密数据。
核心 PKCS 规范一览
PKCS 系列最初包含 15 个标准(PKCS #1 到 PKCS #15),虽然部分标准已被合并或由 IETF 的 RFC 替代,但以下几个在现代网络安全中依然至关重要:
1. PKCS #1:RSA 加密标准 (RSA Cryptography Standard)
- 核心作用:定义了 RSA 公钥和私钥的数学结构,以及 RSA 加密、解密、签名和验签的算法与填充模式(如 PKCS#1 v1.5、OAEP、PSS)。
- 地位:是现代 HTTPS/TLS 证书和 SSH 的底层基石。
2. PKCS #7:密码消息语法标准 (Cryptographic Message Syntax)
- 核心作用:定义了传输加密或签名数据的通用格式。
- 常见应用:广泛用于S/MIME(安全电子邮件)、数字签名(如 Windows 代码签名)以及包中继。它的现代演进版由 IETF 维护,称为CMS (RFC 5652)。
3. PKCS #11:密码令牌接口标准 (Cryptographic Token Interface)
- 核心作用:定义了一个名为Cryptoki的 API 接口。它允许应用程序与硬件安全模块(HSM)、智能卡(Smart Cards)或 USB Key 等外部硬件密码设备进行交互,而无需关心硬件的底层驱动。
- 地位:硬件安全领域的绝对行业标准。
4. PKCS #12:个人信息交换语法标准 (Personal Information Exchange Syntax)
- 核心作用:定义了一种文件格式,用于将私钥与对应的公钥证书打包存储在一起,并用密码进行保护。
- 文件后缀:
.pfx或.p12。 - 常见应用:在服务器间迁移 SSL 证书,或在浏览器中导入个人证书。
其他重要 PKCS 规范汇总
| 标准编号 | 名称与核心用途 | 当前状态 / 替代方案 |
|---|---|---|
| PKCS #3 | Diffie-Hellman 密钥交换标准 | 已部分融入 TLS 协议规范 |
| PKCS #5 | 基于密码的加密标准(定义了PBKDF2密码哈希算法) | 广泛用于金钥衍生和密码存储 |
| PKCS #8 | 私钥信息语法标准(定义了私钥的存储格式,如通常看到的---BEGIN PRIVATE KEY---) | 现代私钥存储的标准格式 |
| PKCS #9 | 扩展属性类型(定义了证书和签名中使用的属性,如电邮地址、签名时间等) | 由 IETF 维护 |
| PKCS #10 | 证书请求语法标准(定义了CSR,证书签名请求的格式) | 申请 SSL 证书时的标准提交格式 |
💡注:PKCS #2 和 #4 已并入 PKCS #1;PKCS #6 已被 X.509 v3 证书替代;PKCS #13 和 #14 涉及椭圆曲线和伪随机数,目前较少单独提及;PKCS #15 规范了智能卡上的密码信息布局。
总结
PKCS 系列规范如同密码学世界的“度量衡”。虽然诞生于 RSA 公司,但如今它们大多已转化为 IETF 的 RFC 国际标准。正是因为有了 PKCS 的规范,数字证书、数据加密和硬件安全设备才能在庞大的互联网生态中实现无缝的互联互通。