PKI格式标准

2个PKI应用程序之间想要进行交互,只有互相理解对方发来的数据的比特含义才行。标准提供了数据语法和语义的共同约定。
最流行的PKI应用程序标准是X.509标准,因为它定义了公钥证书的基本结构。RSA实验室的PKCS标准是定义数据比特含义的主要标准。这些标准定义了如何恰当地格式化私钥或者公钥。
其他重要的标准包括PKIX证书和CRL概要文件、IEEE P1363项目对密码算法的定义以及IETF工作组研究的XML数字签名。

X.509

X.509是国际电信联盟-电信ITU-T部分标准和国际标准化组织ISO的证书格式标准。
作为ITU-ISO目录服务系列标准的一部分,X.509定义了公钥证书结构的基本标准。
该标准于1988年首次发布,1993和1996年2次修订,当前版本是X.509v3。它加入了扩展字段支持,这极大地增进了证书的灵活性。
X.509v3证书包括一组按预定义顺序排列的强制字段,还有可选扩展字段。即使在强制字段中,X.509证书也允许很大的灵活性,因为它为大多数字段提供了多种编码方案。

PKIX

IETF的安全领域的公钥基础设施PKIX工作组正在为互联网上使用的公钥证书定义一系列的标准。
PKIX工作组在1995年10月形成,目的是要开发必须的互联网标准来支持可互操作的PKI。工作组的第1项任务是要创建1个概要文件,把证书数据结构、扩展域和数据取值限定在1个特定的可选范围内。
X.509标准的巨大灵活性使得互操作难以实现,PKIX工作组希望通过限制允许的选项,提供PKI系统间的互操作性。
PKIX工作组定义了公钥证书及CRL的概要文件。在一些情况下,它还定义了其他的证书扩展字段或证书属性,还有这些属性的对象标识。
PKIX也正在开发新的协议以便于PKI生命周期中自始至终对PKI信息的管理。其中包括证书管理协议CMP,安全多用途邮件扩展S/MIME和在线证书状态协议OCSP。

IEEE P1363

IEEE的P1363项目开始于1994年,目的是开发密码学标准,包括公钥密码学的标准规范。项目开始时只是规定了RSA和Diffie Hellman算法的数学原语和密码技术,后来扩宽了其研究领域,又加入了椭圆曲线密码系统。
尽管P1363工作组的工作不局限于格式标准的制定,但该标准的制定对保证PKI户操作性非常重要,因为它为不同算法系统,比如离散对数、整数因数分解、椭圆曲线提供了一系列通用公钥技术的参考规范,这些技术包括如密钥协定、公钥加密、数学签名和身份认证。
它还涉及需要考虑的相关密码问题,如密钥管理和安全随机数生成。

PKCS

公钥密码标准PKCS最初是推进公钥密码系统的互操作性,它是由RSA实验室与工业界、学术界和政府代表合作开发的。
在RSA带领下,PKCS的研究随着时间不断发展,它涉及了不断发展的PKI格式标准、算法和应用程序接口。
PKCS标准提供了基本的数据格式定义和算法定义,它们实际是今天所有PKI实现的基础。
PKCS的标准如下所示。

PKCS#1 RSA加密标准

PKCS#1定义了RSA公钥函数的基本格式标准,特别是数字签名。
它定义了数字签名如何计算,包括待签名数据和签名本身的格式,它也定义了RSA公/私钥的语法。

PKCS#2

PKCS#2涉及了RSA的消息摘要加密,这已被并入PKCS#1中。

PKCS#3 Diffie-Hellman密钥协议标准

PKCS#3描述了1种实现Diffie-Hellman密钥协议的方法。

PKCS#4

PKCS#4最初是规定RSA密钥语法的,现在已经被包含进PKCS#1中。

PKCS#5 基于口令的加密标准

PKCS#5描述了使用由口令生成的密钥来加密8位位组串并产生1个加密的8位位组串的方法。PKCS#5可以用于加密私钥,以便于密钥的安全传输(这在PKCS#8中描述)。

