陈怡丹 李馥娟
(江苏警官学院计算机信息与网络安全系 南京 210031)(2632470270@qq.com)
安全与应用如影相伴.随着互联网应用范围和领域的进一步拓展,网络安全问题越来越突出并引起社会各界的普遍关注,各类有针对性的网络攻击严重影响着互联网应用向着纵深发展.近年来,电子商务、电子政务等在线应用的发展越来越快,广泛应用于人们的生产生活中,在这一过程中,用户身份的真实性、数据传输的安全性、终端接入的可信性等问题日益受到重视.在此情况下,数字证书作为一种网络安全机制出现,为身份授权管理、代码签名保护、可信网站服务、安全终端保护、安全电子邮件等应用提供了必要的安全保障.然而,安全是相对的,任何一种安全技术在解决了某一类安全问题的同时,其自身存在的不安全因素以及应用过程中衍生出的安全隐患也应引起足够重视[1-3].本文基于目前普遍使用的公钥基础设施 (public key infrastructure, PKI),以典型的RSA算法和广泛使用的USBKey数字证书为研究对象,在系统介绍PKI体系及相关技术实现原理和主要功能的基础上,分析数字证书存在的安全问题,并提出相应的解决方法和思路.
1976年,为解决在公共网络中传输信息和进行密钥交换的需要,美国学者Diffie和Hellman提出了公钥密钥机制的设想;接着,Merkle和Hellman提出了基于该设想的MH背包公钥密码算法,它是1个非对称算法,该算法的特点是生成的1个私钥同时对应多个公钥,其中私钥自己保存,而公钥分发给他人用于加密文件,一个私钥可以同时解密由多个公钥加密后的文件,MH背包公钥密码算法只是公钥密钥的一个雏形,而不是真正意义上的公钥密钥加密机制;1978年,由Rivest,Shamir,Adleman共同提出了RSA算法,成为第1个安全、实用的公钥加密算法,是对传统对称加密机制的一次重要革命.
与对称加密算法不同,公钥密钥加密(非对称加密)算法要求生成的密钥是成对出现的,其中一个为可以公开的公钥,另一个为不能公开的私钥,而且不能从一个公钥推导出对应的私钥,同时公钥加密的文件不能用公钥解密,私钥加密的文件无法用私钥解密.RSA算法是一个典型的公钥密钥算法,另外还有EIGamal,Rabin,ECC等算法.
公钥加密机制为数字证书的实现提供了技术支撑,PKI为数字证书的应用提供了平台保障.PKI是以公钥密钥算法为理论基础提出的一套安全服务体系,其主要内容包括数字证书、具体的公钥密钥算法、证书颁发机制 (certificate authority, CA)等.其中CA是PKI的核心,它是一个可靠、可信的第三方权威机构,负责数字证书的签发和管理.
数字证书是由CA经过签名后颁发的一个具有特殊功能的电子文档,它与实体(用户、终端等)身份一一对应.证书的内容包含Version(证书版本)、Serial Number(序列号)、Algorithm Identifier(签名算法)、Issuer(身份验证机构)、Period of Validity(证书有效期)、Subject(证书技术者)、Subject’s Public Key(证书技术者的公钥)和Signature(CA对证书的签名),具体内容在X.509标准中进行定义.
RSA算法的理论基础是基于一种特殊的可逆模指数运算,算法描述如下:
1) 选择2个大素数p和q,在实际应用中一般要求大于1 024 b,在安全性要求较高的领域建议大于2 048 b;
2) 计算n=p×q,φ(n)=(p-1)(q-1),其中φ(n)为n的欧拉函数;
3) 随机选取一个正整数e(1 4) 用欧几里得扩展算法计算私钥d,以满足d×e=1(modφ(n)),即d≡e-1(modφ(n)).则e和n是公钥,d是私钥. 从算法的实现过程可以看出,RSA算法的安全性在很大程度上取决于对大整数的素数分解问题,即模数n被分解为素因子p与q的过程.目前,随着计算机处理能力的增强和分析算法的不断优化,解决这一问题已不再是难题,只是算力和运算时间的问题.对RSA算法的攻击主要体现在以下2个方面: 1) 因子分解法. 2) 针对参数的攻击[4-6]. 可以利用RSA算法实现过程中对参数选择的不当,从而实现对算法的攻击.主要表现为以下3个方面: ② 低指数攻击.低指数攻击主要是由于过于追求加密的高效性,而选择了较小的加密密钥e,由此带来了安全隐患.同样,解密密钥d也不能取得太小.在实践中已经证明,如果d ③ 素因子攻击.假设攻击者获得了密文c,可以进行重复加密:ce≡(me)e≡me2(modn),ce2≡(me)e2≡me3(modn),…,cet≡(me)et≡met+1(modn),如果cet(modn)≡c(modn),即(met)e(modn)≡c(modn),则有met≡m(modn),即(cet-1)≡m(modn),由此可以看出,在重复加密的倒数第2步就已经恢复出了明文m.为此,如果要提高RSA算法的抗攻击性,在选择素因素p和q时,必须保证t足够大. 针对存在的安全威胁,可以重点从密钥长度和参数选择2个方面加强RSA密码机制的安全防御能力. 2.3.1 密钥长度 RSA加密机制中密钥长度的确定需要在安全性与效率之间取得平衡,密钥越长,抗攻击能力越强,但效率会降低.在具体设计和部署一个RSA加密系统时,要充分考虑网络环境下针对RSA算法分析的计算能力,以不可破解为前提.在此基础上,还要考虑被保护对象的数据类型、保护期限、可能的攻击行为以及遭受的威胁类型等因素.512 b的密钥长度早已确定为不安全而被淘汰,1 024 b密钥在安全要求较高的系统中也不建议使用,2 048 b成为目前RSA加密机制的首选. 2.3.2 参数选择 根据RSA算法的实现原理,为了实现系统的安全性,在选取大整数n时确保其值足够大的前提下,对素数p和q的选取应满足以下条件: 1) |p-q|的值不能太大.如使用2 048 b的模数n,则数p和q的模长选取建议在1 024 b左右. 3)gcd(p-1,q-1)应尽可能小. 4)p和q应为强素数,即素数p-1和q-1的都应有大的素因子. 5) 在选取加密指数e和解密指数d时其值不能太小,以防止低指数攻击. USBKey是网上银行、第三方支付等领域使用的用于数据加密和身份认证的“电子钥匙”,不同行业和应用领域对USBKey有不同的称法,如工行的“U盾”、招行的“优Key”、支付宝公司的“支付盾”等.USBKey借助USB接口技术和U盘的介质特性,结合智能卡和现代密码学技术,在PKI体系中实现了对数字证书文件及安全密钥的有效保护.USBKey的逻辑结构如图1所示: 图1 USBKey的逻辑结构 3.1.1 USBKey内部结构 USBKey的内部结构可以分为硬件、CoS和通信接口3层. 1) 硬件.安全智能卡和USB通信是硬件的主要组成部分,而且两者在功能上实现了相互融合,安全智能卡在提供数据存储安全性的同时,还实现了安全计算功能,如RSA,ECC计算等. 2) CoS.片上系统(system on chip, CoS)是一个固化在智能卡只读存储器(ROM)中的小型操作系统,以嵌入式系统软件方式实现了公钥密钥对的生成、对私钥的安全保护、用户数字证书的申领与安全管理等功能. 3) 通信接口.通信接口实现USBKey与外部设备之间的安全通信. 3.1.2 USBKey外部结构 外部结构通过加密设备接口标准实现与PC和智能卡(SmartCard,SC)等外部设备之间的数据交换. 1) 接口规范.USBKey中的安全智能卡必须符合PC/SC接口,以实现安全智能卡的透明性、可扩展性和通用性.目前广泛使用的USBKey中的安全智能卡,由于与PC和SC之间的数据交换量较少,对通信带宽的要求也不高,所以开始配置为类似于USB鼠标、键盘的人体学接口设备(human interface device, HID),在Windows操作系统下还实现了免安装驱动程序等操作. 2) 加密设备接口标准[7].为了适应不同环境的应用需要,USBKey提供了目前应用最为广泛的CSP和PKCS加密设备接口标准.加密服务提供程序 (cryptographic service provider, CSP)是Windows操作系统针对应用层提供的标准接口函数和底层加密接口,实现数据的加密、解密、数字签名、验证和报文摘要等操作.CSP是PKI推荐使用的加密API,用户可以直接使用微软公司的加密应用程序接口(cryptographic application programming interface, CryptoAPI)调用CSP函数来实现所选择的密码算法(如RSA,ECC等)的运算.公钥密码标准(public key cryptography standards, PKCS)是由美国RSA数据安全公司及其合作伙伴制定的一组公钥密码学标准,其中包括证书申请、证书更新、证书管理、扩展证书内容以及数字签名、数字信封的格式等方面的一系列相关协议,其中PKCS#11(称为密钥管理接口(Cyptoki))定义了一套与平台无关的独立于技术的程序设计接口,用于智能卡的加密设备.在接口定义上,PKCS#11比CSP更加灵活,更加方便开发者的使用,同时也具有更好的扩展功能.考虑到应用的灵活性和兼容性,目前许多厂商的USBKey同时提供了对PKCS与CSP的支持. 早期的数字证书以文件形式存放在计算机硬盘或外部存储介质中,极易被复制、窃取和破坏,存在较大的安全隐患.USBKey虽然外形与U盘没有区别,但其内置了SoC和码算法库,可以存储用户的数字证书文件和私钥,对外提供了I/O接口.USBKey提供了多项安全技术和措施,实现其自身的安全性. 3.2.1 密钥对在USBKey中产生 PKI体系中使用的密钥对在USBKey中产生.其中,私钥在生成后将得到SoC的保护,用户无法导出和复制,以确保密钥永久保存在USBKey中;产生的公钥用于向CA申请用户数字证书,在此过程中USBKey通过PKCS保证了用户信息及所申领数字证书的安全性. 3.2.2 用户进行USBKey初始化操作 USBKey的初始化操作及数字证书的申领都由用户直接操作完成.没有进行初始化的USBKey只是一个智能芯片,这时还没有与用户相关联的信息存储在介质中.只有在进行数字证书的申领时,USBKey在外部设备(如PC)端程序(如浏览器)的配合下,运行相应的公钥密码算法生成密钥对,再用其中的公钥向CA申领数字证书.所以,USBKey的初始化操作以及数字证书的全部申领过程都需要用户输入和确认相关信息后才能逐步完成,在一定程度上确保了数字证书生成的安全性. 3.2.3 基于介质和PIN码的双因子安全认证[8] USBKey在使用时需要同时提供硬件介质和PIN码,实现了双因子认证功能.类似银行卡,用户在开始使用USBKey时,都需要修改初始PIN码,设置一个只有用户知道的新的PIN码.双因子认证的应用,只有在拥有USBKey介质,并知道PIN码的前提下,才能完成认证操作. 随着数字证书的广泛使用,市面上USBKey的品牌类型越来越多,不同USBKey在硬件质量、性能及安全、使用的便捷性等方面会存在一些差异.除此之外,还需要从以下2个方面加强USBKey应用的安全性: 1) 加强应用管理. “三分技术,七分管理”是信息安全领域普遍接受的一个道理,在USBKey的使用过程中,加强对USBKey介质和PIN码的安全管理是基础,尤其在使用过程中要防止PC端植入木马后修改PIN码,再通过远程桌面等方式进行在线交易. 2) 加强对木马的防范. 虽然目前很少有用户会使用直接存储在计算机硬盘或U盘等介质中的数字证书文件来实现用户身份认证和数据的安全性,但由于USBKey技术实现涉及的内容和范围较广,所以其应用的安全性同样存在一定的挑战.伴随着USBKey的应用从早期身份认证发展到所有使用数字证书的领域,出现了一些专门针对USBKey的木马程序.例如,不同品牌的USBKey对PKCS#11和CSP接口规范操作细节存在一定的差异,有些甚至存在可被攻击者利用的安全漏洞,攻击者通过开发专门针对该类漏洞的木马程序,可以中间人攻击方式实时修改银行转账等信息,完成非法交易[9-10];再如,用户普遍使用Windows操作系统及IE浏览器来操作USBKey,在此过程中,不同品牌的USBKey厂商开发了各自针对IE浏览器的控件,IE浏览器控件实现技术自身的安全隐患以及部分控件在开发过程中存在的不严谨性为木马程序攻击提供了便利.为此,定期(至少在使用USBKey之前)查杀用户计算机上的木马等恶意程序,是安全使用USBKey的前提. PKI是一种利用公钥加密技术为互联网应用提供一套安全基础平台的技术规范和遵循标准,它能够为网络应用提供身份认证、数据加密和数字签名等密码服务及所必需的密钥和证书管理体系.更具体地讲,PKI就是利用公钥密钥理论和技术建立的提供安全服务的基础设施.目前,在PKI体系应用中USBKey已经逐渐取得了早期使用的单纯“数字证书文件”形式,通过存储其中的用户密钥和数字证书实现用户身份认证和数据安全传输.图2是PKI体系中使用USBKey实现用户身份认证和数据加密的流程示意图[11],其工作过程如下: 图2 PKI体系中USBKey实现用户身份认证和数据加密 1) 通过步骤①输入USBKey使用者的信息,生成用户证书.在面向社会服务的PKI体系或大型组织中,一般会有一个注册机构(registration authority, RA),专门负责证书发放、更新、撤销等操作,RA提供用户和CA之间的接口,在获取并认证用户的身份后,向CA提出证书请求.同时,对于服务器SSL证书,系统维护人员(管理员)在申请服务器数字证书时需要输入生成证书签名请求(certificate signing request, CSR)文件所需要的信息. 2) 通过步骤②③向CA申领数字证书.根据服务功能和对象的不同,CA既可以由机构自建,也可以使用第三方可信机构提供的CA系统.RA管理员客户端程序调用USBKey驱动,在USBKey中生成公钥密钥对,之后RA将从USBKey中获得已生成的公钥,并与用户信息一体经格式化后发给CA.CA使用自己的私钥对请求进行签名,生成用户数字证书;管理员将认证服务器CSR导出,同样将请求发给CA,CA使用自己的私钥对请求进行签名,生成服务器数字证书. 3) 通过步骤④⑤获取到数字证书.RA管理员的客户端程序获得由CA签发的符合X.509标准的数字证书后,调用USBKey驱动程序将数字证书写入USBKey.同时,RA管理员将该用户的相关信息和对应的数字证书导入到认证服务器中,以便该用户在后续操作中使用;管理员将返回符合X.509标准的服务器证书导入到认证服务器. 4) 通过步骤⑥导入CA证书.管理员将CA自己的证书导入到认证服务器中,以便于认证服务器通过CA证书来验证所有经CA签发的用户证书;同时,用户将CA的证书导入客户端浏览器. 5) 通过步骤⑦~⑨实现用户身份认证和数据加密操作.用户向认证服务器发起认证请求,认证服务器返回服务器证书,用户客户端检查证书的有效性(证书的有效期、是否为可信CA签发等),并验证服务器的真实性,完成对服务器的认证;服务器要求用户客户端发送用户证书,客户端向服务器发送自己的用户证书,服务器检查证书的有效性,并验证客户身份的真实性.出于安全考虑,此运行过程在用户输入PIN码后在USBKey中进行,而且用户私钥一直没有离开USBKey;通过双向认证后,客户端生成一个会话密钥,并利用服务器公钥进行加密后发给服务器,从而完成会话密钥的交换,在之后的通信中将采用该会话密钥实现数据的对称加密. 作为一个安全管理平台,PKI需要遵循证书格式、证书申领流程、证书下载规范、证书的使用和操作要求等各种标准. 4.2.1 证书管理 数字证书的管理主要包括证书的申请、审核、下载和使用等方面.在PKI体系中,CA负责证书的签发和管理,RA负责对用户信息进行资格审查,CA和RA都必须遵守相关的规范.例如,银行系统的RA在审核用户信息时,对是否存在恶意透支或贷款逾期不还等不良行为要进行全面细致审核,并认真核对用户的身份证等信息.证书的下载通过PKCS#7安全协议将由CA签发的数字证书写入到USBKey,在此过程中需要保证用户客户端系统和工具的可靠性和安全性. 4.2.2 CA管理[12] CA通常为一个称为安全域(security domain)的有限群体创建和发放数字证书.创建证书时,CA首先获取用户的公钥等请求信息,然后根据用户的请求信息产生证书,并用自己的私钥对证书进行签名后下发,其他用户、应用程序或实体将利用CA的公钥对证书进行验证.如果一个CA是可信的,则所验证的证书中的公钥一定属于证书所代表的那个实体.对CA的管理离不开CPS中的约定.证书操作声明(certificate practice statement, CPS)是一些由商业证书发放机构(common certification authority, CCA)或者可信第三方CA需要遵循的安全策略和操作规范,主要包括CA的创建与运行,证书的创建、发放、废除,密钥的产生与保存以及用户的注册等约束性条款.CPS规定了CA对外服务所担负的权利和义务,可以通过及时准确地发布功能类似黑名单的证书吊销列表(certificate revocation list, CRL),以免证书依赖方受到欺骗.RA有权对证书申领者的资格进行审核,同时接受CA的监督和审计. 4.2.3 密码管理 类似于日常生活中负责护照和身份证办理的社会机构,CA在PKI体系中负责签发和管理数字证书,具有公正性和权威性.公钥密钥机制是构建PKI体系的核心,在《信息安全技术:证书认证系统密码及其相关安全技术规范》[13]中详细规定了数字证书认证系统的密码算法及其相关安全技术要求,主要包括证书认证系统、密钥管理系统、密码算法、密码设备及接口、证书认证中心、密钥管理中心以及证书操作流程等内容,其中密钥管理系统由密钥生成、密钥库管理、密钥恢复、密码服务、密钥管理、安全审核、认证管理等模块组成.对证书认证系统使用密码算法也进行说明和规定:使用对称密钥密码算法实现数据加/解密以及消息认证,使用非对称密钥密码算法实现数字签名/验证以及密钥交换,使用Hash算法实现待签名消息的摘要运算,而且规定采用国家密码管理主管部门认可的密码算法,其中Hash算法推荐采用SM3算法.同时,在2020年1月1日起实施的《中华人民共和国密码法》中明确规定:密码是国家重要战略资源,密码工作是党和国家的一项特殊重要工作,其直接关系到国家政治安全、经济安全、国防安全和信息安全.相关法律的出台和实施,为规范PKI体系中密码算法的选择、使用和管理提供了制度保障. 数字证书的安全应用主要通过对数字证书客户端的安全管理,防止可能出现的针对客户端的各类攻击行为的发生. 4.3.1 防止针对用户信息的攻击 目前,虽然PKI体系的安全性得到了大家的普遍认可,在网上银行、证券交易等需要在线支付的系统中用数字证书来替代早期使用的“用户名+密码”方式.但是,在一些用户的日常应用中还是出于应用的便捷性,通过输入用户名和密码后进行各类在线操作.这种现象在基于智能手机的移动支付领域普遍存在.由于智能手机的自身功能和安全的局限性,无法直接使用USBKey介质来保存用户数字证书,而且针对Android等操作系统和在线支付平台存在的安全薄弱环节编写的木马程序,可常驻系统监视用户网络交易,强制用户使用网银,并借机篡改订单、盗取财产等.随着各类在线支付应用的普及,一些有组织的地下黑色产业链利用钓鱼网站,通过克隆假网站来欺骗用户,并利用社会工程学技术来窃取用户的账号和密码等信息.为此,在加强用户端应用安全的前提下,对于涉及到较大资金的在线支付建议采用USBKey证书,以提高应用的安全性. 4.3.2 防止对用户数字证书的非法使用 在USBKey证书推出之前,银行、证券公司等机构在认识到“用户名+密码”方式存在的安全隐患后,曾大量签发将数字证书和私钥打包存放于计算机硬盘或U盘等介质上的“文件数字证书”.数字证书虽然从体系上提高了应用的安全性,但由于文件的可复制性,同样存在数字证书及私钥被窃取或冒用带来的安全风险.如今,还有不少互联网应用在使用“文件数字证书”方式,无论是系统拥有者还是系统使用者,都需要在应用需求和安全风险之间进行评估,以防止安全事故的发生. 4.3.3 防止数字证书应用中人为因素带来的不安全问题 RA的主要功能是审核数字证书申领者的身份信息和资格条件,但在熟人社会里,可能由于人情关系或管理上的漏洞存在审核不严等问题,为数字证书的申领埋下了隐患.另外,当用户向机构申领了USBKey证书后,首先会得到一个空USBKey,要求用户在线下载数字证书.按照正常的操作,下载数字证书有严格的保密和安全措施,如获得授权码(authorization code)后才能登录系统,按照规定步骤下载数字证书,但在此过程中包括机构和用户都可能会由于管理漏洞或安全意识淡薄而没有按规定要求进行.为此,加强对数字证书从申领到应用各个环节的安全管理,是保障数字证书发挥其应有功能的前提. 数字证书的安全是一个综合密码算法、安全加密机制、PKI体系、数字证书应用与管理等众多技术细节和实现环节的复杂过程,只有确保每个细节和环节的规范和合规,防止木桶效应的出现,才能真正发挥PKI体系在网络安全中所具有的应用优势.作为一项安全机制,数字证书的安全也在应用中不断完善,例如无驱动USBKey的应用可以防止安装驱动时可能会下载木马程序,使用一次性口令(one time password, OTP)令牌避免了静态密码可能存在的重放攻击,使用双因子认证或人体生物识别技术(如指纹、人脸、虹膜等)提高身份认证的可信度等.只有加强对PKI体系中数字证书等技术的研究,不断优化密码算法,不断强化数字证书的申领和使用管理,才能确保在线交易的不可否认性和数据传输的完整性与安全性,以及数字签名的可靠性.2.2 RSA算法的安全威胁
2.3 安全防范措施
3 USBKey的安全性
3.1 USBKey结构
3.2 USBKey自身的安全性
3.3 安全防范措施
4 PKI体系的安全性
4.1 USBKey在PKI体系中的应用
4.2 数字证书的安全管理
4.3 数字证书的安全应用
5 结 语