FIDO 标准简介

FIDO 联盟(Fast IDentity Online Alliance)简介

网站:http://fidoalliance.org

FIDO Alliance,成立于2012年7月。

FIDO的目标是创建一套开放的标准协议,保证各个厂商开发的强认证技术之间的互操作性,改变目前的主流在线验证的方式(即使用密码作为主要验证手段),消除或者减弱用户对密码的依赖。对于互联网公司来说,随着重大数据泄露事故的频发,过去基于密码的在线身份验证技术已经难以维持互联网经济的稳定发展,安全界关于"密码已死"的呼声越来越高。而FIDO联盟正是在这个背景下应运而生的一个推动去密码化的强认证协议标准的组织。

FIDO的会员包括Nok Nok Labs、Google、BlackBerry、ARM、英特尔、PayPal、Lenovo、MasterCard、三星、VISA、Synaptics、RSA、微软等等。支付宝也于今年9月份左右加入的FIDO组织。

FIDO标准支持多种硬件设备,如U盘(或U盾)、NFC芯片、TPM(可信赖平台模块)芯片,以及指纹扫描器、语音识别、脸部识别、虹膜识别等生物识别硬件。目前的草案内容主要针对的是USB设备。

FIDO 基本原理

FIDO协议分为两大类:U2F和UAF。对应的也有两套规范(UAF Specifications,U2F Specifications),在如下地址下载:

https://fidoalliance.org/specifications/download/

  • UAF: Universal Authentication Framework protocol.
    UAF 支持指纹、语音、虹膜、脸部识别等生物身份识别方式。无需用户密码(Passwordless)介入,直接进行验证交易。用户在注册阶段,根据服务器支持的本地验证方式,选择一种验证方式,如:指纹识别,人脸识别,语音识别,等等,服务器也可保留密码验证方式,将密码和生物识别相结合,增强账户安全性。
  • U2F: Universal Second Factor (U2F) protocol. 
    U2F类似国内的二代U盾的保护机制,使用双因子(密码和能与用户交互的设备)保护用户账户和隐私。用户在注册阶段,使用服务器支持的加密设备,将账户和设备绑定。当进行登录验证操作时,服务器在合适的时候,提示用户插入设备并进行按键操作,加密设备对数据签名,发送给服务器,服务器做验证,如果验证成功,用户则可登录成功。由于有了第二因子(加密设备)的保护,用户可以选择不设置密码或者使用一串简单易记的4位密码。

下图展示了俩种协议的验证方式:

和U盾相关的协议为U2F协议,下面内容主要针对U2F协议。

我们简要分析一下U2F协议的安全性:在使用传统的验证方法时,系统需要从客户端发送密码到远程服务器的密码库中进行比对,这样就存在密码被拦截和破解的风险。对远程服务器而言,一旦超级管理员的帐号被盗,用户的密码会被直接或者间接获取。破解者便能使用用户信息登陆服务器进行恶意操作。如果服务器使用了U2F,服务器被破解者攻破,但其如果无法获取用户的U2F设备,也就无法登陆服务器进行恶意操作。

FIDO 工作原理

FIDO协议使用标准的非对称公私钥对来提供安全保障。确切的说,FIDO草案中使用的是ECDSA。

  • 当用户登录服务器注册信息时,用户的加密设备产生一对非对称密钥对,私钥在加密设备中保留,黑客无法读取,公钥传给服务器,服务器将此公钥和用户对应的账户相关联。
  • 当用户登录服务器验证信息时,用户使用设备中的私钥对服务器的挑战数据做签名,服务器使用对应的公钥做验证。用户的设备中的私钥,必须经过用户解锁(如按键,按下指纹等),才能被用来做签名操作

FIDO 注册演示

  • User is prompted to choose an available FIDO authenticator that matches the online service‘s acceptance policy.
  • User unlocks the FIDO authenticator using a fingerprint reader, a button on a second–factor device, securely–entered PIN or other method.
  • User‘s device creates a new public/private key pair unique for the local device, online service and user‘s account.
  • Public key is sent to the online service and associated with the user‘s account. The private key and any information about the local authentication method (such as biometric measurements or templates) never leave the local device.

