基于PKI和U盘的身份认证系统的设计与实现

2011-09-07 10:16王金伟马希荣孙德兵
计算机工程与设计 2011年7期
关键词:数字证书私钥公钥

王金伟, 马希荣, 孙德兵

(1.天津大学计算机科学与技术学院,天津300072;2.天津师范大学计算机与信息工程学院,天津300387)

0 引 言

身份认证是对网络访问者合法性的确认,是整个网络安全体系的基础[1]。公钥基础设施(public key infrastructure,PKI)的出现为身份认证提供了一种有效机制,它采用数字证书作为密钥管理媒介,通过以非对称加密算法为基础的数字签名技术实现了对用户身份真实性的确认[2]。数字证书是PKI的核心,它包含了用户的公钥和其他标志信息。目前,对现有网络应用系统进行安全升级的方案中,数字证书的载体主要是浏览器和USB-KEY,前者不但缺乏移动性,而且存在很大安全隐患,不是理想的解决方案;后者虽然具有良好的移动性和安全性,但制作和分发成本高昂,升级过程也非常复杂。针对以上问题,我们设计并实现了一个以PKI安全体系为基本框架,采用普通U盘作为数字证书载体的身份认证系统。该系统在保证用户使用数字证书的移动性、安全性和便利性的同时,大大降低了与现有应用系统集成的成本和复杂性。

1 公钥基础设施PKI

1.1 PKI体系结构

如图1所示,一个典型的PKI体系结构主要包括3类实体:管理实体,端实体和证书库[3]。

管理实体是PKI的核心部件,是PKI服务的提供者。管理实体有两种:证书中心CA和注册中心RA。CA在PKI体系中的作用是维护证书的生命周期,具体工作是发布和撤销证书;RA负责对用户请求进行处理,若验证请求有效,则代表用户向CA提交请求。RA可以单独实现,也可以合并在CA中实现。CA和RA以证书方式向端实体提供公钥的分发服务。

端实体是PKI的用户,是PKI服务的使用者。端实体有两种:持证者和验证者。持证者一般为应用系统的用户,是数字证书的所有者;持证者向管理实体申请并获取数字证书,在需要时撤销或更新证书。持证者使用数字证书证实自己的身份,从而可以获得相应的权限。验证者一般是网络应用系统,即授权方,它一方面需要鉴别持证者提供证书的有效性,另一方面还要验证持证者是否为该证书的真正拥有者,只有在鉴别和验证成功之后才会授予持证者相应的权限。

图1 PKI体系结构

证书库存储两种信息:由CA签名的有效数字证书和已撤销证书的列表(CRL)。以上几种实体之间可通过PKI操作进行通信,包括证书的请求、确认、发布、获取、更新和撤销等过程。

1.2 数字证书

PKI颁发给用户的身份标识就是数字证书,其数学理论基础是非对称加密算法,就是采用互相匹配的一对密钥进行加和解密。每位用户持有一把私钥,该私钥仅为本人所有,用于签名和解密;还持有一把与私钥配对的公钥,用于验证签名和加密。用其中一把密钥加密的信息,只能由对应的另一把密钥才能够破解。将用户的信息和公钥封装起来并由CA进行数字签名就形成了用户的数字证书。

目前,PKI体系中应用最为广泛、也是最为基础的一个数字证书国际标准是X.509标准[4],其格式如表1所示。其中,序列号是由CA分配给证书的唯一标识符。签名算法用来指定证书中心CA签发证书时所使用的非对称加密算法和哈希算法。持有者是证书拥有者的名字和信息,包括国家、省市、地区、组织机构、单位部门和通用名,还可包含电子邮箱地址等信息。公钥部分包含了公钥的值和公钥使用的算法标识符。在X.509第2版(v2)中加入了签发者和持有者的唯一标识符,第3版(v2)又加入了扩展域。

表1 X.509证书格式

2 身份认证系统的设计

2.1 系统总体结构

本课题设计的身份认证系统主要针对Web网络应用,其体系结构以PKI为基础,并根据B/S模型进行了一定的简化和补充。系统的总体结构如图2所示。

图2 身份认证系统总体结构

整个系统包含浏览器端和服务器端两大部分。服务器端包括CA模块、认证模块、证书数据库和管理员模块几个部分,各模块的功能如下:

