APP下载

数字证书系统的设计与实现

2022-09-09杨磊白世坤

电子技术与软件工程 2022年11期
关键词:数字证书乙方公钥

杨磊 白世坤

(中国电子科技集团公司第三十研究所 四川省成都市 610041)

1 引言

在实际的保密通信过程当中,甲方如果向乙方发送加密数据,首先甲乙双方需要有一个共同的加密密钥,甲乙双方的一方使用此密钥加密数据然后传输,接收方收到加密数据后使用此密钥对数据进行解密,解密出数据的明文后,甲乙双方就可以进行保密通信,这种保密通信方式在密码学当中叫做对称密码技术。

在对称密码技术当中,由于双方通信过程中加密通信一直使用同一个加密密钥,这种方式很容易被第三方进行攻击演算出加密密钥,从而导致网络传输数据被窃取,为了解决这个问题,需要通信双方在一段时间内更换加密密钥。在更换密钥的过程中,使用公钥密码技术进行密钥管理可以保证:加密传递的数据只能被指定的接收者解密,单个实体的失效不能影响其它实体的安全,密钥不能扩散,密钥易于传递。

假如甲方使用公钥密码技术对对称密钥进行加密,首先必须知道乙方的公钥数据;乙方在加密通信之前向甲方传递自己公钥的过程中,容易受到第三方丙方的监视,丙方中途截取乙方的通信信道,用自己的公钥替换乙方的公钥,甲方在不知公钥被替换的情况下,使用丙方的公钥加密数据,此数据轻而易举的被丙方截取。

为了解决上述问题,引入了公钥基础设施(PKI)的概念,公钥基础设施引入受信任的第三方(CA)作为甲方和乙方的共同信任中心,CA 使用自己的私钥向甲方和乙方签发数字证书。甲方在收到乙方的数字证书后,使用CA 中心的公钥对证书进行签名验证,如果签名验证通过,则甲方认为证书没有被篡改,乙方的公钥是安全的。甲方和乙方的加密通信就可以在一个安全的环境下进行。

本文的目的就是构建一个轻量级的证书管理系统,用于科学研究、企业内网或者无法连接互联网的企业机构,快速签发数字证书,构建内部可信通信系统。

2 公钥密码技术

公钥密码体制是Diffie 和Hellman 在1976年提出的,公钥密码技术在密码体制中加密和解密采用不同的但是又相关的密钥技术。虽然目前的公钥算法又很多,但是有一个共同的特点就是,每个通信方在进行保密通信时有两个相关的密钥,其中一个公开,另外一个保密存储。由于公钥算法比传统的密码算法具有更高的复杂度,因此公钥密码加密数据的效率比较低,只能对少量的关键数据进行加密。所以公钥密码技术在加密、数字签名、身份认证等很多方面上有广泛的应用。

公钥密码体制是建立在单向陷门函数(One-way Trapdoor Function)上的,其安全性基于复杂的数学难题。从基于大整数因子分解的数学难题提出RSA 公钥密码体制开始,历经基于离散对数问题的ElGamal 公钥密码体制及其各种变体,到基于椭圆曲线点群的离线对数问题的椭圆曲线密码体制,其中心思想都是高安全性。

公钥密码算法中的公钥有一个明显的有点就是可以公开,只要包含公钥的证书是可以认证的,就可以认为公钥是可信的,以此通过第三方的可信任认证机构,如证书中心,就可以进行安全通信。

基于以上理论依托,使用公钥密码技术签发的数字证书具有不可伪造性和可认证性。

3 证书编码规则

ASN.1 抽象语法标记(Abstract Syntax Notation One)是一种 ISO/ITU-T 标准,可以理解与一组语法规则和一组编码规则,数据类型的概念是ASN.1 标准的基础。X.509 证书的编码和解码规则遵循ASN.1 编码和解码规则,证书请求结构的每个字段都与数据类型相关联。

