SSH使用FIDO2 USB进行身份验证方式

导读在OpenSSH 8.2中,提供了对FIDO2的支持。这样用户就可以硬件USB密钥证书进行用户认证。这样可以实现简单、有效和安全的SSH认证了。本文我们就尝试一下基于FIDO2的SSH认证,前提是需要一个USB key设备。

 

FIDO2

在硬件认证安全领域WebAuthn和FIDO2的发展,他给我们带来了更便捷安全的方法。WebAuthn和FIDO2旨在通过标准化二者之间的通信方式使用安全设备的变得真正容易。

对每一个人来说这都是一个好消息,现在大家可以使用便捷的USB密钥,无需额外的安全知识,即可非常轻松地保护所有身份验证,完全避免网络钓鱼,密码盗窃以及其他恶意攻击的干扰,只需要插入USB密钥,按小按钮/输PIN或者刷指纹,然后重新登录。

虽然之前很多人可能都用过银行的网银,但是由于那是不标准通用的方式,不光要安装各种各样的驱动而且还要必须要特定版本的IE才行。而如果支持了FIDO2则可以被所有OS和任何浏览器所支持,当然包括今天要说的SSH。

截止目前根据有人统计国内也有很多企业加入了FIDO联盟,包括阿里等大企业。

FIDO2分为WebAuthn和CTAP协议,最佳使用场景包括:
1.在设备上通过浏览器使用设备配置的指纹等生物识别能力进行身份认证;
2.在设备上通过浏览器使用外置Security key进行身份认证;
3.在设备上通过另一台设备作为认证器完成身份认证。

结合使用FIDO2和SSH

对广大使用Linux和Mac的技术人员来说,除了浏览器使用最多的要数SSH了。如果可以使用FIDO2密钥通过SSH进行身份验证,那将带来很大方便和安全。为此OpenSSH也放弃一贯对硬件密钥体系的傲慢态度,现在终于支持FIDO(U2F)和FIDO2进行身份验证了,而带有驻留键的FIDO2具有更好的便捷和安全性。流程是USB设备(FIDO2设备不一定是USB,但通常是USB设备)生成一个秘密密钥。密钥要么存储在设备上(称为驻留密钥),要么需要设备支持存储,要么不支持,需要将数据存储在其他位置。

使用USB key设备的好处包括消除网络钓鱼,密码盗窃,身份验证重放以及许多其他攻击。由于设备通过特定领域(服务器地址/URL/等)进行身份验证,因此攻击者无法在另一个站点上重复使用一个站点的身份验证,这使得网络钓鱼无法进行。密码或私钥在设备上并无法复制提取,任何人都不能窃取密码或私钥。唯一可能的攻击是你的USB Key丢了,但是由于设备有PIN密码,并且有错误次数限制,尝试几次错误有,该设备将会锁定实效。

可能有用过Yubikey的同学,使用SSH内置功能好处是不需要特别使用Yubikey,也不需要弄乱Yubikey代理,PIV模式或其他任何其他软件。只需插入任何兼容FIDO2的密钥,即可将其与SSH一起使用。有"驻留键"模式仅在Yubikey 5C和更高版本的FIDO2上有效。

使用方法

在了解了有关设备如何工作的所有不必要的细节之后,准备好将其中一个用于SSH。设置非常简单,基本上只需一两个命令(取决于方法),在客户端和服务器上都运行OpenSSH 8.2,无需安装其他软件。下面我们分常驻密钥模式和非常驻模式的两种方法。

常驻密钥模式

在支持FIDO 2设备的下,使用以下命令生成密钥并将其存储在设备上,支持的密钥类型有"ed25519-sk"和"ecdsa-sk"两种证书类型。

ssh-keygen -t ed25519-sk -O resident -f ~/.ssh/id_ ed25519-sk  
ssh-keygen -t ed25519-sk -O resident -f ~/.ssh/id_ ecdsa-sk 

SSH会要求输入PIN码并触摸的设备,然后将密钥对保存在设置目录。

SSH使用FIDO2 USB进行身份验证方式SSH使用FIDO2 USB进行身份验证方式

ssh-keygen将生成两个文件,一个称为id_ecdsa _sk,私钥,一个称为id_ecdsa _sk.pub公钥。只需要将该公钥添加到服务器上的authorized_keys即可中。

要将私钥添加到SSH代理,需要将其复制到~/.ssh/目录中,或者(如果在新计算机上并且没有密钥),请运行:

ssh-add -K 

插入设备。就会将密钥添加到SSH代理,然后就将能够连接到服务器。

非常驻密钥模式

