智能卡框架是包含微处理器和内存的便携式计算机。智能卡的形状和大小通常与信用卡相同。智能卡为可通过验证和加密保护的机密信息提供高度安全存储。
本章包含以下主题:
在 Solaris 操作系统中,智能卡框架用于将消费方应用程序与智能卡终端连接起来。消费方应用程序可以调用智能卡框架 (smart card framework, SCF) API。智能卡终端通过接口设备 (interface device, IFD) 处理程序(本质上为设备驱动程序)与消费方应用程序进行通信。IFD 处理程序通过终端接口连接至框架。请参见下图。
Solaris 操作系统在专用文件中存储智能卡配置信息。与此相反,Linux 实现通常使用 /etc/reader.conf。要更改配置文件中的项,请使用命令 smartcard(1M)。
目前,智能卡框架与 Solaris 加密框架无关。
SCF API 提供了一组用于访问智能卡的接口。这些接口采用低级应用程序协议数据单元 (application protocol data unit, APDU) 形式提供与卡之间的通信。C 和 Java 中都提供了这些接口。这些接口与 Solaris 操作系统支持的所有读取器以及与 APDU 通信的任何智能卡协同工作。SCF API 基于以下组件:
SCF API 提供以下领域的功能:
检查读取器中是否存在智能卡。
接收智能卡移动(即插入和删除)通知。
与智能卡交换数据。
检索有关会话、终端和智能卡的信息。
锁定和解除锁定要独占访问的智能卡。
以下各节提供有关特定 SCF 接口的信息。
使用系统的智能卡框架建立会话。打开会话后,可以将该会话与 SCF_Session_getTerminal(3SMARTCARD) 一同使用,以访问智能卡终端。
取消从 SCF_Session_getInfo(3SMARTCARD) 返回的存储的分配。
使用特定的智能卡终端在会话中建立上下文。终端对象用于检测卡移动(即插入或删除)。终端对象还用于创建用于访问特定卡的卡对象。
取消从 SCF_Terminal_getInfo(3SMARTCARD) 返回的存储的分配。
使用特定的智能卡在终端中建立上下文。可以使用卡对象借助 SCF_Card_exchangeAPDU(3SMARTCARD) 将 APDU 发送给卡。
取消从 SCF_Card_getInfo(3SMARTCARD) 返回的存储的分配。
为 Solaris OS 开发的智能卡终端使用的 API 组与 Linux 智能卡终端所使用 API 组完全相同。如果您以前未开发过 IFD 处理程序,则可访问一个提供 IFD 源代码的 Linux 环境 Web 站点,如 http://www.musclecard.com/drivers.html。要为 Solaris 操作系统中的智能卡终端开发 IFD 处理程序,需要包括 /usr/include/smartcard/ifdhandler.h 并实现以下接口:
IFDHCreateChannelByName(3SMARTCARD) – 使用指定的智能卡终端打开通信通道。此接口在最新版本的 MUSCLE IFD 规范中是新增的内容。因此,IFDHCreateChannelByName() 在其他 IFD 处理程序中可能不可用。在 Solaris 软件中,使用 IFDHCreateChannelByName(),而不使用 IFDHCreateChannel(3SMARTCARD) 函数。
IFDHICCPresence(3SMARTCARD)-检查逻辑单元号 (logical unit number, LUN) 指定的读取器或插槽中是否存在 ICC(即智能卡)。
IFDHPowerICC(3SMARTCARD)-控制电源和重置 ICC 的信号。
IFDHCloseChannel(3SMARTCARD)-关闭由 LUN 指定的 IFD 的通信通道。
IFDHGetCapabilities(3SMARTCARD)-返回指定智能卡、IFD 处理程序或智能卡终端的功能。
IFDHSetProtocolParameters(3SMARTCARD)-为特定插槽或卡设置协议类型选择 (Protocol Type Selection, PTS)。在 ISO 7816 标准中查找 PTS 值。尽管此函数可能不是由框架调用,但还是应该执行此函数。使用 IFDHSetProtocolParameters() 可以确保各种卡都能与框架进行通信。
IFDHTransmitToICC(3SMARTCARD)-由框架调用,用于与智能卡进行通信。
当前不使用 IFDHCreateChannel()、IFDHSetCapabilities() 和 IFDHControl(),但未来的发行版中可能需要这些函数。
IFDHICCPresence() 和 IFDHPowerICC() 函数对于测试非常有用。例如,可以使用 IFDHICCPresence() 函数来测试插槽中是否存在卡。检查智能卡电源是否正常工作的一种方式是使用 IFDHPowerICC() 函数。此函数可获取已插入智能卡的重置应答 (Answer to Reset, ATR) 值。
Solaris 智能卡框架不支持可热插拔的终端,如 USB 终端。请使用以下方法连接和安装智能卡终端:
在终端与系统之间建立物理连接。
将 IFD 处理程序的共享库复制到系统中。
使用 smartcard(1M) 在框架中注册终端的 IFD 处理程序。