随着iOS/iPadOS16.3的推出,我们现在也可以使用安全密钥对自己的AppleID用上额外的安全保护了。不过对于大多数的人来说,可能对于安全密钥的了解程度最多停留在银行发的U盾上。
而我在去年撰写了通行密钥的上手体验以后,就展开了对FIDO和对应的WebAuthn这两个开源认证服务背后其他技术细节的研究,所以借此机会我也想和大家介绍一下什么是安全密钥以及它和我们之前所介绍的通行密钥、银行U盾有什么不同。
【资料图】
▍什么是安全密钥
知名的安全密钥品牌YubiKey旗下的产品
大多数安全密钥从外形来看,长得就像日常的使用U盘,所有的认证信息会直接保存在安全密钥上。
和U盘不一样的是,安全密钥只能写入认证信息,任何人或程序都不能从安全密钥中读取数据。基于只写不读这样的特性,安全密钥常常会被用于加密、替代密码或是进行多因素认证。
一个安全密钥可以同时承载不同的加密协议,比如:通行密钥采用的协议FIDO、常用于加密邮件和文件的PGP协议、一次性加密OTP协议、通用两步认证U2F协议以及PIV智能卡等等。
YubiKey产品所支持的加密类型
除了这些比较通用的加密协议,我们日常生活中见到的安全密钥大部分都是和私有加密协议,比如软件的加密狗、银行给的U盾、财务税控盘、动态口令卡或是动态密码器等。当然,受限于文章篇幅,我也不打算对这类产品详细展开,大家只要类似的产品其实也是安全密钥就好。
▍我们为什么还需要安全密钥
验证码,或者更严谨地说是两步认证可以在别人即使知道密码的情况下依然阻止他们访问你的账户。
大家可能觉得既然有了短信验证码,或是应用内二维码,或是有了基于时间的一次性密码,似乎就没必要用安全密钥了。但这个想法实际上并不对,不然银行也没必要给每一个打开网银的用户配上一个U盾了。
短信SMS作为目前广泛用于双重认证,甚至在不少服务中是登录时的唯一凭证。但作为1986年就定义的协议,时至今日SMS早就已经落伍了,关于SMS通信通道不安全的研究已经有很多了,利用GSM劫持和短信嗅探进行电信诈骗的案例也比比皆是。所以它虽然方便,但从安全的角度来看短信确实不适合作为首要(甚至是唯一的)双重认证的手段。
不少网站和服务都会采用基于时间的一次性密码TOTP,TOTP确实要比短信来得安全得多。首先,与传统的静态密码相比,TOTP动态生成的一次性密码更加安全,因为它只在特定的时间段内有效,并且生成过程基于共享的密钥和相同的时间,而共享的密钥只会在初次设置时进行交换。
TOTP实现原理
其次,实现TOTP技术因为不需要专门的硬件,所以实现成本很低,用户使用时只需要安装一个支持TOTP的软件即可,无论是智能手机、可穿戴设备或是电脑上都有对应的软件可以选择。最后,TOTP对于网站和服务来说也非常便于接入到身份验证系统中,因此TOTP支持得非常广泛。[page]
用安全密钥存储和生成一次性密码的方法也被称为U2F(通用第二因素),基于安全密钥「软件只能写入密钥但不能读取密钥」的特性,U2F也能有效地抵御MItM攻击。
和通行密钥其实有点像
当我们使用安全密钥进行认证的时候,网页会首先发送一个「挑战(challenge)」给安全密钥,安全密钥会根据内部存储的私钥(可以理解成信箱的钥匙),解开这个「挑战(challenge)」并把对应的结果返回给服务器。无论是谁都看不到放在安全密钥的私钥,而服务器上只有正确的公钥加密的信息才可以被私钥解锁,因为投递人只有知道那个信箱是你才能把信寄给你。
除了更安全,安全密钥自然也有着使用方便的特点,在电脑平台上直接插入到USB接口中就可以让其他程序调用,身份验证时也只需要额外进行一次触摸即可。至于在移动上,除了插入接口进行认证,也可以在支持NFC的设备上扫描NFC进行验证。整个流程非常简单,就和使用银行U盾一样。
触摸一下就好
前面我们也提到过,安全密钥还支持存储多种不同的加密类型,如果网站或者服务不支持U2F的话,不少安全密钥,比如Yubikey旗下的产品也支持存储支持更为广泛的TOTP,填写时也只需要简单触摸一下安全密钥就可以自动填充。另外一些加密类型也可以在特定的场景下发挥作用,比如PIV智能卡可以用于替代门禁卡,OpenPGP则是加密文件、邮件的常用方式。
直接挂在钥匙串上,图源yubico.com
安全密钥小巧的体型也能算是它的一个优点,携带会非常方便;不过这其实也是一个缺点,小巧的体型也意味着容易遗失。如果设备丢失,不仅需要需要重新配置身份验证过程,还有可能被身份认证挡在门外。所以如果要使用安全密钥除了FIDO2以外的加密类型的话,我的建议是多准备一个安全密钥进行备份;而FIDO2作为实现通信密钥的基石,可以使用身边的手机和其他支持的软件额外进行设置。
借助FIDO2让手边的设备成为另一个安全密钥
安全密钥虽然有着众多的加密类型,但也不是万能的,如果网站只愿意使用SMS或者私有认证方式进行两步认证的方式的话,安全密钥自然也帮不上忙;安全密钥的使用成本也不低,毕竟一次就要买2个,如果丢失的话也需要再次入手,对于大部分人来说确实不那么值得。
不过,目前来看安全密钥也算是解决了我此前使用软件TOTP时的种种不满,顺便还让一部分账户变得更为安全了。
▍如何使用安全密钥
如果你手边已经有安全密钥了(最好有多个),那么接下来就来说说使用方面了。安全密钥目前支持Windows、macOS、iOS、Android以及主要Linux发行版在内的众多系统,也支持在Chrome、Edge、Firefox以及Safari等主流浏览器中在线使用。[page]
不过考虑到不同的密钥支持不同种类的加密类型,所以我也就根据我自己常用的几个场景向大家介绍如何使用安全密钥。
安全密钥本身就支持通信密钥采用的FIDO2协议,所以支持使用通信密钥进行登录或者两步认证的网站也都是可以录入安全密钥的。
除了FIDO2,U2F则是另一个使用更为广泛的加密类型,不过正如前面所说的那样只能用于两步认证,如果你之前在添加通信密钥的时候见到了下面这样的画面,那就意味着这个服务和网站采用的是U2F加密类型。比如1Password目前就只能接受传统的安全密钥,又比如Apple在16.3中推出的AppleID安全密钥机制也是如此。大家可以参阅Yubikey官网的相关信息以进一步确认兼容性。
不过目前1Password已经确认会在未来支持通信密钥登录
不少安全密钥也支持存储TOTP的相关数据,虽然安全密钥本身并没有电池,内部也没有时钟,但安全密钥可以通过本身存储TOTP,并借助手机、电脑供电和提供的时间传出不同服务的验证码。这种方式相比于直接存储在软件本地更为安全,且在不通过网络的前提下依然也能在多个设备之间同步;但这种方法也存在着一些弊端,比如:安全密钥可以保存的TOTP数量比较少等。
比如Yubikey就需要借助YubicoAuthenticator完成TOTP的读取
除了用于网页服务的认证,安全密钥被广泛应用于其他的身份认证场景中,在我日常使用中最常见的场景还是SSH身份验证。SSH身份认证有多种加密类型可以使用,目前来看最简单的方法还是U2F加密。具体实行的步骤也很简单,在安装了OpenSSH的电脑上执行如下步骤:
#生成密钥对,加密方法采用的是更为现代的ed25519-sk算法,保存在当前目录下,并设置注释
ssh-keygen-ted25519-sk-f./sshkey-Csshkey
#将对应的公钥传输到服务器上
ssh-copy-id-i./sshkey.pubroot@10.0.20.1
#登陆到服务器时,需要连接安全密钥,并调用对应的私钥
ssh-i./sshkeyroot@10.0.20.1
同理,也可以为Github等在线Git工具设置SSH密钥,并在使用时通过安全密钥验证。
▍我为什么选择了Yubikey
市面上的硬件密钥有很多不同的品牌,但是在我收集了一些使用感受以后,我最后还是购买了YubiKey。在我看来YubiKey有着以下的优点:
•支持的协议广泛:我能想到的加密协议,YubiKey基本都支持
•兼容性好:只要服务提供的是受支持的加密协议,YubiKey基本都能绑定成功
•耐用性好:Yubikey官方宣传的是能承受一定程度的挤压和磨损,且具备一定的防水能力
•简单易用:即使不经过官方初始化,也可以直接使用;初始化流程简单。
Copyright 2015-2022 上市公司网版权所有 备案号:京ICP备12018864号-25 联系邮箱:29 13 23 6 @qq.com