发明内容
本公开的一个目的是提供一种基于区块链的FIDO认证方法、装置及系统,能够解决现有的FIDO服务器中心化部署方式易受到攻击而造成信息泄露、被篡改或出现系统故障的问题。
为了实现上述目的,第一方面,本公开提供一种基于区块链的FIDO认证方法,应用于线上快速身份认证FIDO服务器,所述方法包括:
通过第一应用服务接收用户设备发送的基于第一用户的初始化认证请求,所述FIDO服务器为所述第一应用服务对应的FIDO服务器,所述FIDO服务器为区块链网络中的一个节点;
响应于所述初始化认证请求,向所述用户设备发送认证请求,所述认证请求中包含挑战值;
通过所述第一应用服务接收所述用户设备发送的认证响应,所述认证响应中包含挑战值签名,所述挑战值签名是所述用户设备利用认证私钥对所述挑战值进行签名得到的,所述认证私钥与所述第一用户以及所述第一应用服务对应;
从所述区块链中获取所述认证私钥对应的认证公钥;
利用所述认证公钥对所述认证响应中的所述挑战值签名进行验证;
和/或,
通过所述第一应用服务接收所述用户设备发送的基于所述第一用户的初始化交易请求;
响应于所述初始化交易请求,向所述用户设备发送交易认证请求,所述交易认证请求中包含交易信息;
通过所述第一应用服务接收所述用户设备发送的交易认证响应,所述交易认证响应中包含所述交易信息的哈希值以及所述哈希值的签名,所述哈希值的签名是所述用户设备利用与所述认证私钥对所述哈希值进行签名得到的;
从所述区块链中获取所述认证公钥;
利用所述认证公钥对所述认证响应中的所述哈希值的签名进行验证。
可选地,在所述通过第一应用服务接收用户设备发送的初始化认证请求之前,或在所述通过所述第一应用服务接收所述用户设备发送的基于所述第一用户的初始化交易请求之前,所述方法还包括:
通过所述第一应用服务接收所述用户设备发送的初始化注册请求;
响应于所述初始化注册请求,向所述用户设备发送注册请求,所述注册请求中包含验证策略,所述验证策略包含所述第一应用服务所支持的验证方式和认证器种类;
通过所述第一应用服务接收所述用户设备发送的注册响应,所述注册响应中包含所述认证公钥,以及所述认证公钥的签名,所述认证公钥和所述认证私钥是所述用户设备通过符合所述验证策略的认证器进行所述第一用户的注册后生成的密钥对,所述认证公钥的签名是所述用户设备利用所述认证器的鉴权私钥对所述认证公钥进行签名得到的;
从所述区块链中获取所述认证器的鉴权公钥;
利用所述鉴权公钥对所述认证响应中的所述认证公钥的签名进行验证;
当所述认证公钥的签名通过验证时,将所述认证公钥存储在所述区块链中。
可选地,所述方法还包括:
通过所述第一应用服务接收所述用户设备发送的初始化注销请求;
响应于所述初始化注销请求,向所述区块链中写入用于将指定用户的用户信息设置为无效的数据,其中所述用户信息包括:所述指定用户的认证公钥,以及所述指定用户的认证公钥与所述指定用户、所述第一应用服务的对应关系。
可选地,所述方法还包括:
所述FIDO服务器在所述区块链中发起用于认证器管理的第一交易,所述第一交易中包括所述FIDO服务器的账户,所述智能合约的账户,待执行的管理操作,以及所述第一交易的签名,所述第一交易的签名是所述FIDO服务器利用所述FIDO服务器的私钥对所述第一交易进行签名得到的,所述智能合约中记录有所述FIDO服务器的账户的操作权限;
所述第一交易用于利用所述智能合约在所述区块链中执行所述待执行的管理操作,所述待执行的管理操作包括:添加认证器信息、修改认证器信息或删除认证器信息。
第二方面,本公开还提供一种基于区块链的FIDO认证装置,应用于线上快速身份认证FIDO服务器,所述装置包括:
接收模块,用于通过第一应用服务接收用户设备发送的基于第一用户的初始化认证请求,所述FIDO服务器为所述第一应用服务对应的FIDO服务器,所述FIDO服务器为区块链网络中的一个节点;
认证响应模块,用于响应于所述初始化认证请求,向所述用户设备发送认证请求,所述认证请求中包含挑战值;
所述接收模块,还用于通过所述第一应用服务接收所述用户设备发送的认证响应,所述认证响应中包含挑战值签名,所述挑战值签名是所述用户设备利用认证私钥对所述挑战值进行签名得到的,所述认证私钥与所述第一用户以及所述第一应用服务对应;
读取模块,用于从所述区块链中获取所述认证私钥对应的认证公钥;
认证模块,用于利用所述认证公钥对所述认证响应中的所述挑战值签名进行验证;
和/或,
所述接收模块,还用于通过所述第一应用服务接收所述用户设备发送的基于所述第一用户的初始化交易请求;
交易响应模块,用于响应于所述初始化交易请求,向所述用户设备发送交易认证请求,所述交易认证请求中包含交易信息;
所述接收模块,还用于通过所述第一应用服务接收所述用户设备发送的交易认证响应,所述交易认证响应中包含所述交易信息的哈希值以及所述哈希值的签名,所述哈希值的签名是所述用户设备利用与所述认证私钥对所述哈希值进行签名得到的;
所述读取模块,还用于从所述区块链中获取所述认证公钥;
交易验证模块,用于利用所述认证公钥对所述认证响应中的所述哈希值的签名进行验证。
可选地,所述装置还包括:注册响应模块、秘钥验证模块和存储模块;
所述接收模块,用于在所述通过第一应用服务接收用户设备发送的初始化认证请求之前,或在所述通过所述第一应用服务接收所述用户设备发送的基于所述第一用户的初始化交易请求之前,通过所述第一应用服务接收所述用户设备发送的初始化注册请求;
所述注册响应模块,用于响应于所述初始化注册请求,向所述用户设备发送注册请求,所述注册请求中包含验证策略,所述验证策略包含所述第一应用服务所支持的验证方式和认证器种类;
所述接收模块,还用于通过所述第一应用服务接收所述用户设备发送的注册响应,所述注册响应中包含所述认证公钥,以及所述认证公钥的签名,所述认证公钥和所述认证私钥是所述用户设备通过符合所述验证策略的认证器进行所述第一用户的注册后生成的密钥对,所述认证公钥的签名是所述用户设备利用所述认证器的鉴权私钥对所述认证公钥进行签名得到的;
所述读取模块,还用于从所述区块链中获取所述认证器的鉴权公钥;
所述秘钥验证模块,用于利用所述鉴权公钥对所述认证响应中的所述认证公钥的签名进行验证;
所述存储模块,用于当所述认证公钥的签名通过验证时,将所述认证公钥存储在所述区块链中。
可选地,所述装置还包括:注销模块;
所述接收模块,用于通过所述第一应用服务接收所述用户设备发送的初始化注销请求;
所述注销模块,用于响应于所述初始化注销请求,向所述区块链中写入用于将指定用户的用户信息设置为无效的数据,其中所述用户信息包括:所述指定用户的认证公钥,以及所述指定用户的认证公钥与所述指定用户、所述第一应用服务的对应关系。
可选地,所述装置还包括:认证器管理模块,用于:
所述FIDO服务器在所述区块链中发起用于认证器管理的第一交易,所述第一交易中包括所述FIDO服务器的账户,智能合约的账户,待执行的管理操作,以及所述第一交易的签名,所述第一交易的签名是所述FIDO服务器利用所述FIDO服务器的私钥对所述第一交易进行签名得到的,所述智能合约中记录有所述FIDO服务器的账户的操作权限;
所述第一交易用于利用所述智能合约在所述区块链中执行所述待执行的管理操作,所述待执行的管理操作包括:添加认证器信息、修改认证器信息或删除认证器信息。
第三方面,本公开还提供一种基于区块链的FIDO系统,所述系统包括:至少一个用户设备,至少一个线上快速身份认证FIDO服务器,以及区块链系统,所述区块链系统包括区块链网络和区块链;
其中,每个所述FIDO服务器包括第二方面所述的基于区块链的FIDO认证装置,每个所述FIDO服务器为所述区块链网络中的一个节点,且每个所述FIDO服务器对应一个或多个应用服务。
第四方面,本公开还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现第一方面所述方法的步骤。
第五方面,本公开还提供一种电子设备,包括:
第四方面中所述的计算机可读存储介质;以及
一个或者多个处理器,用于执行所述计算机可读存储介质中的计算机程序。
本公开提供的基于区块链的FIDO认证方法、装置及系统,FIDO服务器在通过第一应用服务接收用户设备发送的初始化认证请求后,向用户设备发送认证请求,该认证请求中包含挑战值,在用户设备利用认证私钥对该挑战值进行签名后,FIDO服务器通过第一应用服务接收用户设备发送的认证响应,该认证响应中包含挑战值签名,而后FIDO从区块链中获取该认证私钥对应的认证公钥,并利用该认证公钥对认证响应中的该挑战值签名进行验证。通过上述技术方案,本公开用区块链来替代原有的FIDO服务器中的数据库,使得FIDO服务器作为区块链中的一个节点,而认证公钥等相关用户信息存储在区块链中,由于区块链具有不可篡改、不可伪造、可追溯的特点,因此能够提高用户存储的安全性。并且由于区块链网络是基于P2P(Peer to Peer,对等网络),是一种分布式网络,FIDO服务器可能是整个网络中的任一节点,因此能够降低FIDO服务器被攻击的可能性。因此,能够解决现有FIDO系统易受到攻击而造成信息泄露、被篡改或出现系统故障的问题,能够提高FIDO系统的安全性。
本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。
具体实施方式
以下结合附图对本公开的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本公开,并不用于限制本公开。
首先,在对本公开提供的基于区块链的FIDO认证方法、装置及系统进行说明之前,先对区块链进行介绍,区块链是由区块链网络中所有节点共同参与维护的去中心化分布式数据库系统,它是由一系列基于密码学方法产生的数据块组成,每个数据块即为区块链中的一个区块。根据产生时间的先后顺序,区块被有序地链接在一起,形成一个数据链条,被形象地称为区块链(Blockchain)。下面对区块链网络的一些概念进行介绍。
区块链网络中的节点可以称为区块链节点,其中区块链网络基于P2P网络,每个参与交易和区块存储、验证、转发的P2P网络节点都是一个区块链网络中的节点。本公开各个实施例中所涉及FIDO服务器就是该区块链网络中的任一节点。
区块链中的用户身份使用公钥表示,并且公钥和私钥是成对出现的,上述公钥所对应的私钥由用户掌握而不发布到网络,公钥可以通过特定的哈希和编码后成为“地址”,该“地址”可以理解为一个账户,代表了其对应的用户,并可随意发布在区块链网络中。用户身份和区块链节点不存在一一对应关系,用户可以在任意一个区块链节点上使用自己的私钥。例如,在本公开的各个实施例中,在区块链网络中的任意一个节点上使用了FIDO服务器的私钥,则该节点就可以作为FIDO服务器。
通常意义上,在区块链的形成过程中,每一个参与计算的节点均享有相同的权限(去中心、无信任),其中包括交易(Transaction),计算区块(俗称挖矿,即mining)等核心功能。其中,交易代表将被写入区块的数据,而区块(Block)则采用特定生成机制,保证最长的链(最长的链包含最多前后关联的区块)为有效链。在交易的数据中,通常包括了一定属性或货币,比如交易拥有者的数字签名(即拥有者的私钥对其交易进行加密处理,通常意义上称为数字签名),交易接受者的账户地址等,在该交易通过了对拥有者数字签名的验证,并被写入区块后,即将该货币的所有权转移到接受者一方。
关于区块链的数据写入区块的过程,是由区块链节点通过向区块链网络发布交易(Transaction)实现向区块链写入数据。该交易包括:区块链节点按照预设的交易数据格式对生成的交易数据包,以及利用该区块链节点自己的私钥对该交易数据包进行的数字签名,该数字签名用于证明该区块链节点的用户的身份。而后,该交易被区块链网络中的“矿工”(即执行PoW共识竞争机制的区块链节点)记录入区块链中产生的新区块,并将该交易发布到区块链网络中,在该交易被其他区块链节点验证通过(其他节点可以从该区块链节点生成的交易中获取该区块链节点的公钥,并根据该区块链节点的公钥对上述的数字签名进行验证,除了验证数字签名之外还可以验证交易数据包是否为规定的数据结构)和接受后,该交易即被写入区块链。其中,区块链中的新区块是由上述的“矿工”通过执行PoW共识竞争机制(该机制可以理解为:各个“矿工”按照区块的预设技术要求,例如按照预设的随机数要求来共同计算随机数,哪一个“矿工”先计算出符合该随机数要求的随机数,该“矿工”产生的区块就作为该新区块)而定期产生的,因此产生新区块的时间间隔通常和上述的预设技术要求相关,通过设置不同的预设技术要求可以改变区块链产生新区块的时间间隔。本发明公开的各个实施例中,向区块链中写入数据(如存储用户信息、存储用户或认证器的公钥)的流程均可以采用上述流程。
下面介绍一下本公开各个实施例所涉及的FIDO系统的结构,该FIDO系统采用C/S(Client/Sever,客户端/服务器)架构,主要包括:用户设备(User Device)和可信赖方(Relying Party)以及区块链网络,该用户设备中包括FIDO客户端,主要包括该用户设备的操作系统,例如:Windows、MacOS、iOS,Android等操作系统,该用户设备中还包括FIDO认证器(Authenticator)(下文简称认证器),认证器的类型包括但不限于:指纹、声纹、虹膜、人脸识别,该用户设备中还包括用户代理(User Agent),例如浏览器、或app(应用程序);该可信赖方包括应用服务和该应用服务对应的FIDO服务器,用户设备可以通过该用户代理与应用服务交互,从而实现与FIDO服务器的交互。该FIDO服务器是该区块链网络中的某个节点,具有向区块链中写入/读取数据的权限。
图1是根据本公开一示例性实施例示出的一种基于区块链的FIDO认证方法的流程图,该方法应用于FIDO服务器,如图1所示,该方法包括:
步骤101,通过第一应用服务接收用户设备发送的基于第一用户初始化认证请求,该FIDO服务器为该第一应用服务对应的FIDO服务器,该FIDO服务器为区块链网络中的一个节点。
其中,第一应用服务可以是任意一种应用服务,例如网页应用(Web App),例如在进行交易前,需要率先进行用户设备的用户身份的认证,因此需要使用用于进行身份认证的应用服务,此时可以由用户设备向FIDO服务器发起认证流程,当用户设备向FIDO服务器发起认证流程时,可以通过该用户设备上的用户代理,比如通过在用户设备的浏览器上登录与该第一应用服务相关的页面,或者是使用该第一应用服务相关的App(应用程序)进行认证时,该用户设备通过该用户代理向第一应用服务发送初始化认证请求(InitiateAuthentication),第一应用服务将收到的初始化认证请求透传给其对应的FIDO服务器(实际上是第一应用服务的应用服务器(App Sever)传给FIDO服务器的),从而FIDO服务器能够通过第一应用服务接收用户设备发送的初始化认证请求。
步骤102,响应于该初始化认证请求,向该用户设备发送认证请求,该认证请求中包含挑战值。
在FIDO服务器接收到初始化认证请求后,FIDO服务器向该用户设备发送包含挑战值(challenge)的认证请求(Authentication Request),该认证请求实际是发到了该用户设备的FIDO客户端。
步骤103,通过该第一应用服务接收该用户设备发送的认证响应,该认证响应中包含挑战值签名,该挑战值签名是该用户设备利用认证私钥对该挑战值进行签名得到的,该认证私钥与该用户设备的用户以及该第一应用服务对应。
用户设备在接收到FIDO服务器的认证请求时,该用户设备(中的FIDO客户端)会通过该用户设备上的认证器(Authenticator)对使用该用户设备的第一用户进行验证,验证方式包括:指纹、虹膜、人脸识别、声纹、密码等等,当该用户通过验证时,解锁存储在认证器中的该认证私钥,其中该认证私钥与其对应的认证公钥是在该第一用户使用第一应用服务注册时生成的密钥对,可以成为认证秘钥(Authentication Keys)。实际上在用户设备发起认证流程时,会告知FIDO服务器该用户设备的第一用户的信息,例如该第一用户的用户名(username),从而FIDO服务器在向用户设备发送认证请求时,认证请求还可以包括该用户名、第一应用服务的AppID(应用标识),在生成上述的密钥对后可以与该用户名和第一应用服务建立绑定关系,从而该密钥对与该第一用户以及第一应用服务对应,因此当该第一用户通过验证后,即可解锁与该第一用户以及该第一应用服务对应的认证私钥。
另外,步骤102中向该用户设备发送的认证请求中还可以包括验证策略(Policy),该验证策略中可以规定允许使用的验证方式(如允许使用指纹或者虹膜),支持/不支持的认证器类型(例如支持/不支持某些规定厂商生产的认证器,或者支持/不支持某些规定厂商生产的且ID符合一定要求的认证器),以及秘钥保护方式(例如采用的加密算法等),当用户设备收到认证请求后,首先根据该验证策略来选择符合该验证策略的认证器,然后再使用该认证器来进行用户的验证。
最后,在第一用户通过验证后,该用户设备(中的FIDO客户端)利用上述解锁得到的认证私钥对该挑战值进行签名得到该挑战值签名,并向FIDO服务器发送该认证响应,从而该FIDO服务器就得到了包含挑战值签名的认证响应。
步骤104,从该区块链中获取该认证私钥对应的认证公钥。
步骤105,利用该认证公钥对该认证响应中的该挑战值签名进行验证。
FIDO服务器在接收到该认证响应后,可以从区块链中读取与该第一用户以及该第一应用服务对应的认证公钥,从而就找到了与该认证私钥对应的认证公钥,然后利用该认证公钥对该认证响应中的该挑战值签名进行验证。当该挑战值签名通过验证后,该用户设备的该第一用户也就通过了本次认证。
通过上述技术方案,本公开用区块链来替代原有的FIDO服务器中的数据库,使得FIDO服务器作为区块链中的一个节点,而认证公钥等相关用户信息存储在区块链中,由于区块链具有不可篡改、不可伪造、可追溯的特点,因此能够提高用户存储的安全性。并且由于区块链网络是基于P2P网络,FIDO服务器可能是整个网络中的任一节点,因此能够降低FIDO服务器被攻击的可能性。因此,能够解决现有FIDO系统易受到攻击而造成信息泄露、被篡改或出现系统故障的问题,提高FIDO系统的安全性。
在完成用户的认证后,可以进行交易,此过程中需要对交易相关的信息(例如交易金额)进行认证,因此在图1所示的方法之后还可以包括图2所示的方法,图2是根据本公开一示例性实施例示出的另一种基于区块链的FIDO认证方法的流程图,该方法应用于FIDO服务器,如图2所示,该方法包括:
步骤106,通过该第一应用服务接收该用户设备发送的基于该第一用户的初始化交易请求。
其中,当用户设备要发起一个交易时,可以通过其用户代理向FIDO发送初始化交易请求(Initiate Transaction),FIDO服务器接收该初始化交易请求的方式与步骤101所示的方式相同,也是通过该第一应用服务接收用户设备发送的初始化交易请求,并透传给该FIDO服务器,具体的可参照步骤101。
步骤107,响应于该初始化交易请求,向该用户设备发送交易认证请求,该交易认证请求中包含交易信息。
FIDO服务器在接收到该初始化交易请求后,向该用户设备发送包含交易信息(即Transaction Text,也可以称为交易文本),该交易信息例如可以包括:交易金额,还可以包括交易对象等其他相关信息。该用户设备在接收到该交易认证请求后,即可得到该交易信息。而后,该用户设备(中的FIDO客户端)会通过该用户设备上的认证器对使用该用户设备的第一用户进行验证,其验证方法与步骤103中所述的方法相同。其中,步骤107中向该用户设备发送的交易认证请求中也可以包括验证策略(Policy),该验证策略与步骤103中所示的验证策略想用,也是用于规定验证方式、支持/不支持的认证器以及秘钥保护方式,当用户设备收到认证请求后,首先根据该验证策略来选择符合该验证策略的认证器,然后再使用该认证器来进行用户的验证,具体可参展步骤103。另外,步骤107中向该用户设备发送的交易认证请求中,还可以包含挑战值,其作用与步骤102中向用户设备发送的挑战值的作用相同,用户设备可以在接收到交易认证请求后,可以利用该用户设备的认证私钥对该挑战值进行签名,并将挑战值签名通过交易认证响应与该交易信息的哈希值以及该哈希值的签名一起发送给FIDO服务器,以便FIDO服务器收到交易认证响应后利用该认证公钥对该挑战值签名进行验证。
步骤108,通过该第一应用服务接收该用户设备发送的交易认证响应,该交易认证响应中包含该交易信息的哈希值以及该哈希值的签名,该哈希值的签名是该用户设备利用与该认证私钥对该哈希值进行签名得到的。
在该第一用户通过验证后,该用户设备(中的FIDO客户端)可以解锁存储在认证器中的该认证私钥,然后向该第一用户显示该交易信息,在用户确认该交易信息无误后(例如用户点击关于该交易信息的确认按键后,可以认为用户已对该交易信息确认无误),计算出该交易信息的哈希值,并用已经解锁的该认证私钥对该哈希值进行签名,从而得到该哈希值的签名。然后向FIDO服务器发送该交易认证响应,该FIDO服务器即可通过该第一应用服务接收到该用户设备发送的交易认证响应。
其中,该认证私钥即步骤103中所述的认证私钥,其生成方法可参照步骤103,以及图3所示的方法。
步骤109,从该区块链中获取该认证公钥。
步骤110,利用该认证公钥对该认证响应中的该哈希值的签名进行验证。
FIDO服务器在接收到该交易认证响应后,可以从区块链中读取与该第一用户以及该第一应用服务对应的认证公钥,从而就找到了与该认证私钥对应的认证公钥,然后利用该认证公钥对该认证响应中的该哈希值的签名进行验证。当该哈希值的签名通过验证后,即可说明接收到的交易认证响应中的该哈希值是合法有效的,从而该本次交易也就通过了认证。
另外,需要说明的是,也可以在步骤106至步骤110所示的交易认证流程之前,可以不进行步骤101至步骤105所示的认证流程,可以直接进行步骤106至步骤110所示的交易认证流程。例如,一些场景下,通常需要先进行用户登录,才可以进行付款操作,该场景下可以先执行步骤101至步骤105所示的认证流程以进行用户登录,然后当发生付款/转账行为时再执行步骤106至步骤110所示的交易认证流程以便完成交易。但是在某场景下,可以允许不进行用户登录而直接进行付款/转账行为,此时可以直接进行步骤106至步骤110所示的交易认证流程来完成交易。
由于上述各个实施例中所使用的认证公钥和认证私钥均是在用户注册流程中生成,并存储在区块链中的,因此下面对本公开提供的基于区块链的FIDO认证方法中关于用户注册的流程进行说明,图3是根据本公开一示例性实施例示出的又一种基于区块链的FIDO认证方法的流程图,方法应用于FIDO服务器,且该方法执行于图1或图2所示的方法之前,如图3所示,该方法包括:
步骤111,通过该第一应用服务接收该用户设备发送的初始化注册请求。
其中,当用户设备要进行用户注册时,可以通过其用户代理向FIDO发送初始注册请求(Initiate Registration),FIDO服务器接收该初始注册请求的方式与步骤101所示的方式相同,也是通过该第一应用服务接收用户设备发送的初始注册请求,并透传给该FIDO服务器,具体的可参照步骤101。
步骤112,响应于该初始化注册请求,向该用户设备发送注册请求,该注册请求中包含验证策略,该验证策略包含该第一应用服务所支持的验证方式和认证器种类。
示例的,该验证策略中可以规定允许使用的验证方式(如允许使用指纹或者虹膜),支持/不支持的认证器类型(例如支持/不支持某些规定厂商生产的认证器,或者支持/不支持某些规定厂商生产的且ID符合一定要求的认证器),以及秘钥保护方式(例如采用的加密算法等),当用户设备收到注册请求后,首先根据该验证策略来选择符合该验证策略的认证器,然后再使用该认证器来接收用户首次输入的验证信息,例如用户在注册时,认证器需要接收用户首次输入的指纹、虹膜、人脸或者声纹并存储,以便作为后续认证过程中的身份认证依据。
步骤113,通过该第一应用服务接收该用户设备发送的注册响应,该注册响应中包含该认证公钥,以及该认证公钥的签名。该认证公钥和所述认证私钥是该用户设备通过符合该验证策略的认证器进行该第一用户的注册后生成的密钥对,该认证公钥的签名是该用户设备利用该认证器的鉴权私钥对该认证公钥进行签名得到的。
示例的,在认证器接收用户首次输入的验证信息并存储后,可以根据该认证器内置的预设算法或根据上述验证策略中规定的预设算法为该第一用户生成包括上述的认证公钥和认证私钥的密钥对。另外,用户设备发起注册流程时,可以告知FIDO服务器该用户设备的想要注册的用户信息,例如设置的该第一用户的用户名,因此FIDO服务器在向用户设备发送注册请求时,注册请求中还可以包括该用户名、第一应用服务的AppID,在生成上述的密钥对后可以与该用户名和第一应用服务建立绑定关系,从而该密钥对与该第一用户以及第一应用服务对应。然后,该用户设备(中的FIDO客户端)使用内置于认证器内的鉴权私钥(Attestation Key)对该认证公钥进行签名,得到该认证公钥的签名,然后将该认证公钥的签名通过该注册响应发送至FIDO服务器,然后该FIDO服务器就可以通过该第一应用服务接收到该注册响应,并获取其中包含的该认证公钥的签名,然后FIDO服务器可以执行步骤114。另外,步骤112中向该用户设备发送的注册请求中,还可以包含挑战值,其作用与步骤102中向用户设备发送的挑战值的作用相同,用户设备可以在接收到注册请求后,可以将该挑战值结合规定信息进行一定计算,并将计算后得到的计算值利用该认证器的鉴权私钥进行签名,然后将该计算值的签名通过该注册响应与该认证公钥的签名一起发送给FIDO服务器,以便FIDO服务器收到注册响应后,利用该认证器的鉴权公钥对计算值的签名进行验证。
步骤114,从该区块链中获取该认证器的鉴权公钥。
步骤115,利用该鉴权公钥对该认证响应中的该认证公钥的签名进行验证。
FIDO服务器在接收到该注册响应后,可以从区块链中读取与该鉴权私钥匹配的鉴权公钥,然后利用该鉴权公钥对该认证公钥的签名进行验证。其中,该鉴权公钥是预先配置并存储在区块链中的,关于认证器的鉴权密钥管理维护,可以采用两种管理维护方式:第一种,在区块链中给认证器厂家开放管理权限,由认证器厂家直接向区块链中添加、修改/删除认证器的鉴权密钥,即可以理解为在区块链网络中添加认证器厂家的节点,并为该节点所使用的账户开放向区块链中添加、修改/删除认证器的鉴权密钥的权限;第二种给FIDO服务器所使用的账户开放管理权限,从而允许FIDO服务器向区块链中添加、修改/删除认证器的鉴权密钥。
无论是由认证器厂家,还是FIDO服务器或者二者共同对区块链中的鉴权密钥进行管理,均可以利用在区块链上的智能合约来实现,在智能合约中可以对不同账户的权限进行限制和设定,例如:设置FIDO服务器具有增加/修改/注销用户的权限,以及添加/修改/删除认证器鉴权密钥的权限,认证器厂家仅具有添加/修改/删除认证器鉴权密钥的权限。
下面以FIDO服务器为例,对在区块链中进行认证器信息的一次维护过程进行说明:
首先,该FIDO服务器在该区块链中发起用于认证器管理的第一交易(Transaction),该第一交易中包括该FIDO服务器的账户,智能合约的账户,待执行的管理操作,以及该第一交易的签名。其中该第一交易的签名是该FIDO服务器利用该FIDO服务器的私钥对该第一交易进行签名得到的,该智能合约中记录有该FIDO服务器的账户的操作权限。该第一交易用于利用该智能合约在区块链中执行该待执行的管理操作,其中该待执行的管理操作可以为添加认证器信息、修改认证器信息或删除认证器信息。其中,认证器信息,除了包含上述的认证器鉴权秘钥外,还可以包括:认证器编号(AuthenticatorAttestation ID,AAID),认证器版本,公钥编码类型,认证器支持的密码算法,认证器证书等信息,也就是说FIDO服务器和认证器厂家除了维护认证器鉴权密钥外,还可以维护上述的其他信息。智能合约(Smart Contract)实际上是存储在区块链上的可执行代码,不是严格意义上的账户因其不一定设有实际拥有人,但其特性和行为在很多情况下能够被看作是一种受编程逻辑控制的机器账户。
其次,该FIDO服务器在发起该第一交易后,该第一交易会被发布到区块链网络中,区块链网络中的其他节点,首先会根据该FIDO服务器的公钥,对该第一交易的签名进行验证,当该第一交易的签名通过验证后,会根据该第一交易所要调用的智能合约的内容来判断该FIDO服务器的账户是否具有进行该待执行的管理操作的权限。
示例的,在智能合约中可以规定FIDO服务器的调用接口的权限,例如:允许FIDO服务器及认证器厂家调用添加认证器接口、修改认证器接口和读取认证器接口,其中,添加认证器接口用于在区块链中新增一个新的认证器的信息,修改认证器接口用于修改认证器的某个信息或所有信息,删除认证器接口用于删除某个认证器的信息,因此其他节点可以根据智能合约中所规定的该FIDO服务器的账户被允许调用的接口权限就可以判断该FIDO服务器的账户是否具有进行该待执行的管理操作的权限。
当该第一交易通过了其他各个节点(也可能是区块链网络中指定的部分节点)的验证,并且其他各个节点均确认该FIDO服务器的账户具有进行该待执行的管理操作的权限时,其他各个节点均执行该智能合约,从而即可完成该待执行的管理操作,从而实现该FIDO服务器对认证器的维护管理,认证器厂家的节点在区块链中对认证器的维护流程与FIDO服务器相同,不再赘述。
在现有的FIDO系统中,用户信息和认证器信息都是存储在FIDO服务器的加密认证秘钥参考数据库(Cryptographic Authentication Key Reference Database),而认证器信息的维护是通过FIDO元数据服务(FIDO Metadata Service)来实现的。由此可见,在本公开实施例所示的基于区块链的FIDO认证方法中,通过区块链替代了上述的加密认证秘钥参考数据库和FIDO元数据服务来实现用户信息和认证器信息的存储以及认证器信息的维护。相比FIDO服务器传统的中心化的架构,本公开实施例所示出的基于区块链的FIDO认证方法更安全。
步骤116,当该认证公钥的签名通过验证时,将该认证公钥存储在该区块链中。
其中,除了将认证公钥存储在区块链中之外,实际上还需要将该认证公钥与注册的该第一用户,以及所使用的第一应用服务建立绑定关系,以该第一用户为例,在区块链中,与该第一用户的认证公钥一起存储的还有:该第一用户的用户名或者用户编号(userID),该第一应用服务的应用编号(AppID)等信息,然后将该认证公钥的公钥编号(KeyID)和该用户编号以及该应用编号建立绑定关系并存储。
图4是根据本公开一示例性实施例示出的又一种基于区块链的FIDO认证方法的流程图,方法应用于FIDO服务器,如图4所示,该方法还可以包括:
步骤117,通过该第一应用服务接收该用户设备发送的初始化注销请求。
其中,当用户设备要注销某个用户时,可以通过其用户代理向FIDO发送初始化注销请求,FIDO服务器接收该初始化注销请求的方式与步骤101所示的方式相同,也是通过该第一应用服务接收用户设备发送的初始化注销请求,并透传给该FIDO服务器,具体的可参照步骤101。
步骤118,响应于该初始化注销请求,向该区块链中写入用于将指定用户的用户信息设置为无效的数据,其中该用户信息包括:所述指定用户的认证公钥,以及该指定用户的认证公钥与该指定用户、该第一应用服务的对应关系。
这是由于对于区块链来说,数据一旦写入就无法删除,因此需要写入一个新的数据,用于标记该指定用户的用户信息已设置为无效的数据,由于向区块链写入的数据都会带有时间戳,因此当再次读取与该指定用户相关的信息时,以新写入的数据为准,因此当发现最新写入的关于该指定用户的数据标记该指定用户的用户信息已设置为无效数据时,可以认为该指定用户已被注销。
通过上述技术方案,本公开用区块链来替代原有的FIDO服务器中的数据库,使得FIDO服务器作为区块链中的一个节点,而认证公钥等相关用户信息存储在区块链中,由于区块链具有不可篡改、不可伪造、可追溯的特点,因此能够提高用户存储的安全性。并且由于区块链网络是基于P2P网络,FIDO服务器可能是整个网络中的任一节点,因此能够降低FIDO服务器被攻击的可能性。因此,能够解决现有FIDO系统易受到攻击而造成信息泄露、被篡改或出现系统故障的问题,提高FIDO系统的安全性。
图5是根据本公开一示例性实施例示出的一种基于区块链的FIDO认证装置的框图,如图5所示,应用于FIDO服务器,该装置500包括:
接收模块501,用于通过第一应用服务接收用户设备发送的基于第一用户的初始化认证请求,该FIDO服务器为该第一应用服务对应的FIDO服务器,该FIDO服务器为区块链网络中的一个节点;
认证响应模块502,用于响应于该初始化认证请求,向该用户设备发送认证请求,该认证请求中包含挑战值;
接收模块501,还用于通过该第一应用服务接收该用户设备发送的认证响应,该认证响应中包含挑战值签名,该挑战值签名是该用户设备利用认证私钥对该挑战值进行签名得到的,该认证私钥与该第一用户以及该第一应用服务对应;
读取模块503,用于从该区块链中获取该认证私钥对应的认证公钥;
认证模块504,用于利用该认证公钥对该认证响应中的该挑战值签名进行验证。
可选的,图6是根据本公开一示例性实施例示出的另一种基于区块链的FIDO认证装置的框图,该装置500还包括:交易响应模块505和交易验证模块506;
接收模块501,还用于通过该第一应用服务接收该用户设备发送的基于该第一用户的初始化交易请求;
交易响应模块505,用于响应于该初始化交易请求,向该用户设备发送交易认证请求,该交易认证请求中包含交易信息;
接收模块501,还用于通过该第一应用服务接收该用户设备发送的交易认证响应,该交易认证响应中包含该交易信息的哈希值以及该哈希值的签名,该哈希值的签名是该用户设备利用与该认证私钥对该哈希值进行签名得到的;
读取模块503,还用于从该区块链中获取该认证公钥;
交易验证模块506,用于利用该认证公钥对该认证响应中的该哈希值的签名进行验证。
需要说明的是,图6所示的基于区块链的FIDO认证装置500,是在包括:接收模块501、认证响应模块502、读取模块503、认证模块504的情况下还包括交易响应模块505和交易验证模块506,实际上也可以在不包括认证响应模块502和认证模块504的情况下,包含交易响应模块505和交易验证模块506(图中未示出)。
可选的,图7是根据本公开一示例性实施例示出的又一种基于区块链的FIDO认证装置的框图,该装置500还包括:注册响应模块507、秘钥验证模块508和存储模块509;
接收模块501,用于在该通过第一应用服务接收用户设备发送的初始化认证请求之前,或在通过该第一应用服务接收该用户设备发送的基于该第一用户的初始化交易请求之前,通过该第一应用服务接收该用户设备发送的初始化注册请求;
注册响应模块507,用于响应于该初始化注册请求,向该用户设备发送注册请求,该注册请求中包含验证策略,该验证策略包含该第一应用服务所支持的验证方式和认证器种类;
接收模块501,还用于通过该第一应用服务接收该用户设备发送的注册响应,该注册响应中包含该认证公钥,以及该认证公钥的签名,该认证公钥和该认证私钥是该用户设备通过符合该验证策略的认证器进行该第一用户的注册后生成的密钥对,该认证公钥的签名是该用户设备利用该认证器的鉴权私钥对该认证公钥进行签名得到的;
读取模块503,还用于从该区块链中获取该认证器的鉴权公钥;
秘钥验证模块508,用于利用该鉴权公钥对该认证响应中的该认证公钥的签名进行验证;
存储模块509,用于当该认证公钥的签名通过验证时,将该认证公钥存储在该区块链中。
可选的,图8是根据本公开一示例性实施例示出的又一种基于区块链的FIDO认证装置的框图,该装置500还包括:注销模块510;
接收模块501,用于通过该第一应用服务接收该用户设备发送的初始化注销请求;
注销模块510,用于响应于该初始化注销请求,向该区块链中写入用于将指定用户的用户信息设置为无效的数据,其中该用户信息包括:该指定用户的认证公钥,以及该指定用户的认证公钥与该指定用户、该第一应用服务的对应关系。
可选的,图9是根据本公开一示例性实施例示出的又一种基于区块链的FIDO认证装置的框图,该装置500还包括,认证器管理模块511,用于:
该FIDO服务器在该区块链中发起用于认证器管理的第一交易,该第一交易中包括该FIDO服务器的账户,该智能合约的账户,待执行的管理操作,以及该第一交易的签名,该第一交易的签名是该FIDO服务器利用该FIDO服务器的私钥对该第一交易进行签名得到的,该智能合约中记录有该FIDO服务器的账户的操作权限;
该第一交易用于利用该智能合约在该区块链中执行该待执行的管理操作,该待执行的管理操作包括:添加认证器信息、修改认证器信息或删除认证器信息。
通过上述技术方案,本公开用区块链来替代原有的FIDO服务器中的数据库,使得FIDO服务器作为区块链中的一个节点,而认证公钥等相关用户信息存储在区块链中,由于区块链具有不可篡改、不可伪造、可追溯的特点,因此能够提高用户存储的安全性。并且由于区块链网络是基于P2P网络,FIDO服务器可能是整个网络中的任一节点,因此能够降低FIDO服务器被攻击的可能性。因此,能够解决现有FIDO系统易受到攻击而造成信息泄露、被篡改或出现系统故障的问题,提高FIDO系统的安全性。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
图10是根据本公开一示例性实施例示出的一种基于区块链的FIDO系统的结构图,如图10所示,该系统包括:至少一个用户设备10,至少一个线上快速身份认证FIDO服务器20,以及区块链系统30;
其中,区块链系统30包括区块链网络和区块链,该区块链由区块链网络中的节点共同维护,每个FIDO服务器20包括上述的图6至图9任一所式的基于区块链的FIDO认证装置600,每个FIDO服务器20为该区块链网络中的一个节点,且每个FIDO服务器对应一个或多个应用服务。其中,用户设备10中包括用户代理、FIDO客户端和FIDO认证器,FIDO服务器20属于可信赖方,该可信赖方还包含应用服务(的服务器),用户设备20和应用服务之间可以基于UAF协议交互,应用服务能够将用户设备发送的消息(请求/响应等)传给FIDO服务器。
图10所示的FIDO系统中一个应用服务对应一个FIDO服务器,当存在多个应用服务时,可以对应的设置多个FIDO服务器,其结构可以如图11所示;可选的,如图12所示,也可以采用多个应用服务使用同一个FIDO服务器的结构,或者如图13所示,也可以采用两种方式混合的结构。
图14是根据一示例性实施例示出的一种电子设备1400的框图。例如,电子设备1400可以被提供为一服务器。参照图14,电子设备1400包括处理器1422,其数量可以为一个或多个,以及存储器1432,用于存储可由处理器1422执行的计算机程序。存储器1432中存储的计算机程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理器1422可以被配置为执行该计算机程序,以执行上述的基于区块链的FIDO认证方法。
另外,电子设备1400还可以包括电源组件1426和通信组件1450,该电源组件1426可以被配置为执行电子设备1400的电源管理,该通信组件1450可以被配置为实现电子设备1400的通信,例如,有线或无线通信。此外,该电子设备1400还可以包括输入/输出(I/O)接口1458。电子设备1400可以操作基于存储在存储器1432的操作系统,例如WindowsServerTM,Mac OS XTM,UnixTM,LinuxTM等等。
在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,例如包括程序指令的存储器1432,上述程序指令可由电子设备1400的处理器1422执行以完成上述的基于区块链的FIDO认证方法。
以上结合附图详细描述了本公开的优选实施方式,但是,本公开并不限于上述实施方式中的具体细节,在本公开的技术构思范围内,可以对本公开的技术方案进行多种简单变型,这些简单变型均属于本公开的保护范围。
另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合,为了避免不必要的重复,本公开对各种可能的组合方式不再另行说明。
此外,本公开的各种不同的实施方式之间也可以进行任意组合,只要其不违背本公开的思想,其同样应当视为本公开所公开的内容。