OpenSSH コードベースへ
ユーザーの存在を確認するデバイスと対話するために、新しいタイプのキーが OpenSSH に追加されました。[メール保護]」(「ecdsa-sk」)。これは、NIST P-256 楕円曲線と SHA-256 ハッシュを使用した ECDSA (楕円曲線デジタル署名アルゴリズム) デジタル署名アルゴリズムを使用します。 トークンと対話するためのプロシージャは中間ライブラリに配置されます。中間ライブラリは、PKCS#11 サポートのライブラリと同様の方法でロードされ、ライブラリの最上位のラッパーです。
U2F を有効にするには、次のコードベースの新しいスライスを使用できます。
Libfido2 は、OpenBSD、Linux、macOS、Windows をサポートしています。
認証してキーを生成するには、SSH_SK_PROVIDER 環境変数を設定して libsk-libfido2.so へのパス (export 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 ファイル内のサーバーにコピーする必要があります。 サーバー側ではデジタル署名のみが検証され、トークンとの対話はクライアント側で実行されます (サーバーに 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」が追加されました。
出所: オープンネット.ru