(1)CA模块。为了简化证书处理过程,本系统将证书中心CA和注册中心RA合并为一个模块,作为系统的基础模块。该模块同时完成CA和RA的功能。包括:受理用户对数字证书请求的申请;颁发数字证书给用户;受理用户对数字证书撤销或更新的申请;维护已撤销证书的列表。

(2)认证模块。该模块是整个系统的核心,它的主要功能是通过“挑战/应答”协议确认用户的合法身份,其中含有对用户所持证书有效性的验证。

(3)证书数据库。证书数据库中存储的内容有:X.509证书、已撤销证书的列表和持证用户信息等。

(4)管理员模块。该模块用于管理CA模块,具体工作包括:对用户提出的请求、撤销和更新数字证书的申请进行审核,并将审核结果反馈给用户;对用户证书的详细信息和当前状态进行查询;对证书数据库进行备份,以防止因误操作或重装系统等造成数字证书的丢失,降低对用户正常操作的影响;对用户的非法操作等异常情况进行处理,如注销无效证书。

浏览器端包括用户模块和集成接口两部分,它们的功能如下:

(1)用户模块:该模块的功能包括:向CA模块递交用户对数字证书的请求、撤销和更新的申请;将数字证书下载到U盘;从U盘中读取数字证书;配合认证模块对用户身份的合法性进行确认。

(2)集成接口:为了使现有应用系统能够方便地使用本系统的功能,设计了集成接口,该接口可以和应用系统的浏览器端进行集成。

2.2 数字证书载体

现有PKI系统普遍采用浏览器或USB-KEY作为用户数字证书的载体。保存在浏览器中的证书缺乏移动性和安全性。用户在不同计算机上登录网络应用系统,需要重新下载证书,并且在退出系统时,证书不能自动从浏览器上删除。如果计算机是公用的,且用户忘记删除证书,那么使用这台计算机的其他人也可以获得其证书,这样就存在很大安全隐患。

将证书保存在USB-KEY中,虽然具有良好的移动性和安全性,但对于已有的网络应用系统,需要重新制作和分发USBKEY,致使系统的升级成本非常昂贵,升级过程也十分繁琐。尤其对那些需要提高安全性同时已经拥有大量用户的互联网应用,如电子邮件,电子教务,电子政务和第三方支付等更是难以实现。而对用户来说,额外购买或领取USB-KEY以及在平时携带许多不同系统的USB-KEY,必然会带来很多不便。

相比以上两种方式,本系统使用U盘作为数字证书的载体,其突出优点如下:

(1)具有良好的移动性和安全性。用户可以随身携带,不用反复下载数字证书。使用完后U盘被用户随即取走,证书不会保留在计算机中。

(2)升级成本低,使用方便。目前,U盘的价格已经十分低廉,同时大部分手机也具备U盘功能,可以说U盘几乎是人手一个。因此,用U盘作为证书的载体,一方面使现有应用系统不用承担采购、分发USB-KEY所带来的昂贵成本和繁琐过程;另一方面使用户避免了因额外领取或购买USB-KEY而造成的不便。

(3)可存放多个证书。因数字证书的体积很小,同一个U盘可以存放多个应用系统的证书,避免了用户同时携带很多USB-KEY。

2.3 双因子验证机制

为了进一步提高U盘中数字证书的安全性,本系统采用了“口令+证书”的双因子验证机制[5]。每个分发给用户的数字证书均设有使用口令,用户在使用证书时需要先输入口令,口令正确方可使用。

双因子验证机制使口令和证书构成了用户身份的两个必要因素。用户只有同时取得了证书和使用证书的口令,才可以证实其真实身份。即使用户的口令泄漏,只要用户持有的证书不被盗取,合法用户的身份就不会被仿冒;如果用户的证书遗失,拾到者由于不知道使用口令,也无法仿冒合法用户的身份。

2.4 数字证书请求流程

为了便于管理,本系统的CA模块将直接产生用户密钥对,并将数字证书和私钥封装成证书文件在发放证书时一起交给用户,该过程的具体流程如下:

(1)申请者首先使用用户模块填写相应的信息,然后向CA模块提交数字证书申请;

(2)CA模块对申请者提交的申请进行受理,然后提交给管理员审核;

(3)管理员将申请中提供的信息与各种必要条件进行比对,决定是否通过该申请;

(4)CA模块在申请审核通过后,将为申请者生成一对公私密钥(采用非对称加密算法);

(5)申请者的信息和公钥被CA模块封装成X.509数字证书并保存到证书数据库中。随后,该数字证书和用户私钥被进一步封装成证书文件;

