Feitian ePass FIDO U2F 双因素登录 USBKEY
Gmail 邮箱 和 Dropbox 网盘 已经支持Fido U2F协议
FIDO U2F Device
Identifies as a USB HID, no client software or drivers needed
Works on all platforms (Windows, OS X, Linux) without driver
One year warranty
Feitian's ePass FIDO is an U2F (Universal Second Factor) standard device. To use the U2F devices, user simply inserts the device, input their password and then touch the button on U2F device. Then the device will generate secured credentials to authorize by the server. It is available for multiple U2F-enabled services with one device while protecting user's privacy. It is recognized as a HID and using USB-HID interface. So it will be used driver free on all platforms (Windows, OS X, Linux).Feitian is a sponsor level member of the FIDO alliance participating in the specification development of FIDO U2F.
最近从google账号设置里面发现,Google 账号支持了一种以前没见过的安全密钥设备,FIDO U2F设备。(以下提到U2F设备、U2F密钥设备、U2F安全密钥、U2F用户认证设备、“这玩意”全都是指……这玩意。)
它类似于动态密码、手机短信验证。这玩意并不能直接登录账号,而是用于账号密码登录之后的二次验证。
FIDO是指Fast IDentity Online联盟。主要搞些方便用户登录、提高账号安全的协议。
U2F(Universal Two Factor)是一种Google和Yubikey联合开发的账号二次验证协议。
就是一个长得像U盘,但可以做得更薄的USB设备。上面带个按钮。(其实U2F也有NFC和蓝牙标准,上图中第三个就是USB+NFC两用。)
全平台(Windows、Linux、Mac、ChromeOS)不需要另外安装驱动程序。NFC版在Android手机上也有app可以用。浏览器方面,现在只有Chrome支持。
据传说,Windows 10和Edge也将支持U2F设备。Firefox也说要支持。
微软和Mozilla的研发速度似乎是慢了点。也许他们是想等一年看看这玩意究竟安不安全,让Chrome自己在前面踩雷?
其标准开放,软件实例也都在网上公开(github: google/u2f-ref-code),所以在amazon上搜U2F设备会看到各种大小厂商做出来的产品。
绑定这个设备到一个账号很简单:
1、用Chrome登录到支持U2F的网站(google、dropbox、github之类)并选择注册新密钥设备。
2、插入。
3、按一下设备上的按钮。
登录的时候,如果开启了二次验证,那就是
1、插入(或一直留在电脑上)。
2、登录。
3、按设备上的按钮。
U2F协议实际用到的软硬件都没有任何新货。网站验证设备身份用的是 非对称(公钥/私钥)加密。每一个网站上绑定的每一个帐号,都有单独的一对公钥/私钥。每次验证都有计数,保证信息不重复。不像传统动态密码那样只能一机对应一个网站/服务。偷走一家网站的服务器也对其他网站上的验证账号没什么卵用。
然而一个比较有趣的地方是,这种设备不带无穷大的安全存储空间,却能绑定无限数量的账号。每次绑定还会生成新的公钥/私钥。它怎么做到的?!
它用了传统的对称加密,把私钥传给网站服务端了!
每一只廉价U2F设备,都在生产线上被设定了随机的出厂密码。
绑定新账号的流程大概脑补出来是这样的:
网站:你好我是www,你要绑定的账号是uuu@www,请确认。
U2F设备:
闪灯,发呆,等用户按按钮
用硬件生成器生成随机数,生成一对公钥p/私钥q
用出厂密码加密私钥q和网站信息。然后把这堆乱码当成是U2F信息名称。
用私钥q签署本次注册认证(包括U2F信息名称,网站uuu@www等信息)
告诉网站:你好,注册成功。注册信息如下:
签署信息:
给uuu@www
U2F信息名称:加密的私钥q
公钥:p
于是,网站把这些信息保存起来。以后用来验证用户登录。
原本,如果是“高价U2F设备”,U2F信息名称应该是一个简单的数字id或文件路径,对应U2F设备安全存储区里的某个私钥。
廉价设备,却用这个原本应该存储索引的地方存储了对称加密后的私钥。
然而网站拿了这个信息也没什么用。它是经过对称加密的。网站并不知道密码。
但知道用了哪种加密算法的话,大概也是可以暴力破解的。此处作为一个薄弱环节,需要实际的U2F设备厂商在设计上使用够安全的算法与足够的出厂密码强/长度。U2F标准里并未硬性规定使用哪种算法。
用户登录验证的时候,是这样的:
网站:
请验证用户。U2F信息名称:加密的私钥q。用公钥p加密的 :“我是www。请验证用户uuu@www”
U2F设备:
闪灯,发呆,等用户按按钮
用出厂密码,从U2F信息名称中,解密出私钥q。
用私钥q解密【被网站用公钥p加密的内容】
验证内容正确
用私钥签署确认信息
发给网站
网站:
用公钥p验证U2F设备回复信息的签名。如果通过,就允许用户登录。
===============
所以说,“廉价U2F设备”支持绑定无限数量的网站、无限数量的账号。
而“高价U2F设备”,反而只能在有限的安全存储空间内保存少量账号的私钥信息。
目前市面上似乎只有廉价U2F设备。上面截图中最贵的那个,也只是添加了其他功能(例如也可以作为CCID智能卡,内部生成并安全存储最多两个PGP私钥)才那么贵。U2F方面和$8的没区别。
===
看了一下,Yubikey目前的做法是,注册时生成随机数,拿这个随机数与网站注册信息一起,用出厂密码SHA一下,生成出来的值当私钥。存给网站的U2F信息名里面,就存这个随机数,加上一些验证信息。网站因为没有这个U2F设备的内置出厂密码,所以没办法只用这个随机数算出私钥。