基于智能手机和用户口令的双因子身份认证系统及方法与流程

文档序号:16819271发布日期:2019-02-10 22:37阅读:372来源:国知局
基于智能手机和用户口令的双因子身份认证系统及方法与流程

本发明属于计算机网络技术领域,具体涉及一种基于智能手机和用户口令的双因子身份认证系统及方法。



背景技术:

当今时代,随着互联网的迅速发展,越来越多的网络应用进入人们的生活,已经成为了人们生活中不可或缺的一部分。然而,在享受网络带来的便利的同时,我们也正面临着各种网络攻击手段所带来的威胁,如中间人攻击、重放攻击、网络钓鱼等,这些威胁不但严重影响人们的生活,而且还有可能带来巨大的经济损失,而保护网络安全的第一道关卡即是身份认证。

身份认证技术解决的是验证网络通讯双方身份是否真实的问题,目的是在通讯双方之间建立互相信任的关系。传统的身份认证技术是使用静态口令的方式进行认证,因其实现简单,部署方便,无须附加额外认证设备的优点,一直是应用最为广泛的认证方式。但是用户口令比较容易被破解,认证的安全性较差,容易造成用户合法身份被盗用、信息泄露,严重的还会危及用户的财产安全等。而且,用户如果把口令设置得过于简单,很容易就被破解,起不保护作用;如果太复杂,又不方便用户记忆和输入。另外,在不同的网站设置不同的用户口令虽然在一定程度上增加了安全性,但却在记忆方面给用户带来了很大的困扰。

双因子身份认证是指结合用户口令以及实物,如信用卡、MSM手机、令牌、U盾或生物特征等,对用户进行身份认证的方法。虽然双因子身份认证比静态口令认证更加安全,但由于具有需要外部工具辅助和不利于部署等缺点,既影响了用户的体验,也为IT和技术支持人员带来负担,所以没有真正大范围的推广开来。例如,结合用户口令和生物特征识别技术的双因子身份认证方法,利用用户口令和人体所固有的生理特征(如指纹、声音、虹膜等)以及行为特征(如击键、步态等)来进行个人身份认证。由于生物特征几乎无法造假和冒用,所以这项技术具有其他认证技术不可比拟的安全性和可靠性,但是由于识别设备成本高、对识别正确率没有确切结论、操作复杂等原因,仍处于研究实验或小范围应用阶段,目前还很难真正推广;结合用户口令和U盾一类的外部设备进行认证的认证方法,是当前登录级别较高、操作相对简单的双因子身份认证方法,但是,U盾一类的外部设备造价相对较高,而且要求每个网站都有自己的认证设备并不现实,要求用户随身携带认证设备也不便捷,导致部署起来比较困难,因此这种双因子身份认证方法只应用在电子政务、网上银行领域。



技术实现要素:

针对上述现有技术存在的不足,本发明提供基于智能手机和用户口令的双因子身份认证系统及方法。

本发明的技术方案:

基于智能手机和用户口令的双因子身份认证系统,该系统包括:设置于用户智能手机中的手机认证客户端模块、设置于浏览器中的浏览器扩展模块和设置于Web服务器中的Web服务器模块,所述用户智能手机为用户随身携带且日常使用的智能手机;

所述手机认证客户端模块,(1)在用户注册阶段:

用于读取浏览器扩展模块提供的存储有浏览器所在计算机蓝牙地址的二维码,实现用户智能手机与浏览器所在计算机的蓝牙通讯,通过蓝牙通讯,接收浏览器扩展模块发送的消息,并判断消息类型:a.如果是注册挑战请求消息,则使用服务器公钥serverPubKey验证签名SignSsk:如果验证成功,则生成对注册挑战请求消息的响应消息即注册响应消息,并将该注册响应消息发送给浏览器扩展模块,如果验证失败,则向浏览器扩展模块发送注册过程出错消息;b.如果是注册成功的消息,则存储用户私钥userPriKey、标识keyHandle、服务器公钥serverPubKey、服务器地址origin,并将客户端下次认证信息字段CNext设置为C1;c.如果是注册失败消息,则手机认证客户端模块丢弃之前生成的用户RSA公私密钥对、keyHandle、C、C1、C2;

(2)在用户认证阶段:用于通过蓝牙通讯接收浏览器扩展模块发送的消息,并判断消息类型:a.如果为认证挑战请求消息,则使用服务器公钥serverPubKey验证认证签名SignSsk*:如果验证失败,则向浏览器扩展模块发送认证过程出错消息;如果验证成功,则根据标识keyHandle取出用户私钥userPriKey、提取存储的客户端下次认证信息字段CNext的值和服务器地址origin,并判断标识keyHandle和服务器地址origin是否与其接收到的认证挑战请求消息中的keyHandle和origin一一匹配,如果匹配,则生成对认证挑战请求消息的响应消息即认证响应消息,并通过蓝牙通讯将该认证响应消息发送给浏览器扩展模块,如果不匹配,则向浏览器扩展模块发送认证过程出错消息;b.如果是认证失败消息,则丢弃C*、C*1、C*2;c.如果是认证成功消息,则比较C*3与H(C*2):如果C*3与H(C*2)相等,则将客户端下次认证消息字段CNext设置为C*1,并向浏览器扩展模块发送认证成功消息;如果C*3与H(C*2)不相等,则丢弃C*、C*1、C*2;

所述手机认证客户端模块生成注册响应消息过程为:随机生成一对由用户私钥userPriKey和用户公钥userPubKey构成的用户RSA公私密钥对和随机数C,并获取手机蓝牙地址btAddr;为用户RSA公私密钥对和Web服务器地址origin生成标识keyHandle;对C进行散列计算得到C1,再对C1进行散列计算得到C2,即C2=H(C1)=H(H(C));使用用户私钥userPriKey对userPubKey、keyHandle、btAddr、C2、random和origin进行签名,得到签名数据SignUsk;使用服务器公钥serverPubKey对SignUsk、userPubKey、keyHandle、btAddr和C2进行加密,得到加密数据EncSpk,EncSpk即为注册响应消息;

