SSLの目的と概要

SSLは、インターネットのような、悪意に対して無防備な通信路を用いて、安全な通信を実現するための2者間プロトコルである。


SSLの前提

攻撃者は、
  • 伝達途中のメッセージを改ざんしたり、
  • その中身を覗き見たり、
  • さらに、誰かほかの存在になりすます
ことができるとする。

通信を行いたい2者は、予め面識はなく、どのような秘密情報も事前に共有していないとする。

ただし、各自は公開鍵インフラ(PKI)を利用できるものとする。すなわち、
  • 各自は、自身の公開鍵と秘密鍵ペアをもち、
  • 各自の公開鍵は、信頼できる第三者機関によって認定され、さらに、
  • 各自は、他者の公開鍵について、それが第三者機関によって認定されたものか否か正しく判定する手段をもっている
とする。


SSLの目的

SSLの主な機能は、
  • 通信相手が本当に意図した相手であることを保障し、
  • 通信途中でメッセージが改ざんされたり、
  • その中身を覗き見られたりすることを防止することである。

注意:
SSLは、通信する2者間で相互に相手を認証するオプションももつが、この講義では、もっともよく用いられているクライアント・サーバモードのみを扱う。

クライアント・サーバモードではクライアントは認証されず、サーバのみが認証される。(クライアントは自身の公開鍵と秘密鍵ペアをもつ必要はない。)


[演習]
上記の前提で、公開鍵インフラが利用できないとき、SSLが目的とする機能は実現可能か?



SSLの概要

SSLは
  • ハンドシェークフェーズ
  • データ転送フェーズ
の2フェーズからなる。



ハンドシェークフェーズ
ハンドシェークフェーズの目的は、
送信者と受信者の間で、マスター秘密と呼ばれるランダムでフレッシュな秘密情報を共有する
ことである。

送信者と受信者の間で事前に共有された秘密は全くなく、しかも送受信内容はすべて覗き見られるのに、このようなことができるのは不思議だが、公開鍵暗号がそれを可能にする。

典型的なハンドシェークフェーズ
クライアント サーバ
サポート暗号スイート、クライアント乱数 →
← 選択した暗号スイート、サーバ乱数、サーバ公開鍵証明書
サーバ証明書を検証
← 事前マスター秘密を共有 →
マスター秘密の計算 マスター秘密の計算 
ハンドシェークメッセージのMAC →
← ハンドシェークメッセージのMAC'
MAC'の検証 MACの検証 
鍵導出 鍵導出 

ハンドシェークフェーズでは、まず、
使用する暗号スイートについて交渉のうえ同意する(ネゴシエーション)。
暗号スイートとは、
  • 認証・鍵交換・暗号化・ハッシュの一連の暗号アルゴリズムを指定するための識別子
である。

  • 認証アルゴリズムは、サーバから送られた公開鍵証明書を認証するため
  • 鍵交換アルゴリズムは、マスター秘密を共有するため
  • 暗号アルゴリズムは、データ転送フェーズでメッセージを暗号化するため
  • ハッシュ関数は、MACを計算したり、マスター秘密から各種の鍵を導出するため
のアルゴリズムである。

例えば、暗号スイートには、

  • TLS_RSA_WITH_3DES_EDE_CBC_SHA
    • = (RSA, RSA, 3DES_EDE_CBC, SHA)

  • TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA
    • = (DSS, DH, 3DES_EDE_CBC, SHA)

などがある。

さらに、ハンドシェークフェーズでは、
クライアント、サーバ双方が乱数を生成し、交換する。
また、このとき、
クライアントはサーバの公開鍵証明書を受け取り、PKIインフラに依拠して、認証アルゴリズムを用いて、その正当性を確認する。

正当性が確認できたら、
同意した暗号スイートを用いて、マスター秘密を共有する。
まず、鍵交換アルゴリズム(or 鍵交換プロトコル)を用いて、事前マスター秘密を共有する。鍵交換アルゴリズムは公開鍵暗号技術を応用して作られる。

つぎに、送信者、受信者双方で、
  • クライアント乱数、サーバ乱数、事前マスター秘密
の3情報からハッシュアルゴリズムを用いてマスター秘密を計算する。

さらに、
同意したハッシュ関数を用いて、ここまでで交換したメッセージのMACを上述のMAC鍵を用いて計算し、お互いに交換し検証する。

MACを確認することではじめて、サーバ認証が成立する。すなわち、クライアントは、通信相手が、受け取った公開鍵証明書の持ち主に相当する、サーバであることを認証する。

MACが正しければ、最後に、送信者、受信者双方で、
マスター秘密、クライアント乱数、サーバ乱数をハッシュ関数に入力し、MAC鍵、メッセージ鍵など一連の鍵情報を生成する。





[演習]
ハンドシェークフェーズで、クライアントとサーバが乱数を交換する理由は何か?




データ転送フェーズ
データ転送フェーズの目的は、
ハンドシェークフェーズで共有した一連の鍵情報を用いて、実際にメッセージを暗号化して送受信を行うことである。

ブロック暗号を用いた高速な暗復号が必須となる。

データ転送フェーズでは、送信者は
  1. 上述のMAC鍵を用いて、送信メッセージのMACを計算し、
  2. そのMACをメッセージに付加したものを、上述のメッセージ鍵を用いて暗号化して送信する。

受信者は
  1. 受信メッセージを、上述のメッセージ鍵を用いて復号し、メッセージとMACを取り出す。
  2. 上述のMAC鍵を用いて、メッセージのMACを計算し、それが受け取ったMACと等しいかどうか検証する。
  3. 等しければ、メッセージを受理する。

[演習]
IPSecでは、SSLとは逆に、暗号化してからMACを計算する。MACを計算してから暗号化するのと、暗号化してからMACを計算するのと、どちらがよいか?



SSLのポイント

SSLは、
  • 公開鍵暗号を応用した鍵共有アルゴリズムで鍵情報を共有し、
  • ブロック暗号でメッセージの暗号化を行う。
  • 実行時にサーバの公開鍵を入手する。その正当性のチェックは、公開鍵インフラに頼っている。
  • ハンドシェークフェーズのメッセージのMACを交換し検証する。これによりサーバ認証を実現する。



SSLの歴史

  • SSL 1.0 1994年、Netscape。設計レビューの段階で破棄。
  • SSL 2.0 1994年、Netscape。ダウングレード攻撃が可能。
  • SSL 3.0 1995年、Netscape。問題修正、機能追加。
  • TLS 1.0 1997-1999年、IETF。SSL 3.0と同機能。
  • TLS 1.1 2006年、IETF。AES暗号を追加。
  • TLS 1.2 2008年、IETF。SHA256を追加。

以下、とくに断らない限り、SSL とは SSL 3.0 を意味する。
























最終更新:2010年05月20日 13:58