本章为系列指南第一章,主要介绍NFC及周边相关的基础知识。我写文章习惯以一个零基础入门者的角度来写,并且尽可能使用通俗易懂的语言来讲解。关于这些知识点,如果需要更详细的介绍,请列为看官自行百度谷歌。

NFC
NFC(Near Field Communication,近场通信)是目前快速兴起的一种无线通信技术,包括身份证、公交卡、食堂饭卡、各类商户会员卡在内的大部分日常使用到的卡片都采用了NFC通信技术。NFC的一个重要特点是其【非接触式】,因此那些【接触式】的并拥有极高安全等级的银行卡不属于NFC范畴。

NFC的【非接触式】特性,带来了另一项技术的快速发展,那就是【无线充电】。一般来讲,PICC(射频卡)中是没有电池或其他供电电源的,PCD(读卡器)要与PICC进行通信的前提是将电能无线传递给PICC,驱动PICC中的电路及芯片工作,芯片控制模拟电路产生电磁波,将数据调制解调成1和0的数字信号,从而进行通信。说起【无线充电】,简单来讲就是中学课本里的电磁感应,通过线圈,让变化的电场产生磁场,在另一端变化的磁场又产生了电场。

近场通信的卡片有太多的名词和英文缩写,这里做个简单的解释:

ID卡,这种卡最大的特点就是没有复杂的电路和芯片,内部只携带一个出厂后不可改变的身份ID,最多不超过32bit,读卡器只能读到ID,逻辑处理一般在应用层和数据库中进行操作。ID卡成本低,市面上有些低成本的门禁卡,考勤卡会使用ID卡,安全很低。
IC卡,这种卡相对ID卡来说拥有复杂的电路和芯片,因此在光线明亮的地方可以看到卡片内的电路和芯片,其内部携带的数据量也大大增加了,通常都有1K Byte以上的读写空间。所有的NFC卡都是IC卡,内部都有线圈和芯片,以及大容量的存储空间,我们的身份证甚至连个人照片都存在其中。IC卡只是表明卡内部有集成电路和芯片,但并不规定卡片是【接触式】还是【非接触式】。很多银行的【接触式】银行卡,芯片引脚是露在表面的,供ATM进行接触式读写,这种银行卡也属于IC卡。
RFID卡,这种卡属于IC卡的一种,有芯片,但规定了必须使用射频技术进行非接触式通信。RFID卡虽然表明了非接触式通信,但对通信时的载波频率并不做任何要求,低至125KHz,高至960M的RFID卡产品都有。
NFC卡,这是我们关注的重点,NFC相比RFID卡,规范了通信时的载波频率必须为13.56MHz,同时在又在软件层面规范了众多传输协议,比如NFC传输的WIFI用户名密码、名片、网址等等。
Mifare卡,这是NFC卡的一种,市面上最常用,最廉价的NFC卡之一。恩智浦(前身为飞利浦)公司出品,我们后续要讲的PN532芯片,以及其他PN系列芯片均来自这个公司。Mifare卡分为MF0, MF1, MF2, MF3这么几种类型,MF0不带密码控制,使用很少;最常用的是MF1,这种卡带密码控制,分为S50和S70,S50拥有1K存储空间,S70拥有4K存储空间。我们后续的实践使用S50这种卡片。
ISO14443A/B,以及ISO15963
这三个都是射频卡的一种标准,都属于RFID卡的范畴,其中ISO14443A/B属于NFC卡的范畴,而ISO15963不是。

ISO15963标准规定了通信距离长达1m,使用13.56MHz频率载波,通讯速度不超过56Kb/s,不加密。一般ID卡使用ISO15963标准设计。

ISO14443A/B标准规定了通信距离为7-15cm,使用13.56MHz频率载波,通信速度为106Kb/s,支持加密。ISO14443A与ISO14443B的区别主要在于编码方式、防冲撞机制等,这些区别的详细知识应用开发者不需要过多理解,大部分NFC芯片或者模组都是能读写不同类型的卡片的,对于应用开发者来说只需要确切地知道自己产品中使用的卡片类型是哪一种即可。我们后面的实践将采用Mifare S50卡,这种卡属于ISO1443A类型。

Mifare S50卡简介
每张Mifare S50卡拥有1KByte存储空间,片内将1K空间分成了16个扇区,每个扇区64Byte。每个扇区又分成4个数据块,每个数据块16Byte。其中第一扇区第一块数据为厂商出厂数据,内含4Byte全球唯一UUID号,原则上无法修改。

扇区号 块号 数据 块类型
0 0 厂商数据 厂商块
1 用户数据 数据块
2 用户数据 数据块
3 密码A,存取控制,密码B 控制块
… … … …
15 60 用户数据 数据块
61 用户数据 数据块
62 用户数据 数据块
63 密码A,存取控制,密码B 控制块
每个扇区的最后一个数据块称之为控制块,这一数据块的16Byte数据按照6-4-6分组,前6个Byte为密码A,后6个Byte为密码B,中间4Byte为存取控制数据。这一数据块的作用是用来保护前三块数据块的读写权限的。

Mifare S50在出厂时,每一个控制块的密码A和密码B都为FF FF FF FF FF FF,习惯上我们将密码A和密码B设置为相同,将中间4块存取控制块保持FF 07 80 69不变。要想读写某一数据块的内容,必须使用该块所在片区的最后一块,也就是控制块的密码进行验证才可以。Mifare S50通过密码访问授权机制,具有一定的安全性,但随着越来越广泛的使用,市面上也出现了众多破解方式,最常见的就是使用字典进行暴力破解。如果涉及金额或者其他重要数据,开发者是要进行服务器存储和比对的,一旦发现数据异常应该锁卡,对于造成损失的恶意攻击,应当报警处理。

小结
这一章我们从零开始对NFC有了一个总体的认知,对一些卡片类型的英文缩写也有了一个区分,简要理解了ISO14443A协议以及应用该规范的Mifare S50卡片。后续我们的章节将围绕这张卡片的读写来进行讲解,通信模块为PN532,主要操作平台为STM32,但经过讲解读者可以在任意平台实现NFC读写这类卡片。