何 小 平
(广东培正学院数据科学与计算机学院 广东 广州 510830)
射频识别技术不需要与实体相接触,即可识别出实体内部存放的信息,因此得到广泛应用,其中RFID系统的应用最为广泛[1-2]。RFID系统在20世纪末得到较大范围的推广,因当时科技的局限性,使得RFID系统中读写器与后台服务器之间的通信都是采用有线信道完成数据传送。有线信道在很多时候被认为安全可靠,因此在设计双向认证协议之时,一般将读写器与后台服务器看成一个整体[3-5]。进入21世纪,随着科技的发展,人们的需求也越来越繁琐,传统的RFID系统已经无法满足人们的需求,急需出现新的解决方法。移动式的RFID系统便在这样的背景之下产生,其与传统的RFID系统最大的区别在于:移动式的RFID系统为满足人们的需求,读写器不再是固定式的,而是采用移动式的,即读写器与后台服务器之间的通信采用无线信道完成[6-8]。
鉴于上述移动式RFID系统自身特有的属性,使得适用于传统RFID系统的双向认证协议并不能应用在移动式RFID系统中,因此需要设计出新的适用于移动式的RFID系统的双向认证协议[9-10]。
针对传统的RFID系统,为确保隐私信息的安全性,国内外专家学者设计出很多双向认证,以下介绍一些近些年较为经典的适用于传统的RFID系统的双向认证协议。
文献[11]基于M-Hash函数提出一种双向认证协议,但该协议仅适用于传统的RFID系统,无法运用在移动式的RFID系统中。协议因采用Hash函数进行加密,使得采用该协议的系统整体计算量较大,且协议无法抵抗攻击者的重放攻击。
文献[12]基于位重排变换设计出一种双向认证协议,该协议也是仅适用于传统的RFID系统。协议采用按位运算的加密能够一定程度上降低系统的整体计算量,对协议进行深入分析发现,协议并没有提供最后一步骤中标签与读写器之间的双向认证。
文献[13]设计出一种适用于移动式RFID系统的双向认证协议,协议采用伪随机函数算法对通信消息进行加密,具备一定的安全性。对协议进行分析可以发现,协议并没有文中声称的那样安全可靠,协议加密过程中,并不是所有信息均混入随机数,使得攻击者可以多次监听消息,对获取的消息进行分析,从而定位标签的位置,因此,协议无法抵抗追踪攻击。
文献[14]提出的协议能够使用在移动式的RFID系统中,但仍存在一定缺陷。攻击者可以采用物理攻击的手段克隆出通信实体的相关隐私信息,从而假冒成合法通信实体与其他通信实体进行通信,更进一步获取其隐私信息,因此,协议无法抵抗假冒攻击。
文献[15]提出的协议适用于移动式的RFID系统,对协议进行分析发现,协议在最后一步骤中,移动读写器仅仅只是转发消息给标签,从而使得协议无法提供双向认证,在此基础之上,攻击者更进一步对截获的消息进行多次重放,从而导致标签与后台服务器之间用到的共享密钥信息失去一致性,使得协议无法抵抗攻击者的去同步化攻击。
鉴于篇幅有限,此处不再阐述更多的认证协议,具体可参见文献[16-20]。
鉴于文献[15]中有详细的协议认证步骤的描述,此处为便于后续协议的具体分析,因此只对该协议认证步骤进行较为简单的描述。如图1所示。
图1 改进的轻量级移动RFID双向认证协议的认证步骤
认证步骤可以描述如下:
1)移动读写器产生随机数Nr,将Nr和Query一起发送给标签。
2)标签计算通信消息X,并将其分成左右两部分,保存右部分XR,将通信消息Nt和XL发送给移动读写度。
3)移动读写器计算通信消息Y,并将其分成左右两部分,保存右部分YR,将Nt、Nr、YL、XL发送给后台服务器。
4)后台服务器先对移动读写器进行验证,具体地,通过Nr、YL对移动读写器进行验证。验证通过,再对标签进行验证,具体通过Nt、XL对标签进行验证。验证通过,开始更新信息,并将YR、XR发送给移动读写器;验证不通过,则后台服务器会再次用到上一轮的共享密钥计算得到另一组Nt、XL对标签再次进行验证。若再次验证还是未通过,协议终止;反之,标签通过验证,开始更新信息,并将YR、XR发送给移动读写器。
5)移动读写器通过YR对后台服务器进行验证。验证通过,将XR转发给标签;反之,协议终止。
6)标签通过XR对后台服务器和移动读写器进行验证。验证通过,开始更新信息;反之,协议终止。
通过上面协议的步骤描述,对协议进行深入分析,可以得到如下结论:协议无法抵抗攻击者发起的去同步化攻击。
在协议的第5步中,当移动读写器验证后台服务器通过之后,就直接将XR传送给标签,并没有做任何其他处理操作。
攻击者可以通过监听的手段获取第4步中后台服务器发送给移动读写器的消息YR、XR。当攻击者获取该消息后,立刻阻塞移动读写器与标签之间的最后一步通信。此时合法的移动读写器正在验证后台服务器的真伪,根据协议的步骤,移动读写器验证后台服务器肯定可以通过,之后移动读写器将XR传送给标签。但此时合法移动读写器与标签之间已无法进行通信,攻击者就可以假冒成移动读写器向标签发送XR消息。根据第5步可知,XR并不会进行任何处理,因此攻击者发送给标签XR信息后,标签对移动读写器和后台服务器的验证还是可以通过,通过之后,将开始进行信息更新。此时,如果攻击者再次重放XR信息给标签,则标签对其验证将会再次通过,通过之后,标签端将再次更新信息。标签端进行两次信息的更新,而此时,后台服务器端仅进行一次信息的更新,截至此刻,标签与后台服务器之间的共享密钥以及假名信息已失去一致性,攻击者去同步化攻击成功。
下面给出通过重放XR信息使得标签与后台服务器之间的信息失去一致性的详细分析过程。
通信开始之前,标签与后台服务器之间信息同步,都满足IDtnew=IDtold=IDt,Ktnew=Ktold=Kt,其中:IDtnew为当前会话的标签标识符;IDtold为上一轮会话的标签标识符;IDt为标签的标识符;Ktnew为当前会话的共享密钥;Ktold为上一轮会话的共享密钥;Kt为共享密钥。
第一次通信开始,通信步骤前面的第1步至第5步正常进行,攻击者阻塞第6步。窃听截获第4步中后台服务器发送给移动读写器的YR、XR信息,在阻塞第6步的操作下,攻击者将XR信息发送给标签,标签验证通过,开始更新信息。因这次是攻击者第一次重放XR信息,因此标签端与后台服务器端的信息还是一致的。具体的更新信息如下:
IDtold=IDtnew,将该次的数值记作ID_1_old;IDtnew=HKt(Nt||IDtold),将该次的数值记作ID_1_new,其中HKt()为在共享密钥Kt条件下的哈希函数的加密运算;Ktold=Kt,将该次的数值记作Kt_1_old;Ktnew=H(Kt||IDtold),将该次的数值记作Kt_1_new,其中H()为哈希函数的加密运算。
当攻击者第一次重放XR信息,标签端更新信息完成后,仍继续阻塞合法移动读写器与标签的通信。攻击者将进行第二次重放XR信息,根据第6步中的描述可知,此时攻击者假冒的移动读写器还是可以再次通过标签的验证,验证通过之后,标签端将再次进行信息更新操作,但合法后台服务器却并没有进行同步的信息更新操作。截至此时,标签与后台服务器之间的共享密钥及假名已失去一致性。具体的标签端的更新信息如下:
IDtnew=HKt_1_new(Nt||ID_1_new),将该次的数值记作ID_2_new;Ktnew=H(Kt_1_new||ID_1_new),将该次的数值记作Kt_2_new。
后台服务器信息未进行更新操作,因此,此时后台服务器端存放的假名还是上面的ID_1_old和ID_1_new;共享密钥还是上面的Kt_1_old和Kt_1_new。
很显然,ID_2_new≠ID_1_old,且ID_2_new≠ID_1_new;Kt_2_new≠Kt_1_old,且Kt_2_new≠Kt_1_new。
至此,标签与后台服务器之间的共享密钥信息及假名信息均失去一致性,攻击者去同步化攻击成功。
抗同步化攻击的协议中出现的符号按照如下含义进行解释:
S:后台服务器;R:移动读写器;T:标签;x:移动读写器产生的随机数;y:标签产生的随机数;K:后台服务器、移动读写器、标签三者之间的共享密钥;KReader:后台服务器、移动读写器两者之间的共享密钥;KTag:后台服务器、标签两者之间的共享密钥;KTag_old:后台服务器、标签两者之间上轮认证过程中的共享密钥;IDReader:移动读写器的假名;IDTag:标签的假名;IDTag_old:标签上轮认证过程中的假名;Count:标签一端的计数器的数值;SRC(X,Y):交换重组交叉位运算;⊕:异或运算;&:与运算。
为统一文中描述,约定用SRC(X,Y)符号表示交换重组交叉位运算。交换重组交叉位运算定义如下:X和Y均表示二进制序列,且位数L均为偶数位(如8位、24位等);取二进制序列X的前L/2位,放在新组成二进制序列Z的右边,同时取二进制序列Y的后L/2位,放在新组成二进制序列Z的左边;对二进制序列Z进行从左到右的遍历,将二进制序列Z的奇数位上的数值放在新组成二进制序列的偶数位上,同时将二进制序列Z的偶数位上的数值放在新组成二进制序列的奇数位上。
比如:X=1010 0001,Y=1000 0100,根据上面的定义可得出:Z=0100 1010,SRC(X,Y)=1000 0101。具体过程如图2所示。
图2 交换重组交叉位运算的流程图
协议开始之前,后台服务器产生如下信息:IDTag、KReader、KTag、K、IDReader,并通过安全通道将信息发送给标签和移动读写器。标签接收并存放下列信息:IDTag、KTag、K;移动读写器接收并存放下列信息:KReader、K、IDReader;后台服务器存放下列信息:IDTag、KReader、KTag、K、IDReader。最开始的时候,令IDTag_old=IDTag_new=IDTag;KTag_old=KTag_new=KTag。
改进的抗同步化攻击的协议过程如图3所示。
图3 抗同步化攻击的协议
结合图3描述改进的抗同步化的协议步骤如下:
1)移动读写器产生随机数x,用随机数x、共享密钥K计算A=x⊕K;用随机数x、共享密钥K计算B=SRC(x,x&K)。将{A,B,Query}发送给标签,其中Query表示认证请求命令。
2)标签接收到移动读写器发送来的信息,用收到的A、共享密钥K计算x′=A⊕K;用计算所得x′、共享密钥K计算B′=SRC(x′,x′&K)。
对比B′与B是否相等。B′≠B,移动读写器未通过验证,协议终止;B′=B,表明移动读写器通过标签的验证,同时也得出:x′=x。标签接着进行后续操作,产生随机数y,用随机数y、共享密钥K计算C=y⊕K;用随机数y、计算所得随机数x、共享密钥K计算D=SRC(y⊕x,y&K);用随机数y、共享密钥KTag、标签假名IDTag计算E=SRC(y⊕KTag,y⊕IDTag)。将消息E均等地分成左右两部分,左边一部分记为E_L,右边一部分记为E_R。标签最后将{C,D,E_L}发送给移动读写器。
3)移动读写器收到标签发送来的信息,用收到的C、共享密钥K计算y′=C⊕K;用计算所得y′、共享密钥K计算D′=SRC(y′⊕x,y′&K)。
对比D′与D是否相等。D′≠D,标签未通过验证,协议终止;D′=D,表明标签通过移动读写器的验证,同时也得出:y′=y。移动读写器接着进行后续操作,用随机数x、共享密钥KReade、移动读写器假名IDReader计算F=SRC(x⊕KReader,x⊕IDReader)。将消息F均等地分成左右两部分,左边一部分记为F_L,右边一部分记为F_R。标签最后将{A,C,E_L,F_L}发送给后台服务器。
4)后台服务器收到移动读写器发送来的信息,后台服务器分两步进行操作。先验证移动读写器的真伪,验证通过,再验证标签的真伪,两者均通过验证,后台服务器才会进行信息更新操作。两者中只要有一方未通过验证,协议终止。
(1)后台服务器对移动读写器的验证。后台服务器用收到的A、共享密钥K计算x″=A⊕K;用计算所得x″、共享密钥K计算F′=SRC(x″⊕KReader,x″⊕IDReader)。将消息F′均等地分成左右两部分,左边一部分记作F_L′,右边一部分记作F_R′。对比F_L′与F_L是否相等。F_L′≠F_L,移动读写器未通过验证,协议终止;F_L′=F_L,表明移动读写器通过后台服务器的验证,同时也得出:x″=x′=x。后台服务器接着进行后续操作,开始进行对标签的验证。
(2)后台服务器对标签的验证。后台服务器用收到的C、共享密钥K计算y″=C⊕K;用计算所得随机数y″、共享密钥KTag、标签假名IDTag计算E′=SRC(y″⊕KTag,y″⊕IDTag)。将消息E′均等地分成左右两部分,左边一部分记为E_L′,右边一部分记为E_R′。对比E_L′与E_L是否相等。E_L′=E_L,表明标签通过后台服务器的验证,同时也得出:y″=y′=y;后台服务器开始更新信息:IDTag_old=IDTag_new、IDTag_new=SRC(y,IDTag_old)、KTag_old=KTag_new、KTag_new=SRC(KTag,y);待后台服务器更新信息完成,将{E_R,F_R}发送给移动读写器。E_L′≠E_L,后台服务器将取出上一轮认证过程中用到的
5)移动读写器收到后台数据库发送来的信息,将接收到的F_R与自身计算所得F_R进行比较。不相等,后台数据库未通过验证,协议终止;相等,后台数据库通过移动读写器的验证,移动读写器用收到的E_R、自身产生随机数x、计算所得到随机数y计算G=E_R&x⊕y。最后将{G}发送给标签。
6)标签收到移动读写器发送来的信息,首先查找与G相对应的计数器的数值Count。Count≠0,标签不进行任何操作,直接摒弃G;Count=0,表示G消息是第一次发送过来,并不是攻击者重放发送来的G消息(以此来抵抗攻击者的去同步化攻击),并将相对应的Count变为1。同时标签进行下列操作:用自身计算所得的E_R、自身产生随机数y、计算所得到随机数x计算G′=E_R&x⊕y。
对比G′与G是否相等。G′≠G,移动读写器及后台服务器未通过验证,表明两者之中至少有一方是假冒的,协议终止;G′=G,表明移动读写器与后台服务器同时通过标签的验证,标签开始更新信息:IDTag_new=SRC(y,IDTag_old)、KTag_new=SRC(KTag,y)。待标签一端的信息更新完成,则双向认证到此结束。
改进的协议能够提供3个通信实体之间的相互认证,此处选择标签与移动读写器之间的相互认证为例子进行详细分析。标签与后台服务器之间的认证、移动读写器与后台服务器之间的认证,与选择的例子分析过程相同,此处不再阐述。
在改进的协议第2步中,标签收到移动读写器发送来的信息之后,会对移动读写器进行第一次验证。标签先通过A计算得到移动读写器产生的随机数x′,再用计算得到的随机数x′代入计算B′中。通过比较B′与B是否相等,即可识别出移动读写器的真伪。具体的识别验证过程,可以参见协议的第2步描述。
在协议的第3步中,移动读写器收到标签发送来的信息之后,对标签的真伪进行辨识。通过C计算得到标签产生的随机数y′,将计算得到的随机数y′代入D的计算,可以得到D′。通过比较D′与D是否相等,即可辨别出标签的真伪。
此处重点分析协议步骤中的最后一步中,标签是如何通过G同时识别出移动读写器和后台服务器的真伪。从G=E_R&x⊕y公式中可以看出,G在计算过程中包含3个参数:E_R、x、y;这3个参数对于攻击者来说,除了E_R可以通过窃听手段获取之外,x和y是攻击者无法获取的,且也无法通过破解获得。因此,当攻击者窃听得到E_R之后,伪装成移动读写器进行加密计算,但因缺少x和y两个参数,是无法计算得到正确的G。标签收到信息后,通过简单的计算,即可发现G不正确,协议终止,表明移动读写器与后台服务器之间至少有一方是伪造的。
基于以上阐述,改进的协议能够提供通信实体之间的双向认证。
假冒攻击是指攻击者伪装成合法的通信实体中的任何一方,向其他通信实体发送消息,以达到蒙混过关的目的,从而进行隐私信息的窃取。
改进的协议能够抵抗攻击者的假冒攻击。具体来说,协议在进行所有合法操作之前,均会对消息的来源一方进行识别认证,只有在验证消息来源一方不是伪造的之后,才会进行后续操作。攻击者想假冒成其中一个通信实体,则在进行消息加密过程中,会用到一些参数,比如共享密钥K。对于这些参数的具体数值,攻击者是无法获取的,因此攻击者在加密过程中,就只能随便选择一个数来进行消息的加密,很明显所得结果肯定是错误的。当攻击者加密的消息发送给其他通信实体的时候,另一个通信实体就只需要进行简单的计算比对,即可识别出消息的来源一方是伪造的,攻击者的假冒攻击失败。因此,协议能够抵抗攻击者的假冒攻击。
重放攻击是说攻击者在通过监听手段获取某些通信消息之后,伪装成合法的一个通信实体,重复多次给另外的通信实体发送该截获的通信消息,从而达到某种目的,比如获取隐私信息。
改进的协议中为抵抗攻击者的重放攻击,所有通信消息在加密过程中,均混入随机数;其中有些随机数是移动读写器产生的,有些随机数是标签产生的;随机数的混入,既可以保证前后两轮通信过程中的通信消息的互异性,也可以增加攻击者的破解难度。当攻击者通过监听等手段获取当前的通信消息,想通过重放该消息以逃过另一通信实体的认证,但攻击者无法成功,因为下一轮认证过程中用到的通信消息加密过程中的随机数已经发生变化,所以攻击者重放该消息失败。基于以上阐述,协议能够抵抗攻击者的重放攻击。
去同步化攻击也称为异步攻击,主要是攻击者通过重放消息或其他手段,导致通信实体双向认证用到的共享密钥等信息失去一致性,从而使得后续正常的认证无法进行。
改进的协议为了能够抵抗攻击者的去同步化攻击,采用以下两个措施:(1)在后台服务器一端不仅存放当前认证过程中用到的共享密钥等信息,而且也会存放上一轮认证过程中用到的共享密钥等信息,这样就可以使得后台服务器对标签的认证第一次失败之后,还可以用上轮信息替换本轮信息再次认证,从而恢复同步性。(2)标签一端会增加计算器参数Count,通过该计算器的数值,来进行相对应的操作。当Count不为零时,表明标签至少已经在此次通信之前接收到通信消息G一次,为避免攻击者发起的异步攻击,标签采取放弃策略,即不进行信息的更新操作,从而保持标签与后台服务器之间的共享密钥等信息是一致的。而当Count为零时,表明标签之前还未收到该信息G,从而可以断定该信息并不是攻击者重放的,标签开始对G进行验证。验证通过,开始更新信息;验证失败,协议终止。通过上述两个措施,使得改进的协议能够抵抗攻击者发起的去同步化攻击。
攻击者通过多次监听通信实体发送的消息,根据获取的通信消息分析出具体的通信实体,从而进行跟踪,然后实施破坏等操作。为能够抵抗攻击者发起的追踪攻击,改进的协议在加密过程中混入随机数,使得攻击者无法实施追踪攻击。主要原因有下面几点:(1)随机数由随机数产生器随机产生,无法进行预测;(2)随机数在一个时间段内具有不重复性;(3)消息加密过程中用到的随机数每轮均不一样,即便是获取当前的通信消息,也无法推导出下轮通信消息。基于上述因素,使得攻击者发起的追踪攻击失败。
当攻击者无法通过上述等攻击方法获取隐私信息之时,攻击者可能会采取更为直接更为暴力的方式进行,即采用穷举的方式穷尽所有可能的情况,然后获取隐私信息。改进的协议能够抵抗攻击者的暴力破解攻击,具体此处以通信消息A为例子进行详细分析。在通信消息A中A=x⊕K包含2个加密参数:x和K,攻击者对A无法实施暴力破解攻击获取隐私信息。具体原因如下:(1)对于攻击者来说,这2个参数都是不知晓的,且无法通过监听等手段获取;(2)共享密钥K在通信过程中没有明文出现过,攻击者要想获取K,还必须采用其他手段获取;(3)随机数x每轮均发生变化,无法预测,使得通信消息A的值也是每轮不同。基于上述,协议能够抵抗攻击者发起的暴力破解攻击。
本文协议与其他此类移动双向认证协议进行安全性分析对比,对比的结果如表1所示。
表1 认证协议安全性分析对比
移动式的RFID系统中一般包含三大通信实体,即移动读写器、后台服务器、标签。在三大通信实体中,后台服务器与移动读写器两者具备强大的计算能力和足够大的存储空间,因此性能分析部分一般不会选择这两者作为研究对象。相反,标签并不具备前面两者的优势,计算能力非常有限,且存储空间大小也受到严格限制,无法大量存放数据,因此性能分析中会将标签作为重点研究对象进行分析。同时将会选择标签的计算量和存储量作为两个性能分析的角度。
本文协议与其他认证协议进行性能分析比对结果如表2所示。
表2 认证协议性能分析比对
表2中:H表示哈希函数的计算量;M表示模运算的计算量;Reg表示位重排变换的计算量;Rot表示左循环移位的计算量;F表示伪随机函数的计算量;PR表示随机数产生的计算量;C表示交叉运算的计算量;PUF表示物理不可克隆函数的计算量;XOR表示异或运算的计算量;AND表示与运算的计算量;SRC表示交换重组交叉位运算的计算量。在上述计算量中,属于超轻量级的计算有:Reg、Rot、C、XOR、AND、SRC;其他计算属于轻量级的计算量。轻量级的计算量一次操作的计算量相当于若干次超轻量级计算的计算量。
本文协议在第2步中,计算随机数x′时第一次用到XOR运算,计算C时第2次用到XOR运算,计算B′、D、E时会连续3次用到SRC运算,产生随机数y用到一次PR运算。在协议的第6步中,计算G′时,第一次用到AND运算,同时也是第3次用到XOR运算,共享密钥和假名在更新过程中会连续2次用到SRC运算。基于上述,本协议在认证过程中,标签一端的计算量为:3XOR+5SRC+AND+PR。其他协议标签一端的计算量按照上述方法可以逐一查找出来,鉴于文中篇幅有限,此处不再具体阐述。
设定所有消息的长度均为l位,本协议标签一端会存放如下信息:共享密钥K、假名IDTag、共享密钥KTag、计数器Count。因此,协议标签一端的存储量为4l。
结合表2可以得出:本文协议标签一端的计算量相对于其他协议来说,得到一定程度上的减少。从标签一端的存储量角度出发,本文协议与其他协议相当,本文协议在此方面并没有较大的改进。综合各方面比较,本文协议在计算量方面要优于其他协议,且本文协议能够弥补其他协议存在的一些安全缺陷问题,具备一定的运用价值。
本文对汪杰[15]等提出的移动认证协议进行深入分析,指出该协议存在的安全不足,并给出一种改进的能够抵抗去同步化攻击的移动双向认证协议。改进协议为抵抗攻击者的去同步化攻击,在后台服务器存放上一轮和本轮的认证共享密钥信息,且在标签引入计数器Count,根据计数器Count的数值进行不同的操作。对协议进行安全性分析,改进的协议能够满足移动式RFID系统的安全需求;对协议进行性能分析,表明改进的协议具备计算量低等特征。下一步研究方向是将该协议在具体的移动式RFID系统中实现,对一个完整的通信过程进行分析,研究分析一个完整通信过程所需时间等参数。