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

添加評論