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

摘要:
访问控制是指可以满足哪些条件来操作卡。验证密码A可操作(键A)“验证密码不可操作(从不)”验证密码A或密码B可操作;C1C2C3=111无论验证哪个密码,都不能执行任何操作。如果相应的数据块写入一些可以看到但不能改变的基本信息,如果用户的数据块指定了验证密码A但忘记了密码A,则如果密码A被验证,则可以执行其他读写操作,并且密码B不用于所有操作。

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

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

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

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

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

image

从表中可以看出,

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

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

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

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

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

image

从表中可以看出,

密码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作为普通存储空间使用。各块控制位存储格式如下:

image

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

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

免责声明:文章转载自《射频识别技术漫谈(14)——S50与S70存取控制【worldsing笔记】》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇VC中使用Matlab Engine出现"无法找到libeng.dll"的问题解决select2在bootstrap的modal中默认不显示的问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

阿里云ubuntu16.04 安装桌面版[转]

转:https://blog.csdn.net/never_give_up_z/article/details/83190285 1.当我们购买了阿里云服务器后,登陆后,进行如下操作,点击云服务器。  2.点击数字,进去我们的控制台  3.我们来修改密码,设置自己想要设置的密码 充值密码:是重置ubuntu中root的密码 修改远程连接密码:是进行远...

生物数据库介绍——NCBI

NCBI(National Center for Biotechnology Information,美国国家生物技术信息中心)除了维护GenBank核酸序列数据库外,还提供数据分析和检索资源。NCBI资源包括Entrez、Entrez编程组件、MyNCBI、PubMed、PudMed Central、PubReader、Gene、the NCBI Tax...

使用Druid数据库连接池,配置ConfigFilter对数据库密码加密

ConfigFilter的作用包括: 从配置文件中读取配置 从远程http文件中读取配置 为数据库密码提供加密功能 1.配置 ConfigFilter 1.1配置文件从本地文件系统中读取   <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"   ini...

PyTorch 之 DataLoader

DataLoader DataLoader 是 PyTorch 中读取数据的一个重要接口,该接口定义在 dataloader.py 文件中,该接口的目的: 将自定义的 Dataset 根据 batch size 的大小、是否 shuffle 等封装成一个 batch size 大小的 Tensor,用于后面的训练。 通过 DataLoader,使得我们在准...

如何在ubuntu下安装xampp

安装前置工作,到这里下载xampp for Linux。下载后,把它放在你的主文件夹中,比如我的是“root@ubuntu:/home/roy”,也就是我的主文件夹。路径不对,执行下面程序时会提示你错误的哦,比如提示“没有那个文件或目录”什么的。大家都是明白人。1、首先主面板下搜索“终端”,或者你可以直接按下Ctrl+Alt+T,启动终端。 2、进入终端...

微信小程序最新获取用户头像昵称的方法

官方提供的最新方法Open-data标签,使用这个标签可以不用用户授权直接获得头像和昵称 微信小程序获取用户信息的两种方法wx.getUserInfo&open-data https://blog.csdn.net/lucky_Zeng/article/details/80066479...