以下の一連のイベントにより2つのホスト間のSSH通信の一貫性を 保護する援助をします。
暗号化したハンドシェークがなされてクライアントは正しいサーバーと 通信していることを証明できます。
クライアントとリモートホスト間の接続上のトランスポート層は対称暗号を使って暗号化します。
クライアントが自分自身をサーバーに対して認証します。
リモートクライアントは、ここで暗号化した接続を介してリモートホストと 安全に交流が出来ます。
トランスポート層のおもな役割は、認証時と認証後に2つのホスト間で安全な通信を確立することです。 トランスポート層は、データの暗号化と復号を処理して、データパケットを送受信する際に一貫性を 確保することによってこれを実現します。さらに、トランスポート層は、圧縮も提供できるため、 情報の転送をスピードアップします。
SSHクライアントがサーバーと通信すると、2つのシステムがトランスポート層を正しく構築できるように、 鍵となる情報が交換されます。この交換の間、以下のステップが実行されます:
鍵の交換する
公開鍵暗号化アルゴリズムを決定する
対称暗号化アルゴリズムを決定する
メッセージ認証アルゴリズムを決定する
使用するハッシュアルゴリズムを決定する
鍵を交換する際、サーバーは独自のホスト鍵を使ってクライアントに自分自身を証明します。 このクライアントが以前にこの特定のサーバーと1度も通信したことがないと、クライアントはサーバーの鍵を知りませんので、 接続はできません。OpenSSHは、ユーザーが通知を受け新しいホスト鍵の受理を確認した後に、サーバーのホスト鍵を承認する することでこの問題を処理しています。これで、次回からの接続で、サーバーのホスト鍵と、クライアントに保存されている バージョンを突き合わせることができるため、クライアントが本当に目的のサーバーと通信していることを証明できます。 それ以降、ホスト鍵が適合しなくなった場合、接続を達成するにはユーザーはクライアントに保存されているバージョンを 削除する必要があります。
用心 | |
---|---|
ローカルシステムは目的のサーバーと侵入者がセットアップした偽りのサーバーとの違いがわからないので、 最初に接続した時点で、侵入者がサーバーを偽装することは可能です。これを防ぐには、最初に接続する前に、 又はホスト鍵の不適合の時点でサーバー管理者と連絡を取り、新しいSSHサーバーの一貫性を確かめるべきです。 |
SSHは、ほとんどすべての種類の公開鍵アルゴリズムやエンコーディング形式を使用できるように作られています。 最初の鍵交換で交換したり秘密値を共有するハッシュ値を生成し、2つのシステムは、認証と、この接続を介して 送信されるデータの保護を行うために、新しい鍵とアルゴリズムの計算をただちに開始します。
特定の鍵とアルゴリズムをつかって、ある程度のデータを送信した後(正確な量は、SSHの実装に依存します。)、 別のハッシュ値と共有秘密値のセットを生成する別の鍵への交換が起こります。その為、仮に侵入者がハッシュ値と 共有秘密値を解読できたとしても、その情報は、限定された時間だけしか役に立ちません。
トランスポート層が、2つのシステム間で情報の受け渡しを行うための安全なトンネルを作成し終わると、 サーバーは、秘密鍵でエンコードした署名の使用や、パスワードの入力などのサポートされている 各種の認証方法をクライアントに伝えます。クライアントは、サポートされている方法の1つを使って、 サーバーに対し自分自身を認証します。
SSHサーバーとクライアントは、さまざまなタイプの認証をサポートするように構成でき、その認証方法は、 各側で最適に制御することができます。サーバーは、セキュリティモデルに基づいて、どの暗号化方法を サポートするかを指定することができ、クライアントは、利用できるオプションの中から、認証方法を試行する 順序を選ぶことができます。SSHプロトコル層の安全性という性質のおかげで、ホストとパスワードベースの認証など、 安全性に欠けるような認証方法でも安心して使用することができます。
SSHトランスポート層で認証が正常終了すると、マルチプレキシングと呼ばれる技術により 複数のチャンネルが開きます。 [1]これらのチャンネルで、各種の端末セッション用と送信されたX11セッション用の 通信が処理されます。
クライアントとサーバーは両方とも新しいチャンネルを作成できます。各チャンネルには、それぞれの側で 別々の番号が割り当てられます。クライアントが新しいチャンネルを開こうとする場合、クライアントは そのチャンネル番号を要求と一緒に送ります。この番号情報は、サーバーに格納されており、そのチャンネルの 通信方向決定に使用されます。この目的は、さまざまなタイプのセッションが互いに影響しないようにすることであり、 1つのセッションが終了した時点で、そのチャンネルは、基本SSH接続を切断することなく閉じることができます。
チャンネルは、データを順序正しく送受信できる、フロー制御もサポートしています。このように、チャンネル上でのデータ送信は、チャンネルが開いたというメッセージをホストが受け取るまで開始されません。
クライアントとサーバーは、クライアントが要求するサービスやユーザーがネットワークに接続した方法に依存する、各チャンネルの特徴を自動的にネゴシエートします。このことは、プロトコルの基本的な構造を変更すること無しに、異なるタイプのリモート接続を扱う大きな自由度をもたらします。
[1] | マルチプレクス接続は、共有の共通媒体を介して送信される複数の信号から成り立ちます。 SSHでは、共通の安全な接続を介して各種チャンネルが送信されます。 |