所述手机认证客户端模块生成认证响应消息过程为:首先生成随机数C*,然后对C*进行散列计算得到C*1,再对C*1进行散列计算得到C*2,即C*2=H(C*1)=H(H(C*)),最后使用用户私钥userPriKey对客户端下次认证信息字段CNext、C*2、random*和origin进行签名,得到签名数据SignUsk*,使用服务器公钥serverPubKey对SignUsk*、CNext和C*2进行加密,得到加密数据EncSpk*,EncSpk*即为认证响应消息;

所述浏览器扩展模块,(1)用于读取用户在浏览器页面输入的网址和用户口令信息,并将用户口令信息发送给Web服务器模块,所述用户口令信息包括用户名和用户密码;

(2)在用户注册阶段:用于接收Web服务器模块发送的消息,并判断消息类型:a.如果是用户名重复消息,则提示用户名已被注册;b.如果是注册挑战请求消息,则首先根据用户输入的网址验证服务器地址origin是否正确,如果正确,则获取浏览器所在计算机的蓝牙地址,并生成存储该蓝牙地址的二维码,且向手机认证客户端模块发送注册挑战请求消息;如果不正确,则提示用户停止操作,并向Web服务器模块发送注册过程出错消息;c.如果为注册成功或注册失败消息,则对消息进行显示,并发送注册成功或注册失败消息给手机认证客户端模块;

接收手机认证客户端模块发送的消息,并判断消息类型:如果是注册响应消息EncSpk,则发送此注册响应消息EncSpk给Web服务器模块;如果是注册过程出错消息,则提示用户停止操作,并向Web服务器模块发送注册过程出错消息;

(3)在用户认证阶段:用于收来自Web服务器模块的消息,并判断消息类型:a.如果是用户口令错误消息,则提示用户认证失败;b.如果是认证挑战请求消息,则首先根据用户输入的网址验证Web服务器地址origin是否正确,如果正确,则提取手机蓝牙地址btAddr,并与手机建立蓝牙连接后,通过蓝牙通讯向手机认证客户端模块发送认证挑战请求消息,如果不正确,则提示用户停止操作,并向Web服务器模块发送认证过程出错消息;如果是C*3,则将C*3发送给手机认证客户端模块;如果是认证失败消息,则提示用户认证失败,并向手机认证客户端模块发送认证失败消息;

根据手机蓝牙地址主动与手机建立蓝牙通讯,通过蓝牙通讯接收手机认证客户端模块发送的消息,并判断消息类型:如果是认证响应消息EncSpk*,则发送此认证响应消息EncSpk*给Web服务器模块;如果是认证过程出错消息,则提示用户停止操作,并向Web服务器模块发送认证过程出错消息;如果是认证成功消息,则进行显示;

所述Web服务器模块,(1)在用户注册阶段,接收浏览器扩展模块发送的消息,并判断消息类型:a.如果是用户口令消息,则判断用户名是否已被注册,如果用户名已被注册,则向浏览器扩展模块发送用户名重复消息,如果用户名未被注册,则向浏览器扩展模块发送注册挑战请求消息;b.如果是注册过程出错消息,则向浏览器扩展模块发送注册失败消息,并记录日志;c.如果是注册响应消息,则首先使用服务器私钥serverPriKey对消息进行解密,得到SignUsk、userPubKey、keyHandle、btAddr和C2,然后使用用户公钥userPubKey验证签名SignUsk,如果验证失败,则向浏览器扩展模块发送注册失败消息,并记录日志;如果验证通过,则服务器进行如下操作:在数据库中为用户创建一条记录,其中包括用户口令、用户公钥、标识、手机蓝牙地址、服务器本次认证信息字段SCurrent、服务器上次认证信息字段SLast,并对应存入用户注册时输入的用户名和密码、userPubKey、keyHandle、btAddr、C2和空值,并向浏览器扩展模块发送注册成功消息;

(2)在用户认证阶段,接收浏览器扩展模块发送的消息,并判断消息类型:a.如果为用户口令信息,则验证用户口令信息是否正确,如果用户口令信息不正确,则向浏览器扩展模块发送用户口令错误消息;如果用户口令正确,则生成认证挑战请求消息,并发送给浏览器扩展模块;b.如果为认证过程出错消息,则向浏览器扩展模块发送认证失败消息,并记录日志;c.如果为认证响应消息,则首先使用服务器私钥serverPriKey对消息进行解密得到SignUsk*、CNext和C*2,然后使用用户公钥userPubKey验证签名SignUsk*,如果验证失败,则向浏览器扩展模块发送认证失败消息,并记录日志,如果验证通过,则对CNext中的值C1进行散列计算得到H(C1),并验证H(C1)与数据库中服务器本次认证信息字段SCurrent中的值C2是否相同,如果相同,则将服务器上次认证信息字段SLast设置为C2,将服务器本次认证信息字段SCurrent设置为C*2,对C*2进行散列计算得到C*3=H(C*2),并将C*3发送给浏览器扩展模块,如果不相同,则验证H(C1)与数据库中服务器上次认证信息字段SLast的值是否相同:如果不相同,则向浏览器扩展模块发送认证失败消息,并记录日志;如果相同,则服务器上次认证信息字段SLast保持不变,服务器本次认证信息字段SCurrent设置为C*2,并对C*2进行散列计算得到C*3=H(C*2),且将C*3发送给浏览器扩展模块;

所述Web服务器模块生成注册挑战请求消息的过程为:随机产生一对由服务器私钥serverPriKey和服务器公钥serverPubKey构成的服务器RSA公私密钥对和一个注册随机数random,并获取服务器地址origin;使用服务器私钥serverPriKey对serverPubKey、random和origin进行签名,得到注册签名数据SignSsk;将SignSsk、serverPubKey、random和origin一起作为注册挑战请求消息;

所述Web服务器模块生成认证挑战请求消息的过程为:产生一个认证随机数random*,并获取服务器地址origin;在数据库中取出用户对应的用户公钥userPubKey、标识keyHandle、手机蓝牙地址btAddr;使用服务器私钥serverPriKey对random*、origin和keyHandle进行签名,得到认证签名数据SignSsk*;将SignSsk*、random*、origin、keyHandle和btAddr一起作为认证挑战请求消息。

基于智能手机和用户口令的双因子身份认证系统的基于智能手机和用户口令的双因子身份认证方法,包括用户注册阶段和用户身份认证阶段;

所述用户注册阶段包括如下步骤:

步骤1:用户在浏览器页面输入网址,进入用户注册界面,并在用户注册界面输入用户口令信息;所述用户口令信息包括用户名和用户密码;