FIDO 登陆演示

  • Online service challenges the user to login with a previously registered device that matches the service‘s acceptance policy.
  • User unlocks the FIDO authenticator using the same method as at Registration time.
  • Device uses the user‘s account identifier provided by the service to select the correct key and sign the service‘s challenge.
  • Client device sends the signed challenge back to the service, which verifies it with the stored public key and logs in the user.

FIDO(U2F)协议文档

FIDO U2F规范目前草案有7个文档分别为:

通过名字,应该能了解个大概。文档的阅读顺序我已经做了标号。从0到7。7 为名词表 ,做查询名词使用。

注:由于文档还处于修订当中,可能以后会有若干变化,本文是以2014.02.09的草案作为参考的。

U2F流程总览

U2F 注册


U2F设备


浏览器


服务器

 
  1. 用户输入用户名和密码,点击"注册",提交给服务器。
 
   
  1. 服务器组织注册数据:Registration Data {

    DOMString Version;

    DOMString challenge;

    DOMString app_id;

    DOMString sessionId;

    }

    如果提交的用户名已经在服务器注册,服务器还需要组织签名数据:

    Sign Data {

    DOMString Version;

    DOMString challenge;

    DOMString app_id;

    DOMString keyHandle;

    DOMString sessionId;

    }

将数据发送给客户端

 
  1. 浏览器收到Registration Data 和 Sign Data。给U2F设备发送获取版本命令
 
  1. 接受获取版本APDU指令,返回版本字符串"U2F_V2".
   
 
  1. 判断版本号。版本号目前应该为U2F_V2。
  2. 判断Sign Data值是否为空,为空说明用户未在服务器注册,不为空说明此用户已在服务器注册。不为空时,给U2F发送签名指令。 通过U2F设备验证此账号信息是否和U2F设备中保存的信息一致。
 
  1. U2F设备验证Key Handle是否存在设备中,Key Handle和 application id 是否匹配。如果验证成功,表面设备已经注册
   
 
  1. 如果U2F验证通过,浏览器提示用户账户已注册。
  2. 如果用户未注册,组织注册数据,给U2F发送注册指令。注册数据:

    SHA2(Client Data) + SHA2(app_id)

    Client Data {

    DOMString typ;

    DOMString challenge;

    DOMString origin;

    DOMString or JwKey cid_pubkey

    }

 
  1. U2F设备产生一对密钥对,用私钥对SHA2(Client Data) + SHA2(app_id) 做签名, 返回的数据:公钥+Key Handle+X509证书+签名值。
   
 
  1. 浏览器将U2F返回的值,Client Data等信息传给服务器。
 
   
  1. 服务器验证证书有效性,组织签名数据,使用对应的公钥做验签操作,验签成功,服务器将账户信息和公钥,Key Handle等信息关联在一起。
     

U2F 认证


U2F设备


浏览器


服务器

 
  1. 用户输入用户名和密码,点击"登陆",提交给服务器。
 
   
  1. 服务器组织认证数据:

    Sign Data {

    DOMString Version;

    DOMString challenge;

    DOMString app_id;

    DOMString keyHandle;

    DOMString sessionId;

    }

将数据发送给客户端

 
  1. 浏览器收到Sign Data。给U2F设备发送获取版本命令
 
  1. 接受获取版本APDU指令,返回版本字符串"U2F_V2".
   
 
  1. 判断版本号。版本号目前应该为U2F_V2。
  2. 组织认证数据,给U2F发送认证指令。主要认证数据为:

    SHA2(Client Data) + SHA2(app_id)+Key Handle.

    Client Data {

    DOMString typ;

    DOMString challenge;

    DOMString origin;

    DOMString or JwKey cid_pubkey

    }

 
  1. U2F设备验证Key Handle是否存在设备中,Key Handle和 application id 是否匹配。如果验证成功,通过Key Handle对应的私钥对指定数据做签名,对应密钥对的引用计数器加一,返回值中数据包括引用计数和签名值。
   
 
  1. 浏览器将U2F返回的值,Client Data等信息传给服务器。
 
   
  1. 服务器验证引用计数,判断设备是否被克隆,验证Client Data数据合法性,组织签名数据,使用对应的公钥做验签操作,验签成功,服务器将账户的引用计数更新为最新的引用计数。服务器允许用户登录。
     

