CPU卡知识源代码.docx
- 文档编号:30310703
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:19
- 大小:22.93KB
CPU卡知识源代码.docx
《CPU卡知识源代码.docx》由会员分享,可在线阅读,更多相关《CPU卡知识源代码.docx(19页珍藏版)》请在冰豆网上搜索。
CPU卡知识源代码
CPUcard知识讲演
一:
cpucard概念和综述。
1,什么是cpucard。
cpucard是iccard的一种,最初的iccard里面是一个存储芯片。
没有cpu的相关功能的。
只是一个存储的物理体。
现在的cpucard等于是将一个cpu+memory的小系统集成在一个iccard里面了。
所以,他不但具有一般存储iccard的全部功能,还具有一些智能的功能:
如,密码访问,加密数据,等,这些安全措施是普通的iccard无法提供的。
所以,cpucard也叫智能卡。
cpucard内部有个cos(chipos芯片操作系统),用来完成数据存储等数据操作,和相应的数据加密等安全操作。
cpucard(也就是内部的cos)一般都支持iso7816的国际标准,或者一些扩展标准。
这样一个cpucard就可以在不同的读卡器上使用,在不同的应用场合实现部分兼容了。
2,cpu的应用。
cpucard作为智能卡,应用于一些安全要求比较高的地方。
如:
加油站,金融,会员卡等。
当然随着一些应用的扩展和普及,其安全要求可能也会相应提高,所以,cpucard的应用可能会更多,更广。
二:
cpucard的标准和协议。
1,一般cpucard的国际标准是ISO7816(1-4),当然也有些扩展的标准,也可以自己指定相应的标准,当然自己指定的标准只能自己使用,不具有通用性。
2,cpucard的协议有T=0,T=1两种国际通用标准,当然ISO7816支持0-15共16个协议,目前只有T=0,1被明确规定和广泛使用。
三:
cpucard的技术参数和使用详解。
我们以一个T=0卡的使用过程来作解释。
中间穿插了T=1的异同。
1,cpucard的触点。
共有8个触点,accordingtoISO7816standard,排列如下:
topview的时候,c1-c4ontheleft,c5-c8ontheright。
ContactDesignationUse
C1VccPowerconnectionthroughwhichoperatingpowerissuppliedtothemicroprocessorchipinthecard
C2RSTResetlinetoinitiateitsresetsequenceofinstructions
C3CLKClocksignallineclocksignalcanbeprovidedtothemicroprocessorchip.
C4RFUReservedforfutureuse
C5GNDGroundlineprovidingcommonelectricalgroundbetweentheIFDandtheICC
C6VppProgrammingpowerconnectionusedtoprogramEEPROMoffirstgenerationICCs.
C7I/OInput/outputlinethatprovidesahalf-duplexcommunicationchannel
C8RFUReservedforfutureuse
2,卡的复位和card的ATR(answertoreset)复位应答。
卡的复位分为两种:
冷reset和热reset。
冷reset:
是在卡插入卡座后,发生的。
终端(就是cardreader)先是给card提供电压(vcc),然后在提供clock(时钟),同时resetkeeplowlevel,在clock提供后,card要保证在clock提供后的200个周期内将IOsethigh(接收模式),终端也一样。
再后,将card的resetpinsettohighlevel,保持一段时间(40'000-45'000个周期)。
cpucard在终端将resetsettohigh后的400-4'000个周期内送出ATR(复位应答),如果card没有在规定时间内送出ATR,终端将启动释放过程。
热复位:
在vcc和CLock已经提供的情况下,终端将resetsettolow,后面和冷复位一样了:
)。
触点释放过程:
终端将resetsettolow,启动释放时序。
然后将clk和iosettolow,在card拔出卡座前,vccsettolow(就是断电)。
3,一个字符帧(有效数据一个字节)的传输实现.
StartParityNext
bit<-----8databits----->bitStartbit
Z____________________________________......________
|||||||||||||
I/O||ba|bb|bc|bd|be|bf|bg|bh|bi|Guardtime||
|___|__|__|__|__|__|__|__|__|__||___|_
A:
:
:
:
0t1:
t10
:
:
:
<----(n+/-0.2)etu--->:
每个字符frame有一个startbit(low)和8个databit,和一个paritybit(偶校验bit),所以一个有10个bit。
偶校验规则:
偶校验bit+8个databit,共9个bit,里面的“1”one个数为偶。
10bit后,还有一个guardtime,用来提供多余的时间处理数据和如果偶校验失败,提供错误提示的使用的。
如果paritycheckerr,则在paritybit后的0。
5ETU开始将IOsettolow,keepfor1-2ETU,发送方则在paritybit后的1ETU开始checkIOline状态。
如果是high,就认为是对的;如果是low就重发(T=0,必须要重发,最多3次,3次后,就释放卡)。
4,ATR.
atr按照一下的顺序传送:
初始字符TS,格式字符T0,接口字符TAi,TBi,TCi,TDi(i=1,2··),历史字符T1,T2,··,TCK(校验字符)。
Reset
|
|_________________________________________________________
|||||||||||||||||
'-->|TS|T0|TA1|TB1|TC1|TD1|TA2|TB2|TC2|TD2|.........|T1|...|TK|TCK|
|___|___|___|___|___|___|___|___|___|___|__|___|__|__|___|
TS:
Initialcharacter
TO:
Formatcharacter
TAi:
Interfacecharacter[codesFI,DI]
TBi:
Interfacecharacter[codesII,PI1]
TCi:
Interfacecharacter[codesN]
TDi:
Interfacecharacter[codesYi+1,T]
T1,...,TK:
Historicalcharacters(max,15)
TCK:
Checkcharacter
Figure4:
GeneralconfigurationoftheAnswertoReset
(1),TS(初始字符),指示了正向协议和反向协议。
对T=0,T=1都有效。
正向协议:
就是data的高电平表示1,LSBfirst:
)
反向协议:
就是data的低电平表示1,MSBfirst:
)
在复位应答的电平情况就是这样的:
Directconvention(正向协议):
(L)HHLHHHLL(H)就是0x3B,
Inverseconvention(反向协议):
(L)HHLLLLLL(L)就是0x3F,如果按照正向协议来看,就是0x03(我们就是这样处理的,不过,偶校验是错的,所以我们屏蔽了TS的偶校验:
)。
(2),T0(格式字符),highnibble指示TA1,TB1,TC1,TD1的存在,lownibble指示历史字节的数目。
----,----,----,----,----,----,----,----,
|b8|b7|b6|b5|b4|b3|b2|b1|
'----'----'----'----'----'----'----'----'
:
<-------Y1------>:
<--------K------>:
Y1:
indicatorforthepresenceoftheinterfacecharacters
TA1istransmittedwhenb5=1
TB1istransmittedwhenb6=1
TC1istransmittedwhenb7=1
TD1istransmittedwhenb8=1
K:
numberofhitoricalcharacters
(3),接口字符,
TAi,TBi,TCi:
指示协议参数。
TDi:
指示协议类型(T=0,1,或者其他)和是否存在后续接口字符;
----,----,----,----,----,----,----,----,
|b8|b7|b6|b5|b4|b3|b2|b1|
'----'----'----'----'----'----'----'----'
:
<------Yi+1----->:
<-------T------->:
Yi+1:
indicatorforthepresenceoftheinterfacecharacters
TAi+1istransmittedwhenb5=1
TBi+1istransmittedwhenb6=1
TCi+1istransmittedwhenb7=1
TDi+1istransmittedwhenb8=1
T:
Protocoltypeforsubsequenttransmission.
Figure:
InformationsprovidedbyTDi
TA1:
highnibble是FI,lownibble是DI。
具体如下。
Table6:
ClockrateconversionfactorF
-------
----------------------------------------------------------------------
FI|00000001001000110100010101100111
--------------+-------------------------------------------------------
F|Internalclk372558744111614881860RFU
--------------+-------------------------------------------------------
fs(max)MHz|-568121620-
----------------------------------------------------------------------
---------------------------------------------------------------
FI|10001001101010111100110111101111
--------------+------------------------------------------------
F|RFU512768102415362048RFURFU
--------------+------------------------------------------------
fs(max)MHz|-57.5101520--
---------------------------------------------------------------
RFU:
ReservedforFutureUse
Table7:
BitrateafjustmentfactorD
-------
-------------------------------------------------------
DI|00000001001000110100010101100111
------+------------------------------------------------
D|RFU124816RFURFU
-------------------------------------------------------
-------------------------------------------------------
DI|10001001101010111100110111101111
------+------------------------------------------------
D|RFURFU1/21/41/81/161/321/64
-------------------------------------------------------
RFU:
ReservedforFutureUse
规定:
在atr和pts期间的初始ETU=372/fi;(fi为提供给卡的clock频率);
其他的情况下的工作ETU=(1/D)(F/fs);fs为提供给卡的clock频率.
TB1:
编程电压和编程电流。
现在已经不用了。
不发送或者为0(表示不需要)。
TC1:
表示增加到最小持续时间(12个ETU)的额外保护时间。
取值范围:
0x00-0xff;
当TC1=0x00-0xfe的时候,标准保护时间=12+TC1=12-266ETU;
当TC1=0xff的时候,有特殊意义。
如果传输协议T=0,则保护时间为12ETU;T=1,则保护时间为11ETU。
TDi:
见开头。
TA2:
TA2的存在与否表示IC卡是以特定模式还是交互模式工作。
TA2存在,特定模式。
一般不传送TA2(TA2不存在),交互模式。
TB2:
IC卡的编程电压,取代前面的TB1的值。
已经不需要了。
现在一般都不支持,也不传送了。
TC2:
T=0协议专用的接口字符。
传送工作等待时间整数(waitingTimeInteger,WI),确定card发送的任意一个字符startbit和card或者终端发送的前一个字符startbit之间的最大时间间隔。
工作等待时间为:
960*D*WI.
以后的接口字符都是T=1的专用接口字符,T=0下不传送。
TAi(i>2):
cpucard可能接收的信息字段(informationfield)的最大长度。
取值范围:
1-254。
T=1时,终端只接收16-254的值。
TBi(i>2):
lownibble是cwi(characterwaitinginteger)字符等待时间整数。
用来计算CWT=(2~CWI+11)工作ETU;取值范围:
0-5;
highnibble是bwi(blockwaitinginteger)块等待时间整数。
用来计算BWT=((2~BWI)*960*(372D/F)+11)工作ETU;取值范围:
0-4;
TCi(i>2):
b0表示使用的errdetectingcode,b0=0,使用lrc(纵向冗余校验,就是XOR校验),b0=1,使用CRC(循环冗余校验)。
(4):
历史字节。
标准没有规定。
根据使用自己定义。
(5):
TCK。
XOR校验字符。
从T0开始到TCK前一个字节(也就是历史字节的最后一个字节)的XOR的值应该等于TCK的值。
5,字符协议。
(1):
命令头:
命令由终端发出。
包括5bytes,依次为:
CLA,INS,P1,P2,和P3。
CLA:
(classbyteofcommandmessage)表示命令类别。
INS:
(instruction)表示指令代码。
P1(parameter1)和P2(parameter2)表示命令的2个附加参数。
P3:
根据不同的INS,P3指明了发送给cpucard的命令的字节长度(命令数据的长度)或者期待cpucard返回的数据的字节长度。
(2):
过程字节。
cpucard接收到命令头后,向终端发送一个过程字节。
过程字节向终端指明了下一步该作什么。
其编码和终端行为的对应关系如下:
Byte|Value|Result
-----+-------+------------------------------------------------------------
|INS|VPPisidle.Allremainingdatabytesaretransferred
||subsequently.
||
|INS+1|VPPisactive.Allremainingdatabytesaretransferred
||subsequently.
ACK|___|
|INS|VPPisidle.Nextdatabyteistransferredsubsequently.
|_____|
|INS+1|VPPisactive.Newtdatabyteistransferredsubsequently.
-----+-------+------------------------------------------------------------
NULL|$60|NofutheractiononVPP.Theinterfacedevicewaitsfora
||newprocedurebyte
-----+-------+------------------------------------------------------------
SW1|SW1|VPPisidle.TheinterfacedevicewaitsforaSW2byte
当终端收到sw1和sw2后,
如果过程字节是0x61,终端向card发送一个长度为sw2的值的GetResponse命令;
如果过程字节是0x6c,终端应立即向card重新发送前一个命令头,P3为sw2的值。
如果过程字节为0x6X(除了0x60,0x6c,0x061外),card向终端传送状态码和必要的数据(如果有的话),并等待下一个命令。
命令被成功执行后,返回0x90,0x00;
T=0时,命令的传送如下:
|ClA|INS|P1|P2|P3|等待card返回的状态嘛,如果正确的话,接着发送|CMNDDATA|,等待card返回数据。
T=1时,命令的传输就不一样了。
T=1是面向block的协议,T=0是面向字节的协议。
T=1时的blockframe结构:
----------------------------------------------------------------------------
HEADFIELD|DATAFIELD|尾field|
----------------------------------------------------------------------------
NAD节点地址|PCB协议控制字节|LEN长度|INF(APDU或控制信息)|EDC(错误校验码)|
----------------------------------------------------------------------------
※※headfield:
由3个字节组成。
*用于表示数据block的源地址和目的地址,以及提供vpp状态控制的节点地址。
*控制数据传输的协议控制字节。
*可选的数据field长度。
a,节点地址NAD(nodeaddress),b0-b2表示块的源地址(sourceaddress,SAD);b4-b6表示目的地址(destinationaddress,DAD),b3和b7不使用,为0;
如果不使用节点地址,SAD和DAD都为0;
如果使用节点地址,从card收到的第一个块开始,就一直使用这个地址约定。
b,协议控制字节(PCB)。
有3种类型。
*传送APDU的信息块(Iblock)。
*用于传送确认ACK或者NAK(negetiveACK)的接收就绪块(Rblock)。
*用于交换信息的管理模块(Sblock)。
Iblock的PCB的编码
-----------------------------------------------------------------
BIT|含义
-----------------------------------------------------------------
B7|0
-----------------------------------------------------------------
B6|序列号,每个blockframe都有个序号,第一个为0,
§以后为1,0,1,··
-----------------------------------------------------------------
B5|链接(用于多个数据,当一个数据field无法传送所有的数据,
|这个用于指示后面还有没有数据(也就是块)被传递。
------------------------------------------------------------------
B4-B0|reserved
------------------------------------------------------------------
Rblock的PCB的编码
-----------------------------------------------------------------
BIT|含义
--------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CPU 知识 源代码