zoukankan      html  css  js  c++  java
  • MIFARE Classic S50技术详解

    Mifare Classic 简介

      MIFARE Classic是恩智浦半导体开发的可用于非接触式智能卡,符合ISO/IEC 14443 A类标准。用于公共交通票证等应用,还可用于各类其他应用有S20,S50(M1),S70几种规格,主要是根据存储器容量划分,存储器容量分别有320B,1K,4K。具有以下防干扰、轻松简便以及安全等特性:

    • 防干扰

      智能防干扰功能允许同时有多张卡在现场工作。防干扰算法分别选择每一张卡,并确保选定的卡正确执行交易,不会受到现场另一张卡的干扰。

    • 轻松集成,使用简便

      针对轻松集成和使用简便而设计,允许在不到100 ms的时间内完成整个票证交易。

    • 安全

    · 每器件具有制造商编程的7字节UID或4字节NUID标识符

    · 支持随机ID

    · 三道双向认证(ISO/IEC DIS 9798-2)

    · 每扇区提供两组独立的密钥,支持多用途密钥体系

      本文以S50进行着重讲解,对于S20及S70可访问官方网站详细了解。

    逻辑框图

      对于S50来说,芯片由1KB E2P,非接接口,数字控制单元组成。其中:

    • 非接接口(RF Interface),包括:

    · 调制解调器(Modulator/demodulator)

    · 整流器(Rectifier)

    · 时钟再生器(Clock regenerator)

    · 上电复位(Power-On Reset )

    · 电压调节器(Voltage regulator)

    • 防冲突管理
    • 认证管理
    • 控制和算术逻辑单元
    • 存储器及访问接口:对于S50来说,存储器(E2P)只需要1KB分为16个扇区,每个扇区为4块,每块16个字节,以块为存取单位。
    • 加密单元

    执行流程

    执行流程包括三个部分,分别是初始化及选择过程,认证过程以及数据操作过程,如下图所示:

    · 呼叫

      读卡器发送 REQA/WUPA 命令,卡返回 ATQA 的过程。

    · 防冲突循环

      在防冲突循环过程中将读取卡片的ID,如果存在多张卡,则通过ID进行区别,并选择一张卡进一步处理,其它卡回到 IDLE 状态等待REQA/WUPA 命令。

    · 选卡

      读写器发送 SELECT,卡返回 SAK 的过程, SAK 指示当前卡是否支持 14443-4 协议和 UID 是否完整。

    · 三轮认证

      选卡后,读写器指定后续读写的存储器位置,并用相应密钥进行三轮认证。认证成功后,所有的存储器操作都是加密的。

    · 存储器操作

      认证后可执行下列操作:

    • 读块
    • 写块
    • 减值:减少数值块内的值,并将结果保存在数据寄存器中。
    • 加值:增加数值块内的值,并将结果保存在数据寄存器中。
    • 恢复:将数据块内容移入数据寄存器。
    • 转存:将数据寄存器的内容写入数值块。

    数据存储结构

    • 厂商代码块

      这是第 0 区的第 0 块存储制造商代码,它含有 UID 和厂商数据,只读。如果是4字节UID,则0~3字节为序列号,第4字节为校验字节(异或值),第5字节国卡片容量,第6、7字节为卡片类型。

    • 数据块

      所有扇区都由3个块组成,每个块由16字节用于存储数据(扇区0只有两个数据块,一个只读的厂商数据块)。数据块可以设置为:

    · 读写块,例如用于非接触门禁管理,有效命令: read, write

    · 数值块,例如用于电子钱包。

    •  数值块

      数值块允许执行电子钱包功能(有效的命令是:读、写增量、减量、恢复、转移)。数值块有一个固定的数据格式允许错误检测和校正和备份管理。

    · 数值:有符号 4 字节数值。数值的最低字节存储在最低地址字节。负值以标准的 2 的补码形式存储。数值存储三次,两次不取反,一次取反。

    · 地址( Adr): 1 字节绝对地址,当进行备份管理时,可用于保存块的地址(即地址不一定与当前的块号相同)。地址保存四次,两次取反,两次不取反。在 increment、decrement、 restore 和 transfer 操作中,地址保持不变。它只能通过 write。

      例:

      对于十进制数1234567,地址17来说,首先十进制数转成十六进制为0x0012D687,低字节存储在第0字节,高字节为第3字节,补码为0xFFED2978,低字节存储在第4字节,高字节存储在第7字节。对于十六进制的地址0x11来说,补码为0xEE。存储结果如下表所示:

    • 尾块

      各区均有一个尾块,存有:

    · 密钥 A 和 B(可选):卡片发行时,所有的密钥被设置为 FFFFFFFFFFFF。如果读密钥的权限不满足则读出的密钥值为全 0.

    · 该区四个块(或16个块)的读写条件,存储在字节 6 至 9 。读写控制位也指定了数据块的类型(读写块或数值块)。

      如果不需要密钥 B,尾块的最后 6 字节可以用作数据字节。尾块的字节 9 可用于用户数据。此字节享有与字节 6、 7、 8 相同的读写权限。对于访问条件,参考后面章节的详细说明。

    访问控制

      任何内存操作之前,卡必须选择和验证,对一个特定的块的访问,依赖于验证过程中的密钥以及存储在当前的扇区尾部的访问条件。内存操作如下表所示:

    • 访问条件

      每个数据块和尾块的访问条件是由3位数据组成,在访问条件及其补码形式存储在指定块的尾块中。

      访问控制位使用密钥A和密钥B控制内存的访问,访问条件可能会改变,只要知道相关的密钥和当前访问条件即允许此操作。如下图所示:

    • 控制位的组成

    • 尾块访问条件

      根据尾块的访问控制位,对于key的读/写访问的权限包括:never,keyA,keyB或者keyA|B。

    卡片发行时的控制字节为: FF078069,即:

    C10 C20 C30=000,块 0 的读、写、增、减、恢复、传送的权限都是 key A 或 keyB

    C11 C21 C31=000,块 1 的读、写、增、减、恢复、传送的权限都是 key A 或 keyB

    C12 C22 C32=000,块 2 的读、写、增、减、恢复、传送的权限都是 key A 或 keyB

    C13 C23 C33=001,块 3 的 keyA 读权限 never, keyA 的写权限、 Access bits 和 keyB 的读写权限都是 keyA。

    例一: C11 C21 C31=010,即块 1 的读权限为 keyA/keyB,写、增、减、恢复、传送的权限为never。修改尾块的值为: FFFFFFFFFFFFDF078200FFFFFFFFFFFF

    例二: C1x C2x C3x=111,即数据块的所有权限都为 never,尾块的读控制字节权限为 keyA|B,

    其它权限为 never。

    修改尾块的值为: FFFFFFFFFFFF00F0FF00FFFFFFFFFFFF

    • 数据块访问条件

      根据访问控制位的数据块(块0~2),读/写访问被指定为“从不”,“KeyA”,“KeyB”或“KeyA| B”。访问控制位定义了应用程序和相应的适用的命令。

    •读/写块:允许读和写操作。

    •数值块:允许额外的值操作,增量、减量、转移和恢复。

    •制造商块:只读,不受访问控制位设置影响!

    •密钥管理:在运输时配置必须用于身份验证的KeyA

    执行命令

      MIFARE Classic卡激活遵循ISO / IEC 14443 TypeA,MIFARE Classic卡被选中后,它可以使用ISO / IEC 14443命令停用,或可以执行MIFARE Classic命令。

    • ACK与NAK

      Mifare classic 使用4位ACK/NAK,如下表所示:

    • 个人化

    • SET_MOD_TYPE命令

    • 认证命令

    • 读命令

    • 写命令

    •  增、减、恢复命令

    • 转存命令

    安全与保护

    •  数据完整性

      以下机制在非接通讯过程中于读卡器与卡片之间实现,卡片确保数据正确性:

    •每个数据块有16位CRC

    •为每个字节奇偶校验位

    •位数检查

    •位编码区分“1”,“0”和“无信息”

    •监测信道(协议序列和位流分析)

    •  三轮认证

    1. 卡从指定扇区的尾块读出密钥和访问权限,并产生 4 字节随机数发送给读卡器。

    2. 读卡器使用密钥加密收到的随机数,把加密结果连同自己产生的随机数一起发送给卡(共 8 字节)。

    3. 卡使用第 1 轮中读出的密钥验证读卡器返回的加密数据,如正确则把收到的随机数加密后发送给读卡器,否则不发送数据。

    • RF接口

      RF-interface根据非接触式智能卡ISO / IEC 14443标准实现。两个方向的数据通信在每一帧的开始只有一个起始位。每个字节一位校验位(奇校验)。选择块的最低(LSB)的字节最选传输,最大帧长度为163位(16字节数据+ 2 CRC字节= 16´2´9 + 9 + 1起始位)。

    资料参考

    1.官方网站:http://www.nxp.com

    2.MIFARE Classic EV1 1K - Mainstream contactless smart card IC for fast and easy solution development.pdf Rev. 3.0

    3.MIFARE Platform Update &Infrastructure Introduction. Steven CJ Chang 2012.Feb.27

    4.《智能卡技术》

    作者:SCPlatform
    Email:SCPlatform@outlook.com
    本文旨在学习、交流使用,任何对文章内容的出版、印刷,对文章中提到的技术的商业使用时,请注意可能存在的法律风险。

  • 相关阅读:
    BZOJ 2034 【2009国家集训队】 最大收益
    vijos P1780 【NOIP2012】 开车旅行
    BZOJ 2115 【WC2011】 Xor
    BZOJ 3631 【JLOI2014】 松鼠的新家
    BZOJ 4717 改装
    BZOJ 2957 楼房重建
    BZOJ 4034 【HAOI2015】 T2
    BZOJ 1834 【ZJOI2010】 network 网络扩容
    BZOJ 2440 【中山市选2011】 完全平方数
    BZOJ 2733 【HNOI2012】 永无乡
  • 原文地址:https://www.cnblogs.com/SCPlatform/p/5116180.html
Copyright © 2011-2022 走看看