用IC卡在NT网中实现附加身份认证

来源:互联网 发布:字体生成器软件下载 编辑:程序博客网 时间:2024/05/22 05:10
2007年10月12日 02:15:00

一、引言

随着Internet的迅速发展,网络已成为一个国家的政治、经济、军事和教育的重要资源,各部门、团体甚至个人相继建立起了自己的网站和内部网络(Intranet),同时,网络的安全性也成为了一个日益严重的问题,网络攻击时有发生,许多重要网站都有被攻击和入侵的记录。在众多的攻击目标和攻击方法中,攻击者千方百计最想得到的是服务器系统管理员(NT中的administrator,UNIX中的root)的帐户名和口令,从而冒充系统管理员,完全得到网络的控制权,从事他不应该从事的活动。

在一般情况下,对于一个网络用户是否具有系统管理员身份这个问题,是靠他所知道的管理员的帐户名和口令与服务器上的口令文件中的记录是否一至来进行验证的,但只要口令的输入、验证过程以及口令文件没有和攻击者在物理上隔离,帐户名和口令是可以通过多种方法得到的,如强行攻击进行猜测,用特洛伊木马(Trojan),网络监听(Sniff)技术进行盗窃等。

为改善基于口令的身份验证所带来的不安全性,通常采用一些其它方法来进行辅助识别,如一次性口令、第三方认证、生物特征鉴别、管理员是否拥有某件不能伪造的物品等。这些方法可以使系统达到较高的安全性,但实现起来都很复杂和昂贵,需要专门的设备和系统,这里介绍的方法可操作性强,但不失为提高安全性的一种有效方法。

IC卡的全称是Integrated Circuit Card(集成电路卡),它具有国际标准化(Standard)、灵巧智能化(Smart)、安全性(Security)以及价格低廉的特点,目前在银行、邮电、交通、保安甚至军事等领域广泛使用。 IC卡具有很高的加密强度,安全性好,成功地非法复制和改写需要付出很高的代价,因而广泛地被用来作为身份验证的物品。IC卡有多种规格,有的配合相应的设备专门用作身份验证,这里综合价格和性能上的考虑,从一般用户都可以实现的角度出发,采用常用的逻缉加密串行传输存储卡,这种存储卡一般是电可擦除(EEPROM)的,可通过读卡机和PC机的串口(或USB接口)进行通讯。

二、基本原理

逻辑加密型存储卡(Smart Card with Security Logic)主要由EEPROM存储单元阵列和密码控制逻辑单元组成,存储器分为主存储器、保护存储器和加密存储器,加密存储器的第123字节为“参照字”存储区,其内容被称为可编程加密代码(PSC),在对这种IC卡进行读写操作时,需输入一个3字节长的“效验字”与PSC进行比较,只有在比较成功时方可对加密存储器的第123字节进行读写操作和对其它存储区进行改写操作,能否读出正确的“参照字”内容和是否能对存储区改写可作为鉴别IC卡的手段。3个字节可组成16777216种代码,并且每张IC卡一般只允许3次比较失败,在不知道“效验字”的情况下复制某IC是不可能的,因而用具有某“效验字”的IC卡作为一种身份的代表具有很高的安全性。IC卡本身是半导体电子元件,输入和输出的都是电信号,将电平适当转变,控制好时序后可直接与微机进行通讯。

身份验证过程如下:

1.在NT服务器上打开安全日志(unix上也有类似日志),并启动一守护进程,监视网络中管理员的登录事件,当发现有用户以管理员身份登录后,即要求登录的工作站对用户是否拥有所要求的含有特殊“参照字”的IC卡作认证,如果收不到认证信息则断开与该工作站的连接;

2.用户在工作站上登录后,即运行验证程序,检查本机的串口上是否有所要求的IC卡存在,如验证成功,则向服务器发认证成功的消息。