ASN.1 类型系统中分为基本类型、字符串类型和构造类型。其中基本类型包含BIT STRING、BOOLEAN、INTEGER、NULL、OBJECT IDENTIFIER、OCTET STRING,字符串类型包含BMPString、IA5String、PrintableString、TeletexString、UTF8String,构造类型包括SEQUENCE、SEQUENCE OF、SET、SET OF、CHOICE。每种类型都有一个固定编码标记与之对应,具体的涉及到的详细编码标记可以查看ASN.1 的有关标准。X.509 证书是使用基本类型、字符串类型和构造类型的组合而设计的。

ASN.1 定义了(BER) 的基本编码规则、(CER) 规范编码规则、(DER)可辨别编码规则,其中DER 是为满足 X.509规范的安全数据传输的要求而创建的。DER 的编码规则遵循标记(TAG),长度(LENGTH)和值(VALUE)规则,即“TLV”编码规则,如下图1所示,其中TAG 字段就是ASN.1 定义的类型,LENGTH 字段表示VALUE 的长度,VALUE 字段表示实际被编码的数据,其中VALUE 字段可以嵌套编码如图2所示。“TLV”编码的规则可以查阅相关开放资料,此处不再详细论述。

图1:“TLV”编码格式

图2:“TLV”编码嵌套格式

4 X.509数字证书

自 1998年成立以来,X.509 公钥证书标准的三个版本不断发展,数据结构的每个后续版本都保留了以前版本中存在的字段,并添加了更多内容。X.509 证书是一个被签名的数据体,公钥在数据体内部,签名值在数据体尾部。X.509证书的格式如表1所示。

表1:证书结构图

通过第三小节的分析,可知X.509 证书是一个已签名的数据结构,用于将公钥绑定到实体,X.509 证书的ASN.1 语法表示如下:

其中待签名域的ASN.1 语法表示如下:

上述结构体中的每个字段都有ASN.1 的基本语法组成。

版本号:版本号为固定值,目前有V1,V2,V3。ASN.1语法表示为CertificateVersion :: = INTEGER {v1(0),v2(1),v3(2)}。

序列号:一个证书唯一有一个序列号,由证书颁发机构产生。ASN.1 语法表示为CertificateSerialNumber :: =INTEGER。

签名算法识别符:标识本证书所用的签名算法。ASN.1语法表示为

发行者名称:证书颁发机构的名称。ASN.1 语法表示为

有效期:有效期表示证书的开始使用期限和使用截止期限。ASN.1 语法表示为

主题名称:证书持有者的名称。ASN.1 语法表示为

主题公钥信息:包含用户的公钥数据和使用此公钥数据使用的算法。ASN.1 语法表示为

发行者唯一标识符:证书颁发者的唯一标识符,通过此标识符判定证书是否来自于合法的证书签发机关。

主题唯一标识符:证书持有者的唯一标识符,通过此标识符可判定证书持有者是否合法。

扩展:扩展字段按需填写,对证书扩展域的定义主要集中在四个方面:密钥及其策略扩展、属性扩展、证书路径约束扩展、CRL 分布点扩展。

签名:证书签发机关使用自身的私钥对待签名域进行签名。

5 证书系统的设计与实现

证书签发系统的设计实现就是把证书ASN.1 语法结构表示通过代码编码的方式实现。在编码过程中,设计了前端UI 界面,用于证书签发操作员根据证书签发要素输入证书基本信息;设计了证书管理中间件,用于接收前端UI 界面写入的证书信息并处理,并且把签发好的证书信息存入数据库中和推送到前端UI 界面用于操作员下载;设计了基础层软件接口,此部分功能是证书签发的核心,负责把ASN.1定义的数据类型,通过编码实现证书的DER 编码格式。

