射频识别系统隐私认证方法
技术领域
本发明涉及射频识别技术,特别涉及射频识别标签认证有关的安全技术。
背景技术
射频识别(Radio Frequency Identification,简称“RFID”)是使用无线射频技术在开放系统环境中进行对象识别。这种技术的优点之一是无需物理或其它任何可见的接触。它是计算机系统和现实世界的联系纽带,为计算机感知和识别现实世界提供了一种高效、价廉的方式。
RFID主要组成部分包括后台数据库(Back-end database,简称“DB”)、读写器(Reader)和标签(Tag)等。其中后台数据库是运行于硬件平台的数据库系统,通常认为其具有强大的计算和存储能力,同时它包含系统中所有标签的信息。读写器(Reader)是一个带有天线的无线发射与接收设备,负责对标签中的信息进行读写。标签(tag)是带有天线的微型电路,通常没有处理器,仅由数千个逻辑门电路组成。标签中存储有唯一的身份标识(ID)和一些其它信息。整个RFID系统如图1所示。
由于原始的标签,即只具备存储和通信能力而不具备计算能力的标签不能适应当前应用需求,特别是安全的RFID协议要求标签要具有计算能力。目前出现了一种在原始标签存储和通信功能基础之上增加了计算伪随机函数和生成随机数功能的新标签(如RF Code公司的MantisTM系列产品),本发明中即使用这种新型标签。
通常认为,标签与读写器之间的信道是不安全信道。而读写器与后台数据库之间的信道是安全信道。因此,在RFID系统安全通信协议的设计中,可以认为读写器与后台数据库是一体的(即整体看作通信协议中的一方,另一方是标签)。因此,在本发明中,我们用“读写器”指代“读写器和后台数据库”。
现有的RFID认证协议是典型的两轮“请求-响应”协议,其基本模型如图2所示。读写器首先向标签发出认证请求;然后标签返回认证响应信息,比如标签ID和存储的产品信息等等。
两轮的RFID认证协议虽然简单,但是存在致命的安全缺陷,即使用者在被认证时的隐私信息将被泄漏。因为当读写器发出请求后,标签自动将它的唯一的序列号(或ID)发送给读写器而不通知标签的使用者。在可扫描范围里,恶意的读写器能运行伪造的认证过程来探测标签以得到标签中记录的敏感信息。
为了解决使用者隐私泄漏问题,现有的协议在RFID认证协议中使用了加密的方法。该认证方案如图3所示。每个标签与合法的读写器共享唯一的一个密钥k。读写器将认证请求和一个随机数r发送给标签,标签用一个哈希函数,比如MD-5、SHA-1等计算加密结果并返回给读写器,读写器在后台数据库中搜索k,直到找到某个密钥k,满足h(k,r)与标签返回的认证加密消息相等为止。在这种体制中,存在严重缺陷:搜索密钥过程是线性搜索,即穷举搜索,效率太低。
为了达到高效的隐私认证,现在出现了基于密钥树结构的隐私认证协议。该类协议提供了对数级复杂度的搜索算法。在这类协议模型如图4所示,每个标签拥有多个密钥(比如d个)而不是一个。读写器构造一棵虚拟的层次树结构(称为密钥树,我们以一棵深度为2的树为例,如图5所示)来组织这些密钥。树中的每个节点存储一个密钥。每个标签与唯一的叶子节点相关联。从根节点到叶子节点路径上的所有密钥就是该叶子对应的标签所掌握的密钥。如果树的深度为d并且树的分支因子为δ(密钥树设为平衡树),那么每个标签拥有d+1个密钥,为方便起见,记标签Ti中存储的密钥为(ki 0,ki 1,...ki d)。整棵树能支持N=dδ个标签(即密钥树中有N个叶子节点)。在认证协议中,标签用d个密钥分别对同一随机数计算d次产生认证信息。收到标签的认证信息后,读写器在密钥树上做深度优先搜索找到一个叶子节点。
上述基于树的协议具有效率高的特点,但是缺点也非常明显。由于缺少密钥更新体制,在敌手的主动攻击下是不安全的。这些协议中的密钥树为静态树(即树中存储的密钥不变)。由于树结构的特点,树中每个叶子节点,或多或少要与其它叶子节点共享一些密钥。这样,敌手通过物理破解(即用特定设备将标签中信息全部读出)一个或几个标签就能获得其它节点的密钥信息。申请人的研究表明,对于一个拥有220个标签的RFID系统,敌手仅仅需要破解200个标签,就能以超过90%的概率成功跟踪识别系统中所有标签。
前面所述的所有RFID隐私认证方案都是两轮协议,这些协议还有一个共同的缺点,即只有单向认证。所谓“单向认证”,即只有读写器能够认证标签的合法性,而标签不能认证读写器的合法性。这样标签在面对恶意读写器的扫描时,将会泄漏秘密信息。
发明内容
基于上述两轮协议的缺点,本发明中提出了一个三轮的隐私认证方法,本发明中的协议方法具有很强的安全性,在克服了上述两轮协议所有缺点的同时,还具有如下三个主要优点:
1.认证过程效率高,具有对数级别的认证效率;
2.动态的密钥更新,能实时、动态的更新系统中的密钥,增强了抵抗主动攻击的能力;
3.双向身份认证(即读写器和标签都能认证对方身份的合法性);
为达到上述特点,本发明提供了一种具有强安全,低负荷特性的隐私认证协议(Strong and lightweightRFID Private Authentication,简称“SPA”)。各部分如下:
A系统初始化,在建立RFID系统时,系统生成密钥树,并对所述密钥树中每个非叶子节点分配多个相同的密钥,每个标签分配的密钥为密钥树中从根节点到每个标签对应的叶子节点路径上的密钥,并设置密钥树各节点的状态;所述系统生成的密钥树为平衡树;
前向认证过程,即读写器认证标签的过程,包括以下B和C步骤:
B标签识别步骤,读写器向所述标签发出认证请求,标签发送认证信息,收到认证信息后,读写器识别标签;
C密钥更新步骤,读写器完成认证标签后,读写器完成密钥树更新,并将更新信息通知标签;
后向认证过程,即标签认证读写器的过程,包括读写器身份认证码生成和密钥更新同步。
D当系统动态变化时,即有标签加入或者离开RFID系统时,执行系统维护步骤,系统维护密钥树。
在所述方法中,前向认证过程在协议的第一和第二轮通信后完成,后向认证过程在协议的第三轮通信后完成。
在所述方法中,认证信息使用伪随机函数计算。
在所述方法中,认证信息可以使用密码学意义上的哈希函数计算。
在所述方法中,系统生成密钥树,并对密钥树中每个节点分配多个密钥,并设置各个节点状态。
在所述方法中,认证信息由标签以分配的密钥使用伪随机函数对读写器发出的认证请求计算产生。
在所述方法中,认证信息由标签以分配的密钥使用密码学意义上的哈希函数对读写器发出的认证请求计算产生。
在所述方法中,读写器对密钥树使用深度优先搜索来确定标签使用的密钥。
在所述方法中,读写器仅对本次认证中所使用的密钥进行更新,并按照由底至顶的顺序渐次更新密钥树中的密钥。
在所述方法中,密钥树中每个非叶子节点均引入了一些状态位,对每个非叶子节点来说,状态位反映了其孩子节点密钥更新的状态,每个状态位对应一个孩子节点,一旦某个孩子节点更新了密钥,系统设置父节点中该孩子节点对应的状态位,当某节点所有的孩子节点均更新密钥后,该节点更新其密钥。
在所述方法中,在认证协议第二轮,密钥树中此次认证所涉及的密钥更新后,读写器生成密钥同步信息在认证协议第三轮发送给标签;标签根据收到的密钥同步信息更新标签中存储的密钥。
在所述方法中,根据一个旧密钥生成新密钥,使用伪随机函数计算。
在所述方法中,根据一个旧密钥生成新密钥,使用密码学意义上的哈希函数计算。
在所述方法中,系统在有新的标签加入RFID系统时,为该标签分配密钥树中的密钥;系统在有标签从RFID系统中被撤销时,设置密钥树中节点状态,使标签被撤销后,不影响系统中其它标签的识别和密钥更新。
在所述方法中,标签的身份,是该标签与读写器共享的多个密钥。
通过比较可以发现,本发明的技术方案(SPA)与现有技术相比,主要优点在于,SPA基于树结构,并为树结构提供了一致的动态密钥更新,在不增加硬件开销的同时,为RFID系统提供了双向认证。在认证效率上,与现有技术相比,其密钥搜索效率还是对数级,没有降低认证效率。SPA提供了动态密钥更新,能有效抵抗现有的对RFID系统的所有被动和主动攻击,特别是现有技术不能抵抗的破解攻击。
附图说明
图1是现有RFID系统示意图。
图2是现有RFID系统认证协议示意图。
图3是现有RFID系统中基本的隐私认证协议示意图。
图4是现有RFID系统中基于树结构的隐私认证协议示意图。
图5是现有RFID系统中基于树结构的隐私认证协议密钥树示意图。
图6是本发明RFID系统隐私认证协议,读写器和标签间认证过程示意图。
图7是本发明RFID系统隐私认证协议,标签识别流程图。
图8是本发明RFID系统隐私认证协议,密钥更新流程图。
图9是根据本发明小规模实施例的RFID系统密钥树示意图。
图10是根据本发明小规模实施例的RFID系统隐私认证协议,密钥树更新的过程示意图。
图11是根据本发明小规模实施例的RFID系统隐私认证协议,有新标签加入时密钥树状态示意图。
图12是根据本发明小规模实施例的RFID系统隐私认证协议,有标签离开时密钥树状态示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面给出本发明的具体实施方式。
A.系统初始化
建立密钥树,将每个标签与一个叶子节点相关联。若系统中有N个标签,密钥树S的分支因子为δ,深度为d。密钥树中每个非叶子节点分配a个密钥,初始这些密钥均相同。另外每个非叶子节点分配δ个状态位,分别对应δ个孩子节点,初始每个状态位均为0。标签中的密钥为从根节点到该标签对应的叶子节点路径上所有节点的密钥。注意,因为每个非叶子节点有a个密钥,要从其中选择一个,又因为初始这a个密钥相同,故只需要取任意一个密钥即可。
下面介绍本发明的三轮认证协议,如图6所示。
前向认证过程:
在协议第一轮通信中,读写器生成一个随机数r1,并将r1同认证请求发送给标签。
标签收到认证请求和随机数r1后,使用伪随机函数或者密码学意义上的哈希函数进行计算,函数的输入为随机数r1和标签中存储的密钥,输出为标签的认证信息。最后生成一个随机数r2,并将r2和认证信息作为协议第二轮通信发送给读写器。
读写器收到标签的认证信息后,执行以下步骤:
步骤1,根据标签的认证信息执行“标签识别”过程,即所述读写器向所述标签发出认证请求,所述标签发送认证信息,收到认证信息后,所述读写器识别所述标签,以认证标签的合法身份;
步骤2,标签的身份认证通过后,执行“密钥更新”过程,即所述读写器完成认证所述标签后,所述读写器更新密钥树,所述读写器生成身份认证码和密钥更新同步信息,从而更新本次认证所涉及的密钥树中密钥,并使用随机数r1、r2和更新后的一个密钥生成读写器的身份认证信息。
后向认证过程:
在协议第三轮,读写器将上面步骤2生成的身份认证信息和密钥更新同步信息发送给标签。收到这些信息后,标签首先验证读写器身份认证信息的合法性,然后根据密钥更新同步信息更新存储的密钥。
D.系统维护
当有标签加入RFID系统时,读写器检查密钥树S中是否有空的叶子节点。如果有,读写器将该标签与空叶子节点关联,并将从根到该叶子节点路径上的密钥分配给标签。如果没有空叶子节点,读写器先创建一个新的深度为d-1(即比系统密钥树层数少1层)的密钥树S’,S’的分支因子也为δ。S’的创建过程如系统初始化步骤A所述。然后将S’的根节点与S的根节点相连,即S’根节点的父节点为S的根节点,S’成为S的一棵子树。再将标签与S’中一个空叶子节点相关联并分配密钥。
当系统中有标签离开后,读写器锁住相应叶子节点的父节点中对应状态位为1,直到有新标签分配到该空叶子节点,再将相应状态位置为0。这样做的目的是保护系统中其它标签的密钥更新不受影响。
所述B“标签识别”过程如下:
从密钥树根节点开始,读写器首先用根节点的a个密钥分别计算r1,并与标签发送的认证信息中第一项比较,如果其中一个计算结果与认证信息第一项(第零项是标签生成的随机数r2)存在匹配,读写器进入密钥树下一层,用该层中各个节点的密钥计算r1,如果有一个节点的计算结果与认证信息第二项匹配,则从该节点进入下一层。执行同样的过程,直到标签所属叶子节点结束,由上至下,逐层识别。上述过程是递归过程,其流程如图7所示。
所述C“密钥更新”过程如下:
每个非叶子节点有δ个状态位(δ是树的分支因子)。对每个非叶子节点来说,各状态位反映了对应孩子节点密钥更新的状态。每个状态位对应一个孩子节点。
密钥更新条件:一旦某个孩子节点更新了密钥,父节点中该孩子节点对应的状态位就设置为1。当所有的状态位均为1时,该节点更新其密钥。
每次认证成功后,读写器先更新标签对应叶子节点的密钥,然后用上述方法从叶子节点的父节点开始,由下至上,逐层更新。密钥更新的过程是递归过程,其流程如图8所示。
样例
为使本发明的目的、技术方案和优点更加清楚,下面介绍一个小实施例,即系统中密钥树是深度为2的二叉树,每个非叶子节点包含两个密钥和两个状态位,系统共能容纳四个标签,并结合附图9至12对本发明做进一步的详细描述。
A系统初始化
如图9所示,该实施例包含四个标签,即系统的密钥树S包含四个叶子节点,每个标签与一个叶子节点相关联。S中每个非叶子节点j被分配两个密钥,工作密钥k
j和临时密钥tk
j。每个密钥都是由系统随机均匀生成,初始tk
j=k
j。另外,每个非叶子节点j分配两个1比特状态位s
j l和s
j r,初始
。s
j l和s
j r将会在密钥更新步骤中使用。
系统初始化时,每个标签分配的密钥为密钥树中从根节点到其对应的叶子节点路径上的密钥。例如图9中标签T1,读写器为其分配的密钥为(k0,k1,1,k2,1)。由于初始tkj=kj,故为T1分配tk或k均可。为描述方便起见,我们记标签Ti中分配的密钥为(k0 i,k1 i,...,kd i),这里d为密钥树的深度,图9中所示实施例中,标签T1中分配的密钥记为(k0 1,k1 1,k2 1)。
前向认证过程
如图6所示,在协议第一轮中,读写器向标签T
i发送一个认证请求和一个随机数r
1。当T
i收到请求后,随机生成一个随机数r
2并计算序列(h(k
0 i,r
1),h(k
1 i,r
1),h(k
2 i,r
1))。T
i向读写器返回认证信息
为描述方便起见,我们记U=(u,v
0,v
1,v
2)。
读写器收到标签的认证信息后,执行以下步骤:
步骤1,根据标签的认证信息执行“标签识别”过程,即所述读写器向所述标签发出认证请求,所述标签发送认证信息,收到认证信息后,所述读写器识别所述标签,以认证标签的合法身份;
步骤2,标签的身份认证通过后,执行“密钥更新”过程,即所述读写器完成认证所述标签后,所述读写器更新密钥树,所述读写器生成身份认证码和密钥更新同步信息,从而更新本次认证所涉及的密钥树中密钥,并使用随机数r1、r2和更新后的一个密钥生成读写器的身份认证信息和密钥更新同步信息。
步骤1中,“标签识别”过程如下:从密钥树根节点开始,读写器首先用k0和tk0加密r1(即计算h(k0,r1)和h(tk0,r1)),并与Ti发送的认证信息中v0比较,如果存在匹配,读写器调用递归算法来识别Ti,在密钥树中,从根节点开始到Ti所属叶子节点结束,由上至下,逐层识别。以图9中标签T1为例。读写器从根节点开始计算h(k0,r1)和h(tk0,r1),并与T1发送的认证信息中v0比较。若存在匹配,读写器计算h(k1,1,r1)、h(tk1,1,r1)、h(k1,2,r1)和h(tk1,2,r1),并与v1比较。若v1与h(k1,1,r1)或h(tk1,1,r1)匹配,读写器计算h(k2,1,r1)和h(tk2,2,r1),并与v2比较,因为v2=h(k2,1,r1),读写器识别该标签为T1。
简单地来说,读写器识别标签的过程就是读写器在密钥树上做深度优先搜索的过程。即读写器从密钥树根节点开始,用节点密钥和认证请求中的随机数作为输入计算哈希函数,并将结果与标签发出的认证信息比对。由上至下,在密钥树中每一层找到一个匹配节点后,从该节点进入下一层,直到叶子节点为止,此时读写器已识别出标签。
步骤2中,“密钥更新”过程如下:在生成新密钥时,与认证信息生成一样,使用哈希函数h。设k
j是密钥树中节点j的旧密钥,读写器从该旧密钥计算新密钥
为不影响其它标签的认证,对更新了密钥的非叶子节点j,本发明使用临时密钥tk
j来存储j的旧密钥。这样可以不影响属于j的子树中其它标签的认证过程。
如图9所示,该实施例密钥树中每个非叶子节点j包含两个孩子,那么有两个状态位s
j l和s
j r,其中
系统初始化时
在任意时刻,如果j的左或右孩子节点更新了密钥,则读写器将相应的s
j l或s
j r置为1。此时,如果
读写器先将j的旧密钥k
j存储到tk
j中,然后更新k
j,并将j的父节点相应状态位置1。由下之上重复上述过程,直到根节点或某个节点不满足更新密钥条件为止。
读写器身份认证信息和密钥更新同步信息生成过程如下:当读写器完成密钥更新,计算
并将σ与“同步信息”发送给标签T
i。σ是读写器的身份认证码,用于标签T
i认证读写器;“同步信息”包括密钥树中更新了密钥的节点所在的层次信息,用以通知标签在认证读写器之后更新标签中与读写器共享的密钥,以达到与密钥树当前状态同步。
举例来说,如图9所示,该实施例中,假设读写器完成对T2的认证,并更新第一层和第二层的密钥k1,1和k2,2,那么“同步信息”为(1,2)。
为了更好地描述本发明中密钥更新的过程,我们以下面的例子来说明本发明中小规模实施例中的密钥更新的过程。假设系统中四个标签T1,T2,T3和T4的认证顺序为(T1,T2,T3,T4)。密钥树状态变化如图10所示。
初始状态如图10(a)所示。当标签T1被认证后,读写器置T1的父节点中与T1相关的状态位为1。另外,读写器为叶子节点T1生成一个新密钥。此时密钥树状态如图10(b)所示。
当标签T2被认证后,T2的父节点中相应的状态位被置为1,读写器更新叶子节点T2及其父节点的密钥。如图10(c)所示。
当标签T3被认证后,此时情况与标签T1被更新后情况类似。需要指出的是,因为T1和T2的父节点的所有状态位均被置为1,读写器会将T1和T2的父节点的所有状态位重置为0,这样当T1或T2下次被认证时,其密钥将可以再次更新。此时密钥树状态如图10(d)所示。
当标签T4被认证后,T4的父节点和根节点所有的状态位都为1。因此读写器更新从叶子节点T4到根节点路径上所有的密钥。此时密钥树状态如图10(e)所示。
因为标签T1不知道T1的父节点和根节点的密钥已被更新,在第二次认证T1时,它将继续使用旧密钥。如本发明中密钥更新算法所描述,每个节点将旧密钥存储在临时密钥tk中。根据本发明中标签识别算法所描述,T1能被成功认证。在T1被认证后,读写器通过发送给T1的“同步信息”通知T1更新从T1的叶子节点到根节点的密钥。此时情况如图10(f)所示。
后向认证过程
在协议第三轮,读写器将所述步骤2生成的身份认证信息和密钥更新同步信息发送给标签。收到这些信息后,标签首先验证读写器身份认证信息的合法性,然后根据密钥更新同步信息更新存储的密钥。
在本实施例中,当T
i收到这些消息后,T
i首先校验
是否成立。如果成立,T
i根据“同步信息”更新自己掌握的密钥。比如,在本实施例中,如果T
2收到“同步信息”为(1,2),则分别计算新密钥
和
D系统维护
当有标签Ti加入RFID系统时,读写器检查密钥树S中是否有空的叶子节点。如果有,读写器将Ti与空叶子节点关联,即将从根到该叶子节点路径上的密钥分配给Ti。如果没有空叶子节点,读写器先创建一个新的深度为d-1(即比系统密钥树层数少1层)的密钥树S’,S’的分支因子与S一样,S’的创建过程如系统初始化步骤所述。然后将S’的根节点与S的根节点相连,即S’根节点的父节点为S的根节点,S’成为S的一棵子树。再将Ti与S’中一个空叶子节点相关联并分配密钥。如图11所示,当有新标签T5加入系统时,读写器创建一棵新的子树并为T5分配一个叶子节点。为T5分配的密钥为(k0,k1,3,k2,5)。当系统中有标签Ti离开后,读写器锁住Ti父节点的对应状态位为1,直到有新标签分配到该空叶子节点,再将相应状态位置为0。为状态位加锁的目的是保护系统中其它标签的密钥更新不受影响。如果不这样做,因为叶子Ti为空,那么Ti父节点对应状态位将一直为0,根据本发明中密钥更新算法,从Ti到根节点路径上所有非叶子节点中的密钥将不会得到更新,这样就影响了其它标签的密钥更新。所以必须将Ti父节点对应状态位置1,以允许其它标签更新密钥。如图12所示为当T3离开系统时,系统密钥树状态。