PCSC那事儿(四)

 

7

打开卷 7 。我们一起来,大声点 “Lesson seven”…

 

本部分描述了智能卡应用程序使用 PC/SC 体系提供的功能的方法。通过使用智

能卡资源管理器和智能卡服务提供者所提供的高层函数接口,智能卡应用程序可

以做到一定程度的 IFD 无关性和 IC 卡无关性。

PC/SC 规范规定的体系结构中,接口设备是由接口设备供应商提供的,智能

卡及智能卡服务提供者由智能卡供应商或智能卡发行商提供的。一般来讲,应用

软件不必包括与 IC 的管理和 IFD 的管理有关的组件,遵循 PC/SC 规范的应用软件开

发者可以用 API 的形式或对象模型接口 (C++ ActiveX Java) 来获取不同的服务,

尽管 PC/SC 规范是平台无关的但是 PC/SC 规范的正常运行对操作系统有以下要求:

1. 支持多线程。

2. 支持异步事件及消息处理。

3. 支持代码共享的共享库机制。

PC/SC 规范中,应用软件对智能卡的服务的访问是通过智能卡服务提供者

ICCSP CSP )来完成的,由于不同的应用领域对智能卡有不同特殊的服务要求,

PC/SC 体系中 SP 层有多种实现方式,并且可以由任意的第三方组织提供,因此应用

软件开发人员可以通过下述三种方法来获取这些与 IC 卡有关的服务 :[2]

1. 使用供应商提供的 ICCSP

2. 用户根据自己的需要定制开发的 ICCSP

3. 直接访问 IC 卡资源管理器。

由于 PC/SC 规范是与操作系统无关的,因此它的实现不依赖于具体的编程语言

以及计算机体系结构。 PC/SC 的体系结构允许最大的交互性、扩展性和灵活性,使

应用软件开发人员可以开发出不依赖于特定 IFD IC 卡的应用软件,终端用户只需

要在系统中添加相应的 IFD Handler IC 卡服务提供者就可以运行应用软件。同时,

PC/SC 的体系结构中,应用软件可以共享资源并且可以在一台计算上同时运行多

IC 卡应用软件。

 

就这些吧。多说无益。看了吧。

小结 :Application 要和 SP 配合 (ICC SERVICE CRYPTO SERVICE IFD SERVICE)

理论上这些 SERVICE 由供应商提供。当然了,为了有自主知识产权或为了标新立异

或者没有供应商支持,那么你就自己开发这些 SERVICE

你不想开发 SERVICE ,接口要求太多。

你受不了束缚或者你不放心这些供应商。

那么你就直接访问 ICC Resource Manager

也请注意,有些资源的访问必须通过 ICC Resouce Manager 。(哪些?看下面。偶尔也要

关照下面,体恤下情。)

 

Application 指挥

Application 必须做的一些事情

检测资源

检测系统中安装的 IFD( 读卡器 )

RESOURCEMANAGER 类,携手 RESOURCEQUERY 包办

 

检测系统中安装的 ICC

              ICC   type RESOURCEMANAGER 中注册 ( 5) ,这样 RESOURCEMANAGER

              可以跟踪相关的 ATR,ICC friendly name ,供参考的 Service Providers ,和所支持                  接口列表。 ( 先知道这些,往下再看 )

 

       RESOURCEMANAGER 类,携手 RESOURCEQUERY 包办

 

监测卡事件

              监测 ICC 插入和拔出事件

       RESOURCEMANAGER 类,携手 RESOURCEQUERY SCARDTRACK 包办

 

对应用来说,资源检测主要由 RESOURCEMANAGER RESOURCEQUERY SCARDTRACK

任劳任怨完成。

 

连接到目标 ICC

 

连接已知的 IFD ICC

既然是已知的 IFD ICC ,自然知道 IFD friendly name ICC service

采用 Service Provider 提供的 SCARD ,和 SCARD::AttachByIFD 连接到 ICC[2]

 

连接已知的 IFD ,但 ICC 未知

应用启动线程或其它并发机制使用 SCARDTRACK::LocateCards 检测系统

是否插入应用感兴趣的卡。如果找到,则采用 SCARDCOMM::Connect 连接到

卡。然后采用 SCARDCOMM::Read SCARDCOMM::Write 来工作,不过前提是

你要知道这张 ICC 的服务内容。

Work hard but get little thanks. 所以这时候要和 Service Provider 这样的天线搭上关系。

把得到的 SCARDCOMM 控制权交给 SCARD ,也就是联系上了 Service Provider

接下来 SCARD::AttachByIFD 连接到 ICC [2] 接下来的故事和上面的一样了。

 

连接到已知的 ICCs IFD Groups

先说说 这里的 Group ,不是新撰组,是系统的某些 IFDs 合成一个组,相关信息在

