步骤(1):RFID读写器产生一个随机数rR,向标签发送Query、rR认证请求。

步骤(2):标签接收到RFID读写器发送的认证请求后,将k值与随机数rR相加得到rk,然后标签读取存储器数据,计算G(IDrk),G(S),然后向RFID读写器发送k、rk、G(IDrk)、G(S)以及标志位f;同时更新S=H(S),更新k=k+1,当k为所在分层的最大值时,k+1将重置k的值为该分层的最小值,同时置f的值为“1”,否则f值不更新。

步骤(3):RFID读写器接收到来自标签的信息后,先通过rk和k计算出随机数rR′,比较该rR′是否与刚发出的rR一致,如果不一致,则该数据为无效数据,直接丢弃;如果一致则进一步判断G(IDrk)和G(S)。比较与该阅读器上次认证时保留的G(ID′rk′)和G(S′)是否一致,如果一致则为无效数据,直接丢弃;如果不一致,则将数据k、rk、G(IDrk)、G(S)以及标志位f发送到后端数据库。

步骤(4):后端服务器接收到RFID读写器传递的数据后,先判断k值的范围区间,确定该标签在哪个分层,然后判断f值是否为“1”,如果是转入①,否则转入②。

①在数据库中找到该分层的所有标签数据记录,检查该记录中是否还有没有对比的记录,如果有转入③;否则,标签不合法,停止认证。

②在数据库中找到该分层的标签数据记录,在此记录中检查是否还有符合k″≤k没有对比的记录,如果有转入④;否则,标签不合法,停止认证。

③读取一条还没有对比的标签数据记录的ID″,计算G(ID″rk),再与G(IDrk)比较,如果相等,则转入⑤,否则转入①。

④读取一条k″≤k且还没有对比的标签数据记录的ID″,计算G(ID″rk),再与G(IDrk)比较,如果相等,则转入⑥,否则转入②。