接触过密码学的童鞋可能都听说或接触过PKCS #1, PKCS #7, PKCS #8, PKCS #12等等,或许你早已了解PKCS就是指公钥密码标准(Public Key Cryptography Standards),而这篇博客将带你系统的了解一下整个PKCS规范。
概览
PKCS即公钥密码标准(Public Key Cryptography Standards),它是由美国RSA实验室与遍布全球的安全系统开发者一起合作指定的一组规范,以推动公钥密码的发展。最早发布的PKCS文档是早期一群公钥技术使用者在1991年召开的一次会议的成果。目前PKCS规范早已被广泛的应用和实施,部分PKCS规范已经成为多个国际组织正式或事实上的标准,如ANSI X9文档系列,PKIX,SET,S/MIME,SSL等。PKCS系列主要包括以下标准。
名称 | RFC | |
---|---|---|
PKCS #1 | RSA Cryptography Standard (RSA密码标准) | RFC 3447 |
PKCS #2 | 已撤销,用以规范RSA加密摘要的转换方式,已并入PKCS #1 | - |
PKCS #3 | Diffie–Hellman Key Agreement Standard (DH秘钥协商标准) | - |
PKCS #4 | 已撤销,用以定义RSA秘钥的格式,已并入PKCS #1 | - |
PKCS #5 | Password-based Encryption Standard (基于口令的密码标准) | RFC 2898 |
PKCS #6 | Extended-Certificate Syntax Standard (扩展的证书语法标准) | - |
PKCS #7 | Cryptographic Message Syntax Standard (密码消息语法标准) | RFC 2315 |
PKCS #8 | Private-Key Information Syntax Standard (私钥信息语法标准) | RFC 5958 |
PKCS #9 | Selected Attribute Types (可供选择的属性类型) | RFC 2985 |
PKCS #10 | Certification Request Standard (证书请求语法标准) | RFC 2986 |
PKCS #11 | Cryptographic Token Interface (密码Token接口标准) | - |
PKCS #12 | Personal Information Exchange Syntax Standar (个人信息交换语法标准) | RFC 7292 |
PKCS #13 | Elliptic Curve Cryptography Standard (椭圆曲线密码标准),正在制定中 | |
PKCS #14 | Pseudo-random Number Generation (伪随机数生成算法PRNG),正在制定中 | |
PKCS #15 | Cryptographic Token Information Format Standard (密码Token信息格式标准) |
简介
PKCS #1
PKCS #1 v2.1定义了基于RSA公钥算法的加密解密和签名验签机制,主要包括以下内容:
- 秘钥类型:
- 公钥
- 私钥
- 数据转换原子操作: 在数学公式中遇到的潜在大型非负整数与其计算机数据表示形式之间的转换,作为字节序列(一个字节字符串)
- 12OSP (Integer-to-Octet-String primitive)
- OS2IP (Otter-String-to-Integer primitive)
- 密码原子操作:
- 加密RSAEP,解密RSADP : 基本的加密和解密算法
- 签名RSASP1,验签RSAVP1 : 用于生成和验证签名的算法
- 加密解密方案:
- RSAES-OAEP: 改进的加密/解密方案; 基于Mihir Bellare和Phillip Rogaway提出的最佳非对称加密填充方案。
- RSAES-PKCS-v1_5 : 在PKCS#1版本1.5中首次标准化的较早的加密/解密方案。
- 签名验签方案:
- RSASSA-PSS : 改进的带有附录的概率签名方案; 基于Bellare和Rogaway最初发明的概率签名方案 。
- RSASSA-PKCS-v1_5:带有附录的旧签名方案,在PKCS#1版本1.5中首次标准化。
- 签名编码方法:
- EMSA-PSS:签名附件的编码方法,概率签名方案。
- EMSA-PKCS-v1_5 :PKCS#1版本1.5中首次标准化的签名附录的编码方法。
PKCS #3
PKCS #3 v1.4描述了一种基于DH算法进行密钥协商的方法。无需预先沟通,交易双发就可以协商出一个只有双方知道的秘密密钥,该密钥可以对后续双方的数据通信进行加密保护。
PKCS #5
PKCS #5 v2.0 描述了一种基于口令产生对称密钥的方法。使用MD2或MD5从口令中派生密码,采用DES的CBC模式加密。这个功能主要用于加密从一个计算机传送到另一个计算机的私人密钥,而不是用于加密消息。主要包括:
- 密钥获取函数:
- PBKDF1
- PBKDF2
- 加密解密方案:
- PBES1
- PBES2
- 消息认证方案:
- MAC产生
- MAC验证
PKCS #6
PKCS #6 v1.5描述扩展证书的语法格式。该扩展证书只是对X.509格式进行了扩展,并兼容X.509证书格式。
PKCS #7
PKCS #7 v1.5 描述了密码消息的通用语法。该语法允许嵌套,如一个数字信封可以包含另外一个数字信封,或可以对自己做数字信封的数据进行签名;该语法也允许扩展各种属性,还可以用于分发证书和CRL。
PKCS #7与PEM兼容,可以直接将加密的消息转换成PEM消息,反正亦然。PKCS #7 支持多种基于证书的管理系统,PEM就是其中之一。在RFC 5652中有增强定义。该标准主要包括消息通用语法和6种内容类型(明文、签名、信封、签名信封、摘要、密文)。
PKCS #8
PKCS #8 v1.2描述私钥信息的语法格式。私钥信息包括私钥和一组属性。该标准还描述了私钥密文语法,且允许使用基于口令的加密算法来加密私钥。在RFC 5208中又重新定义。
PKCS #9
PKCS #9 v2.0 定义了两个新的辅助对象类(pkcsEntity和naturalPerson)和精选的属性类型(基于这两个对象类)。
PKCS #10
PKCS #10 v1.7 描述了证书请求的语法格式。证书请求包括DN名字、公钥和一组可选的属性,以及请求方对上述信息的签名。一个证书请求包括可辨别名、公开密钥和(可选的)一组属性,所有这些均由请求证书的用户签名。证书请求被发送给CA,由CA基于证书请求中的内容签发数字证书。在RFC2986中重新定义。
PKCS #11
PKCS #11 v2.2 定义了与密码令牌(如硬件安全模块(HSM)和智能卡)的独立于平台的API。主要内容包括:
- 通用数据类型(General Data Types)
- 对象 (Objects)
- 函数(Functions)
- 机制(Mechanisms)
PKCS #12
PKCS #12 v1.0 描述了用于存储和传递个人身份信息的语法格式。个人身份信息包括私钥、证书、各种秘密以及扩展等。支持本标准的机器设备、应用系统、浏览器、上网亭(Internet Kiosk)等应允许用户导入、导出和操作这种格式的个人身份信息。它的目标是为各种应用提供一个标准的单一秘钥文件。常见的PFX文件就是遵循PKCS #12格式的文件。
PKCS #15
PKCS #15v1.1 描述了存储于密码Token中密码凭证的一种格式标准,允许密码令牌的用户向应用程序标识自己。此标准独立于PKCS #11接口和其他API、RSA已经放弃了这个标准的IC卡相关部分,并提交给了ISO/IEC 7816-15。
实例
在后续的学习过程中将补充一些实例来更加深入了解这些规范,先挖个坑~
参考资料
- PKI/CA与数字证书技术大全