基于Linux的身份认证系统设计与实现

2010-06-13 11:33:04肖龙远
微处理机 2010年3期
关键词:智能卡指纹识别串口

李 顺,肖龙远

(中国工程物理研究院电子工程研究所,四川绵阳,621900)

1 引言

采用“用户名+密码”的原始模式进行身份认证已不再安全,为此提出了很多新的身份认证技术,如智能卡技术、生物识别技术。目前的智能卡已经可以采用DES算法及基于RSA的PKI体系进行认证,也可以存储和操作基于X.509的CA数字证书,但由于智能卡本身的硬件限制,使得进行RSA运算显得非常缓慢,虽然有些智能卡附有协处理器加快了数学运算,但增加了成本开销。生物特征识别技术是利用人体生物特征来进行身份验证的一种解决方案。指纹识别技术是众多生物识别技术中最为实用和最为成熟的技术之一,指纹识别技术同智能卡,密码等身份识别手段相比,具有不可替代、不可假冒、不易丢失等优点[1]。本文将指纹识别技术应用于嵌入式终端用户身份认证过程,有效解决了智能卡方案中认证速度慢、密码认证方法安全性低的问题。

2 AT91SAM9261控制芯片

AT91SAM9261是Atmel公司推出的基于ARM9的32位处理器。在工作频率为180MHz的情况下,其运算速度为200MIPS。其内部支持LCD控制器、串行通信口(包括USB从机模块、UART、SPI以及I2C)和多媒体通信口,还提供一个用于调试的JTAG接口。功耗方面,AT91SAM9261待机电流仅为2.5μA,工作频率为 500Hz时,电流消耗为 400μA。而且AT91SAM9261价格便宜,功耗低,又能满足设计需要,所以AT91SAM9261非常适合用于嵌入式终端的开发。

3 指纹模块

3.1 模块介绍

采用艾菲尔公司的指纹模块EFM-250,EFM-250是通用型指纹识别模块,能完成指纹采集、指纹登记、指纹1:N和1:1比对等与指纹有关的操作。它由高速信号处理器DSP、射频原理真皮指纹传感器(滑动式)、高性能指纹比对算法等软硬件组成。EFM-250具有体积特别小,比对速度更快,指纹容量更大等特点。

3.2 通信协议

指纹模块与开发板的接口是采用标准串行口进行通信(USART),开发板通过串口向模块发送数据包,数据包中包含着指纹模块应执行的命令(如提取指纹、搜索指纹等)。主机发送的数据包必须严格按照l表1,表2格式封装:

表1 指令包格式

表2 应答包格式

4 系统组成

系统主要由AT91SAM9261芯片、指纹传感器、指纹信息处理器、存储芯片、电源模块、显示模块以及相应的接口电路组成。使用16位的高性能SDRAM加快了数据的读取速度,使用16M nand flash存储嵌入式Linux操作系统。

图1 系统硬件构成

5 软件开发

软件开发主要是基于嵌入式Linux操作系统串口的读写操作以及根据通信协议开发板与指纹模块进行通信。由于身份认证系统中若有些操作(如设置超级用户密码)出错,将会影响以后的通信,这就需要通信过程中尽量避免出现收包出错的现象。本文采取了良好的出错处理机制,并利用select函数防止串口阻塞,提高了代码的鲁棒性和健壮性[2]。

5.1 串口操作

串行口是计算机的一种常用接口,具有连接线少,通讯简单,得到广泛使用。Linux中,串口COM1和COM2分别对应操作系统的/dev/ttyS0,/dev/ttyS1两个设备文件。Linux对设备的访问是通过设备文件的访问来进行的,对串口的读写就相当于对文件的读写[5]。

5.1.1 打开串口

fd=open(“/dev/ttyS1”,O_RDWR);//设置成可读可写,默认阻塞模式

5.1.2 设置串口属性

串口的属性定义在结构体struct termios中。为在程序中使用该结构体,需要包含文件<termios.h>,该结构体定义如下:

struct termios

{

tcflag_t c_iflag;/*输入选项标志*/

tcflag_t c_oflag;/*输出选项标志*/

tcflag_t c_cflag;/*控制选项标志*/

tcflag_t c_lflag;/*本地选项标志*/

cc_t c_line;/*line discipline*/

cc_t c_cc[NCCS];/* control characters*/

speed_t c_ispeed;/* input speed*/

speed_t c_ospeed;/* output speed*/

};

在这个结构中最为重要的是c_cflag,通过对它的复制可以设置波特率、字符大小、数据位、校验位、停止位,流控协议等。输入模式c_iflag成员控制端口接收端的字符输入处理。c_cc包含了超时参数和控制字符的定义。

设置串口流程:

(1)保存原先的串口配置:这里可以使用函数tcgetattr(fd,&oldtio),这个函数得到与fd指向对象的相关参数,并将它们保存于oldtio引用的termios结构中;

