欢迎各位兄弟 发布技术文章
这里的技术是共享的
Yubikey是个一个拇指大小的usb key,插入电脑后碰一下商标部分就会生成一个随机字符串。这个随机数是怎样用来验证身份的呢?
其实这个字符串并不随机。如果多按几次,可以看出来规律:
<myUserId><encrypted string1>
<myUserId><encrypted string2>
也就是说字符串第一部分其实就是用户id,不会变。第二部分其实是AES对称加密的一个整数。加密用的密钥Yubikey知道,认证服务器也知道,但其他人都不知道。第一次按下Yubikey的时候,它就会用密钥将数字0加密,生成字符串,第二次就对数字1加密,如此继续。认证服务器拿到字符串之后用密钥解开,看一看以前见过这么大的数字没有。如果以前解密的数字都比这个数字小,说明是个用户刚刚生成的合法字符串,验证通过。
Yubikey的输入整数是有上限的,大概是short int的最大值32767。如果一个人每天用十次,大概可以用32767/10/365=9年,所以日常验证是够了。
来自 https://www.zhihu.com/question/20729012
很难跟人描述YubiKey是个什么东西,维基百科的描述是“一个支持OTP、公钥加密签名、U2F协议的硬件认证设备”。它是一个长得像U盘的设备,主要功能为能够插入USB口后作为一个键盘设备,触摸按钮后输入一次性密码(OTP)来进行身份验证,另外它还能用作OpenPGP Smart Card设备等。
作为一件加(zhuang)密(bi)神器,了解这个东西后果断剁手购买…走的海淘丰运转运(据说它作为美国政府管制的高强度加密设备,直邮至中国会需要提供公司证明等)历经15天终于到手,购买的是十月份新出的YubiKey 4型号,Github优惠加运费花费每个约¥250(一共买了俩)。
可能由于功能和型号太多,官网上的文档虽然很全很详细却缺乏系统性,在到手之前我一直没搞懂几个功能之间的关系。以我手中的YubiKey 4为例,它主要有以下几类功能:(不同型号的功能比较可以看这张表):
这是它主要介绍的功能,能够模拟键盘设备向电脑输入一串生成的密码,兼容性最好。其中还包含多种模式:OTP、Static、Challenge-Response、HTOP,
OTP: KEY_ID+AES(AES_KEY, SECRET, COUNT++)
即生成的密码包含明文的KEY_ID和对称加密的SECRET和计数器。第一次使用前需要把KEY_ID,AES_KEY,SECRET提交至验证服务器(Yubico提供或者自己搭建),之后应用程序每次通过服务器验证密码的可靠性(解码后SECRET对应、COUNT增大(防止重放攻击))。
Static: 静态密码。顾名思义,每次生成固定的一串密码(并没有什么用)。
Challenge-Response: HMAC(SECRET, INPUT)
即可以通过HID接口给定一个输入,输入HMAC的计算结果。输入需要本地代码实现。
HOTP: HMAC(SECRET, COUNTER++)
算法与Challenge-Response类似,然而使用累加计数器代替了输入,并且HTOP是一个标准协议,许多网站和设备都兼容该标准。
在YubiKey中包含两个configuration slot,每一个slot可以单独配置以上模式中的其中一种,通过短触和长触来选择输入。
我个人认为,虽然这几种模式应用于网站两步验证等场景下非常方便,兼容性好,然而由于使用对称加密算法,其理论上还是非常不科学的,只要服务器端(验证服务器)的密文被泄漏,所有的信息都可以进行伪造。
U2F是一个开源的认证标准协议,使用非对称加密算法,在每次需要认证是设备可以对challenge信息使用私钥进行签名来完成认证。作为一个开源的标准协议,Google、Dropbox等网站都支持这种协议的两步验证,然而现阶段浏览器端仅有Chrome支持。
YubiKey还可以作为标准的OpenPGP Smart Card使用,用来存储PGP私钥(设备中私钥是可写不可读的,解密/签名操作在设备上完成)。关于PGP Smart Card的更多信息,可以参考这篇文章。
以上提到的三个功能是可以同时使用的,相互之间并不冲突。
鉴于YubiKey实现的功能的多样性,它能应用/折腾的场景还是非常丰富的,举例来说:
就我个人来说,暂时的主要用途为PGP和某些网站的两步验证,更多用法有待发现…(世界上最悲伤的事情就是买了加密/认证设备后,发现自己根本没有什么信息值得加密/认证的……)
欢迎使用我的PGP Key给我发加密信息…
来自 https://blog.blahgeek.com/yubikey-intro/