我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 596|回复: 0

Linux平台下智能卡整体支持方案 - 工业/测控 - 电子工程师俱

[复制链接]

该用户从未签到

1万

主题

1292

回帖

2万

积分

管理员

积分
29577

社区居民最爱沙发原创达人社区明星终身成就奖优秀斑竹奖宣传大使奖特殊贡献奖

QQ
发表于 2013-3-30 00:34:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有账号?立即注册

×
<strong>0.引言</strong>

由于智能卡在身份认证领域的独特优势,实际上已经成为符合法律意义上的电子商务和电子政务领域首选
的合法载体。在Windows Server及其以后的版本中,提供了对的智能卡整体支持,包括智能卡的驱动、身份认证、移除策略等[1]。由于担,r‘,windows安全方面存在的诸多问题,还有愈演愈烈的版权问题。因此不少电子商务和电子政务单位准备采用开源的Linux操作系统作为关键平台首选的操作系统。然而遗憾的是,在开源的Linux领域,智能卡的发展比较缓慢,目前没有提供对智能卡的整体支持[2]。但是所幸的是,由于开发源代码的优势,在世界的开源组织中,出现了不少支持智能卡的软件和相应的实现方案[3]。但是现有的方案和软件存在不少问题:有些软件虽然能够使智能卡在Linux环境下工作,但是仅限于本地认证;而另外有砦软件,则由于对智能卡的型号或智能卡中信息存储的格式有特殊要求,因而限制了其通用性。这些限制不能满足日益发展的电子商务与电子政务的需要。

本文通过对原有技术研究,提出了一个整体方案,可以满足常见的电子商务和电子政务安全需要,如热线彩票机等。

本文首先研究了与智能卡相关的协议,通过编写守护进程实现Linux对智能卡的支持;通过编写身份认证模块,实现相应的智能卡身份认证工作,如果认证失败,还能发出相应的远程报警;通过改写屏幕保护程序,实现智能卡的移除策略。

本文的操作系统选择Linux的redhat9版本;智能卡采用符合PC/SC规范的智能卡,这种智能卡销售广泛,国内有很多公司在生产,如握奇公司的TimeCOS/PK卡。

<strong>1.智能卡的技术标准</strong>

智能卡很多的技术标准。下面我们主要介绍两个标准:IS07816和PC/SC。

