■debian bullseyeのsshで、Ed25519を使った公開鍵認証を設定する 今回はパスワード認証がコマンド実行確認の役割を果たしている一面もあるため、 一部クライアント認証をパスワード認証のまま残すので、 リモート側のsshd_configは変更しない ■対象となるクライアントもリモートも同じバージョン $ lsb_release -d Description: Debian GNU/Linux 11 (bullseye) ■過去のssh証明書ログイン 特定のホストからESXi(vSphere HyperVisor)にパスワードなしでログイン出来るようにする。 https://labunix.hateblo.jp/entry/20180107/1515264031 ■rsa以外の選択肢 SSHではDSA鍵は1024ビットの物のみが正しい鍵なので、「dsa」オプションはレガシシステム用と考えて良い 2021年11月16日にはGitHubのDSAホストキーはサポートされなくなっている https://github.blog/security/application-security/improving-git-protocol-security-github/ $ ssh-keygen --help 2>&1 | grep "\[-t" [-t dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa] ■ハードウェアセキュリティキーの「ecdsa-sk | ed25519-sk」は今回使用しない 「-sk」はSecurity Key、「FIDO」はFast Identity Online、「PIN」はPersonal Identification Number 優先順としてはed25519-sk > ecdsa-sk $ man ssh-keygen | lsec -sep "^ " "[a-z0-9]-sk" | awk '$0 !~ /^$/' [-t dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa] [-w provider] for ECDSA keys will fail. ECDSA-SK, Ed25519 and Ed25519-SK keys have a fixed length and the -b flag will be ignored. -t dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa Specifies the type of key to create. The possible values are “dsa”, “ecdsa”, “ecdsa-sk”, “ed25519”, “ed25519-sk”, or “rsa”. option only makes sense for the FIDO authenticator algorithms ecdsa-sk and ed25519-sk. gorithms ecdsa-sk and ed25519-sk. Currently PIN authentication is the only supported verification method, but other methods may be supported $ w3m -dump https://docs.github.com/ja/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent | \ lsec -sep " [0-9]." "ecdsa" 3. 以下のテキストを貼り付け、例で使用されているメールを貴方のアカウントと関連 付けられたメールアドレスGitHubに置き換えます。 ssh-keygen -t ed25519-sk -C "your_email@example.com" ssh-keygen -t ed25519-sk -C "your_email@example.com" ssh-keygen -t ed25519-sk -C "your_email@example.com" 注: コマンドが失敗し、エラー invalid format または feature not supported, を受け取る場合は、Ed25519 アルゴリズムをサポートしていないハードウェアセキ ュリティキーを使っている可能性があります。代わりに、次のコマンドを入力しま す。 ssh-keygen -t ecdsa-sk -C "your_email@example.com" ■githubのデフォルトもed25519なので $ w3m -dump https://docs.github.com/ja/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent | \ lsec -sep " [0-9]." "Ed25519 アルゴリズムをサポートしていないレガシ" 2. 以下のテキストを貼り付け、例で使用されているメールを GitHub メールアドレス に置き換えます。 ssh-keygen -t ed25519 -C "your_email@example.com" 注: Ed25519 アルゴリズムをサポートしていないレガシシステムを使っている場合 は、以下を使います。 ■ed25519は、エドワーズ曲線デジタル署名の実装の一つであり、ハッシュ関数としてSHA-512(SHA-2)を使い、曲線としてCurve25519を用いている RSAの3072ビット相当 $ w3m -dump https://dwango.github.io/articles/2024-02_security_level/ | lsec 鍵の扱いやすさ RSA 暗号方式はオワコンですか? 今私は SSH の鍵として ssh-rsa の鍵を使っているの ですが、新しく作り直した方がいいでしょうか? いいえ。わざわざ新しく作り直す必要はありません。 しかし個人的には、もし鍵を新規で作るのであれば ssh-rsa ではなく ssh-ed25519 な どの鍵を作ることを推奨します。その理由は以下の通りです。 • 鍵の扱いやすさ: 128 ビットセキュリティーを達成するために、RSA だと 3072 ビ ットの鍵が必要ですが、ssh-ed25519 であれば 256 ビットで済みます。12 倍の差 があります。(これは公開鍵の話であり、秘密鍵だとさらに差が広がります。) • 実装の簡単さ: RSA を安全に実装するのは難しいです。多くの実装は演算のために 多倍長整数を使っていますが、これは Go 言語で問題とみなされ修正されました。 最近も脆弱な実装が見つかりました。RSA はその単純さから多くの場所で教えられ ていますが、その有用性が過大評価されていると感じます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1. 実際には \(x^2\) の項があっても問題なく、そういう曲線も存在します。 ↩︎ 2. 厳密には Ed25519 は楕円曲線ではなく twisted Edwards curve とよばれる曲線を 使っていますが、ほとんど楕円曲線と同値です。 ↩︎ ■将来的にはEd448の方が良さそう。ファイルの圧縮・解凍を行うツールであるXZ Utilsにバックドアが仕込まれていた問題(CVE-2024-3094)で見かけた。 https://www.dnsops.jp/event/20180627/20180627-ed25519.pdf https://github.com/amlweems/xzbot ■「NIST SP 800-186」では「Curve25519」「Edwards25519」として登場し、セキュリティ強度は128bit ※「Curve448, Edwards448」のキュリティ強度は224bit https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-186.pdf ■セキュリティ強度128bitでRSA3072よりも計算コストの低い、Ed25519を選択することとした。 ※加えて、githubやawsのデフォルトの鍵でもあるので。 $ ssh -V OpenSSH_9.2p1 Debian-2+deb12u3, OpenSSL 3.0.13 30 Jan 2024 $ cd .ssh ■上書きされて困るようなバックアップ対象もないので ~/.ssh$ ls id* 2>/dev/null | wc -l 0 ■公開鍵と秘密鍵の作成 ~/.ssh$ ssh-keygen -t ed25519 Generating public/private ed25519 key pair. Enter file in which to save the key (/home/labunix/.ssh/id_ed25519): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/labunix/.ssh/id_ed25519 Your public key has been saved in /home/labunix/.ssh/id_ed25519.pub The key fingerprint is: SHA256:MT44INO8F7J4IzdwIx2T13j3LsFOfJJFsTf+pS2DVOE labunix@ibm-debian The key's randomart image is: +--[ED25519 256]--+ | o. o .o.. | | +.oo o . .o . | | = O...o+ +. E | | B * + oB o+ . | | o B + So =. . .| | + + . .o... +.| | .. + o| | o | | | +----[SHA256]-----+ ~/.ssh$ ls id_ed25519* id_ed25519 id_ed25519.pub ■リモート側に公開鍵をauthorized_keysとして追記登録(なければ作成)する ~/.ssh$ scp id_ed25519.pub labunix@remote:~/.ssh/id_ed25519-$(hostname).pub ~/.ssh$ cd .. $ ssh -i id_ed25519.pub remote remote$ chmod 600 .ssh/id_ed25519-*.pub remote$ ls -l .ssh/* | awk '/ed25519/{print $1}' -rw------- remote$ cat .ssh/id_ed25519-*.pub >> .ssh/authorized_keys remote$ exit ■毎回「-i」で指定するのは面倒なのでconfigを書く $ cat .ssh/config Host remote HostName remote User labunix Port 22 IdentityFile ~/.ssh/id_ed25519 ■接続時のログ $ ssh -v remote 2>&1 | grep -B 2 Authenticated debug1: Offering public key: /home/labunix/.ssh/id_ed25519 ED25519 SHA256:MT44INO8F7XXXzdwIx2T13j3LsFOfJJFsTf+pS2DVOE explicit agent debug1: Server accepts key: /home/labunix/.ssh/id_ed25519 ED25519 SHA256:MT44INO8F7XXXzdwIx2T13j3LsFOfJJFsTf+pS2DVOE explicit agent Authenticated to remote ([10.0.0.1]:22) using "publickey".