Transport Layer Security
テンプレート:Infobox Transport Layer Security(トランスポート・レイヤー・セキュリティー、TLS)は、セキュリティーを要求される通信のためのプロトコルである。また、当プロトコルを発表したIETFの作業部会の名前でもある。歴史的な理由により、当プロトコルは、しばしば(特に区別する場合を除いて)Secure Sockets Layer (SSL) とも呼ばれている。これは、TLSの元になったプロトコルがSSLだったこと[1]と、SSLという名称が広く普及していることによる。以下においては、特にことわりのないかぎり、作業部会ではなく、プロトコルのほうを指す。
TLSは、コネクション型のトランスポート層プロトコルの上位に位置し、通常はTCPがラップする形で利用される。特にHTTPでの利用を意識して設計されているが、アプリケーション層の特定のプロトコルには依存しない。
バージョン
SSL 1.0
ネットスケープコミュニケーションズ社がSSLの最初のバージョンとして設計していたが、設計レビューの段階でプロトコル自体に大きな脆弱性が発見され、破棄された。このため、SSL 1.0を実装した製品はない。
SSL 2.0
ネットスケープコミュニケーションズ社はSSL 1.0の問題を修正して再設計し、1994年にSSL 2.0として発表した。また、同社のウェブブラウザであるNetscape Navigator 1.1においてSSL 2.0を実装した。
その後、SSL 2.0にもいくつかの脆弱性が発見され、SSL 3.0において修正された。SSL 2.0の脆弱性のひとつは、ネゴシエーションの情報を改竄すると、提示する選択肢のうち最弱のアルゴリズムを使わせることができ(ダウングレード攻撃)、改竄を受けたことを検出できないというものである。さらに悪いことに、この脆弱性を利用すると、双方がSSL 3.0をサポートしていてもSSL 2.0で接続させることさえ可能になる。
SSL 3.0ではSSL 2.0との互換性を提供するにあたり、乱数領域を使った細工を加えることで、このような攻撃を検出する仕組みを組み込んだ。しかしこの細工が無効にされているサーバ環境も存在し、クライアントから見るとSSL 2.0を無効にしない限りこの脆弱性の影響を受ける可能性を否定できない[2]。SSL 3.0以降に対応した実装が十分に普及したものとして、Internet Explorer 7やMozilla Firefox 2、Opera 9などは、初期状態でSSL 2.0を無効にしている[3][4][5]。この決定を受け、SSL 2.0しか対応していなかったサーバでも、SSL 3.0以降へ対応する動きが広まっている[6]。
SSL2.0にはチェーン証明書がない。 したがって、ルートCAから発行したSSLサーバ証明書しか使うことができない。
SSL 3.0
ネットスケープコミュニケーションズ社はSSL 2.0の問題を修正するとともに機能追加を行い、1995年にSSL 3.0を発表した。また、Netscape Navigator 2.0においてSSL 3.0を実装した。SSL 3.0の仕様書については、2011年にIETFから歴史的文書という扱いでRFC 6101として公開された。
TLS 1.0
IETFのTLSワーキンググループはRFC 2246としてTLS1.0を公表した。TLS 1.0の標準化作業は1996年に開始され、年内に完了する予定だったが、いくつかの問題に阻まれ、公表は1999年まで遅延した。
TLS 1.0が提供する機能はSSL 3.0とあまり変わらないが、アルゴリズムやルートCAの自己署名証明書の取扱いなどの仕様の詳細が変更されたことに加え、これまであまり実装されていなかった選択肢のいくつかが必須と定められた。このため、TLS 1.0を実装した製品が普及するまでには、さらに数年を要した。
なおTLS 1.0はSSL 3.0より新しい規格であることを示すため、ネゴシエーションにおけるバージョン番号は3.1となっている。
TLS 1.1
2006年にRFC 4346としてTLS 1.1が制定された。TLS 1.0からの変更点は、新しく発見された攻撃手法に対する耐性の強化が中心である。特にCBC攻撃に対する耐性を上げるため、初期化ベクトルを明示的に指定することにし、さらにパディングの処理も改善された。また、予期せぬ回線クローズ後に、セッションを再開できるようになった。共通鍵暗号アルゴリズムとしてAESが選択肢に加わった[7]。
ネゴシエーションにおけるバージョン番号は3.2となっている。
TLS 1.2
2008年8月にRFC 5246としてTLS 1.2が制定された。ハッシュのアルゴリズムにSHA-256が追加されたほか、ブロック暗号について、従来のCBCモードだけではなく、GCM、CCMといった認証付き暗号を用いたテンプレート:仮リンクによるcipher suiteが利用可能となった。また、AESに関する記述がRFC 5246自体に含まれるようになった。
ネゴシエーションにおけるバージョン番号は3.3となっている。
テンプレート:AnchorsTLS 1.3(草稿)
2014年7月現在、TLS 1.3が新たなTLSのバージョンとして提案されている[8][9]。TLS 1.2からの変更点としては、データ圧縮の非サポート、forward secrecyではないcipher suiteおよびテンプレート:仮リンクではないcipher suite(CBCモードのブロック暗号やRC4を用いたもの)の廃止が挙げられる。
ネゴシエーションにおけるバージョン番号は3.4となる予定。
提供する機能
TLSは、認証・暗号化・改竄検出の機能を提供する。具体的なアルゴリズムはそれぞれ複数の選択肢が定義されており、TLS通信の開始時に行われるネゴシエーション時に、双方が許容するアルゴリズムの中から選択される。
選択肢によっては、攻撃への耐性の強度が大きく変化する場合もある(極端な例だが、双方が同意すれば「暗号化なし」を選択することもできる)。許容できない選択肢はあらかじめネゴシエーションの候補から外しておいたり、また望ましくないアルゴリズムが選択された場合はユーザーに警告したりといった対策が考えられる。一般に公開されている製品は、実際にこれらの対策が取られている。
なお、選択できるアルゴリズムはTLS/SSLのバージョンによって異なる。また、認証、暗号化、改竄検出の3つをひとまとめにして選択肢が定義されており、しかも全ての組み合わせが網羅されているわけではないので、同時に利用できない組み合わせも存在する。
認証・鍵共有
TLSは公開鍵証明書に基づく認証および鍵共有を提供する。使用する署名アルゴリズムの選択肢は以下のとおりである。
アルゴリズム | SSL 2.0 | SSL 3.0 | TLS 1.0 | TLS 1.1 | TLS 1.2 |
---|---|---|---|---|---|
テンプレート:Partial | テンプレート:Yes | テンプレート:Yes | テンプレート:Yes | テンプレート:Yes | テンプレート:Yes |
テンプレート:Partial | rowspan="2" ! テンプレート:No | rowspan="2" ! テンプレート:Yes | rowspan="2" ! テンプレート:Yes | rowspan="2" ! テンプレート:Yes | rowspan="2" ! テンプレート:Yes |
テンプレート:Yes | |||||
テンプレート:Partial | rowspan="2" ! テンプレート:No | rowspan="2" ! テンプレート:No | rowspan="2" ! テンプレート:Yes | rowspan="2" ! テンプレート:Yes | rowspan="2" ! テンプレート:Yes |
テンプレート:Yes | |||||
テンプレート:Partial | rowspan="2" ! テンプレート:No | rowspan="2" ! テンプレート:Yes | rowspan="2" ! テンプレート:Yes | rowspan="2" ! テンプレート:Yes | rowspan="2" ! テンプレート:Yes |
テンプレート:Yes | |||||
テンプレート:Partial | rowspan="2" ! テンプレート:No | rowspan="2" ! テンプレート:No | rowspan="2" ! テンプレート:Yes | rowspan="2" ! テンプレート:Yes | rowspan="2" ! テンプレート:Yes |
テンプレート:Yes | |||||
テンプレート:No | テンプレート:No | テンプレート:Yes | テンプレート:Yes | テンプレート:Yes | テンプレート:Yes |
テンプレート:No | テンプレート:No | テンプレート:No | テンプレート:Yes | テンプレート:Yes | テンプレート:Yes |
TLSの一般的な用途では、サーバだけが証明書を提示し、クライアントがその正当性を確認する。オプションでクライアント認証も可能であり、必要な場合にはサーバがクライアントに対して証明書の提示を求める。
なりすましを防ぐために、証明書には認証局 (CA; Certification Authority) による電子署名が必要である。また、サーバ証明書には発行先サーバのホスト名が書き込まれており、クライアントは自分が接続しようとしているサーバのホスト名と一致するかどうか確認することができる。この確認を行わない場合、攻撃者はサーバAの管理者でなくても、自分が管理するサーバBの正当な証明書を取得して、その証明書を使ってサーバAを名乗ることができてしまう。
証明書に関する問題については「#証明書の正当性」の節を参照。
なお証明書には有効期限が設定されている。暗号理論およびコンピュータの計算能力は日々進歩しており、現在安全とみなされる技術であっても長年にわたって安全性を保てる保証はない。また現代暗号は解読に莫大な計算量が必要となる設計ではあるが、裏を返せばそれだけの計算量をこなせば解読できてしまうと言える。このため、一定期間ごとに証明書を再発行し、鍵を変更するとともに必要に応じて使用するアルゴリズムも更新している。
共通鍵は、クライアントとサーバの双方から提供される乱数に基づいて決定される。双方で生成した乱数を組み合わせて使用するため、リプレイ攻撃では同一の共通鍵を得ることはできない。共通鍵は4つセットで生成し、クライアントから送信するデータの暗号化用とサーバから送信するデータの暗号化用にひとつずつ割り当てる(残り2つは後述するハッシュ値の生成に使われる)。
鍵の盗聴を防ぐ仕組みとして、サーバ証明書がRSA暗号を用いて署名されている場合は、クライアントから送る鍵情報の一部をサーバの公開鍵で暗号化することができる。サーバの秘密鍵を知らない部外者は、この情報を復号できない。あるいは鍵共有を公開鍵のみに頼らず、ディフィー・ヘルマン鍵共有 (DH)、楕円曲線ディフィー・ヘルマン鍵共有 (ECDH) のような鍵共有アルゴリズムを用いることも可能である。さらに、共有アルゴリズムで共有される鍵を一時的な (ephemeral) ものとすることで、将来万が一サーバの秘密鍵が判明したとしてもそれだけではセッションキーを割り出せない、Forward secrecyを実現することもできる (DHE、ECDHE)。
DHおよびECDHでの鍵共有では、サーバ証明書を利用せずに匿名での鍵共有を行う DH_anon、ECDH_anon と呼ばれる暗号スイートが存在するが、中間者攻撃に対して脆弱であることから安全とはみなされていない。
暗号化
共通鍵暗号に基づく暗号化を提供する。以下のアルゴリズムが選択肢として定義されている。
AES CBCはTLS 1.0を定義するRFC 2246には含まれていないが、RFC 3268で追加された。TLS 1.1を定義するRFC 4346からはRFC 3268が参照されており、さらにTLS 1.2では定義であるRFC 5246にAES CBCに関する記述が取り込まれた。また、個別のRFCによってCamellia CBC(RFC 4132、RFC 5932、RFC 6367)、SEED CBC(RFC 4162)およびテンプレート:仮リンク CBC(RFC 6209)が、認証付き暗号によるAES GCM(RFC 5288)、AES CCM(RFC 6655)、Camellia GCM(RFC 6367)およびおよびテンプレート:仮リンク GCM(RFC 6209)が追加されている。IDEA CBC、DES CBCはTLS1.2で廃止された(RFC 5469に解説がある)。
ブロック暗号のCBCモードでの利用については、TLS 1.0以前においてBEAST攻撃と呼ばれる攻撃が可能であることが明らかとなっており、クライアント側、サーバ側での対応が必要とされている。TLS 1.1以降ではこの攻撃への根本的な対処として初期化ベクトルを明示的に指定し、パディングの処理が改善された。ブロック暗号であってもGCM、CCMなどの認証付き暗号を用いる場合にはこれらの攻撃を受けない。
ストリーム暗号であるRC4は前述のBEAST攻撃を受けることはないが、RC4には仕様上の脆弱性が存在し(RC4攻撃)、2013年現在では、NSAのような機関であればTLS/SSLを利用したとしてもRC4を解読可能であるとの疑惑がある[10]。MicrosoftではRC4を無効化することを推奨している[11][12][13]。Googleによって、ストリーム暗号であるChaCha20と認証のためのPoly1305を組み合わせたChaCha20+Poly1305が提唱されている[14]。
SSLが設計された当時は、アメリカ合衆国によって高強度暗号アルゴリズムの輸出が規制されていた。そのため、全世界で共通して利用できるアルゴリズムとして、DES・RC2・RC4に関して暗号強度を40ビットに制限したものが導入されていた。これらはTLS 1.1以降では利用が禁止されている。
また、鍵共有のみを行い暗号化は行わないこと (NULL) も可能であるが、平文でのやりとりとなることから安全とはみなされていない。
改竄検出
TLSでデータレコードを送信する際には、レコードのシーケンス番号、共通鍵、そしてデータからメッセージ認証コード (MAC) を算出し、それをレコードに付加して送信する。ハッシュ関数に基づくMACであるHMAC(MD5、SHA-1あるいはSHA-256/384との組み合わせ)あるいはテンプレート:仮リンク(GCMやCCMなどの認証付き暗号の場合)が用いられる。共有秘密鍵を知らない攻撃者は、データを改竄してもそれに対応するMACを生成できない。したがって受信者は、手元で送信者と同様にMACの計算を行ない、同一の値が得られるかを確認することで改竄の有無を検出できる。一部のレコードを重複して送りつけるリプレイ攻撃は、シーケンス番号が異なるため、やはりMACで検出できる。また、(アプリケーション層プロトコルによる代替手段がない限り)通信の終了を知らせるレコードを送り合うことになっているため、これが送られないうちに接続が切断された場合は、強制切断攻撃を受けたと判断することができる。
TLS/SSLの各バージョンで使用できる改竄検出の選択肢は以下のとおりである:
アルゴリズム | SSL 2.0 | SSL 3.0 | TLS 1.0 | TLS 1.1 | TLS 1.2 |
---|---|---|---|---|---|
HMAC-MD5 | テンプレート:Yes | テンプレート:Yes | テンプレート:Yes | テンプレート:Yes | テンプレート:Yes |
HMAC-SHA1 | テンプレート:No | テンプレート:Yes | テンプレート:Yes | テンプレート:Yes | テンプレート:Yes |
HMAC-SHA256/384 | テンプレート:No | テンプレート:No | テンプレート:No | テンプレート:No | テンプレート:Yes |
テンプレート:仮リンク | テンプレート:No | テンプレート:No | テンプレート:No | テンプレート:No | テンプレート:Yes |
アプリケーション層プロトコルへの適用
TLSは特定のアプリケーション層プロトコルに依存しないため、HTTP以外にも多くのプロトコルにおいて採用され、クレジットカード情報や個人情報、その他の機密情報を通信する際の手段として活用されている。
既存のアプリケーション層プロトコルでTLSを利用する場合、大きく2つの適用方式が考えられる。まずひとつは、下位層(通常はTCP)の接続を確立したらすぐにTLSのネゴシエーションを開始し、TLS接続が確立してからアプリケーション層プロトコルの通信を開始する方式である。もうひとつは、まず既存のアプリケーション層プロトコルで通信を開始し、その中でTLSへの切り替えを指示する方式である。
前者はアプリケーション層のプロトコルをまったく変更しなくてすむことが利点である。その反面、既存のポート番号とは別にTLS対応用のポート番号が必要となる。実態としては、SSL/TLSの最初の適用例であるHTTPSをはじめとして、前者の方式を使うことが多い。ただし、この方式はバーチャルホストを構成する際に問題となる可能性がある。詳細は#バーチャルホストの節を参照。
実装
ウェブサイト
プロトコル | ウェブサイトにおけるサポート[15] | セキュリティ[15][16] |
---|---|---|
SSL 2.0 | 20.5% (−0.6%) | テンプレート:No |
SSL 3.0 | 98.5% (−0.2%) | テンプレート:Partial |
TLS 1.0 | 99.3% (±0.0%) | テンプレート:Partial |
TLS 1.1 | 38.4% (+2.4%) | テンプレート:Partial |
TLS 1.2 | 40.8% (+2.3%) | テンプレート:Partial |
- 注
ウェブブラウザ
2014年7月現在、主要なウェブブラウザの最新版ではSSL 3.0、TLS 1.0、1.1、1.2のすべてが既定で有効であり、既知の脆弱性への対応も済んでいる。しかし、過去のバージョンのOS向けなど、最新ではないがサポートが継続しているウェブブラウザのいくつかのバージョンではそうではない。
- TLS 1.1、1.2に対応しているが既定で無効:Mozilla Firefox ESR 24(延長サポート版)、Internet Explorer 8–10(Windows 7向け)、IE 10(Windows 8向け)、Opera 12(Presto版)
- TLS 1.1、1.2に未対応:Internet Explorer 7–9(Windows Vista向け)、Safari 6(OS X 10.7、10.8向け)
- 既知の脆弱性に未対応:Safari 6(OS X 10.7向け)
バージョン、プラットフォーム | 状況 |
---|---|
灰色 | 混在 |
赤色 | 過去のリリース:開発終了 |
黄色 | 過去のリリース:サポート継続 |
緑色 | 現在のリリーステンプレート:Refn |
- 注
ライブラリ
テンプレート:Main TLS/SSLライブラリの多くはオープンソースソフトウェアである。
- 注
課題
バーチャルホスト
TLSは、TCP/IPネットワークでホスト名ベースのバーチャルホストを構成する際に問題となる。TCP/IPでは通信を開始する前にホスト名を解決し、実際にはIPアドレスとポート番号で接続先を識別している。このためTLSのネゴシエーションの時点では、バーチャルホストのうちどのホスト名を期待しているのか判断できず、ホスト名ごとに異なるサーバー証明書を使い分けることができない。
TLS(SSL)の拡張機能を定義するRFC 4366では、ネゴシエーション時にホスト名を伝える手段としてServer Name Indication(SNI)を提供している。TLS 1.2を定義するRFC 5246では、サーバ証明書を選択する際にこの情報を使うよう言及している。
逆に、証明書を使い分けず、1種類の証明書を使い回す方法も考えられる。X.509証明書のフォーマットについて記述したRFC 5280によれば、発行先ホスト名を保持するsubjectAltNameはひとつの証明書に複数のエントリを作成できる。しかし認証局が実際にそのような証明書を発行するかどうかは、別の問題である。認証局はすべてのホスト名に対して証明書の申請者が正当な管理者であることを確認しなければならないため、証明書発行の負荷は大きくなる。
また、発行先ホスト名にワイルドカードを使う方法も考えられる。HTTP over SSL/TLS(HTTPS)を定義するRFC 2818は、ワイルドカードの適用について記述している。バーチャルホストの対象が、ひとつのドメイン名の中のホストであれば、この方法で対応できる場合もある。
どの方法も実装によって対応状況にバラつきがあり、環境によっては使えない可能性がある。なおIPアドレスベースのバーチャルホストであれば、ネゴシエーションの時点で確実にどのバーチャルホストを期待しているか判断できるので、問題なく証明書を使い分けることができる。
セキュリティー上の考察
TLS適用の有無と使用アルゴリズムの強度
TLSを導入さえすればセキュリティーが確保できるという認識は誤っている。TLS通信は、平文での通信に比べて(主に暗号化・復号時)余分な計算機能力を使用するため、本当に必要なとき以外は使用しないことが多い。システムはデータの重要性を判断することができないので、TLSが必要なときに正しく使われているかどうかは、利用者自身が判断しなければならない。
特にWorld Wide Webでは、ハイパーリンクによるページ遷移を繰り返して処理を行うため、どの通信でSSL/TLSが使用されているか把握することが重要になる。多くのウェブブラウザは、画面のどこかに南京錠のアイコンを表示したり、アドレスバーの色を変化させたりして、利用者に情報を提供している。
また実際に使用するアルゴリズムは双方のネゴシエーションによって決まるため、TLSを使用していても、システムとして許容はするが推奨できないアルゴリズムが採用される可能性がある。このような場合もダイアログメッセージなどを使って利用者に警告すべきである。
証明書の正当性
TLSは公開鍵証明書を用いて認証を行い、なりすましを極力排除しようとする。しかしシステムの自動的な対応には限界があり、すべてのなりすましを検出できるわけではない。
公開鍵証明書には認証局による電子署名が与えられる。その署名の正当性を評価するためには認証局の証明書が必要であり、最終的にはルート証明書と呼ばれる一群の証明書に行きつく。各システムは、認証局の証明書として信用できるルート証明書を、あらかじめ保持している。認証局は自身の秘密鍵を厳重に秘匿し、また証明書の発行にあたっては正当なサーバ管理者かどうか確認することが求められる。これらが保証されない認証局のルート証明書を組み込むことは、TLSにおける認証機能を破綻させることになる。仮に認証局自体は安全でも、入手したルート証明書が本当に意図する認証局のものかどうか判断することは難しいという点も注意すべきである。
TLSで認証を行うためには、認証局の署名に加えて、証明書の発行先を確認する必要がある。確認しない場合、サーバAの管理権限を持たない者がサーバBとして正当な証明書を取得し、その証明書を使ってサーバAを名乗ることができてしまう。TLS用のサーバ証明書には発行先サーバのホスト名が書き込まれており、クライアントは自分が接続しようとしているサーバのホスト名と一致するかどうか確認することができる。
現実には「正当な」サーバであっても、これらの検証において「問題がある」と判断される証明書を使って運用されているサーバが少なからず存在する。ある著名なセキュリティ研究者はこのような証明書を、オレオレ詐欺をもじって「オレオレ証明書」と呼んで批判している[51]。
この検証は、システムに指示された接続先のホスト名と実際に接続した先のホスト名が一致することを検証しているのであり、利用者が意図する接続先とは必ずしも一致しないことに注意する必要がある。
例として、利用者が意図する接続先であるサーバAがホスト名www.example.comでサービスを提供しており、攻撃者はサーバBおよびホスト名www.example.orgを取得している場合を考える。仮に攻撃者がDNS偽装に成功して、www.example.comへの接続をサーバBに導くことができたとしても、www.example.comのサーバ証明書を入手できないので、TLS接続を提供することはできない。しかし攻撃者も、www.example.orgのサーバ証明書を入手することはできる。したがって、サーバAに接続しようとしている利用者を、www.example.comではなくwww.example.orgへ接続させることができれば、クライアントからは正当な証明書を持ったサーバとしか見えない。
上記のような例も考慮した上で、利用者が意図している接続先かどうかを判断するためには、以下の2つの条件を満たす必要がある。
- 利用者は意図する接続先の正しいホスト名を知っている。
- 利用者は、現在システムに指示されている接続先が、自分の知っている正しいホスト名と一致していることを確認できる。
2は、情報処理推進機構(IPA)が公開している「安全なウェブサイトの作り方」[52]という文書の「フィッシング詐欺を助長しないための対策」に対応する。
乱数の品質
他の多くの近代暗号と同様に、TLSもまた、暗号としての強度は乱数の品質に依存している。桁数(bit長)の大きな暗号は推測が難しいという前提が暗号強度の根拠となっている。(これは,公開鍵暗号システムにも言える)もし何らかの理由で乱数の出現確率が大きく偏るようなことがあれば、総当たり攻撃で解読される可能性が上昇する。通常は、これは実装の問題に起因している。
古い例では、Netscapeの初期の実装における乱数生成の脆弱性がある。プロセスIDや時刻から乱数を生成していることが判明し、これらの情報を取得できる場合には総当たり攻撃の所要時間が大幅に短くなるという問題があった[53]。
2008年5月15日にはDebianが脆弱性に関する報告[54]を発表した。OpenSSLライブラリのパッケージメンテナンスの際に誤ったパッチを導入した結果、鍵生成に適切な乱数が使われず僅か65536(=216)通りの予測可能な物が生成されてしまった事を明らかにした[55](なお、この問題はOpenSSLそのものの脆弱性ではない)。この影響を受けるのはDebian sargeより後のバージョンのDebianと、それから派生したDamn Small Linux, KNOPPIX, Linspire, Progeny Debian, sidux, Ubuntu, UserLinux, Xandrosである。脆弱性のあるバージョンのOpenSSLは2006年9月17日に公開された。安定バージョンがリリースされた2007年4月8日以降は確実に影響を受ける。脆弱性のあるバージョンのOpenSSLで作られた鍵全て、SSH 鍵、OpenVPN 鍵、DNSSEC 鍵、X.509 証明書を生成するのに使われる鍵データ、および SSL/TLS コネクションに使うセッション鍵等が影響を受ける。これらの鍵は65536通り全てを総当たり攻撃で試すだけでいずれの鍵が使われているか解読可能であり(SSHでは20分間で解読できたと報告されている)、また脆弱な鍵がインストールされたDebianを含む全てのオペレーティングシステムにおいて緊急の対応が必要であると専門家が注意を呼びかけている。生成された鍵に問題があるため、Debian GNU/Linuxで生成した鍵をMicrosoft Windowsのような非UNIXシステムに導入しているような場合も、この脆弱性の影響を受ける。具体的対応については、Debianの報告の他、JPCERT/CCの勧告[56]等に従うべきである。
既知の攻撃
TLS/SSLに対する攻撃のうち主なものを以下に挙げる。
再ネゴシエーション脆弱性
2009年11月4日、SSL 3.0以降の再ネゴシエーション機能を利用して、クライアントからのリクエストの先頭に中間者が任意のデータを挿入できるという脆弱性が報告された[57][58]。プロトコル自体の脆弱性であり、すべての実装が影響を受ける。
この脆弱性への簡単な対策は、サーバにおいて再ネゴシエーションを禁止することである。根本対応としては、TLS Extensionを使った安全な再ネゴシエーション手順がRFC 5746として提案されている。この脆弱性を利用した中間者攻撃では、サーバがRFC 5746に対応しない限りクライアントは再ネゴシエーションが発生したことを検出できないので、クライアント側のみで対応することは不可能である。
バージョンロールバック攻撃
False Start[59](Google Chromeで有効化された[60])やSnap StartといったTLS/SSLを高速化する変法は、攻撃者が一定条件下において本来利用可能なTLS/SSLのバージョンよりも低いバージョンでTLS/SSL接続を行うよう仕向けること[61]や、クライアントからサーバへ送られる利用可能なCipher Suiteの一覧を改竄し、より低い暗号強度やより弱い暗号化アルゴリズム・鍵交換アルゴリズムを使用するよう仕向けること[62]が可能であると報告されている。さらに、特定の環境においては、攻撃者がオフラインで暗号化に用いられた鍵を回復し、暗号化されたデータにアクセスすることも可能であることがAssociation for Computing Machinery (ACM) のコンピュータセキュリティカンファレンスで報告された[63]
BEAST攻撃
2011年9月23日、暗号研究者のThai DuongとJuliano Rizzoが、BEAST (Browser Exploit Against SSL/TLS)[64]と呼ばれるTLS 1.0におけるブロック暗号のCBCモードの取り扱いに関する脆弱性のコンセプトをJavaアプレットの同一生成元ポリシー違反によって実証した[65][66]。この脆弱性そのものは2002年にPhillip Rogawayによって発見されていた[67]が、2011年の発表までは実用的なエクスプロイトは報告されていなかった。
2006年に発表されたTLS 1.1においてBEASTへの脆弱性は修正されていたが、2011年の実証までTLS 1.1への対応はクライアント、サーバの双方でほとんど進んでいなかった。
MozillaはTLS/SSLのためのライブラリであるNetwork Security Services (NSS) に対して、BEASTに類似した攻撃に対するTLS 1.0以前で有効な対応策を2011年に施した。NSSは、Mozilla FirefoxなどのMozillaのソフトウェアだけでなく、Google Chromeなど他のブラウザでも用いられているライブラリである。NSSでのTLS 1.1以降への対応は2012年までずれこみ、FirefoxでTLS 1.1以降を既定で利用可能となったのは2014年のバージョン27である。
Microsoftは2012年1月10日にSecurity Bulletin MS12-006を発表し、Windowsで用いられているライブラリであるSChannelに対して修正を加えた[68]。Windows 7以降では、TLS 1.1以降が利用可能である。
Apple製品では、OS Xでは10.9においてTLS 1.1以降への対応およびTLS 1.0以前におけるBEAST脆弱性への対応がなされているが、10.8以前では、TLS 1.1以降への対応、TLS 1.0以前におけるBEAST脆弱性への対応のいずれも行われていない。iOSでは、5以降ではTLS 1.1以降が利用可能であるが、TLS 1.0以前におけるBEAST脆弱性への対応は行われていない。iOS 7ではじめてTLS 1.0以前におけるBEAST脆弱性への対応が行われた。
テンプレート:AnchorsCRIME攻撃、BREACH攻撃
2012年にBEAST攻撃の報告者によって、TLSにおいてデータ圧縮が有効な場合において、本来第三者に対して秘密であるべきCookieの内容が回復可能となるCRIME攻撃(Compression Ratio Info-leak Made Easy, 英語版)が報告された[69][70]。ウェブサイトでのユーザ認証に使われているCookieの内容を回復されることで、セッションハイジャックが可能となる。 2012年9月にはMozilla FirefoxおよびGoogle ChromeにおいてCRIMEへの対応が実施された。また、MicrosoftによればInternet ExplorerはCRIMEの影響を受けない。
CRIMEの報告者によって、CRIMEがTLS以外にもデータ圧縮を利用するSPDYやHTTPといったプロトコルにも広く適用可能であることが示されていたにもかかわらず、クライアント、サーバのいずれにおいてもTLSやSPDYに対する修正しか行われず、HTTPに対する修正は行われなかった。2013年に、HTTPでのデータ圧縮をターゲットとしたBREACH攻撃(Browser Reconnaissance and Exfiltration via Adaptive Compression of Hypertext, 英語版)と呼ばれるCRIME攻撃の変法が報告された。BREACH攻撃では、ログイントークン、メールアドレスなどの個人情報をわずか30秒で取得可能であり、不正なリンクを訪れさせたり、正当なウェブページに不正なコンテンツを挿入することも可能であった[71]。使用するアルゴリズム、Cipher Suiteを問わず、すべてのバージョンのTLS/SSLに対してBREACH攻撃は適用可能である[72]。TLSでのデータ圧縮やSPDYでのヘッダ圧縮を無効とすることで容易に回避可能であったCRIMEとは異なり、BREACHを回避するためにはHTTPでのデータ圧縮を無効にする必要があるが、通信速度の向上のためにほぼすべてのサーバがHTTPデータ圧縮を有効としている現状では、これを無効化することは現実的ではない[71]。
パディング攻撃
TLSの初期のバージョンはパディングオラクル攻撃に対して脆弱であることが2002年に報告された。2013年には、Lucky Thirteen攻撃(英語版)と呼ばれる新たなパディング攻撃が報告されている。2014年現在では、多くの実装においてLucky Thirteen攻撃に対して対応済みである。
RC4攻撃
RC4そのものに対する攻撃法は多く報告されているが、TLS/SSLにおいてRC4を用いたCipher Suiteについては、その脆弱性に対処されており安全であると考えられていた。2011年には、ブロック暗号のCBCモードの取り扱いに関する脆弱性であったBEAST攻撃への対応策の一つとして、ストリーム暗号であるためその影響を受けないRC4に切り替えることが推奨されていた[73]。しかし、2013年にTLS/SSLでのRC4への効果的な攻撃が報告され、BEASTへの対応としてRC4を用いることは好ましくないとされた[16]。RC4に対する攻撃は、AlFardan、Bernstein、Paterson、Poettering、Schuldtによって報告された。新たに発見されたRC4の鍵テーブルにおける統計的な偏り[74]を利用し、平文の一部を回復可能であるというものである[75][76]。この攻撃では、13 × 220の暗号文を用いることで128ビットのRC4が解読可能であることが示され、2013年のUSENIXセキュリティシンポジウムにおいて「実現可能」と評された[77][78]。
OS X 10.8以前、iOS 6以前およびWindows向けのSafariを除いて、クライアントのほとんどは既にBEASTへの対処が完了していることから、RC4はもはや最良の選択肢ではなくなっており、TLS 1.0以前においてもCBCモードを用いることがより良い選択肢となっている[79]。
Microsoftは可能であればRC4を用いないことを推奨している[80][81]
切り詰め攻撃
TLSでの切り詰め攻撃では、ユーザがウェブサービスからログアウトすることを妨害し、意図せずログインしたままとすることが可能である。ユーザからログアウト要求が送信されたときに、攻撃者が偽のTCP FINメッセージ(これ以上データを送信しない)を平文で挿入する。このメッセージを受けたサーバでは、ユーザから送られたログアウト要求を受け取らないため、ユーザの意図とは異なりログイン状態が維持される[82]。
2013年の報告[83]では、この攻撃への対応として、GmailやHotmailなどのウェブサービスでは、ログアウトが正常に完了した旨のページを表示するようになった。これにより、ログアウトしたか否かをユーザが確認することが可能となり、攻撃者によってログイン状態のアカウントを悪用される危険性が軽減される。
この攻撃では目標のコンピュータにマルウェアなどを導入する必要はないが、攻撃者が目標とサーバの間の回線に割り込むことが可能であること[82]と、目標のコンピュータに物理的にアクセス可能であることが求められる。
ハートブリード
テンプレート:Main ハートブリード(英:Heartbleed)は、2014年に発覚したOpenSSLライブラリのバージョン1.0.1から1.0.1fの間で発見された深刻なセキュリティ脆弱性である。この脆弱性を利用することで、TLS/SSLによって保護されているはずの情報を盗むことが可能である。
このバグでは、インターネット上の誰もが、脆弱性のあるOpenSSLを利用しているシステムのメモリにアクセスすることが可能となり、サービスプロバイダの認証やデータの暗号化に用いられている秘密鍵、ユーザのアカウントおよびパスワード、実際にやり取りされたデータなどを取得できる。これにより、メッセンジャーサービス、電子メールの盗聴、データの盗難、なりすましなどが可能となる。
ウェブサイトの統計
Trustworthy Internet Movementは、TLS/SSLに対する攻撃に対して脆弱なウェブサイトの統計を発表している。2014年8月における統計は以下の通りである[15]
攻撃 | セキュリティ | ||||
---|---|---|---|---|---|
安全ではない | 状況による | 安全 | その他 | ||
再ネゴシエーション脆弱性 | テンプレート:N/A | テンプレート:No | テンプレート:Partial | テンプレート:Yes | 6.0% (−0.8%) 再ネゴシエーション非対応 |
RC4攻撃 | テンプレート:No | テンプレート:No | テンプレート:Partial | テンプレート:Yes | テンプレート:N/A |
BEAST攻撃 | テンプレート:N/A | テンプレート:No | テンプレート:N/A | テンプレート:N/A | テンプレート:N/A |
CRIME攻撃 | テンプレート:N/A | テンプレート:No | テンプレート:N/A | テンプレート:N/A | テンプレート:N/A |
ハートブリード | テンプレート:N/A | テンプレート:No | テンプレート:N/A | テンプレート:N/A | テンプレート:N/A |
CVE-2014-0224 | テンプレート:N/A | テンプレート:No | テンプレート:Partial | テンプレート:Yes | 0.7% (−8.5%) 未知 |
参考文献
脚注
関連項目
- HTTPS
- Datagram Transport Layer Security
- FTPS
- SSH
- GnuTLS
- Network Security Services
- OpenSSL
- フィッシング
- Extended Validation 証明書 (EV SSL)
- 共用SSL
- 認証局
- SSLオフロード
- ヌルターミネーション攻撃
外部リンク
標準化
2014年6月時点での最新版
- RFC 5246: "The Transport Layer Security (TLS) Protocol Version 1.2".
過去の版
- RFC 2246: "The TLS Protocol Version 1.0".
- RFC 4346: "The Transport Layer Security (TLS) Protocol Version 1.1".
SSLは標準化されていない
- テンプレート:Cite web This Internet Draft defines the now completely broken SSL 2.0.
- RFC 6101: "The Secure Sockets Layer (SSL) Protocol Version 3.0".
TLS 1.0の拡張
- RFC 2595: "Using TLS with IMAP, POP3 and ACAP". Specifies an extension to the IMAP, POP3 and ACAP services that allow the server and client to use transport-layer security to provide private, authenticated communication over the Internet.
- RFC 2712: "Addition of Kerberos Cipher Suites to Transport Layer Security (TLS)". The 40-bit cipher suites defined in this memo appear only for the purpose of documenting the fact that those cipher suite codes have already been assigned.
- RFC 2817: "Upgrading to TLS Within HTTP/1.1", explains how to use the Upgrade mechanism in HTTP/1.1 to initiate Transport Layer Security (TLS) over an existing TCP connection. This allows unsecured and secured HTTP traffic to share the same well known port (in this case, http: at 80 rather than https: at 443).
- RFC 2818: "HTTP Over TLS", distinguishes secured traffic from insecure traffic by the use of a different 'server port'.
- RFC 3207: "SMTP Service Extension for Secure SMTP over Transport Layer Security". Specifies an extension to the SMTP service that allows an SMTP server and client to use transport-layer security to provide private, authenticated communication over the Internet.
- RFC 3268: "AES Ciphersuites for TLS". Adds Advanced Encryption Standard (AES) cipher suites to the previously existing symmetric ciphers.
- RFC 3546: "Transport Layer Security (TLS) Extensions", adds a mechanism for negotiating protocol extensions during session initialisation and defines some extensions. Made obsolete by RFC 4366.
- RFC 3749: "Transport Layer Security Protocol Compression Methods", specifies the framework for compression methods and the DEFLATE compression method.
- RFC 3943: "Transport Layer Security (TLS) Protocol Compression Using Lempel-Ziv-Stac (LZS)".
- RFC 4132: "Addition of Camellia Cipher Suites to Transport Layer Security (TLS)".
- RFC 4162: "Addition of SEED Cipher Suites to Transport Layer Security (TLS)".
- RFC 4217: "Securing FTP with TLS".
- RFC 4279: "Pre-Shared Key Ciphersuites for Transport Layer Security (TLS)", adds three sets of new cipher suites for the TLS protocol to support authentication based on pre-shared keys.
TLS 1.1の拡張
- RFC 4347: "Datagram Transport Layer Security" specifies a TLS variant that works over datagram protocols (such as UDP).
- RFC 4366: "Transport Layer Security (TLS) Extensions" describes both a set of specific extensions and a generic extension mechanism.
- RFC 4492: "Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer Security (TLS)".
- RFC 4680: "TLS Handshake Message for Supplemental Data".
- RFC 4681: "TLS User Mapping Extension".
- RFC 4785: "Pre-Shared Key (PSK) Ciphersuites with NULL Encryption for Transport Layer Security (TLS)".
- RFC 5054: "Using the Secure Remote Password (SRP) Protocol for TLS Authentication". Defines the TLS-SRP ciphersuites.
- RFC 5077: "Transport Layer Security (TLS) Session Resumption without Server-Side State".
- RFC 5081: "Using OpenPGP Keys for Transport Layer Security (TLS) Authentication", obsoleted by RFC 6091.
TLS 1.2の拡張
- RFC 5288: "AES Galois Counter Mode (GCM) Cipher Suites for TLS".
- RFC 5289: "TLS Elliptic Curve Cipher Suites with SHA-256/384 and AES Galois Counter Mode (GCM)".
- RFC 5746: "Transport Layer Security (TLS) Renegotiation Indication Extension".
- RFC 5878: "Transport Layer Security (TLS) Authorization Extensions".
- RFC 5932: "Camellia Cipher Suites for TLS"
- RFC 6066: "Transport Layer Security (TLS) Extensions: Extension Definitions", includes Server Name Indication and OCSP stapling.
- RFC 6091: "Using OpenPGP Keys for Transport Layer Security (TLS) Authentication".
- RFC 6176: "Prohibiting Secure Sockets Layer (SSL) Version 2.0".
- RFC 6209: "Addition of the ARIA Cipher Suites to Transport Layer Security (TLS)".
- RFC 6347: "Datagram Transport Layer Security Version 1.2".
- RFC 6367: "Addition of the Camellia Cipher Suites to Transport Layer Security (TLS)"
- RFC 6460: "Suite B Profile for Transport Layer Security (TLS)".
- RFC 6655: "AES-CCM Cipher Suites for Transport Layer Security (TLS)"
- RFC 7027: "Elliptic Curve Cryptography (ECC) Brainpool Curves for Transport Layer Security (TLS)".
TLSを含むカプセル化
- RFC 5216: "The EAP-TLS Authentication Protocol"
日本の認証局ベンダー(50音順)
テンプレート:Navbox- ↑ プロトコル名を含めた歴史については、Eric Rescorla著,「マスタリングTCP/IP SSL/TLS編」,オーム社開発局(2003年) ISBN 4-274-06542-1 の2章6節が詳しい。
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ RFC 3268によって後付けでAESが追加されたTLS 1.0とは異なり、TLS 1.1を定義するRFC 4346 A.5節ではRFC3268が参照され、AESが当初から追加されている
- ↑ draft-ietf-tls-tls13-02
- ↑ draft-ietf-tls-tls13-latest
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ draft-popov-tls-prohibiting-rc4-02
- ↑ draft-agl-tls-chacha20poly1305-04
- ↑ 15.0 15.1 15.2 2014年8月3日現在 テンプレート:Cite web
- ↑ 16.0 16.1 テンプレート:Cite web
- ↑ 17.0 17.1 テンプレート:Cite web
- ↑ 18.0 18.1 テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ 20.0 20.1 テンプレート:Cite web
- ↑ 21.0 21.1 テンプレート:Cite web
- ↑ 22.0 22.1 テンプレート:Cite web
- ↑ 23.0 23.1 テンプレート:Cite web
- ↑ 24.0 24.1 24.2 24.3 テンプレート:Cite web
- ↑ 25.0 25.1 テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ 29.0 29.1 テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ 31.0 31.1 テンプレート:Cite web
- ↑ 32.0 32.1 32.2 32.3 テンプレート:Cite web
- ↑ 33.0 33.1 テンプレート:Cite web
- ↑ 34.0 34.1 テンプレート:Cite web
- ↑ 35.0 35.1 35.2 テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ 38.0 38.1 テンプレート:Cite web
- ↑ 39.0 39.1 Chrome 27–29と同じ
- ↑ 40.0 40.1 Chrome 30以降と同じ
- ↑ テンプレート:Cite web
- ↑ 42.0 42.1 テンプレート:Cite web
- ↑ テンプレート:Cite web iOSにおいて
kSSLProtocol2
は"deprecated"とされている - ↑ 44.0 44.1 引用エラー: 無効な
<ref>
タグです。 「iOS5TLS1.2
」という名前の引用句に対するテキストが指定されていません - ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ 47.0 47.1 47.2 47.3 www.openssl.org/news/changelog.html
- ↑ TLS cipher suites in Microsoft Windows XP and 2003
- ↑ SChannel Cipher Suites in Microsoft Windows Vista
- ↑ TLS Cipher Suites in SChannel for Windows 7, 2008R2, 8, 2012
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite book
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite webテンプレート:Dead link
- ↑ 71.0 71.1 テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ security – Safest ciphers to use with the BEAST? (TLS 1.0 exploit) I've read that RC4 is immune – Server Fault
- ↑ テンプレート:Cite journal
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite journal
- ↑ テンプレート:Cite conference
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ draft-popov-tls-prohibiting-rc4-02
- ↑ 82.0 82.1 テンプレート:Cite web
- ↑ テンプレート:Cite web
引用エラー: 「注」という名前のグループの <ref>
タグがありますが、対応する <references group="注"/>
タグが見つからない、または閉じる </ref>
タグがありません