步骤2:浏览器将用户口令信息提交给服务器;

步骤3:服务器判断其接收到的消息类型:如果是用户口令信息,则执行步骤4;如果是注册过程出错消息,则执行步骤5;如果是注册响应消息,则执行步骤6;

步骤4:服务器判断用户名是否已被注册,是,则向浏览器发送用户名重复消息,并执行步骤7;否,则产生注册阶段的挑战请求消息即注册挑战请求消息,并发送给向浏览器,并执行步骤7;

所述服务器生成注册挑战请求消息的方法为:

(1)服务器随机产生一对服务器私钥serverPriKey和服务器公钥serverPubKey构成的服务器RSA公私密钥对和一个注册随机数random,并获取服务器地址origin;

(2)使用服务器私钥serverPriKey对serverPubKey、random和origin进行签名,得到注册签名数据SignSsk;

(3)将SignSsk、serverPubKey、random和origin一起作为注册挑战请求消息;

步骤5:服务器向浏览器发送注册失败消息,并记录日志,并执行步骤7;

步骤6:服务器首先使用服务器私钥serverPriKey对消息进行解密,得到SignUsk、userPubKey、keyHandle、btAddr和C2,然后使用用户公钥userPubKey验证签名SignUsk,如果验证通过,则服务器进行如下操作:在数据库中为用户创建一条记录,其中包括用户口令、用户公钥、用户公私钥对标识、用户手机蓝牙地址、服务器本次认证信息字段SCurrent、服务器下次认证信息字段SLast,对应存入用户注册时输入的用户名和密码、userPubKey、keyHandle、btAddr、C2和空值,并向浏览器发送注册成功消息,并执行步骤7;如果验证失败,服务器向浏览器发送注册失败消息,并记录日志,并执行步骤7;

步骤7:浏览器判断其接收到的消息类型:如果是用户名重复消息,则执行步骤8;如果是注册挑战请求消息,则执行步骤9;如果是注册响应消息EncSpk,则执行步骤10;如果为注册过程出错消息,则执行步骤11;如果是用户注册成功消息或注册失败消息,则执行步骤12;

步骤8:浏览器提示用户名已被注册,并执行步骤18;

步骤9:浏览器首先根据用户输入的网址验证服务器地址origin是否正确,如果正确,则浏览器获取浏览器所在计算机的蓝牙地址,并生成储存该蓝牙地址的二维码,将挑战请求消息发送给手机认证客户端,并执行步骤13;如果不正确,则提示用户停止操作,并向服务器发送注册过程出错消息,执行步骤3;

步骤10:浏览器将注册响应消息EncSpk发送给服务器,并执行步骤3;

步骤11:浏览器提示用户停止操作,并将注册过程出错消息发送给服务器,并执行步骤3;

步骤12:浏览器对其接收的用户注册成功消息或注册失败消息进行显示,并发送给手机认证客户端,并执行步骤14;

步骤13:手机认证客户端通过扫描浏览器给出的储存有浏览器所在计算机蓝牙地址的二维码与浏览器所在计算机建立蓝牙通讯,并执行步骤14;

步骤14:手机认证客户端通过蓝牙通讯,接收浏览器扩展模块发送的消息,并判断消息类型:如果是注册挑战请求消息,则执行步骤15;如果是注册成功消息,则执行步骤16;如果是注册失败消息,则执行步骤17;

步骤15:手机认证客户端使用服务器公钥serverPubKey验证签名SignSsk,如果验证成功,则手机认证客户端生成对注册挑战请求信息的响应消息即注册响应消息,并发送给浏览器,并执行步骤7;如果验证失败,则手机认证客户端向浏览器发送注册过程出错消息,并执行步骤7;

所述手机认证客户端生成注册响应消息的方法为:

(1)手机认证客户端随机生成一对用户私钥userPriKey和用户公钥userPubKey构成的用户RSA公私密钥对;获取手机蓝牙地址btAddr;

(2)手机认证客户端为用户RSA公私密钥对和服务器地址origin生成标识keyHandle;

(3)手机认证客户端生成一个随机数C,并对C进行散列计算得到C1,再对C1进行散列计算得到C2,即C2=H(C1)=H(H(C));

(4)手机认证客户端使用用户私钥userPriKey对userPubKey、keyHandle、btAddr、C2、random和origin进行签名,得到签名数据SignUsk后,再使用服务器公钥serverPubKey对SignUsk、userPubKey、keyHandle、btAddr和C2进行加密,得到加密数据EncSpk,将加密数据EncSpk作为注册阶段的响应消息,即注册响应消息;

步骤16:手机认证客户端存储用户私钥userPriKey、标识keyHandle、服务器公钥serverPubKey、服务器地址origin,并将客户端下次认证信息字段CNext设置为C1,并执行步骤18;

步骤17:手机认证客户端丢弃之前生成的用户RSA公私密钥对、keyHandle、C、C1、C2,并执行步骤18;

步骤18:结束;

所述用户身份认证阶段包括如下步骤:

步骤1:用户在浏览器页面输入网址进入用户登陆界面,并在用户登陆界面输入用户口令信息,所述用户口令信息包括用户名和用户密码;

步骤2:浏览器将用户口令信息提交给服务器;

步骤3:服务器判断其接收到的消息类型,如果为用户口令信息,则执行步骤4;如果为认证过程出错消息,则执行步骤5;如果为认证响应消息,则执行步骤6;

步骤4:服务器验证用户口令信息中的用户名和用户密码与用户注册阶段储存的用户名和用户密码是否一一对应,否,则服务器向浏览器发送用户口令错误消息,并执行步骤8;是,则产生认证阶段的挑战请求消息即认证挑战请求消息,并发送给向浏览器,并执行步骤8;

所述服务器生成认证挑战请求消息的方法为:

(1)服务器产生一个认证随机数random*,并获取服务器地址origin,并在数据库中取出用户对应的用户公钥userPubKey、标识keyHandle和手机蓝牙地址btAddr;

(2)使用服务器私钥serverPriKey对random*、origin和keyHandle进行签名,得到认证签名数据SignSsk*,将SignSsk*、random*、origin、keyHandle和btAddr一起作为认证挑战请求消息;

步骤5:服务器发送认证失败消息给浏览器,并记录日志,并执行步骤8;