PKCS#6 扩展证书语法标准

PKCS#6定义了提供附加实体信息的X.509证书属性扩展的语法。
当PKCS#6第1次发布时,X.509还不支持扩展。这些扩展因此被包括在X.509中。

PKCS#7 密码消息语法标准

PKCS#7为使用密码算法的数据规定了通用语法,比如数字签名和数字信封。
PKCS#7提供了许多格式选项,包括未加密或签名的格式化消息、已封装(加密)消息、已签名的消息和既经过签名又经过加密的消息。

PKCS#8 私钥信息语法标准

PKCS#8定义了私钥信息语法和加密私钥语法,其中私钥加密使用了PKCS#5标准。

PKCS#9 可选属性类型

PKCS#9定义了PKCS#6扩展证书、PKCS#7数字签名消息、PKCS#8私钥信息和PKCS#10证书签名请求中要用到的可选属性类型。
已定义的证书属性包括e-mail地址、无格式姓名、内容类型、消息摘要、签名时间、签名副本(counter signature)、质询口令字和扩展证书属性。

PKCS#10 证书请求语法标准

PKCS#10定义了证书请求的语法。证书请求包含了1个唯一识别名、公钥和可选的一组属性,它们一起被请求证书的实体签名。
证书管理协议中的PKIX证书请求消息就是1个PKCS#10。

PKCS#11 密码令牌接口标准

PKCS#11或Cryptoki为拥有密码信息(如加密密钥和证书)和执行密码学函数的单用户设备定义了1个应用程序接口(API)。
智能卡就是实现Cryptoki的典型设备。注意Cryptoki定义了密码函数接口,并未指明设备具体如何实现这些函数。
而且Cryptoki只说明了密码接口,并未定义对设备来说可能有用的其他接口,如访问设备的文件系统接口。

PKCS#12 个人信息交换语法标准

PKCS#12定义了个人身份信息(包括私钥、证书、各种秘密和扩展字段)的格式。
PKCS#12有助于传输证书及对应的私钥,于是用户可以在不同设备间移动他们的个人身份信息。

PKCS#13 椭圆曲线密码标准

PKCS#13标准当前正在开发,它包括椭圆曲线参数的生成的验证、密钥生成和验证、数字签名和公钥加密,还有密钥协定以及参数、密钥和方案标识的ASN.1语法。

PKCS#14 伪随机数产生标准

PKCS#14标准当前正在开发。为什么随机数生成也需要建立自己的标准?
PKI中用到的许多基本的密码学函数,如密钥生成和Diffie-Hellman共享密钥协商,都需要使用随机数。
然而,如果随机数不是随机的,而是取自1个可预测的取值集合,那么密码学函数就不再是绝对安全的了。因为它的取值被限于1个缩小了的值域中,因此安全伪随机数的生成对于PKI的安全极为关键。

PKCS#15 密码令牌信息语法标准

PKCS#15通过定义令牌上存储的密码对象的通用格式来增进密码令牌的互操作性。
在实现PKCS#15的设备上存储的数据对使用该设备的所有应用程序来说都是一样的,尽管实际上在内部实现时可能所用的格式不同。
PKCS#15的实现扮演了翻译家的角色,它在卡的内部格式与应用程序支持的数据格式间进行转换。

XML

可扩展标记语言是定义数字数据格式的灵活手段。XML的1个自然用途就是定义签名数据对象的格式。
IEFT的XML数字签名工作组意识到这一点,因而正在定义可以增进签名数据对象互操作性的XML元素。
IEFT工作的基本思想是XML签名可以被用于任何的数据对象。签名者首先计算数据对象(实际上包括了所有的数据类型)的摘要,把摘要放入1个XML元素,对这个元素计算摘要和数字签名。
XML签名元素作为被签名数据的划分标记,也可以包含与签名相关的其他信息,如时间戳。

参考书籍:

《公钥基础设施PKI:实现和管理电子安全》P198-202

若文章对您有帮助,请打赏1块钱。您的支持,可以让我分享更多精彩的文章。转载请注明来源


知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。