(6)用户模块通知申请人下载证书文件,并提示申请人将其存放在U盘中;

(7)整个申请过程结束,申请者的合法用户身份得到确立。

2.5 身份认证协议

系统采用“挑战/应答”协议[6]进行身份认证,该协议由用户模块和认证模块的几轮对话来完成,具体过程如图3所示。

图3 “挑战/应答”身份认证协议

(1)数字证书的持有用户通过用户模块向认证模块请求身份认证;

(2)收到请求后,认证模块马上生成一个随机数RP,反馈给用户模块,作为“挑战”;

(3)用户模块要求用户输入密码,若密码正确,则从U盘(与用户的计算机相连接)中读出该用户的私钥,若密码错误,则不能通过验证;

(4)用户模块使用用户的私钥将随机数RP加密 (数字签名),结果为SC(RP),并将该结果和用户的数字证书SCertC提交给认证模块进行检查;

(5)认证模块先后对数字证书SCertC的路径、完整性以及CA的签名进行检查,之后还要查询该证书是否在CA提供的已撤销证书列表中;若SCertC通过以上检查则说明其有效,那么认证模块将提取SCertC中的公钥,利用该公钥解密SC(RP),得到结果REP;最后,认证模块将之前生成的随机数RP和解密结果REP进行对比,若两者完全相等,则用户的合法身份得到确认,否则就是非法用户。

在“挑战/应答”协议中,每次对用户身份进行认证时都会生成一个独立的随机数,即使黑客通过某种手段截获该随机数,也无法逆推得到密钥,由此就排除了用户身份被仿冒的可能性。

3 身份认证系统的实现

3.1 基于OpenSSL的服务器端实现

认证系统的服务器端安装了Linux操作系统,开发脚本为PHP语言,以Apache为Web解析服务器。PKI的各种功能均采用OpenSSL软件包进行开发,数字证书库用MySQL数据库实现。

OpenSSL[7-8]是一个著名的开源软件包,它以标准C语言作为软件开发语言,实现了很多加解密算法、SSL协议和PKI标准;OpenSSL能够跨平台运行,支持Windows、Linux和Mac等主流操作系统,适用性非常广泛;OpenSSL软件包的主要组成部分有:ssleay函数库和实用应用程序;ssleay函数库提供了两千多个函数实现,是OpenSSL软件包的核心部分,这些函数实现涵盖了当前安全系统中常用的非对称、对称加解密算法。

为了提高运行效率,服务器端的PKI功能直接使用ssleay函数库进行开发。这些功能包括:生成用户公私密钥对,生成、发布、验证、注销和更新X.509数字证书等。在生成公私密钥对时采用了1024位密钥和RSA非对称加密算法[9]。

为了帮助用户确保数字证书和密钥之间的对应关系,系统使用 ssleay函数,将用户的 X.509证书和私钥封装成PKCS#12证书文件,供用户下载。PKCS标准 (the public-key cryptography standards)是美国RSA数据安全公司联合其合作伙伴共同制定的一组公钥密码学标准;该标准主要用于对加密算法、数字签名、数据封装、数字证书和用户私有信息进行规范;其中的PKCS#12标准对用户的私钥、公钥、数字证书和其他相关信息的整合方法进行了详细的描述[10]。PKCS#12证书文件在将用户私钥和X.509证书封装起来的同时,还实现了双因子认证,即对用户私钥设置了提取口令。

为了与PHP脚本整合,系统把利用ssleay函数库开发的各种PKI功能编译封装成一个PHP扩展。服务器端的CA模块、认证模块和管理员模块在其PHP实现中都通过调用该扩展来完成相应的功能。

3.2 基于CAPICOM的浏览器端实现

系统的浏览器端采用了CAPICOM组件进行实现。CAPICOM[11]组件是微软提供的一个标准密码应用层中间件接口,该接口可以在Windows环境下的各种编程语言中调用;CAPICOM组件中的大多数接口可以在网页脚本中安全地使用。

在实现本系统的用户模块时,采用了Visual Basic语言并调用了CAPICOM的2.0版组件。用户模块的实现形式为ActiveX,它能够嵌入到Web页面中。用户如果是首次访问,系统会提示安装用户模块。