步骤6:服务器使用服务器私钥serverPriKey对消息进行解密,得到SignUsk*、CNext和C*2;

步骤7:服务器使用用户公钥userPubKey验证签名SignUsk*,如果验证失败,则服务器发送认证失败消息给浏览器,并记录日志,并执行步骤8;如果验证通过,则服务器进行如下操作:首先对字段CNext中的值C1进行散列计算得到H(C1),然后验证H(C1)与数据库中服务器本次认证信息字段SCurrent中的值是否相同,如果相同,将服务器上次认证信息字段SLast设置为C2,将服务器本次认证信息字段SCurrent设置为C*2,且对C*2进行散列计算得到C*3=H(C*2),并将C*3发送给浏览器,并执行步骤8;如果不相同,则验证H(C1)与数据库中服务器上次认证信息字段SLast的值是否相同,如果相同,服务器上次认证信息字段SLast的值保持不变,将服务器本次认证信息字段SCurrent设置为C*2,对C*2进行散列计算得到C*3=H(C*2),并将C*3发送给浏览器,并执行步骤8,如果不相同,则服务器发送认证失败消息给浏览器,并记录日志,并执行步骤8;

步骤8:浏览器判断其接收到的消息类型,如果为用户口令错误消息,则执行步骤9;如果为认证挑战请求消息,则执行步骤10;如果为认证响应消息EncSpk*,则执行步骤11;如果为认证过程出错消息,则执行步骤12;如果为认证失败消息,则执行步骤13;如果为C*3,则执行步骤14;如果为认证成功消息,则执行步骤15;

步骤9:浏览器提示用户认证失败,并执行步骤20;

步骤10:浏览器首先根据用户输入的网址验证服务器地址origin是否正确,如果正确,则浏览器首先提取手机蓝牙地址btAddr,主动与手机建立蓝牙连接,然后向手机认证客户端发送认证挑战请求消息,并执行步骤16;如果不正确,则浏览器提示用户停止操作,并向服务器发送认证过程出错消息,并执行步骤3;

步骤11:浏览器将认证响应消息EncSpk*发送给服务器,并执行步骤3;

步骤12:浏览器提示用户停止操作,并向服务器发送认证过程出错消息,并执行步骤3;

步骤13:浏览器显示认证失败消息,并将认证失败消息发送给手机认证客户端,并执行步骤16;

步骤14:浏览器将C*3发送给手机认证客户端,并执行步骤16;

步骤15:浏览器对认证成功消息进行显示,并执行步骤20;

步骤16:手机认证客户端通过与浏览器所在计算机的蓝牙通讯接收浏览器发送的消息,并判断消息类型,如果为认证挑战请求消息,则执行步骤17;如果是认证失败消息,则执行步骤18;如果是C*3,则执行步骤19;

步骤17:手机认证客户端使用服务器公钥serverPubKey验证认证签名数据SignSsk*,如果验证失败,则向浏览器发送认证过程出错消息,并执行步骤8;如果验证成功,则根据标识keyHandle取出用户私钥userPriKey、提取手机认证客户端中存储的客户端下次认证信息字段CNext和服务器地址origin,并判断标识keyHandle和服务器地址origin是否与接收到的认证挑战请求消息中的keyHandle和origin一一匹配,如果匹配,则生成对认证挑战请求消息的响应消息,即认证响应消息,并发送给浏览器并执行步骤8;如果不匹配,则向浏览器发送认证过程出错消息并执行步骤8;

所述手机认证客户端生成认证响应消息的过程为:

(1)手机认证客户端生成一个随机数C*,并对C*进行散列计算得到C*1,再对C*1进行散列计算得到C*2,即C*2=H(C*1)=H(H(C*)),

(2)手机认证客户端使用用户私钥userPriKey对客户端下次认证信息字段CNext、C*2以及认证挑战消息中的认证随机数random*和服务器地址origin进行签名,得到认证签名数据SignUsk*,使用服务器公钥serverPubKey对SignUsk*、CNext和C*2进行加密,得到认证加密数据EncSpk*,将认证加密数据EncSpk*作为认证响应消息;

步骤18:手机认证客户端丢弃C*、C*1、C*2,并执行步骤20;

步骤19:手机认证客户端判断C*3与H(C*2)是否相等,如果相等,将客户端下次认证消息字段CNext设置为C*1,并向浏览器发送认证成功消息,并执行步骤8;如果不相等,丢弃C*、C*1、C*2,并执行步骤20;

步骤20:结束。

有益效果:本发明的基于智能手机和用户口令的双因子身份认证系统及方法,具有以下优点:

1、在对用户进行认证时,用户随身携带并使用的手机和浏览器可以在足够长范围内的无线信道中进行通信,用户不需要接触手机,只需要在网页输入用户口令,点击登录,表明自己的认证意图后,服务器会根据用户请求生成挑战消息,当手机获得该挑战消息后就明确了用户需要进行认证,不需要用户的同意即可对指定数据签名,即用户在使用本系统进行认证时,除了需要输入用户口令以外,不需要其他的操作,且网站不用重新设计登录流程,保证了用户登录网站操作简单,没有增加用户的学习认知负担,并且方便部署;

2、使用用户智能手机作为用户的物理认证设备,减少厂商的成本,方便用户使用;

3、能够抵抗口令猜测攻击、密码分析攻击、重放攻击等威胁,而且可以在一定程度上防止钓鱼网站攻击,认证协议中加入的同步认证信息在保证认证同步的同时,可以防止手机设备被克隆。

附图说明

图1为本发明一种实施方式的基于智能手机和用户口令的双因子身份认证系统的系统架构图;

图2为本发明一种实施方式的基于智能手机和用户口令的双因子身份认证系统的结构示意图;

图3为本发明一种实施方式的基于智能手机和用户口令的双因子身份认证方法的一次认证过程示意图;

图4为本发明一种实施方式的基于智能手机和用户口令的双因子身份认证方法的用户注册阶段流程图;

图5为本发明一种实施方式的基于智能手机和用户口令的双因子身份认证方法的用户身份认证阶段流程图;

图6(a)为本发明一种实施方式的基于智能手机和用户口令的双因子身份认证系统及方法的注册阶段的浏览器用户口令输入页面的界面图;

