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页并不仅限于硬件加密机接口。
作者:韩志超
出处:https://www.cnblogs.com/superhin/p/18308302/x509_pkcs_rfc
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
如有问题,请微信联系 superz-han,并发送原文链接。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2021-07-17 Selenium Cookbook规划
2021-07-17 Selenium中如何抓取网络请求响应及WebSocket信息
2021-07-17 Web自动化测试框架实战-基于unittest
2021-07-17 Python自动化测试实战规划