智能卡基础知识M1卡
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
控制字节介绍
控制位(X=0..2) C1X C2X C3X
0
0
0
0
1
0
数据块存取控制:
1 1
0 1
0 0
0
0
1
0
1
1
1
0
1
1
1
1
访 问 条 件 (对数据块 0、1、2)
Read
Write Increment Decrement,
transfer,Restore
KeyA|B KeyA|B KeyA|B KeyA|B
智能卡基础知识-M1
内容概要
一、M1卡识别 二、M1卡存储结构 三、M1卡数据块存储的应用介绍 四、M1卡认证与指令
一、M1卡识别
如何识别出M1卡?
M1卡属于TPYE A卡。 可以通过ATQA编码识别:
0200:M1 S70 4K 0400:M1 S50 1K 0800:CPU 4403:DESFire android.nfc.tech.NfcA类中getAtqa()方法获取。 (ATQA共有16位,根据bit7和bit8来判断是几级UID)
卡操作指令举例:
读第01块数据: 发送:3001 返回:00000000000000000000000000000000
对于Android NFC操作卡片,MifareClassic类封装了所有操作指令。 authenticateSectorWithKeyA();//keyA认证(入参:扇区号、keyA) authenticateSectorWithKeyB();//keyB认证(入参:扇区号、keyB) readBlock();//读数据(入参:块号) writeBlock();//写数据(入参:块号、16字节数据) increment();//加值(入参:块号、加的值 decrement();//减值(入参:块号、减的值) transfer();//传输(入参:块号) restore();//重载(入参:块号) transceive();//单APDU数据透传(入参:APDU指令)
0
1
Never Never KeyA|B KeyB Never Never
1
1
1
Never Never KeyA|B Never Never Never
控制字节举例
举例:存取控制字为:FF 07 80 69 1111 1111 0000 0111 1000 0000 0110 1001 对照右图标得: 块0:C10 C20 C30=000 块1:C11 C21 C31=000 块2:C12 C22 C32=000 块3:C13 C23 C33=001
数据值存储结构:
例如某一存储块数据为:00000001FFFFFFFE0000000100FF00FF 那么数据值为1。00FF00FF可以做校验位,可以为固定值。 一般应用于钱包,存储金额数值。
控制字节介绍
每个块都有相应的三个控制位,定义如下: 块0: C10 C20 C30 块1: C11 C21 C31 块2: C12 C22 C32 块3: C13 C23 C33
KeyA|B Never Never
Never
KeyA|B KeyB Never
Never
KeyA|B KeyB KeyB
KeyA|B
KeyA|B Never Never
KeyA|B
KeyB KeyB Never
Never
KeyB Never Never
Never
Never Never Never
Never
密码A
存取控制
密码B
C13 C23 C33 Read Write Read Write Read Write
0
0
0
Never KeyA|B KeyA|B Never KeyA|B KeyA|B
0
1
0
Never Never KeyA|B Never KeyA|B Never
控制块存取控制:
1 1
0 1
• 每个扇区的块3为控制块,包括了密码A、存取控制、密码 B。
三、M1卡数据存储的应用介绍
数据存储区
块0、1、2存储数据。 块3为控制块,包括了密码A、存取控制、密码B,例如:
A0 A1 A2 A3 A4 A5 FF 07 80 69 B0 B1 B2 B3 B4 B5
Key A
控制字节 Key B
四、M1卡认证与指令
KeyA、KeyB的认证
三次互相确认(3 Pass Authentication):
PCD
PICC
Auth(6x xx) —>
<— RNG(B)
TOKEN(AB) —>
<— TOKEN(BA)
android.nfc.tech.MifareClassic类中封装为:
authenticateSectorWithKeyA()
authenticateSectorWithKeyB()
卡操作指令:
对数据块的操作 读 (Read):读一个块; 写 (Write):写一个块; 加(Increment):对数值块进行加值; 减(Decrement):对数值块进行减值; 存储(Restore):将块中的内容存到数据寄存器中; 传输(Transfer):将数据寄存器中的内容写入块中; 中止(Halt):将卡置于暂停工作状态;
例如:当块0的存取控制位C10 C20 C30=1 0 0时,验证密码A或密码B正确后可读; 验证密码B正确后可写;不能进行加值、减值操作。
例如:当块3的存取控制位C13 C23 C33=1 0 0时,表示: 密码A:不可读,验证KEYA或KEYB正确后,可写(更改)。 存取控制:验证KEYA或KEYB正确后,可读、可写。 密码B:验证KEYA或KEYB正确后,可读、可写。
二、M1卡存储结构
M1卡卡存储结构
M1卡卡存储介绍
• M1卡分为16个扇区,每个扇区由4块(块0、块1、块2、 块3)组成,(也将16个扇区的64个块按绝对地址编号为 0~63)
• 第0扇区的块0(即绝对地址0块),它用于存放厂商代码, 已经固化,不可更改。
• 每个扇区的块0、块1、块2为数据块,可用于存贮数据。 ( 数据块可作两种应用:数据保存和数据值操作)
0 0
Never Never
KeyB Never
KeyA|B Never KeyA|B Never
Never Never
KeyB NevB KeyA|B KeyA|B KeyA|B KeyA|B
0
1
1
Never KeyB KeyA|B KeyB Never KeyB
1