在系统设计过程中,通过软件编程,把前端UI 界面、证书管理中间件、基础层软件接口三部分内容组合为一个完整的软件工程。三部分软件通过接口互相调用,在保证软件软件接口和软件框架不变的情况下,通过开发软件源代码,能根据实际需求对软件功能进行动态扩展,以满足不同场景下的使用。

5.1 应用层软件接口设计-证书管理中间件

证书管理中间件的设计包含证书版本号选择接口versionSelect()、序列号产生接口sriealNoGen()、签名算法使用接口algorithmIdentifier()、发行者名称传入接口issuerSet()、有效期设置接口validityTime()、主题用户传入接口subjectSet()、扩展方案传入接口extensionsSet()、公钥数据传入接口importPubKey()、非对称密钥产生接口genKeyParis()、待签名区封装接口certificateToBeSigned()、证书签名接口signData()、证书封装接口makeCA()。各个接口的层次关系如图3所示。

图3:证书签发中间件接口层次关系

5.2 基础层软件接口设计

应用层软件接口面向程序开发者在签发证书时的直接调用,在应用层软件接口的下层,不直接和开发者直接交互的软件接口是基础软件层。基础软件层根据ASN.1 对X.509 证书对证书的格式定义,使用ASN.1定义的数据类型封装X.509证书,因此基础软件层的主要功能是把ASN.1 定义的数据类型通过程序编码实现,程序在编写的过程中遵循“TLV”编码格式。基础软件中针对ASN.1 基本类型的基础软解定义接口有TLV_BIT_STRING()、TLV_BOOLEAN()、TLV_INTEGER()、TLV_NULL()、TLV_ OBJECT IDENTIFIER()、TLV_ OCTET STRING(),字符串类型软件接口有TLV_BMPString()、TLV_ IA5String()、TLV_ PrintableString()、TLV_ TeletexString()、TLV_ UTF8String(),构造类型软件接口 为TLV_SEQUENCE()、TLV_SEQUENCE_OF()、TLV_SET()、TLV_SET_OF()和TLV_ CHOICE()。每个基本类型软件接口对应ASN.1 定义的数据类型,这些基础软件接口就犹如大厦的一砖一瓦一样,构成了X.509 证书的基础。

5.3 证书签发系统设计

图3的证书签发中间件接口对上向证书签发应用层软件提供面向对象的接口化调用,对下调用基础软件接口,让上层应用软件可以根据不同的证书签发需求签发不同的DER格式编码的数字证书,此程序设计既支持用户使用开源的密码算法签发X.509 数字证书,又支持用户自己定义密码算法签发X.509 数字证书,软件接口简单易用,又灵活多变,可以满足科研、企业内网或者互联网企业自己构建内部可信的数字证书管理系统。软件接口调用如图4所示。

图4:软件接口调用关系

在证书签发系统的设计中,需要首先建立一个CA 签发中心,CA 签发中心对不同的用户签发一个证书链,证书链包含CA 中心的根证书和用户证书。在用户使用证书进行身份认证或者加密时,用户只需要使用自身存储的CA 中心根证书来验证对方的用户证书就可以证明对方用户的可信。具体流程如图5所示。

图5:证书签发系统的设计

6 结束语

本文通过对ASN.1 标准的研究和分析,分解出X.509 数字证书的格式和编码方式,结合公钥密码技术,设计出一套实用化的轻量级证书签发系统。本软件可操作性强,代码结构简单,通过对软件的有限修改,可以设计出针对不同场景下的证书签发系统,为科研机构或者企业用户可信通信提供了极大的便利。

猜你喜欢

数字证书乙方公钥
一种基于混沌的公钥加密方案
当心黑客利用数字证书的漏洞
HES:一种更小公钥的同态加密算法
基于数字证书的军事信息系统安全防护方案
SM2椭圆曲线公钥密码算法综述
管理好系统中的数字证书
吉林省支付清算系统参与者数字证书使用现状调查与现存问题分析及建议
基于格的公钥加密与证书基加密
少林秘宗自卫术
少林实用防卫制敌术