标准名称简介
PKCS #1RSA密码标准
(RSA Cryptography Standard)
PKCS#1定义了RSA公钥函数的基本格式标准,是RSA密码算法的“专属标准”,只服务于RSA算法。它定义了数字签名如何计算,包括待签名数据和签名本身的格式;它也定义了PSA公/私钥的语法,提供了基于RSA算法的公钥加密实现的建议。PKCS#1中RSA公钥以“-----BEGIN RSA PUBLIC KEY-----”开头,私钥以“-----BEGIN RSA PRIVATE KEY-----”开头。参见 RFC 8017。
PKCS #2弃用原本是用以规范 RSA 加密摘要的转换方式,现已被纳入 PKCS #1中。
PKCS #3Diffie-Hellman密钥协议标准
(Diffie-Hellman key agreement Standard)
PKCS#3描述了一种实现Diffie- Hellman密钥协议的方法。规范以Diffie-Hellman 协议为基础的密钥协议标准,可以让通讯双方通过协议,拟定一把会话密钥(Session key)。
PKCS #4弃用最初是规定RSA密钥语法的,现已经被包含进PKCS#1中。
PKCS #5基于口令的加密标准
(Password-based Encryption Standard)
PKCS#5描述了使用由口令生成的密钥来加密8位位组串并产生一个加密的8位位组串的方法。PKCS#5可以用于加密私钥,以便于密钥的安全传输(这在PKCS#8中描述)。参见 RFC 8018。
PKCS #6证书扩展语法标准
(Extended-Certificate Syntax Standard)
PKCS#6定义了提供附加实体信息的X.509证书属性扩展的语法(当PKCS#6第一次发布时,X.509还不支持扩展,因此这些扩展被包括在X.509中)。
PKCS #7密码消息语法标准
(Cryptographic Message Syntax Standard)
PKCS#7是一种“加密消息语法标准”,它为数字签名和数据加密定义了通用的数据格式。最常见的文件扩展名是.p7b或.p7r。它不包含私钥,这一点和PKCS#8正好互补。参见RFC 2315。作用包括:
1、数字签名:对数据进行签名,并附上签名者的证书链,以验证数据的完整性和来源。
2、数字信封:对数据进行加密,并将解密密钥用接收者的公钥加密后一起传送,保证数据机密性。
3、分发证书:一个特殊用法是只封装证书(不签名不加密),用于在系统间安全地分发证书。
PKCS #8私钥信息语法规范
(Private-Key Information Syntax Standard)
PKCS#8定义了私钥信息语法和加密私钥语法,是一个专注于私钥存储格式的标准,旨在安全地存储和传输私钥。它不限于RSA,也支持ECC、ED25519等多种算法的私钥,提供了良好的跨平台兼容性。它原生支持对私钥进行加密保护。在PEM格式文件中,未加密的私钥以“-----BEGIN PRIVATE KEY-----”开头,而加密后的私钥则以“-----BEGIN ENCRYPTED PRIVATE KEY-----”开头。常见的文件扩展名是.pem或.key。参见RFC 5208。
PKCS #9选择属性格式
(Selected Attribute Types)
定义 PKCS #6、7、8、10 的选择属性格式。PKCS#9定义了PKCS#6扩展证书、PKCS#7数字签名消息、PKCS#8私钥信息和PKCS#10证书签名请求中要用到的可选属性类型。已定义的证书属性包括E-mail地址、无格式姓名、内容类型、消息摘要、签名时间、签名副本(counter signature)、质询口令字和扩展证书属性。
PKCS #10证书申请标准
(Certification Request Standard)
PKCS#10定义了证书请求的语法,规范了向证书中心申请证书的 CSR(certificate signing request)的格式。证书请求包含了一个唯一识别名、公钥和可选的一组属性,它们一起被请求证书的实体签名(证书管理协议中的PKIX证书请求消息就是一个PKCS#10)。参见 RFC 2986。
PKCS #11密码令牌接口标准
(Cryptographic Token Interface (Cryptoki))
为密码硬件提供一个与设备无关的软件接口。如果没有PKCS #11,那么每个硬件厂商都将会有自己的专用API,软件开发者如果要支持多种硬件,就得为每一种硬件写不同的代码,非常麻烦。PKCS #11就是为“屏蔽硬件差异,统一软件接口”而生,硬件厂商提供一个符合PKCS #11标准的动态库(例如.dll或.so文件),软件只需要调用这套标准API即可操作该硬件,无需关心硬件差异。
PKCS #12个人信息交换语法标准
(Personal Information Exchange Syntax Standard)
PKCS#12定义了个人身份信息(包括私钥、证书、各种秘密和扩展字段)的格式。PKCS#12是一个“文件打包格式”,它的核心作用就是把私钥和对应的公钥证书(有时还包含整个证书链)打包进一个加密的、便携的单一文件中,它使用基于密码的加密来保护整个包的内容。通常扩展名为.p12或.pfx。
PKCS #13椭圆曲线密码标准
(Elliptic curve cryptography Standard)
规范以椭圆曲线密码学为基础所发展的密码技术应用。它包括椭圆曲线参数的生成和验证、密钥生成和验证、数字签名和公钥加密,还有密钥协定,以及参数、密钥和方案标识的ASN.1语法。
PKCS #14伪随机数生成器标准
(Pseudorandom Number Generation Standard)
PKCS#14标准当前正在完善之中。为什么随机数生成也需要建立自己的标准呢?PKI中用到的许多基本的密码学函数,如密钥生成和Diffie-Hellman共享密钥协商,都需要使用随机数。然而,如果“随机数”不是随机的,而是取自一个可预测的取值集合,那么密码学函数就不再是绝对安全了,因为它的取值被限于一个缩小了的值域中。因此,安全伪随机数的生成对于PKI的安全极为关键。
PKCS #15密码令牌信息语法标准
(Cryptographic Token Information Syntax Standard)
PKCS#15通过定义令牌上存储的密码对象的通用格式来增进密码令牌的互操作性。在实现PKCS#15的设备上存储的数据对于使用该设备的所有应用程序来说都是一样的,尽管实际上在内部实现时可能所用的格式不同。PKCS#15的实现扮演了翻译家的角色,它在卡的内部格式与应用程序支持的数据格式间进行转换。