存取控制指符合什么条件才能对卡片进行操作。

S50和S70的块分为数据块和控制块,对数据块的操作有“读”、“写”、“加值”、“减值(含传输和存储)”四种,对控制块的操作只有“读”和“写”两种。

S50和S70的每个扇区有两组密码KeyA和KeyB,所谓的“条件”就是针对这两组密码而言,包括“验证密码A可以操作(KeyA)”、“验证密码B可以操作(KeyB)”、“验证密码A或密码B都可以操作(KeyA|B)”、“验证哪个密码都不可以操作(Never)”四种条件。

这些“条件”和“操作”的组合被分成8种情况,正好可以用3位二进制数(C1、C2、C3)来表示。

数据块(每个扇区除区尾块之外的块)的存取控制如下表所示:

控制位

访 问 条 件 (验证哪个密码)

C1

C2

C3

加值

减值(含传输和存储)

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

1

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

从表中可以看出,

C1C2C3=000(出厂默认值)时最宽松,验证密码A或密码B后可以进行任何操作;

C1C2C3=111无论验证哪个密码都不能进行任何操作,相当于把对应的块冻结了;

C1C2C3=010和C1C2C3=101都是只读,如果对应的数据块写入的是一些可以给人看但不能改的基本信息,可以设为这两种模式;

C1C2C3=001时只能读和减值,电子钱包一般设为这种模式,比如用S50做的公交电子车票,用户只能查询或扣钱,不能加钱,充值的时候先改变控制位使卡片可以充值,充完值再改回来。

控制块(每个扇区的区尾块)的存取控制如下表所示:

控制位

密码A

存取控制

密码B

C1

C2

C3

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

从表中可以看出,

密码A是永远也读不出来的,如果用户的数据块指定了验证密码A却忘了密码A,也就意味着这个数据块作废了,但本扇区其他数据块和其他扇区的数据块不受影响;

存取控制总是可以读出来的,只要别忘了密码A或密码B;

存取控制的写控制在设置时一定要小心,一旦弄成了“Never”,则整个扇区的存取条件再也无法改变,后悔都找不到地方,只能仰天长叹了;

C1C2C3=001(出厂默认值)时最宽松,除了密码A不能读之外,验证了密码A其他读写操作都可以进行;

还有一个有意思的现象是当C1C2C3=000、C1C2C3=010和C1C2C3=001时,所有的操作都不使用密码B,这时候密码B占据的6个字节可以提供给用户作为普通数据存储用,相当于每个扇区增加了6字节的用户可用存储容量。

由于卡片出厂的默认值C1C2C3=001,所以对于新买来的卡片,不要使用密码B进行认证,否则会导致区尾块和数据块都无法进行任何操作。我测试过不同厂家的新卡片,有的验证密码B后确实扇区内的所有块都无法操作,但有的卡片不能操作区尾块,却可以操作数据块,本文以NXP的原装卡为准。当然用户可以放心,新卡不让你验证密码B而你却验证了,不会对卡照成什么伤害,改回用密码A验证,卡片还是可以正常使用的。

S50的每个扇区有4个块,这四个块的存取控制是相互独立的,每个块需要3个bit,四个块共使用12个bit。在保存的时候,为了防止控制位出错,同时保存了这12个bit的反码,这样一个区的存储控制位在保存时共占用24bit的空间,正好是3个字节。我们前面说存取控制字有四个字节(区尾块的Byte6~Byte9),实际上只使用的Byte6、Byte7和Byte8,Byte9没有用,用户可以把Byte9作为普通存储空间使用。各块控制位存储格式如下:

块3(区尾块)

块2

块1

块0

Byte6

b3  b2  b1  b0

块3-C1-反

块2-C1-反

块1- C1-反

块0-C1-反

b7  b6  b5  b4

块3-C2-反

块2-C2-反

块1- C2-反

块0-C2-反

Byte7

b3  b2  b1  b0

块3-C3-反

块2-C3-反

块1- C3-反

块0-C3-反

b7  b6  b5  b4

块3-C1

块2-C1

块1- C1

块0-C1

Byte8

b3  b2  b1  b0

块3-C2

块2-C2

块1- C2

块0-C2

b7  b6  b5  b4

块3-C3

块2-C3

块1- C3

块0-C3

由于出厂时数据块控制位的默认值是C1C2C3=000,控制块的默认值是C1C2C3=001,而Byte9一般是69H,所以出厂白卡的控制字通常是FF078069H.

S70的前32个数据块结构和S50完全一致。后8个数据块每块有15个普通数据块和一个控制块。显然如果每个数据块块单独控制将需要8字节的控制字,控制块中放不下这么多控制字。解决的办法是这15个数据块分为三组,块0~4为第一组,块5~9为第二组,块10~15为第三组,每组共享三个控制位,也就是说每组控制位C1C2C3控制5个数据块的存取权限,从而与前32个扇区兼容。

