(5)数据库检查当前记录j中的Pointer值,若Pointer=0,则再添加一条新的记录k:(ID、S1new、Rrnew、j),并将记录j中的Pointer值改为k。若Pointer!=0,则找到第Pointer所指的记录,将其内容修改为(ID、S1new、Rrnew、j)。
(6)标签收到Hash(ID||R)、R和EN(S2new)后,标签计算Hash(ID||R),并与收到的Hash(ID||R)进行比对,比对成功则读写器认证通过,标签对EN(S2new)解密后更新影子图像S2,否则会话结束。标签与读写器间的认证过程如图2所示。
3 协议安全性分析
3.1 双向身份验证分析
标签与读写器间的双向身份验证是设计安全协议时需考虑的首要问题,本文只有合法的标签才拥有正确的影子图像S2,S2与其对应的S1重叠后恢复的信息才与Rr的信息吻合;若标签是伪造的,则其恢复的信息与Rr的信息不一致。所以利用S2可实现读写器对标签身份的认证。协议中S2以密文的方式传送,所以即便传送的信息泄露,攻击者也无法得到S2的任何信息。此外,当后端系统通过对标签的认证时,协议会生成新的影子图像S2new、计算标签ID与随机数R的哈希值,并将Hash(ID||R)、R和EN(S2new)发送给标签,标签通过Hash(ID||R)的计算比较,实现标签对阅读器的认证。最后,在整个协议过程中,ID不在读写器和标签间传输,所以攻击者无法获得正确的ID,除非标签从物理上被攻破。认证时标签要发送Hash(ID)、EN(S2),仅持有正确的Hash(ID)是毫无用处的。总体来讲,协议能够安全可靠地实现读写器与标签间的双向认证。
3.2 不可跟踪性分析