前回はインターネットの代名詞と言えるプロトコルのHTTPを解説しました(前回の解説はこちら)。その中で、HTTPの暗号化に多用されているSSL(およびその発展型であるTLS)についてはHTTPと「事実上不可分」と書きました。今回はそのSSL/TLSについての解説です。

 HTTPの解説でも述べたように、SSL 3.0とTLS 1.0の基本動作はほぼ同じです。今回の解説ではSSL 3.0を基本として、TLSについては必要に応じて注釈を入れることにします。使用する用語もSSL/TLS共通の内容については「SSL」を基本とし、TLSに特有の記述のみ「TLS」と記します。

SSLの基本動作

 SSLの動作は「初期情報交換(Hello)」「暗号鍵の交換(Key Exchange)」「暗号通信の開始(Change Cipher Spec)」の3段階から成ります。簡単に書くと以下のようになります。

 以降の通信は暗号化されます。これだけなら単純な動作に見えます。

 SSLの通信データ構造は「レコード」という外枠にまとめられ、必要に応じてレコードの中に「メッセージ」が含まれます。C言語風に書くと以下のような構造となります。


struct Message {
  unsigned char msg_type;
  unsigned char length[3];
  unsigned char body[*];
};
  
struct Record {
  unsigned char type;
  unsigned char version[2];
  unsigned char length[2];
  union {
  struct Message message[*];
  unsinged char plain_data[*];
  } record_data;
};