1.1 IS07816标准[4】

智能卡技术是ISO国际标准组织定义的智能卡标准。定义了智能卡的各个方面,包括物理特征、物理接触界
面、电子信号和传输协议、命令、安全体系、应用程序标识符和公用数据元素等。我国目前已经采用了IS07816系列标准中的前三部分作为中国标准。

1.2 PC/SC标准[5]

PC/SC即个人计算机(Personal computer)/智能卡(Smart Card),它原来是为智能卡访问Windows平台(
Windows2000以上支持)而定义的一种标准结构,其实它实质上是一个与平台无关的技术。PC/SC分为以下四层:

1、应用程序层(Smart Card Aware Application)

是根据自己需要编写的应用程序。在我们的应用中,它是使用C语言编写的程序,直接调用读卡器封装好的API。

2、智能卡服务提供者(Smart Card ServiceProvider)

它通常是由智能卡生产商提供的。

3、智能卡资源管理器(Smard Card Resource Manager)

智能卡资源管理器是PC/SC体系结构的核心部分。智能卡资源管理器整合了一些智能卡读卡器驱动程序和应用程序的通用部分,然后到一套可重用的组件之中。操作系统供戍商提供智能卡资源管理器。

遗憾的足,在redhat9系统中,操作系统没有提供相应资源管理器。所以只有靠自己编写或者改写部分厂家
不太完善的组件。

4、智能卡读写器驱动程序(Smart Card Reader Driver)

由生产厂商提供的智能卡读写器驱动程序负责把资源管理器语言转化为读卡器语言。

虽然在Linux平台下,智能卡的应用发展比较缓慢,没有相应的操作系统进行整体性支持。所幸的是,由于
Linux的开放源代码的优势,世界开源组织中,也有了免费的PC/SC智能卡框架,如pcsc-1ite[3]。这样如果我们采用的智能卡和Pc/SC兼容,就能很方便进行应用程序的开发。

<strong>2.Redhat9对智能卡支持的实现</strong>

要想完成redhat9对智能卡的支持,需要完成以下工作:(1)智能卡与读卡器通信的智能卡驱动程序的安装;
(2)计算机与读卡器通信的PC/SC中间件的安装;(3)PC/SC系统服务的设计;(4)把设计好的PC/SC服务加入系统守护进程,成为真正的系统服务。

2.1读卡器驱动程序的安装

读卡器驱动程序一般由智能卡生产厂商提供,它提供了智能卡和读卡器的通信。负责把智能卡底层符合
IS07816标准的协议数据转换为符合PC/SC规范的数据。从而实现和高层协议的通信。

2.2 PC/SC中间件的安装

首先下载PC/SC的安装包,以成熟的pcsc-lite-1.2.9为例。然后以ROOT用户登录系统。执行下列命令:


<ignore_js_op>





2010-3-26 14:43:40 上传
<strong>下载附件</strong> (2.4 KB)




</ignore_js_op>


//允许作为守护进程运行。在这个系统中,由于我们要实现使用智能卡来做身份认证工作,所以必须做为守护进程来运行

bash# make
bash# make instal l

有关PC/SC其它问题请参考[6],参考[7]中介绍了最新的版本pcsc-1 ite 1.5.1。

安装完成后。运行程序PCSCD一一stdout&。然后用PSTREE查看是否存在pcscd守护进程。如果存在,表明pcsc中间件的安装已经完成。

2.3 PC/SC系统服务的设定

为了提供操作系统对智能卡的良好支持,一般要求PC/SC中间件作为系统服务来运行。在参考[3]中,提供了类似的服务,经过简单修改,即可使用。注意如果有多个智能卡,必须进行配置[5]。

2.4 pcscd)J1]入系统守护进程,随系统启动首先将刚刚编写的PC/SC系统服务PC SCd放入/ete/init.d目录下,然后在指定的rc.d目录下作连接,执行命令:ln-sf/etc/init.d/pcscd/etc/rc.d/
rc5.d/S94pcscdf即可完成。

重新启动系统,运行命令pstree,如果见到pcscd守护进程随系统启动,就完成了操作系统对智能卡的支持
工作。

<strong>3.身份认证的实现</strong>

在Linux下使用智能卡进行身份认证,需要自己编写相应的PAM模块。

3.1身份验证PAM模块的编写

编程位于PAM的应用接口层,最重要的是编写pam—authenticate()函数。这些API接口将被Linux系统
的login模块调用,为Linux系统提供登录认证[7]。图1是需要编写的pam authenticate 0的函数流程:


<ignore_js_op>





2010-3-26 14:43:40 上传
<strong>下载附件</strong> (8.64 KB)




</ignore_js_op>


从图中可以看出,本函数首先对读卡器进行初始化工作,如果成功就调用自己的身份验证程序,当身份验
证失败后,就调用远程报警程序。远程报警程序简单可以调用简单的邮件命令mail发出邮件进行实现,也可以通过其它方法实现,甚至可以使用复杂的防盗追踪技术[9]。

3.2 PAM模块的配置

配置文件也放在了在应用接口层中,它与PAM API配合使用,从而达到了在应用中灵活插入所需鉴别模块的
目的。它的作用主要是为应用选定具体的鉴别模块,模块间的组合以及规定模块的行为。

1 认证模块

认证模块编译后为pam一木.S0文件,放在/1ib/security目录下。本系统编写的智能卡登录部分的PAM模块名为pam_login.so。

2 配置文件

在redhat Linux下配置文件放在/etc/pam.d下。在pam.d目录下文件名即为服务名,文件的格式为:

