张小波,陈军胜,白晓明,张俊,石吉宝
(成都市勘察测绘研究院,四川成都 610081)
USBKEY是一种USB接口的硬件设备,具有唯一编号,它内置单片机或智能卡芯片,有一定的存储空间,可用于存储用户的密钥及数字证书,利用USBKEY内置的公钥算法(如HMAC-MD5算法)可实现对用户身份的认证。由于用户密钥保存在USBKEY中,理论上使用任何方式都无法读取,因此保证了用户认证的安全性。
USBKEY用于身份认证,首先需要进行USBKEY的注册,在USBKEY中写入用户名信息,并在数据库中记录用户名、USBKEY的序列号等。
图1 USBKEY验证过程
USBKEY的验证过程如下:服务器端产生一个随机数,将随机数发送给客户端,客户端的USBKEY利用此随机数和存储的密钥文件通过硬件加密引擎进行计算,得到运算结果并发送给服务器;服务器端根据用户信息和随机数用加密引擎进行计算,得到运算结果,与客户端发送的结果进行比较,若结果一致则通过验证。
下面是以北京飞天诚信的ePass1000ND制作的一个基于ASP.NET的网络信息系统身份认证演示。
系统部署后,首先需要进行USBKEY注册,在客户机插入 USBKEY,输入一个密钥,然后点击“USBKEY授权”,将密钥加密处理后写入USBKEY。
在USBKEY验证时,需要输入待验证的密钥,然后点击“USBKEY验证”,若用户输入的密钥正确,则验证成功,否则验证失败。
图2 USBKEY注册及验证演示
客户端读写USBKEY是利用USBKEY厂家提供的ACTIVEX控件进行的,需要在ASPX页面的<body>段添加一个ACTIVEX对象,对象名为“epass”:
USBKEY的注册需要在用户数据库中写入用户账号密码信息及用户名与USBKEY对应关系,在USBKEY中写入密钥等,USBKEY写入密钥的核心代码如下:
USBKEY验证的实质是验证服务器端存储的密钥与USBKEY中存储的密钥是否一致,为安全起见,在验证时并不是直接用密钥进行比对,而是分别将密钥与一组随机数进行不可逆的哈希运算,比较哈希运算的结果是否一致即可。USBKEY验证需要服务器与客户端交互,服务器端生成随机数,利用随机数和密钥进行哈希运算,得到结果1;客户端的USBKEY利用此随机数和内部存储的密钥进行哈希运算,得到结果2;服务器端将结果1和结果2进行对比,若一致则验证成果,否则失败。
(1)生成随机数
(3)服务器端哈希运算及验证
以上是USBKEY用于网络信息系统身份认证的最简演示,在实际运用时,可以采取以下一些方法,进一步提高网络系统身份认证的安全性:
(1)用户名与USBKEY的序列号绑定:由于每个USBKEY都有一个不可更改的唯一序列号,因此实际上是将用户名与USBKEY硬件绑定了,用户只要保管好自己的USBKEY就可以防止他人以本人身份登录;
(2)写入USBKEY的密钥二次加密:一般以用户名或密码作为密钥,经加密后写入USBKEY。虽然密钥文件在USBKEY中对用户是不可见的,但是由于用户名或者密码本身仍然有泄露风险,因此可以自定义特定算法,对密钥进行二次加密后再写入USBKEY,这样即使非法用户盗取了用户名、密码仍然无法复制USBKEY;
(3)启用USBKEY自身的权限系统:在写入密钥散列计算后得到的两个文件时,可以对这两个文件的权限设置为需要用户PIN码验证,由于用户PIN码是USBKEY的使用者自行设置的,只与USBKEY硬件有关,与身份认证系统无关,且PIN码累计输错一定次数后USBKEY将会自动锁定无法使用,采用此种方法可以显著提高安全性。
[1]周广辉.USBKEY用户认证平台的研究和实现[J].信息安全与通信保密,2009(9):113~118.
[2]马伟强.我国网上银行身份认证技术分析[J].计算机安全,2012(3):50~52.
[3]北京飞天诚信科技有限公司.ePass1000ND开发文档[R].