在PKI体系中涉及到四类标准,下面做个简单介绍。


1.asn.1基本编码规范

Asn.1是描述在网络上传输信息格式的标准方法。它有两个部分:第一部分(X.208)描述信息内的数据、数据类型及序列格式,也就是数据的语法;第二部分(X.209)描述如何将各部分数据组成消息,也就是数据的基本编码规则(DER编码)。Asn.1原来是作为X.409的一部分而开发的,后来独立发展为一个标准。这两个协议除了在PKI体系中被应用外,还被广泛应用于通信和计算机的其他领域。

2.X.500目录服务

X.500是一套已经被国际标准化组织(ISO)接受的目录服务系统标准,它定义了一个机构如何在全局范围内共享其名字和与之相关的对象。X.500是层次性的,其中的管理域(机构、分支、部门和工作组)可以提供这些域内的用户和资源信息。在PKI体系中,X.500被用来唯一标识一个实体,该实体可以是机构、组织个人和一台服务器。X.500被认为是实现目录服务的最佳途径,但X.500的实现需要较大的投资,并且比其他方式速度慢。而其优势是具有信息模型、多功能和开放性。

3.PKIX

X.509是由国际电信联盟(ITU-T)制定的数字证书标准。在X.500确保用户名称唯一性的基础上,X.509为X.500用户名称提供了通信实体的鉴别机制,并规定了实体鉴别过程中广泛使用的证书语法和数据接口。X.509的最初版本公布于1988年。X.509证书由用户公共密钥和用户标示组成。此外还包括版本号、证书序列号、CA标识符、签名算法标识、签发者名称证书有效期等信息。这一标准的最初版本是X.509 V3,它定义了包含扩展信息的数字证书。该版数字证书提供了一个扩展信息字段,用来提供更多的灵活性及特殊应用环境下所需的信息传递。

PKIX系列标准(Public Key Infrastructure on X.509,简称PKIX)是由因特网网络工程技术小组(Internet Engineering Task Force,简称IETF)的PKI小组制定,PKIX标准化是建立互操作的基础。标准主要定义基于X.509的PKI框架模型,并以RFC形式发布。PKIX定义了X.509证书在Internet上的使用,包括证书的形成、发布和获取,各种产生和发布密钥的机制,以及怎样实现这些标准的轮廓结构等。IETF的PKI工作小组以RFC3280和X.509为基础,定义了多个RFC协议草案来诠释基于X.509的PKI的认证。PKIX系列协议标准可以分为以下几个部分:

(1)PKIX系列标准中的基础协议

PKIX基础协议是以RFC3280为核心,阐述了基于x.509的PKI框架结构,详细定义了x.509 V3 公钥证书和x.509 V2 CRL的格式、数据结构及操作步骤等。本质上,基于x.509 V3数字证书是一种发布者数字签名的用于绑定某种公开密钥和其持有者身份的数据结构,而CRL也是一种包含撤销证书列表的签名的数据结构。因此基于x.509的PKI功能的实现是基于数字证书和证书吊销列表的功能实现,而证书和证书吊销列表的功能是通过其证书数据域(CRL数据域)、扩展域(CRL扩展域)及其子域来实现的。因此在RFC3280中详细定义了数字证书的数据结构、CRL的数据结构。如其中的定义CRL数据结构:

CertificateList  ::=  SEQUENCE  {
       tbsCertList          TBSCertList,
       signatureAlgorithm   AlgorithmIdentifier,
       signatureValue       BIT STRING  }
      TBSCertList  ::=  SEQUENCE  {
       version      Version OPTIONAL,
       signature     AlgorithmIdentifier,
       issuer        Name,
       thisUpdate    Time,
       nextUpdate    Time OPTIONAL,
       revokedCertificates     SEQUENCE OF SEQUENCE  {
       userCertificate         CertificateSerialNumber,
       revocationDate         Time,
       crlEntryExtensions      Extensions OPTIONAL
       } 
       OPTIONAL,
       crlExtensions       [0]  EXPLICIT Extensions OPTIONAL
      }

PKIX通过对x.509 V3数字证书和x.509 V2 CRL进行详细的定义来保证有效地实现PKI安全框架的各种功能。PKIX中还通过RFC2528、RFC3039、RFC3279等多个协议草案(见下表),阐述了基于x.509的相关算法、算法标志和相关格式等用来加强x.509 V3公钥证书和x.509 V2CRL在各应用系统之间的通用性。

草案编号

协议内容

RFC3280

定义了X.509v3公钥证书和X.509v2 CRL格式、结构

