3 基于ID变化的RFID安全协议
为了避免Hash锁方法中的人为攻击和恶意跟踪的缺陷,并克服随机数Hash锁方法中计算负载过大的不足,结合以上几种方法的思想,本文提出了一种基于ID变化的RFID安全协议,实现了安全高效的读取访问控制。
3.1 工作原理
在此协议中,后台数据库的记录主要包括3列:H(ID),ID,Pointer,主键为H(ID)。其中ID为电子标签的唯一标识符, H(ID)是对应ID的单向Hash函数的计算值,Pointer是数据记录的关联指针,主要用来保持数据一致性[5]。
3.1.1 标签的锁定
对于每个电子标签,出厂时都有其唯一的ID值,在实际应用中数据库首先建立所有标签在数据库中的初始记录(H(IDi),IDi,Pointeri),标签在未收到激励信号时,处于锁定状态。
3.1.2 标签的解锁
3.2 数据实验分析
设数据库初始化存储了3个标签,ID分别为1、2、3,其初始化如表1所示。
假设阅读器要询问ID为2的标签,首先阅读器问标签发送询问消息和随机数9,标签向阅读器发送数据(H(2),H(2||9)),然后标签计算自身的ID*=S(2) 和H(ID*)=H(S(2));数据库根据H(2)找到记录(H(2),2,0),然后计算H(ID||R)=H(2||9),与收到的H(2||9)相同,证明了标签的合法性;接下来数据库计算ID*=S(2)和H(ID*)=H(S(2)),并将(ID*,H(ID*)发送给阅读器,至此阅读器知道了该标签更新后的ID值ID*,然后阅读器将H(ID*)=H(S(2))发送给标签;由于Pointer2=0,所以数据库中建立一条记录4:(H(S(2),S(2),2),并将记录2改为(H(2),2,4)。标签接收到数据H(S(2))后,比较发现等于之前计算的H(ID*)=H(S(2)),于是将自身的ID值更新为ID*=S(2)。此时数据库记录如表2所示。
下一次再与此标签通信时,数据库根据收到的标签2的H(ID)=H(S(2)),找到第4条记录,该记录的Pointer为2,则第2次更新ID值的记录将会覆盖第2条记录。
当标签被询问过1次之后,数据库始终保持了2条与该标签有关的数据记录,这主要是为了保证数据的一致性。假设在某次通信中阅读器在第5步发送的H(ID*)未成功且被标签收到,则标签2的ID值不会更新,此时数据库的第4条记录是错误的。这样在下次与标签2通信中,查找到的仍是记录2,数据库根据记录2的Pointer值为4,将修改第4条记录,这样就能够保持数据一致性。
3.3 性能分析及方法特点
本协议使用2个单向的Hash函数实现标签ID的自动更新和通信信息加密,能够有效地抵抗各种攻击。
(1)防窃听。标签和标签读写器之间的通信信息都经过了Hash函数H加密。根据Hash函数的性质,隐私侵犯者是无法根据加密后的信息获取加密的信息。
(2)防哄骗。标签的ID在每完成1次通信过程后将使用Hash函数S进行自主更新为ID*,隐私侵犯者无法伪造出H(ID*||R)。
(3)防重传。每次认证前阅读器将产生一个新的随机数R,隐私侵犯者能截获上次的H(ID||R),但无法伪造新一次认证的H(ID||R)。
(4)防追踪。标签中的ID在每次询问后都将更新,并且同一标签在不同认证过程中,阅读器都将产生随机数R。这些都是标签对每次询问的响应结果。
通过上述分析可以看出,基于ID变化的RFID安全协议实现了标签ID的隐藏性、随机性以及访问控制,完全满足RFID系统的安全需求。
本协议的特点主要表现在以下几个方面:
(1)前向安全性。因为标签的ID在每次通信过程后就会执行ID*=S(ID)更新。根据Hash函数的性质,隐私侵犯者即使获取了ID*,也无法获得ID和标签的历史活动记录,从而保证了前向安全性。
(2)实现双向验证。后台数据库通过对H(ID||R)的计算比较,实现了数据库对标签的验证;而标签通过对H(ID*)的计算比较,则实现了对数据库的验证。
(3)数据一致性。根据此协议的后台数据库结构,当标签被询问过1次之后,数据库始终保持了2条与该标签有关的数据记录,这样一来即使标签无法收到阅读器返回的信息,造成标签的ID值不更新,也不会造成数据库与标签的数据同步问题。