现有的基于hash函数的轻量级rfid认证协议中的大部分在被截取消息后很容易被追踪,泄露标签隐私,并没有真正实现标签的强匿名性。本发明基于hash函数和动态共享密钥机制,提出了一种真正满足标签强匿名性的轻量级rfid认证协议。
背景技术:
射频识别(rfid)是一种非接触式的自动识别技术,它是公认的物联网的核心技术之一。现在的rfid技术能够并行地识别多个对象,即使处于移动状态的物体也能够准确识别,此项技术已经应用于各种复杂环境之中,如物流,图书馆以及制造业等。射频识别通过无线电信号进行通信并识别物体,在rfid系统中,标签与读写器通过无线信号进行信息交换,标签附着在物体上,内部保存着物体的信息;读写器通过天线与附近的标签进行数据交换,从而实现对目标的识别,读写器不需要看到标签,而是通过电磁场建立通信,将相应数据转发到后台系统,人们通过互联网连接服务器,即可获取相应物品的即时信息,并对其进行管理和追踪。
rfid应用领域在不断地扩展和深入,随之而来安全问题也逐渐成为rfid技术发展的重点。作为rfid系统中的重要组成部分,标签tag通常为一种被称作cld的非接触式装置,由于长期暴露在外界,面临着远程窃听、伪造攻击、标签定位以及采取不正当手段获得数据,去同步攻击等诸多威胁。标签内部数据可能包含着隐私信息,如果发生消息泄露将引起难以估量的损失。因此为了安全地识别标签,识别协议必须满足一系列安全准则,特别是保证攻击人不能窃取合法的rfid标签信息。综合目前rfid技术的发展情况,现有的rfid安全研究都不够完善,存在着大量的不足和漏洞。目前rfid安全技术可以分为物理保护方法和逻辑加密方法;逻辑方法按加密方式可以分为基于对称加密的协议,基于非对称加密的协议和基于物理特性的协议,而物理保护受到成本和实施的制约,应用范围较窄,可以用作辅助保护机制。高成本的标签具有较强的计算和存储能力,但不利于rfid系统的大范围应用。而低成本标签的计算和存储能力受到一定的限制,重量级的加密算法并不适用,因此具有较多的安全问题。目前,设计一个低复杂性兼具强安全性的轻量级rfid安全认证协议是需要急需解决的问题。
技术实现要素:
本发明的一个目的是解决至少上述问题和/或缺陷,并提供至少后面将说明的优点。
本发明还有一个目的是提供一种基于hash函数和动态共享密钥的强匿名rfid认证方法,能够使标签验证阶段具有强匿名性。
本发明还有一个目的是基于动态共享密钥的强匿名rfid认证的动态过滤方法。
本发明还有一个目的是提供一种传递信息基于hash函数加密方法。
一种用于rfid认证过程中传递信息的加密方法,标签能够通信地连接读写器,所述加密方法包括:
所述标签接收到所述读写器的查询指令后,产生第一随机数并且对该第一随机数和公共密钥做异或运算得到第一输出;
将标签标识、第一输出、所述第一随机数和动态序列值作为输入提供给单向hash函数从而产生第二输出;
将第二输出、公共密钥、第一输出和读写器标识提供给单向hash函数从而产生第三输出;
将读写器标识、标签标识和公共密钥提供给单向hash函数从而产生过滤标识;
所述标签向所述读写器发送第一消息,所述第一消息包括:第二输出、第三输出、过滤标识和动态序列值。
优选的是,还包括:
所述读写器接收所述第一消息后,产生第二随机数并与公共密钥做异或运算得到第四输出;
将第一消息、第二随机数和公共密钥提供给单向hash函数从而产生第五输出;
所述读写器向后台服务器发送第二消息,所述第二消息包括:第四输出、第五输出、第一消息和读写器标识。
一种基于hash函数和动态共享密钥的强匿名rfid认证方法,标签能够通信地连接读写器,所述认证方法包括:
标签收到读写器的发出的查询指令之后,生成一个随机数nt,计算
α=h(pidt||kts||nx||idr),fid=h(idt||idr||kts);
然后标签向读写器发送消息,其包括:α,pidt,seq,fid;其中,seq为最后一次接收到的服务器更新的动态追踪序列;
读写器在收到来自标签的信息之后,生成一个随机数nr,计算
后端服务器收到来自读写器的消息后,首先验证seq是否相等,如果不相等,中断此次认证;否则,计算
验证是否存在一个合法的kts使得h(pidt||kts||nx||idr)等于标签发送来的消息α,若α验证失败,则终止认证过程;否则,计算
优选的是,还包括:读写器和标签都认证成功后,所述后端服务器生成一个新的seq动态追踪序列seqnew=n,n为所述后端服务器生成的随机数,然后计算
γ=h(pseqt||kts||idt||nt),
δ=h(idr||nr||krs);
更新下一轮的共享密钥ktsnew=h(kts||idt||seqnew),后端服务器的动态追踪序列和共享密钥数据更新为seqnew和ktsnew。
优选的是,还包括:
所述读写器接收到所述标签的信息后,读写器判断过滤表中是否存在对应的fid,若存在则判断为上次已经通过的验证;再判断如果是短时间内的再次申请则视为重复申请,不转发此消息给服务器;若不是短时间内的重复申请,则转发信息到后台服务器。
优选的是,还包括:
如果过滤表中没有对应的fid,然后直接转发到后台服务器进行认证;后端服务器对其完成认证后将相应的信息返回给读写器,读写器更新动态过滤表,并将信息转发给标签。
优选的是,还包括:
验证seq是不相等时,标签会使用standby备用表中的未使用过的(sidj,skeyj)键值对用于验证;从服务器的sid集合中寻找有没有满足的sidj=pidt,若存在,则找出对应的skeyj,计算h(sidj||skeyj||nx||idr)是否等于来自标签的α,不相等则中断连接,相等则生成一个新的seqnew,更新共享密钥的ktsnew。
优选的是,还包括:
在读写器收到后端服务器返回的的消息后,验证读写器是否满足h(idr||nr||krs)=δ,验证失败则中断验证;若δ验证成功,则转发pseqt,γ到标签。
优选的是,还包括:
标签收到消息后,计算
优选的是,所述过滤表占用所述读写器空间的5~10。
有益效果:
本申请基于hash函数和动态共享密钥机制,提出了一种真正满足标签强匿名性的rfid认证协议,在标签和服务器之间实现满足标签强匿名性的双向认证协议。实现抵御伪造攻击和克隆攻击,尤其是能正确处理去同步和dos攻击,实现减少服务器负载,加快认证过程。
本申请协议通过在标签和服务器之间提前注册standby备用表的方法解决了共享密钥不同步问题。在基于动态更新密钥的rfid认证协议中,非常容易受到去同步攻击,它使得标签和服务器更新不同步从而无法完成下一步验证。本申请针对失去同步问题,采取在注册阶段在标签和服务器间注册standby备用表的方法,在发生不同步时,通过预先保存的standby备用表内的键值对进行协议认证,因此本文提出的协议能够很好的抵御dos和去同步攻击。
附图说明
图1是基于分布式网络布局的rfid系统模型。
图2是协议认证过程。
图3协议合法认证过程实例图。
图4读写器执行过滤操作流程图。
图5是ban逻辑形式化分析流程。
具体实施方式
下面结合附图对本发明做进一步的详细说明,以令本领域技术人员参照说明书文字能够据以实施。
应当理解,本文所使用的诸如“具有”、“包含”以及“包括”术语并不配出一个或多个其它元件或其组合的存在或添加。
基于hash函数和动态共享密钥对认证过程进行加密,提出一种满足强匿名性的轻量级rfid安全认证协议。本协议的协议会话的消息都是以单向哈希函数结合动态更新的共享密钥和随机数生成器进行加密,消息即使被截取后也不会有暴露原始数据的危险。认证过程中id以一次性假名pid的形式传输,读写器也不能得到或者推算出真正的标签id,严格保证了标签的强匿名性。
作为进一步的实施例,针对dos和去同步攻击,本协议专门建立了standby表(一种备用认证机制)来应对。
作为进一步的实施例,在本协议中还应用了自定义的动态过滤表,有效地利用了读写器的存储和计算功能,使其不再是一个简单的转发中介,从而减轻服务器负载,完善了整个认证过程。
表1相关协议符号定义
本申请涉及的rfid系统模型都是基于分布式网络系统布局的,结构模型如图1所示。在基于分布式网络布局的rfid系统中,不同类型的标签属于不同的簇,每个簇对应一个读写器,rfid标签所有权可以从一个簇转移到另一个中去,但是这需要对应簇的读写器通过后台安全通道在后端服务器上重新注册。假设在初始条件下,每个簇对应的读写器与后端服务器通过安全信道共享一个密钥krs。
读写器与标签进行交互的信道都是不安全的,协议中的标签是低成本的,计算能力和存储能力都很有限,本申请提出的协议中,标签进行单向hash函数和简单的连接和异或运算。协议所使用的单向hash函数对于任何攻击者的暴力破解都足够有效。
认证协议包含两个阶段:第一阶段,后端服务器s通过安全信道,将一系列安全码发送到标签t中,我们称这一阶段为注册阶段。第二阶段是真正的认证阶段,标签t和读写器r都需要向后台服务器s提供自己合法的证明才能够进行通信,同时作为优选读写器在认证过程中会动态在用户内存区中建立过滤表,用来过滤重复的无效申请和抵御重放攻击。
一个rfid标签在投入使用前,通过安全信道向服务器提交其标签标识
服务器再通过安全信道发送kts,seq,(sid,skey)和h()给标签t,在服务器中保存对应词
认证执行阶段:
step1.r→t:m1{query}
读写器将query命令发送到标签t。
step2.t→r:m2{α,pidt,nx,seq(ifreq),fid(optional)}
收到读写器的发出的消息之后,生成一个随机数nt,计算
然后标签t向读写器r发送消息m1,发送内容为:α,pidt,seq,fid。其中seq为最后一次接收到的服务器更新的动态追踪序列。
fid代替标签id的作为过滤信息的唯一标识,用来在读写器的动态过滤表中判断是否进行过滤。可以有效利用读写器的计算和存储能力,减轻服务器的负担。
在遭受攻击或者意外情况导致失去同步的情况下,seq验证失败,标签自动启用内部的standby表备用键值对进行验证,使得pidt=sidj,kts=skeyj。这种失去同步再次验证的情况下,不需要再次发送seq进行验证,所以也不是每次验证标签都会发送seq。
step3.r→s:m3{ny,β,m2,idr}
在收到来自标签的信息m2之后,如果fid不为空,则在最新的过滤表中,查询是否存在fid,然后根据动态过滤表执行过滤操作来判断是否过滤本次验证申请。若此次申请并未被过滤,则进行下一步验证。生成一个随机数nr,计算
step4.s→r:m4{pseqt,γ,δ,pfid(optional)}
收到来自读写器的消息m3后,首先验证seq是否相等,不相等则可能发生不同步现象,中断此次认证。若是合法标签且有提前注册的standby备用表可以再次申请,更新seq后解决不同步现象。如果通过了第一步的动态追踪序列认证,计算
读写器和标签都认证成功后,服务器生成一个新的seq动态追踪序列seqnew=n,n为服务器生成的随机数,然后计算
特别地,作为进一步的优选实施例,如果本次认证启用了动态过滤表机制的话,在此步骤中,无论验证成功还是失败,我们都需要计算pfid,如果认证不成功,则将失败数据返回给读写器,用于防止来攻击者的重防攻击。如果成功则需要计算
特殊情况下,作为进一步的优选,在失去同步时,标签会使用standby备用表中的未使用过的(sidj,skeyj)键值对用于验证,消息中不包含seq的请求。此时,从服务器的sid集合中寻找有没有满足的sidj=pidt。若存在,则找出对应的skeyj,计算h(sidj||skeyj||nx||idr)是否等于来自标签的α。不相等则中断连接,相等则生成一个新的seqnew,分别计算pseqt,γ,δ的值,更新共享密钥的ktsnew,步骤与上述情况相同。
step5.r→t:m5{pseqt,γ}
在收到服务器返回的的消息m4后,首先验证读写器是否满足h(idr||nr||krs)=δ,验证失败则中断验证。若δ验证成功,则转发pseqt,γ到标签。特别地,若m4消息中含有pfid标志,接受pfid,计算
标签收到消息后,计算
但是,标签还需要同步后端服务器更新seq和kts,其中新的seq=seqnew,新的kts更新为h(kts||idt||seqnew)。这样标签中的共享密钥和动态追踪序列更新到与服务器同步,在下次认证中使用。需要特殊说明的是,在失去同步的情况下,标签启用standby表中的键值对发出认证申请,认证成功后,需要用同样的方法同步后端服务器更新seq和kts,同时删除使用过的键值对,这样就解决了不同步问题。
作为进一步的实施例,如果失去同步情况下,使用的standby备用表验证方式和正常情况下使用一次性假名与动态序列的方法都具有强匿名性。为保证备用验证方式的安全性,备用验证方式的standby表也是在注册阶段通过安全信道由服务器发送到标签的。standby验证只是用来处理去同步攻击和dos攻击的。而且每次使用过的standby键值对,要在标签和服务器中同时删除,可以防止伪造攻击和中间人攻击。另外,动态追踪序列seq很好的判断了当前标签认证是否和服务器失去同步,而且也相当于第一层基本验证,大大增加了验证速度,能够防止重放攻击和中间人攻击等。读写器中的动态过滤表在多次验证中动态生成,动态过滤表最大化的利用了读写器的存储和计算功能,减轻了后端服务器短时间内进行大批量运算的负担。
作为进一步的实施例,动态过滤表存储到读写器的内部。读写器内部的存储器可以分为系统存储区和用户存储区两部分。在用户存储区上建立数据表,优选的是,,选取用户存储区的10%作为过滤表存储较为合适。在认证过程中,读写器通过接受后台服务器返回的信息对用户存储区内的过滤表进行更新,为了防止动态过滤表被填满,系统定期自动执行擦除,合理释放内存空间并对保留的记录进行排序。
动态过滤表通过在认证过程中接受来自服务器返回的认证信息,保存相应标签的认证成功或失败的记录,用以对标签申请执行过滤操作。动态过滤表的建立是动态的,随着验证次数的增加而不断更新。对于来自攻击者重复的非法认证申请,读写器将执行过滤操作;短时间内的重复申请和超过认证上限次数的申请都会被作为无效申请执行过滤操作;对于有效的合法申请或者第一次认证申请,读写器将转发相应信息至服务器。动态过滤表对于面临较多重放攻击和无效申请的rfid系统环境,有着降低服务器计算负荷,提高rfid系统的运行效率的作用。
表2动态过滤表结构
“fid”是过滤表的主键,为了保持动态的共享密钥和保持安全协议的强匿名性,与基于静态id机制下的索引内表的实现有所不同,它并不时真正的标签id,而是用过滤标识fid代替,fid是单向hash函数的加密后的信息fid=h(idt||idr||k)来进行唯一标识,fid只能用于读写器上的过滤判断,因即使它被截获,它也不可能被追踪或者利用,这保证了原协议的强匿名性。
h(),表示轻量级hash函数,即单向散列函数。
k为动态共享密钥,会在每次验证结束后动态更新。
idt和idr分别为标签和读写器的唯一标识。
flag是验证成功与否的标识,如果成功令flag=1,否则flag=0;
n是记录短时间内同一fid申请验证的次数,对应的n自动加1,初始值为0。
maxn是允许同一个fid在一定时间内的最大验证次数。与n对比,这样既可以过滤短期内的重复申请,也可以有效地防止重放攻击。
lastt是记录从该fid的最后一次经过验证判断从服务器返回的时间。
首先在读写器中建立一个上表所示数据结构的空表,具体大小根据标签数量和用户存储区判断,一般占用5%到10%的存储区空间,同时能够站总标签数的5%左右最为合适,这样既不会使得空间太大造成浪费和额外的计算量,也不会使得表太小,达不到好的过滤效果。遵循上一节提到的动态过滤表的结构,在读写器的用户内存区上初始化一个对应结构的空表,表3展示了动态过滤表的一个示例。
表3动态过滤表的示例
在强匿名rfid安全协议中,不能直接使用静态的索引内表,而是动态建立过滤表,主要有两方面的原因:一是基于动态共享密钥的强匿名安全协议,它是一种基于动态id机制的安全协议,密钥在每次结束认证都需要更新,另外,标签标识idt是包含在哈希函数里结合动态密钥和随机数作为参数进行加密,利用加密后的一次性假名进行传输,为了保持它的强匿名性,在整个认证过程中,即使是读写器也无法推算真正的idt。因此动态过滤表在初始化以后,每次服务器验证结束将验证消息(失败或者成功)加密返回给读写器,读写器解密后更新动态过滤表,随着认证次数的增多,动态过滤表会随之变化。
针对基于动态共享密钥的强匿名rfid安全协议,使用fid作为过滤标识,fid=h(idt||idr||k),它本身的值不会暴露任何信息,符合标签强匿名性的需求。k是在每次验证结束后动态更新的,如果验证失败,那么fid=h(idt||idr||kold),如果成功则使fid=h(idt||idr||knew),即如果验证成果共享密钥会由kold更新为knew,然后计算过滤标识fid返回给读写器,如果验证失败,将失败信息值返回给读写器。这样既可以防范已经验证为非合法标签的重放攻击,也能过滤合法标签短期内无效的重复申请。
第一次标签发送申请,经过读写器,此时过滤表为空,转发到后台服务器,进行验证,返回其它加密消息和fid,fid插入到过滤表最上一行,同时根据实际情况更新flag,成功flag=1,失败flag=0。更新lastt为最新时间。经过多次标签的验证,读写器根据服务器返回的数据执行更新算法,循环往复执行这一过程,实现动态过滤表就的建立。但是过滤表是固定大小的,如果过滤表满了,再次有记录想要插入到过滤表中,那么则删除时间最早的一条记录,并由之替换,过滤表中的数据记录按照排序算法进行排序,最新的放在表的上面,当进行过滤的时候优先比对排位较高的记录,提高执行效率。
标签发送fid=h(idt||idr||k),及其他加密验证信息到读写器,读写器判断过滤表中是否存在对应的fid,若存在,如果flag=1,则判断为上次已经通过的验证。根据lastt的值进行下一步判断,如果是短时间内(根据标签的频率和实际情况定义)的再次申请则视为重复申请,执行过滤操作,不转发此消息给服务器。若不是短时间内的重复申请,如果n+1<maxn,则令n=n+1并且转发其它加密信息到后台服务器,否则n+1=maxn,超出一段时间内允许申请的最大次数,则过滤此次认证申请。如果flag=0,是已经验证为非法的申请,当时从服务器返回给读写器的fid中的共享密钥仍为kold,即旧的共享密钥。一般为攻击者利用截获的过期加密信息进行攻击,则直接执行过滤,这样可以有效地防止重放攻击。
如果过滤表中没有对应的fid,然后直接转发其它加密信息到后台服务器进行认证。后端服务器对其完成认证后将相应的信息返回给读写器,读写器更新动态过滤表,并将信息转发给标签。
对于来自非法攻击者的重复攻击,通过过滤表中的非法记录直接执行过滤操作。来自合法标签的申请,根据预设的maxn判断申请次数未达上限而且判断为不是短时间(定义为l)内重复的无效申请,读写器将转发申请信息至后端服务器。对于失败的申请,则返回失败信息,同时是更新动态过滤表。
通过模拟协议认证过程,通过对协议中的计算、加密、认证和更新过程进行模拟数值实例分析,以验证其可行性。
认证参数初始化:
待认证标签:a5314071f5cbb8d44d6758aa8e02384a
待认证读写器:7e6f98c91e59ea8291f0e081f92a3b77
标签注册阶段数据生成:
动态共享密钥kts=a37bda413d67a3a5a0a2f1e82d56872d,动态追踪序列seq=313da11632475a8d9520f5cac00103e4。
发起认证:
读写器发送请求消息m1到标签。
标签生成一次性随机数nt=038dedc09caad674d8404da287e3948d,标签计算
读写器首先匹配后台过滤表,由于是第一次申请,不执行过滤。读写器生成一次性随机数nr=fa18e2567b1eb7c00896d1010ada6bf8。读写器计算
后端服务器认证:
服务器收到来自读写器的消息m3,服务器验证动态追踪序列seq,由于本次认证实例使用的是合法标签和读写器,故验证成功。读写器异或计算
服务器密钥更新:
服务器开始执行更新操作,生成新的动态追踪seqnew=99e41363fd2ee0e00d4b37627c763521,计算
读写器认证:
读写器收到服务器返回的消息m4,读写器通过hash函数计算h(idr||nr||krs)=ef32a47d3b6172491a0cbe353fb1ccb6,与来自服务器的δ相等,δ验证成功。通过异或计算提取pfid中过滤信息,更新动态过滤表。读写器转发信息m5={pseqt,γ}到标签。
标签认证和密钥更新:
标签收到来自读写器返回的消息m5,标签计算h(pseqt||kts||idt||nt)=ef32a47d3b6172491a0cbe353fb1ccb6,γ验证成功。标签通过异或运算得到更新后的动态追踪序列并在标签端更新seqnew=99e41363fd2ee0e00d4b37627c763521,标签计算并更新下一轮的共享密钥kts=5bc44a901a947b67855be81bfced68a6,此时标签、读写器和后端服务器相互认证成功,认证结束。
安全协议的形式化分析将安全协议的非形式化描述转换为规范的逻辑符号表示,根据逻辑推理得到协议可能存在的安全缺陷,使用最为广泛的方法是由burrows,abadi和needham三人一起提出的ban逻辑,它是一种基于推理的模态逻辑方法。采用这种方法,对申请协议进行安全性证明。
ban逻辑包括协议参与者(主体),密钥和公式三种基本对象。通常使用字母p,q表示主体,x,y表示公式,k表示密钥。用到的一些主要的ban逻辑基本结构如表4所示。
表4ban逻辑基本结构
ban逻辑分析共有六个基本推理规则,本申请在分析过程中主要引用了其中的4个:
消息含义规则:p相信p和q之间的共享密钥k,且p收到过q发送的以
密钥k进行加密的消息{x}k,则p相信q发送的公式x。
控制权规则:若p相信q具有x有控制权,同时p相信q相信x,则有p相信x。
新鲜规则:p相信x是新鲜的,那么x和y的组合消息整体对于p来说也是新鲜的。
信念规则:如果p相信x和y组成的级联信息,则p也相信x。
使用ban逻辑进行形式化分析需要遵从一定的步骤,首先确认初始状态建立起协议的假设集合,然后进行协议理想化描述,对协议会话进行解释,最后使用推理规则进行推导,ban逻辑形式化分析的基本步骤如图5所示。
根据ban逻辑形式化分析的基本规则和步骤,下面提出的基于动态共享密钥和hash函数的强匿名安全协议进行安全性证明。为了更好的分析我们提出的协议,针对本文提出的基于动态共享密钥和hash函数的强匿名认证协议,由于共享密钥会动态更新,对规则1进行更为详细的表述,原始规则1中
第一次消息m1省略,因为它对协议没有实际作用,协议形式化如下:
1.
2.
3.
4.
协议的初始化假设集合如下:
1.
2.
3.s|≡t|~m2
4.
5.
协议的理想化模型如下:
1.s|≡m3,s|≡r|~β,s|≡t|~pidt
2.r|≡m4,r|≡s|~δ
3.t|≡m5,t|≡s|~γ
应用上文提到的基本规则以及扩展规则进行逻辑推理,最终达到证明协议安全性的目的。
根据协议流程,服务器若满足
可以得到,然后根据规则3和规则4,可以写出:
若
继续应用规则3和规则4有:
和
同样地,针对读写器若有
应用规则5可以写出
然后利用规则3和规则2,能够写出
和
以及
对于标签t来说,若有
应用规则5得到如下详细描述
通过上述ban逻辑推导,可以看出,标签,读写器和后端服务器各自都具有足够的认证能力来保证安全,达到了协议的安全目标。通过ban逻辑分析证明了提出的协议在标签读写器和后端服务器进行双向认证的安全性。
尽管本发明/发明的实施方案已公开如上,但其并不仅仅限于说明书和实施方式中所列运用。它完全可以被适用于各种适合本发明的领域。对于熟悉本领域的人员而言,可容易地实现另外的修改。因此在不背离权利要求及等同范围所限定的一般概念下,本发明并不限于特定的细节和这里示出与描述的图例。