SSL/TLS

2023-07-11 (火) 20:09:17

SSL/TLS とは

  • インターネット上で使われているデータ暗号化通信プロトコル。
  • サーバとクライアント間を安全に通信できるようにするプロトコル。
  • 当初はSSLとして標準化が行われていたが、TLSとして標準化が行われるようになった
    • SSLからTLSへの移行が進められた
    • SSLは全バージョンで非推奨となっている
    • TLSはSSLバージョン3.0に基づいて標準化された規格
  • IETFによって標準化が行われている

SSL/TLSの機能

暗号化

認証

  • 公開鍵証明書に基づく認証機能

改ざん検知

  • ハッシュ用共通鍵に基づく改ざん検知機能
  • ドメイン所有者とサーバー管理者の同一性証明
  • ドメイン所有者の物理的実在証明(EV証明書に限定)

対応するアプリケーション層のプロトコル

プロトコル(平文)ポート番号(平文)プロトコル(SSL/TLS)ポート番号(SSL/TLS)
HTTP over SSL/TLSHTTP80HTTPS443
SMTP over SSL/TLSSMTP25SMTPS465
FTP(data) over SSL/TLSFTP(データ転送用)20,1024以上FTPS988
FTP(control) over SSL/TLSFTP(制御用)21FTPS990
Telnet over SSL/TLSTelnet23TELNETS992
POP over SSL/TLSPOP3110POP3S995
IMAP over SSL/TLSIMAP4143IMAPS993
LDAP over SSL/TLSLDAP389LDAPS636

HTTP over SSL/TLS

  • SSLまたはTLSによって確立されたセキュアな通信経路上で行われるHTTP通信の仕組みのこと
  • HTTPでSSL/TLSを使ったプロトコルは「HTTPS」。
  • URIスキーム:https

SSL通信のフロー

  1. Webブラウザが行うサーバ証明書の正当性の検証
    • 証明書の検証
    • 証明パスの検証
    • 有効期限の検証
    • 失効リストの検証
    • ドメインの検証
    • サーバ証明書が信頼できる認証機関から発行されていることの確認
  2. 鍵の交換
  3. 暗号化通信の開始

SSL通信の仕組み

SSL/TLS の構造

  • TCP/IP階層のアプリケーション層とトランスポート層(TCP)の間で暗号化等が行わる。
  • SSL/TLS自体のプロトコルの構造
    • 上位層
      • Handshakeプロトコル
      • Change Cipher Specプロトコル
      • Alertプロトコル
      • Application Dataプロトコル
  • 下位層
    • Recordプロトコル

TLSレコード

データ送信時

  • メッセージをフラグメント単位に分割して以下の処理を行いTLSレコードを作成する
    • 圧縮
    • HMACの生成
    • 暗号化

データ受信時

  • 復号
  • HMACの検証
  • 伸張

TLSレコードの構造

  • タイプ
  • バージョン
  • データ長
  • 通信データ
  • HMAC
  • パディング
  • パディング長

TLSハンドシェイク

  1. 【クライアント】 => サーバ
    1. Client Hello
      • 利用可能な暗号化・圧縮アルゴリズムを送信して通信の開始をサーバに通知する
  2. クライアント <= 【サーバ】
    1. Server Hello
      • クライアントから受領した暗号化・圧縮アルゴリズムから使用するものを決めてクライアントに通知する
    2. Certificate
    3. Server Key Exchange
      • (Certificateでサーバ証明書を送信しない場合)一時的なRSA鍵かDH鍵を生成してクライアントに送信する
    4. Certificate Request
    5. Server Hello Done
      • Server Helloから始まったクライアントに対する一連のメッセージの完了をクライアントに通知する
  3. 【クライアント】 => サーバ
    1. Certificate
    2. Client Key Exchange
      • 暗号化通信に使うプリマスターシークレットを生成する
      • Certificateでサーバから受領したサーバ証明書に含まれる公開鍵でプリマスターシークレットを暗号化してサーバに送信する
    3. Certificate Verify
    4. Change Cipher Spec
      • Client Key Exchangeで生成したプリマスターシークレットと、サーバとクライアントが生成した乱数からマスターシークレットを生成する
      • Recordプロトコルは、Handshakeプロトコルからマスターシークレットを受け取り、マスターシークレットを元にMAC鍵、暗号鍵、ブロック暗号のCBCモードで使う初期ベクトル(IV)を生成する
      • Change Cipher Specプロトコルは、使用する暗号アルゴリズムの準備が整ったことをサーバに通知する
    5. Finished
      • 鍵交換と認証処理が成功したことをサーバに通知する
      • Change Cipher Specで生成した鍵を使い、メッセージを暗号化してサーバに送信する
  4. クライアント <= 【サーバ】
    1. Change Cipher Spec
      • Client Key Exchangeでクライアントから受領したプリマスターシークレットを秘密鍵で復号する
      • 復号したプリマスターシークレットと、サーバとクライアントが生成した乱数からマスターシークレットを生成する
      • Recordプロトコルは、Handshakeプロトコルからマスターシークレットを受け取り、マスターシークレットを元にMAC鍵、暗号鍵、ブロック暗号のCBCモードで使う初期ベクトル(IV)を生成する
      • Change Cipher Specプロトコルは、使用する暗号アルゴリズムの準備が整ったことをクライアントに通知する
    2. Finished
      • 鍵交換と認証処理が成功したことをクライアントに通知する
      • Change Cipher Specで生成した鍵を使い、メッセージを暗号化してクライアントに送信する
      • SSL/TLSのセッションとコネクションが確立した。以降、アプリケーションによる暗号化通信が行われる

暗号スイートの選択

セッションとコネクション

セッション

  • マスターシークレットが共有される単位で作成される

コネクション

  • セッションに従属して作成される(1つのセッションに複数のコネクションが作成される)
  • 同一セッションのコネクションは、マスターシークレットを共有するが、MAC鍵、暗号化鍵、初期ベクトル(IV)は別々の乱数を使ってコネクションごとに作成される
  • コネクションはTCP/IP階層のトランスポート層にあたる
  • クライアント側はコネクションごとに異なるポート番号が割り当てられる

SSL通信の高速化

  • SSL Session Cache

SSL/TLSの拡張仕様

  • SNI -Server Name Indication

常時SSL

セキュリティ上の攻撃

  • バージョンロールバック攻撃
    • 古いバージョンのSSL/TLSを意図的に使わせることで、脆弱性をついて暗号化通信の解読等を試みる攻撃
    • OpenSSLのVer.0.9.8以前のバージョンには、SSL2.0を受け入れる脆弱性がある

SSL/TLSに関係する脆弱性

FREAK

  • 2015年3月に公開された脆弱性
  • Webブラウザ等が輸出グレードが弱い暗号強度のRSAをサポートしていることに起因した脆弱性
  • ダウングレード攻撃により、暗号化通信の解読等を試みる攻撃に悪用された

HeartBleed

BEAST攻撃

  • SSL3.0、TLS1.0 の脆弱性
  • CBCモードの初期化ベクトルの使い方が悪用され、Cookieの情報が窃取される脆弱性

POODLE

ツール

  • sslscan ※SSLの強度を調査する
    sslscan <https://url>

ガイドライン

関連サイト

関連用語