非驻留密钥模式与前面模式基本相同,区别之处在于无法ssh-add -K直接从设备加载密钥。和以前一样,运行:

ssh-keygen -t ed25519-sk -f ~/.ssh/id_ ed25519-sk 
ssh-keygen -t ed25519-sk -f ~/.ssh/id_ ecdsa-sk 

SSH会要求输入PIN并触摸设备,然后将密钥对保存在设置的目录。需要手动将密钥对存储在~/.ssh/目录中,并将公钥文件添加到要登录的任何服务器上的authorized_keys。既可以

当尝试登录时,OpenSSH会要求提供PIN并触摸设备。

可以在生成密钥时候设置no-touch-required选项来设置不需要每次都触摸设备,但是启用它并没有取得很好的效果,但是这样不是很安全。

将密钥存储在设备上意味着没有人可以窃取它(设备设置了PIN或其他身份验证方法),但是在连接后,不受信任的计算机仍可以通过SSH会话发送命令。不要从不信任的计算机上用SSH服务器,尤其是在使用SSH转发(此-A选项)时要格外小心,因为服务器随后可能会当做跳板或者代理而访问其他服务器进行身份验证。

非FIDO2设备和非openSSH 8.2客户端

对于不支持FIDO2的其他设备(买不起Yubikey,比如几十块的国产飞天Usbkey),在使用其他ssh客户端,而且ssh版本不是8.2的其实也有一种方法,只是需要下载一个第三方的代理软件WinCryptSSHAgent(github:/ /buptczq/WinCryptSSHAgent)。

WinCryptSSHAgent基于 Windows证书管理系统, 不需要安装任何驱动就能够访问智能卡上的证书.这个项目实现了 Windows 上各种各样 SSH 客户端的私有 Agent 协议, 在发生SSH 认证时, 客户端将信息发给这个 Agent, 这个 Agent 会通过 Windows 提供的 API 对信息进行签名, 完成认证。目前兼容的 SSH 客户端有: Git for Windows、Windows Subsystem for Linux、Windows OpenSSH、Putty、Jetbrains、SecureCRT、Xshell、Cygwin、MINGW等。

启动该代理软件,然后就可以实现用USBKey登陆了。

当然使用该代理软件有个缺点,启动代理认证,完成一次认证后,支持该证书登陆服务器都可以直接登陆,这可会存在一定安全问题。可以通过定期关闭代理以保证安全。

SSH使用FIDO2 USB进行身份验证方式SSH使用FIDO2 USB进行身份验证方式

总结

总的来说,OpenSSH对FIDO的支持给我们带来了一种更便捷而且安全的身份认证方式。当然由于这是一个开始,可能还会存在着一些问题和bug,希望各种SSH客户端软件也能及时跟进,内置支持该协议,让大家安全水平都提高一个档次。Linux就该这么学

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FIDO2协议中的通信协议格式主要包含两部分:CTAP (Client-to-Authenticator Protocol) 和 WebAuthn (Web Authentication)。 1. CTAP (Client-to-Authenticator Protocol) 协议格式 CTAP是一种用于在Web浏览器和安全密钥之间进行通信的协议,它定义了一系列的指令和响应格式。其中常用的指令有: - CTAP1_GET_VERSION:获取设备支持的CTAP版本号 - CTAP1_GET_RANDOM:获取设备生成的随机数 - CTAP1_REGISTER:用于在设备上注册新密钥 - CTAP1_AUTHENTICATE:用于在设备上进行身份验证 CTAP协议通信格式包含以下几个部分: - 指令代码:用于标识要执行的指令,例如CTAP1_REGISTER或CTAP1_AUTHENTICATE。 - 参数:用于传递指令所需的参数,例如注册新密钥时需要传递的公钥。 - 响应:设备返回的响应数据,例如注册新密钥成功后返回的证书和签名数据。 2. WebAuthn (Web Authentication) 协议格式 WebAuthn是一种在Web浏览器中使用身份验证标准,它通过使用公共密钥加密技术,将密码替换为更安全的生物识别技术,例如指纹或面部识别等。 WebAuthn协议通信格式包含以下几个部分: - 认证器信息:包含了设备的元数据和验证策略,例如设备的厂商标识和支持的加密算法。 - 公钥:用于加密和签名数据,以及验证设备的真实性。 - 挑战:用于验证设备的真实性和防止重放攻击。 - 认证器响应:设备返回的响应数据,例如验证身份成功后返回的签名数据。 总之,FIDO2协议的通信协议格式主要包含了CTAP和WebAuthn两部分,它们共同构成了一种更加安全、便捷和私密的身份验证方式

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值