RFC2528

阐述了基于X.509的密钥交换算法KEA(Key Exchange Algorithm)

RFC3039

描述用于防抵赖的高可信证书的格式和相关内容

RFC3279

描述了X.509v3公钥证书和X.509v2 CRL中使用基于asn.1的算法标志和算法的编码格式

(2)PKIX系列标准中的操作协议

PKIX的操作协议涉及CA/RA或端实体与证书库之间的交互。主要阐述了PKI系统中实体如何通过证书库来存放、读取证书和撤销证书。这些操作协议主要包括RFC2559、RFC2560、RFC2585、RFC2587等多个协议草案(见下表),定义了x.509 V3公钥证书和x.509 V2 CRL分发给应用系统的方式,以及通过包括基于LDAP、HTTP、FTP等的多种手段获取公钥证书和CRL的方式。其中LDAP是关于访问目录信息的协议,LDAP基于x.500协议,但比x.500更容易使用。LDAP一般用于存储数字证书和证书吊销列表CRL,这样其他用户通过访问LDAP服务器就能够得到其他用户的数字证书及其状态信息。证书吊销列表CRL的更新和发布对PKI系统而言是非常重要的,因为如果一个证书已经被撤销而用户仍在使用,将构成极大的安全隐患。PKIX规定了两类证书撤销的方法。一类是CA系统定期的向目录服务器发布证书的撤销信息,其优点是原理简单易于实现。但也正由于CRL是定期发布的,因而不可避免的是实时性差,容易出现安全隐患。另一类为RFC2560中阐述的OCSP(在线证书状态确认协议),他是PKIX中用于检查数字证书在某一时刻是否仍然有效的标准。该标准提供给PKI端实体一条方便快捷的数字证书状态查询通道使基于x.509的PKI安全框架体系能够更有效、更安全地在各个领域中被广泛应用。

草案编号

协议内容

RFC2559

使用LDAP V2作为PKI实体发布和获取证书及CRL的协议

RFC2560

阐述在线证书状态确认协议(OCSP),从而可以通过在线证书状态服务器,而不使用CRL确定当前证书状态

RFC2585

阐述了通过FTP和HTTP从PKI系统中获取证书和CRL的操作协议

RFC2587

阐述了使用LDAP v2获取公钥证书和CRL的一个最小模型

(3)PKIX中的管理协议

PKIX中的管理协议涉及管理实体(CA/RA)与端实体内部的交互,主要阐述PKI系统实体间如何进行信息的传递和管理。PKIX中管理协议包括RFC2510、 RFC2511、RFC2527、RFC2797等多个协议草案(见下表)。PKIX中的管理协议通过证书请求报文格式CRMF(Certificate Request Message Format)、证书管理协议CMP(Certificate Manager Protocol)、证书政策(Certificate Policies)和证书实施声明CPS(Certificate Practice Statement)等一系列规范,来完成证书的各项管理任务和实体间的通信与管理。其中证书政策定义了证书的使用目的、使用要求以及CA所承担的责任,证书实施声明CPS阐述了管理CA所颁发证书的措施和手段。实际上CA/RA在确信用户的身份后才为用户签发证书,而CA/RA对用户身份的确认应遵循CPS的规则,因此CA/RA是依据证书实施声明CPS来实施管理操作的。

草案编号

协议内容

RFC2510

定义了X.509 PKI用于在实体间传递消息的证书管理协议CMP,来提供完整的PKI管理服务

RFC2511

定义了证书请求报文格式CRMF

RFC2527

阐述了证书策略和CPS相关信息的政策大纲

RFC2797

描述了X.509 PKI客户端和服务器之间采用CMS(Cryptography Message Syntax)加密消息语法作为消息封装的方法

(4)PKIX中的扩展协议

PKIX中的扩展协议主要是进一步完善PKI安全框架的各种功能,如安全服务中防抵赖和权限管理,PKIX中的扩展协议包括RFC3029、RFC3161、RFC3281等多个协议草案,防抵赖可通过数字时间戳DTS(Digital Time Stamp)、数据有效性验证服务器DVCS(Data Validation and Certificate Server)来实现。支持防抵赖服务的一个核心就是在PKI的CA/RA系统中使用数字时间戳DTS,他是对时间信息的数字签名,主要用于实现确定在某一时间某个文件确实存在和确定多个文件在时间上的逻辑关系功能。PKI系统中的数据有效性验证服务器DVCS的作用就是验证签名文档、公钥证书和数据拥有或存在的有效性,其验证声明称为数据有效性证书。 数据有效性验证服务器DVCS是一个可信任的第三方,用来作为构造可靠的防抵赖服务的一部分。