图6(b)为本发明一种实施方式的基于智能手机和用户口令的双因子身份认证系统及方法的注册阶段的浏览器用户信息输入页面的界面图;

图6(c)为本发明一种实施方式的基于智能手机和用户口令的双因子身份认证系统及方法的注册阶段的浏览器生成二维码的界面图;

图7(a)为本发明一种实施方式的基于智能手机和用户口令的双因子身份认证系统及方法的注册阶段的手机认证客户端的界面图;

图7(b)为本发明一种实施方式的基于智能手机和用户口令的双因子身份认证系统及方法的注册阶段的手机认证客户端扫描二维码的界面图;

图8(a)为本发明一种实施方式的基于智能手机和用户口令的双因子身份认证系统及方法注册阶段的手机认证客户端读取二维码信息的界面图;

图8(b)为本发明一种实施方式的基于智能手机和用户口令的双因子身份认证系统及方法注册阶段的手机认证客户端确认的界面图;

图9(a)为本发明一种实施方式的基于智能手机和用户口令的双因子身份认证系统及方法认证阶段的浏览器用户口令输入的界面图;

图9(b)为本发明一种实施方式的基于智能手机和用户口令的双因子身份认证系统及方法认证阶段的浏览器提示用户认证过程界面图。

具体实施方式

下面结合附图对本发明的一种实施方式作详细说明。

如图1所示,本实施方式的基于智能手机和用户口令的双因子身份认证系统包括三个实体:用户智能手机、浏览器和Web服务器。

如图2所示,本实施方式的基于智能手机和用户口令的双因子身份认证系统,所述智能手机为用户随身携带的且日常使用的智能手机,该系统包括:设置于用户智能手机中的手机认证客户端模块和第一蓝牙通讯模块,设置于浏览器中的第二蓝牙通讯模块、浏览器扩展模块和第一HTTPS协议通讯模块,设置于Web服务器中的第二HTTPS协议通讯模块和Web服务器模块。所述用户智能手机与浏览器通过第一、第二蓝牙通讯模块实现二者之间的蓝牙通信;所述Web服务器与浏览器通过第一、第二HTTPS协议通讯模块实现二者之间的HTTPS协议通讯。

本实施方式的手机认证客户端模块,(1)在用户注册阶段:

用于读取浏览器扩展模块提供的存储有浏览器所在计算机蓝牙地址的二维码,实现用户智能手机与浏览器所在计算机的蓝牙通讯;通过蓝牙通讯,接收浏览器扩展模块发送的消息,并判断消息类型:a.如果是注册挑战请求消息,则使用服务器公钥serverPubKey验证签名SignSsk:如果验证成功,则生成对注册挑战请求消息的响应消息即注册响应消息,并将该注册响应消息发送给浏览器扩展模块,如果验证失败,则向浏览器扩展模块发送注册过程出错消息;b.如果是注册成功的消息,则存储用户私钥userPriKey、标识keyHandle、服务器公钥serverPubKey、服务器地址origin,并将客户端下次认证信息字段CNext设置为C1;c.如果是注册失败消息,则手机认证客户端模块丢弃之前生成的用户RSA公私密钥对、keyHandle、C、C1、C2;

(2)在用户认证阶段:用于通过蓝牙通讯接收浏览器扩展模块发送的消息,并判断消息类型:a.如果为认证挑战请求消息,则使用服务器公钥serverPubKey验证认证签名SignSsk*:如果验证失败,则向浏览器扩展模块发送认证过程出错消息;如果验证成功,则根据标识keyHandle取出用户私钥userPriKey、提取存储的客户端下次认证信息字段CNext的值和服务器地址origin,并判断标识keyHandle和服务器地址origin是否与其接收到的认证挑战请求消息中的keyHandle和origin一一匹配,如果匹配,则生成对认证挑战请求消息的响应消息即认证响应消息,并通过蓝牙通讯将该认证响应消息发送给浏览器扩展模块,如果不匹配,则向浏览器扩展模块发送认证过程出错消息;b.如果是认证失败消息,则丢弃C*、C*1、C*2;c.如果是认证成功消息,则比较C*3与H(C*2):如果C*3与H(C*2)相等,则将客户端下次认证消息字段CNext设置为C*1,并向浏览器扩展模块发送认证成功消息;如果C*3与H(C*2)不相等,则丢弃C*、C*1、C*2;

所述手机认证客户端模块生成注册响应消息过程为:随机生成一对由用户私钥userPriKey和用户公钥userPubKey构成的用户RSA公私密钥对和随机数C,并获取手机蓝牙地址btAddr;为用户RSA公私密钥对和Web服务器地址origin生成标识keyHandle;对C进行散列计算得到C1,再对C1进行散列计算得到C2,即C2=H(C1)=H(H(C));使用用户私钥userPriKey对userPubKey、keyHandle、btAddr、C2、random和origin进行签名,得到签名数据SignUsk;使用服务器公钥serverPubKey对SignUsk、userPubKey、keyHandle、btAddr和C2进行加密,得到加密数据EncSpk,EncSpk即为注册响应消息;

所述手机认证客户端模块生成认证响应消息过程为:首先生成随机数C*,然后对C*进行散列计算得到C*1,再对C*1进行散列计算得到C*2,即C*2=H(C*1)=H(H(C*)),最后使用用户私钥userPriKey对客户端下次认证信息字段CNext、C*2、random*和origin进行签名,得到签名数据SignUsk*,使用服务器公钥serverPubKey对SignUsk*、CNext和C*2进行加密,得到加密数据EncSpk*,EncSpk*即为认证响应消息;

本实施方式的浏览器扩展模块,(1)用于读取用户在浏览器页面输入的网址和用户口令信息,并将用户口令信息发送给Web服务器模块,所述用户口令信息包括用户名和用户密码;

(2)在用户注册阶段:用于接收Web服务器模块发送的消息,并判断消息类型:a.如果是用户名重复消息,则提示用户名已被注册;b.如果是注册挑战请求消息,则首先根据用户输入的网址验证服务器地址origin是否正确,如果正确,则获取浏览器所在计算机的蓝牙地址,并生成存储该蓝牙地址的二维码,且向手机认证客户端模块发送注册挑战请求消息;如果不正确,则提示用户停止操作,并向Web服务器模块发送注册过程出错消息;c.如果为注册成功或注册失败消息,则对消息进行显示,并发送注册成功或注册失败消息给手机认证客户端模块;