射频识别技术漫谈(14)——Mifare S50与S70的存取控制的更多相关文章

  1. 射频识别技术漫谈(13)——Mifare S50与S70【worldisng笔记】

    Mifare S50和Mifare S70又常被称为Mifare Standard.Mifare Classic.MF1,是遵守ISO14443A标准的卡片中应用最为广泛.影响力最大的的一员.而Mif ...

  2. 射频识别技术漫谈(13)——Mifare S50与Mifare S70

    Mifare S50和Mifare S70又常被称为Mifare Standard.Mifare Classic.MF1,是遵守ISO14443A标准的卡片中应用最为广泛.影响力最大的的一员.而Mif ...

  3. 射频识别技术漫谈(11)——Mifare系列卡的共性【worldsing笔记】

    Mifare是NXP公司生产的一系列遵守ISO14443A标准的射频卡,包Mifare S50.Mifare S70.Mifare UltraLight.Mifare Pro.Mifare Desfi ...

  4. 射频识别技术漫谈(11)——Mifare系列卡的共性

    Mifare是NXP公司生产的一系列遵守ISO14443A标准的射频卡,包Mifare S50.Mifare S70.Mifare UltraLight.Mifare Pro.Mifare Desfi ...

  5. 射频识别技术漫谈(14)——S50与S70存取控制【worldsing笔记】

    存取控制指符合什么条件才能对卡片进行操作. S50和S70的块分为数据块和控制块,对数据块的操作有"读"."写"."加值"."减值 ...

  6. 射频识别技术漫谈(16)——Mifare UltraLight

    Mifare UltraLight又称为MF0,从UltraLight(超轻的)这个名字就可以看出来,它是一个低成本.小容量的卡片.低成本,是指它是目前市场中价格最低的遵守ISO14443A协议的芯片 ...

  7. 射频识别技术漫谈(18)——Mifare Desfire

    Mifare  DESFire(MF3 IC D40/D41,本文以D40为例)遵守14443 TypeA协议,卡内的数据以文件形式存储,所以有人认为它是准CPU卡,主要用于安全性要求较高的非接触式领 ...

  8. 射频识别技术漫谈(10)——识别号的格式变化【worldsing笔记】

    从事RDID行业的朋友经常会遇到这样的情况,同一张ID卡,在不同厂家生产的读卡器上读出的识别号完全不一样,有时甚至差之千里.ID卡的识别号一般是在出厂时被固化在卡片的ROM里,本身是不会改变的,问题出 ...

  9. 射频识别技术漫谈(28)——基于MF1射频卡的酒店门锁设计

    电子门锁是现代星级酒店管理电子化.智能化的重要电子设备.相较于传统的机械锁,基于RFID技术的电子门锁使用方便,易于管理,安全性高,可实现对开锁用户的分优先级自动管理,对房间入住信息实现自动统计与报表 ...

随机推荐

  1. c#学习已经停止了

    为了养家糊口,没有时间学习c#.

  2. 简单的CSS网页布局--三列布局

    三列布局其实不难,不过要用到position:absolute这个属性,因为这个属性是基于浏览器而言,左右部分各放在左右侧,空出中间一列来实现三列布局. (一)三列布局自适应 <!DOCTYPE ...

  3. XX秘籍

    第一课 一个男人在他妻子洗完澡后准备进浴室洗澡.这时,门铃响了. 妻子迅速用浴巾裹住自己冲到门口. 当她打开门时,邻居鲍勃站在那儿. 在她开口前,鲍勃说,“你如果把浴巾拿掉,我给你800美元.” 想了 ...

  4. EasyUI easyui-combobox 重复发送请求

    今天在做个EasyUI easyui-combobox 下拉框动态连级的时候发现在选择一个值的时候发送了两次请求,这有点逆天呀~!!反人类~!必须和谐一开始以为是重复绑定了,重新审核了代码 确定没有~ ...

  5. JDK源码学习--String篇(四) 终结篇

    StringBuilder和StringBuffer 前面讲到String是不可变的,如果需要可变的字符串将如何使用和操作呢?JAVA提供了连个操作可变字符串的类,StringBuilder和Stri ...

  6. HDU 4498 Function Curve (分段, simpson)

    转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 最近太逗了...感觉成都要打铁了...只能给队友端 ...

  7. java.el.PropertyNotFoundException解决方法

    今天在开发中遇到了java.el.PropertyNotFoundException异常,检查JSP页面.Action.Bean.都没有发现错误 在网上搜了一下可能是我的bean不是一个标准的bean ...

  8. (转)深入浅出Java三大框架SSH与MVC的设计模式

    原址:http://www.educity.cn/java/1382738.html 现在许许多多的初学者和程序员,都在趋之若鹜地学习Web开发的宝典级框架:Struts2, Spring,Hiber ...

  9. UVALive 6709 - Mosaic 二维线段树

    题目链接 给一个n*n的方格, 每个方格有值. 每次询问, 给出三个数x, y, l, 求出以x, y为中心的边长为l的正方形内的最大值与最小值, 输出(maxx+minn)/2, 并将x, y这个格 ...

  10. 依赖注入(DI)和控制反转(IOC)

    依赖注入(DI)和控制反转(IOC) 0X1 什么是依赖注入 依赖注入(Dependency Injection),是这样一个过程:某客户类只依赖于服务类的一个接口,而不依赖于具体服务类,所以客户类只 ...