分类目录归档:RFID

模拟器件读IC卡号

市面上有些门禁一体机价格很低,原因是电路没有使用专用的IC读卡芯片,而是用模拟器件实现读IC卡号。最近做了一个这样的方案,这里分享下里面的难点。

硬件部分不做解释,主要解释下软件发送数据和接收数据的格式。

IC卡属入A类卡。卡和读卡器通讯格式如下:

clip_image002

读卡器发送数据的编码格式如下:

clip_image004

1、首先要发送WAKE-UP帧

7个数据位发送,LSB首先发送。(标准REQA的数据内容是‘26’,WAKE-UP请求的数据内容是‘52’)

通信结束

clip_image005

不加奇偶校验位。

图表 7‑2:REQA帧

单片机发送数据的波形如下:

clip_image007

1位的时间是128/13.56M=9.4us

使用RF工作场的ASK100%调制原理来产生一个如图6-2所示的“暂停(pause)”状态来进行PCD和PICC间的通信。“暂停(pause)”的时间大概2-3us,如上图所示。

根据6.4.1.3协议规定,发送的数据为

ZZXYZXYXY

第一个Z为通讯开始位,最后1位Y为通讯结束位。中间7位为0100101,即0X52命令码。

继续阅读

分贝(dB)

分贝(dB)

分贝的定义是以10为底的两个功率比对数运算值

dB = 10logP2/P1

dBm

由于实际性和方便性这些简单原因,功率通常用dBm表示,其与dB相比是“dB毫瓦”,在这种情况下,其参考功率P1为0 dBm,即1mw,在普通的RFID设备中很少用到1W。

dB = 10logPinmw/1mw

1mw = 0 dBm

100mw = 20 dBm

1000mw = 30 dBm

4000mw = 36 dbm

dBi

为了强调对全向天线的重视,在声明其增益时用dBi来表示,其中“i”代表全向性。

dBd

为了强调对λ/2偶极子天线的重视,在声明其增益时,使用dBd来表示,其中“d”代表偶极子。

UHF基础知识

读卡器根据频段分类:

135kHz以下:读卡距离短,一般只有几十厘米,数据传输速度慢。此频段的系统采用电感耦合的方式,符合ISO/IEC18000-2标准。

13.56MHz:此频段在世界范围内通用,读卡距离一般在十厘米左右,常用于电子车票,小区物业管理等。此频段采用电感耦合的工作方式,符合ISO/IEC18000-3标准。

UHF频段(840-960MHz):UHF频段的典型识别距离是4-6米,一般可做到7米,最远可达10米,通信质量较好,主要应用于铁路车辆自动识别,集装箱识别和高速公路车辆识别和收费领域。此频段的系统采用电磁反向散射耦合的工作方式,符合ISO/IEC18000-6标准。

2.45GHz:此频段的最佳传输距离是100米,但该频段系统穿透性差,适合于电子收费系统和实时定位系统等领域。此频段的系统也采用电磁反向散射耦合的工作方式,符合ISO/IEC18000-4标准。

RFID技术标准体系

ISO(国际标准化组织):

ISO14443,ISO15693,ISO14536,ISO18000

EPC Global(电子产品码全球协会):

UHF Class0 Gen1,UHF Class1 Gen1,UF Class1 Gen1,UHF Class1 Gen2

ISO18000-6C协议

ISO/IEC18000-6C的全称是“信息技术-基于单品管理射频识别-第6部分-频率为860-960MHz的空中通信接口参数”,符合ISO/IEC18000-1标准规定的体系框架。2006年7月EPC Global宣布其UHF Gen2空中接口协议经ISO核准并入ISO/IEC18000-6标准,成为ISO/IEC18000-6中的C型接口协议。

国内UHF可使用的频段:840-845MHz,920-925MHz

CPU卡电子钱包圈存与消费(三)

三、 消费

1、选择3F01目录

Send Data : 00 A4 00 00 02 3F 01

RSP[88]: 6F 54 84 09 A0 00 00 00 03 86 98 07 01 A5 47 9F 08 01 02 9F 0C 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 00

2、取8字节随机数

Send Data :0084000008

RSP[10]: 9B 36 1B 26 CB 9F A8 C8 90 00

3、对随机数进行3DES加密

加密数据:9B 36 1B 26 CB 9F A8 C8

加密密钥:39393939393939393939393939393939(3F01目录外部认证密钥)

处理结果:97 F5 57 D8 ED E9 7F 95

4、外部认证

Send Data :008200000897F557D8EDE97F95

RSP[2]:9000

5、读余额

Send Data :805C000204

RSP[6]: 00 00 12 34 90 00

6、消费初始化

805001020B0000000002000000000001

RSP[17]: 00 00 12 34 00 00 00 00 00 00 01 2A B5 07 51 90 00

电子存折或电子钱包旧余额:00001234

电子存折或电子钱包脱机交易序号:0000

透支限额:000000

密钥版本号:00

算法标识:01

随机数:2A B5 07 51

计算过程密钥

过程密钥由DATA中第一字节即密钥标识符指定的消费密钥对(4字节随机数+2字节电子存折或电子钱包脱机交易序号+终端交易序号的最右两字节)3DES数据加密生成

终端交易序号在消费命令中指定,可以设置位00000000

密钥: 3E013E013E013E013E013E013E013E01
数据:2A B5 07 51 00 00 00 00
加密结果:3A A4 9C 8C D5 B4 45 75

计算消费命令中的MAC1

MAC1由过程密钥对(4字节交易金额+1字节交易类型标识+6字节终端机编号+4字节终端交易日期+3字节终端交易时间)DES数据加密生成

交易金额:00000002

交易类型标识:

05-电子存折消费

06-电子钱包消费

终端机编号:000000000001

交易日期20180807

交易时间163500

clip_image002

得到MAC1 : 677E4922

7、消费

805401000F0000000020180807163500677E4922

RSP[10]: 78 5C 74 07 6B 7F 5B EC 90 00

交易验证码TAC: 78 5C 74 07

MAC2: 6B 7F 5B EC

校验MAC2

MAC2由过程密钥对4字节交易金额DES数据加密生成

clip_image004

加密结果见上图,校验成功。

校验TAC

TAC码由TAC密钥左右8字节异或运算的结果对(4字节交易金额+1字节交易类型标识+6字节终端机编号+4字节终端交易序号+4字节主机交易日期+3字节主机交易时间)DES数据加密生成

内部密钥为:34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34

TacKey.Left(8) = 3434343434343434

TacKey.Right(8) = 3434343434343434

XOR 结果 = 0000000000000000

交易金额:00000002

交易类型:06

终端机编号:000000000001

终端交易序号:00000000

交易日期:20180807

交易时间:163500

clip_image006

加密结果见上图,校验成功。

8、读余额

805C000204

RSP[6]: 00 00 12 34 90 00

RSP[6]: 00 00 12 32 90 00

扣费成功

扣费不需要验证PIN码。

CPU卡电子钱包圈存与消费(二)

二、 圈存命令

1、选择3F01目录

Send Data : 00 A4 00 00 02 3F 01

RSP[88]: 6F 54 84 09 A0 00 00 00 03 86 98 07 01 A5 47 9F 08 01 02 9F 0C 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 00

2、取8字节随机数

Send Data :0084000008

RSP[10]: 9B 36 1B 26 CB 9F A8 C8 90 00

3、对随机数进行3DES加密

加密数据:9B 36 1B 26 CB 9F A8 C8

加密密钥:39393939393939393939393939393939(3F01目录外部认证密钥)

处理结果:97 F5 57 D8 ED E9 7F 95

4、外部认证

Send Data :008200000897F557D8EDE97F95

RSP[2]:9000

5、校验pin码

Send Data : 00 20 00 00 03 12 34 56
Recv Data : 90 00

6、读余额

Send Data : 80 5C 00 02 04

RSP[6]: 00 00 00 00 90 00

7、初始化圈存

Send Data : 80 50 00 02 0B 0000001234000000000001

RSP[18]: 00 00 00 00 00 00 00 01 F9 CA BA 91 6C 39 4D 64 90 00

电子存折或电子钱包旧余额 00000000

电子存折或电子钱包联机交易序号0000 (注意交易序号每次会变化)

密钥版本号:00

算法标识:01

伪随机数:F9 CA BA 91

MAC1: 6C 39 4D 64

算法标识

00-3DES

01-DES

02-255保留

计算过程密钥

过程密钥由DATA中第一字节即密钥标识符指定的圈存密钥对(4字节随机数+2字节电子存折或电子钱包联机交易序号+8000)3DES数据加密生成

密钥: 3F013F013F013F013F013F013F013F01
数据:F9 CA BA 91 00 00 80 00
加密结果:03 01 5B EA 34 7E A2 31

计算MAC1

MAC1由过程密钥对(4字节电子存折或电子钱包旧余额+4字节交易金额+1字节交易类型+6字节终端机编号)DES数据加密生成

交易类型:

旧余额:00000000

交易金额:00001234

交易类型:

01-电子存折圈存

02-电子钱包圈存

终端机编号:000000000001

KEY: 03 01 5B EA 34 7E A2 31

INITDATA: 0000000000000000

DATA: 000000000000123402000000000001

clip_image002

MAC的高4位和卡片返回的MAC1相等,证明命令执行正确

计算圈存命令中的MAC2

MAC2由过程密钥对(4字节交易金额+1字节交易类型标识+6字节终端机编号+4字节主机交易日期+3字节主机交易时间)DES数据加密生成

交易金额:00001234

交易类型:02

终端机编号:000000000001

交易日期:20180805

交易时间:164522

密钥:03 01 5B EA 34 7E A2 31

初始向量: 0000000000000000

数据 : 000012340200000000000120180805164522

取前4个字节:

MAC2 = 7F4F6613

clip_image004

7、圈存

Send Data : 80 52 00 00 0B 201808051645227F4F6613

RSP[6]: F7 C1 CC 20 90 00

返回的交易验证TAC码:

F7 C1 CC 20

验证TAC码

TAC码由TAC密钥左右8字节异或运算的结果对(4字节电子存折或电子钱包新余额+2字节电子存折或电子钱包联机交易序号+4字节交易金额+1字节交易类型标识+6字节终端机编号+4字节主机交易日期+3字节主机交易时间)DES数据加密生成

新余额:00001234

交易序号:0000

交易金额:00001234

交易类型标识:02

终端机编号:000000000001

交易日期:20180805

交易时间:164522

内部密钥为:34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34

TacKey.Left(8) = 3434343434343434

TacKey.Right(8) = 3434343434343434

XOR 结果 = 0000000000000000

密钥: 0000000000000000

初始向量: 0000000000000000

数据: 000012340000000012340200000000000120180805164522

clip_image006

计算结果MAC高4字节与卡片返回的TAC相同,圈存成功

8、读余额

Send Data : 80 5C 00 02 04

RSP[6]: 00 00 12 34 90 00

CPU卡电子钱包圈存与消费(一)

首先了解下电子钱包和电子存折的区别:

1、 电子钱包EP:electronic purse

2、 电子存折ED:electronic deposit

3、 电子钱包一般只支持圈存,消费交易,很少的电子钱包支持圈提。电子存折支持圈存,消费,圈提,修改透支限额等功能。

4、 电子钱包消费时无需提交个人PIN,而电子存折消费时必须提交个人PIN。

电子钱包功能简单(只支持圈存和消费),消费简便(不需提交PIN),因此在小额扩展应用中远远要比电子存折来的方便和快速。

一、 CPU卡发卡建立电子钱包命令 继续阅读

RC531使用链接方式读CPU卡数据

RC531的FIFO有64字节缓冲区,如果需要从CPU卡读的数据大于64字节,那么就需要采用链接方式。比如选择CPU卡的某个目录后,CPU卡会发送该目录的公共信息,共84个字节。这84个字节我们分成2块传输。设置读卡器能收到的1帧的最大长度是48字节。

下面是RATS命令介绍:

