前往 OpenSSH 程式碼庫
為了與確認用戶存在的設備進行交互,OpenSSH 中添加了一種新型密鑰”[電子郵件保護]」(「ecdsa-sk」),它使用帶有 NIST P-256 橢圓曲線和 SHA-256 哈希的 ECDSA(橢圓曲線數位簽名演算法)數位簽章演算法。與令牌互動的過程放置在中間庫中,該中間庫的載入方式與支援 PKCS#11 的庫類似,並且是庫頂部的包裝器
若要啟用 U2F,您可以使用來自的新程式碼庫片段
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