TLS
読み:ティーエルエス
外語:TLS: Transport Layer Security

 セキュリティを要する通信で用いられる、代表的な通信プロトコルの一つ。古くはSSL(Secure Sockets Layer)と呼ばれてきた。「TLS/SSL」や「SSL/TLS」のように併記されることも多い。
目次

概要

由来
 米Netscape Communicationsにより、SSLとして開発された。
 SSLは3.0まである。以降はIETFのワーキンググループでの仕様策定に移行し、名前も「TLS」に改められRFCが発行されるようになった。
 その後も、SSLの名が広く普及していることからTLSもSSLと俗称されることが多くあり、「TLS/SSL」や「SSL/TLS」のように併記されることも多かった。
 SSLはバージョン1.0と2.0は既に脆弱性で消えていたが、2014(平成26)年10月14日、GoogleのセキュリティチームによりSSL 3.0の深刻な脆弱性「POODLE」が発見されたことでSSLは全バージョンに脆弱性が発覚、これをもってSSLは現役を退いた。
 現行のバージョンは全てTLSであるが、以下は、特にバージョンの区別をしない場合、SSLと書かれた場合にはTLSも含む。

機能
 SSL/TLSは、次の機能を実現する。
 暗号化によって安全な通信を実現すると共に、SSL証明書の認証による通信相手の実在性を保証する。

特徴
 SSLを用いた代表的なアプリケーションプロトコルに、次のようなものがある。

技術

鍵の交換と暗号化
 認証は公開鍵暗号方式で行ない、通信の暗号化は慣用暗号方式(共通鍵暗号方式)で行なう。
 二種類の暗号を併用しているのは理由がある。公開鍵暗号方式は優れた技術だが、慣用暗号方式に比べて処理が複雑で、計算に時間がかかる。これをWebのデータ転送用に使うのは些か無理がある。
 しかし、慣用暗号方式を通信に使うとなると、そのの受渡方法に困ることになる。通信に危険があるから暗号が必要なのであって、その通信で生の鍵を送るのでは暗号の意味がない。
 そこで、公開鍵暗号方式で慣用暗号方式の鍵を暗号化して送信し、実際の通信はその鍵を使って慣用暗号方式で行なう。両者を上手く組み合わせ、高速で安全な暗号化を実現している。
 なお、使われる鍵はサーバーとクライアント双方で作られた乱数を組み合わせて作られる。

完全性の確認
 伝送データの完全性は、データをメッセージダイジェスト関数(ハッシュ関数)に通して得られるMAC(Message Authentication Code)と呼ばれる数値を比較する。これは、指紋(フィンガープリント)とも呼ばれる。
 データに変更があればこの数値が変化するため、改竄を検知することができる。

バージョン

一覧
  1. SSL 1.0
  2. SSL 2.0
  3. SSL 3.0
  4. TLS 1.0 (SSL 3.1) RFC 2246+RFC 3268
  5. TLS 1.1 (SSL 3.2) RFC 4346
  6. TLS 1.2 (SSL 3.3) RFC 5246
  7. TLS 1.3 (SSL 3.4) (策定中)

各バージョンの特徴

SSL 1.0
 最初のバージョン。
 脆弱性があったことから実装されなかった。

SSL 2.0
 Netscape Navigator 1.0で採用されたバージョン。
 脆弱性があったことから、現在では多くのWebブラウザーの初期設定でSSL 2.0が無効となり、Webサイト側もSSL 3.0へと移行することになった。

SSL 3.0
 Netscape Navigator 2.0で採用されたバージョン。
 広く使われたが、脆弱性「POODLE」が発見されたため遂に終焉、Webサイト側もSSL 3.0を無効化し、TLS 1.0以降へと移行することになった。

TLS 1.0
 IETFによる最初のバージョン。仕様の整理などをし、RFC 2246として標準化された。
 プロトコル内部で使われるバージョン番号は、SSL 3.1である。
 一部TLS 1.0/1.1実装にもPOODLE脆弱性があり、またDHE_EXPORTに対応する実装には「Logjam」脆弱性が発見された。
 Windows XPが対応するバージョンであり、広く使われているが、Google Chrome 45がPOODLE脆弱性を理由にTLS 1.0への安全でないフォールバックを中止したため接続できないサイト(クロネコヤマトなど)が少なからず登場し、問題となった。