ResourceManager 那里登记。 Mananger 管理一个组或几个组, It’s piece of cake.

如果你忘记了,就看看前面的几个图, ResourceManager 的地位,那是相当的显赫。

 

首先, RESOURCEQUERY::ListReaderGroups 看看系统中现存几个组。挑出感兴趣的

组, “Man come on get a move on”

接着,挑出感兴趣的卡,用 SCARDTRACK::LocateCards 说明你感兴趣的卡,

接着 SCARDTRACK::GetStatusChange 处于阻塞状态,等吧。 I’m waiting for you from Monday

to Sunday. 如果有插入事件发生。 I got it. 接着 SCARD::AttachByIFD()[2] ,故事和上面的一样了, The good old memories come back.

最后,有了确定的读卡器和卡, Now, let’s rob the bank.

连接已知的 ICC 接口

首先找 RESOURCEQUERY::ListCardTypes 枚举所有的卡类型,在参数里告诉 RESOURCEQERY 感兴趣的 cards 。接着满足你要求的卡就会返回 [2]

接着和上面一样找到和你志同道合的读卡器,这样你就可以 rob bank 了。

 

 

共享和控制

ICC 是不可以并行访问的。组织说到目前为止 , 绝大部分都是 one channel 的卡。

这样,如果你的应用程序比较勤快,支持同时操作同一个多应用卡上的几个应用。

则必须做到

保证对 ICC services 请求的完整性 [2]

允许其它的应用也能访问 ICC resource ,不可以独占。

什么?做不到?那么你就惹祸了。不让其它的 APPLICATION 生活,它们也不会让

你生活。下次,它们也独占 ICC resource 。火药味十足,街头血拼开始。

还是予人方便,自己方便。当然这也是弱势群体的 Q 精神的一个写照。

问:我不用多应用卡,可以吗?

答案是,你不想 save money ,别人想。

 

 

ICC 提供的安全服务

: 什么? Are you insane? 安全服务,也要 APPLICATION 这位大爷提供?

答案是,请喝王老吉,下下火或者花点钱去哪里按摩按摩。当然是由 Service Provider 提供。

不过 PCSC 组说了,可以不由貌合神离的 Service Provider 提供, APPLICATION

亲自动手。所谓亲自动手,是由马仔 CHVERIFICATION 提供。

如果需要应用向 icc 认证,比如外部认证,内部认证。对不起,没有这样的马仔。

你还得靠 Service Provider 。它们提供 CARDAUTH 。满足你的欲望。

 

ICC 安全状态

 

ICC 内部的操作,需要满足一定的安全状态,才能成功进行操作。

APPLICATION 示好的 Service Provider 会包办这一切 [2] APPLICATION 只是需要

调用 Service Provider 提供的接口,就好了。如果 Service Provider 不能提供如此满足你

的服务,那么大爷就的靠 Resource Mananger 了,而且还得捋其袖子,处理和安全状态

相关的事情。

 

安全消息 Secure Messaging

 

高级 IC 卡金融犯罪分子都知道 ( 当然了,我们都是好市民 ) ,有些 APDU 需要 Secure Message ,需要 MAC ENCRYPT[2]

问:哪些 APDU 需要这样的 Secure Message?

答案是  ISO/IEC 7816-4 。大有来头。

 

同样的,这年头选择很多。讨好 APPLICATION Service Provider 可以提供 SM 。对于 APPLICATION 来说,是透明的。打个比喻, APPLICATION 调用 Service Provider ,朝它要钱,而不管 Service Provider 进贡的钱是合法还是非法的。

 

如果大爷不放心,或者想向勤政的康熙学习,自己动手实现 SM ,那么就得通过

前面提到的 SCARDCOMM READ/WRITE

 

错误恢复

 

APPLICATION 这样的 TOP ,必须有错误恢复机制。不能一旦犯错,就让系统崩溃。

只要你能积极承认错误,改正错误,党和人民还是相信 APPLICATION 的。

 

APPLICATION 要由足够的健壮性,除非发生了硬件错误, APPLICATION 应该清除错

误和允许操作继续进行。对于可恢复的错误,应该悄悄处理和允许继续操作。

想到了什么,现实中有些不廉分子,官官相护,欺下瞒上。不是吗?这和 robust 很相

似,蒙蔽 APPLICATION

 

臣下上奏四海升平,国泰民安。南唐后主李煜却不知已经兵临城下。

可见 APPLICATION 过得很滋润。活得比较轻松。

 

 

卷7结束。

 

问:卷7 APPLICATION 都结束了,编辑器上还没有一行可用的代码。理论脱离实际。

答案是,第二章的客户端程序文件之一 testpcsc.c 会给出可供你抄袭的比较有价值的例子, Obey your thirsty.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值