接收手机认证客户端模块发送的消息,并判断消息类型:如果是注册响应消息EncSpk,则发送此注册响应消息EncSpk给Web服务器模块;如果是注册过程出错消息,则提示用户停止操作,并向Web服务器模块发送注册过程出错消息;

(4)在用户认证阶段:用于收来自Web服务器模块的消息,并判断消息类型:a.如果是用户口令错误消息,则提示用户认证失败;b.如果是认证挑战请求消息,则首先根据用户输入的网址验证Web服务器地址origin是否正确,如果正确,则提取手机蓝牙地址btAddr,并与手机建立蓝牙连接后,通过蓝牙通讯向手机认证客户端模块发送认证挑战请求消息,如果不正确,则提示用户停止操作,并向Web服务器模块发送认证过程出错消息;如果是C*3,则将C*3发送给手机认证客户端模块;如果是认证失败消息,则提示用户认证失败,并向手机认证客户端模块发送认证失败消息;

根据手机蓝牙地址主动与手机建立蓝牙通讯,通过蓝牙通讯接收手机认证客户端模块发送的消息,并判断消息类型:如果是认证响应消息EncSpk*,则发送此认证响应消息EncSpk*给Web服务器模块;如果是认证过程出错消息,则提示用户停止操作,并向Web服务器模块发送认证过程出错消息;如果是认证成功消息,则进行显示;

本实施方式的Web服务器模块,(1)在用户注册阶段,接收浏览器扩展模块发送的消息,并判断消息类型:a.如果是用户口令消息,则判断用户名是否已被注册,如果用户名已被注册,则向浏览器扩展模块发送用户名重复消息,如果用户名未被注册,则向浏览器扩展模块发送注册挑战请求消息;b.如果是注册过程出错消息,则向浏览器扩展模块发送注册失败消息,并记录日志;c.如果是注册响应消息,则首先使用服务器私钥serverPriKey对消息进行解密,得到SignUsk、userPubKey、keyHandle、btAddr和C2,然后使用用户公钥userPubKey验证签名SignUsk,如果验证失败,则向浏览器扩展模块发送注册失败消息,并记录日志;如果验证通过,则服务器进行如下操作:在数据库中为用户创建一条记录,其中包括用户口令、用户公钥、标识、手机蓝牙地址、服务器本次认证信息字段SCurrent、服务器上次认证信息字段SLast,并对应存入用户注册时输入的用户名和密码、userPubKey、keyHandle、btAddr、C2和空值,并向浏览器扩展模块发送注册成功消息;

(3)在用户认证阶段,接收浏览器扩展模块发送的消息,并判断消息类型:a.如果为用户口令信息,则验证用户口令信息是否正确,如果用户口令信息不正确,则向浏览器扩展模块发送用户口令错误消息;如果用户口令正确,则生成认证挑战请求消息,并发送给浏览器扩展模块;b.如果为认证过程出错消息,则向浏览器扩展模块发送认证失败消息,并记录日志;c.如果为认证响应消息,则首先使用服务器私钥serverPriKey对消息进行解密得到SignUsk*、CNext和C*2,然后使用用户公钥userPubKey验证签名SignUsk*,如果验证失败,则向浏览器扩展模块发送认证失败消息,并记录日志,如果验证通过,则对CNext中的值C1进行散列计算得到H(C1),并验证H(C1)与数据库中服务器本次认证信息字段SCurrent中的值C2是否相同,如果相同,则将服务器上次认证信息字段SLast设置为C2,将服务器本次认证信息字段SCurrent设置为C*2,对C*2进行散列计算得到C*3=H(C*2),并将C*3发送给浏览器扩展模块,如果不相同,则验证H(C1)与数据库中服务器上次认证信息字段SLast的值是否相同:如果不相同,则向浏览器扩展模块发送认证失败消息,并记录日志;如果相同,则服务器上次认证信息字段SLast保持不变,服务器本次认证信息字段SCurrent设置为C*2,并对C*2进行散列计算得到C*3=H(C*2),且将C*3发送给浏览器扩展模块;

所述Web服务器模块生成注册挑战请求消息的过程为:随机产生一对由服务器私钥serverPriKey和服务器公钥serverPubKey构成的服务器RSA公私密钥对和一个注册随机数random,并获取服务器地址origin;使用服务器私钥serverPriKey对serverPubKey、random和origin进行签名,得到注册签名数据SignSsk;将SignSsk、serverPubKey、random和origin一起作为注册挑战请求消息;

所述Web服务器模块生成认证挑战请求消息的过程为:产生一个认证随机数random*,并获取服务器地址origin;在数据库中取出用户对应的用户公钥userPubKey、标识keyHandle、手机蓝牙地址btAddr;使用服务器私钥serverPriKey对random*、origin和keyHandle进行签名,得到认证签名数据SignSsk*;将SignSsk*、random*、origin、keyHandle和btAddr一起作为认证挑战请求消息。

本实施方式的系统一次成功认证过程,如图3所示,图中Browser代表浏览器,是用户与服务器认证连接的中间环节;Phone表示用户随身携带且日常使用的手机,是用户进行认证的物理设备,手机中存有代表用户身份的密钥,密钥对用户是不可见的,避免了网络钓鱼的威胁;Server代表用户访问网站的服务器,对用户进行身份认证;Resource表示受保护的网络资源,用户只有认证成功之后才会被授权访问。系统一次成功认证过程为:

用户在浏览器登陆页面输入用户名username和用户密码password组成的用户口令信息;提交username和password给服务器;服务器判断用户身份,如果username和password与注册阶段服务器存储的用户名和用户密码正确匹配,产生随机数random,附加上服务器相关信息,作为挑战数据challenge;服务器将challenge发送给浏览器;浏览器转发challenge给用户手机;手机客户端产生签名值SignUsk,获取认证信息C2和CNext,将SignUsk、C2和CNext作为认证响应发送给浏览器;浏览器转发signature、C2和CNext给服务器;服务器根据signature、C2和CNext判断用户身份,如果认证通过,发送C3给浏览器,并更新服务器认证信息;浏览器转发C3给手机认证客户端,手机认证客户端更新用户认证信息。

