基于数字证书的UKEY安全登录
与身份认证技术研究
摘 要 本文在研究身份认证技术、uKey技术及Windows系统登录原理基础上,提出了基于数字证书的uKey身份认证与安全登录方案,设计了自定义登录模块,从而实现了使用uKey进行主机安全登录的功能。
关键词 uKey;安全登录;身份认证
1 引言
用户在访问安全系统之前,首先经过身份认证系统识别身份,然后访问监控模块,系统根据用户身份和授权情况决定用户是否能够访问某个资源。因此系统安全登录与身份认证是安全系统中的第一道关卡,也是实施访问控制的基础,在系统安全领域具有十分重要的作用。本文提出了基于数字证书的uKey安全登录与身份认证方案,采用将第三方开发的uKey与用户身份信息相结合的认证方式,保证每个用户在登录时具有证明其身份的唯一标志,从而使系统通过这个惟一标志验证用户身份合法性。
2 身份认证技术
身份认证是网络安全技术的一个重要方面。用户在访问安全系统之前,首先经过身份认证系统识别身份,然后访问监控模块,系统根据用户身份和授权情况决定用户是否能够访问某个资源,常用的口令认证方式有以下几种:
1)基于口令的认证方式
基于口令的认证方式是目前在互联网和计算机领域中最简单、最容易实现的一种身份认证技术,也是目前应用最广泛的认证方法。例如:操作系统及诸如邮件系统等一些应用系统的登录和权限管理都基于口令
[1],当用户登录计算机网络时,需要输入口令。计算机系统将其认证机制建立在用户名和口令的基础上,如果用户将用户名和口令告诉其它人,则计算机也将给予那个人以访问权限
[2]。
2)基于智能卡的认证方式
智能卡(Smart Card)是法国人Roland Moreno于1970年发明的
[3]。法国BULL公司首创智能卡产品,并将这项技术应用到金融、交通、医疗、身份认证等多个方面。基于智能卡的身份认证属于通过物理设备进行身份认证的机制,该机制结合电子技术和现代密码学知识,大大提高了基于物理设备机制的安全性。每个用户持有一张智能卡,智能卡存储用户秘密信息,同时在验证服务器中也存放该秘密信息。进行认证时,用户输入PIN码(个人身份认证码),服务器认证PIN码,成功后即可读出智能卡中的秘密信息,进而利用该秘密信息与主机之间进行认证。基于智能卡的认证方式是一种双因素认证方式(PIN+智能卡),即使PIN码或智能卡单独被窃取,合法用户的身份仍不会被冒充(即不能获得访问权)。
3)基于生物特征的认证方式
生物特征识别是一种根据人体自身所固有的生理特征和行为特征来识别身份的技术,即通过计算机与光学、声学、生物传感器和生物统计学原理等高科技手段的密切结合,利用人体固有生理特征(如手形、指纹、面部特征、虹膜、视网膜等)和行为特征(如笔迹、声音、步态等)来进行个人身份鉴定
[4]。
生物特征认证技术的主要应用有辨识和验证两种。辨识(Identification)指的是确定用户身份,通常是在生物特征模版库中进行一对多匹配(One-to-Many Matching)或基于知识判别;验证(Verification)指的是验证用户是否为他所声明的身份,通常是用单模板进行一对一匹配
[5](One-to-One)。
4) 基于数字证书的认证方式
数字证书(Digital Certificate)是标志一个用户身份的一系列特征数据,其作用类似于现实生活中的身份证
[6]。国际电信联盟的X.509建议定义了一种提供认证服务的框架。采用基于X.509证书的认证技术依赖于共同信赖的第三方来实现认证,所不同的是其采用非对称密码体制,实现上更加简单明了。这里的第三方是指称为CA(Certificate Authority)的认证机构,该认证机构负责认证用户身份并向用户签发数字证书。数字证书遵循X.509标准所规定的格式,因此称为X.509证书。持有此证书的用户就可以凭此证书访问那些信任的CA服务器,通过CA服务器实现用户身份的验证。
3 基于数字证书的uKey安全登录与身份认证
Windows 2000操作系统以及微软后续的操作系统,如Windows XP都内置了对智能卡用户认证的支持,计算机用户可以选择使用传统的用户名、口令验证方式进行域内用户身份验证,也可使用智能卡来自动完成用户身份验证。
3.1 uKey技术
uKey又名智能电子密码钥匙,既完全继承了已有智能卡技术的安全性,又结合了新型USB接口的数据传输能力。
1)uKey简介
uKey是集智能卡与读卡器于一体的USB设备,支持热插热拔和即插即用,体积小、重量轻、便于携带
[7]。uKey本身作为密钥存储器,自身硬件结构决定了用户只能通过厂商编程接口访问数据,这就保证了保存在uKey中的数字证书无法被复制,并且每一个uKey都带有PIN码保护,这样uKey的硬件与PIN码就构成了使用uKey进行身份认证的双因子。如果用户uKey丢失,获得者由于不知道该硬件的PIN码,就无法冒充合法用户身份;如果用户PIN码泄露,只要保存好uKey硬件就可以保证自己的身份不被冒充。
安全性是众多应用(特别是网络应用)的基础,而实现安全性的手段一般都是通过加密算法来达到,因为加密算法可以更好地实现数据保密性、数据完整性、身份可鉴别性以及交易不可抵赖性。加密算法安全性主要取决于密钥的秘密性,而不必对算法保密。智能卡作为一种有效的安全保障设备,是保存密钥信息的最可靠手段。传统智能卡的封装形式需要额外的读卡器设备,因为设备体积较大且不便于携带,所以使用很不方便,另外读卡器设备也增加了整体的成本
[8]。如表1所示:uKey系列产品在完全继承智能卡优点的同时很好地解决了传统封装形式的诸多不足。
表1 uKey
与传统智能卡的比较
比较项目
|
uKey
|
读卡器+PK卡
|
成本
|
远低于读片器+PK卡的成本之和。
|
虽然PK卡成本较低,但读卡器成本通常很高。
|
移动办公
|
体积小、重量轻,方便随身携带,非常适用于移动办公。
|
读卡器体积大,也比较重,不便随身携带。
|
通讯速率
|
连接电脑主机的USB 口,通讯速率为12M bps,是高速设备。
|
通讯速率一般在9600bps~115200bps之间。
|
多用户
|
USB设备,共享方式,支持多用户访问。USB级联设备,通过级联方式,一台电脑可以接多个uKey。
|
对于串口读写器,串口资源是独占的且主机串口数量有限,如果串口已经被其它设备占用,将不能使用读卡器。USB接口读写器可支持多用户。
|
操作方便性
|
直接插在电脑主机的USB口或延长线接口上,操作极为简单。热插拔设备,可以随时插/拔uKey而不必担心损坏。
|
对于串口读写器,电脑主机串口不支持热插拔,经常插拔、操作不当时容易烧坏主机串口。USB读写器操作方便性同uKey。
|
2) uKey特点
(1)高安全性。uKey通过了国家安全管理权威部门—国密办的技术鉴定和认可,支持国密办认证的分组算法SSF33,也是国内唯一能同时支持ECC、RSA密码算法的同类产品。使用基于硬件RSA算法的uKey比单纯软件实现RSA的应用更加安全可靠。敏感数据都被保存在uKey的安全存储区域中,未授权用户将无法接触到这些信息。uKey的安全性还在于uKey所使用的加密算法都是被广泛公开、业界公认并经受了多年考验的算法。
(2)灵活易用。使用uKey无需任何附加外部设备。用户只需简单地将uKey插入任何带有USB接口的设备就可以使用uKey,使用完毕后直接拔下uKey就可以了。
(3)造价低廉。uKey比任何传统基于硬件的安全系统都节省开支。由于使用uKey无需任何附加设备,因此很适合大范围发行。uKey能够实现智能卡提供的所有功能,但是不需要智能卡读卡器。
(4)携带方便。uKey体积小,重量轻,精美时尚,可以随身携带。
(5)无缝集成。uKey提供符合业界广泛认可的PKCS#11和Microsoft CryptoAPI两种标准接口。任何兼容这两种接口的应用程序,都可以立即集成uKey进行使用。uKey内置大容量智能卡安全芯片,可以同时存储多个数字证书和用户私钥及其它数据。也就是说,多个PKI应用程序可以共用同一个uKey。
(6)高可靠性。uKey使用严格工艺制造,可长期安全的保存用户数据。
3.2 Windows登录原理
Windows 2000的登录方式分为两种:一种是交互式登录(Interactive Logon),另一种是远程登录
[9] (Remote Logon)。交互式登录是最典型的登录方式,并且由大部分访问域的用户所使用。当用户第一次登录到某台计算机时将发生交互式登录,该过程使用登录用户的用户名和密码来确切验证用户真实身份。
Windows操作系统的身份认证机制可以用Windows登录模块体系图来说明。如图1所示,Winlogon进程是Windows 2000及以上版本提供的一个支持交互式操作的组件,用于负责管理与承担登录相关的安全工作,包括处理用户的登录与注销、启动用户SHELL、输入密码、更改密码、锁定与解锁计算机等。GINA(Graphical Identification and Authentication)是一个图形动态链接库,在Winlogon进程中运行,用于提供可定制的登录界面并对用户进行身份验证。LSA(Local Security Authority,本地安全认证)是在用户模式下运行/Winnt/ System32/Lsass.exe映像的进程,负责本地系统安全策略。
图1 Windows登录模块体系结构图
在Windows登录过程中,如果用户在Windows系统启动后按下“Ctrl+Alt+Del”组合键,则会引起硬件中断,该中断信息被系统捕获后,操作系统立即激活Winlogon进程。Winlogon进程通过调用GINA.DLL将登录窗口(账户名和口令登录提示符)展示在用户面前。GINA.DLL在收集好用户登录信息后,就调用LSA的LsaLogonUser命令,将用户登录信息传递给LSA。实际上认证部分的功能是通过LSA来实现的,这三部分相互协作实现了Windows的登录认证功能。
缺省状态下,Windows系统提供微软公司自己实现的GINA.DLL—msgina.dll供Winlogon进程调用。用户登录前后计算机的状态有3个,分别是LOGGED_OFF(未登录)、LOGGED_ON(已登录)、LOCKED(锁定)。
3.3 msgina.dll的状态流程
msgina.dll的状态流程如图2所示,图中部分英文是调用的函数名称。
图2 msgina.dll状态流程图
(1)系统启动后,首先调用WlxNegotiate函数确认该DLL是否支持当前版本的Winlogon.exe,接着调用函数WlxInitialize进行相关函数初始化。完成初始化工作后,Winlogon进程调用函数WlxDisplaySASNotice显示欢迎用户登录界面,该函数还会检测是否有自定义的SAS(Secure Attention Sequence,安全提示码序列)出现。如果出现则通知Winlogon进程有登录请求发出。SAS在Windows 2000下缺省为“Ctrl+Alt+Del”,用户也可以定义自己的SAS。
(2)当发现有SAS事件发生时,Winlogon进程调用WlxLoggedOutSAS函数,并向下调用WlxDialogBoxParam显示用户登录对话框,然后调用LSA进行验证,如果验证通过,Winlogon进程调用函数WlxActivateUserShell启动用户外壳程序。
(3)当系统处于登录成功且没有锁定状态(LOGGED_ ON state)时,Winlogon进程接收到SAS事件时,就调用函数WlxLoggedOnSAS。
(4)当系统处于锁定的状态(LOCKED state)时,Winlogon进程则调用函数WlxDisplayLockedNotice显示一些信息,如锁定者、锁定时间等。当其接收到SAS事件时就调用函数WlxWkstaLockedSAS,该函数的返回值将确定工作站的状态:仍然锁定、解锁或用户注销。
(5)当用户注销时,Winlogon进程调用函数WlxLogoff,通知msgina.dll用户的注销操作,msgina.dll做出相应处理。当用户需要关闭计算机时,Winlogon进程调用函数WlxShutdown,允许msgina.dll进行系统关闭前的处理。
(6)缺省状态下,Winlogon进程在注册表中查找键值HKEY_LOCAL_MACHINE /Software/ Microsoft/Windows NT/CurrentVersion/Winlogon,如果存在GINA.DLL键,则Winlogon使用该键;如果不存在GINA.DLL键,则Winlogon就使用默认值msgina.dll。由于GINA动态链接库可以替换,因此只要通过一个自定义GINA来替换GINA.DLL,即可实现用其它认证方式代替Windows所默认的登录方式,例如:eKey、指纹识别等
[10]。
3.4 安全登录实现原理
利用uKey提供的安全机制,将数字证书存储在uKey中,以实现用户登录及身份认证。由Windows系统登录原理可知,要实现基于数字证书的uKey安全登录及身份验证,需要完成两项工作:一是编写自定义GINA,二是与uKey进行交互。
1) 自定义GINA—Ginamy.dll的实现
在GINA中,由Winlogon进程进行函数调用,通过自定义SAS可以实现对uKey设备的登录支持。GINA中有两个地方需要验证用户身份:一是系统启动时需要验证用户身份;二是系统锁定后解除锁定时需要验证用户身份,其对应函数分别是WlxLoggedOutSAS和WlxWkstaLocked SAS。
系统在没有用户登录之前,Winlogon进程接收到SAS事件时调用函数WlxLoggedOutSAS,因此可在该函数中对uKey的存在与否进行判断。
当插入uKey时,uKey检测窗口发现后向Winlogon进程发出登录SAS事件,调用LogonUser函数登录系统。在返回几个必要的参数后,Winlogon进程调用WlxActivateUserShell函数激活用户桌面,这样用户就可成功登录到Windows系统中进行正常操作。
在Windows使用过程中,如果用户有事需要离开现场而拔下uKey,则应用系统获得uKey断开的消息,通过调用WlxSasNotify函数发送一个自定义的SAS事件;随后Winlogon进程就调用WlxLoggedOnSAS函数进行相应的处理,通过发送返回值:WLX_SAS_ACTION_LOCK_ WKSTA实现对Windows系统桌面的锁定。
系统锁定后,如果用户重新插入uKey时,则系统通过调用WlxSasNotify函数发出一个自定义解除锁定的SAS事件;Winlogon进程调用WlxWkstaLockedSAS函数,在验证PIN正确后通过发送返回参数:WLX_SAS_ACTION_UNLOCK_ WKSTA即可对Windows系统桌面解锁,允许用户重新登录。
2) 与uKey进行交互
如图3所示,在办公局域网中可以采用集中式的管理方案,集中配置一个身份验证服务器,客户端所有登录请求都将被发送到验证服务器进行验证。
图3 身份验证的集中式管理方案
使用uKey进行身份认证与安全登录主要包括以下步骤:
1)初始化uKey
当新用户提出登录申请时,管理员根据用户需求生成数字证书,同时将数字证书和对应的密钥对写入一个全新的uKey中,然后将此uKey发放给用户。密钥存储在uKey中特殊的文件分区里,不能向外读出,以保证其私密性,但可以使用该私钥进行加密或签名。用户获得自己的uKey后就可以登录指定的机器。
2)用户注册
当客户端第一次使用uKey进行登录时,需要向身份认证服务器进行注册。客户端读出uKey中的数字证书,同时在本地创建本地账户名(机器名+硬盘序列号)和密码,经过私钥加密后一起发送给身份验证服务器。服务器接收到后,验证证书的合法性,如果合法,就认为此用户是合法用户,然后检查身份信息数据库。如果没有此账户名,服务器则认为这台机器是第一次被登录,需要进行注册,就把此账户名和密码加入身份信息数据库,接着服务器向客户端发回确认信息,客户端收到后则认为注册成功。
3)安全登录
用户登录客户端时,首先插入uKey并将用户信息提交到身份验证服务器,服务器生成随机数发回到客户端;然后客户端利用uKey对随机数进行签名并发回服务器端;最后服务器利用对应的用户公钥进行验证,如果有效就认为是合法用户,否则拒绝登录。具体登录验证流程如图4所示。
图4 基于uKey
的安全登录与身份认证流程
a.用户登录客户端,开启计算机。
b.Winlogon进程调用自定义的Ginamy.dll替换默认的msgina.dll,实现自己的身份验证过程。
c.Ginamy.dll通过调用uKey的API函数来检测uKey是否插上,如未发现uKey,则提示用户插入uKey,并拒绝登录。
d.一旦检测到uKey,则弹出自定义对话框,要求用户输入个人PIN码,这一过程是对持卡人身份的确认。
e.如果验证PIN码正确,则可启动认证过程(如图4中虚线框中的认证算法)。
f.自定义的Ginamy.dll模块将根据认证结果返回允许或禁止用户登录系统。
g.若用户有事暂时离开而拔下uKey,则计算机被锁定,直到用户重新插入合法的uKey,输入正确PIN码,经过验证成功后就可以重新登录系统。
3.5 安全性分析
安全系统自身的安全性是首先要考虑的问题,以下从四个方面对采用uKey实现身份认证的安全性进行分析:
1)用户私钥的双重保护
用户数字证书及个人密钥保存在uKey中。身份验证时,使用对称加密算法对用户私钥进行加密处理。由于私钥不通过网络传输,因此攻击者不可能从截获的数据中获得用户私钥。此外,uKey的访问密码只在客户端出现,也不通过网络传输。
2)认证过程的安全性
由于对随机数进行签名在uKey内部完成,用于签名的私钥保存在卡内固定区域,并且在签名过程中私钥不会被读出到内存,任何人都无法获得uKey私钥,因此保证了认证过程的安全性。
3)能抵抗重放攻击
由于每次身份验证时,服务器都要发送不同的随机数给客户端,因此,如果攻击者将以前截获的签名信息重放,则不可能认证成功;如果服务器发送的随机数被截获,由于攻击者不能得到用户私钥也不可能将随机数正确签名,因此也不可能认证成功。
4)能抵抗假冒攻击
由于攻击者无法获取用户私钥以及用户uKey的PIN码,因此无法向服务器端发送验证请求,从而无法通过服务器的认证。
4 小结
本文论述了身份认证技术,在研究uKey技术及Windows系统登录原理的基础上,提出了一种基于数字证书的uKey安全登录与身份认证方案,完成了自定义GINA的开发,实现了基于uKey的身份认证与系统安全登录功能。经调试运行,系统达到了对安全登录与身份认证的目标要求。