OpenSSH 添加了对通用双因素身份验证的支持

前往 OpenSSH 代码库 添加 使用支持该协议的设备对双因素身份验证的实验性支持 U2F,由联盟开发 FIDO。 U2F 允许创建低成本硬件令牌来验证用户的实际存在,并通过 USB、蓝牙或 NFC 与他们交互。 此类设备作为网站上的双因素身份验证手段进行推广,已得到主流浏览器的支持,并由多家制造商生产,包括 Yubico、Feitian、Thetis 和 Kensington。

为了与确认用户存在的设备进行交互,OpenSSH 中添加了一种新型密钥”[电子邮件保护]”(“ecdsa-sk”),它使用带有 NIST P-256 椭圆曲线和 SHA-256 哈希的 ECDSA(椭圆曲线数字签名算法)数字签名算法。 与令牌交互的过程放置在中间库中,该中间库的加载方式与支持 PKCS#11 的库类似,并且是库顶部的包装器 自由度2,它提供了通过 USB 与令牌通信的工具(支持 FIDO U2F/CTAP 1 和 FIDO 2.0/CTAP 2 协议)。 OpenSSH开发者准备的中间库libsk-libfido2 包括 进入核心 libfido2,以及 HID驱动程序 对于 OpenBSD。

要启用 U2F,您可以使用来自的新代码库片段 存储库 OpenSSH 和库的 HEAD 分支 自由度2,其中已经包含 OpenSSH 所需的层。
Libfido2 支持 OpenBSD、Linux、macOS 和 Windows。

要验证并生成密钥,您需要设置 SSH_SK_PROVIDER 环境变量,在其中指示 libsk-libfido2.so 的路径(导出 SSH_SK_PROVIDER=/path/to/libsk-libfido2.so),或者通过 SecurityKeyProvider 定义库设置,然后运行“ssh-keygen -t ecdsa-sk”,或者,如果密钥已创建并配置,则使用“ssh”连接到服务器。 当您运行 ssh-keygen 时,生成的密钥对将保存在“~/.ssh/id_ecdsa_sk”中,并且可以像其他密钥一样使用。

应将公钥 (id_ecdsa_sk.pub) 复制到服务器的authorized_keys 文件中。 服务器端只验证数字签名,客户端与token交互(服务器端不需要安装libsk-libfido2,但服务器端必须支持“ecdsa-sk”密钥类型) 。 生成的私钥(id_ecdsa_sk)本质上是一个密钥句柄,只有与存储在U2F令牌侧的秘密序列结合才能形成真正的密钥。

如果 id_ecdsa_sk 密钥落入攻击者手中,为了通过身份验证,他还需要获得对硬件令牌的访问权限,否则存储在 id_ecdsa_sk 文件中的私钥将毫无用处。 另外,默认情况下,当使用密钥执行任何操作时(无论是在生成期间还是在认证期间),都需要本地确认用户的物理存在,例如,建议触摸令牌上的传感器,这使得很难使用连接的令牌对系统进行远程攻击。 作为另一道防线,还可以在 ssh-keygen 的启动阶段指定密码来访问密钥文件。

U2F 密钥可以通过“ssh-add ~/.ssh/id_ecdsa_sk”添加到 ssh-agent,但 ssh-agent 必须构建为支持“ecdsa-sk”密钥,libsk-libfido2 层必须存在并且代理必须在令牌所连接的系统上运行。
由于存在附加字段,OpenSSH ecdsa 密钥的格式与 ECDSA 数字签名的 U2F 格式不同,因此添加了新的密钥类型“ecdsa-sk”。

来源: opennet.ru

添加评论