一种身份认证方法及装置与流程

文档序号:17386466发布日期:2019-04-13 00:12阅读:285来源:国知局
一种身份认证方法及装置与流程
本发明涉及身份认证领域,特别涉及一种身份认证方法及装置。
背景技术
:身份认证技术是为在计算机网络中确认操作者的合法身份而使用的一种认证方法,用以保证以数字身份进行操作的操作者就是这个数字身份合法拥有者。身份认证技术包括静态密码、短信密码和动态口令等多种认证形式。现有技术中,在身份认证的多种认证形式中都需要用户输入密码或动态口令,身份认证过程过于繁琐同时存在安全隐患。技术实现要素:本发明提供了一种身份认证方法及装置,解决了上述技术问题。本发明提供了一种身份认证方法,包括:步骤s1:移动终端向服务器后台发送包括用户标识的第一认证请求,接收来自所述服务器后台的包括应用ID、第二挑战值、来源数据和与所述用户标识对应的密钥句柄的第五响应;步骤s2:所述移动终端搜索与预设服务标识相匹配的身份认证设备,并与所述身份认证设备建立蓝牙连接;步骤s3:所述移动终端获取所述身份认证设备的服务;从所述服务中获取通知特征和写特征;使能所述通知特征;步骤s4:所述移动终端根据预设的认证指令类型、所述第二挑战值、所述来源数据、所述应用ID和所述密钥句柄生成认证数据,根据所述写特征向所述身份认证设备发送包括所述认证数据的认证指令;接收所述身份认证设备通过所述通知特征返回的包括第二认证判据的第七响应;步骤s5:所述移动终端向所述服务器后台发送包括所述认证指令类型、所述第二挑战值、所述来源数据、所述应用ID、所述用户标识和所述第二认证判据的第二认证请求;步骤s6:所述移动终端接收来自所述服务器后台的包括错误码的第八响应;判断所述错误码是否为第二预设值,如果是,则判定认证成功;否则,判定认证失败。本发明还提供了一种身份认证装置,包括:移动终端;所述移动终端包括:第一发送子模块、第一接收子模块、搜索子模块、连接子模块、第一获取子模块、使能子模块、特征发送子模块、特征接收子模块、第一生成子模块、第二发送子模块、第二接收子模块和第一判断子模块;所述第一发送子模块,用于向服务器后台发送包括用户标识的第一认证请求;所述第一接收子模块,用于接收来自所述服务器后台的包括应用ID、第二挑战值、来源数据和与所述用户标识对应的密钥句柄的第五响应;所述搜索子模块,用于搜索与预设服务标识相匹配的身份认证设备;所述连接子模块,用于与所述与预设服务标识相匹配的身份认证设备建立蓝牙连接;所述第一获取子模块,用于获取所述身份认证设备的服务;从所述服务中获取通知特征和写特征;所述使能子模块,用于使能所述第一获取子模块获取到的通知特征;所述第一生成子模块,用于根据预设的认证指令类型、所述第一接收子模块接收到的所述第二挑战值、所述来源数据、所述应用ID和所述密钥句柄生成认证数据;所述特征发送子模块,用于当所述使能子模块使能所述通知特征后,根据所述写特征向所述身份认证设备发送包括所述第一生成子模块生成的认证数据的认证指令;所述特征接收子模块,用于接收所述身份认证设备通过所述通知特征返回的包括第二认证判据的第七响应;所述第二发送子模块,用于向所述服务器后台发送包括所述认证指令类型、所述第二挑战值、所述来源数据、所述应用ID、所述用户标识和所述第二认证判据的第二认证请求;所述第二接收子模块,用于接收来自所述服务器后台的包括错误码的第八响应;第一判断子模块,用于判断所述错误码是否为第二预设值,如果是,则判定认证成功;否则,判定认证失败。本发明的有益效果:本实施例中提供了一种身份认证方法及装置,在认证过程中与身份认证设备相结合,无需用户输入密码,使身份认证更加便捷和更易操作,同时也提高了身份认证的安全性。附图说明图1为本发明实施例1提供的一种身份认证方法的流程图;图2-图3为本发明实施例2提供的一种身份认证方法中的注册阶段的流程图;图4-图5为本发明实施例2提供的一种身份认证方法中的认证阶段的流程图;图6为本发明实施例3提供的一种身份认证装置的结构示意图。具体实施方法下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。实施例1本实施例提供了一种身份认证方法,如图1所示,包括:步骤s1:移动终端向服务器后台发送包括用户标识的第一认证请求,接收来自服务器后台的包括应用ID、第二挑战值、来源数据和与用户标识对应的密钥句柄的第五响应;步骤s2:移动终端搜索与预设服务标识相匹配的身份认证设备,并与身份认证设备建立蓝牙连接;步骤s3:移动终端获取身份认证设备的服务;从服务中获取通知特征和写特征;使能通知特征;其中,移动终端获取身份认证设备的服务;从服务中获取通知特征和写特征;具体为:移动终端根据预设服务标识获取身份认证设备的服务,根据预设的通知特征标识从服务中获取通知特征;根据预设的写特征标识从服务中获取写特征。步骤s4:移动终端根据预设的认证指令类型、第二挑战值、来源数据、应用ID和密钥句柄生成认证数据,根据写特征向身份认证设备发送包括认证数据的认证指令;接收身份认证设备通过通知特征返回的包括第二认证判据的第七响应;其中,根据预设的认证指令类型、第二挑战值、来源数据、应用ID和密钥句柄生成认证数据具体包括:步骤a1:移动终端组织包括预设的认证指令类型、第二挑战值和来源数据的第二客户端数据;步骤a2:移动终端对第二客户端数据和应用ID分别进行哈希处理,得到第三哈希值和第四哈希值,根据第三哈希值、第四哈希值和密钥句柄生成认证数据;当身份认证设备接收到认证指令后,从认证指令中获取认证数据,从认证数据中获取密钥句柄及与密钥句柄对应的私钥,组织包括认证数据中的第三哈希值和第四哈希值的第二待签名数据,根据预设的哈希算法和与密钥句柄对应的私钥对第二待签名数据进行签名得到第二签名数据,组织包括第二签名数据的第二认证判据,将包括第二认证判据的第七响应返回给移动终端。步骤s5:移动终端向服务器后台发送包括认证指令类型、第二挑战值、来源数据、应用ID、用户标识和第二认证判据的第二认证请求;其中,向服务器后台发送包括认证指令类型、第二挑战值、来源数据、应用ID、用户标识和第二认证判据的第二认证请求,具体为:向服务器后台发送包括第二客户端数据、应用ID、用户标识和第二认证判据的第二认证请求。当服务器后台接收到第二认证请求后,根据第二认证请求中的用户标识获取与用户标识对应的公钥,根据第二认证请求中的第二客户端数据和应用ID、预设的哈希算法和公钥,对第二认证判据中的第二签名数据进行验签,判断验签是否成功,如果是,则将错误码设置为第二预设值,向移动终端发送包括错误码的第八响应;否则,将错误码设置为第三预设值,向移动终端发送包括错误码的第八响应。步骤s6:移动终端接收来自服务器后台的包括错误码的第八响应;判断错误码是否为第二预设值,如果是,则判定认证成功;否则,判定认证失败。本实施例中,第五响应中还包括第一版本号,相应地,步骤s4之前还可以包括:移动终端根据写特征向身份认证设备发送获取版本号指令,接收身份认证设备通过通知特征返回的包括第二版本号的第六响应;判断第一版本号与第二版本号是否相匹配,如果是,则执行步骤s4;否则,报错。本实施例中,步骤s3中还可以包括从服务中获取读特征,并将读特征的特征值作为分包长度;根据写特征向身份认证设备发送包括认证数据的认证指令之前,还包括:根据认证数据组织认证指令;根据分包长度判断是否对认证指令进行分包处理,如果是,则根据分包长度对认证指令进行分包处理,继续;否则,继续。其中,根据认证数据组织认证指令,具体包括:根据认证数据组织第二指令,将第二指令作为认证指令中的数据域,在第二指令前添加协议指令类型标识和第二指令的数据长度,得到认证指令。本实施例中,步骤s1之前还可以包括:步骤r1:移动终端向服务器后台发送包括用户标识的第一注册请求,接收来自服务器后台的包括应用ID、第一挑战值和来源数据的第一响应;步骤r2:移动终端搜索与预设服务标识相匹配的身份认证设备,并与身份认证设备建立蓝牙连接;步骤r3:移动终端获取身份认证设备的服务;从服务中获取通知特征与写特征;使能通知特征;其中,移动终端获取身份认证设备的服务;从服务中获取通知特征和写特征;具体为:移动终端根据预设服务标识获取身份认证设备的服务,根据预设的通知特征标识从服务中获取通知特征;根据预设的写特征标识从服务中获取写特征。步骤r4:移动终端根据预设的注册指令类型、第一挑战值、来源数据和应用ID生成注册数据,根据写特征向身份认证设备发送包括注册数据的注册指令;接收身份认证设备通过通知特征返回包括第一认证判据的第三响应;其中,根据预设的认证指令类型、第一挑战值、来源数据和应用ID生成注册数据具体包括:步骤b1:移动终端组织包括预设的注册指令类型、第一挑战值和来源数据的第一客户端数据;步骤b2:移动终端对第一客户端数据和应用ID分别进行哈希处理,得到第一哈希值和第二哈希值,根据第一哈希值和第二哈希值生成注册数据;当身份认证设备接收到注册指令后,身份认证设备生成密钥对及与密钥对相对应的密钥句柄,组织包括密钥对中的公钥、密钥句柄、注册数据中的第一哈希值和第二哈希值的第一待签名数据,根据预设的哈希算法和密钥对中的私钥对第一待签名数据进行签名得到第一签名数据,组织包括密钥对中的公钥、与密钥对相对应的密钥句柄和第一签名数据的第一认证判据,将包括第一认证判据的第三响应返回给移动终端。步骤r5:移动终端从第三响应中获取第一认证判据,向服务器后台发送包括注册指令类型、第一挑战值、来源数据、应用ID、用户标识和第一认证判据的第二注册请求;其中,向服务器后台发送包括注册指令类型、第一挑战值、来源数据、应用ID、用户标识和第一认证判据的第二注册请求,具体为:向服务器后台发送包括第一客户端数据、应用ID、用户标识和第一认证判据的第二注册请求。当服务器后台接收到第二注册请求后,根据第一客户端数据、应用ID、第一认证判据中的公钥、第一认证判据中的密钥句柄和预设的哈希算法对第一认证判据中的第一签名数据进行验签,判断验签是否成功,是则将第三响应中的密钥句柄和公钥分别与用户标识建立对应关系并保存,将错误码设置为第二预设值,向移动终端发送包括错误码的第四响应;否则,将错误码设置为第三预设值,向移动终端发送包括错误码的第四响应。步骤r6:移动终端接收来自服务器后台的包括错误码的第四响应;判断错误码是否为第二预设值,如果是,则判定注册成功;否则,判定注册失败。本实施例中,第一响应中还包括第一版本号;相应地,步骤r4之前还包括:移动终端根据写特征向身份认证设备发送获取版本号指令,接收身份认证设备通过通知特征返回的包括第二版本号的第二响应;判断第一版本号与第二版本号是否相匹配,如果是,则执行步骤r4;否则,报错。本实施例中,步骤r3中还包括从服务中获取读特征,并将读特征的特征值作为分包长度;根据写特征向身份认证设备发送包括注册数据的注册指令之前,还包括:根据注册数据组织注册指令;根据分包长度判断是否对注册指令进行分包处理,如果是,则根据分包长度对注册指令进行分包处理,继续;否则,继续。其中,根据注册数据组织注册指令,具体包括:根据注册数据组织第二指令,将第二指令作为注册指令中的数据域,在第二指令前添加协议指令类型标识和第二指令的数据长度,得到注册指令。本实施例中,搜索与预设服务标识相匹配的身份认证设备具体为:移动终端搜索身份认证设备,接收来自身份认证设备的广播数据,判断广播数据中的服务标识是否和预设服务标识相匹配,如果是,则判断搜索到与预设服务标识相匹配的身份认证设备,继续;否则,报错。其中,移动终端搜索身份认证设备,接收来自身份认证设备的广播数据,具体为:移动终端调用系统的搜索接口搜索身份认证设备,并设置搜索回调对象,搜索回调对象中包括搜索回调方法;通过系统的搜索回调方法接收来自身份认证设备的广播数据和与身份认证设备对应的设备对象。其中,与身份认证设备建立蓝牙连接,具体包括:移动终端使用与身份认证设备对应的设备对象调用系统的连接方法和身份认证设备建立蓝牙连接,获取通用属性协议对象并设置连接回调对象。进一步地,获取身份认证设备的服务;从服务中获取通知特征与写特征,具体包括:步骤t1:移动终端将预设服务标识作为参数,使用通用属性协议对象,调用系统的获取服务方法,获取身份认证设备的服务对象;将预设的写特征标识作为参数,使用服务对象调用系统的获取特征方法,从服务对象中获取写特征对象;将预设的通知特征标识作为参数,使用服务对象调用系统的获取特征方法,从服务对象中获取通知特征对象。更进一步地,回调对象中包括系统的通知回调方法;使能通知特征,具体为:调用系统的设置特征通知方法,使能通知特征对象;接收身份认证设备通过通知特征返回的包括第二版本号的第六响应,具体为:移动终端通过系统的通讯回调方法接收身份认证设备通过通知特征对象返回的包括第二版本号的第六响应;接收身份认证设备通过通知特征返回的第七响应,具体为:移动终端通过系统的通讯回调方法接收身份认证设备通过通知特征对象返回的第七响应。本实施例中提供的一种身份认证方法,在认证过程中与身份认证设备相结合,无需用户输入密码,使身份认证更加便捷和更易操作,同时也提高了身份认证的安全性。实施例2本实施例提供了一种身份认证方法,包括注册阶段和认证阶段,其中,注册阶段如图2-图3所示,包括:步骤101:移动终端向服务器后台发送包括用户标识的第一注册请求;本实施中,用户标识具体为用户名。步骤102:移动终端接收来自服务器后台的第一响应,从第一响应中获取应用ID、第一挑战值、来源数据和第一版本号;具体地,移动终端接收来自服务器后台的JOSN格式的第一响应,将预设的应用ID标识、挑战值标识、来源数据标识和版本号标识作为参数,分别调用系统的获取字符串方法,从第一响应中获取与应用ID标识对应的应用ID、与挑战值标识对应的第一挑战值、与来源数据标识对应的来源数据和与版本号标识对应的第一版本号;本实施例中,预设的应用ID标识具体为APPID、预设的挑战值标识具体为challenge、预设的来源数据标识具体为origin、预设的版本号标识具体为version。例如,移动终端接收来自服务器后台的JOSN格式的第一响应为:"APPID":"https://u2fdemo.appspot.com","challenge":"x9-d9XlfOZVWKjHkWhgIRg","origin":"https://u2fdemo.appspot.com","version":"U2F_V2",将预设的应用ID标识APPID、挑战值标识challenge、来源数据标识origin和版本号标识version作为参数,分别调用系统的获取字符串方法getString(),从第一响应中获取到的应用ID为https://u2fdemo.appspot.com,获取到的第一挑战值为x9-d9XlfOZVWKjHkWhgIRg,获取到的来源数据为:https://u2fdemo.appspot.com,获取到的第一版本号为U2F_V2。步骤103:移动终端检测蓝牙通道是否打开,如果是,则执行步骤105;否则,执行步骤104;步骤104:移动终端开启蓝牙通道;步骤105:移动终端通过蓝牙通道搜索身份认证设备;具体地,移动终端调用系统的搜索接口通过蓝牙通道搜索身份认证设备,并设置搜索回调对象。其中,搜索回调对象中包括系统的搜索回调方法。例如,移动移动使用第一预设类型参数filters,第二预设类型参数settings,搜索回调对象类型参数scanCallback,调用系统的第一搜索接口startscan(),通过蓝牙通道搜索身份认证设备,设置搜索回调对象scanCallback。本实施例中,身份认证设备可以但不限于为具有蓝牙功能的智能密钥设备。步骤106:移动终端通过蓝牙通道接收来自身份认证设备的广播数据;具体地,移动终端通过系统的搜索回调方法接收来自系统的身份认证设备的广播数据和与身份认证设备对应的设备对象。例如,移动终端通过系统的第一搜索回调方法onscanresult()接收来自系统的身份认证设备的广播数据和与身份认证设备对应的设备对象device。本实施例中,搜索接口包括第一搜索接口,搜索回调方法包括第一搜索回调方法,第一搜索接口和第一搜索回调方法对应。需说明的是,搜索接口还可以包括第二搜索接口,搜索回调方法还可以包括第二搜索回调方法,第二搜索方法和第二搜索回调方法对应。例如,第二搜索方法为startlescan(),第二搜索回调方法为onlescanresult()。步骤107:移动终端判断广播数据中的服务标识是否和预设服务标识相匹配,如果是,则执行步骤108;否则,报错。本实施例中,服务标识(俗称UUID)为身份认证设备支持的服务唯一标识信息。本实施例中,预设服务标识具体为“0000fffd-0000-1000-8000-00805f9b34fb”。步骤108:移动终端和身份认证设备建立蓝牙连接;具体地,移动终端使用与身份认证设备对应的设备对象调用系统的连接方法和身份认证设备建立蓝牙连接,获取通用属性协议对象并设置连接回调对象。其中,连接回调对象中包括系统的连接状态回调方法、发现服务回调方法、读取特征回调方法、通讯回调方法。例如,移动终端将第三预设类型对象context、第四预设类型对象false和连接回调对象gattCallback做参数,使用设备对象device调用系统的连接方法connectGatt()和身份认证设备建立蓝牙连接,获取通用属性协议对象gatt并设置连接回调对象gattCallback。其中,连接回调对象gattCallback中包括连接状态回调方法onConnectionStateChange()、发现服务回调方法onServicesDiscovered()、读取特征回调方法onCharacteristicRead()、通讯回调方法onCharacteristicChanged()。步骤109:移动终端判断是否和身份认证设备成功建立蓝牙连接,如果是,则执行步骤110;否则,报错;具体地,移动终端通过系统的连接状态回调方法接收来自系统的和身份认证设备建立蓝牙连接的结果消息,根据来自系统的和身份认证设备建立蓝牙连接的结果消息判断是否和身份认证设备成功建立蓝牙连接。例如,移动终端通过系统的连接状态回调方法onConnectionStateChange(),接收来自系统的整数类型参数paramStatus,并将其作为和身份认证设备建立蓝牙连接的结果消息,判断paramStatus参数是否为0,如果是,则判定和身份认证设备成功建立蓝牙连接;否则,判定和身份认证设备建立蓝牙连接失败。步骤110:移动终端搜索身份认证设备支持的服务;具体地,移动终端使用通用属性协议对象调用系统的搜索服务方法discoverServices(),搜索身份认证设备支持的服务。步骤111:移动终端判断是否搜索到身份认证设备支持的服务,如果是,则执行步骤112;否则,报错;具体地,移动终端通过系统的发现服务回调方法接收来自系统的搜索服务结果消息,根据来自系统的搜索服务结果消息,判断是否和身份认证设备成功建立蓝牙连接。例如,移动终端通过系统的发现服务回调方法onServicesDiscovered()接收来自系统的整数类型参数paramStatus,并将其作为搜索服务结果消息,判断paramStatus参数是否为0,如果是,则判定搜索到身份认证设备支持的服务;否则,判定没有搜索到身份认证设备支持的服务。步骤112:移动终端获取身份认证设备的服务;具体地,移动终端将预设服务标识作为参数,使用通用属性协议对象,调用系统的获取服务方法,获取身份认证设备的服务对象。例如,移动终端将预设服务标识serviceUuid作为参数,使用通用属性协议对象gatt,调用系统的获取服务方法getService(),获取身份认证设备的服务对象service。其中,预设服务标识serviceUuid为“0000fffd-0000-1000-8000-00805f9b34fb”。步骤113:移动终端判断是否和身份认证设备已配对,如果是,则执行步骤116;否则,执行步骤114;步骤114:移动终端和身份认证设备进行配对;步骤115:移动终端判断和身份认证设备是否配对成功,如果是,则执行步骤116;否则,报错;步骤116:移动终端从服务中获取读特征;具体地,移动终端将预设的读特征标识作为参数,使用服务对象调用系统的获取特征方法,从服务对象中获取读特征对象。例如,移动终端将预设的读特征标识characteristicUuid作为参数,使用服务对象service调用系统的获取特征方法getCharacteristic(),从服务对象service中获取读特征对象characteristic。其中,读特征标识characteristicUuid具体为:f1d0fff3-deaa-ecee-b42f-c9ba7ed623bb。步骤117:移动终端读取读特征的特征值;具体地,移动终端将读特征对象作为参数,使用通用属性协议对象,调用系统的读取特征方法,读取读特征对象的特征值。例如,移动终端将读特征对象characteristic作为参数,使用通用属性协议对象gatt,调用系统的读取特征方法readCharacteristic(),读取读特征对象的特征值。步骤118:移动终端判断是否成功读取到读特征的特征值,如果是,则执行步骤119;否则,报错;具体地,移动终端通过系统的读取特征回调方法接收来自系统的读取读特征的特征值的结果消息,根据接收到的来自系统的读取读特征的特征值的结果消息判断是否成功读取到读特征的特征值。例如,移动终端通过系统的读取特征回调方法onCharacteristicRead(),接收来自系统的整数类型参数paramStatus,并将其作为系统的读取读特征的特征值的结果消息,判断paramStatus参数是否为0,如果是,则判定成功读取到读特征的特征值;否则,判定没有成功读取到读特征的特征值。步骤119:移动终端将读特征的特征值作为分包长度;步骤120:移动终端从服务中获取写特征和通知特征;使能通知特征;具体地,移动终端将预设的写特征标识作为参数,使用服务对象调用系统的获取特征方法,从服务对象中获取写特征对象;将预设的通知特征标识作为参数,使用服务对象调用系统的获取特征方法,从服务对象中获取通知特征对象;调用系统的设置特征通知方法,使能通知特征对象;例如,移动终端将预设的写特征标识characteristicUuid作为参数,使用服务对象service调用系统的获取特征方法getCharacteristic(),从服务对象service中获取写特征对象characteristic;将预设的通知特征标识characteristicUuid作为参数,使用服务对象service调用系统的获取特征方法getCharacteristic(),从服务对象service中获取通知特征对象characteristic;调用系统的设置特征通知方法setCharacteristicNotification(),使能通知特征对象。其中,写特征标识characteristicUuid具体为:“f1d0fff1-deaa-ecee-b42f-c9ba7ed623bb”。通知特征标识characteristicUuid具体为:f1d0fff2-deaa-ecee-b42f-c9ba7ed623bb。步骤121:移动终端根据写特征向身份认证设备发送获取版本号指令;具体地,移动终端组织获取版本号指令,向身份认证设备发送获取版本号指令。更加具体地,移动终端组织第三指令,将第三指令作为获取版本号指令中的数据域,并在第三指令之前添加预设协议指令标识和获取版本号指令的数据长度。本实施例中,获取版本号指令格式为:预设协议指令标识数据域的数据长度数据域1个字节2个字节第三指令的格式为:例如,移动终端将第三指令的指令类别“00”设置在第三指令的第一字节上,将获取版本号指令码“03”设置在第三指令的第二个字节上,将第三指令的数据域的数据长度“000000”设置在第三指令的第五到第七字节上,将期望应答值长度“0000”设置在第三指令的最后两个字节上,得到包括获取版本号指令码的第三指令为“000300000000000000”,将第三指令作为获取版本号指令中的数据域,并在第三指令前添加预设协议指令标识“83”和第三指令的数据长度“0009”,得到获取版本号指令“830009000300000000000000”,向身份认证设备发送获取版本号指令。本步骤还可以具体为:移动终端使用写特征对象向身份认证设备发送获取版本号指令。步骤122:移动终端接收身份认证设备通过通知特征返回的第二响应;具体地,移动终端通过系统的通讯回调方法接收来自系统的身份认证设备通过通知特征对象返回的第二响应。例如,移动终端通过系统的通讯回调方法接收来自系统的BluetoothGattCharacteristic类型参数paramCharacteristic,从参数paramCharacteristic中获取身份认证设备通过通知特征返回的第二响应。步骤123:移动终端判断第二响应的响应码是否为第一预设值,如果是,执行步骤124;否则,报错;具体地,移动终端解析第二响应,获取第二响应中的最后两个字节上的数据,并将其作为响应码,判断第二响应的响应码是否为第一预设值,如果是,则执行步骤124;否则,报错。本实施例中,第一预设值为9000。步骤124:移动终端从第二响应中获取第二版本号;具体地,移动终端解析第二响应,获取第二响应中的第三个字节之后(不包括第三个字节),倒数第二个字节之前(不包括倒数第二个字节)之间的所有字节上的数据,并将其作为第二版本号。例如,移动终端解析第二响应“8300085532465f56329000”,获取第二响应中的第三个字节“08”之后(不包括第三个字节),倒数第二个字节“90”之前(不包括倒数第二个字节)之间的所有字节上的数据,获取到的数据为“5532465f5632”,并将“5532465f5632”作为第二版本号。步骤125:移动终端判断第一版本号与第二版本号是否相匹配,如果是,则执行步骤126;否则,报错;步骤126:移动终端根据预设的注册指令类型、第一挑战值、来源数据组织第一客户端数据,根据分包长度、第一客户端数据和应用ID组织注册指令,根据写特征向身份认证设备发送注册指令;本步骤具体包括:步骤a1:移动终端组织包括预设的注册指令类型、第一挑战值和来源数据的第一客户端数据;具体地,移动终端创建JSON对象clientData;移动终端在对象clientData中存入预设的注册指令类型及其标识、第一挑战值及其标识和来源数据及其标识,将对象clientData转换为字符串类型,得到JSON格式的第一客户端数据;例如:移动终端创建JSON对象clientData;移动终端在对象clientData中存入预设的注册指令类型navigator.id.finishEnrollment及其标识typ、第一挑战值x9-d9XlfOZVWKjHkWhgIRg及其标识challenge和来源数据https://u2fdemo.appspot.com及其标识origin,将对象clientData转换为JSON格式的字符串类型,得到第一客户端数据;{"typ":"navigator.id.finishEnrollment","challenge":"x9-d9XlfOZVWKjHkWhgIRg","origin":"https://u2fdemo.appspot.com"}。步骤a2:移动终端对第一客户端数据和应用ID分别进行哈希处理,得到第一哈希值和第二哈希值,根据第一哈希值和第二哈希值组织注册数据;具体地,移动终端使用第一预设算法分别对第一客户端数据和应用ID做哈希,得到第一哈希值和第二哈希值,根据第一哈希值和第二哈希值组织注册数据。其中,第一哈希值为哈希后的第一客户端数据;第二哈希值为哈希后的应用ID。第一预设算法可以但不限于为SHA256算法。例如:移动终端使用SHA256算法分别对第一客户端数据{"typ":"navigator.id.finishEnrollment","challenge":"x9-d9XlfOZVWKjHkWhgIRg","origin":"https://u2fdemo.appspot.com"}和"APPID":"https://u2fdemo.appspot.com"做哈希,得到第一哈希值"5BFDF71873332EAA9015A128DF3556196E4AC4243576A71988A047E44EDDC882"和第二哈希值“A1AA11AFF7E71252FE5E32AA80B425A0FAFBE5F8A5EA767316A2562AB48DBF56”,根据第一哈希值和第二哈希值组织注册数据,得到的注册数据为“5BFDF71873332EAA9015A128DF3556196E4AC4243576A71988A047E44EDDC882A1AA11AFF7E71252FE5E32AA80B425A0FAFBE5F8A5EA767316A2562AB48DBF56”。步骤a3:移动终端根据注册数据和分包长度组织注册指令;具体地,移动终端根据注册数据组织第一指令,根据第一指令和分包长度组织注册指令。本实施例中,注册指令可以包括一包或者多包数据。更加具体地,移动终端将注册指令码设置在第一指令的第二个字节上,将注册数据设置在第一指令中的数据域中,得到包括注册指令码和注册数据的第一指令,在第一指令前添加预设协议指令标识和第一指令的数据长度,得到注册指令,根据分包长度判断是否需要对注册指令进行分包处理,如果是,则根据分包长度对注册指令进行分包,得到多包注册有效数据,并将第一包注册有效数据作为第一包注册发送数据,从第二包注册有效数据开始在每包注册有效数据前添加相应的包索引得到第一包注册发送数据之后的其他包注册发送数据;否则,执行步骤a4。本实施例中,注册指令码具体为“01”,预设协议指令标识具体为“83”。本实施例中,注册指令格式为:预设协议指令标识数据域的数据长度数据域1个字节2个字节第一指令的格式为:例如,移动终端将第一指令的指令类别“00”设置在第一指令的第一字节上,将注册指令码“01”设置在第一指令的第二个字节上,将注册数据的数据长度“000040”设置在第一指令的第五到第七字节上,将注册数据“5BFDF71873332EAA9015A128DF3556196E4AC4243576A71988A047E44EDDC882A1AA11AFF7E71252FE5E32AA80B425A0FAFBE5F8A5EA767316A2562AB48DBF56”设置在第一指令中的数据域中,将期望应答值长度“0000”设置在第一指令的最后两个字节上,得到包括注册指令码和注册数据的第一指令为“000100000000405BFDF71873332EAA9015A128DF3556196E4AC4243576A71988A047E44EDDC882A1AA11AFF7E71252FE5E32AA80B425A0FAFBE5F8A5EA767316A2562AB48DBF560000”,在第一指令前添加预设协议指令标识“83”和第一指令的数据长度“0049”,得到注册指令“830049000100000000405BFDF71873332EAA9015A128DF3556196E4AC4243576A71988A047E44EDDC882A1AA11AFF7E71252FE5E32AA80B425A0FAFBE5F8A5EA767316A2562AB48DBF560000”,根据分包长度“20”判断是否需要对注册指令进行分包处理,得到的第一包注册有效数据为:“830049000100000000405BFDF71873332EAA9015”,第二包注册有效数据为:“A128DF3556196E4AC4243576A71988A047E44E”;第三包注册有效数据为:“DDC882A1AA11AFF7E71252FE5E32AA80B425A0”;第四包注册有效数据为:“FAFBE5F8A5EA767316A2562AB48DBF560000”,并将第一包注册有效数据作为第一包注册发送数据:“830049000100000000405BFDF71873332EAA9015”,在第二包注册有效数据前添加包索引“00”,得到第二包注册发送数据:“00A128DF3556196E4AC4243576A71988A047E44E”;在第三包注册有效数据前添加包索引“01”,得到第三包注册发送数据:“01DDC882A1AA11AFF7E71252FE5E32AA80B425A0”;在第四包注册有效数据前添加包索引“02”,得到第四包注册发送数据:“02FAFBE5F8A5EA767316A2562AB48DBF560000”。步骤a4:移动终端根据写特征向身份认证设备发送注册指令。具体地,移动终端使用写特征对象向身份认证设备发送注册指令。当身份认证设备接收到来自移动终端的注册指令后,身份认证设备生成密钥对及与密钥对相对应的密钥句柄,组织包括密钥对中的公钥、密钥句柄、注册数据中的第一哈希值和第二哈希值的第一待签名数据,根据预设的哈希算法和密钥对中的私钥对第一待签名数据进行签名得到第一签名数据,组织包括密钥对中的公钥、与密钥对相对应的密钥句柄和第一签名数据的第一认证判据,将包括第一认证判据和响应码的第三响应返回给移动终端。步骤127:移动终端接收身份认证设备通过通知特征返回的第三响应;具体地,移动终端通过系统的通讯回调方法接收来自系统的身份认证设备通过通知特征对象返回的第三响应。例如,移动终端通过系统的通讯回调方法接收来自系统的BluetoothGattCharacteristic类型参数paramCharacteristic,从参数paramCharacteristic中获取身份认证设备通过通知特征对象返回的第三响应。步骤128:移动终端判断第三响应的响应码是否为第一预设值,如果是,执行步骤129;否则,报错;具体地,移动终端解析第三响应,获取第三响应中的最后两个字节上的数据,并将其作为响应码,判断第三响应的响应码是否为第一预设值,如果是,则执行步骤129;否则,报错。步骤129:移动终端根据第三响应、第一客户端数据、应用ID和用户标识生成第二注册请求,向服务器后台发送第二注册请求;具体地,移动终端从第三响应中获取第一认证判据,生成包括第一认证判据、第一客户端数据、应用ID和用户标识的第二注册请求,向服务器后台发送第二注册请求;更加具体地,移动终端解析第三响应,获取第三响应中的第三个字节之后(不包括第三个字节),倒数第二个字节之前(不包括倒数第二个字节)之间的所有字节上的数据,并将其作为第一认证判据,生成包括第一认证判据、第一客户端数据、应用ID和用户标识的第二注册请求,向服务器后台发送第二注册请求;例如,移动终端解析第三响应8302260504f8487177637e0a57c7c52f6ba952fc47433fc8b2fde13b73e84823473e356c53c7517639b5f1781c32e08660327255335bf4eb92a6907ca281d7dacd56ba4f9340b842ccb576b616f1c536772b4fdd0c61e6992547b2c51a331cc7599ab2a198113fa7083f6e6825fad2cd0848b517ecb0b80e2d6c0a2707912d56cddbe9c03154308201563081fda003020102020a47901280001155957352300a06082a8648ce3d0403023017311530130603550403130c4654204649444f2030313030301e170d3134303831343138323933325a170d3234303831343138323933325a3031312f302d0603550403132650696c6f74476e756262792d302e342e312d34373930313238303030313135353935373335303059301306072a8648ce3d020106082a8648ce3d03010703420004b174bc49c7ca254b70d2e5c207cee9cf174820ebd77ea3c65508c26da51b657c1cc6b952f8621697936482da0a6d3d3826a59095daf6cd7c03e2e60385d2f6d9a31730153013060b2b0601040182e51c020101040403020430300a06082a8648ce3d040302034800304502210099b8903a57bc9d2a73da0258e70fdf331a1f72945521314ab528477e7fe1ed4002207a8b7d0d285dcb440d4450e52ac28c21f0bc4b85a0b3a04e42c6d4f4ae47e0a630450221008e641cc85b3c506874e4e6236e73e473331b5fb5348589221954080aa9a0f73a02201fdba135640ebccd09e7ac684b1674fe15a639b64e991af45ffd9c36c59b802c9000,获取第三响应的第三个字节“26”(不包括第三个字节),倒数第二个字节“90”之前(不包括倒数第二个字节)之间的所有字节上的数据,获取到的数据为0504f8487177637e0a57c7c52f6ba952fc47433fc8b2fde13b73e84823473e356c53c7517639b5f1781c32e08660327255335bf4eb92a6907ca281d7dacd56ba4f9340b842ccb576b616f1c536772b4fdd0c61e6992547b2c51a331cc7599ab2a198113fa7083f6e6825fad2cd0848b517ecb0b80e2d6c0a2707912d56cddbe9c03154308201563081fda003020102020a47901280001155957352300a06082a8648ce3d0403023017311530130603550403130c4654204649444f2030313030301e170d3134303831343138323933325a170d3234303831343138323933325a3031312f302d0603550403132650696c6f74476e756262792d302e342e312d34373930313238303030313135353935373335303059301306072a8648ce3d020106082a8648ce3d03010703420004b174bc49c7ca254b70d2e5c207cee9cf174820ebd77ea3c65508c26da51b657c1cc6b952f8621697936482da0a6d3d3826a59095daf6cd7c03e2e60385d2f6d9a31730153013060b2b0601040182e51c020101040403020430300a06082a8648ce3d040302034800304502210099b8903a57bc9d2a73da0258e70fdf331a1f72945521314ab528477e7fe1ed4002207a8b7d0d285dcb440d4450e52ac28c21f0bc4b85a0b3a04e42c6d4f4ae47e0a630450221008e641cc85b3c506874e4e6236e73e473331b5fb5348589221954080aa9a0f73a02201fdba135640ebccd09e7ac684b1674fe15a639b64e991af45ffd9c36c59b802c并将其作为第一认证判据,生成包括第一认证判据、第一客户端数据、应用ID和用户标识的第二注册请求,向服务器后台发送第二注册请求;本实施例中,移动终端和服务器后台之间的通讯数据均为JOSN格式数据。当服务器后台接收到第二注册请求后,从第二注册请求中获取第一认证判据、第一客户端数据、应用ID和用户标识,根据第一客户端数据、应用ID、第一认证判据中的公钥和第一认证判据中的密钥句柄、预设的哈希算法对第一认证判据中的第一签名数据进行验签,判断验签是否成功,如果是,则将第一认证判据中的密钥句柄和公钥分别与用户标识建立对应关系并保存,将错误码设置为第二预设值,向移动终端发送包括错误码的第四响应;否则,将错误码设置为第三预设值,向移动终端发送包括错误码的第四响应。更加具体地,当服务器后台接收到第二注册请求后,从第二注册请求中获取第一认证判据、第一客户端数据、应用ID和用户标识,根据第一预设算法对第一客户端数据和应用ID分别做哈希得到第一服务器后台数据和第二服务器后台数据;组织包括第一服务器后台数据、第二服务器后台数据、第一认证判据中的公钥和第一认证判据中的密钥句柄的第一原始数据,使用预设的哈希算法对第一原始数据做哈希,生成第一比较值,使用公钥对第一认证判据中的第一签名数据进行解密得到第一解密数据,判断第一比较值是否与第一解密数据相匹配,如果是,则将第一认证判据中的密钥句柄和公钥分别与用户标识建立对应关系并保存,将错误码设置为第二预设值,向移动终端发送包括错误码的第四响应;否则,将错误码设置为第三预设值,向移动终端发送包括错误码的第四响应。本实施例中,第二预设值为0,第三预设值为1。步骤130:移动终端接收来自服务器后台的第四响应;步骤131:移动终端从第四响应中获取错误码,判断错误码是否为第二预设值,如果是,则注册成功;否则,注册失败。认证阶段,如图4-图5所示,包括:步骤201:移动终端向服务器后台发送包括用户标识的第一认证请求;本实施中,用户标识具体为用户名。步骤202:移动终端接收来自服务器后台的第五响应,从第五响应中获取应用ID、第二挑战值、来源数据、第一版本号和与用户标识对应的密钥句柄;具体地,移动终端接收来自服务器后台的JOSN格式的第五响应,将预设的应用ID标识、挑战值标识、来源数据标识和版本号标识、密钥句柄标识作为参数,分别调用系统的获取字符串方法,从第五响应中获取与应用ID标识对应的应用ID、与挑战值标识对应的第二挑战值、与来源数据标识对应的来源数据、与版本号标识对应的第一版本号和与密钥句柄标识对应的密钥句柄;本实施例中,预设的应用ID标识具体为APPID;预设的挑战值标识具体为challenge;预设的来源数据标识具体为origin;预设的版本号标识具体为version;预设的密钥句柄标识为keyHandle。例如:移动终端接收来自服务器后台的JOSN格式的第五响应为"APPID":"https://u2fdemo.appspot.com","challenge":"ZaFJmTE0g4yz0sk8D0x07g","origin":"https://u2fdemo.appspot.com""version":"U2F_V2","keyHandle":"qCw3hfVQlqxr8Ng-uwqa0nZch39y6wB7U7NjW4MdTz4_lOHvjm-8JIUeK0fm5THjmWV_OQOVwjG92wxL-7z0Og",将预设的应用ID标识APPID、挑战值标识challenge、来源数据标识origin、版本号标识version和密钥句柄标识keyHandle作为参数,分别调用系统的获取字符串方法getString(),从第五响应中获取到的应用ID为https://u2fdemo.appspot.com,获取到的第二挑战值为ZaFJmTE0g4yz0sk8D0x07g,获取到的来源数据为:https://u2fdemo.appspot.com,获取到的第一版本号为U2F_V2;获取到与用户标识对应的密钥句柄为:qCw3hfVQlqxr8Ng-uwqa0nZch39y6wB7U7NjW4MdTz4_lOHvjm-8JIUeK0fm5THjmWV_OQOVwjG92wxL-7z0Og。步骤203:移动终端检测蓝牙通道是否打开,如果是,则执行步骤205;否则,执行步骤204;步骤204:移动终端开启蓝牙通道;步骤205:移动终端通过蓝牙通道搜索身份认证设备;具体地,移动终端调用系统的搜索接口通过蓝牙通道搜索身份认证设备,并设置搜索回调对象。其中,搜索回调对象中包括系统的搜索回调方法。例如,移动移动使用第一预设类型参数filters,第二预设类型参数settings,搜索回调类型参数scanCallback,调用系统的第一搜索接口startscan(),通过蓝牙通道搜索身份认证设备,设置搜索回调对象scanCallback。步骤206:移动终端通过蓝牙通道接收来自身份认证设备的广播数据;具体地,移动终端通过系统的搜索回调方法接收来自系统的身份认证设备的广播数据和与身份认证设备对应的设备对象。例如,移动终端通过系统的第一搜索回调方法onscanresult()接收来自系统的身份认证设备的广播数据和与身份认证设备对应的设备对象device。本实施例中,搜索接口包括第一搜索接口,搜索回调方法包括第一搜索回调方法,第一搜索接口和第一搜索回调方法对应。需说明的是,搜索接口还可以包括第二搜索接口,搜索回调方法还可以包括第二搜索回调方法,第二搜索方法和第二搜索回调方法对应。步骤207:移动终端判断广播数据中的服务标识是否和预设服务标识相匹配,如果是,则执行步骤208;否则,报错;步骤208:移动终端和身份认证设备建立蓝牙连接;具体地,移动终端使用与身份认证设备对应的设备对象调用系统的连接方法和和身份认证设备建立蓝牙连接,获取通用属性协议对象并设置连接回调对象。其中,连接回调对象中包括系统的连接状态回调方法、发现服务回调方法、读取特征回调方法和通讯回调方法。例如,移动终端将第三预设类型对象context、第四预设类型对象false和连接回调对象gattCallback做参数,使用设备对象device调用系统的连接方法connectGatt()和身份认证设备建立蓝牙连接,获取通用属性协议对象gatt并设置连接回调对象gattCallback。其中,连接回调对象gattCallback中包括连接状态回调方法onConnectionStateChange()、发现服务回调方法onServicesDiscovered()、读取特征回调方法onCharacteristicRead()、通讯回调方法onCharacteristicChanged()。步骤209:移动终端判断是否和身份认证设备成功建立蓝牙连接,如果是,则执行步骤210;否则,报错;具体地,移动终端通过系统的连接状态回调方法接收来自系统的和身份认证设备建立蓝牙连接的结果消息,根据来自系统的和身份认证设备建立蓝牙连接的结果消息判断是否和身份认证设备成功建立蓝牙连接。例如,移动终端通过系统的连接状态回调方法onConnectionStateChange(),接收来自系统的整数类型参数paramStatus,并将其作为和身份认证设备建立蓝牙连接的结果消息,判断paramStatus参数是否为0,如果是,则判定和身份认证设备成功建立蓝牙连接;否则,判定和身份认证设备建立蓝牙连接失败。步骤210:移动终端搜索身份认证设备支持的服务;具体地,移动终端使用通用属性协议对象调用系统的搜索服务方法discoverServices(),搜索身份认证设备支持的服务。步骤211:移动终端判断是否搜索到身份认证设备支持的服务,如果是,则执行步骤212;否则,报错;具体地,移动终端通过系统的发现服务回调方法接收来自系统的搜索服务结果消息,根据来自系统的搜索服务结果消息,判断是否和身份认证设备成功建立蓝牙连接。例如,移动终端通过系统的发现服务回调方法onServicesDiscovered()接收来自系统的整数类型参数paramStatus,并将其作为搜索服务结果消息,判断paramStatus参数是否为0,如果是,则判定搜索到身份认证设备支持的服务;否则,判定没有搜索到身份认证设备支持的服务。步骤212:移动终端获取身份认证设备的服务;具体地,移动终端将预设服务标识作为参数,使用通用属性协议对象,调用系统的获取服务方法,获取身份认证设备的服务对象。例如,移动终端将预设服务标识serviceUuid作为参数,使用通用属性协议对象gatt,调用系统的获取服务方法getService(),获取身份认证设备的服务对象service。其中,预设服务标识serviceUuid为“0000fffd-0000-1000-8000-00805f9b34fb”。步骤213:移动终端判断身份认证设备是否已配对,如果是,则执行步骤216;否则,执行步骤214;步骤214:移动终端和身份认证设备进行配对;步骤215:移动终端判断和身份认证设备是否配对成功,如果是,则执行步骤216;否则,报错;步骤216:移动终端从服务中获取读特征;具体地,移动终端将预设的读特征标识作为参数,使用服务对象调用系统的获取特征方法,从服务对象中获取读特征对象。例如,移动终端将预设的读特征标识characteristicUuid作为参数,使用服务对象service调用系统的获取特征方法getCharacteristic(),从服务对象service中获取读特征对象characteristic。其中,读特征标识characteristicUuid具体为:f1d0fff3-deaa-ecee-b42f-c9ba7ed623bb。步骤217:移动终端读取读特征的特征值;具体地,移动终端将读特征对象作为参数,使用通用属性协议对象,调用系统的读取特征方法,读取读特征对象的特征值。例如,移动终端将读特征对象characteristic作为参数,使用通用属性协议对象gatt,调用系统的读取特征方法readCharacteristic(),读取读特征对象的特征值。步骤218:移动终端判断是否成功读取到读特征的特征值,如果是,则执行步骤219;否则,报错;具体地,移动终端通过系统的读取特征回调方法接收来自系统的读取读特征的特征值的结果消息,根据接收到的来自系统的读取读特征的特征值的结果消息判断是否成功读取到读特征的特征值。例如,移动终端通过系统的读取特征回调方法onCharacteristicRead(),接收来自系统的整数类型参数paramStatus,并将其作为系统的读取读特征的特征值的结果消息,判断paramStatus参数是否为0,如果是,则判定成功读取到读特征的特征值;否则,判定没有成功读取到读特征的特征值。步骤219:移动终端将读特征的特征值作为分包长度;步骤220:移动终端从服务中获取写特征和通知特征,使能通知特征;具体地,移动终端将预设的写特征标识作为参数,使用服务对象调用系统的获取特征方法,从服务对象中获取写特征对象。将预设的通知特征标识作为参数,使用服务对象调用系统的获取特征方法,从服务对象中获取通知特征对象;调用系统的设置特征通知方法,使能通知特征对象;例如,移动终端将预设的写特征标识characteristicUuid作为参数,使用服务对象service调用系统的获取特征方法getCharacteristic(),从服务对象service中获取写特征对象characteristic。将预设的通知特征标识characteristicUuid作为参数,使用服务对象service调用系统的获取特征方法getCharacteristic(),从服务对象service中获取通知特征对象characteristic;调用系统的设置特征通知方法setCharacteristicNotification(),使能通知特征对象。其中,写特征标识characteristicUuid具体为:“f1d0fff1-deaa-ecee-b42f-c9ba7ed623bb”。通知特征标识characteristicUuid具体为:f1d0fff2-deaa-ecee-b42f-c9ba7ed623bb。步骤221:移动终端根据写特征向身份认证设备发送获取版本号指令;具体地,移动终端组织获取版本号指令,向身份认证设备发送获取版本号指令。更加具体地,移动终端组织第三指令,将第三指令作为获取版本号指令中的数据域,并在第三指令之前添加预设协议指令标识和获取版本号指令的数据长度。例如,移动终端将第三指令的指令类别“00”设置在第三指令的第一字节上,将获取版本号指令码“03”设置在第三指令的第二个字节上,将第三指令的数据域的数据长度“000000”设置在第三指令的第五到第七字节上,将期望应答值长度“0000”设置在第三指令的最后两个字节上,得到包括获取版本号指令码的第三指令为“000300000000000000”,将第三指令作为获取版本号指令中的数据域,并在第三指令前添加预设协议指令标识“83”和第三指令的数据长度“0009”,得到获取版本号指令“830009000300000000000000”,向身份认证设备发送获取版本号指令。其中,向身份认证设备发送获取版本号指令,具体为:移动终端使用写特征对象向身份认证设备发送获取版本号指令。步骤222:移动终端接收身份认证设备通过通知特征返回的第六响应;具体地,移动终端通过系统的通讯回调方法接收来自系统的身份认证设备返回的第六响应。例如,移动终端通过系统的通讯回调方法接收来自系统的BluetoothGattCharacteristic类型参数paramCharacteristic,从参数paramCharacteristic中获取身份认证设备返回的第六响应。步骤223:移动终端判断第六响应的响应码是否为第一预设值,如果是,执行步骤224;否则,报错;具体地,移动终端解析第六响应,获取第六响应中的最后两个字节上的数据,并将其作为响应码,判断第六响应的响应码是否为第一预设值,如果是,则执行步骤224;否则,报错。本实施例中,第一预设值为9000。步骤224:移动终端从第六响应中获取第二版本号;具体地,移动终端解析第六响应,获取第六响应中的第三个字节之后(不包括第三个字节),倒数第二个字节之前(不包括倒数第二个字节)之间的所有字节上的数据,并将其作为第二版本号。例如,移动终端解析第六响应“8300085532465f56329000”,获取第六响应中的第三个字节“08”之后(不包括第三个字节),倒数第二个字节“90”之前(不包括倒数第二个字节)之间的所有字节上的数据,获取到的数据为“5532465f5632”,并将“5532465f5632”作为第二版本号。步骤225:移动终端判断第一版本号与第二版本号是否相匹配,如果是,则执行步骤226;否则,报错;步骤226:移动终端根据预设的认证指令类型、第二挑战值和来源数据组织第二客户端数据,根据应用ID、第二客户端数据和分包长度组织认证指令,根据写特征向身份认证设备发送认证指令;本步骤具体包括:步骤b1:移动终端组织包括预设的认证指令类型、第二挑战值和来源数据的第二客户端数据;具体地,移动终端创建JSON对象clientData,移动终端在对象clientData中存入预设的认证指令类型及其标识、第二挑战值及其标识和来源数据及其标识,将对象clientData转换为字符串类型,得到JSON格式的第二客户端数据;例如,移动终端创建JSON对象clientData,移动终端在对象clientData中存入预设的认证指令类型navigator.id.getAssertion及其标识typ,第二挑战值ZaFJmTE0g4yz0sk8D0x07g及其标识challenge和来源数据https://u2fdemo.appspot.com及其标识origin,将对象clientData转换为字符串类型,得到第二客户端数据{"typ":"navigator.id.getAssertion","challenge":"ZaFJmTE0g4yz0sk8D0x07g","origin":"https://u2fdemo.appspot.com"}。步骤b2:移动终端对第二客户端数据和应用ID分别进行哈希处理,得到第三哈希值和第四哈希值,根据第三哈希值、第四哈希值和密钥句柄得到认证数据;具体地,移动终端使用第一预设算法分别对第二客户端数据和应用ID做哈希,得到第三哈希值和第四哈希值,根据第三哈希值、第四哈希值、密钥句柄长度和密钥句柄组织认证数据。其中,第三哈希值为哈希后的第二客户端数据;第四哈希值为哈希后的应用ID。第一预设算法可以但不限于为SHA256。例如:移动终端使用SHA256算法分别对第二客户端数据“{"typ":"navigator.id.getAssertion","challenge":"ZaFJmTE0g4yz0sk8D0x07g","origin":"https://u2fdemo.appspot.com"}”和”APPID”:"https://u2fdemo.appspot.com"做哈希,得到第三哈希值“5FB6F5CA47F4BB78C03F7F4CED729B92364FE43D399BE8DA397AF4F2F56549E2”和第四哈希值“A1AA11AFF7E71252FE5E32AA80B425A0FAFBE5F8A5EA767316A2562AB48DBF56”,根据第三哈希值、第四哈希值、密钥句柄长度“40”和密钥句柄“F21A62C01BB90009EAE0F1CEE253DAE34D2B751AAA8C94D90AD558F42E29B976E16CB8BACE08E676A2332923D4B261B78285696F9CB3F59C31739750FE55306A”组织认证数据,得到的认证数据为“5FB6F5CA47F4BB78C03F7F4CED729B92364FE43D399BE8DA397AF4F2F56549E2A1AA11AFF7E71252FE5E32AA80B425A0FAFBE5F8A5EA767316A2562AB48DBF5640F21A62C01BB90009EAE0F1CEE253DAE34D2B751AAA8C94D90AD558F42E29B976E16CB8BACE08E676A2332923D4B261B78285696F9CB3F59C31739750FE55306A”。步骤b3:移动终端根据认证数据、FIDO协议和分包长度组织认证指令;具体地,移动终端根据认证数据组织第二指令,根据第二指令和分包长度组织认证指令。本实施例中,认证指令可以包括一包或者多包数据。更加具体地,移动终端将认证指令码设置在第二指令的第二个字节上,将认证数据设置为第二指令中的数据域,得到包括认证指令码和认证数据的第二指令,将第二指令作为认证指令的数据域,在第二指令前添加预设协议指令标识和第二指令的数据长度,得到认证指令,根据分包长度判断是否需要对认证指令进行分包处理,如果是,则根据分包长度对认证指令进行分包,得到多包有效数据,并将第一包认证有效数据作为第一包认证发送数据,从第二包认证有效数据开始在每包认证有效数据前添加相应的包索引得到第一包认证发送数据之后的其他包认证发送数据;否则,执行步骤b4。本实施例中,认证指令码具体为“02”,预设协议指令标识具体为“83”。本实施例中,认证指令格式为:预设协议指令标识数据域的数据长度数据域1个字节2个字节第二指令的格式为:例如,移动终端将第二指令的指令类别“00”,设置在第二指令的第一字节上,将认证指令码“02”设置在第二指令的第二个字节上,将认证数据的数据长度“000081”设置在第二指令的第五到第七字节上,将认证数据“5FB6F5CA47F4BB78C03F7F4CED729B92364FE43D399BE8DA397AF4F2F56549E2A1AA11AFF7E71252FE5E32AA80B425A0FAFBE5F8A5EA767316A2562AB48DBF5640F21A62C01BB90009EAE0F1CEE253DAE34D2B751AAA8C94D90AD558F42E29B976E16CB8BACE08E676A2332923D4B261B78285696F9CB3F59C31739750FE55306A”设置在第二指令中的数据域中,将期望应答值长度“0000”设置在第二指令的最后两个字节上,得到包括认证指令码和认证数据的第二指令为“000203000000815FB6F5CA47F4BB78C03F7F4CED729B92364FE43D399BE8DA397AF4F2F56549E2A1AA11AFF7E71252FE5E32AA80B425A0FAFBE5F8A5EA767316A2562AB48DBF5640F21A62C01BB90009EAE0F1CEE253DAE34D2B751AAA8C94D90AD558F42E29B976E16CB8BACE08E676A2332923D4B261B78285696F9CB3F59C31739750FE55306A0000”,将第二指令作为认证指令中的数据域,在第二指令前添加预设协议指令标识“83”和第二指令的数据长度“008C”,得到认证指令“83008C000203000000815FB6F5CA47F4BB78C03F7F4CED729B92364FE43D399BE8DA397AF4F2F56549E2A1AA11AFF7E71252FE5E32AA80B425A0FAFBE5F8A5EA767316A2562AB48DBF5640F21A62C01BB90009EAE0F1CEE253DAE34D2B751AAA8C94D90AD558F42E29B976E16CB8BACE08E676A2332923D4B261B78285696F9CB3F59C31739750FE55306A0000”,根据分包长度“20”判断是否需要对认证指令进行分包处理,得到的第一包认证有效数据为:“83008C000203000000815FB6F5CA47F4BB78C03F”,第二包认证有效数据为:“7F4CED729B92364FE43D399BE8DA397AF4F2F5”;第三包认证有效数据为:“6549E2A1AA11AFF7E71252FE5E32AA80B425A0”第四包认证有效数据为:“FAFBE5F8A5EA767316A2562AB48DBF5640F21A”;第五包认证有效数据为:“62C01BB90009EAE0F1CEE253DAE34D2B751AAA”,第六包认证有效数据为:“8C94D90AD558F42E29B976E16CB8BACE08E676”;第七包认证有效数据为:“A2332923D4B261B78285696F9CB3F59C317397”;第八包认证有效数据为“50FE55306A0000”;并将第一包认证有效数据作为第一包认证发送数据:“83008C000203000000815FB6F5CA47F4BB78C03F”,在第二包认证有效数据前添加包索引“00”,得到第二包认证发送数据:“007F4CED729B92364FE43D399BE8DA397AF4F2F5”;在第三包认证有效数据前添加包索引“01”,得到第三包认证发送数据:“016549E2A1AA11AFF7E71252FE5E32AA80B425A0”;在第四包认证有效数据前添加包索引“02”,得到第四包认证发送数据:“02FAFBE5F8A5EA767316A2562AB48DBF5640F21A”;在第五包认证有效数据前添加包索引“03”,得到第五包认证发送数据:“0362C01BB90009EAE0F1CEE253DAE34D2B751AAA”;在第六包认证有效数据前添加包索引“04”,得到第六包认证发送数据:“048C94D90AD558F42E29B976E16CB8BACE08E676”;在第七包认证有效数据前添加包索引“05”,得到第七包认证发送数据:“05A2332923D4B261B78285696F9CB3F59C317397”;在第八包认证有效数据前添加包索引“06”,得到第八包认证发送数据:“0650FE55306A0000”。步骤b4:移动终根据写特征向身份认证设备发送认证指令。具体地,移动终端使用写特征对象向身份认证设备发送认证指令。当身份认证设备接收到来自移动终端的认证指令后,身份认证设备根据认证指令中的密钥句柄获取与密钥句柄对应的私钥,组织包括认证数据中的第三哈希值和第四哈希值的第二待签名数据,根据预设的哈希算法和与密钥句柄对应的私钥对第二待签名数据进行签名得到第二签名数据,组织包括第二签名数据的第二认证判据,将包括第二认证判据和第一预设值的第七响应返回给移动终端。步骤227:移动终端接收身份认证设备通过通知特征返回的第七响应;具体地,移动终端通过系统的通讯回调方法接收来自系统的身份认证设备通过通知特征对象返回的第七响应。例如,移动终端通过系统的通讯回调方法接收来自系统的BluetoothGattCharacteristic类型参数paramCharacteristic,从参数paramCharacteristic中获取身份认证设备通过通知特征对象返回的第七响应。步骤228:移动终端判断第七响应的响应码是否为第一预设值,如果是,执行步骤229;否则,报错;步骤229:移动终端根据第二客户端数据、应用ID、用户标识和第七响应生成第二认证请求,向服务器后台发送第二认证请求;具体地,移动终端从第七响应中获取第二认证判据,生成包括第二认证判据、第二客户端数据、应用ID和用户标识的第二认证请求,向服务器后台发送第二认证请求;更加具体地,移动终端解析第七响应,获取第七响应中的第三个字节之后(不包括第三个字节),倒数第二个字节之前(不包括倒数第二个字节)之间的所有字节上的数据,并将其作为第二认证判据,生成包括第二认证判据、第二客户端数据、应用ID和用户标识的第二认证请求,向服务器后台发送第二认证请求;例如,移动终端解析第七响应83004e01000000033045022066f456ba4b5decff5f63c78eca95a56d5fd757a8221ec89c6b9e7324ef537c8f022100c66a187fcce133ea99294c1804f023c4546513daf5fe1b09afd7ae21b334ea969000,获取第七响应的第三个字节“4e”(不包括第三个字节),倒数第二个字节“90”之前(不包括倒数第二个字节)之间的所有字节上的数据,获取到的数据为01000000033045022066f456ba4b5decff5f63c78eca95a56d5fd757a8221ec89c6b9e7324ef537c8f022100c66a187fcce133ea99294c1804f023c4546513daf5fe1b09afd7ae21b334ea96并将其作为第二认证判据,生成包括第二认证判据、第二客户端数据、应用ID和用户标识的第二认证请求,向服务器后台发送第二认证请求;本实施例中,移动终端和服务器后台之间的通讯数据均为JOSN格式数据。当服务器后台接收到第二认证请求后,从第二认证请求中获取第二客户端数据、应用ID、用户标识和第二认证判据,根据用户标识获取与用户标识对应的公钥,根据第二客户端数据和应用ID、预设的哈希算法和公钥对第二认证判据中的第二签名数据进行验签,判断验签是否成功,如果是,则将错误码设置为第二预设值,向移动终端发送包括错误码的第八响应;否则,将错误码设置为第三预设值,向移动终端发送包括错误码的第八响应。更加具体地,当服务器后台接收到第二认证请求后,从第二认证请求中获取第二客户端数据、应用ID、用户标识和第二认证判据,根据用户标识获取与用户标识对应的公钥,使用第一预设算法对第二客户端数据和应用ID分别做哈希,得到第三服务器后台数据和第四服务器后台数据;组织包括第三服务器后台数据和第四服务器后台数据的第二原始数据,使用预设的哈希算法对第二原始数据做哈希生成第二比较值,使用公钥对第二认证判据中的第二签名数据进行解密得到第二解密数据,判断第二比较值是否与第二解密数据相匹配,如果是,则将错误码设置为第二预设值,向移动终端发送包括错误码的第八响应;否则,将错误码设置为第三预设值,向移动终端发送包括错误码的第八响应。步骤230:移动终端接收来自服务器后台的第八响应;步骤231:移动终端从服务器后台第八响应中获取错误码,判断错误码是否为第二预设值,如果是,则认证成功;否则,认证失败。本实施例中提供的一种身份认证方法,在认证过程中与身份认证设备相结合,无需用户输入密码,使身份认证更加便捷和更易操作,同时也提高了身份认证的安全性。实施例3本实施例提供了一种身份认证装置,如图6所示,包括:移动终端;移动终端包括:第一发送子模块01、第一接收子模块02、搜索子模块03、连接子模块04、第一获取子模块05、使能子模块06、特征发送子模块07、特征接收子模块08、第一生成子模块09、第二发送子模块10、第二接收子模块11和第一判断子模块12;第一发送子模块01,用于向服务器后台发送包括用户标识的第一认证请求;第一接收子模块02,用于接收来自服务器后台的包括应用ID、第二挑战值、来源数据和与用户标识对应的密钥句柄的第五响应;搜索子模块03,用于搜索与预设服务标识相匹配的身份认证设备;连接子模块04,用于与预设服务标识相匹配的身份认证设备建立连接;第一获取子模块05,用于获取身份认证设备的服务;从服务中获取通知特征和写特征;第一获取子模块05具体用于根据预设服务标识获取身份认证设备的服务,根据预设的通知特征标识从服务中获取通知特征;根据预设的写特征标识从服务中获取写特征。使能子模块06,用于使能第一获取子模块05获取到的通知特征;第一生成子模块09,用于根据预设的认证指令类型、第一接收子模块02接收到的第二挑战值、来源数据、应用ID和密钥句柄生成认证数据;第一生成子模块09具体包括:第一组织单元、第一哈希单元和第一生成单元;第一组织单元用于组织包括预设的认证指令类型、第二挑战值和来源数据的第二客户端数据;第一哈希单元用于对第一组织单元组织的第二客户端数据和应用ID分别进行哈希处理,得到第三哈希值和第四哈希值;第一生成单元用于根据第一哈希单元得到的第三哈希值、第四哈希值和第一接收单元接收到的密钥句柄生成认证数据。特征发送子模块07,用于当使能子模块06使能通知特征后,根据写特征向身份认证设备发送包括第一生成子模块09生成的认证数据的认证指令;特征接收子模块08,用于接收身份认证设备通过通知特征返回的包括第二认证判据的第七响应;第二发送子模块10,用于向服务器后台发送包括认证指令类型、第二挑战值、来源数据、应用ID、用户标识和所述第二认证判据的第二认证请求;第二发送子模块10具体用于向服务器后台发送包括第二客户端数据、应用ID、用户标识和第二认证判据的第二认证请求。第二接收子模块11,用于接收来自服务器后台的包括错误码的第八响应;第一判断子模块12,用于判断错误码是否为第二预设值,如果是,则判定认证成功;否则,判定认证失败。进一步地,本实施例中身份认证装置还可以包括:身份认证设备;其中,身份认证设备包括第一认证模块,第一认证模块包括:第二获取子模块、第一签名子模块、第三发送子模块和第三接收子模块;第三接收子模块,用于接收认证指令;第二获取子模块,用于从第三接收子模块接收到的认证指令中获取认证数据,从认证数据中获取密钥句柄及与密钥句柄对应的私钥;第一签名子模块,用于组织包括认证数据中的第三哈希值和第四哈希值的第二待签名数据,根据第二获取子模块获取到的与密钥句柄对应的私钥和预设的哈希算法对第二待签名数据进行签名得到第二签名数据;第三发送子模块,用于组织包括第二签名数据的第二认证判据,将包括第二认证判据的第七响应返回给移动终端。更进一步地,本实施例中身份认证装置还可以包括:服务器后台;服务器后台包括第二认证模块,第二认证模块包括:第四接收子模块、第三获取子模块、第一验签子模块、第三判断子模块;第四发送子模块;第四接收子模块,用于接收第二认证请求;第三获取子模块,用于根据第二认证请求中的用户标识获取与用户标识对应的公钥;第一验签子模块,用于根据第二认证请求中的第二客户端数据和应用ID、预设的哈希算法和第三获取子模块获取到的公钥,对第二认证判据中的第二签名数据进行验签;第三判断子模块,用于判断第一验签子模块是否验签成功;第四发送子模块,用于当第三判断子模块判定为是后,将错误码设置为第二预设值,向移动终端发送包括错误码的第八响应;当第三判断子模块判定为否后,将错误码设置为第三预设值,向移动终端发送包括错误码的第八响应。本实施例中,第五响应中还包括第一版本号;相应地,移动终端还可以包括:第二判断子模块和第一报错子模块;特征发送子模块07,还用于当使能子模块06使能通知特征后,根据第一获取子模块05获取到的写特征向身份认证设备发送获取版本号指令;特征子接收模块08,还用于接收身份认证设备通过通知特征返回的包括第二版本号的第六响应;第二判断子模块,用于判断特征接收子模块08接到的第六响应中的第二版本号是否与第一接收子模块02接收到的第一版本号相匹配;相应地,第一生成子模块09,具体用于当第二判断子模块判定为是后,根据预设的认证指令类型、第一接收子模块02接收到的第二挑战值、来源数据、应用ID和密钥句柄生成认证数据;第一报错子模块,用于当第二判断子模块判定为否后,报错。本实施例中,移动终端还包括:第一组织子模块、第四判断子模块和第一分包子模块;第一获取子模块05还用于从服务中获取读特征;并将读特征的特征值作为分包长度;第一组织子模块用于组织认证指令;第四判断子模块用于根据分包长度判断是否对第一组织子模块组织的认证指令进行分包处理;第一分包子模块用于当第四判断子模块判定为是后,根据分包长度对认证指令进行分包处理。进一步地,第一组织子模块具体用于根据第一生成子模块09生成的认证数据组织第二指令,将第二指令作为认证指令中的数据域,在第二指令前添加预设协议指令标识和第二指令的数据长度,得到认证指令。本实施例中,移动终端模块还包括:第五发送子模块、第五接收子模块、第五判断子模块、第二生成子模块、第六发送子模块、第六接收子模块和第六判断子模块;第五发送子模块,用于向服务器后台发送包括用户标识的第一注册请求;第五接收子模块,用于接收来自服务器后台的包括应用ID、第一挑战值和来源数据的第一响应;第二生成子模块,用于根据预设的注册指令类型、第五接收子模块接收到的第一挑战值、来源数据和应用ID生成注册数据;特征发送子模块07,还用于当使能子模块06使能通知特征后,根据写特征向身份认证设备发送包括第二生成子模块生成的注册数据的注册指令;特征接收子模块08,还用于接收身份认证设备通过通知特征返回包括第一认证判据的第三响应;本实施例中,第二生成子模块具体包括:第二组织单元、第二哈希单元和第二生成单元;第二组织单元用于组织包括预设的注册指令类型、第一挑战值和来源数据的第一客户端数据;第二哈希单元用于对第二组织单元组织的第一客户端数据和应用ID分别进行哈希处理,得到第一哈希值和第二哈希值;第二生成单元用于根据第二哈希单元得到的第一哈希值和第二哈希值生成注册数据;第六发送子模块,用于向服务器后台发送包括注册指令类型、第一挑战值、来源数据、应用ID、用户标识和所述第一认证判据的第二注册请求;第六发送子模块,具体用于向服务器后台发送包括第一客户端数据、应用ID、用户标识和第一认证判据的第二注册请求。第六接收子模块,用于接收来自服务器后台的包括错误码的第四响应;第六判断子模块,用于判断错误码是否为第二预设值,如果是,则判定注册成功;否则,判定注册失败。进一步地,本实施例中身份认证装置中,还可以包括身份认证设备;身份认证设备包括第三认证模块,第三认证模块包括:第三生成子模块、第二签名子模块、第七发送子模块和第七接收子模块;第七接收子模块,用于接收注册指令;第三生成子模块,用于当第七接收子模块接收到注册指令后,生成密钥对及与密钥对相对应的密钥句柄;第二签名子模块,用于组织包括密钥对中的公钥、密钥句柄、注册数据中的第一哈希值和第二哈希值的第一待签名数据,根据预设的哈希算法和密钥对中的私钥对第一待签名数据进行签名得到第一签名数据;第七发送子模块,用于组织包括密钥对中的公钥、与密钥对相对应的密钥句柄和第一签名数据的第一认证判据,将包括第一认证判据的第三响应返回给移动终端。更进一步地,本实施例中身份认证装置中,还可以包括:服务器后台;服务器后台包括第四认证模块,第四认证模块包括:第八接收子模块、第二验签子模块、第八判断子模块、第八发送子模块和关联子模块;第八接收子模块,用于接收第二注册请求;第二验签子模块,用于根据第一客户端数据、应用ID、第一认证判据中的公钥、第一认证判据中的密钥句柄和预设的哈希算法对第一认证判据中的第一签名数据进行验签;第八判断子模块,用于判断第二验签子模块是否验签成功;关联子模块,用于当第八判断子模块判定为是后,将第三响应中的密钥句柄和公钥分别与用户标识建立对应关系并保存;第八发送子模块,用于当第八判断子模块判定为是后,将错误码设置为第二预设值,向移动终端发送包括错误码的第四响应;当第八判断子模块判定为否后,将错误码设置为第三预设值,向移动终端发送包括错误码的第四响应。本实施例中,第一响应中还包括第一版本号;相应地,移动终端还可以包括:第七判断子模块和第二报错子模块;特征发送子模块07,还用于当使能子模块06使能通知特征后,根据第一获取子模块05获取到的写特征向身份认证设备发送获取版本号指令;特征接收子模块08,还用于接收身份认证设备通过通知特征返回的包括第二版本号的第二响应;第七判断子模块,用于判断特征接收子模块08接到的第二响应中的第二版本号是否与第五接收子模块接收到的第一版本号相匹配;第二生成子模块,用于当第七判断子模块判定为是后,根据预设的注册指令类型、第五接收子模块接收到的第一挑战值、来源数据和应用ID生成注册数据;第二报错子模块,用于当第七判断子模块判定为否后,报错。本实施例中,移动终端还包括第二分包子模块、第二组织子模块和第九判断子模块,第一获取子模块05还用于在服务中获取读特征;并将读特征的特征值作为分包长度;第二组织子模块用于组织注册指令;第九判断子模块用于根据分包长度判断是否对第二组织子模块组织的注册指令进行分包处理;第二分包子模块用于当第九判断模块判定为是后,根据分包长度对注册指令进行分包处理。进一步地,第二组织子模块具体用于根据第二生成子模块生成的注册数据组织第一指令,将第一指令作为注册指令中的数据域,在第一指令前添加协议指令类型标识和第一指令的数据长度,得到注册指令。本实施例中,移动终端中还可以包括第三报错子模块;搜索子模块03包括搜索单元、接收单元和判断单元;搜索单元用于搜索身份认证设备;接收单元用于接收来自身份认证设备的广播数据;判断单元用于判断接收单元接收到的来自身份认证设备的广播数据中的服务标识是否和预设服务标识相匹配,如果是,则判断搜索到与预设服务标识相匹配的身份认证设备;第三报错子模块用于当判断单元判定为否后,报错。进一步地,搜索单元具体用于调用系统的搜索接口搜索身份认证设备,并设置搜索回调对象,搜索回调对象中包括搜索回调方法;接收单元具体用于通过系统的搜索回调方法接收来自身份认证设备的广播数据和与身份认证设备对应的设备对象。更进一步地,连接子模块04具体用于使用接收单元接收到的与身份认证设备对应的设备对象调用系统的连接方法和身份认证设备建立蓝牙连接,获取通用属性协议对象并设置连接回调对象。再进一步地,第一获取子模块05具体用于将预设服务标识作为参数,使用通用属性协议对象,调用系统的获取服务方法,获取身份认证设备的服务对象;将预设的写特征标识作为参数,使用服务对象调用系统的获取特征方法,从服务对象中获取写特征对象;将预设的通知特征标识作为参数,使用服务对象调用系统的获取特征方法,从服务对象中获取通知特征对象。其中,回调对象中包括系统的通知回调方法;相应地:使能子模块06具体用于调用系统的设置特征通知方法,使能通知特征对象;特征接收子模块08具体用于通过系统的通讯回调方法接收身份认证设备通过通知特征对象返回的包括第二版本号的第六响应;以及通过系统的通讯回调方法接收身份认证设备通过通知特征对象返回的第七响应。以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本
技术领域
的技术人员在本发明公开的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1