发明名称 基于EPC C-1 G-2标准的RFID安全认证方法
摘要 本发明公开了一种基于EPC C-1G-2标准的RFID安全认证方法,用于解决现有的基于EPC C-1G-2标准的RFID安全认证方法安全性差的技术问题。技术方案是标签和读写器采用循环冗余校验码(CRC)、伪随机数发生器(PRNG)和按位异或(XOR)操作,解决了现有的RFID认证方案的已知安全漏洞,有效抵抗标签跟踪攻击和保障标签前向安全。而且,符合低成本RFID标签的EPC C-1G-2标准,降低了标签的存储和计算需求,能够很好的适应低性能设备应用的要求。
申请公布号 CN102497264A 申请公布日期 2012.06.13
申请号 CN201110356136.2 申请日期 2011.11.10
申请人 西安电子科技大学;西北工业大学 发明人 庞辽军;徐银雨;李慧贤;裴庆祺;崔静静;赵军;何利伟;王掌权
分类号 H04L9/32(2006.01)I;H04L9/08(2006.01)I;G06K17/00(2006.01)I 主分类号 H04L9/32(2006.01)I
代理机构 西北工业大学专利中心 61204 代理人 黄毅新
主权项 1.一种基于EPC C-1G-2标准的RFID安全认证方法,其特征在于包括以下步骤:第一步:读写器R产生随机数N<sub>1</sub>,构造读写器询问分组并将读写器询问分组发送给标签T,读写器询问分组仅包含随机数N<sub>1</sub>;第二步:标签T收到读写器R发送的读写器询问分组后,产生随机数N<sub>2</sub>,并计算以下信息:<maths num="0001"><![CDATA[<math><mrow><msub><mi>M</mi><mn>1</mn></msub><mo>=</mo><msub><mi>EPC</mi><mi>S</mi></msub><mo>&CirclePlus;</mo><msub><mi>N</mi><mn>1</mn></msub><mo>&CirclePlus;</mo><msub><mi>K</mi><mi>i</mi></msub></mrow></math>]]></maths><maths num="0002"><![CDATA[<math><mrow><msub><mi>CN</mi><mn>2</mn></msub><mo>=</mo><msub><mi>N</mi><mn>2</mn></msub><mo>&CirclePlus;</mo><mi>PRNG</mi><mrow><mo>(</mo><msub><mi>K</mi><mi>i</mi></msub><mo>)</mo></mrow></mrow></math>]]></maths><maths num="0003"><![CDATA[<math><mrow><msub><mi>M</mi><mn>2</mn></msub><mo>=</mo><mi>CRC</mi><mrow><mo>(</mo><msub><mi>EPC</mi><mi>S</mi></msub><mo>&CirclePlus;</mo><msub><mi>N</mi><mn>2</mn></msub><mo>&CirclePlus;</mo><msub><mi>C</mi><mi>i</mi></msub><mo>)</mo></mrow><mo>&CirclePlus;</mo><msub><mi>K</mi><mi>i</mi></msub></mrow></math>]]></maths>上式中,EPC<sub>S</sub>为标签T的标签标识码,K<sub>i</sub>为存储在标签中的共享密钥,C<sub>i</sub>为存储在标签中的标签索引号;最后,标签T构造标签响应分组C<sub>i</sub>||M<sub>1</sub>||CN<sub>2</sub>||M<sub>2</sub>并将标签响应分组C<sub>i</sub>||M<sub>1</sub>||CN<sub>2</sub>||M<sub>2</sub>发送给读写器R;第三步:读写器R收到标签T发送的标签响应分组C<sub>i</sub>||M<sub>1</sub>||CN<sub>2</sub>||M<sub>2</sub>后,构造读写器请求分组C<sub>i</sub>||M<sub>1</sub>||CN<sub>2</sub>||M<sub>2</sub>||N<sub>1</sub>并将读写器请求分组C<sub>i</sub>||M<sub>1</sub>||CN<sub>2</sub>||M<sub>2</sub>||N<sub>1</sub>发送给服务器S;第四步:服务器S接收到读写器R发送的读写器请求分组C<sub>i</sub>||M<sub>1</sub>||CN<sub>2</sub>||M<sub>2</sub>||N<sub>1</sub>后,利用接收到的读写器请求分组C<sub>i</sub>||M<sub>1</sub>||CN<sub>2</sub>||M<sub>2</sub>||N<sub>1</sub>中的标签索引号C<sub>i</sub>,在数据库中查找满足C<sub>i</sub>=C<sub>inew</sub>或者C<sub>i</sub>=C<sub>iold</sub>的标签记录条目,其中C<sub>inew</sub>为存储在数据库中的当前标签索引号,C<sub>iold</sub>为存储在数据库中的前一次标签索引号;如果找不到,发送出错信息给读写器R并终止会话;否则,从找到的标签记录条目中提取出标签的标签标识码EPC<sub>S</sub>、存储在数据库中的当前共享密钥K<sub>inew</sub>、存储在数据库中的前一次共享密钥K<sub>iold</sub>,并计算临时密钥<img file="FSA00000610458100014.GIF" wi="493" he="58" />然后,判断K′<sub>i</sub>=K<sub>inew</sub>或者K′<sub>i</sub>=K<sub>iold</sub>是否成立;如果均不成立,发送出错信息给读写器R并终止会话,否则,利用K′<sub>i</sub>解密出随机数<maths num="0004"><![CDATA[<math><mrow><msub><mi>N</mi><mn>2</mn></msub><mo>=</mo><msub><mi>CN</mi><mn>2</mn></msub><mo>&CirclePlus;</mo><mi>PRNG</mi><mrow><mo>(</mo><msubsup><mi>K</mi><mi>i</mi><mo>&prime;</mo></msubsup><mo>)</mo></mrow><mo>,</mo></mrow></math>]]></maths>再判断<maths num="0005"><![CDATA[<math><mrow><msub><mi>M</mi><mn>2</mn></msub><mo>&CirclePlus;</mo><msubsup><mi>K</mi><mi>i</mi><mo>&prime;</mo></msubsup></mrow></math>]]></maths>的值是否等于<maths num="0006"><![CDATA[<math><mrow><mi>CRC</mi><mrow><mo>(</mo><msub><mi>EPC</mi><mi>S</mi></msub><mo>&CirclePlus;</mo><msub><mi>N</mi><mn>2</mn></msub><mo>&CirclePlus;</mo><msub><mi>C</mi><mi>i</mi></msub><mo>)</mo></mrow><mo>;</mo></mrow></math>]]></maths>如果不相等,发送出错信息给读写器R终止会话;否则,服务器S通过对标签T的认证,并执行以下两个步骤:<img file="FSA00000610458100018.GIF" wi="68" he="41" />服务器S计算信息<img file="FSA00000610458100019.GIF" wi="860" he="58" />然后构造服务器响应分组D<sub>i</sub>||M<sub>3</sub>并将服务器响应分组D<sub>i</sub>||M<sub>3</sub>发送给读写器R,其中,D<sub>i</sub>为存储在数据库中的标签的详细信息;<img file="FSA00000610458100021.GIF" wi="101" he="47" />服务器S更新标签T在服务器中存储的标签记录条目信息如下:C<sub>iold</sub>=C<sub>i</sub><maths num="0007"><![CDATA[<math><mrow><msub><mi>C</mi><mi>inew</mi></msub><mo>=</mo><mi>PRNG</mi><mrow><mo>(</mo><msub><mi>N</mi><mn>1</mn></msub><mo>&CirclePlus;</mo><msub><mi>N</mi><mn>2</mn></msub><mo>)</mo></mrow><mo>&CirclePlus;</mo><msubsup><mi>K</mi><mi>i</mi><mo>&prime;</mo></msubsup></mrow></math>]]></maths>J<sub>iold</sub>=K′<sub>i</sub><maths num="0008"><![CDATA[<math><mrow><msub><mi>K</mi><mi>inew</mi></msub><mo>=</mo><msubsup><mi>K</mi><mi>i</mi><mo>&prime;</mo></msubsup><mo>&CirclePlus;</mo><mrow><mo>(</mo><msub><mi>N</mi><mn>2</mn></msub><mo>></mo><mo>></mo><mi>l</mi><mo>/</mo><mn>4</mn><mo>)</mo></mrow></mrow></math>]]></maths>第五步:读写器R收到服务器S发送的服务器响应分组D<sub>i</sub>||M<sub>3</sub>后,提取出标签T的详细信息D<sub>i</sub>,然后构造读写器响应分组并将读写器响应分组发送给标签T,其中读写器响应分组仅包含M<sub>3</sub>;第六步:标签T收到读写器响应分组后,计算<img file="FSA00000610458100024.GIF" wi="723" he="56" />然后判断M′<sub>3</sub>是否等于<img file="FSA00000610458100025.GIF" wi="210" he="58" />如果不相等,标签T终止会话,否则,标签T通过对服务器S的认证,并执行以下更新:<maths num="0009"><![CDATA[<math><mrow><msub><mi>C</mi><mi>i</mi></msub><mo>-</mo><mi>PRNG</mi><mrow><mo>(</mo><msub><mi>N</mi><mn>1</mn></msub><mo>&CirclePlus;</mo><msub><mi>N</mi><mn>2</mn></msub><mo>)</mo></mrow><mo>&CirclePlus;</mo><msub><mi>K</mi><mi>i</mi></msub></mrow></math>]]></maths><maths num="0010"><![CDATA[<math><mrow><msub><mi>K</mi><mi>i</mi></msub><mo>=</mo><msub><mi>K</mi><mi>i</mi></msub><mo>&CirclePlus;</mo><mrow><mo>(</mo><msub><mi>N</mi><mn>2</mn></msub><mo>></mo><mo>></mo><mi>l</mi><mo>/</mo><mn>4</mn><mo>)</mo></mrow></mrow></math>]]></maths>完成读写器与标签之间的安全认证。
地址 710071 陕西省西安市太白南路2号