今天晚上对于MIFARE标准IC卡方面的知识进行了了解,现对于自己认为重要的部分进行总结。(RWD : Read Write Device)
1.特征
1.1 MIFARE RF接口
a.工作频率:13.56MHz
b.数据传送速度:106Kbit/s
c.数据高度可靠:16位CRC,奇偶校验,位编码,位计数
d.真正的反冲突
1.2 EEPROM
a.1K字节,分为16个扇区,每个扇区又分为4个段,每个段中有16个字节
b.用户可以定义每一个存储段的访问条件
1.3保密性
a.需要通过3轮确认
b.RF信道的数据加密,有重放攻击保护
c.每个区有两套独立的密钥(A和B),支持带密钥层次的多应用
d.每个设备有唯一的序列号
2.详细描述
2.1反冲突
智能的反冲突功能允许同一个区域中有不止一张卡同时工作。反冲突算法每次只选择一张卡,确保对选中的卡正确执行操作而且同一区域中的其他卡不会破坏数据。
3.功能描述
3.1通讯原理
通讯命令由RWD初始化,并由MF1 IC S50的数字式控制单元根据相应区的有效访问条件来控制。
3.1.1 请求标准/所有
卡上电复位(POR)后,他可以给请求代码发送回应(ATQA)回复RWD的请求命令。
3.1.2反冲突环
反冲突环可以读出卡的序列号。如果在RWD的工作范围内有几张卡,RWD通过唯一的序列号来区别它们并且每次选择其中一张卡(也叫选择卡)进行下一步操作。没有被选中的卡会回到准备模式等待新的请求命令。
3.1.3 选择卡
RWD使用选择卡命令选中其中一张卡进行确认和存储器相关操作。卡返回(ATS=08H),RWD通过ATS可以确定被选择的卡的类型。
3.1.4 3轮确认
选中一张卡之后,RWD指出了接着要访问的存储器位置,然后使用相应的密钥进行3轮确认。在成功确认后,所有的存储器操作都是保密的。
3.1.5 存储器操作
确认之后可以执行以下的任何操作:
①读存储器段
②写存储器段
③减:减存储器段的内容并将结果保存在临时的内部数据寄存器中
④增:增加存储器段的内容并将结果保存在数据寄存器中
⑤恢复:将存储器段的内容移到数据寄存器中
⑥传送:将临时内部数据寄存器的内容写到值存储器段中
3.2 3轮确认的顺序
a.RWD指定要访问的区并选择密钥A或密钥B。
b.卡从区位读出 密钥和访问条件。然后卡发送一个随机数1到RWD。
c.RWD用密钥和随机数1计算响应1。然后,将响应和RWD的随机数2一起发送到卡中。
d.卡用自己的随机数1和RWD的响应1,相比较确认RWD的响应。然后卡计算随机数2的响应2并发送出去。
e.RWD用自己的随机数2和卡的响应2相比较确认卡的响应。
在发送第一个随机的询问之后,卡和RWD之间的通讯是保密的。这个就像我之前了解过的关于智能卡的外部认证和内部认证。
3.3 存储器结构
在擦出状态时,读EEPROM单元的值是逻辑“0”;在写状态时,读EEPROM单元的值是逻辑“1”。
3.3.1 厂商段
第0-3字节是卡片的序列号,第4字节是序列号的校验码。
3.3.2数据段
所有的区都包含3个段(16个字节)保存数据(区0只要两个数据段和一个只读的厂商段)
数据段可以被一下的访问位配置:
①读/写段,用于譬如无线访问控制。
②值段,用于譬如电子钱包,他需要额外的命令,像直接控制保存值的增加和减少。
在执行任何存储器操作器都要先执行确认命令。
3.3.2.1 值段
值段可以实现电子钱包的功能。(有效的命令有:读、写、增、减、恢复、发送)
值段有一个固定的数据格式,可以进行错误检测和纠正并备份管理。
值段只能在值段格式的写操作时产生。
①值:表示一个带符号4字节值。
这个值的最低一个字节保存在最低的地址中。取反的字节以标准2的格式保存。为了保证数据的正确性和保密性,
值被保存了3次,两次不取反保存,一次取反保存。
②Adr:表示一个1字节地址,当执行强大的备份管理时用于保存存储段的地址。
地址字节保存了4次,取反和不取反各保存两次。在执行增、减、恢复、传送操作时,地址保持不变。它只能通过写命令改变。
3.3.3 区尾(段3)
每个区都有一个区尾,它包括:
1.密钥A和密钥B(可选),读密钥时返回逻辑“0”
2.访问这个区中4个段的条件(保存在第6字节-第9字节)。访问位也可以指出数据段的类型(读/写或值)
如果不需要密钥B,那么段3的最后6字节可以作为数据字节。
用户数据可以使用区位的第9字节,这个字节具有和字节6、7、8一样的访问权。
3.4 访问条件
每个数据段和区尾的访问条件由3个位来定义,他们以取反和不取反的形式保存在置顶区的区尾中。
访问为控制了使用密钥A和B访问存储器的权力。当知道相关的密钥和当前的访问条件时,可以修改访问条件。
每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取控制。存取控制为4个字节,共32位,扇区中每个段(包括数据段和控制段)的存取条件都是由密码和存取控制共同决定的,在存取控制中每个段都有相应的三个控制位,定义如下:
段0: C10 C20 C30
段1:C11 C21 C31
段2: C12 C22 C32
段3:C13 C23 C33
三个控制位以正和反两种形式存在于存取控制字节中,决定了该段的访问权限。三个控制位在存取控制字中的位置,以段0为例:
数据段(段0、段1、段2)的存取控制如下:
例如:当段0的存取控制位C10 C20 C30=1 0 0时,验证密码A或密码B正确后可读;验证密码B正确后可写;不能进行加值、减值操作。
控制段3的存取控制与控制段(0、1、2)不同,它的存取控制如下: