Mifare One射频卡初始值及其相关说明

2015-09-28 12:23:24 重庆诺塔斯智能科技有限公司 429

      经常遇到客户咨询有关于Mifare One射频卡初始值及其相关说明 为此诺塔斯智能科技将Mifare One射频卡初始及其操作方法 归纳总结如下,希望能帮助大家在Mifare One射频卡 做出帮助和参考。

电气特性:

容量为8KEEPrOM; 

 分为16个扇区,每个扇区为4块,每块16个字节,以块为存取单位; 

 每个扇区有独立的一组密码及访问控制; 

 每张卡有唯一序列号,为32位; 

 具有防冲突机制,支持多卡操作; 

 无电源,自带天线,内含加密控制逻辑和通讯逻辑电路; 

 工作温度:-20℃50℃; 

 工作频率:13.56MHZ; 

 通信速率:106KBPS; 

 读写距离:可达10mm(与读写器以及卡天线尺寸有关); 

● 数据保存期为10年,可改写10万次,读不限次。 

 

工作原理: 

片由一个卷绕天线和特定用途集成电路模块组成其中模块由一个高速(106KB波特率)RF接口一个控制单元和一个8KE2PROM组成。读写器向MF1卡发出一组固定频率(13.56MHZ)的电磁波,片内有一个LC串联谐振电路,其频率与读写器发射的频率相同,在电磁波的激励下,LC谐振电路产生共振,从而使谐振电容内有了电荷,在这个电容的另一端,接有一个单向导通的电子泵,将电容内的电荷送到模块存储电容内储存,当所积累的电荷达到2V以上时,此电容可作为电源向模块电路提供工作电压,将内数据发射出去或接收读写器的数据。 

 

存储结构: 

MF1卡分为16个扇区,每区有4(0~块3),共64块,按块号编址为063。第0扇区的块0(即绝对地址块0)用于存放芯片商,卡商相关代码,已经固化不可更改。其他各扇区的块0,块1,块2为数据块,用于存贮用户数据;块3为各扇区控制块,用于存放密码A,存取控制条件设置,密码B。各区控制块结构相同,如下所示:

各区控制块结构

字节号

0 1 2 3 4 5

6 7 8 9

10 11 12 13 14 15

控制值

FF FF FF FF FF FF FF

07 80 69

FF FF FF FF FF FF

说明

密码A(05字节)

存取控制(69字节)

密码B(1015字节)

 

控制属性: 

每个扇区的用户密码和存取控制条件都是独立设置的,可以根据实际需要设定各自的密码及存取控制。在存取控制中,每个块都有三个控制位相对应,用以决定某数据块或控制块的读写条件,定义为:"CXxy",见表1所示。 

其中CX代表每块控制位号(C1C3)x代表某块所属扇区号(015), y代表该扇区内某块号。例如C1x2 即为x扇区内块2的第1控制位,余此类推。 

注:控制位的设置存放在存取控制字节中,见表2所示。 
1:控制位定义"CXxy" 

0

C1x0

C2x0

C3x0

用户数据块,(00块除外)

1

C1x1

C2x1

C3x1

用户数据块

2

C1x2

C2x2

C3x2

用户数据块

3

C1x3

C2x3

C3x3

密匙存取控制块

 

2:三个控制位在存取控制字节中的位置 (注:" _b" 表示取反)

位号

字节号  

bit 7

6

5

4

3

2

1

0

字节6

C2x3_b

C2x2_b

C2x1_b

C2x0_b

C1x3_b

C1x2_b

C1x1_b

C1x0_b

字节7

C1x3

C1x2

C1x1

C1x0

C3x3_b

C3x2_b

C3x1_b

C3x0_b

字节8

C3x3

C3x2

C3x1

C3x0

C2x3

C2x2

C2x1

C2x0

字节9

BX7

BX6

BX5

BX4

BX3

BX2

BX1

BX0

所属块

3控制位

2控制位

1控制位

0控制位

3控制位

2控制位

1控制位

0控制位

 

各扇区数据块0~块2三个控制位以正反两种形式存在于块3存取控制字节中,它决定了该块的访问权限(例如进行减值及初始化值操作必须验证KEY A,进行加值操作必须验证KEY B,等等)。三个控制位在存取控制字节(69字节)中的权限如下(阴影区的存取控制为厂商初始值;字节9为备用字节,默认值为69): 

