3.1.1 RFID标签的破解及复制
1.RFID技术介绍
RFID(射频识别)又称无线射频识别,是一种能够通过射频信号识别目标并进行数据交换的非接触式自动识别技术。RFID技术凭借数据容量大、读写速度快、稳定性高、使用寿命长等优点得到了广泛的应用。特别是在军事领域,RFID技术在装备管理、后勤保障及作战演习等方面已经展现出特有的优势,受到了众多国家的重视。
(1)RFID技术起源
RFID技术最早起源于雷达技术的发展及应用。“二战”期间,英军根据雷达的工作原理开发了敌我飞机识别系统,避免误伤己方飞机,对当时的侦察工作起到了举足轻重的作用。1948年,Harry Stockman发表了题为“Communication by Means of Reflected Power”的文章,为RFID技术的发展奠定了理论基础。此后,RFID技术得到了不断的发展。
20世纪50年代,RFID技术的研究处于探索阶段,这一阶段基本上以理论研究为主,发表了大量的文章。60年代,是RFID技术的初步发展阶段,伴随着电子物品防盗系统的产生,RFID技术开始了在应用方面的尝试。70年代,RFID技术成为人们研究的热门话题,并在这段时期得到了极大的发展,出现了一系列的研究成果,如车辆识别及自动化工厂等。80年代,RFID技术更加成熟,很快进入商业应用阶段,美国、日本以及欧洲多个国家在不同的领域开始使用RFID系统。90年代,RFID技术得到了迅猛的发展。1991年,美国俄克拉何马州出现了世界上第一个高速公路电子收费系统,该系统很快得到了大规模的应用,这在RFID技术的发展史上具有划时代的意义。
进入21世纪后,RFID技术的发展达到高潮,米粒大小的芯片的产生、纸质芯片封装技术的实现以及天线技术的发展都为具有新功能的RFID系统的出现起到了极大的推动作用,RFID技术拥有了更为广阔的应用前景。
(2)RFID系统组成
典型的RFID系统由电子标签、读写器和后台数据管理系统等组成,如图3.1所示。
图3.1 RFID系统组成
1)电子标签
电子标签也被称为射频标签或应答器,由耦合元件、芯片以及天线组成,每个标签具有独一无二的电子编码,一般附着在被标识的物体表面,是RFID的数据信息载体,通常用来保存固定格式的数据。按照数据调制方式的不同,电子标签一般可分为被动式、半主动式和主动式3类。表3.1对3种形式的标签做了比较。特别要注意的是,半主动式标签也有内部电源,但它只为内部计算提供能量,与读写器间实现数据通信所需的能量仍然要从读写器所发射的电磁波中获取。
表3.1 3种形式的电子标签比较
2)读写器
读写器又叫阅读器或射频卡,主要由射频模块(包括接收单元和发送单元)、控制模块及读写天线构成,一般分为固定式和手持式。读写器通过电感耦合或电磁反向散射耦合与电子标签进行数据通信。另外,读写器能够向上位机提供一些必要的信息,实现与数据管理系统的数据交换。
3)后台数据管理系统
一个完整的后台数据管理系统主要由中间件、信息处理系统和数据库组成,主要用来存储、处理RFID系统的相关信息。作为后台数据管理系统的一个重要组成部分,中间件是一个独立的系统软件或服务程序,能够对数据进行过滤和处理,还具有对读写器进行协调控制和降低射频辐射等功能。
(3)RFID系统基本工作原理与工作流程
RFID系统的基本工作原理是:由读写器通过发射天线发送特定频率的射频信号,当电子标签进入有效工作区域时产生感应电流,从而获得能量被激活,使得电子标签将自身编码信息通过内置天线发射出去;读写器的接收天线接收到从标签发送来的调制信号,经天线的调制器传送到读写器信号处理模块,经解调和解码后将有效信息传送到后台主机系统进行相关处理;主机系统根据逻辑运算识别该标签的身份,针对不同的设定做出相应的处理和控制,最终发出信号,控制读写器完成不同的读写操作。
从电子标签到读写器之间的通信和能量感应方式来看,RFID系统一般可以分为电感耦合(磁耦合)系统和电磁反向散射耦合(电磁场耦合)系统。电感耦合系统是通过空间高频交变磁场实现耦合,依据的是电磁感应定律;电磁反向散射耦合,即雷达原理模型,发射出去的电磁波碰到目标后反射,同时携带回目标信息,依据的是电磁波的空间传播规律。电感耦合方式一般适合中、低频率工作的近距离RFID系统;电磁反向散射耦合方式一般适合高频、微波工作频率的远距离RFID系统。
RFID系统有基本的工作流程,由工作流程可以看出RFID系统利用无线射频方式在读写器和电子标签之间进行非接触双向数据传输,以达到目标识别、数据传输和控制的目的。RFID系统的一般工作流程如下。
①读写器通过发射天线发送一定频率的射频信号。
②当电子标签进入读写器天线的工作区时,电子标签天线产生足够的感应电流,电子标签获得能量被激活。
③电子标签将自身信息通过内置天线发送出去。
④读写器天线接收到从电子标签发送来的载波信号。
⑤读写器天线将载波信号传送到读写器。
⑥读写器对接收信号进行解调和解码,然后送到系统高层进行相关处理。
⑦系统高层根据逻辑运算判断该电子标签的合法性。
⑧系统高层针对不同的设定做出相应处理,发出指令信号,控制执行机构动作。
(4)RFID核心技术
目前RFID的难点主要集中在超高频RFID,其核心技术主要包括:防碰撞算法、低功耗芯片设计、UHF电子标签天线设计、基于时隙ALOHA的防冲突算法等方面。
1)防碰撞算法
当读写器向工作场区内的一组标签发出查询指令时,两个或两个以上的标签同时响应读写器的查询,标签传输信息时选取的信道是一样的且没有MAC的控制机制,返回信息产生相互干扰,从而导致读写器不能正确识别其中任何一个标签的信息,降低了读写器的识别效率和识读速度,上述问题被称为多标签碰撞问题。随着标签数量的增加,发生多标签碰撞的概率也会增加,读写器的识别效率将进一步下降。RFID系统必须采用一定的策略来避免碰撞现象的发生,将射频区域内的多个标签分别识别出来。多标签防碰撞(Anticollision)技术可以分为空分多路(SDMA)、时分多路(TDMA)、码分多路(CDMA)、频分多路(FDMA)4种。SDMA是在分离的空间范围内进行多个目标识别的技术,采用这种技术的系统一般是在一些特殊的应用场合,例如大型的马拉松活动。FDMA是将若干个使用不同载波频率的传输通路同时供通信用户使用,但读写器的成本高,因为每个接收通路必须有自己的单独接收器以供使用;电子标签的差异则更为麻烦。CDMA技术基于扩频技术,用户具有特征码,缺点是频带利用率低,信道容量较小,地址码选择较难,接收时地址码的捕获时间较长。因此对于射频识别系统来说TDMA是最常见的技术。
2)低功耗芯片设计
超高频射频识别(UHFRFID)标签芯片一般采用无源供电方式,对于无源标签而言,工作距离是一个非常重要的指标,这个工作距离与芯片灵敏度有关,而灵敏度又要求功耗要低,因此低功耗设计成为RFID芯片研发中的关键。芯片中的功耗主要来自射频前端电路、存储器、数字逻辑3部分,而在数字逻辑中时钟树上的功耗会占据不小的部分。目前广泛采用的ISO18000-6B协议可以满足低成本、低功耗要求的高频RFID标签芯片数字基带处理器的设计。根据ISO18000-6B协议,从阅读器到应答器的数据传送通过对载波的幅度调制(ASK)完成,数据编码为曼彻斯特码,速率为40 kbit/s;标签返回给阅读器的数据通过FM0编码调制后发送至模拟前端,经由天线发送至阅读器。
3)标签天线设计
标签天线是RFID电子标签的应答器天线,是一种通信感应天线,根据材质与制造工艺的不同,分为金属蚀刻天线、印刷天线、镀铜天线等几种。目前常用的技术如下。①标签基板背面涂金属层。基板背面涂金属层可以形成反射板,从而使得反射的电磁场与标签天线的场在垂直标签的远场实现叠加,达到读出距离进一步提高的效果。只有某些类型的标签天线才可以这样处理,例如微带天线、缝隙天线、倒F天线等。②将标签天线集成在包装材料上。金属箔包装材料有利于标签天线集成。导电墨水可以将天线以零成本印刷到产品包装上,比传统金属天线成本低,节省空间,并利于环保。③采用AMC结构作为标签天线接地板。AMC(Artificial Magnetic Conductor,人工磁导体结构)可在某些频段显示高阻抗特性,其常见结构单元由一个方形贴片和连接贴片与接地板的过孔或导线组成。此结构应用于缝耦合微带天线时,可使天线背瓣降低,增益上升。
4)基于时隙ALOHA的防冲突算法
时隙ALOHA算法(Framed Slotted ALOHA)简称FSA,是一种随机时分多址方式的用户信息通信收发算法,它将信道用信息帧表示,把信息帧分成许多时隙(slot),每个标签随机选一个时隙来发送自己的识别码信息。在整个信息帧的时间内,每个标签只响应一次,如图3.2所示。
图3.2 信息帧标签响应示意图
图3.2中的每个圆圈代表一个标签发出的电子编码信息,这样阅读器在整个信息帧接收过程中遇到的标签回复有3种情况,即成功、空闲以及冲突,它们可能分别代表在某个时隙内有一个标签、没有标签或有两个以上标签的应答。在实际情况中,由于各标签与阅读器的距离不同,近距离标签发送的信息可能覆盖了远距离标签发出的信息,即使是时隙冲突,阅读器也可能正确识别近距离标签的信息。同样,由于其他环境噪声的影响,即使在一个时隙内只有一个标签应答,阅读器也可能无法阅读成功。在不考虑这两种不理想条件(即捕获效应和环境噪声)的情况下,若整个信息帧的时隙数设定为F,则阅读N个标签时每个信息帧内成功(a1)、空闲(a0)和冲突(ak)的时隙数分别为:
ak=F-a0-a1
因此,RFID系统的阅读吞吐率(也称识别效率,即阅读器在一个信息帧长的时间内能成功识别标签数所占的比例)可以表示为:
通过Matlab的仿真实验,可发现当标签个数接近信息帧长(即标签个数接近时隙数)时,系统的吞吐率比较高,这与式(2)通过微分计算获得的结果相一致。在RFID系统应用时,阅读器读取的RFID标签数往往是未知的。根据上述RFID多标签阅读的防碰撞算法的分析结果,要实现具有解决RFID防冲突算法功能的系统方案,系统需要先进行现场的标签数预测。通常可以通过以下几种预测方法来实现。
①最小预测(lowbound)。若阅读中有冲突出现,那么至少有两个以上的标签存在,可以预测发生冲突的标签个数至少为2×ak。
②Schout预测。若在每个信息帧中每个标签选择的时隙符合λ=1的泊松分布,那么信息帧中各冲突时隙平均响应的标签个数约为2.39,这样可以预测未识别的标签数为2.39×ak。
③Vogt预测。它通过比较实际成功、空闲、冲突时隙数与理论成功、空闲、冲突时隙数来得出误差最小的结果,以此来预测未知标签数,即
其中,c1、c0、ck为实际测得的成功、空闲、冲突时隙数值。在标签数N的取值范围[c1+2×cK,…,2×(c1+2×cK)]内找到最小的ε值,所对应的N值就是预测的标签数。
通过Matlab的仿真实验,结果表明,与FSA(信息帧长度固定为256)相比,基于标签数预测的系统阅读的吞吐率具有明显的改善。但是总的来说,当现场有大量标签(特别是标签数大于500)时,采用式(2),由预测标签数来设置最佳信息帧长度的实现方案就显得不合适了。因此,有人提出了采用分组应答响应的方法来实现,即当标签数超过354个时,将标签进行分组,第1组的先应答,识别完第1组之后再识别第2组,以此类推。因此,在大规模的标签识别中,使用分组算法可以有效地提高系统的识别效率。
(5)RFID系统分类
RFID系统的分类方式很多,按能源供给方式可分为有源系统、无源系统和半有源系统;按技术实现手段可分为广播发射式系统、倍频式系统和反射调制式系统;按工作方式可分为全双工系统、半双工系统和时序系统;按作用距离可分为密耦合系统、遥耦合系统和远距离系统;按工作频率可分为低频系统、高频系统、超高频系统和微波系统。
工作频率一般指的是电子标签与读写器之间进行数据交换时所使用的射频信号频率。作为RFID系统的一个重要参数指标,工作频率的频段选取直接影响系统的经济成本、通信距离、应用场合以及使用寿命等。表3.2给出了几种常见工作频段RFID系统的特性参数及应用。
表3.2 常见工作频段RFID系统的特性参数及应用
(6)RFID系统存在的问题与发展趋势
RFID技术在推广应用中遇到了不少挑战,主要体现在标准化、成本、技术瓶颈与应用模式等方面。
1)标准化
标准化是推动产品广泛地被市场接受的必要措施,但RFID读写器与标签的技术仍未统一,无法一体化使用。不同制造商所开发的标签通信协议,使用频率不同。RFID标签的芯片性能、存储器存储协议与无线设计约定等,也没有统一标准。
2)成本
RFID系统无论是电子标签、读写器还是天线,价格成本都很高。在新的制造工艺普及之前,高成本的RFID标签只能用于本身价值较高的产品中。
3)技术瓶颈
RFID技术尚未完全成熟,特别是应用于某些特殊的产品时,无法使用大量的RFID标签;而且RFID标签的可靠性也是一个问题,RFID标签与RFID读卡器在识别时具有方向性,信号容易被阻断。
4)应用模式
若RFID技术发展成熟,则企业大规模采用RFID系统之后,将会造成大量劳工面临失业的危机;RFID大规模应用所产生的隐私泄露也是目前需要解决的问题。
2.RFID标签的破解及复制
(1)ID卡破解
1)基本原理
ID卡属于大家常说的低频卡,一般情况下作为门禁卡或者大部分大学里使用的饭卡,通常为厚一些的卡,是只读的,卡里面只存有一串唯一的数字序号ID(可以把这串数字理解为身份证号)。刷卡的时候,读卡器只能读到ID号,然后将ID号跟后台数据库进行匹配。如果是门禁卡,那么数据库里面就存在这样的ID号,匹配上门就开了,匹配不上门就开不了。
如果是学校的饭卡,刷卡的时候,实际上操作的是与ID号相关的数据库中的数据。ID卡本身不存在任何其他数据,所以,学校使用的ID卡(饭卡)只能复制卡,刷别人的钱(数据库中的钱)。
2)破解方法
要破解ID卡,通过ID卡读卡器读取卡内的ID号,然后把这串ID号写入ID卡空卡中即可,相关工具特别多,实际上仅需要一个ID卡读卡器。该破解方法的优点是方便,缺点是我们看不到整个过程,对安全研究来说作用不大。
(2)射频IC卡破解
射频IC卡种类繁多,标准也繁多(这些不在介绍范围内)。下面不特别说明就是指的M1 S50卡(简称S50),这也是目前广泛使用的,并且大家做测试时最常见的IC卡。
射频IC卡常见的破解方法如下。
①跟ID卡一样,复制IC卡的用户身份证明(UID,User Identification)号码并将其写入新的空白IC卡。
②破解IC卡的密码,从而改写IC卡中的数据。
③破解IC卡的密码之后,把所有数据导出,再将其写入一个新的空白IC卡,也就是IC卡全卡复制(NFC手机及PM3等设备也支持把自己模拟成一个IC卡,实际上也属于卡复制一类)。
IC卡(S50)分为16个扇区(0~15),每个扇区又分为64个区域块(0~63),每个扇区都有独立的一对密码(key A和key B)负责控制对每个扇区数据的读写操作,key A和keyB分布在每个扇区的第4块中。第0扇区的第1个数据块存储IC卡的UID号,其他扇区可以存储其他的数据,如钱等。
一般IC卡的UID是唯一的也是写死的(不能更改),其他块的数据是可以更改的,所以也就有了普通IC空白卡以及UID可写空白卡(可以认为是不遵守规范的商家制作的)。
现在我们开始想象破解的几种环境。
①读卡器把IC卡当成ID卡,只识别UID的正确性即可,不管IC卡内其他数据。这时候,只需要把卡的UID读出来,并使用一个UID可写的空白卡,把UID写入即可。
②读卡器首先识别UID是否正确,然后再识别其他扇区的数据,通过key A或者keyB对数据进行读写操作。这样,首先UID得正确,其次,key A或者keyB得正确(后面为了方便描述,我们就不说key A或者key B,直接说IC卡密码)。
这样,如果知道了IC卡密码,我们不需要复制新卡,就可以更改IC卡中的数据,比如更改饭卡中的钱数。如果我们想复制一张一模一样的卡,那么就把原卡的所有扇区的数据全面导出来,再写入新的UID可写卡中即可。
③读卡器不识别UID,只管对扇区的密码进行验证,如验证成功则允许对卡内数据操作等,如某快捷酒店的门卡,就不管UID,只要扇区密码正确即可。我们可以通过扇区密码更改门卡中的数据,如房号、住宿的时间等,也可以通过一个普通的IC卡(UID不能更改)来复制一张门卡(跟原卡UID不同),也可以通过一个UID可写的卡来复制一张跟原卡完全相同的卡(跟原卡UID也相同)。
综上,破解IC卡的几种环境为:改写UID、通过扇区密码改写扇区数据和通过把原卡数据导出并重新导入到新的IC卡中来复制一张卡。
IC卡的UID是不通过密码控制的,可以直接通过读卡器获得,后面讲IC卡的通信过程时会说明。那么我们做IC卡破解时,主要的问题就是破解IC卡每个扇区的控制密码,如果密码破解了,后续就可以随意操作。
破解IC卡密码的几种方法如下。
1)使用默认的密码攻击
很多IC卡都没有更改默认密码,导致可以直接使用默认密码来尝试接入IC卡。常见的默认密码有:000000000000,a0a1a2a3a4a5,b0b1b2b3b4b5,4d3a99c351dd,1a982c7e459a,d3f7d3f7d3f7,714c5c886e97,A0zzzzzzzzzz。
2)nested authentication攻击(大家常说的验证漏洞攻击)
前面讲到每个扇区都有独立的密码,一些情况下,比如某饭卡,扇区3中存储着钱等数据,扇区3更改了默认密码,扇区5中也存储着一些数据,扇区5也更改了默认密码,其他扇区没有更改默认密码。我们要操作扇区3跟扇区5,不知道密码怎么办?使用nested authentication攻击。这种攻击方式是在已知16个扇区中任意一个扇区的密码之后采用的攻击方式,可以以此获得其他扇区的密码。前面提到,16个扇区的密码都是独立的,那么怎么能通过某个扇区的密码获得其他扇区的密码呢?如果可以,那说明扇区就不是独立的,有的读者会说,那是由于IC卡的加密算法被破解了。这样的观点只能说明读者还没有理解。具体算法不讲,只说明一下,算法只是使得猜解密码的时间变短,使得猜解密码成为可能。
这是什么原理呢?首先,这是一个对等加密算法,也就是读卡器和tag(标签)中都保存着同样的密码,也都是用同样的算法加密。然后看RFID的验证过程:开始交互的时候,tag就已经把UID给读卡器“说”了,主要牵扯到防冲撞机制,之后才开始验证。
第一次验证时,读卡器首先验证0扇区的密码。tag给读卡器发送一个随机数nt(明文),然后读卡器通过和密码相关的加密算法加密nt,同时读卡器产生一个随机数nr(密文),发送给tag,tag用自己的密码解密之后,如果解密出来的nt就是自己之前发送的nt,则认为正确,然后通过自己的密码相关的算法加密读卡器的随机数nr(密文)并发送给读卡器,读卡器解密之后,如果跟读卡器之前发送的随机数nr相同,则认为验证通过,之后所有的数据都通过此算法进行加密传输。
要记住这里面只有第一次的nt是明文,之后都是密文,而且nt是tag发送的,也就是验证过程中,tag是主动、首先发送随机数的。破解的时候,读卡器中肯定没有密码(如果有就不用破解了),那么tag发送一个nt给读卡器之后,读卡器用错误的密码加密发送给tag,tag肯定解密错误,然后验证中断。这个过程中,我们只看到tag发送的明文随机数,tag根本没有把自己保存的密码相关的信息发送出来,那怎么破解呢?
所以,要已知一个扇区的密码。第一次验证的时候,使用这个扇区验证成功之后,后面所有的数据交互都是密文,读其他扇区数据的时候也需要验证,也是tag首先发送随机数nt,这个nt是个加密的数据。我们前面说过每个扇区的密码是独立的,那么加密实际上就是通过tag这个扇区密码相关的算法来加密的nt,nt中就包含了这个扇区的密码信息,所以我们才能够通过算法漏洞继续分析出扇区的密码是什么。
这也是为什么nested authentication攻击必须要知道某一个扇区的密码,然后才能破解其他扇区的密码。
3)darkside攻击
若某个IC卡的所有扇区都不存在默认密码怎么办?暴力破解根本不可能。这时候就是算法的问题导致的darkside攻击。我们考虑首先要把tag中的key相关的数据“骗”出来,也就是让tag发送出来一段加密的数据,通过这段加密的数据把key破解出来。如果tag不发送加密的数据给我们,那就没法破解了。
前面提到,第一次验证的时候tag会发送明文的随机数给读卡器,然后读卡器发送加密数据给tag进行验证,tag验证失败就停止,不会发送任何数据了,这样看,根本就没有办法破解密码。
实际上经过研究人员大量的测试之后,发现算法还存在这样一个漏洞:当读卡器发送的加密数据中的某8位全部正确的时候,tag会给读卡器发送一个加密的4位的数据回复NACK,其他任何情况下tag都会直接停止交互。那么这个4位的加密的NACK就相当于把tag中的key带出来了,再结合算法的漏洞破解出key,如果一个扇区的key被破解出来,就可以再使用nested authentication攻击破解其他扇区的密码。
4)正常验证过程获得key
1)~3)的破解方法都是通过一般的读卡器把tag中的密码破解出来,不管密码破解算法的漏洞如何,实际上都是要让tag发送出来一段密文。
如果读卡器本身就保存有密码,卡也是授权的卡,也就是说卡和读卡器都是正确授权的,那么它们之间的加密数据交换过程就可以直接使用PM3等监控下来,然后通过“XOR效验与算Key”程序算出密码来。
这种情况下一般是内部人员作案,或者把读卡器中的SAM(保存读卡器中密码的一个模块)偷出来,通过另外的读卡器插入SAM,用正常授权的卡刷卡,然后监控交换数据,从而算出密码。
5)其他破解工具
上文提到的都是卡和读卡器之间的数据交换,数据是加密的,但是对于读卡器跟电脑相连的情况,由于电脑中肯定没有加密芯片,所以肯定是明文传输。在某种情况下,比如通过电脑的控制程序将密码(假设是二进制等不能直接观看的密码文件)导入读卡器的时候,我们通过监控USB口(串口)数据通信,是不是就能明文看到密码呢?
常用的破解工具说明如下。
①mfoc:mfocgui以及目前网络上充斥的各类破解工具都基于nested authentication攻击原理,这些工具内置了一些默认密码,使用默认密码对每个扇区进行测试,如果某个扇区存在默认密码,就用nested authentication攻击获得其他扇区的密码。
②Mfcuk:Mfcuk等为darkside攻击工具,用于一个扇区密码都不知道的情况,由于破解算法本身就不是100%成功的,所以如果长时间破解不出来,就停止,重新换个nt,重新选个时间破解。是否能破解出来跟运气也有些关系。
③Libnfc工具:目前用得比较多的是RadioWar的nfcgui,RadioWar网站上也有相关说明,该工具就是给nfc-list、nfc-mfsetuid、nfc-mfclassic这3个工具写的一个GUI界面,可以使用命令行模式,或者自己写个GUI界面来调用这3个程序。这些都是操作卡或者读卡数据的工具,国内不同的IC卡读卡器都附带一些读写卡程序。