目录
1. CryptoDriver里KeyElement格式
2. 挖掘RFC标准
2.1 RFC是什么
2.2 PKCS是什么
3.小结
为什么再发一遍,只能说人到中年不能熬夜,昨天的文章没写完就发了。
1. CryptoDriver里KeyElement格式
在
CryptoKeyElement 配置项里,我们会发现有format这类格式,如下图:
CRYPTO_KE_FORMAT_BIN_OCTET
|
以BIN形式提供八位字节值的Key
|
CRYPTO_KE_FORMAT_BIN_SHEKEYS
|
用于SHE key更新的组合Key
|
CRYPTO_KE_FORMAT_BIN_IDENT_PRIVATEKEY_ PKCS8
|
ASN.1定义的带ID的私钥格式(BER编码),以BIN形式提供
|
CRYPTO_KE_FORMAT_BIN_IDENT_PUBLICKEY
|
ASN.1定义的带ID的公钥格式(BER编码),以BIN形式提供
|
CRYPTO_KE_FORMAT_BIN _RSA_PRIVATEKEY
|
ASN.1定义的私钥格式(BER编码),以二进制提供
|
CRYPTO_KE_FORMAT_BIN _RSA_PUBLICKEY
|
ASN.1定义的公钥格式(BER编码),以二进制提供
|
可以看到,针对非对称密钥对的格式,是可以选择是否带ID的,而这所有的一切都源于ASN.1。
-
ASN.1(Abstract Syntax Notation One)是一种用于描述数据结构的标记语言,最初由国际电信联盟(ITU-T)定义,用于在计算机网络和通信协议中描述数据格式。ASN.1提供了一种独立于具体编程语言的方式来描述数据结构,使得不同系统之间可以共享和理解数据。
-
ASN.1的编码规则有多种,其中最常见的是BER(Basic Encoding Rules)、DER(Distinguished Encoding Rules)和PER(Packed Encoding Rules)。这些编码规则定义了如何将ASN.1中定义的数据类型编码为二进制格式,并在需要时进行压缩以减少数据传输的大小。
2. 挖掘RFC标准
那么上述KeyElement的格式应该长什么样?是否有关联标准?
参考【SWS_Crypto_00184-00188】,汇总如下:
CRYPTO_KE_FORMAT_BIN_IDENT_PRIVATEKEY_ PKCS8
|
RFC5958
|
CRYPTO_KE_FORMAT_BIN_IDENT_PUBLICKEY
|
RFC5280
|
CRYPTO_KE_FORMAT_BIN _RSA_PRIVATEKEY
|
RFC8017
|
CRYPTO_KE_FORMAT_BIN _RSA_PUBLICKEY
|
RFC5280
|
老规矩,先从RFC是什么开始说起,
RFC是“Request for Comments”的缩写,本身它是一系列文件,描述了互联网的各种协议、技术规范、方法。它们由互联网工程任务组(IETF)发布,并由网络社区进行讨论和审查。
RFC最初是作为IETF工作文档和标准的一种形式,但后来成为了一个广泛接受的标准和参考文档的集合。每个RFC都有一个唯一的数字标识符,例如
-
RFC5280 : Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile
-
RFC5958 : Asymmetric Key Packages
-
RFC8017 : PKCS #1: RSA Cryptography Specifications Version 2.2
有了这个基本概念,问题紧跟着就来了,PKCS是啥?
2.2 PKCS是什么
PKCS 全称 Public key cryptography standards,是一组标准协议,截至目前编号从1到15。制定这些标准是为通过公钥基础设施(PKI)进行的所有通信提供了一个框架和结构。它们提供了抽象的语法和算法细节,可以跨不同的技术进行调整。
先汇总如下:
PKCS#1 –
RSA cryptography standard
基本标准,用于定义公钥和私钥的语法、消息和数字签名的格式、用于每个级别的加密和解密的不同算法以及数字证书的格式该标准在2012年重新发布为RFC 8017
PKCS#2 –RSA message digest standard
创建和加密消息摘要,在2010年被撤销,与PKCS#1合并
PKCS#3 – Diffie-Helman key agreement standard
密钥协商,定义了DH密钥交换标准
PKCS#4 – RSA key syntax standard
RSA所使用的key语法,2010年被撤销,与PKCS#1合并
PKCS#5 – Password-based cryptography standard
定义了密码的加密标准,如PBKDF2(Password-Based Key Derivation Function 2)算法
,同时也发布为RFC 2898
PKCS#6 – Extended-certificate syntax standard
提供用于扩展和修改数字证书中建立属性的语法;这个标准在X.509的第三个版本中被撤销
PKCS#7 – Cryptographic message syntax standard
指定存储的加密数据的语法。证书颁发机构使用pkcs# 7来存储它们颁发的数字证书
。
同时发布为RFC 2315
PKCS#8 – Private key information syntax standard
定义私钥的语法,通常与PKCS#5使用密码和盐值来存储私钥,发布为RFC 5208
PKCS#9 – Selected attribute types standard
定义了证书、签名和私钥所需的数据类型、长度和其他属性细节,但不提供证书的格式或密钥本身
PKCS#10 – Certification request syntax standard
定了发送给证书颁发机构(CA)请求数字证书的消息的格式,也称为证书签名请求。
PKCS#11 – Cryptographic token interface standard
定义了密钥Token接口,可以被Token生成器所使用
PKCS#12 – Personal information exchange syntax standard
定义了私钥、公钥证书的存储方式,个人信息交换语法等
PKCS#13 – Elliptic curve cryptography standard
定义了椭圆曲线的加密标准
PKCS#14 – Pseudo-random number generation standard
伪随机数生成标准
PKCS#15 – Cryptographic token information format standard
定义了存储在加密令牌(如集成电路卡)上的加密凭证的格式
可以看到,PKCS和RFC尽管是由不同的组织发布并服务于不同的目的,但它们之间关系是比较密切的。
PKCS:
-
PKCS由RSA安全公司(现在是威瑞森公司的一部分)开发和维护。
-
PKCS是一系列标准,旨在定义和推广公钥密码学方面的算法、协议和格式。
-
PKCS标准通常与加密、数字签名、数字证书等安全技术相关。
-
PKCS标准的制定是由RSA安全公司根据自己的需求和标准制定过程来完成的。
RFC:
-
RFC由IETF(Internet Engineering Task Force)发布。
-
RFC是一系列文档,旨在描述和定义互联网协议、技术规范和最佳实践
-
RFC文档涵盖了广泛的主题,包括网络协议、安全协议、标准化过程等。
-
RFC文档的制定是由IETF社区成员共同参与、讨论和审查的结果。
因此,尽管它们服务于不同的目的,但PKCS和RFC之间的交叉影响是存在的,特别是在公钥密码学和网络安全领域
往期回顾: