新闻  |   论坛  |   博客  |   在线研讨会
智能卡设备-防插拔(anti-tear smart card)
mayer | 2009-06-09 18:28:47    阅读:1975   发布文章

智能卡设备-防插拔(anti-tear smart card)

 

 

版 本

时 间

内  容

备 注

0.9.1

2008-04-21

1.         增加设置读卡器提供给卡片VCC

2.         增加查询当前断电时间单位(TIMEUNIT)

 

0.9.0

2008-03-04

1.         使用手册

初次编写

 

 

 

 

 

 

 

 

技术规范

l         主机接口

即插即用

l         连接线/供电
USB A型连接线
通过USB总线供电

      [USB 模式 ]

USB全速 (12Mbps)

l         智能卡接口

专业硬件与固件架构

支持 ISO7816 Class A、B与C (5V、3V、1.8V)

支持所有 ISO7816 TA1参数(达344 kbds)

可读写所有 ISO7816-1/2/3/4微处理器卡,T=0与T=1(目前已被关掉)

l         短路检测

l         智能卡连接器

8触点连接 (frictions contacts) —— ISO位置

100,000插入循环

EMV Level 1机械兼容

 

l         人机接口

LED 双色(红色、绿色)

l         标准/认证

ISO/IEC 7816-1/2/3/4:接触式IC卡

EMV Level 1、EMV2000

Microsoft Windows硬件质量实验室 (WHQL)

USB 2.0全速(USB模式)

CCID智能卡标准

l         API

带相关驱动程序的 Microsoft PC/SC环境

l         操作系统支持

Windows 2000/XP/Vista/Linux

l         电缆/电源

可选电压: 5V+/-10%

[USB 模式 ]

电缆长度: 1.0米

USB Type A连接器

USB端口电源

l         环境性能

操作温度: +5 ° C~+55 ° C

保存温度: -25 ° C~+60 ° C

l         尺寸

 


开发要求

1.         通讯

通讯方式为USB CCID报文协议,Full Speed。

整个数据 = 数据头(0x0A) + 数据体(命令数据)(最大261字节)

 

命令数据:

       7816命令APDU和应答APDU

基本功能

PCSC,CCID,7816-1/2/3通讯协议,支持Windows 2000/XP/Vista,Linux。

 

私有功能 自动下电

SET TIME命令报文

编码

CLA

‘FF’

INS

‘01’

P1

‘00’;其它值保留

P2

‘00’;其它值保留

Lc

‘02’

数据域

2字节TIMEUNIT值

Le

不存在

 

命令报文的数据域

命令报文的数据域中包含了卡片POWERDOWN时间单位数据,2字节最大支持到0xFFFF个时间单位(TIMEUNIT)。

响应报文的数据域

响应报文中没有数据域。

响应报文返回的处理状态

不论应用是否有效,'9000'编码表示命令成功执行。

 

RESET TIME命令报文

编码

CLA

‘FF’

INS

‘10’

P1

‘00’;其它值保留

P2

‘00’;其它值保留

Lc

‘00’

数据域

不存在

Le

不存在

命令报文的数据域

命令报文中没有数据域。

响应报文的数据域

响应报文中没有数据域。

响应报文返回的处理状态

不论应用是否有效,'9000'编码表示命令成功执行。

GET TIME命令报文

编码

CLA

‘FF’

INS

‘00’

P1

‘00’;其它值保留

P2

‘00’;其它值保留

Le

‘02’或 ‘00’

 

命令报文的数据域

命令报文的数据域中包含了卡片POWERDOWN时间单位数据长度,2字节时间单位(TIMEUNIT)。

响应报文的数据域

响应报文为当前读卡器已经设置成功的断电时间单位。

响应报文返回的处理状态

不论应用是否有效,'9000'编码表示命令成功执行。

调整电压

SET VCC命令报文

编码

CLA

‘FF’

INS

‘A8’

P1

‘00’;其它值保留

P2

‘00’;其它值保留

Lc

‘01’

数据域

1字节卡片VCC电压值,0x05-5V, 0x03-3V, 0x18-1.8V

Le

不存在

 

命令报文的数据域

命令报文的数据域中包含了卡片电压数据,只能为0x5,0x3,0x18三种类型电压值,目前仅支持ABC三类电压。

响应报文的数据域

响应报文中没有数据域。

响应报文返回的处理状态

不论应用是否有效,'9090'编码表示命令成功执行。

 

GET VCC命令报文

编码

CLA

‘FF’

INS

‘A8’

P1

‘01’;其它值保留

P2

‘00’;其它值保留

Le

‘01’

 

命令报文的数据域

命令报文的数据域中包含了卡片电压数据,只能为0x5,0x3,0x18三种类型电压值,目前仅支持ABC三类电压。

响应报文的数据域

响应报文中数据域中包含了读卡器当前使用的电压数据,只能为0x5,0x3,0x18三种类型电压值,目前仅支持ABC三类电压。

响应报文返回的处理状态

不论应用是否有效,'9000'编码表示命令成功执行。


使用案例 快速断电功能

目的:该读卡器支持快速下电。

方式:可以通过专有内部指令来设置和清除断电时间。

原理:能过给读卡器发送断电时间单位(TIMEUNIT)来初始化并启动读卡器进入断电模式,当下面的一条(并只对下一条有效)指令的数据发送完成后,立即启动正电操作,而在此时卡片内部正常工作,读卡器也正常接收卡片返回数据,当下电时间到达,读卡器立刻断掉卡片VCC,如果在下电时间到达前,卡片已经处理完指令,则读卡器返回卡片数据,如果卡片尚未处理完指令,读卡器断电后,给上层返回6FF0做为APDU的应答,来表示读卡器成功断电,卡片在处理完指令之前被断电。

例子:

卡片处理完指令之前断电,

àFF 01 00 00 02 XX XX

?90 90 (设置断电时间成功)

 

à00 A4 00 00 02 3F 00

?6F F0 (卡片被断电,读卡器返回6FF0给上层,同时读卡清除断电时间)

------------------------------------------------------

卡片处理完指令之前,断电时间没有到达,卡片正常返回数据

àFF 01 00 00 02 XX XX

?90 90 (设置断电时间成功)

 

à00 A4 00 00 02 3F 00

?6A 82 (卡片处理完成指令,返回数据给上层,读卡器断电时间被自动清除)

 


读卡器工具 i-Kit

该工具有是一个脚本引擎,能够运行脚本文件,脚本完成对读卡器操作,对卡片上电,下电,设置断电时间等,发送指令给卡片。

打开自己编写的脚本文件,运行。

 

例子脚本:

function Main()

{  

    for(var i = 1;i < 0x1000;i++)

    {

        IKIT.PrintMsg("第"+i+"次");

       

        IKIT.PowerOn(); //卡片上电

//-------------------------------------------------------

        var tmp = "0000" + i.toString(16);

        tmp = tmp.substr(tmp.length-4,4);

 

        var apdu = "FF01000002"+tmp;

        IKIT.runApdu("ANTI",apdu);

//-------------------------------------------------------

 

        var mm = IKIT.runApdu("Select","00A40000022F00");//卡片断电后,要重新上电

        if(mm != "6FF0")

        {

            break; //卡片正常返回数据,测试结束

        }

    }

}

 

function IKIT::OnEventSendApdu(name, data)

{

    IKIT.PrintMsg(name + ":" + data);

    var ret = IKIT.SendDataToCard(data);

    IKIT.PrintMsg("SW12:"+ret+"\n");

    return ret;

}

//------------------------- END OF SCRIPT ----------------------------

 

 

//LOG

第1次

ATR:3B6F00008066574B0240000673C02113829000

 

ANTI:FF010000020001

SW12:9090

 

Select:00A40000023F00

SW12:6FF0

 

第2次

ATR:3B6F00008066574B0240000673C02113829000

 

ANTI:FF010000020002

SW12:9090

 

Select:00A40000023F00

SW12:6FF0

……

 

第260次

ATR:3B6F00008066574B0240000673C02113829000

 

ANTI:FF010000020104

SW12:9090

 

Select:00A40000023F00

SW12:9000

 

测试结束

//end


设置电压功能

该功能是在不修改硬件的前提下,通过APDU应用指令来改变读卡器提供卡片的物理电压VCC。目前仅支持ISO7816的ABC三类电压,不支持其他自定义电压。

l         注意事项:

由于设置VCC是通过应用指令来完成,并且,卡片必须上电成功后方能使用PCSC发送应用指令。因此,当把读卡器VCC改变成卡片不支持的某电压VCC值时,重新上电,卡片将无法正常工作。

l         解决办法:

当发生卡片不支持读卡器提供的电压时,请用其他支持该电压的卡片完成正常上电后,发送调整VCC的APDU,来重新设置读卡器的新VCC值。

l         例子说明:

A卡片仅仅支持AB类电压。不支持C电压。

B卡片扶持BC类电压,不支持A电压。

当读卡器提供B类电压(3V)时, A卡片可以正常工作,此时,发送APDU设置读卡片器设置电压成C类(1.8V),再次上电,读卡器将用1.8V对卡片A上电,而A卡片不支持C类(1.8V)电压,这样读卡器不能继续对卡片操作。发生这种情况后,可以用读卡器操作B卡片,因为B卡片支持C类(1.8V)电压,读卡器可以发送设置VCC的指令来设置新的VCC值(3V)。从而可以重新操作A卡片。

 

测试数据,仅供参考

备注:

断电时间单位:10us

断电时间长度:从APDU最后一个字节(校验位发完)发送完成开始计算。

 

VCC: 3V

时间单位    断电时间(us)

0x01       207

0x0b       310        

0x08       281

0x10       358

0x20       520

0x30       678

0x40       840

0x100      2.8ms

 

VCC: 1.8V

时间单位    断电时间(us)

0x08       277        

0x10       364        

0x20       520        

0x30       683        

0x40       840        

0x100      2.8ms      

0x200      5.3ms      

指令流程

ATR:3B6E00000031C07186650178012734839000

 

Set VCC-1.8v:FFA800000118

SW12:9090

 

Get VCC-1.8v:FFA8010001

SW12:189000

 

ATR:3B6E00000031C07186650178012734839000

 

Select:00A4040000

SW12:6700

 

Set VCC-3v:FFA800000103

SW12:9090

 

Get VCC-3v:FFA8010000

SW12:039000

 

Select:00A4040000

SW12:6700

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客