...

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 硬件加密接口

协议标准与证书、私钥、公钥大致关系#

X.509_PKCS_RFC

PKCS公钥密码学标准#

OID: 1.2.840.113549.1

PKCS#1#

公钥密码学标准#1 OID: 1.2.840.113549.1.1

相关编码#

rfc2437

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#

rfc5208

相关编码#

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#

rfc5915

相关编码#

椭圆曲线私钥编码格式

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,并发送原文链接。

posted @   韩志超  阅读(336)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!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自动化测试实战规划
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu