读取访问控制的方法对读写器通信的全程都进行了加密防护,特别是对验证过程加入了随机数,具有防窃听、防跟踪、防欺骗的能力,并且可安全地更换合法的ReaderlD。然而,它对硬件的要求很高,尤其是标签要实现比较多的逻辑运算并要求有可读写的存储器。对于这种方法,关键是要提高标签芯片的计算和存储能力,以及对验证方法的改进和简化。带有读取访问控制的标签将只对已认证标签进行响应。也就是说,标签在某个读写器未受到自己认证之前,不会把信息泄露出去。
1. Hash-Lock协议.
Hash-Lock协议是由Sarma等人提出的,为了避免信息泄漏和被追踪,它使用metalD来代替真实的标签ID,其协议流程如图1所示。

图1 Hash-Lock协议
Hash-Lock协议的执行过程如下:
(1)读写器向标签发送Query认证请求;
(2)标签将metalD发送给读写器;
(3)读写器将metalD转发给后台数据库;
(4)后台数据库查询自己的数据库,如果找到与metalD匹配的项,则将该项的(key,ID)发送给读写器,其中ID为待认证标签的标识,metalD≡H(key);否则,返回给读写器认证失败信息;
(5)读写器将接收后台数据库的部分信息key发送给标签;
(6)标签验证metalD=H(key)是否成立,如果成立,则将其ID发送给读写器;
(7)读写器比较从标签接收到的D是否与后台数据库发送过来的ID一致,如一致,则认证通过;否则,认证失败。
由上述过程可以看出,Hash-Lock协议中没有ID动态刷新机制,并且metalD也保持不变,D是以明文的形式通过不安全的信道传送的,因此Hash-Lock协议非常容易受到假冒攻击和重传攻击,攻击者也可以很容易地对标签进行追踪。也就是说,Hask-Lock协议没有达到其安全目标。
2. 随机化Hash-Lock协议
随机化Hash-Lock协议由Weis等人提出,它采用了基于随机数的询问—应答机制,其协议流程如图2所示。

图2 随机化Hash-Lock协议
随机化Hash-Lock协议的执行过程如下:
(1)读写器向标签发送Query认证请求;
(2)标签生成一个随机数R,计算H(IDk||R),其中IDk为标签的标识,标签将(RJI(IDku))发送给读写器;
(3)读写器向后台数据库提出获得所有标签标识的请求;
(4)后台数据库将自己数据库中的所有标签标识(ID1,ID2,…,IDn)发送给读写器;
(5)读写器检查是否有某个IDj(1≤j≤n),使得H(IDj||R)=H(IDk||R)成立;如果有,则认证通过,并将IDj发送给标签;
(6)标签验证IDj与IDk是否相同,如果相同,则认证通过。
在随机化Hash-Lock协议中,认证通过后的标签标识IDk仍以明文的形式通过不安全信道传送,因此玫击者可以对标签进行有效的追踪。同时,一旦获得了标签的标识IDk,攻击者就可以对标签进行假冒。当然,该协议也无法抵抗重传攻击。因此,随机化Hash-Lock协议也是不安全的。不仅如此,每一次标签认证时,后台数据库都需要将所有标签的标识发送给读写器,二者之间的数据通信量很大。就此而言,该协议也不实用。
3. Hash Chain协议
NTT提出了一种Hash Chain协议。该协议流程如图3所示。在第i次与读写器交换时,标签有其初始值Si,发送ai=G(Si)给读写器,再根据以前的Si更新密钥Si+1=H(Si)。其中G和H都是Hash函数。

图3 NTT Hash China协议
该方法满足了不可分辨和前向的安全特性。G是单向方程,因此攻击者能获得标签输出钩,但是不能从ai获得Si。G输出随机值,攻击者能观测到标签输出,但不能把ai和ai+1联系起来。H也是单向方程,攻击者能篡改标签并获得标签的密钥值,但不能从Si+1获得Si。该算法的优势很明显,但是有太多的计算和比较。为了识别一个ID,后台服务器不得不计算ID列表中的每个D。假设有N个已知的标签D在数据库中,数据库不得不进行N次ID搜索、2N次Hash方程计算和N次比较。计算机处理负载随着ID列表长度的增加线性增加,因此该方法也不适合存在大量射频标签的情况。
为了克服上述情况,Ohkubo等人提出了一种能够减少可测量性的时空内存折中方案,其协议流程如图4所示。其本质上也是基于共享密钥的询问一应答协议。但是,在该协议中,当使用两个不同Hash函数的读写器发起认证时,标签总是发送不同的应答。值得提出的是,作者声称该折中的Hash-Chain协议具有完美的前向安全性。

图4 折中的Hash Chain协议
在系统运行之前,标签和后台数据库首先要预共享一个初始密钥值St,1,则标签和读写器之间执行第j次Hash Chain的过程如下:
(1)读写器向标签发送Query认证请求;
(2)标签使用当前的密钥值St,j计算at,j=H(St,j),并更新其密钥值为St,j+1=H(St,j),标签将at,j发送给读写器;
(3)读写器将Clu转发给后台数据库:
(4)后台数据库系统针对所有的标签数据项查找并计算是否存在某个IDt(1≤t≤n)以及是否存在某个j(1≤t≤m,其中m为系统预设置的最大链长度)。如果有,则认证通过,并将IDt发送给标签;否则,认证失败。
实质上,在该折中的Hash Chain协议中,标签成为了一个具有自主D更新能力的主动式标签。同时,由上述流程可以看出,该折中的Hash Chain协议是一个单向认证协议,即它只能对标签身份进行认证。不难看出,该协议非常容易受到重传攻击和假冒攻击,只要攻击者截获某个at,j,它就可以进行重传攻击,伪装标签通过认证。此外,每一次标签认证发生时,后台数据库都要对每一个标签进行j次Hash运算,因此其计算载荷也很大。同时,该协议需要两个不同的Hash函数,也增加了标签的制造成本。
4. 基于Hash的ID变化协议
基于Hash的ID变化协议与Hash Chain协议相似,每一次应答中的ID交换信息都不相同。该协议可以抗重传攻击,因为系统使用了一个随机数R对标签标识不断地进行动态刷新,同时还对TID(最后一次应答号).和LST(最后一次成功的应答号)信息进行更新,其协议流程如图5所示。

图5 基于Hash的ID变化协议
基于Hash的ID变化协议的执行过程如下:
(1)读写器向标签发送Query认证请求;
(2)标签将当前应答号加1,并将H(ID)、H(TID﹡ID)、ΔTID发送给读写器;可以使后台数据库恢复出标签的标识,ΔTID则可以使后台数据库恢复出TID,H(TID﹡ID);
(3)读写器将H(ID)、H(TID﹡ID)、ΔTID转发给后台数据库:
(4)依据所存储的标签信息,后台数据库检查所接收数据的有效性,如果所有的数据全部有效,则它产生一个秘密随机数R,并将(R,H(R﹡TID﹡ID))发送给读写器,然后数据库更新该标签的ID为ID⊕R,并相应地更新TID和LST;
(5)读写器将R,H(R﹡TID﹡ID)转发给标签;
(6)标签验证所接收信息的有效性;如果有效,则认证通过。
由上面的叙述可知,标签是在接收到消息5且验证通过之后才更新其ID和LST信息的,而在此之前,后台数据库己经成功地完成相关信息的更新。因此,如果此时攻击者进行攻击(例如,攻击者可以伪造一个假消息,或者干脆实施干扰使标签无法接收到该消息),就会在后台数据库和标签之间出现严重的数据不同步问题。这就意味着合法的标签在以后的应答中将无法通过认证。也就是说,该协议不适合于使用分布式数据库的普适计算环境,同时存在数据库同步的潜在安全隐患。
5. 基于Hash认证的“GoodReader”协议
在基于Hash认证的“Good Reader”协议中,ID被提前存储在标签内存中。标签能够通过存储在双方内存中的读写器的ReaderlD来识别已认证读写器,该协议的认证过程如图6所示。

图6 基于Hash认证的“Good Reader”协议
然而,由于标签ID不是一个随机数,导致有敌意的攻击者能够获取该数据,并伪造标签。该伪造标签将会逃过认证过程并欺骗读写器。这是该协议的一个安全漏洞。如果对该协议进行改进,将一个随机数和标签ID进行Hash运算,它将阻止标签被复制。但是由于Hash功能不可逆,读写器还是难于获取实际的标签ID。
6. 基于随机数加密的认证协议
在基于随机数加密的认证协议中,ReaderID作为密钥已经被事先存储在标签的内存中。如果读写器询问标签ID,读写器将首先产生一个随机数k,然后将它发送出去。标签使用ReaderID进行加密(标签ID XORk),然后发送加密结果y。读写器接收结果,再使用ReaderID解密后获得标签ID。该协议可以防止未认证读写器或标签的欺骗和攻击,协议如图7所示。

图7 基于随机数加密的认证协议
当然,该协议也有一些缺点,例如加密和解密模块会增加标签成本。功率消耗、存储、处理时间和门器件都受到了严格的限制。很明显的,安全/隐私与成本需要权衡。
7. 新的基于Hash的协议
为了克服Hash-Lock协议中的读写器欺骗和标签欺骗问题,一种新的基于Hash的体制被提出,该体制的协议流程如图8所示。

图8 一种新的基于Hash的协议
然而,该协议不提供匿名功能,因此使得“个人信息追踪”成为可能。该协议大幅减少但是没有彻底消除读写器欺骗和标签欺骗的可能性。
8. 基于ECC的协议
纠错码(ECC)己经被应用到了认证设计方案中。但是,该体制只是一个单向认证方案,并且Safavi-Seberry方案己被Yang和Laih发现是不安全的。因而基于ECC的协议被提出,该协议如图9所示。

图9 基于ECO的协议
当然,该协议也有一些缺点。例如,它需要随机数发生器,Hash函数计算量较大。