注释:表3中,KeyA|B 表示密码A或密码BNever表示没有条件实现。 

3:数据块的存取控制权限(x=015扇区; y=0,块1,块2) 

C1xy C2xy C3xy

加值 

减值,初始化

0 0 0

KeyA|B

KeyA|B 

KeyA|B

KeyA|B

0 1 0 

KeyA|B

Never

Never

Never

1 0 0 

KeyA|B

KeyB

Never

Never

1 0 0 

KeyA|B

KeyB

KeyB

KeyA|B

0 0 1 

KeyA|B

Never

Never

KeyA|B

0 1 1 

KeyB

KeyB

Never

Never

1 0 1 

KeyB

Never

Never

Never

1 1 1 

Never

Never

Never

Never

   

 例如,某区块的3个存取控制位C1xyC2xyC3xy=000(厂商预设的初始值,见阴影区),验证密码A或密码B正确后可读出/可写入/可加值/减值及初始化操作。该初始值主要供制卡和发卡商检测心片功能使用,确认所有读写/加密功能均正常(存取控制初始值"ff078069",请参考"步骤举例"自行验算)后,再依据使用需要和参照表45设置新的存取控制权限值,进行用户数据操作和修改新的用户密码。 

再如当某区块0的存取控制位C10C20C30的设置均=100时,验证密码A或密码B正确后可读出其数据;只有验证密码B正确后才可允许改写数据;不能进行加值,减值等操作。 

以厂商初始值"FF 07 80 69"为例,说明存取控制条件对数据块的影响。初始存取控制默认值(C1x0C2x0C3x0=000C1x1C2x1C3x1=000C1x2C2x2C3x2=000C1x3C2x3C3x3=001)KeyAKeyB默认值(由厂商提供,通常为:ffffffffffff)。那么块3中,厂商初始的存取控制值如下表所示: 