在身份认证过程中,当用户模块收到认证模块发送的随机数后,会逐一搜索并识别与用户计算机连接的所有存储设备,如果找到U盘,则搜索U盘中是否存有PKCS#12证书文件,找到后提取文件中用户的私钥对随机数签名,若没找到U盘或证书文件则认证失败。

该过程的部分关键代码如下:

其中,过程SearchUPan()的作用就是搜索并识别U盘,它返回证书文件的路径;oSigner是签名者对象,oCert是证书对象,strText是随机数,需要对它签名,oSignedData存储了需要签名的信息。程序首先指定数字证书和被签名数据(设置oSigner的Certificate属性和oSignedData的Content属性),然后执行数字签名(调用oSignedData的Sign方法),strSignedData就是签名后的信息。

3.3 集成接口的实现

与应用系统的集成接口实现为一个PHP文件,名为authentication.inc.php,它类似于C语言的头文件,其中包含了身份认证的主要函数。

在与应用系统集成时,需要考虑两种情况:①应用系统是用PHP语言实现的;②应用系统是用其他脚本语言 (如ASP,JSP等)实现的。对于第一种情况,只需在应用统的适当页面中加入以下两句即可实现集成:

require_once("authentication.inc.php");

userCertVerify("认证成功页面","认证失败页面");

第一句将authentication.inc.php文件包含进来,第二句是调用的userCertVerify函数进行身份认证。若认证成功则跳转到“认证成功页面”,否则跳转到“认证失败页面”,这两个页面可以根据具体情况进行设置。利用这种方法,该认证系统已与本校网络教务系统进行了整合,并成功运行。对于第二种情况,可以使用Ajax技术对认证函数进行远程调用[12],这是本课题下一步的研究方向。

4 结束语

本文提出了一种基于PKI和U盘的身份认证系统。PKI构架以数字证书作为证明用户合法身份和提供用户合法公钥的凭证,结合非对称加密技术,可以有效保证用户的身份安全和应用系统的数据安全。用U盘作为数字证书的载体,不仅方便了用户,保证了用户数字证书的移动性和安全性,而且大幅度降低了应用系统进行升级的成本和复杂性,为现有网络应用系统提供了一种低成本的安全解决方案。

[1]李晓航,王宏霞,张文芳.认证理论及应用[M].北京:清华大学出版社,2009.

[2]荆继武,林璟锵,冯登国.PKI技术[M].北京:科学出版社,2008.

[3]Housley R,Polk W,Solo D.Internet X.509 public Key infrastructure,certificate and CRL Profile[S].RFC2459,2004.

[4]ITU-T recommendation X.509:information technology-open systems interconnection-the directory:authentication framework[S].2005.

[5]吴永英,邓路.一种基于USBKey的双因子身份认证与密钥交换协议[J].计算机工程与科学,2007,29(5):56-59.

[6]陈贤,陈力琼,阔永红.不同密码体制下挑战-应答协议的分析[J].计算机工程与设计,2008,29(10):2493-2495.

[7]王志海,童新海,沈寒辉.OpenSSL与网络信息安全——基础、结构和指令[M].北京:清华大学出版社,2007.

[8]齐洪喜,周大水.基于OpenSSL的安全密码平台的设计与实现[J].计算机工程与设计,2007,28(2):314-315.

[9]赵小明,章美仁.RSA数字签名技术在电子公文流转中的应用[J].计算机工程与设计,2005,26(5):1214-1216.

[10]欧阳骞,刘翼光.基于PKCS#12的数字版权管理系统[J].计算机工程,2010,36(10):146-148.

[11]宋玲,李陶深,陈拓.用CAPICOM组件实现应用系统安全性的方法[J].计算机工程,2004,30(16):128-129.

[12]Jesse James Garrett.Ajax:anewapproachtowebapplications[EB/OL].http://adaptivepath.com/publications/essays/archives/000385.php,2005.

猜你喜欢
数字证书私钥公钥
清扫机器人避障系统区块链私钥分片存储方法
比特币的安全性到底有多高
案例教学法在公钥密码体制难点教学中的应用——以ssh服务中双向认证为例
Spatially defined single-cell transcriptional profiling characterizes diverse chondrocyte subtypes and nucleus pulposus progenitors in human intervertebral discs
神奇的公钥密码
一种基于虚拟私钥的OpenSSL与CSP交互方案
国密SM2密码算法的C语言实现
P2X7 receptor antagonism in amyotrophic lateral sclerosis
基于数字证书的军事信息系统安全防护方案
数字签名保护Word文档