发明内容
本发明的目的之一为提供一种更加安全的NFC认证方法和系统。
本发明提出一种NFC认证方法,包括:
NFC卷标应答于NFC装置的携带第一随机数的询问指令,将预设的卷标第一密钥与所述第一随机数进行哈希运算得到第一运算结果,并将所述第一运算结果以及NFC卷标UID(Unique Identifier,唯一标识码)发送至所述NFC装置;
所述NFC装置将所述第一运算结果、NFC卷标UID和所述第一随机数发送给数据库;
所述数据库根据所述NFC卷标UID查询预存储的数据库第一密钥,利用所述数据库第一密钥与所述第一随机数进行哈希运算得到第二运算结果,将所述第一运算结果与第二运算进行结果,并根据比较的结果判断NFC卷标的认证结果。
进一步,所述NFC卷标识别所述询问指令,根据预设的卷标第一密钥和所述第一随机数进行哈希(Hash)运算得到第一运算结果步骤后还包括:根据预设NFC卷标UID、预设第二随机数和所述NFC卷标的UID对所述第一运算结果进行掩码运算。
所述掩码运算具体为将所述第一运算结果根据所述NFC卷标的UID位串后,利用所述第二随机数进行掩码计算。
所述数据库根据所述NFC卷标UID查询预存储的数据库第一密钥前还包括:
对所述掩码后的第一运算结果进行去掩码计算,得到所述第一运算结果以及所述NFC卷标的UID。
进一步,所述NFC卷标认证通过后还包括:
所述数据库根据预设的数据库第二密钥和所述NFC卷标的UID进行Hash运算得到第三运算结果;
所述数据库发送所述第三运算结果到所述NFC卷标;
所述NFC卷标根据预先存储的所述数据库第二密钥和所述NFC卷标的UID进行Hash运算得到第四运算结果;当所述第三运算结果和所述第四运算结果相等时,数据库认证通过。
所述数据库发送所述第三运算结果到所述NFC卷标后还包括:NFC装置获取数据库第一密钥更新时间,并与当前时间进行比较,若时间差大于系统设定的密钥更新周期,则发送密钥更新信息到数据库;
数据库产生随机密钥更新序列L,与所述数据库第一密钥计算得出新密钥kx;将所述新密钥kx以及更新序列L通过NFC装置发给NFC卷标;
NFC卷标接收所述随机密钥更新序列L和新密钥kx,通过所述更新序列L和NFC卷标第一密钥计算新的密钥ky;当ky和kx一致时保存所述kx;将所述随机密钥更新序列L用新密钥kx加密后发送给所述NFC装置;
NFC装置利用之前保存的密钥kx解密得到值L′,当L′=L时,确定NFC卷标密钥更新成功,将新密钥kx发给数据库作为更新后的新密钥,同时,数据库更新本次更新时间和更新标志。在所述数据库第一密钥更新成功后,该方法还包括:NFC装置获取数据库第二密钥更新时间,并与当前时间进行比较,若时间差大于系统设定的密钥更新周期,则发送密钥更新信息到数据库;
数据库产生随机密钥更新序列L,与所述数据库第二密钥计算得出新密钥km;将所述新密钥km以及更新序列L通过NFC装置发给NFC卷标;
NFC卷标接收所述随机密钥更新序列L和新密钥km,通过所述更新序列L和NFC卷标第一密钥计算新的密钥kn;当kn和km一致时保存所述km;将所述随机密钥更新序列L用新密钥km加密后发送给所述NFC装置;
NFC装置利用之前保存的密钥km解密得到值L′,当L′=L时,确定NFC卷标密钥更新成功,将新密钥km发给数据库作为更新后的新密钥,同时,数据库更新本次更新时间和更新标志。
一种NFC认证系统,包括NFC装置、NFC卷标和数据库:
所述NFC卷标,用于响应于所述NFC装置携带第一随机数的询问指令,根据预设的卷标第一密钥和所述第一随机数进行哈希运算得到第一运算结果,并将所述第一运算结果和所述NFC卷标UID发送给所述NFC装置;
所述NFC装置,用于将所述第一运算结果、所述NFC卷标的UID与所述第一随机数发送给所述数据库;
所述数据库,用于根据所述NFC卷标的UID获取预存储的数据库第一密钥;利用所述数据库第一密钥及所述第一随机数进行哈希运算得到第二运算结果,并比较所述第一运算结果和所述第二运算结果,根据比较的结果判断NFC卷标的认证结果。
进一步,所述NFC卷标还用于根据所述NFC卷标的UID和预设第二随机数对所述第一运算进行掩码;所述掩码具体为将所述第一运算结果根据所述NFC卷标的UID位串后,利用所述第二随机数进行掩码运算。
所述数据库还用于对所述掩码后的第一运算结果进行去掩码计算,得到所述第一运算结果。
所述数据库还用于根据预设的数据库第二密钥和所述第一运算结果进行Hash运算得到第三运算结果;并将所述第三运算结果发送至NFC卷标;
所述NFC卷标,用于接收所述第三运算结果,根据预先存储的所述第二密钥和所述NFC卷标的UID进行Hash运算得到第四运算结果;当所述第三运算结果和所述运算结果相等时,NFC装置认证通过。
本发明通过NFC卷标和数据库之间的信息采用Hash运算传递,并通过对比Hash运算结果判断是否认证成功;在不增加NFC卷标成本的前提下增强了NFC的安全性。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
参照图1,为本发明一种NFC认证方法的一实施例的信令流程图;
在本实施例中采用的Hash运算以通用Hash函数算法为例:
在本发明实施例中NFC卷标和数据库都预先存储有一系列的密钥,在数据库中存储的密钥根据NFC卷标进行分类,每个NFC卷标对应一个队列的密钥。每次认证都按序使用密钥。
运用有限域GF(2w)中的多项式运算法则构造通用Hash函数
其中,信息和密钥均被分为n个数据信息块,M=(m1,...,mn),K=(k1,...,kn),w是每个信息块的位宽;mi,ki∈GF(2w),p是最高次数为w的不可约多项式。
步骤101、系统初始化,NFC卷标保存密钥;
步骤102、NFC装置发送携带随机数R的询问指令到NFC卷标;
步骤103、NFC卷标接收询问指令后计算得到第一运算结果a;
所述NFC卷标接收到询问指令后,识别所述询问指令;然后从自身内部EEPROM中读取预先存储的卷标密钥k1,利用所述卷标密钥k1和所述询问指令携带的随机数R进行Hash运算,公式为a=hash(R,k1),其中得到的a作为第一运算结果;
进一步的,为了达到更好的安全性,可以对第一运算结果a做一次掩码计算,采用公式M=f(a||c,p)。其中f=(x,p)表示将x用随机数p进行掩码,符号“||”表示位串,其中c为一个预设的固定值代表所述NFC卷标的唯一标识码(UID),p为一个预设的随机数。这样即使攻击者每次带相同的随机数R通过询问指令询问NFC卷标,由于随机数p的掩码,NFC卷标每次的响应是不同的,攻击者也不能跟踪NFC卷标,能够保障地点隐私,防止跟踪。
步骤104、NFC卷标发送所述第一运算结果a以及作为所述NFC卷标UID的c到所述NFC装置;
NFC卷标通过Hash运算得到第一运算结果a,采用响应消息的形式将所述第一运算结果a发送到所述NFC装置。当然,若NFC卷标对所述第一运算结果a进行了掩码,则将掩码后的M以响应消息的形式发送到所述NFC装置,掩码后的M中即携带了c。
步骤105、NFC装置转发所述第一运算结果a、NFC卷标的UID c和所述随机数R到数据库;
NFC装置将所述第一运算结果a和所述随机数R发送到数据库。在以下说明中都采用所述第一运算结果a经过掩码为例进行解释。
所述NFC装置可以通过防冲突机制识别到NFC卷标通过响应消息发送的M,然后发送所述M和所述随机数R给数据库。
步骤106、数据库获取数据库密钥k′1;
所述数据库接收到所述M和随机数R后,通过M中携带的c获取自身存储的数据库密钥k′1。如果所述NFC卷标是合法的,那么所述数据库密钥k′1和所述卷标密钥k1是相同的。
步骤107、数据库计算第二运算结果b;
数据库获取到随机数R和数据库密钥k′1后,采用b=hash(R,k′1)计算得到所述第二运算结果b。
步骤108、数据库对比所述第一运算结果a和所述第二运算结果b。
数据库此时已获取到M,通过f-1(a||c,p)运算后,去掉随机数掩码得到第一运算结果a;若步骤103中未对所述第一运算结果a做掩码计算,此处可以不用计算去掉随机数掩码的过程。
对比所述第二运算结果b是否等于所述第一运算结果a;如果所述NFC卷标合法,那么k′1和k1相同,经过同样的Hash运算得到的a和b也应该是相同光的,所以当所述第二运算结果b和所述第一运算结果a不等,则认为NFC卷标是伪NFC卷标,终止通信;所述第二运算结果b和所述第一运算结果a相等,则认为NFC卷标通过认证。
进一步的,还可以包括一下步骤:
步骤109、数据库计算第三运算结果N;
NFC卷标通过认证后,数据库取出预先存储的另一数据库密钥k′2,运算N=hash(k′2,c)。
进一步的还可以包括:所述数据库传送N=hash(k2,c)给NFC卷标后更新k′1,k′2。
步骤110、数据库发送第三运算结果N到NFC卷标;
这里的发送需要通过NFC装置转发。
步骤111、NFC卷标计算第四运算结果T;
NFC卷标接收到N后,从NFC卷标芯片内部EEPROM中读取另一卷标密钥k2,然后进行运算T=hash(k2,c)。
步骤112、NFC卷标对比所述第四运算结果T与所述第三运算结果N。
所述NFC卷标比较所述第三运算结果N与所述第四运算结果T。若所述第三运算结果N与所述第四运算结果T相等,则NFC装置通过认证,此时,交互认证完成,NFC装置对NFC卷标进行一系列需要的操作。若所述第三运算结果N与所述第四运算结果T不等,则NFC装置认证失败;此处认证失败包括两种情况:(1)多个NFC卷标冲突时,除了被认证的NFC卷标,其他NFC卷标均不更新k1、k2;(2)认为NFC装置是伪NFC装置,NFC卷标不对NFC装置的其他指令进行响应。在整个交互认证完成后,数据库和NFC卷标将以相同的方式更新密钥k′1、k′2、k1、k2。具体的密钥更新方式如下:
设定k1(k′1),k2(k′2)(NFC卷标和数据库里的),已经在数据库中给k1,k2分配了各自的上次更新时间t1,t2,并且有各自的更新标志F1,F2(0表示成功,1表示失败),只有认证通过才会更新密钥。以k′1为例:
首先,k′1经过认证后,NFC装置读取上次k′1更新时间并与当前的时间进行比较,若时间差大于系统设定的密钥更新周期,则进行更新密钥,此时NFC装置发送信息到数据库。数据库产生随机密钥更新序列L,与数据库里的k′1,计算得出新密钥kx,新密钥通过NFC装置发给NFC卷标。NFC卷标收到后进行解密,可以得到随机密钥更新序列L和新密钥kx,通过接收到的所述更新序列L和NFC卷标的k1计算新的密钥ky,如果ky和kx一致,说明更新密钥正确,将新密钥替换旧密钥,并保存。更新后,NFC卷标将所述更新序列L用新密钥加密后的结果发送给NFC装置。然后,NFC装置收到后用新密钥解密得到值L′,如果解密得到值L′与先前数据库发送的更新序列L一致,则可以确定NFC卷标密钥更新成功,将新密钥发给数据库,并更新本次更新时间和更新标志。从而完成数据库的密钥更新。
更新k2(k′2)的方式与更新k1(k′1)类似:
首先,k′1更新后,NFC装置读取上次k′2更新时间并与当前的时间进行比较,若时间差大于系统设定的密钥更新周期,则进行更新密钥,此时NFC装置发送信息到数据库。数据库产生随机密钥更新序列L,与数据库里的k′2,计算得出新密钥km,新密钥通过NFC装置发给NFC卷标。NFC卷标收到后进行解密,可以得到随机密钥更新序列L和新密钥km,通过接收到的所述更新序列L和NFC卷标的k2计算新的密钥kn,如果kn和km一致,说明更新密钥正确,将新密钥替换旧密钥,并保存。更新后,NFC卷标将所述更新序列L用新密钥加密后的结果发送给NFC装置。然后,NFC装置收到后用新密钥解密得到值L′,如果解密得到值L′与先前数据库发送的更新序列L一致,则可以确定NFC卷标密钥更新成功,将新密钥发给数据库,并更新本次更新时间和更新标志。从而完成数据库的密钥更新。
如果所述NFC装置收不到或收到的是错误的更新响应,表示更新失败,并将新旧密钥同时发送给数据库,在下一次认证时,所述NFC装置依次使用新旧密钥对标签进行认证,如果新密钥正确,表示上次的密钥更新成功。如果旧密钥正确,则表示上次更新失败,重新进行密钥更新。
在步骤102中,NFC装置发送携带随机数R的询问指令,攻击者不能获取合法的固定值c和卷标密钥k1,不能计算得出正确的第一运算结果a或M值,在NFC装置一端得不到认证,通讯将不会继续,攻击者不能伪造成合法NFC卷标。即使攻击者监听了一次完整的认证过程,但由于卷标密钥k1和卷标密钥k2以及数据库密钥k′1,数据库密钥k′2进行了更新,攻击方所得到的数据在下一次认证中也是无效的。
攻击者想要获得NFC卷标内部的信息,必须先通过认证,即使攻击者通过无线设备窃取到携带随机数R的询问指令的信息,并对标签重复发送询问指令,窃取到M,但由于攻击者无法得到随机数R,不能同数据库通信,无法窃取到信息N,不能完成认证,也就得不到NFC卷标内部的信息。
即使攻击方监听了多次认证过程,获得多组数据,但由于每次传送与密钥k1,k2相关的信息时,都经过了Hash函数的运算,由于单向Hash函数的特点,攻击者很难分析出k1,k2。
进一步,单向散列(Hash)函数可以用来单向散列(Hash)函数可以用来构建安全的MAC。对比过程可以运用Hash函数保证数据的完整性,可以在消息传输之前先对消息做Hash变换,然后对消息进行传输,对于接收到的信息也做Hash变换,将传输前的信息的Hash变换值与接收到的信息做比较,如果两者相同,则可以认为消息在传输过程没有被篡改,否则认为消息一定被非法篡改。
基于Hash函数的MAC,在共享密钥情况下,Hash函数将密钥作为自身的一部分输入,另一部分输入为需要认证的消息。因此,为了认证一个消息M,发送方(例如NFC卷标)计算MAC=hash(k,M),其中,k为发送者(NFC卷标)和接收者(数据库)的共享密钥。为了用Hash函数关于密钥k和消息M生成一个有效的MAC,所述发送方(NFC卷标)必须拥有正确的密钥和正确的信息。与发送者(NFC卷标)共享密钥k的接收者(数据库)应当由接收的信息解出信息M,再重新计算出MAC,并检验同所接收的MAC是否一致。如果一致,就可以相信消息来自合法的发送者(NFC卷标)。
本发明实施例通过NFC卷标和数据库之间的信息采用Hash运算传递,并通过对比Hash运算结果判断是否认证成功;在不增加NFC卷标成本的前提下增强了NFC的安全性。
请参阅图2为本发明一种NFC认证系统的一实施例的结构示意图。
所述NFC认证系统包括NFC装置21、NFC卷标22和数据库23。
所述NFC装置21,用于发送携带第一随机数R的询问指令;接收所述NFC发送的第一运算结果a,转发所述第一运算结果a和所述第一随机数R到所述数据库23;
所述NFC卷标22,用于响应于所述NFC装置携带第一随机数R的询问指令,根据预设的卷标第一密钥k1和所述第一随机数R进行Hash运算得到第一运算结a果,并将所述第一运算结果a和所述NFC卷标的UID c发送给所述NFC装置;
所述NFC装置21,用于将所述第一运算结果a、所述NFC卷标的UID与所述第一随机数R发送给所述数据库23;
所述数据库23,用于根据所述NFC卷标的UID c获取预存储的数据库第一密钥k′1;利用所述数据库第一密钥k′1及所述第一随机数R进行Hash运算得到第二运算结果b,并比较所述第一运算结果a和所述第二运算结果b,根据比较的结果判断NFC卷标的认证结果。
所述NFC卷标22向所述NFC装置21发送所述第一对比值a可以采用响应消息的形式发送。
进一步,所述NFC卷标22还用于根据预设NFC卷标的UID c和预设第二随机数P对所述第一运算结果a进行掩码运算;所述掩码运算具体为将所述第一运算结果a根据所述NFC卷标的UID c位串后,利用所述第二随机数p进行掩码运算。
具体的,所述NFC卷标22对第一运算结果a做一次掩码计算,采用公式M=f(a||c,p)。其中f=(x,p)表示将x用随机数p进行掩码,符号“||”表示位串,其中c为一个预设的固定值表示所述NFC卷标的UID,p为一个预设的随机数。这样即使攻击者每次带相同的随机数R通过询问指令询问NFC卷标,由于随机数p的掩码,NFC卷标每次的响应是不同的,攻击者也不能跟踪NFC卷标,能够保障地点隐私,防止跟踪。
所述数据库23还用于对所述掩码后的第一运算结果a(即M)进行去掩码计算,得到所述第一运算结果a。
所述数据库23通过f-1(a||c,p)运算后,去掉随机数掩码得到第一运算结果a。
所述数据库23还用于根据预设的数据库第二密钥k′2和所述NFC卷标的UID c进行Hash运算得到第三运算结果N;发送所述第三运算结果N;
所述NFC卷标22,用于接收所述第三运算结果N,根据预先存储的卷标第二密钥k2和所述NFC卷标的UID c进行Hash运算得到第四运算结果T;当所述第三运算结果N和所述第四运算结果T相等时,NFC装置21认证通过。
k′1与k1,k′2与k2都是预先统一分别存储于数据库和卷标中,且k′1等于k1,k′2等于k2,如果所述NFC卷标22是合法卷标,那么其使用的k1和k2也应该就是数据库中的k′1 k′2;采用了同样随机数通过Hash运算得到的结果也应该是一致的。
进一步,所述数据库23还包括密钥更新单元232,用于数据库23发送所述第三运算结果n到所述NFC卷标22后,更新所述数据库第一密钥k′1和所述数据库第二密钥k′2。具体的密钥更新方式如下:
设定k1(k′1),k2(k′2)(NFC卷标和数据库里的),已经在数据库23中给k1,k2分配了各自的上次更新时间t1,t2,并且有各自的更新标志F1,F2(0表示成功,1表示失败),只有认证通过才会更新密钥。以k′1为例:
首先,k′1经过认证后,NFC装置22读取上次k′1更新时间并与当前的时间进行比较,若时间差大于系统设定的密钥更新周期,则进行更新密钥,此时NFC装置22发送信息到数据库23。所述数据库23产生随机密钥更新序列L,与数据库22里的k′1,计算得出新密钥kx,新密钥通过NFC装置22发给NFC卷标21。所述NFC卷标21收到后进行解密,可以得到随机密钥更新序列L和新密钥kx,通过接收到的更新序列L和NFC卷标的k1计算新的密钥ky,如果ky和kx一致,说明更新密钥正确,将新密钥替换旧密钥,并保存。更新后,NFC卷标21将更新序列L用新密钥加密后的结果发送给NFC装置22。然后,NFC装置22收到后用新密钥解密得到值L′,如果解密得到的值L′与先前数据库发送的更新序列L一致,则可以确定NFC卷标21密钥更新成功,将新密钥发给数据库23,并更新本次更新时间和更新标志。从而完成数据库的密钥更新。
如果所述NFC装置22收不到或收到的是错误的更新响应,表示更新失败,并将新旧密钥同时发送给数据库23,在下一次认证时,所述NFC装置22依次使用新旧密钥对标签进行认证,如果新密钥正确,表示上次的密钥更新成功。如果旧密钥正确,则表示上次更新失败,重新进行密钥更新。
利用上述更新k1(k′1)同样的功能,所述系统可以在更新k1(k′1)之后更新k2(k′2)。
以上所述仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。