(2)激活选项CLOCAL和CREAD:CLOCAL和CREAD分别用于本地连接和接收使能,通过位掩码的方式激活这两个选项;

(3)设置波特率:设置波特率有专门的函数cfsetispeed和cfsetospeed;

(4)设置字符大小:首先去除数据位中的位掩码,再重新按要求设置;

(5)设置奇偶校验位:这时需要用到两个termios中的成员:c_cflag和c_iflag。首先要激活c_cflag中的校验位使能标志PARENB和是否要进行校验,同时还要激活c_iflag中的奇偶校验使能;

(6)设置停止位:设置停止位是通过激活c_cflag中的CSTOPB而实现的,若停止位为1,则清除CSTOPB,若停止位为2,则激活CSTOPB;

(7)设置最少字符和等待时间:分别通过设置c_cc[VMIN]和 c_cc[VTIME]来完成

(8)处理要写入的引用对象:由于串口在重新设置之后,要写入的引用对象要重新处理,调用函数tcflush(fd,TCIOFLUSH);

(9)激活配置:在完成全部串口配置之后,利用函数tcsetattr激活配置;

5.1.3 串口读写

可用标准的文件读写函数:

ssize_t read(int fd,const void*buf,size_t count);//如果调用成功则返回读出的字节数

ssize_t write(int fd,const void*buf,size_t count);//如果调用成功则返回写入的字节数

在对串口进行读的时候,如果因为数据传输出错导致读不到数据,此时read会阻塞,这时候程序将会死机,解决这个问题的方法是使用select函数实现串口的非阻塞读写:

struct timeval tv;//定义select阻塞的时间

fd_set readfd;//定义文件描述符集合

tv.tv_sec=maxwaittime/1000;//SECOND

tv.tv_usec=maxwaittime%1000*1000;//USECOND

FD_SET(fd,&readfd);

rc=select(fd+1,&readfd,NULL,NULL,&tv);

为了便于与指纹模块通信,定义了结构package_struct,直接通过package_read和package_send函数来实现对串口的发包、收包、解包的工作,两个函数定义如下:

int SendPackage(package_struct package_send);

int ReceivePackage(package_struct*package_receive,unsigned short package_len);

5.2 软件流程

身份认证系统实现的功能有:

(1)设置超级用户口令,用户需要先验证超级用户口令才能进行其他操作,该口令默认为0;

(2)自动登记新指纹,自动搜索指纹库中的空位,提取指纹特征,进行存储;

(3)自动识别指纹,提取指纹特征,搜索指纹库,搜索到返回指纹的ID号及指纹匹配分数;

(4)清空指纹库,清空指纹库中所有的指纹特征;

(5)删除某个或多个指纹,删除指纹库中指定ID号开始的N个指纹特征;

(6)手动登记,手动识别,,这两个功能需要多次发送指令包和接收解析包。手动登记需要用户指定指纹特征的存储位置,操作较繁琐,图1中没有给出两者的实现流程;

软件流程图如图2所示。

6 结束语

采用指纹识别技术对嵌入式终端用户进行身份认证,详细介绍了Linux中串口应用的开发,根据efm250的通信协议利用串口与指纹模块进行交互,在基于AT91SAM9261的开发板上实现了身份认证系统的各种功能。经过测试,该系统认证速度快、可靠性高。

图2 软件流程图

[1]柴晓光,岑宝炽.民用指纹识别技术[M].北京:人民邮电出版社,2004.

[2]冉林仓.Red Hat Linux 9编程开发与网络管理[M].北京:电子工业出版社,2006.

[3]Greg Hankins.Linux Serial HOWTO v1.11[DB/OL].http://www.chinalinuxpub.com/.

[4]马忠梅.ARM&Linux嵌入式教程[M].北京:北京航空航天大学出版社,2004.

[5]Kurt Wall.GNU/Linux编程指南(第二版)[M].张辉,译.北京:清华大学出版社,2006.

[6]Sweet MR.Serial Programming Guide for POSIX Operating Systems[M].O’Reily& Associations,2002.

猜你喜欢
智能卡指纹识别串口
浅谈AB PLC串口跟RFID传感器的通讯应用
东方磁卡李晓东:进击的智能卡研发巨子
时代人物(2019年27期)2019-10-23 06:11:58
基于单片机指纹识别电子寄存柜设计
电子制作(2018年11期)2018-08-04 03:25:46
基于STC89 单片机的非接触智能卡读写机设计
电子制作(2017年17期)2017-12-18 06:40:36
指纹识别技术综述
USB接口的多串口数据并行接收方法探索
临沂机顶盒智能卡升级方案介绍
基于蓝牙串口适配器的GPS接收机与AutoCAD的实时无线通信
地矿测绘(2015年3期)2015-12-22 06:27:26
基于大容量指纹识别的实时身份认证系统
基于线阵CCD的指纹识别实验
物理实验(2015年10期)2015-02-28 17:36:53