📄 7.html
字号:
<BR><BR>而我们这次讨论的主题JAVA卡,她首先遵循ISO7816的规范,除此之外,她还遵循JAVA卡的一些规范:
<UL>
<LI>Java Card 2.1.1 Runtime Environment Specification
<LI>Java Card 2.1.1 Virtual Machine Specification
<LI>Java Card 2.1.1 Application Programming Interfaces
Specification</LI></UL><A name=5></A>
<P><B
class=subhead>读卡器与终端</B></P>在讨论读卡器之前,我们先搞清“读卡器”这一概念。广义来讲,“读卡器”指所有可以对卡进行读写的设备。不过,在智能卡业,“读卡器”是指那种必须与电脑相连,接受电脑发出相应指令来控制完成对卡的操作的设备。与“读卡器”对应的设备,我们称之为“终端”。“终端”是指那种能独立对卡进行操作的设备,而无需电脑的帮助。读卡器和终端都可以完成对智能卡的读写。<BR><BR>由于读卡器比终端更依赖于电脑,从而她比终端拥有更多的灵活性。最简单的使用读卡器的方式就是与PC相连。一般PC可以通过RS232串口,USB接口,PCMCIA接口,软盘接口,并口,红外线口等与读卡器取得联系。PC通过这些接口向读卡器发出ISO指令,读卡器收到指令后即对卡进行指令命令的读写,当卡完成这次读写操作后,回给读卡器一个指令成功与否的相应,而读卡器收到卡的相应后即告诉PC,PC这时根据相应的结果进行下一个ISO指令的操作。有关对智能卡的详细操作指令,请参阅[智能卡的接口协议]。一般我们对智能卡进行编程,大多选用读卡器来完成对卡的操作。<BR><BR>一种最常见的终端就是商场和宾馆中使用的POS机。她最大的特点:拥有自己的操作平台和开发系统,能对卡进行独立的读写,有Modem功能和打印交易功能。一般还有磁卡读写功能。<BR><BR><A
name=6></A>
<P><B
class=subhead>智能卡的文件系统</B></P>智能卡的文件系统有的象DOS的树形文件系统。按ISO7816.4规定,智能卡的文件分为:DF(Dedicated
File )和EF(Elementary
File)。DF包含一些控制信息,它可以成为EF或DF的父文件。这有的象DOS中的目录文件。EF是数据单位的集合,它不能成为任何文件的父文件。这有的象DOS中的TXT文件。<BR><BR>一般而言,智能卡文件系统都有一个必须的根文件(ROOT)。它是DF文件。一般叫它MF(Master
File主文件)。<BR><BR>每个文件(包括DF和EF)都有一个文件的ID(两个字节)。如ROOT的ID一般为“3F00”。如要对文件进行读写操作,就必须先用“选择”(Select)命令来选择该文件的ID。<BR><BR>EF的文件类型有:透明EF,线性定长EF,线性变长EF,循环EF。对后三种EF文件的操作需通过对它们所包含的记录进行操作。如你有兴趣希望进一步了解智能卡的文件结构,请参阅ISO7816。
<A name=7></A>
<P><B
class=subhead>智能卡的接口协议</B></P>一般而言,智能卡自身是没有电源,显示器,键盘,哪它是如何与外界进行通信的呢?在上面的文章中,我们已经知道:智能卡是通过它的8个触点与读卡器进行通信的。那它们是如何进行通信的呢?我们知道当两台PC进行通信时,进行数据交换时,它们必须服从一定的通信协议。卡与读卡器的通信也是如此。根据ISO7816.4规定,智能卡与外界的通信数据接口为:APDU(Application
Protocol
DataUnits,应用协议数据单元)。APDU既制定了命令格式,也制定了响应格式。在卡的领域中,卡始终处在“主仆”关系中的“仆”的地位,即智能卡只能等待读卡器或终端向它发送APDU,收到APDU后,智能卡执行APDU中的命令,而后返回APDU响应。通过APDU命令和它的响应,卡就完成了与读卡器或终端的通信。以下就是APDU的格式:
<TBODY>
<TR>
<TD bgColor=#08248a>
<TBODY>
<TR>
<TD bgColor=#ffffff colSpan=7>Command APDU(APDU 命令)</TD></TR>
<TR>
<TD bgColor=#ffffff colSpan=4>Mandatory Header(强制部分)</TD>
<TD bgColor=#ffffff colSpan=3>Conditional Body(非强制部分)</TD></TR>
<TR>
<TD bgColor=#ffffff>CLA</TD>
<TD bgColor=#ffffff>INS </TD>
<TD bgColor=#ffffff>P1 </TD>
<TD bgColor=#ffffff>P2</TD>
<TD bgColor=#ffffff>Lc </TD>
<TD bgColor=#ffffff>Data field </TD>
<TD
bgColor=#ffffff>Le</TD></TR></TBODY></TD></TR></TBODY><BR>“强制部分”表明这是APDU命令必须包括的部分,它包括:
class (CLA)-, instruction (INS), and parameters 1 and 2 (P1 and P2).
每部分有一个字节。“非强制部分”表明并不是所有的APDU都有这些部分。<BR>
<UL>其栏位所表示的意义分别为:
<LI>CLA - Class Byte,用於识别applet
<LI>INS - Instruction Byte ,下达给applet之指令
<LI>P1 - 第一个指令参数
<LI>P2 - 第二个指令参数 (P1,P2 根据INS不同,也有不同的含义)
<LI>Lc - Data Field之长度
<LI>Data Field - 资料栏位
<LI>Le - 回传资料之长度</LI></UL>
<TBODY>
<TR>
<TD bgColor=#08248a>
<TBODY>
<TR>
<TD bgColor=#ffffff colSpan=3>Response APDU (APDU 响应)</TD></TR>
<TR>
<TD bgColor=#ffffff>Conditional Body(非强制部分)</TD>
<TD bgColor=#ffffff colSpan=2>Mandatory Trailer(强制部分)</TD></TR>
<TR>
<TD bgColor=#ffffff>Data field</TD>
<TD bgColor=#ffffff>SW1</TD>
<TD
bgColor=#ffffff>SW2</TD></TR></TBODY></TD></TR></TBODY><UL>其栏位所表示的意义分别为:
<LI>Data Field - return之资料栏位
<LI>SW1 - 执行状态参数1 (1 字节)
<LI>SW2 - 执行状态参数2 (1字节)</LI></UL>一般SW1 + SW2
=“9000”表明指令执行成功。<BR><BR>一个例子:<BR><BR>如果我们要选择(Select)SIM卡的ROOT文件,则APDU命令的格式如下:
<TBODY>
<TR>
<TD bgColor=#08248a>
<TBODY>
<TR>
<TD bgColor=#ffffff>CLA</TD>
<TD bgColor=#ffffff>INS</TD>
<TD bgColor=#ffffff>P1</TD>
<TD bgColor=#ffffff>P2</TD>
<TD bgColor=#ffffff>Lc</TD>
<TD bgColor=#ffffff>Data</TD></TR>
<TR>
<TD bgColor=#ffffff>A0 </TD>
<TD bgColor=#ffffff>A4 </TD>
<TD bgColor=#ffffff>00</TD>
<TD bgColor=#ffffff>00</TD>
<TD bgColor=#ffffff>02</TD>
<TD bgColor=#ffffff>3F00</TD></TR>
<TR>
<TD bgColor=#ffffff colSpan=6>A0
代表这是SIM卡、A4代表这是Select指令、P1,P2在Select指令中没有用、Lc说明Data的长度为2个字节、Data=3F00,是ROOT的文件ID</TD></TR></TBODY></TD></TR></TBODY><BR>而APDU响应为:9F1A,说明指令成功完成,而且你可以用Get
Response命令得到1A长度的响应数据。关于对SIM卡的操作,请参考GSM11.11文档。 <A name=8></A>
<P><B
class=subhead>智能卡的安全性</B><BR>安全</P>由于智能卡采用了不同的安全机理,这种安全机理主要体现在以下两方面:其中用于微处理器卡的比用于只读存储器卡的要复杂一些。
<UL>
<LI>从卡上信息的读取方面来控制:
<UL>
<LI>限制智能卡用户的范围
<UL>
<LI>有些智能卡,任何人都可以读取卡上信息,象记录病人姓名和血型的医疗卡,这种智能卡一般不设密码,只要拿到卡的人都可以读取卡上信息。
这时卡体本身就是一种保护。
<LI>对于只许持卡人读取信息的智能卡通常采用一种叫PIN(个人识别码)的密码形式来保护卡上的信息,一般PIN由4至8位数字组成,通过键盘输入读卡器,它允许持卡人输入三次密码,如果三次输的都不对,卡就会被锁住,只有PIN码对了,用户才能对卡进行操作。当前也有一些更高级的密码形式在开发研制之中。
<LI>对于只许第三方读取信息的智能卡便只有发卡人才能读取卡上信息。(譬如只有发卡行可以改写电子钱夹上的信息)。这时这些智能卡由16-32位数字的密码来保护。</LI></UL>
<LI>限制读取智能卡信息的的方式(只读、可添加、可修改或可擦写)。存储在智能卡上的信息一般被划分为若干个部分:
<UL>
<LI>只读信息
<LI>只可添加的信息
<LI>只可更新的信息
<LI>无法读取的信息
<LI>这样有些密码信息可以存储在无法读取的存储区域中。</LI></UL></LI></UL>
<LI>从卡的结构和支持的加密算法来控制
<BR>如上所述只有知道密码的人才能使权使用智能卡,但如果需要通过无线电或电话线将卡上的信息向异地传送,就还必须要有额外的防护手段。
<BR><BR>防护手段之一就是加密,这就好象把要传送的信息翻译成了谁也看不懂的外语。微处理器智能卡有加密和解密(把看不懂的东西再翻译回来)的功能,使得在传送存储在卡上的信息的同时,也不用担心会发生泄密。
<BR><BR>通过加密,智能卡可以把信息翻译成数以亿计的“外语”,并且在须要通信时,可以随机地选择其一。这种防范机制可以确保所用的卡和计算机都真实有效,使得几乎没有可能半路窃取传送的信息。</LI></UL>
<P>安全算法</P>加密技术按照密钥的公开与否可以分为两种:对称密钥算法和公开密钥算法(又称:不对称加密算法)。对称密钥算法和公开密钥算法的区别是:加减密密钥的一致与否。<BR><BR>对称密钥算法,这里加密密钥匙和解密密钥是相同的。为了安全性,密钥要定期的改变。对称算法速度快,所以在处理大量数据的时候被广泛使用,其关键是保证密钥的安全。<BR><BR>公开密钥算法,分别存在一个公钥和私钥,公钥公开,私钥保密。公钥和私钥具有一一对应的关系,用公钥加密的数据只有用私钥才能解开,其效率低于对称密钥算法。其中最著名的两种:DES(对称密钥算法)和RSA(公钥加密算法)。有关DES算法和RSA算法的具体实现过程,不是本次讨论的内容,请大家自己参阅有关资料。目前微处理器智能卡一般都能支持DES算法和RSA算法,象Gemplus公司的GPK卡,Schlumberger公司的CryptoFlex.<BR><BR>附:数字签名
- RSA
算法的一个应用<BR><BR>数字签名采用RSA算法,数据发送方采用自己的私钥加密数据,接受方用发送方的公钥解密,由于私钥和公钥之间的严格对应性,使用其中一个只能用另一个来解,保证了发送方不能抵赖发送过数据,完全模拟了现在生活中的签名。<BR><BR>由于微处理器智能卡带有微处理器,同时又支持对称密钥算法和公开密钥算法,同时它的尺寸大小极方便于携带,所以它必然成为网络数据传递和身份认证极佳的安全模块。有关微处理器智能卡的具体应用,我们将在以后详细讨论。
<A name=8></A>
<P><B
class=subhead>关于作者:</B></P><B>包盛杰</B>,高级程序员,毕业于上海交通大学,97年起开始研究智能卡和与之相关的系统,研究领域:智能卡,读卡器,POS终端,GSM网络,银行的KMS系统。参与设计开发过中国电信和一些银行的与智能卡相关的项目。Mailto:<A
href="mailto:sjbao@iname.com">sjbao@iname.com</A> <BR><BR><!-- END PAPER BODY --><BR>
</td>
</tr>
</td>
</tr>
</div>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -