4284| 5
|
[项目] 【智控万物】模拟刷卡消费——取电开灯 |
本帖最后由 云天 于 2021-1-2 21:36 编辑 【项目背景】 “刷卡”成为我们生活中的一部分,如门禁卡、水卡、电卡、气卡、公交卡、饭卡等等。那这些卡有什么区别?它们的工作原理又是什么?基于要了解以上问题,我制作了一个小项目来模拟刷卡消费、充值的过程。 【背景知识】 近场通信(Near Field Communication,NFC) 又称近距离无线通信,是一种短距离的高频无线通信技术,允许电子设备之间进行非接触式点对点数据传输(在十厘米内)交换数据。这个技术由免接触式射频识别(RFID)演变而来,并向下兼容RFID。 NFC标签、公交卡/门禁卡等被读的对象,通过线圈感应生电产生的电力驱动,所以无需电池,体型和重量都可以做得很小。而即便是工作在读卡器,因为射频工作距离很短,其所需的电量也很低,常开的电量消耗也远比蓝牙要低。硬件组成:NFC硬件部分由CLF(非接前端模块)、射频天线、SE(Secure Element安全区域)三部分构成。使用CLF+天线即可完成常见的公交卡余额读取,而如果把手机/手表模拟成公交卡(空中发卡和充值)就需要SE部分的加入。而我们在外面看到的,则是芯片+线圈的结构(拆开公交卡和闪付银行卡,里面也是这两个基本构成)。线圈一般会安装在背壳或贴着电池放置,一般都是通过手机背部进行NFC的感应。由于近场通讯具有天然的安全性,NFC技术被广泛用于POS机移动支付、公交卡、银行卡、门禁卡、饭卡、水卡等多种场合。 读卡器模式 数据在NFC芯片中,可以简单理解成“刷标签”。本质上就是通过支持NFC的手机或其它电子设备从带有NFC芯片的标签、贴纸、名片等媒介中读写信息。通常NFC标签是不需要外部供电的。当支持NFC的外设向NFC读写数据时,它会发送某种磁场,而这个磁场会自动的向NFC标签供电。 卡片的分类 现在市面上的卡片分类有IC卡、ID卡、M1卡和CPU卡,简单的了解一下这些卡的区别和用途,
Gravity:UART & I2C NFC近场通讯模块采用NXP PN532进口高集成NFC通信芯片,支持市面上常见的各类MIFARE Classic S50/S70系列(即M1卡)和NTAG21x系列等工作频率在13.56Mhz的NFC电子标签或卡片。 【判断卡类型】 需要注意的是我们平时见到的某些门禁卡虽然也是通过感应使用,但不一定是IC卡,现在有相当一部分便宜的门禁使用的是磁卡和ID卡,ID卡使用RFID射频技术,但其频率一般较低,一般为125KHz,如爱特梅尔的T5577卡,不可写入用户数据,其记录内容仅限卡号只可由芯片厂一次性写入,开发商只可读出卡号加以利用,所以只用于身份识别,不能用于消费,其成本相对非接触式IC卡较低。 区分ID卡和IC卡——读卡判断法 读卡判断法是判断卡智能卡类型最准确的方法,这需要可识别多类型卡的设备支持,例如手机NFC或者pn532开发板、ACR122U读卡器以及Proxmark3。使用手机NFC是最为便捷的方法,在支持全功能NFC的手机上下载MIFARE Classic Tools,给予权限后将卡片贴在NFC感应区根据提示读取标签后查看标签信息。下面是两种不同容量的IC卡的显示,如果RF技术这栏显示ISO/IEC 14443,说明就是典型的13.56MHz的非接触式IC卡,这也是生活中使用最多的类型。 绝大多数的高校一卡通都属于M1卡这种类型,M1卡式恩智浦公司(现在已经被飞利浦收购)根据ISO14443-A非接触式智能卡标准设计的一种IC卡,是目前世界上使用量最大的非接触式IC卡,在2013年前它被广泛应用于一些国家和地区的交通系统,如香港的八达通、台湾的悠游卡、伦敦的牡蛎卡和荷兰的OV卡等。2007年12月K.Nohl和H.Plot利用显微镜观察M1卡逻辑电路并对其逆向工程,从而发现其加密算法的设计缺陷。而在2008年3月,荷兰内梅亨大学的三位工程师自制了读卡设备并利用其Crypto-1算法的缺陷成功复制了一张M1卡,所以现在M1卡一般用于对安全需求不是特别高的场景中,如校园和企业一卡通,社区门禁等。 可以看到上图中标签类型为MIFARE Classic的就是M1卡,左边的为S50型号,右边的为S70型号,对应的SAK分别为08和18。 银行卡和身份证虽然都可以感应使用,但其不是M1卡,M1卡是逻辑加密卡,使用私有加密算法Crypto-1,而银行卡和身份证是CPU卡,内置一个微型CPU,可以进行多种加解密运算,有些银行卡和身份证还使用了国密算法,相比Crypto-1更新,尚未爆出安全漏洞,目前很难破解,如图是银行卡的标签信息,可以看到其SAK为28,只要SAK为28的都为CPU卡,有些学校使用了CPU卡这种解决方案。 M1卡的特性和存储结构M1卡即NXP推出的MIFARE Classic卡,内部由一个卷绕天线和特定用途的集成电路模块组成,其中,模块由一个高速(106KB波特率)的RF接口。一个控制单元和一个EEPROM组成。读卡器向M1卡发出一组固定频率的电磁波,卡片内有一个LC串联谐振电路,其频率与读写器发射的频率相同,在电磁波的激励下,LC谐振电路产生共振,从而使谐振电容内有了电荷,在这个电容的另一端,接有一个单向导通的电子泵,将电容内的电荷送到模块存储电容内储存,当所积累的电荷达到2V以上时,此电容可作为电源向模块电路提供工作电压,将卡内数据发射出去或接收读写器的数据。 常见的M1卡多为S50型号的1k卡,EEPROM的存储容量为8k位,分成16个扇区,每个扇区为4块,每块16个字节,以块为存取单位;还有更大容量的S70型号4k卡,EEPROM容量为32k位,分为40个扇区,前32个扇区为小扇区,每个扇区为4块,每块16个字节,后8个扇区为大扇区,每个扇区有16块,每块16个字节。 第0扇区相比其他扇区稍有特殊,块0为绝对地址块,在卡片出厂时被锁死不可更改,前4个字节为整个RFID系统中唯一的UID号,第5个字节为BCC校验位,数值由UID的4个字节异或运算得出,第6字节为卡片的SAK值,第7到8字节时智能卡的ATQA值,剩余的部分时制造商出厂时设定好的信息,不会影响到卡的使用。块2和块3一般为空,不存放用户数据,在大部分RFID系统中读卡器需首先验证0扇区0块数据的正确性,如果验证失败将不会访问其他扇区。 【硬件连接】可参考:[项目]【智控万物】掌控宝制作简易声控灯 【Mind+编程】 模拟“消费”取电,读取第1扇区第1块的第1个字节,显示可“消费”电量值。通过电磁继电器取电开灯,倒计时15秒,并可“消费”电量值减15秒写入NFC卡第1扇区第1块的第1个字节。因1个字节最多可储存255,所以要使用更大的数值,需用更多的字节。 模拟“充值”过程,A键增加“充值”,B键设置标识,主程序开始将读取的卡上的“原数据”与“充值”的和写入卡,完成充值。 三字节使用,数值最大可达255*255*255。 【演示视频】 消费 充值 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed