赞
踩
Mifare 1卡(M1卡、IC卡)读写操作及工作原理整理
IC(Integrated Circuit Card)卡,也称为智能卡、智慧卡、微芯片卡等。IC卡按读写通讯方式分为接触式、非接触式和双界面卡(即同时具备接触式和非接触式通讯接口)。IC卡因为其固有的信息安全、方便携带、比较完善的标准化等优点,广泛应用于身份认证、银行、电信、公共交通、车场管理等领域。例如二代身份证、银行电子钱包、电话卡、公交卡、停车卡等等。
按结构分类:
接触式IC卡芯片: SLE4442、SLE4428、国产4442、国产4428,Atmel24C01/16/64,CPU,SIM,AT102、AT1604、AT1608,AT24xx、AT45041等
非接触式IC卡芯片: S50,S70,UL,TypeA CPU,TypeB CPU等
Mifare 1卡是属于非接触式逻辑加密卡。MIFARE MF1是符合ISO/IEC 14443A的非接触智能卡。其通讯层(MIFARE RF 接口)符合ISO/IEC 14443A标准的第2和第3部分。其安全层支持域检验的CRYPTO1数据流加密。
在MIFARE卡中,芯片连接到一个几匝的天线线圈上,并嵌入塑料中,形成了一个无源的非接触卡。不需要电池。当卡接近读写器天线时,高速的RF通讯接口将以106 kBit/s 的速率传输数据。
智能的防冲突功能可以同时操作读写范围内的多张卡。防冲突算法逐一选定每张卡,保证与选定的卡执行交易,不会导致与读写范围内其他卡的数据冲突。
MIFARE是针对用户便捷性优化的。例如,高速数据传输使得完整的票务交易在不到100 ms内处理完毕。因此用户不必在读写器天线处停留,形成高的通过率,减少了公共汽车的登车时间。在交易时,MIFARE卡可以留在钱包里,甚至钱包里有硬币也不受影响。
安全的重点是防欺诈。相互随机数和应答认证、数据加密和报文鉴别检查和,防止各种破解和篡改,使其更适于票务应用。不可更改的序列号,保证了每张卡的唯一性。
MIFARE提供了可以与CPU卡媲美的真正多应用功能。每区两个不同的密钥支持采用分级密钥的系统。
MF1 S50集成电路芯片内含1 Kbyte EEPROM、RF接口和数字控制单元。能量和数据通过天线传输,卡中天线为几匝线圈,直接连接到芯片上。不再需要额外的组件。
命令由读写器发出,根据相应区读写条件受数字控制单元的控制。
卡上电复位后,通过发送request应答码(ATQA 符合ISO/IEC 14443A),能够回应读写器向天线范围内所有卡发出的request 命令。
在防冲突循环中,读回一张卡的序列号。如果在读写器的工作范围内有几张卡,它们可以通过唯一序列号区分开来,并可选定以进行下一步交易。未被选定的卡转入待命状态,等候新的request命令。
读写器通过select card命令选定一张卡以进行认证和存储器相关操作。该卡返回选定应答码(ATS= 08h),明确所选卡的卡型。
选卡后,读写器指定后续读写的存储器位置,并用相应密钥进行三轮认证。认证成功后,所有的存储器操作都是加密的。
认证后可执行下列操作:
在读写器和卡之间的非接触通讯链接中实施下列机制,以保证数据传输的可靠性:
采用符合ISO 9798-2的三轮认证,以保证高度的安全性。
读写器指定要访问的区,并选择密钥A或B。
卡从位块读区密钥和访问条件。然后,卡向读写器发送随机数。(第一轮)
读写器利用密钥和随机数计算回应值。回应值连同读写器的随机数,发送给卡 (第二轮)。
卡通过与自己的随机数比较,验证读写器的回应值,再计算回应值并发送(第三轮)。
读写器通过比较,验证卡的回应值。
在第一个随机数传送之后,卡与读写器之间的通讯都是加密的。
RF接口符合非接触智能卡标准ISO/IEC 14443A。
读写器的载波电磁场始终存在(发送中有短暂中断),因为它用作卡的电源。对于两个方向的数据通讯,每个数据帧都只有一个起始位。所传送的每个字节末尾都有一个奇偶校验位(奇校验)。选定块最低地址字节的最低位首先传送。最大帧长为163 bit(16数据字节 + 2个CRC字节 = 16 * 9 + 2 * 9 + 1 起始位)。
1024 x 8 bit EEPROM存储器分为16区,每区4块,每块16字节。
在擦处后的状态下,EEPROM的单元读为逻辑“0”,写后的状态下读为“1”。
这是第1区的第1块(块0)。它含有集成电路制造商数据。出于安全和系统需求,此块是制造商在生产过程中编程后写保护的。
各区均有3个16字节的块用于存储数据(区0只有两个数据块以及一个只读的厂商代码块)。
数据块可以通过读写控制位设置为:
读写块,例如用于非接触门禁管理
数值块,例如用于电子钱包,另有可直接控制存储值的命令,如增值、减值。
在任何存储器操作之前必须执行认证命令。
数值块具有电子钱包功能(有效命令:read, write, increment,decrement, restore, transfer)。
数值块有固定的数据格式,以便于错误检测、纠错和备份管理。
数值块只能通过以数值块格式的写操作生成:
数值:有符号4字节数值。数值的最低字节存储在最低地址字节。负值以标准的2的补码形式存储。出于数据完整性和安全原因,数值存储三次,两次不取反,一次取反。
地址(Adr):1字节地址,当进行备份管理时,可用于保存块的地址。地址保存四次。两次取反,两次不取反。在increment、decrement、restore和transfer 操作中,地址保持不变。它只能通过write命令更改。
各区均有一个尾块,存有:
如果不需要密钥B,块3的最后6字节可以用作数据字节。
尾块的字节9可用于用户数据。因为此字节享有与字节6、7、8相同的读写权限。
必须如前所述,先选定卡并通过认证,才能执行存储器操作。
存储器操作:
操作 | 说明 | 使用块型 |
---|---|---|
读 | 读存储器块 | 读写、数值和尾块 |
写 | 写存储器块 | 读写、数值和尾块 |
增值 | 增加块的内容,并将结果存入内部寄存器 | 数值 |
减值 | 减少块的内容,并将结果存入内部寄存器 | 数值 |
转存 | 将内部寄存器内容写入块中 | 数值 |
恢复 | 将块中内容写入内部寄存器 | 数值 |
对指定块可以执行的存储器操作取决于所用的密钥和存储在相应尾块中的读写条件。
每个数据块和尾块的读写条件均由3个bit定义,并以非取反和取反形式保存在各个区的尾块中。
读写控制位管理着使用密钥A和B读写存储器的权限。如果知道相关的密钥,并且当前读写条件允许,读写条件是可以更改的。
读写控制位 | 有效命令 | 块 | 说明 | |
---|---|---|---|---|
C13 C23 C33 | read, write | ® | 3 | 尾块 |
C12 C22 C32 | read, write, increment, decrement, transfer, restore | ® | 2 | 数据块 |
C11 C21 C31 | read, write, increment, decrement, transfer, restore | ® | 1 | 数据块 |
C10 C20 C30 | read, write, increment, decrement, transfer, restore | ® | 0 | 数据块 |
对密钥和控制位的读写取决于尾块(块3)的访问控制位,分为“禁止”、“KEY A”、“KEY B”和“KEY A|B”( KEY A或KEY B)。
控制块(块3)的存取控制如下:
(计算出C13,C23,C33即可在下表中找出块3对应的权限)
对数据块(块0至2)的读写访问取决于其访问控制位,分为“禁止”、“KEY A”、“KEY B”和“kEY A|B”( KEY A或KEY B)。相关访问控制位的设置确定了其用途以及相应的可用命令。
数据块(块0,块1,块2)的存取控制如下:
(计算出C10,C20,C30即可在下表中找出块0对应的权限)
以上是最近调试IC卡功能的归纳整理。感谢以下两位大神的帖子:
https://blog.csdn.net/liujianhua1989/article/details/72639307
https://blog.csdn.net/qizewei123/article/details/80514083?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf
希望可以给到需要的人参考。如有描述有误的还望提醒!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。