ふと気になったので現状自宅サーバーへのログインで使用している公開鍵(RSA)を確認してみたのですが、鍵長が 2048bit だったので最近流行りの Ed25519 に対応させようということです。
これはGitのssh-keygenを利用するためです。
現在使用中のRSA鍵長の確認方法
コマンドプロンプトなりPowerShellなりを起動して、
ssh-keygen -l -f [公開鍵を保存している場所までのパス]/id_rsa.pub
を実行すると現在使用中の鍵の情報が確認できます。
私の環境では RSA 2048bit を使用していたことがわかりました。
1024bit ではなかったことに安堵しつつ、2048bit も現状スパコンを1年ほどブン回せば解読できるレベルと現実的なエリアになってきており、すでに危険水位に達そうとしています。
2030年頃までは大丈夫という見解もありますが、現状頑張れば1年で解読できる暗号はすでに「安全」とは言えないでしょう。
ということで今回はすでに危険なエリアに差し掛かろうとしている RSA 2048bit の使用をやめて、現状最強と言われている Ed25519 に移行しよう!という回です。
Ed25519とは何?
Ed25519 は「楕円曲線暗号」の一種で、EdDSA の一種、日本語では「エドワーズ曲線デジタル署名アルゴリズム」と言います。
楕円曲線を利用した暗号は、通常の素因数分解を利用した RSA などといった暗号に対して短い鍵で強力なセキュリティという利点を持ちます。
例えば、今回利用する Ed25519 はたった256bitで RSA 3072bit 相当のセキュリティを提供することができます。
実際に導入してみる
それでは実際にLinuxサーバーでのログインに使っていきましょう。
工程は大きく分けてクライアントPC側での鍵生成、サーバー側での鍵登録があります。
Ed25519鍵を生成する
それでは早速Ed25519の鍵を作っていきましょう。
以下のコマンドを実行すると鍵を生成してくれます。
ssh-keygen -t ed25519
ssh-keygenでは、特にオプションを指定しなければRSA 2048bitを生成しますから、今回は-t ed25519 を指定して生成しています。
実行するとまず鍵の保存場所を聞いてきます。今回は変更しませんからそのままEnterで構いません。
その後パスフレーズの設定を求められます。何らかのトラブルによってもし秘密鍵が流出してもパスフレーズを設定しておくと多少は安心できると思います。
すべて完了するとこのような画面が表示されます。
これでユーザーフォルダ直下の ./ssh ディレクトリの中に
- id_ed25519
- id_ed25519.pub
という2つのファイルが生成されているはずです。
id_ed25519が秘密鍵で、id_ed25519.pubが公開鍵です。
生成した鍵のSSHサーバーへの登録
それでは生成した鍵を実際にサーバーへ登録していきましょう!
id_ed25519.pub をサーバーにSCP等で転送して登録するという方法が主流ですが、ここでは「SCP転送が面倒」「authorized_keysに登録するの面倒」っていう理由で、直接 authorized_keys ファイルを編集していきます。これがなんだかんだで楽です。
ではまず、先程生成した id_ed25519.pub ファイルをお好きなテキストエディタ等で開きます。
開いたら中身の全文をコピーしてください。
続いてLinuxサーバー側にSSH接続して authorized_keys ファイルを編集していきます。
まずは
cd .ssh
でディレクトリを移動します。
続いて
nano authorized_keys
で編集画面を開きます。今回は操作がわかりやすいnanoを使用していますがviなどお好きなものを使用して頂いて構いません。
このような黒い画面が表示されたら、先程生成してコピーした公開鍵をペーストしてください。
RSA 等他の鍵からの移行の方ならすでに記載されていると思いますが、使用しない鍵を複数登録しておくのはリスクにしかならないので削除した上であたらしいEd25519鍵を登録しましょう。
最後にSSHDを再起動して作業は終了です。
sudo systemctl restart sshd
一度ログアウトして新しい鍵でログインできるか確認しましょう。
お疲れさまでした!
まとめ
今回はSSHの認証に使用する鍵を RSA 2048bit から Ed25519 にアップグレードしました。
まあ当分は Ed25519 がSSHでは最強だと思います。
やはり新しい方式を使用している方が意識高そうでいいですね。