0Pricing
Cryptology Academy · レッスン

公開鍵認証とエージェントフォワーディング

authorized_keys、Ed25519とRSA鍵の違い、SSHエージェントフォワーディングに伴うセキュリティ上の影響を理解します。

「公開鍵認証とエージェントフォワーディング」はCoddyKit上の無料Cryptology Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCryptology Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cryptology Academyコースには全4レッスンが含まれています。

authorized_keysファイルの形式

SSHの公開鍵認証では、通常サーバー上の~/.ssh/authorized_keysにあるauthorized_keysファイルを使用します。各行には、algorithm base64-key commentという形式の公開鍵が含まれます。サーバーは、クライアントがチャレンジに署名することで、対応する秘密鍵を所有していることを証明できるか確認します。

ssh-keygenによるSSH鍵の生成

ssh-keygenコマンドは、認証に使用する鍵ペアを作成します。ssh-keygen -t ed25519を実行すると、最新のEd25519鍵ペアが生成されます。識別用のコメントは-Cで指定でき、メールアドレスなどを設定できます。このツールは、デフォルトでは秘密鍵(id_ed25519)と公開鍵(id_ed25519.pub)を~/.sshに保存します。

鍵の種類の比較:RSA、ECDSA、Ed25519

RSA 4096ビット鍵はレガシーシステムとの互換性が高い一方、署名の生成には時間がかかります。NIST P-256を使うECDSAは高速で、より小さい署名を生成しますが、NIST曲線のパラメータ選定を疑問視する暗号研究者もいます。Curve25519に基づくEd25519は現在のベストプラクティスです。高速で鍵と署名が小さく、既知の弱点がなく、最新のSSH実装で利用できます。

パスフレーズで保護された秘密鍵

秘密鍵ファイルはパスフレーズで保護する必要があります。ssh-keygenは、パスフレーズから導出した鍵(最新の鍵ではbcryptを使用)で秘密鍵を暗号化します。そのため、攻撃者がファイルを盗んでも、パスフレーズなしでは利用できません。パスフレーズを設定しない場合、そのファイルにアクセスできる人は誰でも、対応する公開鍵を保持するサーバーであなたになりすまして認証できます。

鍵管理のためのssh-agent

ssh-agentデーモンは、ログインセッション中に復号済みの秘密鍵をメモリ上に保持します。ssh-add ~/.ssh/id_ed25519で鍵を読み込むと、パスフレーズの入力を一度求められます。その後のSSH接続では、パスフレーズを再入力せずにエージェントへチャレンジへの署名を依頼できるため、安全性と利便性を両立できます。

ssh-agentがチャレンジに署名する仕組み

SSHサーバーが認証チャレンジを送信すると、SSHクライアントはUnixソケット経由で署名処理をssh-agentに委任します。エージェントはメモリ上に保存された秘密鍵を使って暗号署名を実行し、署名だけを返します。秘密鍵のバイト列がエージェントのプロセス外へ出ることはなく、SSHクライアント自体に渡ることもありません。

エージェントフォワーディング:機能とリスク

エージェントフォワーディング(ForwardAgent yesまたはssh -A)を使うと、リモートのSSHセッションから、以降の認証にローカルのエージェントを利用できます。これにより、踏み台ホストへ秘密鍵をコピーせずに経由接続できます。ただし、踏み台ホストが侵害された場合、そこにいるrootユーザーがエージェントソケットにアクセスし、任意のサーバーであなたになりすまして認証できる可能性があります。

踏み台ホストでのProxyJumpとForwardAgentの比較

ProxyJump(ssh -J bastion target)は、踏み台ホストにアクセスする際のForwardAgentより安全な代替手段です。踏み台ホストを経由するTCPトンネルを作成しますが、そこにエージェントソケットを公開しません。対象サーバーへの接続はローカルクライアントから直接行われ、踏み台ホストは暗号化されたTCPバイト列を転送するだけなので、認証情報を使用できません。

SSH証明書認証

SSHは、認証局(CA)がホスト公開鍵とユーザー公開鍵に署名する、証明書ベースの認証をサポートしています。すべてのサーバーに個別の公開鍵を配布する代わりに、各サーバーでCAを信頼するように設定します。署名済みのユーザー証明書があれば、そのCAを信頼するすべてのサーバーにアクセスできます。証明書には、有効期限やプリンシパルの制限を埋め込むこともできます。

一括鍵収集のためのssh-keyscan

ssh-keyscanツールは、1台以上のホストに接続し、認証なしで公開ホスト鍵を取得します。デプロイスクリプトでknown_hostsファイルを自動的に作成する場合に便利です。出力はknown_hostsファイルへ直接パイプできます。たとえば、ssh-keyscan -H example.com >> ~/.ssh/known_hostsのように実行します。

鍵認証フローの概要

公開鍵認証では、クライアントが公開鍵を送信し、サーバーがauthorized_keysを確認します。次にサーバーがセッションIDで署名したチャレンジを送信し、クライアントがエージェントを介して秘密鍵で署名します。最後にサーバーが保存済みの公開鍵で署名を検証します。検証に成功すれば、秘密の認証情報を送信せずに認証が完了します。

SSH鍵タイプの選択

速度、鍵サイズの小ささ、高い安全性を備えているため、新しいデプロイで現在のベストプラクティスとされるSSH鍵の種類はどれですか?

公開鍵認証の復習

重要なポイントは、公開鍵をauthorized_keysに保存すること、秘密鍵をパスフレーズで保護すること、ssh-agentを使って復号済みの鍵をメモリ上に保持すること、Ed25519鍵タイプを優先すること、踏み台ホストへのアクセスではエージェントソケットの公開を避けるためForwardAgentではなくProxyJumpを使うこと、そして大規模なアクセス管理にはSSH証明書を検討することです。

よくある質問

「公開鍵認証とエージェントフォワーディング」レッスンは無料ですか?

はい。「公開鍵認証とエージェントフォワーディング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cryptology Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cryptology Academyコースには全4レッスンが含まれています。

「公開鍵認証とエージェントフォワーディング」で何を学びますか?

authorized_keys、Ed25519とRSA鍵の違い、SSHエージェントフォワーディングに伴うセキュリティ上の影響を理解します。 ブラウザで直接実行するハンズオンコードでCryptology Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Cryptology Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCryptology Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「公開鍵認証とエージェントフォワーディング」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCryptology Academyレッスンでコードを書いて実行できますか?

はい。すべてのCryptology Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. SSHハンドシェイクとホスト鍵認証
  2. 公開鍵認証とエージェントフォワーディング
  3. SSHトンネリングとポートフォワーディングの手法
  4. SSHのハードニングと監査のベストプラクティス
← Cryptology Academyに戻る