module-type control-flag modulel-path args

修改gdm-autologin文件,在文件首行添加:

auth sufficient pam_login.so

本部分配置完成之后,就完成了身份验证工作。

<strong>4.智能卡移除策略的实现</strong>

如果要实现智能卡的移除策略工作,需要解决两方面的问题:首先要编写新的智能卡守护进程,实时监控
智能卡的状态;第二是实现屏幕锁定和解锁的问题。下面分别讨论。

4.1智能卡守护进程的编写

智能卡守护进程实时查询智能卡的状态,当智能卡状态发生变化的时候向相应的程序发出信号。图2是智能
卡守护进程的流程图:


<ignore_js_op>





2010-3-26 14:43:40 上传
<strong>下载附件</strong> (5.32 KB)




</ignore_js_op>


程序使用阻塞的方法,监控者智能卡是否移除[5]。如果移除,程序首先断开卡的连接,进入屏幕锁定状态。此时,程序通过启动经过改写的屏幕保护程序,从而锁定屏幕。

在屏幕锁定状态下,程序继续进行阻塞,一直到卡插入,如果身份验证成功,则解除锁定。

4.2屏幕解锁的实现

可以通过改写屏幕保护程序实现。研究一下屏幕保护程序解锁的程序lock.C[10],注意有以下代码:

while(si->pw_data && si->pw_data->state==pw_read)

意思是当X windows检测到事件类型等于键盘(event.xany.type==KeyPres s)的时候,就启动
handle_passwd_key (si, &event.xkey)口令验证程序。在这里添加事件类型为:event.xany.t yp e==
KeyPress|| event.xany.type==PointerMotion,那么鼠标进行移动时也触发相应的检测事件。

注意以下语句:


<ignore_js_op>





2010-3-26 14:43:41 上传
<strong>下载附件</strong> (2.12 KB)




</ignore_js_op>


passwd_valid_p函数是身份的验证函数,它是采用PAM模块的方式定义的,定义在passwd-pam.c文件中。

把上面的语句改为:


<ignore_js_op>





2010-3-26 14:43:40 上传
<strong>下载附件</strong> (3.13 KB)




</ignore_js_op>


此时,我们就可以实现简单的解锁工作。

<strong>5.结束语</strong>

按照以上的办法,实现了Linux系统下智能卡平台的整体支持方案。电子商务和电子政务单位在开源的
Linux平台下使用智能卡,就像windows平台一样方便。试验表明,运行稳定、可靠,可以满足热线彩票机等电子商务领域和电子政务的需要。经过改进之后,甚至可以在超市收银、电信收费终端设备上使用。

<strong>参考文献</strong>

1. 莫林莫托.杜大鹏 Windows Server 2003深层解决方案 2005
2. 赵建超 基于Linux下智能卡登陆操作系统的实现方法 [期刊论文] -西安航空技术高等专科学校学报2006(5)
3. Mario Strasser and Martin Saegesser,smartcard-login DocumentatiOn.2001 2007
4. ISO SmartCard standard.2003 2007
5. pcscworkgroup PC/SC Specifications 2.01.4 2007
6. Mario Strasser Smart Card Login HOWTO 2007
7. Ludovic Rousseau pcsc-lite 1.5.1 2009
8. Andrew G Morgan The Linux-PAM Module Writers'Guide.2001 2008
9. 李曙光.张琼声.李文琳 嵌入式 Linux系统智能手机防盗追踪功能的实现 [期刊论文] -微计算机应用2007(11)
10. RedHat Linux9 源代码 2003

作者:王东升赵建超 (河南工业职业技术学院计算机工程系,河南省南阳市,473009)
来源:电子技术 2009 36(8)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

公告:服务器刚移机,
大家请不要下载东西。
会下载失败


Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

( 闽ICP备2024076463号-1 ) 论坛技术支持QQ群171867948 ,论坛问题,充值问题请联系QQ1308068381

平平安安
TOP
快速回复 返回顶部 返回列表