本实施方式采用基于智能手机和用户口令的双因子身份认证系统的基于智能手机和用户口令的双因子身份认证方法,具体包括用户注册阶段和用户身份认证阶段;

如图4所示,所述用户注册阶段具体包括如下步骤:

步骤1:用户在浏览器页面输入网址,进入用户注册界面,并在用户注册界面输入用户口令信息;所述用户口令信息包括用户名和用户密码;

步骤2:浏览器将用户口令信息提交给服务器;

步骤3:服务器判断其接收到的消息类型:如果是用户口令信息,则执行步骤4;如果是注册过程出错消息,则执行步骤5;如果是注册响应消息,则执行步骤6;

步骤4:服务器判断用户名是否已被注册,是,则向浏览器发送用户名重复消息,并执行步骤7;否,则产生注册阶段的挑战请求消息即注册挑战请求消息,并发送给向浏览器,并执行步骤7;

所述服务器生成注册挑战请求消息的方法为:

(1)服务器随机产生一对服务器私钥serverPriKey和服务器公钥serverPubKey构成的服务器RSA公私密钥对和一个注册随机数random,并获取服务器地址origin;

(2)使用服务器私钥serverPriKey对serverPubKey、random和origin进行签名,得到注册签名数据SignSsk;

(3)将SignSsk、serverPubKey、random和origin一起作为注册挑战请求消息;

步骤5:服务器向浏览器发送注册失败消息,并记录日志,并执行步骤7;

步骤6:服务器首先使用服务器私钥serverPriKey对消息进行解密,得到SignUsk、userPubKey、keyHandle、btAddr和C2,然后使用用户公钥userPubKey验证签名SignUsk,如果验证通过,则服务器进行如下操作:在数据库中为用户创建一条记录,其中包括用户口令、用户公钥、用户公私钥对标识、用户手机蓝牙地址、服务器本次认证信息字段SCurrent、服务器下次认证信息字段SLast,对应存入用户注册时输入的用户名和密码、userPubKey、keyHandle、btAddr、C2和空值,并向浏览器发送注册成功消息,并执行步骤7;如果验证失败,服务器向浏览器发送注册失败消息,并记录日志,并执行步骤7;

步骤7:浏览器判断其接收到的消息类型:如果是用户名重复消息,则执行步骤8;如果是注册挑战请求消息,则执行步骤9;如果是注册响应消息EncSpk,则执行步骤10;如果为注册过程出错消息,则执行步骤11;如果是用户注册成功消息或注册失败消息,则执行步骤12;

步骤8:浏览器提示用户名已被注册,并执行步骤18;

步骤9:浏览器首先根据用户输入的网址验证服务器地址origin是否正确,如果正确,则浏览器获取浏览器所在计算机的蓝牙地址,并生成储存该蓝牙地址的二维码,将挑战请求消息发送给手机认证客户端,并执行步骤13;如果不正确,则提示用户停止操作,并向服务器发送注册过程出错消息,执行步骤3;

步骤10:浏览器将注册响应消息EncSpk发送给服务器,并执行步骤3;

步骤11:浏览器提示用户停止操作,并将注册过程出错消息发送给服务器,并执行步骤3;

步骤12:浏览器对其接收的用户注册成功消息或注册失败消息进行显示,并发送给手机认证客户端,并执行步骤14;

步骤13:手机认证客户端通过扫描浏览器给出的储存有浏览器所在计算机蓝牙地址的二维码与浏览器所在计算机建立蓝牙通讯,并执行步骤14;

步骤14:手机认证客户端通过蓝牙通讯,接收浏览器扩展模块发送的消息,并判断消息类型:如果是注册挑战请求消息,则执行步骤15;如果是注册成功消息,则执行步骤16;如果是注册失败消息,则执行步骤17;

步骤15:手机认证客户端使用服务器公钥serverPubKey验证签名SignSsk,如果验证成功,则手机认证客户端生成对注册挑战请求信息的响应消息即注册响应消息,并发送给浏览器,并执行步骤7;如果验证失败,则手机认证客户端向浏览器发送注册过程出错消息,并执行步骤7;

所述手机认证客户端生成注册响应消息的方法为:

(1)手机认证客户端随机生成一对用户私钥userPriKey和用户公钥userPubKey构成的用户RSA公私密钥对;获取手机蓝牙地址btAddr;

(2)手机认证客户端为用户RSA公私密钥对和服务器地址origin生成标识keyHandle;

(3)手机认证客户端生成一个随机数C,并对C进行散列计算得到C1,再对C1进行散列计算得到C2,即C2=H(C1)=H(H(C));

(4)手机认证客户端使用用户私钥userPriKey对userPubKey、keyHandle、btAddr、C2、random和origin进行签名,得到签名数据SignUsk后,再使用服务器公钥serverPubKey对SignUsk、userPubKey、keyHandle、btAddr和C2进行加密,得到加密数据EncSpk,将加密数据EncSpk作为注册阶段的响应消息,即注册响应消息;

步骤16:手机认证客户端存储用户私钥userPriKey、标识keyHandle、服务器公钥serverPubKey、服务器地址origin,并将客户端下次认证信息字段CNext设置为C1,并执行步骤18;

步骤17:手机认证客户端丢弃之前生成的用户RSA公私密钥对、keyHandle、C、C1、C2,并执行步骤18;

步骤18:结束。

如图5所示,所述用户身份认证阶段具体包括如下步骤:

步骤1:用户在浏览器页面输入网址进入用户登陆界面,并在用户登陆界面输入用户口令信息,所述用户口令信息包括用户名和用户密码;

步骤2:浏览器将用户口令信息提交给服务器;

步骤3:服务器判断其接收到的消息类型,如果为用户口令信息,则执行步骤4;如果为认证过程出错消息,则执行步骤5;如果为认证响应消息,则执行步骤6;

步骤4:服务器验证用户口令信息中的用户名和用户密码与用户注册阶段储存的用户名和用户密码是否一一对应,否,则服务器向浏览器发送用户口令错误消息,并执行步骤8;是,则产生认证阶段的挑战请求消息即认证挑战请求消息,并发送给向浏览器,并执行步骤8;

所述服务器生成认证挑战请求消息的方法为:

(1)服务器产生一个认证随机数random*,并获取服务器地址origin,并在数据库中取出用户对应的用户公钥userPubKey、标识keyHandle和手机蓝牙地址btAddr;