U2F 协议解析

U2F的设备类型

文档中提到,U2F的设备类型可以为USB设备,NFC设备,蓝牙等设备。目前U2F规范中只涉及到了USB设备。以后会做补充。

服务器关联的密钥对

U2F设备产生的密钥对应该是服务器关联的,一对密钥对应一个服务器,而不是一个U2F设备对应一个服务器。在注册的时候,服务器给U2F设备传入服务器相关信息,U2F设备产生一对密钥对,将此密钥对和服务器相关信息相关联,给此密钥对分配一个句柄(Key Handle),并将其和公钥传给服务器,服务器将注册的 账户信息,公钥,Key Handle全部关联在一起并保存。

当用户需要使用U2F做验证操作时,服务器产生挑战数据,使用U2F设备做签名,此时服务器将Key Handle和服务器信息通过浏览器传给U2F设备,U2F设备使用Key Handle,寻找对应的密钥对,如果密钥对存在,检验密钥对应的服务器信息是否和传入的服务器信息匹配,如果不匹配,说明服务器是伪造或者不正确的。如果正确,U2F设备等待用户按键确认,用户按键后,U2F设备对挑战数据做签名,签名值返回给服务器,服务器验证签名值,如果签名正确,说明此公钥对应的唯一私钥是正确的,表面用户拥有合法U2F设备,如果签名不正确,说明此用户正在伪造身份登录。可见,U2F验证身份是双向的,U2F验证服务器的真伪,服务器验证U2F的真假。

U2F设备"激活"和浏览器提醒

注册时,在产生密钥对前,U2F设备需要先被"激活"。例如,通过用户按U2F设备上的按钮,表示用户允许继续,激活U2F设备,U2F接着做后续操作。等待用户按键时,浏览器需要提醒用户按键确认。

验证时,在做签名前,U2F设备仍然需要先被"激活"。例如,通过用户按U2F设备上的按钮,表示用户允许继续,激活U2F设备,U2F接着做签名操作。等待用户按键时,浏览器需要提醒用户按键确认。

U2F设备可以很廉价

为了保证安全性,私钥的保护很重要。U2F协议允许一个廉价的设备,同时保证此设备不会泄露私钥。Key Handle可以不是U2F设备上一个私钥的索引,相反,Key Handle可以用来存储私钥和服务器相关信息,这些信息可以被加密保存到一个Key Handle中。(例如使用AES加密私钥和服务器信息)。

验证U2F的真伪

服务器需要一种方式,来确定用户使用的设备是服务器所授权和允许使用的。例如,某银行只使用了飞天诚信的U盾,银行服务器就应该有足够的认证信息,来判断用户使用的U盾就是飞天诚信的,而不是别的厂商制造的。这样对厂商版权有利,对银行安全性也有保障。一个厂商生产的一批U2F Key中,它们应该都共享一对公共的根密钥对,使用此跟密钥对来颁发证书,服务器将验证此证书的合法性,当然,验证使用的是对应的公钥。FIDO草案中,目前还未指明如何颁发根密钥对的过程,这个过程还在修订中。

防止U2F设备被克隆

U2F协议中,使用了计数器。在用户注册完设备后,服务器会初始化计数器(从0开始),设备内部,对应的密钥对也有一个计数器。用户每验证一次,设备内计数器加一,此计数会传给服务器,服务器比对服务器上的计数器和设备的计数器,如果服务器的计数器小于等于设备的计数器,属于正常操作,服务器验证成功后,将计数器更新为设备当前的计数器。如果服务器的计数器大于设备的计数器,说明U2F设备已被克隆。例如,用户注册完一次后,并登陆,服务器的计数器更新为1,U2F设备也为1.下次用户再次登陆,服务器和设备都跟新为2. 如果U2F设备被克隆,其它人使用该设备登陆,服务器计数器会随着恶意使用者的登陆,计数器会递增。假设,恶意用户登陆了两次,服务器的技术则为4。当真正的用户登陆时,它的计数器加1,变为3,传给服务器。服务器发现它的计数比服务器上的小,服务器就会给用户发出警告信息,警告用户设备已被克隆。但这种技术有个滞后的弊端,如果用户不再登陆,或者很长时间都没有登陆,用户是无法发现被克隆的。即便是很快发现了,估计也为时已晚,黑客不可能等你发现了再去窃取你的隐私。

防止钓鱼网站

假如,某钓鱼网站在你注册的时候,获取到了你的Key Handle和公钥。当做认证的时候,浏览器获取的网址(application identity)和你注册的时候网址是不一样的。这样,将Key Handle ,app_id信息传入U2F设备中,U2F设备也不会实施签名操作,因为它发现自身存储的Key Handle对应的app_id和传入的app_id不一致。

FIDO测试网站

下面罗列了几个测试网站,可以做测试:

u2fdemo.appspot.com

demo.yubico.com/u2f.php

FIDO相关新闻事件

今年于加利福尼亚州蒙特雷举行的The Cloud Identity Summit上,FIDO联盟标准计划是一大重要主题。该联盟在会议上举办了一场互操作性研讨会,成员们演示了他们的FIDO Ready解决方案如何协同工作。

FIDO联盟是一家非营利性组织,创立于两年之前,旨在重新思考和重新设计身份验证技术。成员们努力实现无密码的用户体验。该组织包括谷歌、微软和三星等重量级成员。

Yubico公司演示了YubiKey NEO U2F身份验证。Yubico公司首席执行官兼创始人Stina Ehrensvard表示,有三家公司演示了基于Universal Authentication Framework框架协议的解决方案,还有六家公司演示了基于Universal Second Factor的设备和服务。

Eyelock公司率先演示了用于眼睛识别的Universal Second Factor协议。Eyelock和StrongAuth联合演示了使用USB接口的身份验证设备myris。Eyelock首席运营官Jeff Carter表示,Myris可将人眼的虹膜特征转换为独特的代码,然后与用户的加密代码进行匹配,决定是否授予访问权限。

StrongAuth公司的首席技术官Arshad Noor表示:"StrongAuth加入FIDO联盟还不到五个月的时间,但我们确信FIDO Universal Second Factor协议具有足够的吸引力,能够得到广泛实施,我们将以尽可能快的速度推出FIDO Ready解决方案。The Cloud Identity Summit的互操作性研讨会证明了FIDO标准的效用,一旦规范获得批准,面向市场的解决方案很可能投入部署。"

AGNITiO和Nok Nok使用AGNITiO面向移动设备的FIDO Ready语音ID,共同演示了如何在移动设备上使用Nok Nok Labs客户端进行注册并登录到FIDO应用程序,以及如何使用AGNITiO语音ID密码短语。用户还能够选择在线购买,在支付界面中说出密码短语来批准购买。

Nok Nok Labs演示了Universal Second Factor和Universal Authentication Framework与Nok Nok Multifactor身份验证服务器的集成。Nok Nok公司高级营销总监Jamie Cowper表示:"我们利用带有Synaptics传感器的三星S5,以及AGNITiO语音生物识别解决方案,实现了与指纹识别的集成。我们还结合ForgeRock OpenAM解决方案演示了FIDO协议,展示FIDO如何能够为联合解决方案提供补充。"

Plug-up International公司演示了双重FIDO Universal Second Factor和Universal Authentication Framework USB身份验证程序令牌与三个服务器合作伙伴的互操作。

FIDO主网站有这些公司的演示视频:
https://fidoalliance.org/adoption/videos/

时间: 2024-11-06 07:06:21

FIDO 标准简介的相关文章

dicom通讯的工作方式及dicom标准简介

转自:http://www.cnblogs.com/assassinx/p/3223460.html 本文主要讲述dicom标准及dicom通讯的工作方式.dicom全称医学数字图像与通讯 其实嘛就两个方面 那就是“存储”跟“通讯”. 文件数据组织方式  网络数据组织方式.文件数据组织方式就是解析静态的dicom文件 在 <dicom格式文件解析器>一文中已经阐述过了 就不再说了.网络数据组织方式 简而言之就是各种协议 命令控制 数据序列化.那么这一章中我们将会讲他,但是进行实际操作将在后面几

HTML5标准简介

