本发明涉及信息安全领域,特别涉及一种在NFC(Near Field Communication,近场通信)动态令牌中写入种子密钥的方法和设备。
背景技术:
动态令牌是一种用于生成动态口令的设备,广泛应用于网银、电信运营商和电子政务等应用领域。动态令牌所生成的动态口令可用于身份认证,能够有效提高身份认证的安全性。
现有技术中,动态令牌出厂前,其生成动态口令所必需的种子密钥是由动态令牌的生产厂商烧写到动态令牌中的。在动态令牌的使用过程中,无法根据用户的需求更新动态令牌中的种子密钥,灵活性和安全性较差。
技术实现要素:
本发明提供了一种在NFC动态令牌中写入种子密钥的方法和设备,以克服现有的动态令牌灵活性和安全性较差的缺陷。
本发明提供了一种在NFC动态令牌中写入种子密钥的方法,包括以下步骤:
客户端获取NFC动态令牌的令牌序列号,接收来自所述NFC动态令牌的第一随机数,生成第二随机数,保存所述令牌序列号和所述第二随机数,向令牌服务器发送所述令牌序列号、所述第一随机数和所述第二随机数;
所述客户端接收来自所述令牌服务器的第二密文,使用最近一次保存的令牌序列号和第二随机数,对所述第二密文进行解密,得到第一密文和校验值;
所述客户端将所述第一密文和所述校验值发送给所述NFC动态令牌。
本发明还提供了一种在NFC动态令牌中写入种子密钥的方法,包括以下步骤:
令牌服务器接收来自客户端的令牌序列号、第一随机数和第二随机数;
所述令牌服务器根据所述令牌序列号生成种子文件,将所述种子文件与所述令牌序列号绑定,根据所述种子文件生成校验值,并使用所述第一随机数对种子文件进行加密,得到第一密文;
所述令牌服务器使用所述第二随机数和所述令牌序列号对所述第一密文和所述校验值进行加密,得到第二密文,并将所述第二密文发送给所述客户端。
本发明还提供了一种客户端,包括:
获取模块,用于获取NFC动态令牌的令牌序列号;
第一接收模块,用于接收来自所述NFC动态令牌的第一随机数;
第一生成模块,用于生成第二随机数;
存储模块,用于保存所述令牌序列号和所述第二随机数;
第一发送模块,用于向令牌服务器发送所述令牌序列号、所述第一随机数和所述第二随机数;
第二接收模块,用于接收来自所述令牌服务器的第二密文;
解密模块,用于使用最近一次保存的令牌序列号和第二随机数,对所述第二密文进行解密,得到第一密文和校验值;
第二发送模块,用于将所述第一密文和所述校验值发送给所述NFC动态令牌。
本发明还提供了一种令牌服务器,包括:
获取模块,用于接收来自客户端的令牌序列号、第一随机数和第二随机数;
第一生成模块,用于根据所述令牌序列号生成种子文件;
绑定模块,用于将所述种子文件与所述令牌序列号绑定;
第二生成模块,用于根据所述种子文件生成校验值;
第一加密模块,用于使用所述第一随机数对种子文件进行加密,得到第一密文;
第二加密模块,用于使用所述第二随机数和所述令牌序列号对所述第一密文和所述校验值进行加密,得到第二密文;
发送模块,用于将所述第二密文发送给所述客户端。
本发明通过NFC通道将种子密钥烧写到NFC动态令牌中,提高了动态令牌的安全性和灵活性。
附图说明
图1为本发明实施例中的一种在NFC动态令牌中写入种子密钥的方法流程图;
图2为本发明实施例中的另一种在NFC动态令牌中写入种子密钥的方法流程图;
图3为本发明实施例中的又一种在NFC动态令牌中写入种子密钥的方法流程图;
图4为本发明实施例中的又一种在NFC动态令牌中写入种子密钥的方法流程图;
图5为本发明实施例中的一种客户端的模块组成框图;
图6为本发明实施例中的一种令牌服务器的模块组成框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供了一种在NFC动态令牌中写入种子密钥的方法,如图1所示,包括以下步骤:
步骤101,客户端与NFC动态令牌建立NFC通信。
其中,客户端可以安装在具有NFC功能的设备中。
步骤102,客户端向NFC动态令牌发送第一指令,接收NFC动态令牌返回的第一随机数。
其中,第一随机数可以是NFC动态令牌从UTC秒数中截取的部分数据,例如,客户端向NFC动态令牌发送第一指令“0x44020110”,接收NFC动态令牌返回的第一随机数“0x1326”。
要说明的是,NFC动态令牌也会对第一随机数进行保存。
步骤103,客户端向NFC动态令牌发送第二指令,接收NFC动态令牌返回的令牌序列号,并对该令牌序列号进行保存。
例如,客户端向NFC动态令牌发送第二指令“0x4402043A”,接收NFC动态令牌返回的令牌序列号“15357”。
需要说明的是,在本发明的其他实施例中,客户端也可以根据用户名获取对应的令牌序列号。
步骤104,客户端生成并保存第二随机数,向令牌服务器发送令牌序列号、第一随机数和第二随机数。
其中,第二随机数可以为UTC秒数,也可以是从UTC秒数中截取的部分数据。
例如,客户端生成并保存第二随机数“0x297A”,向令牌服务器发送令牌序列号“15357”、第一随机数“0x1326”和第二随机数“0x297A”。
步骤105,令牌服务器根据接收到的令牌序列号生成种子文件,将该种子文件与令牌序列号绑定,并根据种子文件生成校验值。
例如,令牌服务器根据令牌序列号“15357”生成种子文件“0x8D5828922FEBFC8597”,将种子文件“0x8D5828922FEBFC8597”与令牌序列号“15357”绑定,并根据种子文件生成校验值“0x6E4D”。
步骤106,令牌服务器使用第一随机数对种子文件进行加密,得到第一密文,使用第二随机数和令牌序列号对第一密文和校验值进行加密,得到第二密文,并将第二密文发送给客户端。
具体地,令牌服务器根据第二随机数生成加密密钥,根据令牌序列号生成初始化向量,使用加密密钥和初始化向量,对第一密文和校验值进行加密,得到第二密文。
本实施例中,令牌服务器可以对第二随机数和预设值进行散列,将得到的散列值作为加密密钥;对令牌序列号和预设值进行散列,将得到的散列值作为初始化向量。
例如,令牌服务器使用来自客户端的第一随机数“0x1326”对种子文件“0x8D5828922FEBFC8597”进行加密,得到第一密文“0xAFCC4F6EAC971346E6”,使用第二随机数“0x297A”和令牌序列号“15357”对第一密文“0xAFCC4F6EAC971346E6”和校验值“0x6E4D”进行加密,得到第二密文“0xD2361E54C863BD21CA”。
步骤107,客户端使用最近一次保存的令牌序列号和第二随机数,对接收到的第二密文进行解密,得到第一密文和校验值。
具体地,客户端根据最近一次保存的第二随机数生成加密密钥,根据最近一次保存的令牌序列号生成初始化向量,使用加密密钥和初始化向量,对接收到的第二密文进行解密,得到第一密文和校验值。
本实施例中,客户端可以对最近一次保存的第二随机数和预设值进行散列,将得到的散列值作为加密密钥;对最近一次保存的令牌序列号和预设值进行散列,将得到的散列值作为初始化向量。
例如,客户端使用令牌序列号“15357”和第二随机数“0x297A”,对第二密文“0xD2361E54C863BD21CA”进行解密,得到第一密文“0xAFCC4F6EAC971346E6”和校验值“0x6E4D”。
步骤108,客户端将第一密文和校验值发送给NFC动态令牌。
例如,客户端将第一密文“0xAFCC4F6EAC971346E6”和校验值“0x6E4D”发送给NFC动态令牌。
步骤109,NFC动态令牌使用接收到的校验值对第一密文进行校验,如果校验失败,则执行步骤110;如果校验成功,则执行步骤112。
具体地,NFC动态令牌使用最近一次保存的第一随机数对接收到的第一密文进行解密,得到种子文件,并根据种子文件计算校验值,判断计算得到的校验值是否与接收到的校验值相同,如果相同,则确定校验成功,否则,确定校验失败。
例如,NFC动态令牌接收到的校验值为“0x6E4D”,NFC动态令牌使用最近一次保存的第一随机数“0x1326”对第一密文“0xAFCC4F6EAC971346E6”进行解密,得到种子文件“0x8D5828922FEBFC8597”,并根据上述种子文件计算校验值,如果计算得到的校验值为“0x6E4D”,则确定校验成功,否则,确定校验失败。
步骤110,NFC动态令牌向客户端发送写入失败消息。
例如,NFC动态令牌向移动终端发送写入失败消息“0xBB023D5B”。
步骤111,客户端根据接收到的写入失败消息,显示写入失败信息,并返回步骤102。
步骤112,NFC动态令牌保存第一密文,向客户端发送写入成功消息。
需要说明的是,NFC动态令牌保存第一密文之后,还可以使用最近一次保存的第一随机数,对第一密文进行解密,得到种子文件,并使用该种子文件生成动态口令。
例如,NFC动态令牌对第一密文“0xAFCC4F6EAC971346E6”进行保存,通过NFC通道向客户端发送写入成功消息“0xBB02CCCC”。
步骤113,客户端根据接收到的写入成功消息,显示写入成功信息。
本发明实施例通过NFC通道将种子密钥烧写到NFC动态令牌中,提高了动态令牌的安全性和灵活性。
本发明实施例提供了另一种在NFC动态令牌中写入种子密钥的方法,如图2所示,包括以下步骤:
步骤201,客户端与NFC动态令牌建立NFC通信。
其中,客户端可以安装在具有NFC功能的设备中。
步骤202,客户端向NFC动态令牌发送第一指令,接收NFC动态令牌返回的第一随机数。
其中,第一随机数可以是NFC动态令牌从UTC秒数中截取的部分数据,例如,客户端向NFC动态令牌发送第一指令“0x44020110”,接收NFC动态令牌返回的第一随机数“0x1326”。
要说明的是,NFC动态令牌也会对第一随机数进行保存。
步骤203,客户端向NFC动态令牌发送第二指令,接收NFC动态令牌返回的令牌序列号,并对该令牌序列号进行保存。
例如,客户端向NFC动态令牌发送第二指令“0x4402043A”,接收NFC动态令牌返回的令牌序列号“15357”。
步骤204,客户端向NFC动态令牌发送第四指令,接收NFC动态令牌返回的令牌时间信息,根据令牌时间信息和服务器时间信息,生成令牌偏移值。
其中,令牌时间信息可以为NFC动态令牌保存的分钟数,用于计算动态口令。
例如,客户端向NFC动态令牌发送第四指令“0x4402057B”,接收NFC动态令牌返回的令牌时间信息“254”,生成令牌偏移值“4”。
步骤205,客户端生成并保存第二随机数,向令牌服务器发送令牌序列号、令牌偏移值、第一随机数和第二随机数。
其中,第二随机数可以为UTC秒数,也可以是从UTC秒数中截取的部分数据。
例如,客户端生成并保存第二随机数“0x297A”,向令牌服务器发送令牌序列号“15357”、令牌偏移值“4”、第一随机数“0x1326”和第二随机数“0x297A”。
步骤206,令牌服务器根据接收到的令牌序列号生成种子文件,将该种子文件与令牌序列号和令牌偏移值绑定,并根据种子文件生成校验值。
例如,令牌服务器根据令牌序列号“15357”生成种子文件“0x8D5828922FEBFC8597”,将种子文件“0x8D5828922FEBFC8597”与令牌序列号“15357”和令牌偏移值“4”绑定,并根据种子文件生成校验值“0x6E4D”。
步骤207,令牌服务器使用第一随机数对种子文件进行加密,得到第一密文,使用第二随机数和令牌序列号对第一密文和校验值进行加密,得到第二密文,并将第二密文发送给客户端。
具体地,令牌服务器根据第二随机数生成加密密钥,根据令牌序列号生成初始化向量,使用加密密钥和初始化向量,对第一密文和校验值进行加密,得到第二密文。
本实施例中,令牌服务器可以对第二随机数和预设值进行散列,将得到的散列值作为加密密钥;对令牌序列号和预设值进行散列,将得到的散列值作为初始化向量。
例如,令牌服务器使用来自客户端的第一随机数“0x1326”对种子文件“0x8D5828922FEBFC8597”进行加密,得到第一密文“0xAFCC4F6EAC971346E6”,使用第二随机数“0x297A”和令牌序列号“15357”对第一密文“0xAFCC4F6EAC971346E6”和校验值“0x6E4D”进行加密,得到第二密文“0xD2361E54C863BD21CA”。
步骤208,客户端使用最近一次保存的令牌序列号和第二随机数,对接收到的第二密文进行解密,得到第一密文和校验值。
具体地,客户端根据最近一次保存的第二随机数生成加密密钥,根据最近一次保存的令牌序列号生成初始化向量,使用加密密钥和初始化向量,对接收到的第二密文进行解密,得到第一密文和校验值。
本实施例中,客户端可以对最近一次保存的第二随机数和预设值进行散列,将得到的散列值作为加密密钥;对最近一次保存的令牌序列号和预设值进行散列,将得到的散列值作为初始化向量。
例如,客户端使用令牌序列号“15357”和第二随机数“0x297A”,对第二密文“0xD2361E54C863BD21CA”进行解密,得到第一密文“0xAFCC4F6EAC971346E6”和校验值“0x6E4D”。
步骤209,客户端将第一密文和校验值发送给NFC动态令牌。
例如,客户端将第一密文“0xAFCC4F6EAC971346E6”和校验值“0x6E4D”发送给NFC动态令牌。
步骤210,NFC动态令牌使用接收到的校验值对第一密文进行校验,如果校验失败,则执行步骤211;如果校验成功,则执行步骤213。
具体地,NFC动态令牌使用最近一次保存的第一随机数对接收到的第一密文进行解密,得到种子文件,并根据种子文件计算校验值,判断计算得到的校验值是否与接收到的校验值相同,如果相同,则确定校验成功,否则,确定校验失败。
例如,NFC动态令牌接收到的校验值为“0x6E4D”,NFC动态令牌使用最近一次保存的第一随机数“0x1326”对第一密文“0xAFCC4F6EAC971346E6”进行解密,得到种子文件“0x8D5828922FEBFC8597”,并根据上述种子文件计算校验值,如果计算得到的校验值为“0x6E4D”,则确定校验成功,否则,确定校验失败。
步骤211,NFC动态令牌向客户端发送写入失败消息。
例如,NFC动态令牌向客户端发送写入失败消息“0xBB023D5B”。
步骤212,客户端根据接收到的写入失败消息,显示写入失败信息,并返回步骤202。
步骤213,NFC动态令牌保存第一密文,向客户端发送写入成功消息。
需要说明的是,NFC动态令牌保存第一密文之后,还可以使用最近一次保存的第一随机数,对第一密文进行解密,得到种子文件,并使用该种子文件生成动态口令。
例如,NFC动态令牌对第一密文“0xAFCC4F6EAC971346E6”进行保存,通过NFC通道向客户端发送写入成功消息“0xBB02CCCC”。
步骤214,客户端根据接收到的写入成功消息,显示写入成功信息。
本发明实施例通过NFC通道将种子密钥烧写到NFC动态令牌中,提高了动态令牌的安全性和灵活性。
需要说明的是,在本发明的其他实施方式中,NFC动态令牌使用接收到的校验值对第一密文校验成功后,也可以对从第一密文中解密得到的种子文件进行保存,同样能够实现本发明的发明目的。
例如,NFC动态令牌使用接收到的校验值为“0x6E4D”对第一密文“0xAFCC4F6EAC971346E6”校验成功后,对从第一密文中解密得到的种子文件“0x8D5828922FEBFC8597”进行保存。
本发明实施例提供了又一种在NFC动态令牌中写入种子密钥的方法,如图3所示,包括以下步骤:
步骤301,客户端与NFC动态令牌建立NFC通信。
其中,客户端可以安装在具有NFC功能的设备中。
步骤302,客户端向NFC动态令牌发送第一指令,接收NFC动态令牌返回的第一随机数。
其中,第一随机数可以是NFC动态令牌从UTC秒数中截取的部分数据,例如,客户端向NFC动态令牌发送第一指令“0x44020110”,接收NFC动态令牌返回的第一随机数“0x1326”。
需要说明的是,NFC动态令牌也会对第一随机数进行保存。
步骤303,客户端向NFC动态令牌发送第二指令,接收NFC动态令牌返回的令牌序列号,并对该令牌序列号进行保存。
例如,客户端向NFC动态令牌发送第二指令“0x4402043A”,接收NFC动态令牌返回的令牌序列号“15357”。
步骤304,客户端生成并保存第二随机数,向令牌服务器发送令牌序列号、第一随机数和第二随机数。
其中,第二随机数可以为UTC秒数,也可以是从UTC秒数中截取的部分数据。
例如,客户端生成并保存第二随机数“0x297A”,向令牌服务器发送令牌序列号“15357”、第一随机数“0x1326”和第二随机数“0x297A”。
步骤305,令牌服务器根据接收到的令牌序列号生成种子文件,将该种子文件与令牌序列号绑定,并根据种子文件生成校验值。
例如,令牌服务器根据令牌序列号“15357”生成种子文件“0x8D5828922FEBFC8597”,将种子文件“0x8D5828922FEBFC8597”与令牌序列号“15357”绑定,并根据种子文件生成校验值“0x6E4D”。
步骤306,令牌服务器使用第一随机数以及自身保存的烧写密钥对种子文件进行加密,得到第一密文,使用第二随机数和令牌序列号对第一密文和校验值进行加密,得到第二密文,并将第二密文发送给客户端。
具体地,令牌服务器根据第二随机数生成加密密钥,根据令牌序列号生成初始化向量,使用加密密钥和初始化向量,对第一密文和校验值进行加密,得到第二密文。
本实施例中,令牌服务器可以对第二随机数和预设值进行散列,将得到的散列值作为加密密钥;对令牌序列号和预设值进行散列,将得到的散列值作为初始化向量。
例如,令牌服务器使用来自客户端的第一随机数“0x1326”对种子文件“0x8D5828922FEBFC8597”进行加密,得到第一密文“0xAFCC4F6EAC971346E6”,使用第二随机数“0x297A”和令牌序列号“15357”对第一密文“0xAFCC4F6EAC971346E6”和校验值“0x6E4D”进行加密,得到第二密文“0xD2361E54C863BD21CA”。
步骤307,客户端使用最近一次保存的令牌序列号和第二随机数,对接收到的第二密文进行解密,得到第一密文和校验值。
具体地,客户端根据最近一次保存的第二随机数生成加密密钥,根据最近一次保存的令牌序列号生成初始化向量,使用加密密钥和初始化向量,对接收到的第二密文进行解密,得到第一密文和校验值。
本实施例中,客户端可以对最近一次保存的第二随机数和预设值进行散列,将得到的散列值作为加密密钥;对最近一次保存的令牌序列号和预设值进行散列,将得到的散列值作为初始化向量。
例如,客户端使用令牌序列号“15357”和第二随机数“0x297A”,对第二密文“0xD2361E54C863BD21CA”进行解密,得到第一密文“0xAFCC4F6EAC971346E6”和校验值“0x6E4D”。
步骤308,客户端将第一密文和校验值发送给NFC动态令牌。
例如,客户端将第一密文“0xAFCC4F6EAC971346E6”和校验值“0x6E4D”发送给NFC动态令牌。
步骤309,NFC动态令牌使用接收到的校验值对第一密文进行校验,如果校验失败,则执行步骤310;如果校验成功,则执行步骤312。
具体地,NFC动态令牌使用自身内置的烧写密钥以及最近一次保存的第一随机数对接收到的第一密文进行解密,得到种子文件,并根据种子文件计算校验值,判断计算得到的校验值是否与接收到的校验值相同,如果相同,则确定校验成功,否则,确定校验失败。
其中,NFC动态令牌中内置的烧写密钥与令牌服务器保存的烧写密钥相同。
例如,NFC动态令牌接收到的校验值为“0x6E4D”,NFC动态令牌使用最近一次保存的第一随机数“0x1326”和自身内置的烧写密钥对第一密文“0xAFCC4F6EAC971346E6”进行解密,得到种子文件“0x8D5828922FEBFC8597”,并根据上述种子文件计算校验值,如果计算得到的校验值为“0x6E4D”,则确定校验成功,否则,确定校验失败。
步骤310,NFC动态令牌向客户端发送写入失败消息。
例如,NFC动态令牌向客户端发送写入失败消息“0xBB023D5B”。
步骤311,客户端根据接收到的写入失败消息,显示写入失败信息,并返回步骤302。
步骤312,NFC动态令牌保存第一密文,向客户端发送写入成功消息。
需要说明的是,NFC动态令牌保存第一密文之后,还可以使用自身内置的烧写密钥以及最近一次保存的第一随机数,对第一密文进行解密,得到种子文件,并使用该种子文件生成动态口令。
例如,NFC动态令牌对第一密文“0xAFCC4F6EAC971346E6”进行保存,通过NFC通道向移动设备发送写入成功消息“0xBB02CCCC”。
步骤313,客户端根据接收到的写入成功消息,显示写入成功信息。
本发明实施例通过NFC通道将种子密钥烧写到NFC动态令牌中,提高了动态令牌的安全性和灵活性。
本发明实施例提供了又一种在NFC动态令牌中写入种子密钥的方法,如图4所示,包括以下步骤:
步骤401,客户端与NFC动态令牌建立NFC通信。
其中,客户端可以安装在具有NFC功能的设备中。
步骤402,客户端向NFC动态令牌发送第一指令,接收NFC动态令牌返回的第一随机数。
其中,第一随机数为NFC动态令牌使用自身内置的烧写密钥对随机数明文加密得到的数据,随机数明文可以是NFC动态令牌从UTC秒数中截取的部分数据。
例如,客户端向NFC动态令牌发送第一指令“0x44020110”,接收NFC动态令牌返回的第一随机数“0x5B79”。
需要说明的是,NFC动态令牌会对随机数明文进行保存,令牌服务器保存有与NFC动态令牌内置的烧写密钥相同的烧写密钥。
步骤403,客户端向NFC动态令牌发送第二指令,接收NFC动态令牌返回的令牌序列号,并对该令牌序列号进行保存。
例如,客户端向NFC动态令牌发送第二指令“0x4402043A”,接收NFC动态令牌返回的令牌序列号“15357”。
步骤404,客户端生成并保存第二随机数,向令牌服务器发送令牌序列号、第一随机数和第二随机数。
其中,第二随机数可以为UTC秒数,也可以是从UTC秒数中截取的部分数据。
例如,客户端生成并保存第二随机数“0x297A”,向令牌服务器发送令牌序列号“15357”、第一随机数“0x5B79”和第二随机数“0x297A”。
步骤405,令牌服务器根据接收到的令牌序列号生成种子文件,将该种子文件与令牌序列号绑定,并根据种子文件生成校验值。
例如,令牌服务器根据令牌序列号“15357”生成种子文件“0x8D5828922FEBFC8597”,将种子文件“0x8D5828922FEBFC8597”与令牌序列号“15357”绑定,并根据种子文件生成校验值“0x6E4D”。
步骤406,令牌服务器使用自身保存的烧写密钥对第一随机数进行解密,得到随机数明文,使用随机数明文对种子文件进行加密,得到第一密文,使用第二随机数和令牌序列号对第一密文和校验值进行加密,得到第二密文,并将第二密文发送给客户端。
具体地,令牌服务器根据第二随机数生成加密密钥,根据令牌序列号生成初始化向量,使用加密密钥和初始化向量,对第一密文和校验值进行加密,得到第二密文。
本实施例中,令牌服务器可以对第二随机数和预设值进行散列,将得到的散列值作为加密密钥;对令牌序列号和预设值进行散列,将得到的散列值作为初始化向量。
例如,令牌服务器使用自身保存的烧写密钥对第一随机数“0x5B79”进行解密,得到随机数明文“0x1326”,使用随机数明文“0x1326”对种子文件“0x8D5828922FEBFC8597”进行加密,得到第一密文“0xAFCC4F6EAC971346E6”,使用第二随机数“0x297A”和令牌序列号“15357”对第一密文“0xAFCC4F6EAC971346E6”和校验值“0x6E4D”进行加密,得到第二密文“0xD2361E54C863BD21CA”。
步骤407,客户端使用最近一次保存的令牌序列号和第二随机数,对接收到的第二密文进行解密,得到第一密文和校验值。
具体地,客户端根据最近一次保存的第二随机数生成加密密钥,根据最近一次保存的令牌序列号生成初始化向量,使用加密密钥和初始化向量,对接收到的第二密文进行解密,得到第一密文和校验值。
本实施例中,客户端可以对最近一次保存的的第二随机数和预设值进行散列,将得到的散列值作为加密密钥;对最近一次保存的令牌序列号和预设值进行散列,将得到的散列值作为初始化向量。
例如,客户端使用令牌序列号“15357”和第二随机数“0x297A”,对第二密文“0xD2361E54C863BD21CA”进行解密,得到第一密文“0xAFCC4F6EAC971346E6”和校验值“0x6E4D”。
步骤408,客户端将第一密文和校验值发送给NFC动态令牌。
例如,客户端将第一密文“0xAFCC4F6EAC971346E6”和校验值“0x6E4D”发送给NFC动态令牌。
步骤409,NFC动态令牌使用接收到的校验值对第一密文进行校验,如果校验失败,则执行步骤410;如果校验成功,则执行步骤412。
具体地,NFC动态令牌使用最近一次保存的随机数明文对接收到的第一密文进行解密,得到种子文件,并根据种子文件计算校验值,判断计算得到的校验值是否与接收到的校验值相同,如果相同,则确定校验成功,否则,确定校验失败。
例如,NFC动态令牌接收到的校验值为“0x6E4D”,NFC动态令牌使用最近一次保存的随机数明文“0x1326”对第一密文“0xAFCC4F6EAC971346E6”进行解密,得到种子文件“0x8D5828922FEBFC8597”,并根据上述种子文件计算校验值,如果计算得到的校验值为“0x6E4D”,则确定校验成功,否则,确定校验失败。
步骤410,NFC动态令牌向客户端发送写入失败消息。
例如,NFC动态令牌向客户端发送写入失败消息“0xBB023D5B”。
步骤411,客户端根据接收到的写入失败消息,显示写入失败信息,并返回步骤402。
步骤412,NFC动态令牌保存第一密文,向客户端发送写入成功消息。
例如,NFC动态令牌对第一密文“0xAFCC4F6EAC971346E6”进行保存,通过NFC通道向客户端发送写入成功消息“0xBB02CCCC”。
需要说明的是,NFC动态令牌保存第一密文之后,还可以使用最近一次保存的随机数明文,对第一密文进行解密,得到种子文件,并使用该种子文件生成动态口令。
步骤413,客户端根据接收到的写入成功消息,显示写入成功信息。
本发明实施例通过NFC通道将种子密钥烧写到NFC动态令牌中,提高了动态令牌的安全性和灵活性。
基于上述在NFC动态令牌中写入种子密钥的方法,本发明实施例还提供了一种客户端,如图5所示,包括:
获取模块510,用于获取NFC动态令牌的令牌序列号;
第一接收模块520,用于接收来自NFC动态令牌的第一随机数;
第一生成模块530,用于生成第二随机数;
存储模块540,用于保存所述令牌序列号和所述第二随机数;
第一发送模块550,用于向令牌服务器发送所述令牌序列号、所述第一随机数和所述第二随机数;
第二接收模块560,用于接收来自令牌服务器的第二密文;
解密模块570,用于使用最近一次保存的令牌序列号和第二随机数,对第二密文进行解密,得到第一密文和校验值;
第二发送模块580,用于将所述第一密文和校验值发送给NFC动态令牌。
进一步地,上述客户端,还包括:
第三发送模块,用于向所述NFC动态令牌发送第四指令;
第三接收模块,用于接收所述NFC动态令牌返回的令牌时间信息;
第二生成模块,用于根据所述令牌时间信息和服务器时间信息,生成令牌偏移值;
第四发送模块,用于向所述令牌服务器发送所述令牌偏移值。
其中,第一随机数可以为NFC动态令牌使用自身内置的烧写密钥对随机数明文加密得到的数据。
进一步地,上述第一接收模块520,具体用于向所述NFC动态令牌发送第一指令,接收所述NFC动态令牌返回的第一随机数。
进一步地,上述获取模块510,具体用于向所述NFC动态令牌发送第二指令,接收所述NFC动态令牌返回的令牌序列号。
或者,
根据用户名获取对应的令牌序列号。
进一步地,上述客户端,还包括:
显示模块,用于接收来自所述NFC动态令牌的写入失败消息,显示写入失败信息;
或者,接收来自所述NFC动态令牌的写入成功消息,显示写入成功信息。
本发明实施例通过NFC通道将种子密钥烧写到NFC动态令牌中,提高了动态令牌的安全性和灵活性。
基于上述在NFC动态令牌中写入种子密钥的方法,本发明实施例还提供了一种令牌服务器,如图6所示,包括:
获取模块610,用于接收来自客户端的令牌序列号、第一随机数和第二随机数;
第一生成模块620,用于根据所述令牌序列号生成种子文件;
绑定模块630,用于将所述种子文件与所述令牌序列号绑定;
第二生成模块640,用于根据所述种子文件生成校验值;
第一加密模块650,用于使用所述第一随机数对种子文件进行加密,得到第一密文;
第二加密模块660,用于使用所述第二随机数和所述令牌序列号对所述第一密文和所述校验值进行加密,得到第二密文;
发送模块670,用于将所述第二密文发送给客户端。
进一步地,上述令牌服务器,还包括:
第一接收模块,用于接收来自所述客户端的令牌偏移值;
上述绑定模块630,还用于将所述种子文件与所述令牌偏移值绑定。
本发明的一种实施方式中,上述令牌服务器,还包括:
存储模块,用于保存烧写密钥;
相应地,上述第一加密模块650,具体用于使用所述第一随机数以及所述存储模块保存的烧写密钥对所述种子文件进行加密,得到所述第一密文。
本发明的另一种实施方式中,第一随机数为NFC动态令牌使用自身内置的烧写密钥对随机数明文加密得到的数据;
上述令牌服务器,还包括:
存储模块,用于保存与NFC动态令牌内置的烧写密钥相同的烧写密钥;
相应地,上述所述第一加密模块650,具体用于使用所述存储模块保存的烧写密钥对所述第一随机数进行解密,得到随机数明文,使用所述随机数明文对所述种子文件进行加密,得到第一密文。
本发明实施例通过NFC通道将种子密钥烧写到NFC动态令牌中,提高了动态令牌的安全性和灵活性。
结合本发明中所公开的实施例描述的方法中的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。