(2)使用服务器私钥serverPriKey对random*、origin和keyHandle进行签名,得到认证签名数据SignSsk*,将SignSsk*、random*、origin、keyHandle和btAddr一起作为认证挑战请求消息;

步骤5:服务器发送认证失败消息给浏览器,并记录日志,并执行步骤8;

步骤6:服务器使用服务器私钥serverPriKey对消息进行解密,得到SignUsk*、CNext和C*2;

步骤7:服务器使用用户公钥userPubKey验证签名SignUsk*,如果验证失败,则服务器发送认证失败消息给浏览器,并记录日志,并执行步骤8;如果验证通过,则服务器进行如下操作:首先对字段CNext中的值C1进行散列计算得到H(C1),然后验证H(C1)与数据库中服务器本次认证信息字段SCurrent中的值是否相同,如果相同,将服务器上次认证信息字段SLast设置为C2,将服务器本次认证信息字段SCurrent设置为C*2,且对C*2进行散列计算得到C*3=H(C*2),并将C*3发送给浏览器,并执行步骤8;如果不相同,则验证H(C1)与数据库中服务器上次认证信息字段SLast的值是否相同,如果相同,服务器上次认证信息字段SLast的值保持不变,将服务器本次认证信息字段SCurrent设置为C*2,对C*2进行散列计算得到C*3=H(C*2),并将C*3发送给浏览器,并执行步骤8,如果不相同,则服务器发送认证失败消息给浏览器,并记录日志,并执行步骤8;

步骤8:浏览器判断其接收到的消息类型,如果为用户口令错误消息,则执行步骤9;如果为认证挑战请求消息,则执行步骤10;如果为认证响应消息EncSpk*,则执行步骤11;如果为认证过程出错消息,则执行步骤12;如果为认证失败消息,则执行步骤13;如果为C*3,则执行步骤14;如果为认证成功消息,则执行步骤15;

步骤9:浏览器提示用户认证失败,并执行步骤20;

步骤10:浏览器首先根据用户输入的网址验证服务器地址origin是否正确,如果正确,则浏览器首先提取手机蓝牙地址btAddr,主动与手机建立蓝牙连接,然后向手机认证客户端发送认证挑战请求消息,并执行步骤16;如果不正确,则浏览器提示用户停止操作,并向服务器发送认证过程出错消息,并执行步骤3;

步骤11:浏览器将认证响应消息EncSpk*发送给服务器,并执行步骤3;

步骤12:浏览器提示用户停止操作,并向服务器发送认证过程出错消息,并执行步骤3;

步骤13:浏览器显示认证失败消息,并将认证失败消息发送给手机认证客户端,并执行步骤16;

步骤14:浏览器将C*3发送给手机认证客户端,并执行步骤16;

步骤15:浏览器对认证成功消息进行显示,并执行步骤20;

步骤16:手机认证客户端通过与浏览器所在计算机的蓝牙通讯接收浏览器发送的消息,并判断消息类型,如果为认证挑战请求消息,则执行步骤17;如果是认证失败消息,则执行步骤18;如果是C*3,则执行步骤19;

步骤17:手机认证客户端使用服务器公钥serverPubKey验证认证签名数据SignSsk*,如果验证失败,则向浏览器发送认证过程出错消息,并执行步骤8;如果验证成功,则根据标识keyHandle取出用户私钥userPriKey、提取手机认证客户端中存储的客户端下次认证信息字段CNext和服务器地址origin,并判断标识keyHandle和服务器地址origin是否与接收到的认证挑战请求消息中的keyHandle和origin一一匹配,如果匹配,则生成对认证挑战请求消息的响应消息,即认证响应消息,并发送给浏览器并执行步骤8;如果不匹配,则向浏览器发送认证过程出错消息并执行步骤8;

所述手机认证客户端生成认证响应消息的过程为:

(1)手机认证客户端生成一个随机数C*,并对C*进行散列计算得到C*1,再对C*1进行散列计算得到C*2,即C*2=H(C*1)=H(H(C*)),

(2)手机认证客户端使用用户私钥userPriKey对客户端下次认证信息字段CNext、C*2以及认证挑战消息中的认证随机数random*和服务器地址origin进行签名,得到认证签名数据SignUsk*,使用服务器公钥serverPubKey对SignUsk*、CNext和C*2进行加密,得到认证加密数据EncSpk*,将认证加密数据EncSpk*作为认证响应消息;

步骤18:手机认证客户端丢弃C*、C*1、C*2,并执行步骤20;

步骤19:手机认证客户端判断C*3与H(C*2)是否相等,如果相等,将客户端下次认证消息字段CNext设置为C*1,并向浏览器发送认证成功消息,并执行步骤8;如果不相等,丢弃C*、C*1、C*2,并执行步骤20;

步骤20:结束。

对本实施方式的基于智能手机和用户口令的双因子身份认证系统及方法的实施测试过程如下:

(1)按照正常操作步骤打开浏览器,输入部署在云服务器上的网站的网址“https://www.shiguangtravel.com:8443/OCIA”;弹出选择证书的对话框,按照要求选择证书,进入登录页面;选择“注册”选项,跳转到注册页面,如图6(a)所示,填写用户口令信息,图6(b)所示,填写用户信息,选择启用OCIA认证并选择strict模式,点击注册按钮;图6(c)所示,弹出载有二维码的弹出框。

(2)如图7(a)所示,打开手机客户端;如图7(b)所示,使用手机认证客户端扫描计算机二维码,如图8(a)所示,获得浏览器所在计算机蓝牙MAC地址;如图8(b)所示,点击“确认”建立蓝牙连接完成注册,点击“取消”退出注册;手机与PC浏览器在后台进行信息的交互,如果用户注册成功,手机认证客户端提示用户将开启认证服务,浏览器页面也会跳转到登录页面;如果注册失败,浏览器页面提示用户注册失败。

(3)按照正常操作步骤打开浏览器,输入部署在云服务器上的网站的网址“https://www.shiguangtravel.com:8443/OCIA”,如图9(a)所示,进入登录页面;手机客户端与浏览器在后台进行信息的交互。如果用户登录成功,如图9(b)所示,浏览器提示用户成功登录,并跳转到显示认证过程的页面;如果登录失败,浏览器页面提示用户登录失败。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1