MIFARE系列6《射频卡与读写器的通信》

1. ATR(Answer to request)

     读写器呼叫磁场内的卡片。卡片对呼叫做出应答。

对刚进入磁场得到电复位处于休闲状态的卡片,卡请求(REQA,0x26);对于已进行过读写操作并进入休眠状态的卡片。卡唤醒(WAKE-UP,0x52)。当中卡请求(REQA)仅仅能呼叫处于休闲(Idle)状态的卡片,卡唤醒(WAKE-UP)能够呼叫全部卡片。包含处于休眠(Halt)和休闲状态的卡片。

     收到卡呼叫命令后,卡片将对命令做出应答(AnswerTo Request,ATQA), 读写器以特定的协议与它通讯,从而确定该卡是否为M1射频卡,即验证卡片的卡型。ATQA有两个字节,第一个字节的值没有规定(RFU),第二个字节的高两位b7b6表示卡序列号长度 (“00”为4字节,“01”为7字节,“10”为10字节), b5位的值没有规定(RFU),b4-b0表示是否遵守面向比特的防冲突机制,假设遵守,b4-b0必须有且仅有1位为1。通常情况下。Mifare S50的ATQA是0004H。Mifare S70的ATQA是0002H。


 

2. 防冲突机制 (Anticollision Loop)

当有多张卡进入读写器操作范围时,防冲突机制会从当中选择一张进行操作,未选中的则处于空暇模式等待下一次选卡,该过程会返回被选卡的序列号。

该过程返回一个被选中的卡的序列号。序列号Serial Number存储在卡片的Block 0中,共同拥有5个字节。实际实用的为4个字节,还有一个字节为序列号Serial Number的校验字节,。智能的反冲突功能同意同一工作区域中有不止一张卡同一时候工作反冲突算法每次仅仅选择一张卡确保对被选中的卡正确运行操作并且同一区域中的其它卡不会破坏数据。


 

3. 选择卡片(Select Tag)

     选择被选中的卡的序列号。并同一时候返回卡的容量代码。

选择被选中卡的序列号,并同一时候返回卡的容量代码Tag Size(前"08",代表容量返回值。现已改"88"。无特殊意义)。

RWD使用选择卡命令选中当中一张卡进行确认和存储器相关操作卡返回Answer To Select ATS码=08h, RWD通过ATS能够确定被选中的卡的类型。


 

4. 三次互相确认(3 Pass Authentication)

       Mifare系列产品不仅卡片要认证读写器的身份,读写器也要认证卡片的身份,这样的认证称为相互认证。常见的认证方法是使用password或者叫口令。

口令一旦被听到。就会泄露。而password没有规律性,并且可通过随机数加密。所以相互认证是利用随机数加密验证的。Mifare系列所採用的相互认证机制被称为“三次相互认证”,例如以下图所看到的。

 


a) 读写器指定要訪问的区。并选择密钥A或B。

b) 卡从位块读区密钥和訪问条件。

然后,卡向读写器发送随机数B。

(第一轮)

c) 读写器利用密钥和随机数计算回应值。回应值A连同读写器的随机数B。发送给卡(第二轮)。

d) 卡通过与自己的随机数比較。验证读写器的回应值A,再计算回应值并发送(第三轮)。

e) 读写器通过比較。验证卡的回应值。

 

     在第一个随机数传送之后。卡与读写器之间的通讯都是加密的。认证的过程中多次提到“事先约定的算法”,究竟是什么样的算法呢。

这个没有详细规定。但有一个要求是必须的,就是这个算法一定要有password和随机数的參与。

认证过程中的不论什么一环出现差错,整个认证将告失败。必须从新開始。



5. 存储器操作

三次相互认证后可运行下列操作:

·          读(Read):读数据块

·          写(Write):写数据块

·          减值(Decrement):降低数据块内的数值,并将结果保存在暂时内部数据寄存器中。

·          加值(Increment):添加数据块内的数值。并将结果保存在数据寄存器中。

·          转存(Restore):将暂时内部数据寄存器的内容写入数值块。

·          暂停(Halt ):将卡置于暂停上作状态


文/闫鑫原创   转载请注明出处http://blog.csdn.net/yxstars/article/details/38085415

版权声明:本文博客原创文章,博客,未经同意,不得转载。

原文地址:https://www.cnblogs.com/zfyouxi/p/4732084.html