基于Grain-128a算法与相互认证技术的安全RFID系统设计
射频识别技术RFID(Radio Frequency IdenTIficaTIon)是一种非接触的自动识别技术,可应用于商品和证件的防伪、供应链管理、图书管理、航空包裹管理和门禁等多个领域。欧美国家在RFID标准的建立、相关软硬件技术的开发与应用上处于领先地位。相比之下,国内RFID市场尚处于前期宣传预热阶段,相关产业发展还较为落后,许多安全方面的技术依赖于国外厂商。
RFID的低成本与安全性一直以来是一对矛盾,为了使RFID得到更广泛的应用,降低成本是唯一的途径。但成本的降低使得高安全性的措施难以在RFID标签上实现,安全得不到保证同样制约着RFID的推广。此外功耗也是需要严格控制的一方面,尤其对于无电源供给、仅仅依靠阅读器电磁场提供能量的无源标签更是如此。同时,低功耗的要求也限制了RFID标签的运算能力。
因此,要在RFID标签资源受限的环境中设计出安全有效的安全技术解决方案,传统的高强度加密算法已不再适用。本文采用一种新的流密码算法结合相互认证技术为RFID系统中标签与阅读器的通信过程提供安全保障,并在FPGA上实现了密码算法。
1 RFID系统简介
RFID系统由标签(Tag)、阅读器(Reader)和后台服务器(Back-End Server)三部分构成。标签由耦合元件及芯片组成,用于存放识别信息,通常根据是否有自带电源分为有源标签和无源标签。阅读器通过无线信道读取标签中的信息,有的阅读器还可以往标签中写入数据。后台服务器保存了标签和阅读器的所有信息,通过与阅读器交互实现对整个RFID系统的管理。
工作时,无源标签进入阅读器产生的磁场时凭借感应电流所获得的能量发送出存储在芯片中的产品信息;而有源标签则是主动发送某一频率的电磁波。阅读器接收到信号并解码后,将数据送到后台服务器进行相关处理。
2 RFID系统的安全方案
RFID利用开放的无线电环境通信,因此容易受到攻击。通常攻击的方式分为被动攻击和主动攻击。其中截获信息的攻击称为被动攻击,例如试图非法获取标签中重要数据信息等,对应被动攻击的主要技术手段是加密。更改、伪造信息和拒绝用户使用资源的攻击手段称为主动攻击,对应主动攻击的重要技术是认证[1]。
RFID安全问题的特殊性还在于标签受限的计算能力,典型标签的电流只有15 mA,门阵列只有7 500~15 000个,其中可用于安全和隐私保护的门电路数量限制在5 000以内,这使得许多优秀的密码算法无法在标签上实现。因此寻找一种适合于RFID系统使用的密码算法是本文讨论的重点之一。
2.1 相互认证技术
认证技术用于解决阅读器与标签之间的互相认证问题。即标签应确认阅读器的身份,防止存储数据未经许可被读出或重写;而阅读器也要确认应答器的身份,以防止读入伪造数据。相互认证过程如图1所示,具体步骤如下:
(1) 阅读器发送查询口令给标签,标签产生一个随机数RB1传回给阅读器作为回应。
(2)阅读器产生一个随机数RA,使用共享的密钥K和共同的加密算法EK对RA及RB1加密,即算出数据块1=EK(RA,RB1),并将数据块1发送给标签。
(3) 标签将数据块1解密,把获得的随机数RB1′与RB1作比较,如果一致,则标签可以确认通信双方的密钥是一致的,即标签完成了对阅读器的认证。
(4) 标签另行产生一个随机数RB2,并发送另一个加密数据块2给阅读器,数据块2=EK(RB2,RA)。
(5) 阅读器将数据块2解密后,检查原先发送RA的与接收到的RA′是否一致,若一致则阅读器证明了双方共有的密钥是一致的,即完成了阅读器对标签的认证。
综上所述,相互认证技术有如下安全特性:
(1) 阅读器与标签之间的通信数据经过加密,在攻击者不知道密钥和密码算法的前提下,即使截获密文,也无法解密获取明文内容。
(2) 同时加密两个随机数,避免已知明文攻击。
(3) 阅读器与标签之间通信的数据是随机变化的,攻击者无法根据历史数据跟踪用户位置,有效地保护了用户的位置隐私。
(4) 由于每次通信都有随机数参与,攻击者无法预料到下一次通信的内容,因此无法通过截获到的数据进行重放攻击。
2.2 Grain-128a
2004年,欧洲启动eSTREAM计划,目的是寻找能够广泛使用的流密码算法。候选的算法分为软件组和硬件组,软件组的算法要求运行速度优于AES(Advanced EncrypTIon Standard)算法,硬件组的算法要求在有限的硬件资源环境(例如RFID)下至少有一方面明显超越AES算法[2]。Grain-128a的前身Grain v1是硬件组最终获选的4个算法之一。Grain v1支持长度为80的密钥,但考虑到在现代计算机的运算能力下,这一密钥长度的算法不能有效地抵抗穷举攻击,故将密钥长度增加到128,并将改进后的算法命名为Grain-128[3]。Grain-128a是在Grain-128的基础上发展而来的。与Grain-128相比,Grain-128a能够抵抗自发表以来各种针对Grain-128的攻击。值得一提的是,除了最近Itai Dinur和Adi Shamir提出的Dynamic Cube攻击[4],其他攻击都没能对Grain-128造成有效威胁。此外,Grain-128a能够支持认证机制。
2.2.1 Grain-128a的性能分析
同Grain v1及Grain-128一样,Grain-128a设计面向资源受限的硬件环境,即要求非常低的资源消耗和功率消耗。参考文献[4]从eSTREAM第二阶段的候选算法中选出8个适于硬件实现的算法(其中含有最终获选的4个算法)以及AES算法从功耗、吞吐量、速度等方面进行对比分析,分析结果证实了Grain系列算法各方面的优异性能。得益于Grain在功耗、面积上的突出表现,推荐在低端的RFID系统上应用Grain v1及Grain-128。Grain-128a在Grain-128的基础上仅作了少量更改,保留了Grain-128的优势并且增强了安全性能,因此本文选择Grain-128a作为认证过程中的密码算法。
3 算法测试与仿真
Grain-128a在Xilinx公司的ISE开发平台上使用VHDL编程实现,器件选用Spartan3E系列的FPGA芯片xc3s500e-4-pq208,使用ISE自带的综合器进行综合。算法大约需要3 000个门阵列,时钟频率能够达到176 MHz,每个时钟周期输出2位数据,输出N位的密钥流(包含密钥输入及初始化过程)仅需要(65+128+N/2)个时钟周期,如果在125 kHz的RFID系统上使用, 加密或解密1 024位的数据大约需要5 ms,能够满足实际需求。
本文对算法进行测试,仿真结果如图5、图6所示。
将仿真结果与测试向量集里的密钥流进行对比,验证了算法的正确性。
作为eSTREAM的获选密码算法,Grain-128a在安全性上无疑处于高水平,而对硬件资源的低需求则使它即使是在射频标签上也能有上佳表现。本文针对RFID系统的特点,提出一种结合Grain-128a密码算法与相互认证技术的安全方案,设计了一种安全、低成本与低功耗的RFID系统。