Zhongke's Personal Wiki

Zhongke's shared personal notes

View on GitHub

Yubico公司生产的一种安全密钥,可用于多种身份认证、二次认证、公钥加密场景。

功能接口

YubiKey总共有三种功能接口:OTP、FIDO和CCID。一个YubiKey 5系(比如YubiKey 5 NFC等)同时支持三种接口,而Yubico Security Key只支持FIDO接口。

功能接口不同于物理接口。不同型号的YubiKey可能会有不同的物理接口,比如USB-A、USB-C、NFC、Lightning等。

通过YubiKey Manager -> Interfaces 可以设置各个接口和功能的开启状态(OTP接口下的四种功能只能一起关闭或者打开)。

1. FIDO

系统将YubiKey的FIDO接口识别为一个HID设备。YubiKey通过该接口来支持FIDO联盟的U2F协议以及更新版的FIDO2协议,提供网站登录的二次验证(2FA)以及无密码登录功能。该二次验证方式比传统的TOTP更加安全(防止MITM)、更加方便(只需轻触无需输入)。

支持该功能的网站包括Google、Twitter、Facebook、Github等等(完整列表详见 1 以及 2 )。该功能也需要设备和浏览器的支持,最新版本的各种浏览器以及Android(无谷歌框架的安卓系统无法支持)、iOS系统(13+)均支持该功能。

许多其他厂商的硬件密钥也支持FIDO U2F或者FIDO2协议,比如SoloKeysNitrokey等。

1.1. FIDO2

FIDO2需要浏览器支持Webauthn协议(现代浏览器都支持)。

这是YubiKey使用最方便的一种模式。

  1. 第一次使用可以在 YubiKey Manager -> Applications -> FIDO2 中设置FIDO2 PIN。
  2. 在支持该功能的网站中找到二次验证或者无密码登录设置,选择添加YubiKey
  3. 登录时在看到浏览器提示后轻触YubiKey,然后输入FIDO2 PIN。

FIDO2的应用场景

1.2. U2F

U2F是FIDO2的前身,基本上已经被FIDO2取代。使用方法和FIDO2几乎一样,主要用于二次验证,但不支持PIN保护和无密码登录。

不同于FIDO2的Webauthn标准协议,U2F需要浏览器有针对U2F的特殊支持。兼容U2F的硬件密钥都可以兼容FIDO2,但反之不然。

2. CCID

系统会将YubiKey的CCID接口识别为一个智能卡读卡器,不同的YubiKey功能会被识别为读卡器上不同的智能卡。YubiKey通过该接口支持PIV、OpenPGP以及OATH三种功能。

2.1. OATH

OATH是一种生成二次验证码的标准,包括TOTP和HOTP两种验证码。通过这个接口使用OATH功能可以存储32组密钥,与此相对的,通过OTP接口使用OATH-HOTP只能存储一组密钥。

以上两种验证码,都可以通过Yubico Authenticator应用来输入密钥及生成二次验证码,具体方法参考 https://github.com/iamtwz/yubikey-handbook-chinese/blob/master/oath/yubico-authenticator.md

支持TOTP的服务非常多,就不在此举例。支持HOTP的服务可在此找到列表: https://www.yubico.com/ca/works-with-yubikey/catalog/?protocol=2&sort=popular

2.2. PIV

PIV模块可用于存储非对称加密密钥,并可进行登录、验证、加密解密等操作。

PIV模块共有四个可以直接存储的槽可以储存四个证书。此外还有20个槽用于存储历史证书,以方便解密过去的密文。

第一次使用PIV功能,需要设置PIN。

基于PIV的应用场景很多,可以实现SSH登录、操作系统登录、全盘加密等,以下就常见应用举例。

2.3. OpenPGP

YubiKey的这个接口兼容OpenPGP标准,配合GnuPG等软件可以进行邮件签名加密解密等操作。

在切换多个Yubikey时,使用如下命令

gpg-connect-agent "scd serialno" "learn --force" /bye

OpenPGP的应用场景很多,以下仅就常见的应用举例。

3. OTP

这是从最初版本的YubiKey继承下来的传统接口,系统会将该接口识别为一个键盘设备。该接口的名字因为最初只支持Yubico OTP而命名,如今它具有误导性,因为它支持静态密码、Yubico OTP、Challenge-Response以及传统的OATH-HOTP(新的OATH通过CCID接口实现)四种功能。

OTP接口有两个槽,分别对应轻触和长按YubiKey。每个槽都可以配制成四个功能中的任意一个。

注意:如非必要,尽量使用前面两种模式而不是这种模式。

3.1. 静态密码

通过YubiKey Manager可以设置静态密码。使用时轻触或者长按YubiKey即可在当前光标处输入提前设置的密码。

3.2. Yubico OTP

这种模式下,YubiKey通过对称加密算法生成一次性的token发送给服务器进行验证。服务器拥有和YubiKey一样的对称加密密钥,通过解密token来验证用户身份。

YubiKey在出厂时已经内置了一组密钥。如果使用Yubico提供的YubiCloud服务器进行验证,则无需任何配置。

注意:出厂密钥具有一个特殊的前缀CC,如果清除后则无法再生成。某些服务强制需要使用CC前缀的密钥。

支持该模式的服务有: https://www.yubico.com/ca/works-with-yubikey/catalog/?protocol=3&sort=popular-for-individuals

3.3. Challenge-Response

这个模式下YubiKey可以根据事先存储的密钥对输入值进行变换,输出一个哈希值。YubiKey支持HMAC-SHA1和Yubico OTP两种算法。

使用方法

主要使用场景有

3.4. OATH-HOTP

这个功能和基于CCID接口的OATH-HOTP所提供的功能相同。区别是这个功能只支持一组密钥,CCID接口支持32组密钥;这个功能激活更方便,只需要轻触或者长按即可,无需软件支持,而CCID接口需要Yubico Authenticator应用支持。

使用方式

支持HOTP的服务列表: https://www.yubico.com/ca/works-with-yubikey/catalog/?protocol=2&sort=popular

应用下载

固件版本

Yubico 声称为了安全起见,YubiKey的固件是无法升级的。所以购买YubiKey时除了留意硬件规格,还要留意固件版本。

参考资料