暗号化システムの仕組み

SSL(Secure Sockets Layer)

SSL はネットワーク処理のプロトコル階層 において TCP とアプリケーションの間に入る層です。 このように一つの階層(レイヤ)として実現されているので、 様々なアプリケーションに適用できます。

アプリケーションはTCPに直接データを渡すかわりに SSLを経由してTCPに渡すように変更するだけで済むからです. inetdを 使っている場合などのように、パイプでリダイレクト するプログラムからサーバを呼び出すだけで利用できる場合が 多いでしょう.

SSLの通信の手順

公開鍵暗号方式では複雑な計算を行なうために負荷が高いので、 SSLでは共通鍵を交換する時にのみ公開鍵暗号方式を使い、 その後の通信では共通鍵を用います。

通信の手順は以下のとおりです.

  1. クライアントはサーバーに接続のリクエストを送ります。
  2. サーバーは自分の署名済みの証明をクライアントに送ります。 ここまでがハンドシェイクと呼ばれます.
  3. クライアントは受け取った証明書が、信用するCAから 発行されたものかどうかを調べます。 確認できれば次のステップに進みます。
  4. クライアントは証明書内の情報が、通信を行っている 相手サイトの情報とそのドメイン名やそのサーバの公開鍵の情報と 一致しているか確認します。 この場合、どこまで一致している場合に信頼性が あると判断するかは設定されたポリシーによります。
  5. クライアントが仕える通信方式をサーバーに知らせるなどの ネゴシエーションを行って、利用するセッション鍵(共通鍵方式の鍵, 対象暗号化鍵)を作って,以後の通信を行います.

セッション鍵の作成手順

ではセッション鍵(共通鍵)はどのようにして作るのでしょうか. これには上の手順をもう少し詳細に見なければなりません。 以下にその詳細部分を説明します.
  1. クライアントのからサーバへのアクセス要求(Client Hello) の中には後で使う乱数が含めて送信します。
  2. サーバからのリプライ(Server Hello)の中にも、 後で使う乱数が含められている
  3. クライアントではサーバから送られたCA証明書を解読して得られた  サーバの公開鍵を得た後、プリマスタシークレットと呼ばれる乱数を送ります。  このプリマスタシークレットはサーバの公開鍵を使って送られる、  秘密鍵を持つサーバでないと読めないので安全です。
  4.  クライアントとサーバでは、この時点で以下の3つのデータを共有している
    • クライアントからアクセス要求時に送られた乱数データ
    • アクセス要求対するサーバからのリプライで送られた乱数データ
    • プリ・マスタ・シークレット
    クライアントとサーバの双方でこれらを用いてセッション鍵を作成します。
この後その共通鍵であるセッション鍵を用いて通信するのです。 ここでの通信内容を他の人は知ることができません。

こうして安全な通信が行うことができるようになります。

FC Labのホームへ Copyright(c) 2001 Takeshi FUJIKI All rights reserved.