X.509、PKCS公钥密码学标准及常见RFC
简介
- X.509: 公钥证书的格式标准,应用于包括TLS/SSL在内的众多网络协议;
- PKCS:即Public Key Cryptography Standards-公钥密码学标准。是由美国 RSA 数据安全公司及其合作伙伴制定的一组公钥密码学标准,其中包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等方面的一系列相关协议,PKCS目前包含了 PKCS#1~ PKCS#15 15项标准,其中PKCS#2及PKCS#4由于已被纳入PKCS#1中已弃用。
- RFC:即Request For Comments-网络标准协议草案,目前已包含了上千种协议草案。
X.509及PKCS公钥密码学标准
标准 | 简介 | 对应RFC协议 | 编码格式 | 常见扩展名 | 应用 |
---|---|---|---|---|---|
X.509 |
公钥证书标准 | rfc5280 | PEM / DER | .crt、.cer、.ca | 证书、CA证书、通用公钥 |
PKCS#1 |
RSA密码标准 | rfc2437 | PEM / DER | .key、.pem、.rsa | RSA私钥、RSA公钥、RSA签名 |
PKCS#3 |
DH密钥交换协议 | rfc2631 | TLS握手 | ||
PKCS#5 |
私钥加密标准 | rfc2898 | 私钥加密 | ||
PKCS#6 |
证书扩展项标准 | rfc2315 | X.509证书扩展项 | ||
PKCS#7 |
签名及签名数据标准 | rfc2315 | PEM / DER | .p7b、.p7r、.p7c、.p7m、.p7s | 签名、签名数据、证书吊销列表 |
PKCS#8 |
通用私钥标准 | rfc5208 | PEM / DER | .key、.pem、.der | 通用私钥 |
PKCS#9 |
扩展属性标准 | rfc2985 | .key、.pem | 证书扩展项、私钥、签名 | |
PKCS#10 |
证书签名请求标准 | rfc2986 | PEM / DER | .csr、.p10 | 证书签名请求(CSR) |
PKCS#11 |
硬件加密接口标准 | 硬件加密机 | |||
PKCS#12 |
个人消息交换标准(私钥+证书) | rfc7292 | .p12、.pfx | 加密私钥+证书 | |
PKCS#13 |
椭圆曲线密码标准 | rfc5915 | .key、.pem | 椭圆曲线(EC)私钥 | |
PKCS#14 |
拟随机数生成标准 | 加密、签名中的随机数 | |||
PKCS#15 |
密码令牌信息格式标准 | ISO/IEC 7816-15 | 硬件加密接口 |
协议标准与证书、私钥、公钥大致关系
PKCS公钥密码学标准
OID: 1.2.840.113549.1
PKCS#1
公钥密码学标准#1 OID: 1.2.840.113549.1.1
相关编码
RSA私钥编码格式
RSAPrivateKey ::= SEQUENCE {
version Version,
modulus INTEGER, -- n
publicExponent INTEGER, -- e
privateExponent INTEGER, -- d
prime1 INTEGER, -- p
prime2 INTEGER, -- q
exponent1 INTEGER, -- d mod (p-1)
exponent2 INTEGER, -- d mod (q-1)
coefficient INTEGER, -- (inverse of q) mod p
otherPrimeInfos OtherPrimeInfos OPTIONAL
}
RSA公钥编码格式
RSAPublicKey ::= SEQUENCE {
modulus INTEGER, -- n
publicExponent INTEGER, -- e
}
相关对象标识
名称 | OID | |
---|---|---|
1.2.840.113549.1.1 | pkcs-1 | 公钥密码标准#1 |
1.2.840.113549.1.1.1 | rsaEncryption | RSA加密及签名 |
1.2.840.113549.1.1.2 | md2WithRSAEncryption | 结合MD2的消息摘要的RSA加密 |
1.2.840.113549.1.1.3 | md4withRSAEncryption | 结合MD4的消息摘要的RSA加密 |
1.2.840.113549.1.1.4 | md5WithRSAEncryption | 结合MD5的消息摘要的RSA加密 |
1.2.840.113549.1.1.5 | sha1-with-rsa-signature | 结合SHA1哈希算法和RSA的签名 |
1.2.840.113549.1.1.6 | rsaOAEPEncryptionSET | 结合最佳非对称加密填充(OAEP)的RSA加密集 |
1.2.840.113549.1.1.7 | id-RSAES-OAEP | 结合最佳非对称加密填充的(OAEP)RSA公钥加密方案 |
1.2.840.113549.1.1.8 | id-mgf1 | 结合掩码生成器函数 (MGF1)的RSA算法 |
1.2.840.113549.1.1.9 | id-pSpecified | 基于RSA算法的特性方案 |
1.2.840.113549.1.1.10 | rsassa-pss | RSA带附录的概率签名方案 |
1.2.840.113549.1.1.11 | sha256WithRSAEncryption | 结合SHA256哈希算法的RSA加密 |
1.2.840.113549.1.1.12 | sha384WithRSAEncryption | 结合SHA348哈希算法的RSA加密 |
1.2.840.113549.1.1.13 | sha512WithRSAEncryption | 结合SHA512哈希算法的RSA加密 |
1.2.840.113549.1.1.14 | sha224WithRSAEncryption | 结合SHA224哈希算法的RSA加密 |
PKCS#8
相关编码
PrivateKeyInfo ::= SEQUENCE {
version VERSION,
privateKeyAlgorithm SEQUENCE {
algorithm OBJECT IDENTIFIER,
parameters ANY
},
privateKey OCTET STRING,
attributes SET OF OPTIONAL
}
例如
PrivateKeyInfo:
version=v1
privateKeyAlgorithm=AlgorithmIdentifier:
algorithm=1.2.840.10045.2.1
parameters=0x06082a8648ce3d030107
privateKey=0x306b0201010420b6fd5d544f09a3e0b6604b4dfbac6264c307300258420c3fb1b8eedb544a0719a1440342000420be56c478e4ff209ccc43e533170b49262ab0eb38ba11b396ad05427231e2e26bbc3688aba86dfad753d950277c34cd6f286425659f082a5ef667952108fa85
PKCS#13
相关编码
椭圆曲线私钥编码格式
ECPrivateKey ::= SEQUENCE {
version INTEGER,
privateKey OCTET STRING,
parameters CHOICE OPTIONAL,
publicKey BIT STRING OPTIONAL
}
例如:
ECPrivateKey:
version=ecPrivkeyVer1
privateKey=0xb6fd5d544f09a3e0b6604b4dfbac6264c307300258420c3fb1b8eedb544a0719
parameters=ECParameters:
namedCurve=1.2.840.10045.3.1.7
publicKey=55346148566235007019366148145582934212029111162400636479433293193372440464815863465406199677738031681986384378401592422838283150086311760450437229027326597
参考
注:其中X.509中也包含了证书中公钥扩展项的标准,也可以作为公钥格式标准,PKCS#14拟随机数并不仅限于签名生成,PKCS#15页并不仅限于硬件加密机接口。