TLS 1.1
 暗号化にAESを正式導入するなどしたバージョンで、RFC 4346として標準化された。
 Windows XPが対応していないこともあり、まだあまり使われていない。
 Google Chrome、Internet Explorer 8、Opera、Mozilla Firefoxなどは対応している。
 プロトコル内部で使われるバージョン番号は、SSL 3.2である。

TLS 1.2
 ハッシュにSHA-256が追加されたバージョンで、RFC 5246として標準化された。
 プロトコル内部で使われるバージョン番号は、SSL 3.3である。
 Google Chrome 30、Internet Explorer 11、Apple Safari 7、Opera 10、Mozilla Firefox 27.0、などで対応している。

TLS 1.3
 策定中のバージョンで、HTTP/2の要求仕様を満たすもの。
 TLS 1.2にある機能のうち、通信途中での再ネゴシエート、データ圧縮機能、ストリーム暗号、およびCBCモードのブロック暗号を廃止し、暗号 TLS_RSA_WITH_3DES_EDE_CBC_SHA 対応を必須とする計画である。
 TLS_RSA_WITH_3DES_EDE_CBC_SHA は、鍵交換と認証にRSA、通信暗号に3DES(EDE)のCBCモード、同一性確認(改竄検知)にSHA-1を用いるものである。
 HTTP/2では、より強力な TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 も必須であるが、TLS 1.2以降で対応し、実装については実装依存となる。

アルゴリズム

セッション鍵交換
 セッション鍵交換には、主に次のどちらかが使われる。
 DHが先に特許切れとなったことから、DHが広く使われることになった。

認証
 公開鍵暗号に基づく認証を行なう(○=対応、◎=実装必須、×未対応)。
 SSL 2.0SSL 3.0TLS 1.0TLS 1.1TLS 1.2
RSA
DSA×

暗号
 各バージョンで使われているセッション暗号化用の慣用暗号方式は次の通り(○=対応、◎=実装必須、×未対応)。3.0以降は暗号化なしに対応している。
 SSL 2.0SSL 3.0TLS 1.0TLS 1.1TLS 1.2
暗号化なし×
RC2×
RC4
IDEA×
DES×
3DES
AES××
 TLS 1.0にはAESはなく、RFC 3268で追加された後、TLS 1.1から正式に導入された。TLS 1.2では劣化したアルゴリズムが削除されAES必須となったが、DESとIDEAが削除された旨はRFC 5469に書かれている。
 各バージョンごとに導入または廃止されたもの以外に、独自のRFCで導入された暗号化アルゴリズムもある。

同一性確認(改竄検知)
 改竄の有無はハッシュが使われる。
 SSL 3.0からSHA-1に対応し、TLS 1.2からSHA-2(SHA-256)に対応した。TLSの後のバージョンでは、SHA-2が対応必須となると見込まれる。
 各バージョンで使われているハッシュ関数は次の通り(○=対応、◎=実装必須、×未対応)。
 SSL 2.0SSL 3.0TLS 1.0TLS 1.1TLS 1.2
MD5
SHA-1×
SHA-256××××

問題点

証明について
 正しく用いれば、SSL証明書が本物のWebサイトかどうかを証明してくれる。
 個人情報や、クレジットカード番号の入力などは、暗号化だけでなく、その先が本物かどうかも重要な要素であるため、証明は大切である。
 しかし、SSL証明書の発行は非常にお粗末なのが実態で、挙句の果てには自分で自分を証明(?)したりした信頼性0のSSL証明書、通称「オレオレ証明書」を使うサイトまで登場した。
 かくして、SSLの仕様上は「本物のSSL証明書」を使った偽サイト「フィッシングサイト」も登場することとなり、問題となった。

後継
 SSLそのものの後継はTLSである。TLSは現役であり、後継になるものはない。
 SSL証明書の信頼性がなくなったため、現在は「EV証明書」も使われる。

再検索