这种方法可靠性很高。首先来看“参照字”的安全性。IC卡上的“参照字”是IC卡和工作站上的验证程序共同“知道”的密钥,如果不知道“参照字”的具体内容,加密存储器的“参照字”是不可读写的,从IC卡上获取密钥和复制IC卡都不可能;通过对工作站上的验证程序反编译后有可能泄露密钥的内容,但反编译不是一件容易的事,而且,攻击者很难从网上获得程序。其次来看认证过程的安全性,认证过程由验证程序对IC卡的鉴别和守护进程对验证程序的鉴别两部份组成。验证程序读加密存储器的内容或改写存储器时,显然只有对管理员所拥有的IC卡进行操作时才可能成功。在守护进程和验证进程的通讯过程中,虽然传输信道被认为是不安全的,但现有多种基于密码学的协议实现一个进程通过不安全网络对另一进程进行鉴别(authentication),例如查问-应答(challenge-response)协议,密钥交换协议(Diffie-Hellman key exchange,KDS鉴别协议等,这些协议在所应用领域都是非常安全的,这里可酌情选择一种。

三、技术规范

1.引脚功能:接触式串行接口IC卡共有6-8个触点(C1C8),分别接到集成电路芯片的8个引脚上,主要厂商是德国SIEMENS公司和美国ATMEL公司,以西门子SLE442为例,各触点的功能定义如下,保留使用的引脚因公司和型号的不同而有不同的用途。

触点编号

功能

触点编号

功能

C1

VCC(电源)

C5

GND(地)

C2

RST(复位信号)

C6

保留使用

C3

CLK(时钟)

C7

I/O(数据输入/输出端)

C4

保留使用

C8

保留使用

2.电气特性:这种IC卡自带内部电压提升电路,采用5V单一电源供电,最大电流约200mA,可由PC机提供,其它信号高电平为5V,也可由串口驱动。

3.接口:IC卡的外观形状有多种,配备不同的读写设备,这里推荐使用通用的内置式ID-1型读写器,这种读写器符合ISO7816国际标准,外观和3.5英寸磁盘驱动器一至,与PC机串口相连,同时也可外置使用,IC卡尺寸(mm)85.6×53.98×0.76,不需额外供电。各种读写设备一般都配有在各种操作系统(DOSWINDOWSUNIX)下的软件开发环境和CFOXPROFOXBASE等下的接口函数。有兴趣的读者还可自制读写设备,象串口上的DB-9连接器,IC卡芯片的接触器件等在市面上皆有出售,汇编编程时需调用ROM BIOSINT 14对串口进行读写,在WINDOWS APIUNIX环境下需打开相应的设备文件,如COM/etc/getty等。

4.指令格式:数据传输采用两线连接协议,按ISO7816标准,有复位、命令、输出和处理四种模式。复位可在任何期间进行,芯片复位响应后进入待命状态,根据命令的内容进入数据输出(读数据)或数据处理模式(比较或修改数据)。命令含3个字节,格式为:

控制码

地址码

数据

BBBBBBBB

AAAAAAAA

DDDDDDDD

5.传送顺序为B0-B7,A0-A7,D0-D7,最后附加一个CLK信号将I/O端置高。

四、编程要点

1IC卡的比较操作:

比较操作的流程如图1所示,如果是直接对芯片操作,以SLE4442芯片为例,命令格式如下:

控制码

地址码

读加密存储器

31H

读出加密存储区的4个字节

比较效验数据

33H

1-3

输入数据

处理模式

修改加密存储器

39H

0-3

输入数据

处理模式

但读写器一般带有高层的读写接口和友好的编程环境,具体命令和读写器有关。

2.守护进程对验证进程的鉴别:

这里仅需要守护进程对验证进程进行单向鉴别,所以可以简化标准的查询-应答协议,如图2所示。

守护进程先向验证进程发送一大随机数A,验证进程用一种特殊的方法KS对随机数进行转换后将KS(A)传回对方,由于“特殊的方法” KS是守护进程和验证进程共知的秘密,所以可以确定来自验证进程的消息的真伪,K指加密算法,S指密钥。

加密的方法非常多,如DES数据加密标准的加密算法,RAS公开密钥加密算法,MD5等,这些算法都非常安全,但也非常复杂,可根据需要选用,这里采用一般的加密方法,这些方法也是加密的基本原则。加密的基本方法是替换、变位和添加冗余信息。替换是将某一信息固定地替换为另一信息,如A变为E等;变位是将信息的顺序按一定规律变为另一种顺序,添加冗余是在有用的信息中添加无用的信息以增加破译的难度。如下例所示:

8

5

2

8

4

6

2

7

1

密钥为852846271,守护程序向验证程序发送的随机数为390578389705486504,将明文按先行后列的顺序排列,第二行为随机的冗余信息,密文按先列后行的顺序输出,列的顺序按密码由小到大,先左后右,这样密文为904045375798960886860367524,再将前两个9替换为4,这时密文为404045375748960886860367524。

如需提高加密强度,可采用增加密钥、随机数、冗余信息长度,并将以上密文再次变换等方法。

3.守护程序及网络通讯:守护程序为监视用户的登录事件,需以系统管理员的身份在域用户管理器中打开系统安全日志,调用以下Windows API 函数:OpenEventLog(LPCTSTR lpUNCServerName,LPCTSTR lpSourceName) 打开事件记录句柄,ReadEventLog(HANDLE hEventLog,DWORD dwReadFlags,DWORD dwRecordOffset,LPVOID lpBuffer,DWORD nNUMBEROfBytesToRead,DWORD *pnBytesRead,DWORD *pnMinNumberOfBytesNeeded)读取事件以及NotifyChangEventLog(HANDLE hEventLog,HANDLE hEvent)发送消息给守护进程,在收不到验证进程的认证信息时调用WnetCancelConnecttion2(LPTSTR lpName,DWORD dwFlags,BOOL fForce)函数中断该网络连接。在WINDOWS平台下通讯可使用NetBEUI(NetBIOS)协议,但TCP/IP下的套接字(Sockets)的方式更通用和方便。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1821049


原创粉丝点击