最近前端的群都蛮热闹的,但我发现多数讨论的是javascript和css相关的问题,仿佛大家在努力创建各种交互.样式的时候,忘却了这一切的基础 – HTML. 其实我很喜欢HTML,觉得这个语言远比XML来得有趣,其灵活.轻便远非极端规范的XML可以比拟.同时又因为HTML的作用范围极小,规定的标签有限等说不上优点还是缺点的特色,使得HTML有着自己的确定性. 本系列的前面很大一部分会以非常短小的篇幅,介绍HTML5中的一些基本概念,并且: 只关心HTML这个语言,其他的javascript或者

智能卡国际标准简介

1.ISO 7816-1 :1987<识别卡带触点的集成电路卡第1部分:物理特性>,该标准规定了带触点集成电路卡的物理特性,如:触点的电阻.机械强度.热耗.电磁场.静电等,适用于带磁条和凸印的ID-1型卡. 2.ISO 7816-2 :1988<识别卡带触点的集成电路卡第2部分:触点尺寸和位置>,该标准规定了ID-1型IC卡上每个触点的尺寸.位置和任务分配. 3.ISO/IEC 7816-3 :1989<识别卡带触点的集成电路卡第3部分:电信号和传输协议>,该标准规定了

SQL标准简介

按:这是基于我很早以前写的几篇短文重新整理的. SQL是Structured Query Language的缩写,它的前身是著名的关系数据库原型系统System R所采用的SEQUEL语言.作为一种访问关系型数据库的标准语言,SQL自问世以来得到了广泛的应用,不仅是著名的大型商用数据库产品Oracle.DB2.Sybase.SQL Server支持它,很多开源的数据库产品如PostgreSQL.MySQL也支持它,甚至一些小型的产品如Access也支持SQL.近些年蓬勃发展的NoSQL系统最初是

视频编码标准简介

文章转自:http://www.cnblogs.com/CoderTian/p/8261727.html 1.视频编码发展简史 1988 年CCITT 通过了"p×64Kbps(p=1,2,3,4,5,,,,30) "视像编码标准 H.261 建议, 被称为视频压缩编码的一个里程碑.从此, ITU-T. ISO 等公布的基于波形的一系列视频编码标准的编码方法都是基于 H.261 中的混合编码方法. 1986 年,ISO 和 CCITT 成立了联合图像专家组(JPEG,Joint Pho

语言基础(2):C++标准简介

1.C++98标准的主要特征 在C++98发布之时,已经具有类及派生类.共有和私有成员的区分.类的构造函数和析构函数.友元.内联函数.赋值运算符的重载,虚函数的概念.函数和运算符的重载.引用.常量(constant),类的保护成员.多重继承.对象的初始化与赋值的递归机制.抽象类.静态成员函数.const成员函数,模板(template)等C++基本特性,并且引入了尴尬的export关键字 : 2.C++11 原文地址:https://www.cnblogs.com/wnwin/p/1068711

CGI标准简介 ~ Django

CGI CGI(Common Gateway Interface)是WWW技术中最重要的技术之一 , 有着不可替代的重要地位 , CGI是外部应用程序(CGI程序)于Web服务器之间的接口标准 , 实在CGI程序和Web服务器之间传递信息的规程 . CGI规范允许Web服务器执行外部程序 , 并将它们的输出发送给Web浏览器 . CGI 讲Web的一组简单的静态超媒体文档变成一个新的交互式媒体 . Common Gateway Interface , 简称CGI . 在物理上是一段程序 , 运行

NFC简介

NFC简介 NFC是Near Field Communication缩写,即近距离无线通讯技术.由飞利浦和索尼公司共同开发的NFC是一种非接触式识别和互联技术,可以在移动设备.消费类电子产品.PC 和智能控件工具间进行近距离无线通信.NFC 提供了一种简单.触控式的解决方案,可以让消费者简单直观地交换信息.访问内容与服务.目前,NFC 论坛在全球拥有 70 多个成员,包括:万事达卡国际组织.松下电子工业有限公司.微软公司.摩托罗拉公司.NEC 公司.瑞萨科技公司.三星公司.德州仪器制造公司和 V

AES高级加密标准简析

1 AES高级加密标准简介 1.1 概述 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用.经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准.2006年,高级加密标准已然成为对称密钥加密中最流行的算法