20.3. SSH 接続のイベントシーケンス
以下に挙げる一連のイベントは、2 つのホスト間で行われる SSH 通信の整合性を保護するのに役立ちます。
- 暗号化ハンドシェイクが行われ、クライアントが正しいサーバーと通信していることを確認できます。
- クライアントとリモートホストとの間の接続のトランスポート層が、対称暗号方式を使用して暗号化されます。
- クライアントが、サーバーに対して自己認証します。
- リモートクライアントは、暗号化された接続でリモートホストと対話します。
20.3.1. トランスポート層
トランスポート層の主なロールは、認証時とその後の通信中に、2 つのホスト間の通信を簡単に安全でセキュアなものにすることです。トランスポート層は、データの暗号化と復号を処理し、データパケットの送受信時にその整合性を保護することでそのロールを果たします。また、トランスポート層は、情報を圧縮して転送を高速にします。
SSH クライアントがサーバーに接続すると鍵情報が交換されるため、両システムでトランスポート層が適正に構築できます。以下は、こうした鍵情報の交換中に発生する手順です。
- 鍵を交換する
- 公開鍵暗号化アルゴリズムが決定する
- 対称暗号化アルゴリズムが決定する
- メッセージ認証アルゴリズムが決定する
- ハッシュアルゴリズムが決定する
キー交換時に、サーバーは一意の ホストキー でクライアントに対して自己識別します。クライアントがこの特定のサーバーと通信していない場合、サーバーのホストキーはクライアントに認識されず、接続されません。OpenSSH は、サーバーのホスト鍵を受け入れることでこの問題を回避します。これは、ユーザーが通知を受けて新規のホスト鍵を受け取り、検証した後に行われます。後続の接続では、クライアントのホストキーがクライアントに保存されているバージョンに対してチェックされ、クライアントが実際に目的のサーバーと通信していることが信頼されます。今後、ホストキーが一致しなくなった場合、ユーザーは接続を行う前に、クライアントに保存されているバージョンを削除する必要があります。
注意
ローカルシステムは、対象サーバーと攻撃者が設定した偽サーバーとの違いを認識しないため、攻撃者は初回コンタクト中に SSH サーバーをマスカレードすることが可能です。この問題を防ぐために、初回接続の前かホスト鍵の不一致が発生した場合には、サーバー管理者へ連絡して新しい SSH サーバーの整合性を確認してください。
SSH は、ほとんどすべての公開鍵アルゴリズムまたはエンコード形式に対応するように設計されています。初回の鍵交換で、交換に使用されるハッシュ値と共有秘密値が作成されると、2 つのシステムは新しい鍵とアルゴリズムの計算を直ちに開始して、認証と、今後の接続で送信されるデータを保護します。
所定の鍵とアルゴリズムを使用して一定量のデータ (正確な量は SSH 実装により異なる) が送信された後に、もう 1 回鍵交換が行われてハッシュ値と新しい共有秘密値の別のセットが生成されます。攻撃者がハッシュ値と共有秘密値を判別できたとしても、その情報が役に立つのは限られた時間のみです。