而权限管理是通过属性证书来实现。属性证书利用属性类别和属性值来定义每一个证书持有者的权限、角色等信息。

(5)PKIX的进一步发展与完善

为了适应pKI技术的发展,IETF也在不断地推出新的协议草案来完善基于X.509的PKI应用方案。如PKI的基础协议RFC2459已升级到RFC3280.而RFC2559协议是基于LDAPv2标准的,但在开放的网络环境下,LDAPv2不能提供足够强度的完整性和机密性的支持,因此在RFC3494中建议适应LDAPv3标准。因此随着PKI技术的进一步发展和应用的不断普及,RFC标准也将不断的增加和更新。

同时,PKI工作小组还指定多个Drafts草案来支持对PKIX系列标准的扩展、应用和研究的需要。如在“draft--ietf--pkix--sonof3039--00.txt”中,对基于RFC3280“高可信证书”进行了重新论述和进一步完善。其他Drafts草案内容见http://www.ietf.org.

4.PKCS

PKCS是由美国RSA安全公司及其合作伙伴指定的一组公钥密码学标准,其中包括证书申请、证书更新、证书作废列表发布、扩展证书内容及数字签名、数字信封的格式等方面的一系列相关协议。到1999年底,PKCS已经公布了以下标准:

PKCS#1:RSA Cryptography Standard/Specifications,RSA加密标准或规范,定义RSA公开密钥算法如何进行加密和签名,主要用于组织PKCS#7中所描述的数字签名和数字信封。该标准类似于国密算法体系中的《GMT 0009-2012 SM2密码算法使用规范》,该国密规范主要内容有:

•规范了sm2算法的使用方法
– 密钥结构
– 密钥产生
– 签名运算
– 加密运算
– 密钥协商
• 规范了私钥的保护结构(用于加密密钥)
• 规范了用户ID的标称值。

PKCS#3:定义DH密钥交换协议;

PKCS#5:描述一种利用从口令派生出来的安全密钥加密字符串的方法。使用MD2或MD5从口令中派生密钥,并采用DES-CBC模式加密。主要用于加密从一个计算机传送到另一个计算机的私人密钥,不能用于加密消息。

PKCS#6:描述了公钥证书的标准语法,主要描述X509证书的扩展格式

PKCS#7:Cryptographic Message Syntax Standard,定义一种通用的消息语法,包括数字签名和加密等用于增强的加密机制,PKCS#7与PEM兼容,所以不需要其他密码操作,就可以将加密的消息转换成PEM消息。该标准类似于国密体系中的《GMT 0010-2012 SM2密码算法加密签名消息语法规范》,这个国密标准的主要内容:

• 规范了加密签名消息语法
– 签名消息
– 数字信封消息
– 带签名的数字信封消息
– 加密消息
– 密钥协商交换消息
• 规范了公钥和私钥的语法

PKCS#8:描述私有密钥信息格式,该信息包括公开密钥算法的私钥密钥及可选的属性集等;

PKCS#9:定义一些用于PKCS#6证书扩展、PKCS#7数字签名和PKCS#8私钥加密信息的属性类型;

PKCS#10:描述证书请求语法;

PKCS#11:称为Cyptoki,定义了一套独立于技术的程序设计接口,用于智能卡和PCMCIA卡之类的加密设备;

PKCS#12:描述个人信息交换语法标准。描述了将用户公钥、私钥证书和其他相关信息打包的语法;

PKCS#13:椭圆曲线密码体制标准

PKCS#14:伪随机数形成标准

PKCS#15:密码令牌信息格式标准