4: 块3中厂商初始存取控制值(-号表示需要取反

Bit#

7

6

5

4

3

2

1

0

字节6

1-

1-

1-

1-

1-

1-

1-

1-

字节7

0

0

0

0

0-

1-

1-

1-

字节8

1

0

0

0

0

0

0

0

 

CXx3

CXx2

CXx1

CXx0

CXx3

CXx2

CXx1

CXx0

 

如果用户要读到块1的内容,对照表4和查对表3可知,当存取控制C1x1C2x1C3x1=000时,必需正确校验KEY AKEY B后才可允许读取块1的内容,否则,MF1读写器会因校验某区密码出错而无法读取和传送数据!以此类推,用户要进行其它操作时,可根据存取条件,对照表24来决定其操作权限。 
   5列出了飞利浦公司对MF18种控制位设置值所对应的存取控制权限表,供发商及用户设置MF1使用权限时参考,其释义如下: 
5:块3的存取控制权限(供发商及用户设置权限时参考

控制位设置值

密码A权限

存取控制权限

密码B权限

C1x3

C2x3

C3x3

读 

读 

读 

0

0

0

Never

KeyA 

KeyA

Never

KeyA

KeyA

0

1

0

Never 

Never

KeyA

Never

KeyA

Never

1

0

0

Never 

KeyB

KeyA|B

Never

Never

KeyB

1

1

0

Never 

Never

KeyA|B

Never

Never

Never

0

0

1

Never 

KeyA

KeyA

KeyA

KeyA

KeyA

0

1

1

Never 

KeyB

KeyA|B

KeyB

Never

KeyB

1

0

1

Never 

Never

KeyA|B

KeyB

Never

Never

1

1

1

Never

Never

KeyA|B

Never

Never

Never

例如:当块3的存取控制位C13 C23 C33 = 100时,表示:密码A:不可读(隐藏),验证KEYB正确后,可写(或更改);存取控制:验证KEYAKEYB正确后,可读不可写(写保护);密码B:不可读,验证KEYB正确后可写。 

又如:当块3的存取控制位C13 C23 C33 = 110或者111时,除存取控制值需要在验证KEYAKEYB正确后仅仅可读外,其它如存取控制值的改写,密码A,密码B的读写权限均被锁死而无法访问

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MF1卡修改各区块控制位值和数据——举例 

(),以常用设置"08 77 8F 69"控制条件为例,先搞清楚它――具有的访问权限。 
1"08 77 8F 69"值进行计算,该值定位于各区块36789四个字节内,字节6=08,字节7=77, 
字节8=8F,字节9=69(默认值,不予计算)。 
2例如:字节6=08,对应其二进制值=00001000, 则对678这三个字节进行二进制转换结果见下表: 

字节6 = 0 0 0 0 1 0 0 0 

字节7 = 0 1 1 1 0 1 1 1

字节8 = 1 0 0 0 1 1 1 1


3参照表2及表4算法,字节6的全部二进制值取反,字节7的低四位二进制值取反,字节8不变,得到: 

字节号

对应二进制值

位置

4

位置

4

字节
字节
字节8

0 0 0 0 1 0 0 0 
0 1 1 1 0 1 1 1 
1 0 0 0 1 1 1 1

C2Y 
C1Y 
C3Y

1 1 1 1 
0 1 1 1 
1 0 0 0

C1Y 
C3Y 
C2Y

0 1 1 1 
1 0 0 0 
1 1 1 1 

所 属 块 位

0

 

0

 

4对以上678字节的存取/控制二进制已取反值,依照表2,表4块位转换为各块控制值,如下表: 

3

字节7,字节6,字节8 = C13C23C33 = C1YC2YC3Y = 0 1 1 

2位 
1位 
0

字节7,字节6,字节8 = C12C22C32 = C1YC2YC3Y = 1 1 0

字节7,字节6,字节8 = C11C21C31 = C1YC2YC3Y = 1 1 0

字节7,字节6,字节8 = C10C20C30 = C1YC2YC3Y = 1 1 0

注意: 高4位的各块值=4位的各块值时,其值可用。高4位值4位值时,其值不可用
5查对访问权限(数据存取控制依照表3,块3存取控制依照表5),该例"08 77 8F 69"的访问权限为: 
◆ 3 = 011:权限为:KeyAKeyB均不可读,验证KeyB正确后可改写KeyAKeyB,验证KeyAKeyB正确后可读"控制位"。在此可见密钥KeyB的重要性,KeyB不正确是无法看到块3控制值,更无法修改密钥。 

◆ 2 = 1 = 0 = 110:权限为:验证KeyAKeyB后可读该块数据,减值以及初始化值,只有验证KeyB 正确后才可改写该块数据,在此可以看到密钥KeyB对改写数据块也起着关键性作用。 
()"08 77 8F 69" 控制条件设置步骤: 
()可知:KeyB设置后为不可读,并且改写数据和改写控制位都需要正确验证它,故KeyB设置后程序
操作员必须妥善保管KeyB值,否则以后改写数据和控制位时,不正确的KeyB值将无法实现卡的任何操作!!! 
1修改块3控制位的值:最初的各区块3内的KeyAKeyB都是厂商12"F"默认值(KeyA在任何条件下均为不可读,大部分读写机程序表现KeyA为未知的12"0" ),在修改控制值时,先不要修改默认密码KeyAKeyB,在控制位修改成功后,再去更改新密码值。即先对块3的控制位进行修改(默认值FF 07 80 69改为新值08 77 8F 69)并执行写操作。控制位写成功后,KeyB亦为12"0"不可读了,但仍是隐藏的12"f"默认值。 
2修改块3KeyAKeyB值:控制位08 77 8F 69值写成功后,验证KeyB正确后方可改写KeyAKeyB新密码。在密码操作模式键入要改写区块之先前密码B(先前密码为默认值时,则不需改动和加载),加载后反回数据操作模式,再进行读值,KeyAKeyB值的改写。 

3修改块0~块2中数据:由新的控制条件08778F69可知,要修改数据,必须先验证KeyB,故先设置密码操作为KeyB认证方式,加载后再返回数据操作模式,对要修改的数据块进行值的改写操作。 

4上例中分析了"08 77 8F 69"的访问条件及其改写步骤,对用户的其它控制条件亦可参照应用。