选择应答请求(RATS

clip_image002

使用RATS命令和PICC协商通讯的最大帧长度(FSD和FSC)、帧等待时间(FWT)和启动帧保护时间(SFGT)。

RATS命令使用带有CRC_A的标准帧进行传输

格式 开始字节+参数(FSDI和CID)(1个字节) +CRCA16

(1)开始字节 E0

参数高4位 FSDI,它用于编码FSD。FSD定义了PCD能收到的帧的最大长度。 一般为5,64字节

低4位 CID ,它定义编址了的PICC的逻辑号在0到14范围内。值15为RFU。

CID由PCD规定,并且对同一时刻处在ACTIVE状态中的所有PICC,它应是唯一的。

继续阅读

M1卡做电子钱包

M1卡做电子钱包使用时,要将某个块按规定格式初始化为数值块

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

数值

数值

数值

Adr

Adr

Adr

Adr

0字节是数值最低字节。

初始数值块是用写命令把数据写到块,例如第8块初始化为数值块,数值为0,用写块命令写入

0x00 0x00 0x00 0x00 0xff 0xff 0xff 0xff 0x00 0x00 0x00 0x00 0x08 0xf7 0x08 0xf7

然后可以用DECREMENT INCREMENT TRANSFER RESTORE命令对数值块进行操作。

INCREMENT 对存储在数值块中的数值做加法操作,并将结果存到临时数据寄存器

DECREMENT 对存储在数值块中的数值做减法操作,并将结果存到临时数据寄存器

TRANSFER 将临时数据寄存器的内容写入数值块

RESTORE 将数值块内容存入临时数据寄存器

电子钱包增值函数流程

询卡-防冲突-选卡-密码验证-增值-传送-挂起

电子钱包减值函数流程

询卡-防冲突-选卡-密码验证-减值-传送-挂起

RESTORE命令是在一个扇区内数值块进行拷贝时用的,一般钱包数据需要备份在同一扇区的不同块中,则备份和恢复时都要用到RESTORE命令。

数值时一个带符号4字节值,这个值的最低一个字节保存在最低的地址中,所以增加1时,4字节增加的值数组应该是0x01 0x00 0x00 0x00,不是0x00 0x00 0x00 0x01

M1卡使用过程中常见问题及处理建议(转)

M1卡也称感应式IC卡的,只智能IC卡的一种,一般常用的有S50M1卡和S70M1卡,以及国产的兼容S50和S70的复旦F08的M1卡等。

    M1卡在开发及使用过程中总是出现各种各样问题,总结多年在制卡行业的经验,主要引起M1卡操作错误的问题总结起来有以下几种。

一、盲目操作

     造成某些区块误操作被锁死不能再使用。应当仔细参考表3表5的控制权限后,予先得出操作后的结果是否适合使用要求,并且列出操作顺序表单再操作。最好授权程序员对块3的设置作专人操作。

二、丢失密码

再读写时造成密码认证出错而不能访问卡。特别要求在对M1卡进行块3编程操作时,必须及时记录相关卡号的控制值,KeyA,KeyB等,而且应当有专人管理密码档案。

三、 错误设置

       对M1卡的块3控制块了解不透彻,错误的理解造成设置造成错误的设置。依照表2可知,目前M1卡的控制块仅只有8种数据块访问控制权限和8种控制块设置权限,超出这16种权限的其他代码组合,将直接引起错误设置而使卡片报废!

继续阅读

CPU卡调试总结

CPU卡内部自带COS,有严格的密钥管理系统。相比M1来说,要复杂的多。我用的是复旦微电子的FM1208 CPU卡,读卡芯片用的是FM1702.FM1702有并口和SPI接口两种方式。NXP的RC500,RC531只有并口接口。用SPI接口,可以省下单片机很多IO口。

下面是开发过程中我觉得比较重要的地方,总结在下面:

1、 CPU卡的操作步骤:寻卡-防冲突-选卡-ATS,前面三步和M1操作完全一样,属于ISO14443A前面三层的操作,ATS成功后就进入ISO14443A-4协议层了,也就进入了CPU卡的操作层。

2、 PPS是可以不做的,只有RATS的返回值表明其接收能力大于PCD的发送即可。PPS用来设置通信时的波特率,通过RATS命令响应数据07 77 80 A0 02 47 56可以判断该卡仅支持106K波特率。所以PCD也没有通过PPS指令修改通信波特率的必要了。当然PPS指令重新按106K波特率设置一下也是可以的,RATS以及后续的PCD指令都需要加上CRC的。

3、 ISO14443-4只规定到PPS指令,后续的指令都需要由CPU卡内部的软件COS来解释,所以卡片完成SELECT,通过RATS和PPS指令后,必须发COS支持的指令。发COS支持的指令一般都需要加CRC的。

4、 发送取随机数命令00 84 00 00 04,根据块格式规定,除了发送这个指令外,还要发送PCB和CID,即实际发送的字符是0A 01 00 84 00 00 04,0A01这两个字节必须加在每个指令字符串的前面,并且块号不能重复,即如果你连续2次取随机数,需如下发送:0A 01 00 84 00 00 04 ,0B 01 00 84 00 00 04.即第一个字节的最后一位要不断变化。

5、 取随机数命令可取4字节或8字节。若取随机数命令下条指令为外部认证,则外部认证数据用指定的外部认证密钥解密后与该随机数进行比较。外部认证命令要求CPU卡存在用于外部认证的密钥。在满足该密钥的使用条件,且该密钥未被锁死时才能执行此命令。将命令中的数据用指定外部认证密钥解密,然后与先前产生的随机数进行比较,若一致则表示认证通过,置安全状态寄存器为该密钥规定的后续状态值,错误计数器恢复成初始值,若比较不一致则认证失败,可再试错误数减一,且不改变安全状态寄存器的值。

继续阅读

第 1 页,共 2 页12