公开密钥密码学标准(Public-Key Cryptography Standard,PKCS)是RSA数据安全有限公司试图为公开密钥密码学提供的一个工业标准接口。在多个公司的共同努力下,他们研制了一系列标准,其中某些标准可以与其他标准兼容。PKCS所提供的是基于公开密钥加密的数据传输格式和支持这个传输的基本结构。
下面简单地描述了每一个PKCS(PKCS #1中包含了PKCS #2和PKCS #4)。
PKCS #1描述了RSA加密和解密的方法,主要用于组织PKCS #7中所描述的数字签名结构和数字信封。
对于RSA的公开密钥、私人密钥、三个签名算法——MD2和RSA,MD4和RSA以及MD5和RSA——以及签名证书,
PKCS #1也描述了与X.509和PEM中同样的语法。
PKCS #3描述了实现Diffe-Hellman密钥交换功能的方法。
PKCS #5描述了用一个从口令中派生的秘密密钥加密消息的功能。它使用MD2或MD5以口令中派生密钥,并采用DES的CBC模式加密。这个功能主要用于加密从一个计算机传送到另一个计算机的私人密钥,不能用于加密消息。
PKCS #6描述了公开密钥证书的标准语法。这一语法是X.509证书的扩展。X.509证书之外的一些附加属性已使证书处理不限于公开密钥。
PKCS #7是一个对数据加密或签名的通用语法(如数字信封和数字签名)。信封可以进行嵌套,也可以签名已经加密的数据。这些语法还提供了其他一些属性(如可与消息内容一起被鉴别的时间标记)。PKCS #7与PEM兼容,可以直接将加密的消息转换成PEM消息,反之亦然。PKCS #7支持多种基于证书的管理系统,PEM就是其中之一。
PKCS #8描述了私人密钥信息语法(包括私人密钥)、一组属性和加密私人密钥的语法。PKCS #8可以用于加密私人密钥信息。
PKCS #9定义了PKCS #6扩展证书、PKCS #7数字签名消息和PKCS #8加密私人密钥信息的选择属性类型。
PKCS #10描述了证书请求的标准语法。一个证书包括可区别的名字、公开密钥和(可选的)一组属性,所有这些均由请求证书的用户签名。
证书请求被发送到证书机关,证书机关将请求转换成X.509公开密钥证书或PKCS #6证书。
PKCS #11详细规定了一个称为Cryptoki的编程接口,它可用于各种可移植的密码设备,是密码标记的API标准。
Cryptoki给出了一个通用逻辑模型,可以在可移植的设备上完成加密操作。这个标准也定义了设备可以支持的几组算法。
PKCS #12描述了将用户公开密钥、受保护的私人密钥、证书和其他相关的加密信息存放在软件中的语法。
它的目标是为各种应用提供一个标准的单一密钥文件。

重点来理解下p1、p7和p12:
p12:对于一个p12包,里面含有证书及证书中公钥所对应的私钥,其中,私钥要用口令进行保护,将证书及其私钥公共打包到在一起,这个包很类似于一个硬件的证书载体----Usbkey,我们知道,USBkey里面其实就是保存着证书,只不过USBkey里面的载体是cos系统,因此,我们可以理解为一个p12的包就是一个包含着证书的usbkey,一个软证书,当将证书放到USBkey里时就是硬证书了。
附:在openssl的实现中,有一个p12的结构体来表示其含义,可以结合着这个结构体来理解。

p7:我们首先试想一个场景,我们将一个数据进行签名,之后将这个签名的数据发送给对方,那么对方只需要公钥就能验签吗,答案是否定的,在用公钥进行验签运算的过程中仍然需要知道验签算法,比如:采用的哈希算法是md5/sha-1/sm3,签名算是是RSA还是DSA等,因此,为了让对方能够进行验签,仅仅将签名的结果发给对方是不利于对于进行验签的(仅将签名结果发给对方属于裸签),因此,签名方需要将签名值及签名的相关信息一起附在签名值上,一起发给进行验签的一方,这样对方利用签名值及验签过程中所需的相关信息就能进行验签了。这个将签名值及相关信息打包到一起的包就是p7。上面我仅仅就签名而言的,其实加密也是一样的道理,加密方如果仅仅将加密值发给对方的话,不利于对方进行解密;在openssl的实现中,有一个p7的结构体来表示其含义,可以结合着这个结构体来理解,至于一个p7包里面是签名值还是加密值,在这个包中有一个Type的成员来标示。加密消息语法:在网络的世界里面一方给另一方传递签名或加密数据时,需要规范的一种格式。在OpenSSL里面定义了一个pkcs7的结构体,一方往里面填充数据后经网络传给另一方,另一方按照pkcs7的规范解开即可。

p1:这个规范可以说是p7的基础,它规范了如何进行加密,如何进行签名,如同国密标准中的《SM2椭圆曲线公钥密码算法 第2部分:数字签名算法》规范了如何用sm2算法进行签名,《SM2椭圆曲线公钥密码算法 第4部分:公钥加密算法》规范了如何用sm2算法进行加密一样,只不过p1规范中涉及到的算法都是RSA算法。


除了以上协议外,还有一些构建在PKI体系上的应用协议,这些协议是PKI体系在应用和普及方面的代表作,包括SET协议和SSL协议。

目前PKI体系中已经包含了众多的标准和标准协议,由于PKI技术的不断进步和完善,以及其应用的不断普及,将来还会有更多的标准和协议加入