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设备:

  1. 闪灯,发呆,等用户按按钮
  2. 用硬件生成器生成随机数,生成一对公钥p/私钥q
  3. 用出厂密码加密私钥q和网站信息。然后把这堆乱码当成是 U2F信息名 称。
  4. 用私钥q签署本次注册认证(包括U2F信息名称,网站uuu@www等信息)
  5. 告诉网站:你好,注册成功。注册信息如下:
  • 签署信息:
    • 给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设备的内置出厂密码,所以没办法只用这个随机数算出私钥。

我来评几句
登录后评论

已发表评论数()