Transport Layer Security (トランスポート・レイヤー・セキュリティ、TLS )は、インターネット などのコンピュータネットワーク においてセキュリティを要求される通信 を行うためのプロトコル である。主な機能として、通信相手の認証 、通信内容の暗号化 、改竄 の検出を提供する。TLSは非営利組織IETF によって策定された。
当プロトコルは(特に区別する場合を除いて)SSL (Secure Sockets Layer ) と呼ばれることも多い。これは、TLSの元になったプロトコルがSSLであり[1] 、そのSSLという名称が広く普及していることによる[2] 。SSLはNetscape が設計・開発した[3] 。当初のSSLを元にして、以後、SSL 2(1994年)、SSL 3(1995年)がそれぞれ前バージョンの欠陥や脆弱性を修正するものとして公開された。SSLを拡張して、TLS(1999年)、TLS 1.2(2008年)、TLS 1.3(2018年)が作られた[3] 。
2022年現在の最新版はTLS 1.3である。
概要 TLSは多くの場合、コネクション型のトランスポート層 プロトコル(通常はTCP )とアプリケーション層 の間で使われる。特にHTTP での利用を意識して設計されているが、アプリケーション層の特定のプロトコルには依存せず、様々なアプリケーションにおいて使われている。TLS 1.1以降を元にしたプロトコルが、UDP やDCCP といったデータグラム 型プロトコル上でも実装されており、こちらはDatagram Transport Layer Security (DTLS) として独立して標準化されている。
TLSはHTTPなどのアプリケーション層のプロトコルと組み合わせることで、HTTPS などセキュアな通信プロトコルを実現している。そのようなプロトコルとして以下のものがある。
アプリケーション層プロトコルへの適用 TLSは特定のアプリケーション層プロトコルに依存しないため、HTTP以外にも多くのプロトコルにおいて採用され、クレジットカード 情報や個人情報 、その他の機密情報を通信する際の手段として活用されている。
既存のアプリケーション層プロトコルでTLSを利用する場合、大きく2つの適用方式が考えられる。まずひとつは、下位層(通常はTCP)の接続を確立したらすぐにTLSのネゴシエーションを開始し、TLS接続が確立してからアプリケーション層プロトコルの通信を開始する方式である。もうひとつは、まず既存のアプリケーション層プロトコルで通信を開始し、その中でTLSへの切り替えを指示する方式である。切り替えコマンドとしてSTARTTLS
が広まっているため、この方式自体をSTARTTLS と呼ぶこともある。
前者はアプリケーション層のプロトコルをまったく変更しなくてすむことが利点である。その反面、平文で接続を開始する実装と共存できなくなるため、既存のポート番号 とは別にTLS対応用のポート番号が必要となる。実態としては、SSL/TLSの最初の適用例であるHTTPS をはじめとして、前者の方式を使うことが多い。ただし、この方式はバーチャルホストを構成する際に問題となる可能性がある。詳細は#バーチャルホスト の節を参照。
なお、ポート番号を分ける方式をSSL、同一ポート番号で切替える方式(STARTTLS方式)をTLSと呼んでいる実装もある[4] 。TLS/SSLという用語の区別がプロトコルのバージョンを指しているか、アプリケーション層プロトコルへの適用方式を指しているかは、文脈で判断する必要がある。
セキュリティ上の考察 TLS適用の有無と使用アルゴリズムの強度 TLSを導入さえすればセキュリティが確保できるという認識は誤っている。TLS通信は、平文 での通信に比べて(主に暗号化 ・復号 時)余分な計算機能力を使用するため、本当に必要なとき以外は使用しないことが多い。システムはデータの重要性を判断することができないので、TLSが必要なときに正しく使われているかどうかは、利用者自身が判断しなければならない。
Mozilla Firefoxにおける南京錠アイコンの例 World Wide Web では、ハイパーリンクによるページ遷移を繰り返して処理を行うため、どの通信で TLS (HTTPS) が使用されているか把握することが重要になる。多くのウェブブラウザ は、画面のどこかに南京錠 のアイコン を表示したり、アドレスバー の色を変化させたりして、利用者に情報を提供していた。一方 Google は南京錠のアイコンが適切ではなくなったとして、Chrome での南京錠の表示を廃止した[5] 。背景として、HTTPS が普及したこと、南京錠アイコンの意味を正しく理解している人が少ない[6] ことを挙げている。さらに、Chrome では HTTPS を使っていない通信を行う前に警告画面を出すようにした[7] 。
また実際に使用するアルゴリズムは双方のネゴシエーションによって決まるため、TLSを使用していても、システムとして許容はするが推奨できないアルゴリズムが採用される可能性がある。このような場合もダイアログメッセージなどを使って利用者に警告すべきである。
証明書の正当性 TLSは公開鍵証明書を用いて認証を行い、なりすまし を極力排除しようとする。しかしシステムの自動的な対応には限界があり、すべてのなりすましを検出できるわけではない。
公開鍵証明書 には認証局による電子署名が与えられる。その署名の正当性を評価するためには認証局の証明書が必要であり、最終的にはルート証明書 と呼ばれる一群の証明書に行きつく。各システムは、認証局の証明書として信用できるルート証明書を、あらかじめ保持している。認証局は自身の秘密鍵を厳重に秘匿し、また証明書の発行にあたっては正当なサーバ管理者かどうか確認することが求められる。これらが保証されない認証局のルート証明書を組み込むことは、TLSにおける認証機能を破綻させることになる。仮に認証局自体は安全でも、入手したルート証明書が本当に意図する認証局のものかどうか判断することは難しいという点も注意すべきである。
TLSで認証を行うためには、認証局の署名に加えて、証明書の発行先を確認する必要がある。確認しない場合、サーバAの管理権限を持たない者がサーバBとして正当な証明書を取得し、その証明書を使ってサーバAを名乗ることができてしまう。TLS用のサーバ証明書には発行先サーバのホスト名が書き込まれており、クライアントは自分が接続しようとしているサーバのホスト名と一致するかどうか確認することができる。
現実には「正当な」サーバであっても、これらの検証において「問題がある」と判断される証明書を使って運用されているサーバが少なからず存在する。セキュリティ研究者の高木浩光 は、このような証明書のことを、オレオレ詐欺 をもじって「オレオレ証明書 」と呼んで批判している[8] 。
この検証は、システムに指示された接続先のホスト名と実際に接続した先のホスト名が一致することを検証しているのであり、利用者が意図する接続先とは必ずしも一致しないことに注意する必要がある。
例として、利用者が意図する接続先であるサーバ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) が公開している「安全なウェブサイトの作り方」[9] という文書の「フィッシング 詐欺を助長しないための対策」に対応する。
乱数の品質 他の多くの近代暗号と同様に、TLSもまた、暗号としての強度は乱数の品質に依存している。桁数(ビット 長)の大きな暗号は推測が難しいという前提が暗号強度の根拠となっている(これは、公開鍵暗号 システムにも言える)。もし何らかの理由で乱数の出現確率が大きく偏るようなことがあれば、総当たり攻撃 で解読される可能性が上昇する。通常は、これは実装の問題に起因している。
古い例では、Netscapeの初期の実装における乱数生成の脆弱性がある。プロセスID や時刻から乱数を生成していることが判明し、これらの情報を取得できる場合には総当たり攻撃の所要時間が大幅に短くなるという問題があった[10] 。
2008年 5月15日 にはDebian が脆弱性に関する報告[11] を発表した。OpenSSL ライブラリのパッケージメンテナンスの際に誤ったパッチを導入した結果、鍵生成に適切な乱数が使われず僅か65536 (= 216 ) 通りの予測可能な物が生成されてしまった事を明らかにした[12] (なお、この問題は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 の勧告[13] 等に従うべきである。
プロトコル概要 本説ではTLS 1.2の概要を説明する。
TLSには主なプロトコルとして暗号通信に必要な鍵 (master secret ) を鍵共有してセッション を確立するTLSハンドシェイクプロトコル と、master secretを用いて暗号通信することで確立されたセッションにおけるコネクション をセキュアにするTLSレコードプロトコル がある。
その他に用いている暗号方式やハッシュ関数等のアルゴリズムを変更する Change Cipher Spec プロトコル と通信相手からの通信終了要求や何らかのエラーを通知する アラートプロトコル がある。
TLSハンドシェイクプロトコル TLSハンドシェイクプロトコルは4つのフェーズに大別できる。
(第一フェーズ) ─ClientHello───→ ←ServerHello──── (第二フェーズ) ←Certificate──── ←ServerKeyExchange─ ←CertificateRequest── ←ServerHelloDone── (第三フェーズ) ─Certificate───→ ─ClientKeyExchange→ ─CertificateVerify─→ (第四フェーズ) ─Change Cipher Spec→ ─Finished─────→ ←Change Cipher Spec─ ←Finished──────
第一フェーズ 第一のフェーズではサーバ・クライアント間で通信に必要情報の合意を図る。このフェーズでは、まずクライアントからサーバにClientHello が送信され、次にサーバからクライアントにServerHello が送信される[14] 。
ClientHelloはTLSのバージョン、乱数、セッションID、通信に用いる暗号方式やハッシュアルゴリズムのリスト (cipher_suites )、通信内容の圧縮方法、および拡張領域の6つからなる[14] 。乱数は鍵共有におけるリプレイ攻撃を防ぐためのものである。
ServerHelloもClientHelloと同様の6つからなっている(名称は一部異なる)[14] 。ServerHelloの主な目的は、ClientHelloで提示された選択肢の中でサーバにとって好ましいものを選択する事で、例えばClientHelloで提示されたcipher_suitesの中から、サーバが通信に使いたいcipher_suiteを一組選ぶ[14] 。乱数はClientHelloとは独立して選ぶ[14] 。これもリプレイ攻撃を回避するためである。セッションIDは特に問題がなければClientHelloと同一のものを返す。
第二フェーズ 第二フェーズではサーバからクライアントに対して鍵共有に必要な情報を送る。具体的にはサーバはCertificate 、ServerKeyExchange 、CertificateRequest 、ServerHelloDone を(第一フェーズServerHelloに引き続き)クライアントに送信する[14] 。
Certificateは鍵共有で用いる公開鍵とその証明書で別途取り決めがない限りX.509v3 のフォーマットに従う[14] 。なお鍵共有方式としてDH_anonを用いている場合にはcertificateは必要ない[14] 。
ServerKeyExchangeは鍵共有プロトコルに依存して送るデータが異なるが、DH_anonであれば、g x mod p という形のデータを送る。ここでx はサーバの秘密の乱数である。鍵共有プロトコルがDHE_DSS、DHE_RSA、DH_anonでは何らかのserver_key_exchangeを送るが、RSA、DH_DSS、DH_RSAでは何も送らない[14] 。
CertificateRequestはクライアントの公開鍵とその証明書を送ることを要求するためのもので、サーバが許容できる証明書の種別、ハッシュと署名方式、および認証局 のリストからなっている[14] 。
そして最後にサーバ側からのメッセージ送信が終わった事を示すServerHelloDoneをクライアントに送る。
第三フェーズ 第三フェーズではクライアントからサーバに対して鍵共有に必要な情報を送る。具体的にはクライアントはCertificate 、ClientKeyExchange 、CertificateVerify をサーバに送る[15] 。
Certificateは鍵共有で用いるクライアントの公開鍵とその証明書である。証明書はサーバから送られてきたCertificateRequestの条件を満たさねばならない。
ClientKeyExchangeは鍵共有プロトコルに依存して送るデータが異なるが、DH_anonであれば、g y mod p という形のデータを送る。ここでy はクライアントの秘密の乱数である。
ここまでのプロトコルにより、サーバとクライアントの間でpremaster secret が共有された事になる。DH_anonであればpremaster secretはg xy mod p である。premaster secretを鍵にした擬似ランダム関数にServerHelloとClientHelloの乱数などを並べたものを入力した結果得られたものがmaster secret である[15] 。
CertificateVerifyはクライアントが署名能力を持っていることを証明するためにこれまでTLSハンドシェイクプロトコルで送受信された全メッセージに対し、共有されたmaster secret で署名したものである[要検証 – ノート ] [14] 。
第四フェーズ クライアントは必要ならChange Cipher Spec プロトコルのメッセージをサーバに送り、終了を意味するFinishedをサーバに送る。同様にサーバも必要ならChange Cipher Spec プロトコルのメッセージをクライアントに送り、終了を意味するFinishedをクライアントに送る[14] 。
TLSレコードプロトコル TLSレコードプロトコルはアプリケーション層から受け取った通信内容を214 バイト以下のブロックに分解 (fragmentation) し、各ブロックを圧縮 (compress) し、圧縮されたブロックを認証暗号 で暗号化するレコード Payload 防護 を施した上で、通信内容を通信相手に送信する[16] 。
認証暗号は、TLS 1.1まではMACをつけた後で共通鍵暗号化するMAC-then-Encrypt (MtE) のみが利用可能であった。TLS 1.2からは、AES -GCM のようなAEADに分類される認証暗号専用の暗号利用モード も利用可能になり[16] 、TLS 1.3ではAEADのみが利用可能となっている。
認証暗号にブロック暗号(AEAD以外)を選択した場合、TLS 1.1以降においてIV はTLSレコードプロトコルの送信者がランダムに選ぶ[16] 。ランダムなIVは、BEAST攻撃 への対策として有効である。一方、認証暗号で用いる共通鍵はTLSハンドシェイクプロトコルで共有されたmaster secretを用いる。
バージョン コンピュータの計算能力の向上とともに、認証の突破、暗号の解読、改竄も以前よりは容易に行えるようになり、セキュリティ確保のための技術も厳しさを増している。
2017年現在では、TLS 1.2 以上のバージョンの実装が推奨され、TLS 1.1 以下のサポートを停止するサイトも出てきている [17] [18] [19] 。2021年3月にはRFC 8996 により、TLS 1.0〜TLS 1.1の使用禁止が求められている。
Defined バージョン 年 SSL 1.0 n/a SSL 2.0 1995 SSL 3.0 1996 TLS 1.0 1999 TLS 1.1 2006 TLS 1.2 2008 TLS 1.3 2018
SSL 1.0 ネットスケープコミュニケーションズ 社がSSLの最初のバージョンとして設計していたが、設計レビューの段階でプロトコル自体に大きな脆弱性 が発見され、破棄された。このため、2018年現在では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を無効にしない限りこの脆弱性の影響を受ける可能性を否定できない[20] 。SSL 3.0以降に対応した実装が十分に普及したものとして、Internet Explorer 7 やMozilla Firefox 2 、Opera 9 などは、初期状態でSSL 2.0を無効にしている[21] [22] [23] 。この決定を受け、SSL 2.0しか対応していなかったサーバでも、SSL 3.0以降へ対応する動きが広まっている[24] 。
SSL 2.0にはチェーン証明書がなく、ルートCA から発行したSSLサーバ証明書しか使うことができない。
2011年3月、RFC 6176 によってSSL 2.0の使用は禁止された。
SSL 3.0 ネットスケープコミュニケーションズ社はSSL 2.0の問題を修正するとともに機能追加を行い、1995年 にSSL 3.0を発表した。また、Netscape Navigator 2.0においてSSL 3.0を実装した。SSL 3.0の仕様書については、2011年にIETF から歴史的文書という扱いでRFC 6101 として公開された。
2014年10月にSSL 3.0の仕様上の脆弱性(POODLE攻撃 )が発見されたため、SSL 3.0への対応を打ち切り、TLS 1.0以降のみ対応への移行が望まれている。2015年6月、RFC 7568 によってSSL 3.0の使用は禁止された。
SSLについては、使うべきではない 。
TLS 1.0 IETF のTLSワーキンググループはRFC 2246 としてTLS 1.0を公表した。TLS 1.0の標準化作業は1996年 に開始され、年内に完了する予定だったが、いくつかの問題に阻まれ、公表は1999年 まで遅延した。
TLS 1.0が提供する機能はSSL 3.0とあまり変わらないが、アルゴリズムやルートCAの自己署名証明書 の取扱いなどの仕様の詳細が変更されたことに加え、これまであまり実装されていなかった選択肢のいくつかが必須と定められた。このため、TLS 1.0を実装した製品が普及するまでには、さらに数年を要した。
2021年3月、RFC 8996 により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 が選択肢に加わった[25] 。
2021年3月、RFC 8996 によりTLS 1.1を使用しないことが呼びかけられている。
ネゴシエーションにおけるバージョン番号は3.2となっている。
TLS 1.2 2008年 8月にRFC 5246 としてTLS 1.2が制定された。ハッシュのアルゴリズムにSHA-256 が追加されたほか、ブロック暗号 について、従来のCBCモード だけではなく、GCM 、CCM といった認証付き暗号 を用いたcipher suiteが利用可能となった。また、AESに関する記述がRFC 5246 自体に含まれるようになった。
ネゴシエーションにおけるバージョン番号は3.3となっている。
TLS 1.3 新たなTLSのバージョンとしてTLS 1.3が提案されてきたが[26] 、IETFは2018年3月23日に、ドラフト28を標準規格として承認し[27] [28] 、同年8月10日にRFC 8446 として公開した[29] 。
TLS 1.2からの変更点としては、データ圧縮 の非サポート、forward secrecy ではないcipher suite(RSAのみを用いたもの)および認証付き暗号 ではないcipher suite(CBCモード のブロック暗号 やRC4 を用いたもの)の廃止が挙げられる。なお名称をTLS 2.0やTLS 4等に変更することが検討されたが、最終的にTLS 1.3に落ち着いた。
暗号スイート TLSではハンドシェイクプロトコルのClientHello・ServerHelloで、以後の通信で用いる暗号スイート (ciphersuite) を決定する。TLS 1.2を策定しているRFC 5246 では、暗号スイートを以下のフォーマットで表現している:
TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 これは次の意味である。
鍵共有方式として以下のものを用いる:EDH(Ephemeral Diffie-Hellman、後述)の通信に DSS 署名したもの 認証暗号として平文にMACをつけた後に共通鍵暗号化する(いわゆるMAC-then-Encrypt (MtE) 型)のもので TLS1.2では認証暗号としてMtE型のもののみならず、AES-GCMのような認証暗号専用に作られた暗号利用モードも用いる事ができるようになった。この場合MACはそもそも必要ない。
なお、RSA暗号とRSA署名を組み合わせる事で実現した鍵共有方式に対してはTLS_RSA_RSA_WITH…のようにRSAを2回書かず、TLS_RSA_WITH_…のように略記する。
鍵共有、共通鍵暗号、ハッシュ関数の全ての組み合わせが網羅されているわけではないので、同時に利用できない組み合わせも存在する。
鍵共有 SSL/TLS(の1つ以上のバージョンで)使用できる鍵共有方式は以下のとおりである。ここでDHはDiffie-Hellman の事である。なおDH-ANON、ECDH-ANONは中間者攻撃 に対して脆弱であることから安全とはみなされていない。
DH-ANON (Anonymous DH)、ECDH-ANON (Anonymous ECDH) はそれぞれ、送信データに署名する事なくDH鍵共有、ECDH鍵共有を行う方式である。DHE-*** はEphemeral DH と呼ばれるもので、鍵共有の際クライアント、サーバがx 、y をランダムに選び、gx 、gy を計算し、これらに署名文をつけた上で交換しあう方式である。gx 、gy につける署名文を作成する署名方式は「***」の部分に記載されたものを使う。ECDHE-*** はDHEの楕円DH版である。DH-*** はFixed DH もしくはnon-interactive DH と呼ばれるもので、Diffie-Hellmanで用いるパラメータ(クライアントのgx 、サーバのgy )がクライアントやサーバの公開鍵として認証局から公開鍵証明書を受け取っているケースのDiffie-Hellman鍵共有である。gx 、gy に対する公開鍵証明書内の署名文を作成する署名方式は「***」の部分に記載されたものを使う。ECDH-*** (Fixed ECDH ) はFixed DHの楕円DH版である。RSA-*** はランダムに選んだ共有鍵をサーバの公開鍵でRSA暗号化し、暗号文を「***」で指定された署名方式で署名したものをClientKeyExchangeにおいてクライアントがサーバに送る方式である。(ServerKeyExchangeでは何も送らない)。いずれの鍵共有においても共有された鍵 (premaster secret) を用いた擬似ランダム関数にクライアントが選んだ乱数とサーバが選んだ乱数等を並べたものを入力する事で最終的なmaster secretを得る。これによりリプレイ攻撃を防いでいる。
これらの鍵共有方式の対応状況は以下のとおりである:
事前共有鍵(英語版 ) を用いた TLS_PSK、Secure Remote Password protocol(英語版 ) を用いた TLS_SRP、ケルベロス認証 を用いた KRB5 も存在する。
独立国家共同体 のGOST規格 によって規定された鍵共有アルゴリズムであるGOST R 34.10も提案されている(同じGOST規格による暗号化・改竄検出アリゴリズムとの組み合わせに限定)[31] 。
認証暗号 共通鍵暗号 認証暗号に用いる共通鍵暗号 として以下のものがある。
AES CBCはTLS 1.0を定義する RFC 2246 には含まれていないが、RFC 3268 で追加された。TLS 1.1を定義する RFC 4346 からは RFC 3268 が参照されており、さらにTLS 1.2では定義である RFC 5246 にAES CBCに関する記述が取り込まれた。また、認証付き暗号 によるAES GCM (RFC 5288 , RFC 5289 )、AES CCM (RFC 6655 , RFC 7251 ) が追加されている。IDEA CBC、DES CBCはTLS 1.2で廃止された(RFC 5469 に解説がある)。
ブロック暗号 のCBCモード での利用については、TLS 1.0以前においてBEAST攻撃 と呼ばれる攻撃が可能であることが明らかとなっており、クライアント側、サーバ側での対応が必要とされている。TLS 1.1以降ではこの攻撃への根本的な対処として初期化ベクトル を明示的に指定し、パディングの処理が改善された。ブロック暗号であってもGCM 、CCM などの認証付き暗号 を用いる場合にはこれらの攻撃を受けない。
ストリーム暗号 であるRC4 は前述のBEAST攻撃を受けることはないが、RC4には仕様上の脆弱性が存在する(RC4攻撃 )。2015年2月、TLSのすべてのバージョンにおいてRC4の利用を禁止する RFC 7465 が公開された。ストリーム暗号であるChaCha20 と認証のためのPoly1305 を組み合わせたChaCha20+Poly1305が RFC 7905 として標準化されている。
いくつかの国家標準に基づく暗号化アルゴリズムもTLSで利用可能であり、日本 のCRYPTREC による推奨暗号であるCamellia (CBCモード:RFC 4132 、RFC 5932 、RFC 6367 、GCM:RFC 6367 )、韓国 の情報通信標準規格に採用されているSEED (CBCモード:RFC 4162 )、ARIA (CBCモードおよびGCM:RFC 6209 )が追加されている。また、独立国家共同体 のGOST規格 によって規定された暗号化アルゴリズムであるGOST 28147-89も提案されている[31] 。
SSLが設計された当時は、アメリカ合衆国 によって高強度暗号アルゴリズムの輸出が規制されていた 。そのため、全世界で共通して利用できるアルゴリズムとして、DES・RC2 ・RC4に関して暗号強度を40ビットに制限したものが導入されていた。これらはTLS 1.1以降では利用が禁止されている。
また、鍵共有のみを行い暗号化は行わないこと (NULL) も可能であるが、平文でのやりとりとなることから安全とはみなされていない。
MAC TLS/SSLの各バージョンで使用できるMACの選択肢は以下のとおりである。下欄の「AEAD」(Authenticated Encryption with Associated Data、認証暗号)は、共通鍵暗号として認証暗号を選んでいるのでMACを用いない事を意味する。
TLS/SSLの各バージョンで使用できる改竄検出 アルゴリズム SSL 2.0 SSL 3.0 TLS 1.0 TLS 1.1 TLS 1.2 TLS 1.3 状況 HMAC -MD5 対応 対応 対応 対応 対応 非対応 TLS 1.2向けにRFCで定義済み HMAC -SHA1 非対応 対応 対応 対応 対応 非対応 HMAC -SHA256/384 非対応 非対応 非対応 非対応 対応 非対応 AEAD 非対応 非対応 非対応 非対応 対応 対応 GOST 28147-89 IMIT(英語版 ) [31] 非対応 非対応 対応 対応 対応 非対応 RFC草稿で提案中 GOST R 34.11-94(英語版 ) [31] 非対応 非対応 対応 対応 対応 非対応
独立国家共同体 のGOST規格 によって規定されたアルゴリズムであるGOST 28147-89に基づくMACおよび、GOST R 34.11も提案されている(同じGOST規格による鍵共有・暗号化アリゴリズムとの組み合わせに限定)[31] 。
実装 ウェブサイト ウェブサイトにおけるTLS/SSLの対応状況 プロトコル ウェブサイトにおけるサポート[41] セキュリティ[41] SSL 2.0 0.2% 安全ではない SSL 3.0 1.7% 安全ではない[43] TLS 1.0 29.5% 暗号アルゴリズム[注 1] および脆弱性への対処[注 2] による TLS 1.1 31.8% 暗号アルゴリズム[注 1] および脆弱性への対処[注 2] による TLS 1.2 99.9% 暗号アルゴリズム[注 1] および脆弱性への対処[注 2] による TLS 1.3 66.2% 安全
注 ウェブブラウザ 2021年1月現在、主要なウェブブラウザの最新版ではTLS 1.2、1.3が既定で有効であるが、過去のバージョンのOS向けなどサポートが継続しているウェブブラウザのいくつかのバージョンではそうではない。
TLS 1.3に対応しているが既定で無効:Internet Explorer 11(Windows 10 バージョン1903以降) TLS 1.3に未対応:Internet Explorer 11(Windows 10 バージョン1903より前) TLS 1.0、1.1は脆弱性が危惧され[44] 、2020年から無効化が実施され始めている[45] 。
既知の脆弱性のいくつかへの対応は十分ではない。
POODLE攻撃 への対応:いくつかのブラウザではTLS_FALLBACK_SCSVを実装済みでSSL 3.0へのフォールバックを抑止することが可能となっているが、これはクライアント側だけでなくサーバ側での対応も必要である。SSL 3.0そのものの無効化、"anti-POODLE record splitting"の実装、あるいはSSL 3.0におけるCBCモードのcipher suiteの無効化が根本的な対策となる。Google Chrome:完了(バージョン33においてTLS_FALLBACK_SCSVを実装、バージョン39においてSSL 3.0へのフォールバックを無効化、バージョン40においてSSL 3.0を既定で無効化。バージョン44においてSSL 3.0のサポートを廃止) Mozilla Firefox:完了(バージョン34においてSSL 3.0を既定で無効化およびSSL 3.0へのフォールバックを無効化、バージョン35においてTLS_FALLBACK_SCSVを実装。延長サポート版でもESR 31.3においてSSL 3.0を無効化およびTLS_FALLBACK_SCSVを実装。バージョン39においてSSL 3.0のサポートを廃止) Internet Explorer:部分的(バージョン11のみ、2015年2月のアップデートにおいて保護モードにおけるSSL 3.0へのフォールバックを既定で無効化。2015年4月にSSL 3.0自体を既定で無効化。バージョン10以前では対策は講じられていない) Opera:完了(バージョン20においてTLS_FALLBACK_SCSVを実装、バージョン25において"anti-POODLE record splitting"を実装、バージョン27においてSSL 3.0を既定で無効化。バージョン31においてSSL 3.0のサポートを廃止) Safari:完了(OS X v10.8 以降およびiOS 8.1以降のみ、POODLEへの対策としてSSL 3.0においてCBCモードのcipher suiteを無効化した。これによりPOODLEの影響を受けることはなくなるが、SSL 3.0においてCBCモードを無効化したことで、脆弱性が指摘されているRC4しか利用できなくなるという問題が生じている。OS X v10.11 およびiOS 9においてSSL 3.0のサポートを廃止) RC4攻撃 への対応Google Chromeでは、バージョン43以降はホストがRC4以外のアルゴリズムを用いたCipher Suiteに対応していない場合に限りRC4を用いたCipher Suiteがフォールバックとして利用されるようになった。バージョン48以降では、RC4を用いたCipher Suiteのすべてが既定で無効化された。 Firefoxでは、バージョン36以降はホストがRC4以外のアルゴリズムを用いたCipher Suiteに対応していない場合に限りRC4を用いたCipher Suiteがフォールバックとして利用されるようになった。バージョン44以降では、RC4を用いたCipher Suiteのすべてが既定で無効化された。 Operaでは、バージョン30以降はホストがRC4以外のアルゴリズムを用いたCipher Suiteに対応していない場合に限りRC4を用いたCipher Suiteがフォールバックとして利用されるようになった。バージョン35以降では、RC4を用いたCipher Suiteのすべてが既定で無効化された。 Windows 7 / Server 2008 R2およびWindows 8 / Server 2012向けのInternet Explorerでは、RC4の優先度を最低としている。Windows 8.1 / Server 2012 R2向けのInternet Explorer 11およびWindows Phone 8.1向けのInternet Explorer Mobile 11およびWindows 10向けのEdgeでは、ホストが他のアルゴリズムに非対応の場合のフォールバックを除きRC4を無効としている(Windows 7 / Server 2008 R2およびWindows 8 / Server 2012向けのInternet Explorerでもレジストリからフォールバックを除きRC4を無効化することが可能)。2016年8月の月例アップデートにおいて、Inter Explorer 11およびEdgeにおいてRC4を用いたCipher Suiteのすべてが既定で無効化。 FREAK攻撃 への対応:Android 4以前の標準ブラウザ はFREAK攻撃に対して脆弱である。Internet Explorer 11 MobileはFREAK攻撃に対して脆弱である。 Google Chrome(Windows版を除く)、Internet Explorer、Safari(デスクトップ版、iOS版)、Opera(Windows版を除く)はFREAK攻撃に対して対応済みである。 Mozilla Firefox、Google Chrome(Windows版)、Opera(Windows版)はFREAK攻撃の影響を受けない。
ウェブブラウザにおけるTLS/SSLの対応状況の変化 ウェブブラウザ バージョン プラットフォーム SSLプロトコル TLSプロトコル 証明書のサポート 脆弱性への対応[注 1] プロトコル選択[注 2] SSL 2.0 (安全ではない) SSL 3.0 (安全ではない) TLS 1.0 TLS 1.1 TLS 1.2 TLS 1.3 EV [注 3] [46] SHA-2 [47] ECDSA [48] BEAST[注 4] CRIME[注 5] POODLE (SSLv3)[注 6] RC4[注 7] FREAK[49] [50] Logjam Google Chrome (Chrome for Android) [注 8] [注 9] 1–9 Windows (7以降) macOS (OS X v10.10以降) Linux Android (4.4以降) iOS (10.0以降) ChromeOS 既定で無効 既定で有効 対応 非対応 非対応 非対応 対応(デスクトップ版) OSがSHA-2対応の場合 [47] OSがECC対応の場合 [48] 影響なし[55] 脆弱(HTTPS) 脆弱 脆弱 脆弱(Windows版を除く) 脆弱 可[注 10] 10–20 非対応[56] 既定で有効 対応 非対応 非対応 非対応 対応(デスクトップ版) OSがSHA-2対応の場合 [47] OSがECC対応の場合 [48] 影響なし 脆弱(HTTPS/SPDY) 脆弱 脆弱 脆弱(Windows版を除く) 脆弱 可[注 10] 21 非対応 既定で有効 対応 非対応 非対応 非対応 対応(デスクトップ版) OSがSHA-2対応の場合 [47] OSがECC対応の場合 [48] 影響なし 対策済[57] 脆弱 脆弱 脆弱(Windows版を除く) 脆弱 可[注 10] 22–25 非対応 既定で有効 対応 対応[58] 非対応[58] [59] [60] [61] 非対応 対応(デスクトップ版) OSがSHA-2対応の場合 [47] OSがECC対応の場合 [48] 影響なし 対策済 脆弱 脆弱 脆弱(Windows版を除く) 脆弱 一時的[注 11] 26–29 非対応 既定で有効 対応 対応 非対応 非対応 対応(デスクトップ版) OSがSHA-2対応の場合 [47] OSがECC対応の場合 [48] 影響なし 対策済 脆弱 脆弱 脆弱(Windows版を除く) 脆弱 一時的[注 11] 30–32 非対応 既定で有効 対応 対応 対応[59] [60] [61] 非対応 対応(デスクトップ版) OSがSHA-2対応の場合 [47] OSがECC対応の場合 [48] 影響なし 対策済 脆弱 脆弱 脆弱(Windows版を除く) 脆弱 一時的[注 11] 33–37 非対応 既定で有効 対応 対応 対応 非対応 対応(デスクトップ版) OSがSHA-2対応の場合 [47] OSがECC対応の場合 [48] 影響なし 対策済 部分的に対策済[注 12] 優先度最低[64] [65] [66] 脆弱(Windows版を除く) 脆弱 一時的[注 11] 38, 39 非対応 既定で有効 対応 対応 対応 非対応 対応(デスクトップ版) 対応 OSがECC対応の場合 [48] 影響なし 対策済 部分的に対策済 優先度最低 脆弱(Windows版を除く) 脆弱 一時的[注 11] 40 非対応 既定で無効[63] [67] 対応 対応 対応 非対応 対応(デスクトップ版) 対応 OSがECC対応の場合 [48] 影響なし 対策済 対策済[注 13] 優先度最低 脆弱(Windows版を除く) 脆弱 可[注 14] 41, 42 非対応 既定で無効 対応 対応 対応 非対応 対応(デスクトップ版) 対応 OSがECC対応の場合 [48] 影響なし 対策済 対策済 優先度最低 対策済 脆弱 可[注 14] 43 非対応 既定で無効 対応 対応 対応 非対応 対応(デスクトップ版) 対応 OSがECC対応の場合 [48] 影響なし 対策済 対策済 フォールバックの場合のみ[注 15] [68] 対策済 脆弱 可[注 14] 44–47 非対応 非対応[69] 対応 対応 対応 非対応 対応(デスクトップ版) 対応 OSがECC対応の場合 [48] 影響なし 対策済 影響なし フォールバックの場合のみ[注 15] 対策済 対策済[70] 一時的[注 11] 48, 49 非対応 非対応 対応 対応 対応 非対応 対応(デスクトップ版) 対応 OSがECC対応の場合 [48] 影響なし 対策済 影響なし 既定で無効[注 16] [71] [72] 対策済 対策済 一時的[注 11] 50–53 非対応 非対応 対応 対応 対応 非対応 対応(デスクトップ版) 対応 対応 影響なし 対策済 影響なし 既定で無効[注 16] [71] [72] 対策済 対策済 一時的[注 11] 54–66 非対応 非対応 対応 対応 対応 既定で無効(ドラフト版) 対応(デスクトップ版) 対応 対応 影響なし 対策済 影響なし 既定で無効[注 16] [71] [72] 対策済 対策済 一時的[注 11] 67–69 非対応 非対応 対応 対応 対応 対応(ドラフト版) 対応(デスクトップ版) 対応 対応 影響なし 対策済 影響なし 既定で無効[注 16] [71] [72] 対策済 対策済 一時的[注 11] 70–79 80 非対応 非対応 対応 対応 対応 対応 対応(デスクトップ版) 対応 対応 影響なし 対策済 影響なし 既定で無効[注 16] [71] [72] 対策済 対策済 一時的[注 11] Android ブラウザ [73] Android 1.0 , 1.1 , 1.5 , 1.6 , 2.0–2.1 , 2.2–2.2.3 非対応 既定で有効 対応 非対応 非対応 非対応 不明 非対応 非対応 不明 不明 脆弱 脆弱 脆弱 脆弱 不可 Android 2.3–2.3.7 , 3.0–3.2.6 , 4.0–4.0.4 非対応 既定で有効 対応 非対応 非対応 非対応 不明 対応[47] Android 3.0以降[74] 不明 不明 脆弱 脆弱 脆弱 脆弱 不可 Android 4.1–4.3.1 , 4.4–4.4.4 非対応 既定で有効 対応 既定で無効[75] 既定で無効[75] 非対応 不明 対応 対応[48] 不明 不明 脆弱 脆弱 脆弱 脆弱 不可 Android 5.0-5.0.2 非対応 既定で有効 対応 対応[75] [76] 対応[75] [76] 非対応 不明 対応 対応 不明 不明 脆弱 脆弱 脆弱 脆弱 不可 Android 5.1-5.1.1 非対応 不明 対応 対応 対応 非対応 不明 対応 対応 不明 不明 影響なし フォールバックの場合のみ[注 15] 対策済 対策済 不可 Android 6.0 -7.1.2 非対応 不明 対応 対応 対応 非対応 不明 対応 対応 不明 不明 影響なし 既定で無効 対策済 対策済 不可 Android 8.0 -9.0 非対応 非対応[77] 対応 対応 対応 非対応 不明 対応 対応 不明 不明 影響なし 既定で無効 対策済 対策済 不可 Android 10.0 非対応 非対応 対応 対応 対応 対応 不明 対応 対応 不明 不明 影響なし 既定で無効 対策済 対策済 不可 ブラウザ バージョン プラットフォーム SSL 2.0(安全ではない) SSL 3.0(安全ではない) TLS 1.0 TLS 1.1 TLS 1.2 TLS 1.3 EV証明書 SHA-2証明書 ECDSA証明書 BEAST CRIME POODLE (SSLv3) RC4 FREAK Logjam プロトコル選択 Mozilla Firefox (Firefox for Mobile ) [注 17] 1.0 Windows (7以降) macOS (OS X v10.9以降) Linux Android (4.1以降) Firefox OS iOS (10.3以降) Maemo ESR:Windows (7以降) macOS (OS X v10.9以降) Linux 既定で有効[78] 既定で有効[78] 対応[78] 非対応 非対応 非対応 非対応 対応[47] 非対応 影響なし[79] 影響なし 脆弱 脆弱 影響なし 脆弱 可[注 10] 1.5 既定で有効 既定で有効 対応 非対応 非対応 非対応 非対応 対応 非対応 影響なし 影響なし 脆弱 脆弱 影響なし 脆弱 可[注 10] 2 既定で無効[78] [80] 既定で有効 対応 非対応 非対応 非対応 非対応 対応 対応[48] 影響なし 影響なし 脆弱 脆弱 影響なし 脆弱 可[注 10] 3–7 既定で無効 既定で有効 対応 非対応 非対応 非対応 対応 対応 対応 影響なし 影響なし 脆弱 脆弱 影響なし 脆弱 可[注 10] 8–10ESR 10 非対応[80] 既定で有効 対応 非対応 非対応 非対応 対応 対応 対応 影響なし 影響なし 脆弱 脆弱 影響なし 脆弱 可[注 10] 11–14 非対応 既定で有効 対応 非対応 非対応 非対応 対応 対応 対応 影響なし 脆弱(SPDY) [57] 脆弱 脆弱 影響なし 脆弱 可[注 10] 15–22ESR 17.0–17.0.10 非対応 既定で有効 対応 非対応 非対応 非対応 対応 対応 対応 影響なし 対策済 脆弱 脆弱 影響なし 脆弱 可[注 10] ESR 17.0.11 非対応 既定で有効 対応 非対応 非対応 非対応 対応 対応 対応 影響なし 対策済 脆弱 優先度最低[81] [82] 影響なし 脆弱 可[注 10] 23 非対応 既定で有効 対応 既定で無効[83] 非対応 非対応 対応 対応 対応 影響なし 対策済 脆弱 脆弱 影響なし 脆弱 可[注 18] 24, 25.0.0ESR 24.0–24.1.0 非対応 既定で有効 対応 既定で無効 既定で無効[85] 非対応 対応 対応 対応 影響なし 対策済 脆弱 脆弱 影響なし 脆弱 可[注 18] 25.0.1, 26ESR 24.1.1–24.8.1 非対応 既定で有効 対応 既定で無効 既定で無効 非対応 対応 対応 対応 影響なし 対策済 脆弱 優先度最低[81] [82] 影響なし 脆弱 可[注 18] 27–33ESR 31.0–31.2 非対応 既定で有効 対応 対応[86] [87] 対応[88] [87] 非対応 対応 対応 対応 影響なし 対策済 脆弱 優先度最低 影響なし 脆弱 可[注 18] 34, 35ESR 31.3–31.7 非対応 既定で無効[89] [90] 対応 対応 対応 非対応 対応 対応 対応 影響なし 対策済 対策済[注 19] 優先度最低 影響なし 脆弱 可[注 18] ESR 31.8 非対応 既定で無効 対応 対応 対応 非対応 対応 対応 対応 影響なし 対策済 対策済 優先度最低 影響なし 対策済[93] 可[注 18] 36–38ESR 38.0 非対応 既定で無効 対応 対応 対応 非対応 対応 対応 対応 影響なし 対策済 対策済 フォールバックの場合のみ[注 15] [94] 影響なし 脆弱 可[注 18] ESR 38.1–38.8 非対応 既定で無効 対応 対応 対応 非対応 対応 対応 対応 影響なし 対策済 対策済 フォールバックの場合のみ[注 15] 影響なし 対策済[93] 可[注 18] 39–43 非対応 非対応[95] 対応 対応 対応 非対応 対応 対応 対応 影響なし 対策済 影響なし フォールバックの場合のみ[注 15] 影響なし 対策済[93] 可[注 18] 44–48ESR 45.0 非対応 非対応 対応 対応 対応 非対応 対応 対応 対応 影響なし 対策済 影響なし 既定で無効[注 16] [96] [97] [98] [99] 影響なし 対策済 可[注 18] 49–59ESR 52 非対応 非対応 対応 対応 対応 既定で無効(実験的) [100] 対応 対応 対応 影響なし 対策済 影響なし 既定で無効[注 16] / 影響なし 対策済 可[注 18] 60–62ESR 60 非対応 非対応 対応 対応 対応 対応(ドラフト版) 対応 対応 対応 影響なし 対策済 影響なし 既定で無効[注 16] / 影響なし 対策済 可[注 18] 63–73ESR 68.0–68.5 非対応 非対応 対応 対応 対応 対応 対応 対応 対応 影響なし 対策済 影響なし 既定で無効[注 16] / 影響なし 対策済 可[注 18] ESR 68.6 74 非対応 非対応 既定で無効 既定で無効 対応 対応 対応 対応 対応 影響なし 対策済 影響なし 既定で無効[注 16] / 影響なし 対策済 可[注 18] ブラウザ バージョン プラットフォーム SSL 2.0(安全ではない) SSL 3.0(安全ではない) TLS 1.0 TLS 1.1 TLS 1.2 TLS 1.3 EV証明書 SHA-2証明書 ECDSA証明書 BEAST CRIME POODLE (SSLv3) RC4 FREAK Logjam プロトコル選択 Microsoft Internet Explorer [注 20] 1 Windows 3.1 , 95 , NT [注 21] ,[注 22] System 7, Mac OS TLS/SSL非対応 2 対応 非対応 非対応 非対応 非対応 非対応 非対応 非対応 非対応 SSLv3/TLSv1非対応 脆弱 脆弱 脆弱 不明 3 対応 対応[103] 非対応 非対応 非対応 非対応 非対応 非対応 非対応 脆弱 影響なし 脆弱 脆弱 脆弱 脆弱 N/A 4, 5 Windows 3.1 , 95 , 98 , NT [注 21] ,[注 22] System 7, Mac OS , Mac OS X Solaris HP-UX 既定で有効 既定で有効 既定で無効[103] 非対応 非対応 非対応 非対応 非対応 非対応 脆弱 影響なし 脆弱 脆弱 脆弱 脆弱 可[注 10] 6 Windows 98 , Me Windows NT [注 21] , 2000 [注 22] 既定で有効 既定で有効 既定で無効[103] 非対応 非対応 非対応 非対応 非対応 非対応 脆弱 影響なし 脆弱 脆弱 脆弱 脆弱 可[注 10] 6 Windows XP [注 22] 既定で有効 既定で有効 既定で無効 非対応 非対応 非対応 非対応 対応[注 23] [104] 非対応 対策済 影響なし 脆弱 脆弱 脆弱 脆弱 可[注 10] 6 Server 2003 [注 22] 既定で有効 既定で有効 既定で無効 非対応 非対応 非対応 非対応 対応[注 23] [104] 非対応 対策済 影響なし 脆弱 脆弱 対策済[107] 対策済[108] 可[注 10] 7 , 8 Windows XP [注 22] 既定で無効[109] 既定で有効 対応[109] 非対応 非対応 非対応 対応 対応[注 23] [104] 非対応 対策済 影響なし 脆弱 脆弱 脆弱 脆弱 可[注 10] 7 , 8 Server 2003 [注 22] 既定で無効[109] 既定で有効 対応[109] 非対応 非対応 非対応 対応 対応[注 23] [104] 非対応 対策済 影響なし 脆弱 脆弱 対策済[107] 対策済[108] 可[注 10] 7 , 8 , 9 [110] Windows Vista 既定で無効[109] 既定で有効 対応[109] 非対応 非対応 非対応 対応 対応[注 23] [104] 対応[48] 対策済 影響なし 脆弱 脆弱 対策済[107] 対策済[108] 可[注 10] Server 2008 8 , 9 , 10 Windows 7 既定で無効 既定で有効 対応 既定で無効[111] 既定で無効[111] 非対応 対応 対応 対応 対策済 影響なし 脆弱 優先度最低[112] [注 24] 対策済[107] 対策済[108] 可[注 10] Server 2008 R2 10 Windows 8 既定で無効 既定で有効 対応 既定で無効[111] 既定で無効[111] 非対応 対応 対応 対応 対策済 影響なし 脆弱 優先度最低[112] [注 24] 対策済[107] 対策済[108] 可[注 10] 10 Server 2012 11 Windows 7 既定で無効 既定で無効[注 25] 対応 対応[114] 対応[114] 非対応 対応 対応 対応 対策済 影響なし 対策済[注 25] 優先度最低[112] [注 24] 対策済[107] 対策済[108] 可[注 10] Server 2008 R2 11 Windows 8.1 既定で無効 既定で無効[注 25] 対応 対応[114] 対応[114] 非対応 対応 対応 対応 対策済 影響なし 対策済[注 25] 既定で無効[注 16] [118] [119] }} 対策済[107] 対策済[108] 可[注 10] Server 2012 R2 11 Windows 10 既定で無効 既定で無効 対応 対応 対応 非対応 対応 対応 対応 対策済 影響なし 対策済 既定で無効[注 16] 対策済 対策済 可[注 10] Server 2016 Microsoft Edge [注 26] およびInternet Explorer (フォールバックとして) [注 20] IE 11 12–13[注 27] Windows 10 v1507–v1511既定で無効 既定で無効 対応 対応 対応 非対応 対応 対応 対応 対策済 影響なし 対策済 既定で無効[注 16] 対策済 対策済 可[注 10] Windows 10 LTSB 2015 (v1507)11 14–18 Windows 10 v1607–v1803非対応[121] 既定で無効 対応 対応 対応 非対応 対応 対応 対応 対策済 影響なし 対策済 既定で無効[注 16] 対策済 対策済 可[注 10] 11 18 Windows 10 v1809非対応 既定で無効 対応 対応 対応 非対応 対応 対応 対応 対策済 影響なし 対策済 既定で無効[注 16] 対策済 対策済 可[注 10] 11 18 Windows 10 v1903非対応 既定で無効 対応 対応 対応 非対応 対応 対応 対応 対策済 影響なし 対策済 既定で無効[注 16] 対策済 対策済 可[注 10] 11 Windows 10 LTSB 2016 (v1607)非対応 既定で無効 対応 対応 対応 非対応 対応 対応 対応 対策済 影響なし 対策済 既定で無効[注 16] 対策済 対策済 可[注 10] 11 Windows Server 2016 v1607 (LTSB) 非対応 既定で無効 対応 対応 対応 非対応 対応 対応 対応 対策済 影響なし 対策済 既定で無効[注 16] 対策済 対策済 可[注 10] 11 Windows Server 2019 v1809 (LTSC) 非対応 既定で無効 対応 対応 対応 非対応 対応 対応 対応 対策済 影響なし 対策済 既定で無効[注 16] 対策済 対策済 可[注 10] 11 18 Windows 10 v1909非対応 既定で無効 対応 対応 対応 既定で無効(実験的) 対応 対応 対応 対策済 影響なし 対策済 既定で無効[注 16] 対策済 対策済 可[注 10] Microsoft Internet Explorer Mobile [注 20] 7, 9 Windows Phone 7, 7.5, 7.8 既定で無効[109] 既定で有効 対応 非対応[要出典 ] 非対応[要出典 ] 非対応 非対応[要出典 ] 対応 対応[74] 不明 影響なし 脆弱 脆弱 脆弱 脆弱 要サードパーティ製ツール[注 28] 10 Windows Phone 8 既定で無効 既定で有効 対応 既定で無効[123] 既定で無効[123] 非対応 非対応[要出典 ] 対応 対応[124] 対策済 影響なし 脆弱 脆弱 脆弱 脆弱 要サードパーティ製ツール[注 28] 11 Windows Phone 8.1 既定で無効 既定で有効 対応 対応[125] 対応[125] 非対応 非対応[要出典 ] 対応 対応 対策済 影響なし 脆弱 フォールバックの場合のみ[注 15] [118] [119] 脆弱 脆弱 要サードパーティー製ツール[注 28] Microsoft Edge [注 20] 13[注 26] Windows 10 Mobile v1511既定で無効 既定で無効 対応 対応 対応 非対応 対応 対応 対応 対策済 影響なし 対策済 既定で無効[注 16] 対策済 対策済 不可 14, 15 Windows 10 Mobile v1607–v1709非対応[121] 既定で無効 対応 対応 対応 非対応 対応 対応 対応 対策済 影響なし 対策済 既定で無効[注 16] 対策済 対策済 不可 ブラウザ バージョン プラットフォーム SSL 2.0(安全ではない) SSL 3.0(安全ではない) TLS 1.0 TLS 1.1 TLS 1.2 TLS 1.3 EV証明書 SHA-2証明書 ECDSA証明書 BEAST CRIME POODLE (SSLv3) RC4 FREAK Logjam プロトコル選択 Opera (Opera Mobile ) (Presto およびそれ以前) [注 29] 1, 2 Windows OS X Linux Android Symbian S60 Maemo Windows Mobile TLS/SSL非対応[126] 3 対応[127] 非対応 非対応 非対応 非対応 非対応 非対応 非対応 非対応 SSLv3/TLSv1非対応 脆弱 不明 不明 N/A 4 対応 対応[128] 非対応 非対応 非対応 非対応 非対応 非対応 非対応 脆弱 影響なし 脆弱 脆弱 不明 不明 不明 5 既定で有効 既定で有効 対応[129] 非対応 非対応 非対応 非対応 非対応 非対応 脆弱 影響なし 脆弱 脆弱 不明 不明 可[注 10] 6, 7 既定で有効 既定で有効 対応[129] 非対応 非対応 非対応 非対応 対応[47] 非対応 脆弱 影響なし 脆弱 脆弱 不明 不明 可[注 10] 8 既定で有効 既定で有効 対応 既定で無効[130] 非対応 非対応 非対応 対応 非対応 脆弱 影響なし 脆弱 脆弱 不明 不明 可[注 10] 9 既定で無効[131] 既定で有効 対応 対応 非対応 非対応 v9.5より対応(デスクトップ版) 対応 非対応 脆弱 影響なし 脆弱 脆弱 不明 不明 可[注 10] 10–11.52 非対応[132] 既定で有効 対応 既定で無効 既定で無効[132] 非対応 対応(デスクトップ版) 対応 非対応 脆弱 影響なし 脆弱 脆弱 不明 不明 可[注 10] 11.60–11.64 非対応 既定で有効 対応 既定で無効 既定で無効 非対応 対応(デスクトップ版) 対応 非対応 対策済[133] 影響なし 脆弱 脆弱 不明 不明 可[注 10] 12–12.14 非対応 既定で無効[注 30] 対応 既定で無効 既定で無効 非対応 対応(デスクトップ版) 対応 非対応 対策済 影響なし 対策済[注 30] 脆弱 不明 対策済[135] 可[注 10] 12.15–12.17 非対応 既定で無効 対応 既定で無効 既定で無効 非対応 対応(デスクトップ版) 対応 非対応 対策済 影響なし 対策済 部分的に対策済[136] [137] 不明 対策済[135] 可[注 10] 12.18 非対応 既定で無効 対応 対応[138] 対応[138] 非対応 対応(デスクトップ版) 対応 対応[138] 対策済 影響なし 対策済 既定で無効[注 16] [138] 対策済[138] 対策済[135] 可[注 10] Opera (Opera Mobile ) (WebKit /Blink ) [注 31] 14–16 Windows (7以降) macOS (Mac OS X v10.10以降) Linux Android (4.4以降) 非対応 既定で有効 対応 対応[141] 非対応[141] 非対応 対応(デスクトップ版) OSがSHA-2対応の場合 [47] OSがECC対応の場合 [48] 影響なし 対策済 脆弱 脆弱 脆弱(Windows版を除く) 脆弱 一時的[注 11] 17–19 非対応 既定で有効 対応 対応[142] 対応[142] 非対応 対応(デスクトップ版) OSがSHA-2対応の場合 [47] OSがECC対応の場合 [48] 影響なし 対策済 脆弱 脆弱 脆弱(Windows版を除く) 脆弱 一時的[注 11] 20–24 非対応 既定で有効 対応 対応 対応 非対応 対応(デスクトップ版) OSがSHA-2対応の場合 [47] OSがECC対応の場合 [48] 影響なし 対策済 部分的に対策済[注 32] 優先度最低[143] 脆弱(Windows版を除く) 脆弱 一時的[注 11] 25, 26 非対応 既定で有効[注 33] 対応 対応 対応 非対応 対応(デスクトップ版) 対応 OSがECC対応の場合 [48] 影響なし 対策済 対策済[注 34] 優先度最低 脆弱(Windows版を除く) 脆弱 一時的[注 11] 27 非対応 既定で無効[67] 対応 対応 対応 非対応 対応(デスクトップ版) 対応 OSがECC対応の場合 [48] 影響なし 対策済 対策済[注 35] 優先度最低 脆弱(Windows版を除く) 脆弱 可[注 36] (デスクトップ版) 28, 29 非対応 既定で無効 対応 対応 対応 非対応 対応(デスクトップ版) 対応 OSがECC対応の場合 [48] 影響なし 対策済 対策済 優先度最低 対策済 脆弱 可[注 36] (デスクトップ版) 30 非対応 既定で無効 対応 対応 対応 非対応 対応(デスクトップ版) 対応 OSがECC対応の場合 [48] 影響なし 対策済 対策済 フォールバックの場合のみ[注 15] [68] 対策済 対策済[135] 可[注 36] (デスクトップ版) 31–34 非対応 非対応[69] 対応 対応 対応 非対応 対応(デスクトップ版) 対応 OSがECC対応の場合 [48] 影響なし 対策済 影響なし フォールバックの場合のみ[注 15] [68] 対策済 対策済 一時的[注 11] 35, 36 非対応 非対応 対応 対応 対応 非対応 対応(デスクトップ版) 対応 OSがECC対応の場合 [48] 影響なし 対策済 影響なし 既定で無効[注 16] [71] [72] 対策済 対策済 一時的[注 11] 37–40 非対応 非対応 対応 対応 対応 非対応 対応(デスクトップ版) 対応 対応 影響なし 対策済 影響なし 既定で無効[注 16] [71] [72] 対策済 対策済 一時的[注 11] 41–56 非対応 非対応 対応 対応 対応 既定で無効(ドラフト版) 対応(デスクトップ版) 対応 対応 影響なし 対策済 影響なし 既定で無効[注 16] [71] [72] 対策済 対策済 一時的[注 11] 57–66 67 非対応 非対応 対応 対応 対応 対応 対応(デスクトップ版) 対応 対応 影響なし 対策済 影響なし 既定で無効[注 16] [71] [72] 対策済 対策済 一時的[注 11] ブラウザ バージョン プラットフォーム SSL 2.0(安全ではない) SSL 3.0(安全ではない) TLS 1.0 TLS 1.1 TLS 1.2 TLS 1.3 EV証明書 SHA-2証明書 ECDSA証明書 BEAST CRIME POODLE (SSLv3) RC4 FREAK Logjam プロトコル選択 Apple Safari [注 37] 1 Mac OS X v10.2 , v10.3 非対応[145] 対応 対応 非対応 非対応 非対応 非対応 非対応 非対応 脆弱 影響なし 脆弱 脆弱 脆弱 脆弱 不可 2–5 Mac OS X v10.4 , v10.5 , Windows XP 非対応 対応 対応 非対応 非対応 非対応 v3.2以降 非対応 非対応 脆弱 影響なし 脆弱 脆弱 脆弱 脆弱 不可 3–5 Windows Vista , 7 非対応 対応 対応 非対応 非対応 非対応 v3.2以降 非対応 対応[74] 脆弱 影響なし 脆弱 脆弱 脆弱 脆弱 不可 4–6 Mac OS X v10.6 , v10.7 非対応 対応 対応 非対応 非対応 非対応 対応 対応[47] 対応[48] 脆弱 影響なし 脆弱 脆弱 脆弱 脆弱 不可 6 OS X v10.8 非対応 対応 対応 非対応 非対応 非対応 対応 対応 対応[48] 対策済[注 38] 影響なし 対策済[注 39] 脆弱[注 39] 対策済[151] 脆弱 不可 7, 9 OS X v10.9 非対応 対応 対応 対応[152] 対応[152] 非対応 対応 対応 対応 対策済[147] 影響なし 対策済[注 39] 脆弱[注 39] 対策済[151] 脆弱 不可 8 9 OS X v10.10 非対応 対応 対応 対応 対応 非対応 対応 対応 対応 対策済 影響なし 対策済[注 39] 優先度最低[153] [注 39] 対策済[151] 対策済[154] 不可 10 9-11 OS X v10.11 非対応 非対応 対応 対応 対応 非対応 対応 対応 対応 対策済 影響なし 影響なし 優先度最低 対策済 対策済 不可 10-12 macOS 10.12 非対応 非対応 対応 対応 対応 不明 対応 対応 対応 対策済 影響なし 影響なし 不明 対策済 対策済 不可 11, 12 13 macOS 10.13 非対応 非対応 対応 対応 対応 不明 対応 対応 対応 対策済 影響なし 影響なし 不明 対策済 対策済 不可 12 13 macOS 10.14 非対応 非対応 対応 対応 対応 対応(mac OS 10.14.4以降) 対応 対応 対応 対策済 影響なし 影響なし 不明 対策済 対策済 不可 13 macOS 10.15 非対応 非対応 対応 対応 対応 対応 対応 対応 対応 対策済 影響なし 影響なし 不明 対策済 対策済 不可 Safari (モバイル) [注 40] 3 iPhone OS 1, 2 非対応[158] 対応 対応 非対応 非対応 非対応 非対応 非対応 不明 脆弱 影響なし 脆弱 脆弱 脆弱 脆弱 不可 4, 5 iPhone OS 3, iOS 4 非対応 対応 対応 非対応 非対応 非対応 対応[159] 対応 iOS 4以降[74] 脆弱 影響なし 脆弱 脆弱 脆弱 脆弱 不可 5, 6 iOS 5, 6 非対応 対応 対応 対応[155] 対応[155] 非対応 対応 対応 対応 脆弱 影響なし 脆弱 脆弱 脆弱 脆弱 不可 7 iOS 7 非対応 対応 対応 対応 対応 非対応 対応 対応 対応[160] 対策済[161] 影響なし 脆弱 脆弱 脆弱 脆弱 不可 8 iOS 8 非対応 対応 対応 対応 対応 非対応 対応 対応 対応 対策済 影響なし 対策済[注 39] 優先度最低[162] [注 39] 対策済[163] 対策済[164] 不可 9 iOS 9 非対応 非対応 対応 対応 対応 非対応 対応 対応 対応 対策済 影響なし 影響なし 優先度最低 対策済 対策済 不可 10-11 iOS 10 , 11 非対応 非対応 対応 対応 対応 不明 対応 対応 対応 対策済 影響なし 影響なし 非対応 対策済 対策済 不可 12 iOS 12 非対応 非対応 対応 対応 対応 対応(iOS 12.2以降) [165] 対応 対応 対応 対策済 影響なし 影響なし 非対応 対策済 対策済 不可 13 iOS 13 非対応 非対応 対応 対応 対応 対応 対応 対応 対応 対策済 影響なし 影響なし 非対応 対策済 対策済 不可 ブラウザ バージョン プラットフォーム SSL 2.0(安全ではない) SSL 3.0(安全ではない) TLS 1.0 TLS 1.1 TLS 1.2 TLS 1.3 EV証明書 SHA-2証明書 ECDSA証明書 BEAST CRIME POODLE (SSLv3) RC4 FREAK Logjam プロトコル選択 ニンテンドーDSシリーズ(携帯ゲーム機) ニンテンドーDSブラウザー [166] DS 対応 対応 対応 非対応 非対応 非対応 非対応 不明 不明 不明 不明 不明 不明 不明 不明 不可 ニンテンドーDSiブラウザー [167] DSi 非対応 対応 対応 非対応 非対応 非対応 非対応 対応 非対応 脆弱 影響なし 脆弱 脆弱 脆弱 脆弱 不可 ニンテンドー3DSシリーズ(携帯ゲーム機) インターネットブラウザー [168] 3DS 非対応 非対応[169] 対応 対応[170] 対応[170] 非対応 対応 対応 非対応 対策済 影響なし 影響なし 優先度最低 対策済 対策済 不可 インターネットブラウザー New 3DS [171] 非対応 非対応 対応 対応 対応 非対応 対応 対応 非対応 対策済 影響なし 影響なし 優先度最低 対策済 対策済 不可 PSシリーズ (携帯ゲーム機) [172] PSP 非対応 対応 非対応 非対応 非対応 非対応 非対応 対応 不明 不明 不明 不明 不明 不明 不明 不可 PS Vita 非対応 非対応 対応 非対応 非対応 非対応 対応 対応 対応 不明 影響なし 影響なし 優先度最低 対策済 脆弱 不可 ブラウザ バージョン プラットフォーム SSL 2.0(安全ではない) SSL 3.0(安全ではない) TLS 1.0 TLS 1.1 TLS 1.2 TLS 1.3 EV証明書 SHA-2証明書 ECDSA証明書 BEAST CRIME POODLE (SSLv3) RC4 FREAK Logjam プロトコル選択 Wiiシリーズ(据置機) インターネットチャンネル [173] Wii 対応 対応 対応 対応 非対応 非対応 非対応 対応 非対応 脆弱 影響なし 脆弱 脆弱 不明 不明 不可 インターネットブラウザー [174] Wii U 非対応 非対応 対応 対応 対応 非対応 対応 対応 不明 不明 影響なし 影響なし 優先度最低 対策済 対策済 不可 Nintendo Switchシリーズ(据置機) 名称不明 Nintendo Switch 非対応 非対応 非対応 対応 対応 非対応 対応 対応 対応 影響なし 影響なし 影響なし 非対応 対策済 対策済 不可 PSシリーズ (据置機) [175] PS3 非対応 非対応[169] 対応[170] 非対応 非対応 非対応 不明 対応 非対応 不明 影響なし 影響なし 脆弱 対策済 対策済 不可 PS4 非対応 非対応 対応 対応[170] 対応[170] 非対応 対応 対応 対応 不明 影響なし 影響なし 優先度最低 対策済 脆弱 不可 ブラウザ バージョン プラットフォーム SSL 2.0 (安全ではない) SSL 3.0 (安全ではない) TLS 1.0 TLS 1.1 TLS 1.2 TLS 1.3 EV [注 3] SHA-2 ECDSA BEAST[注 4] CRIME[注 5] POODLE (SSLv3)[注 6] RC4[注 7] FREAK Logjam プロトコル選択[注 2] SSLプロトコル TLSプロトコル 証明書のサポート 脆弱性への対応[注 1]
色および注釈 状況 ブラウザ プラットフォーム ブラウザバージョン オペレーティングシステム 開発版 ブラウザバージョン オペレーティングシステム 現在の最新リリース ブラウザバージョン オペレーティングシステム 過去のリリース:サポート継続 ブラウザバージョン オペレーティングシステム 過去のリリース:サポート継続(残り期間12か月未満) ブラウザバージョン オペレーティングシステム 過去のリリース:開発終了 n/a オペレーティングシステム 混在 / 非特定 オペレーティングシステム (XX以降) そのブラウザの最新リリースがサポートするOSの最低バージョン オペレーティングシステム そのブラウザによるサポートが完全に終了したOS
注 ライブラリ TLS/SSLライブラリの多くはオープンソースソフトウェア である。
注 課題 バーチャルホスト TLSは、TCP/IPネットワークでホスト名ベースのバーチャルホスト を構成する際に問題となる。TCP/IPでは通信を開始する前にホスト名を解決 し、実際にはIPアドレス とポート番号で接続先を識別している。このためTLSのネゴシエーションの時点では、バーチャルホストのうちどのホスト名を期待しているのか判断できず、ホスト名ごとに異なるサーバー証明書を使い分けることができない。
TLSの拡張機能を定義するRFC 6066 では、ネゴシエーション時にホスト名を伝える手段としてServer Name Indication (SNI) を規定している。用例としては、HTTP の最新バージョンであるHTTP/2 においてTLSを利用する際はSNIの利用が必須とされている。
一方、証明書を使い分けず、1つの証明書を複数のバーチャルホストで使い回す方式も広く利用されている。X.509 証明書のフォーマットについて記述したRFC5280では、発行先ホスト名を保持するsubjectAltNameはひとつの証明書に複数のエントリを作成できると規定している。これを利用して、ホストに収容されたすべてのバーチャルホストに対応したsubjectAltNameを保持する証明書をクライアントに提示すれば良い。
また、発行先ホスト名にワイルドカード を使う方法も考えられる。HTTP over SSL/TLS (HTTPS) を定義するRFC 2818 は、ワイルドカードの適用について記述している。バーチャルホストの対象が、ひとつのドメイン名の中のホストであれば、この方法で対応できる場合もある。
どの方法も実装によって対応状況にバラつきがあり、環境によっては使えない可能性がある。なおIPアドレスベースのバーチャルホストであれば、ネゴシエーションの時点で確実にどのバーチャルホストを期待しているか判断できるので、問題なく証明書を使い分けることができる。
TLS/SSLの既知の脆弱性 TLS/SSLに対する攻撃のうち主なものを以下に挙げる。2015年2月に、TLS/SSLに対する既知の攻撃についての情報をまとめたRFC 7457 がIETFから公開されている。
暗号の危殆化を利用したもの TLS 1.2ではすでに危殆化したRC4、MD5、SHA1が選択可能であり、この事が脆弱性の原因となっている。
MD5はすでに衝突が容易に見つかるレベルまで危殆化しているため、これを利用したSLOTH攻撃 (CVE-2015-7575) が知られている。
SHA1もFreestart Collision[201] が見つかっており安全ではない。
RC4 RC4もTLSのすべてのバージョンにおいて利用を禁止するRFC 7465 が公開された。Mozilla およびマイクロソフト ではRC4を無効化することを推奨している[202] [203] [204] [205] 。
RC4 そのものに対する攻撃法は多く報告されているが、TLS/SSLにおいてRC4を用いたCipher Suiteについては、その脆弱性に対処されており安全であると考えられていた。2011年には、ブロック暗号のCBCモードの取り扱いに関する脆弱性であったBEAST攻撃への対応策の一つとして、ストリーム暗号であるためその影響を受けないRC4に切り替えることが推奨されていた[206] 。しかし、2013年にTLS/SSLでのRC4への効果的な攻撃が報告され、BEASTへの対応としてRC4を用いることは好ましくないとされた。RC4に対する攻撃は、AlFardan、Bernstein、Paterson、Poettering、Schuldtによって報告された。新たに発見されたRC4の鍵テーブルにおける統計的な偏り[208] を利用し、平文の一部を回復可能であるというものである[209] [210] 。この攻撃では、13 × 220 の暗号文を用いることで128ビットのRC4が解読可能であることが示され、2013年のUSENIX セキュリティシンポジウムにおいて「実現可能」と評された[211] [212] 。2013年現在では、NSA のような機関であればTLS/SSLを利用したとしてもRC4を解読可能であるとの疑惑がある[213] 。
2015年現在ではクライアントのほとんどは既にBEASTへの対処が完了していることから、RC4はもはや最良の選択肢ではなくなっており、TLS 1.0以前においてもCBCモードを用いることがより良い選択肢となっている[214] 。
ダウングレード攻撃 FREAK および Logjamかつてアメリカ合衆国からの暗号の輸出規制 が厳しかった時期に、規制を回避するために一時的に512ビットのRSA鍵を生成して、そちらで通信を行うというような手法が存在した[215] 。この手法については、一時的な公開鍵を素因数分解 することが可能であれば中間者攻撃 が成立することが1998年時点で指摘されていたが[216] 、コンピュータの性能向上、クラウドコンピューティング の普及により素因数分解が個人レベルですら現実的となったこと、さらに2015年 には、OpenSSL 、Safari 、Android などでは輸出用でない 暗号スイートでも512ビットの一時鍵を受け入れてしまう実装となっていたことが判明し、FREAK (Factoring RSA Export Keys)[217] として問題が再浮上している。
対策としては、すでに脆弱となっている輸出対応暗号の無効化、クライアント側では規格書通り、輸出暗号以外で一時的RSA鍵を使わないようにする[218] 、ということが挙げられる。
2015年5月、Logjam と呼ばれる脆弱性が発見された。これも、FREAKと同様に輸出用の512ビットの一時鍵を受け入れてしまうものである[219] 。FREAKとは異なり、LogjamはTLSプロトコル自体の脆弱性である。発見時点において、主要なブラウザのすべてがLogjamに対して脆弱である。
バージョンロールバック攻撃 False Start [220] (Google Chrome で有効化された[221] )やSnap StartといったTLS/SSLを高速化する変法は、攻撃者が一定条件下において本来利用可能なTLS/SSLのバージョンよりも低いバージョンでTLS/SSL接続を行うよう仕向けること[222] や、クライアントからサーバへ送られる利用可能なCipher Suiteの一覧を改竄し、より低い暗号強度やより弱い暗号化アルゴリズム・鍵交換アルゴリズムを使用するよう仕向けること[223] が可能であると報告されている。さらに、特定の環境においては、攻撃者がオフラインで暗号化に用いられた鍵を回復し、暗号化されたデータにアクセスすることも可能であることがAssociation for Computing Machinery (ACM) のコンピュータセキュリティカンファレンスで報告された[224] 。
Mac-then-Encrypt型の認証暗号に関するもの BEAST攻撃2011年9月23日、暗号研究者のThai DuongとJuliano Rizzoが、BEAST (Browser Exploit Against SSL/TLS )[225] と呼ばれるTLS 1.0におけるブロック暗号 のCBCモード の取り扱いに関する脆弱性のコンセプトをJavaアプレット の同一生成元ポリシー 違反によって実証した[226] [227] 。この脆弱性そのものは2002年にPhillip Rogawayによって発見されていた[228] が、2011年の発表までは実用的なエクスプロイト は報告されていなかった。
2006年に発表されたTLS 1.1においてBEASTへの脆弱性は修正されていたが、2011年の実証までTLS 1.1への対応はクライアント、サーバの双方でほとんど進んでいなかった。
Google ChromeおよびFirefoxはBEASTによる影響を直接的に受けることはないが[229] [230] 、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である。
マイクロソフト は2012年1月10日にSecurity Bulletin MS12-006を発表し、Windowsで用いられているライブラリであるSChannel に対して修正を加えた[231] 。Windows 7 以降では、TLS 1.1以降が利用可能である。
Apple 製品では、macOS ではv10.9においてTLS 1.1以降への対応およびTLS 1.0以前におけるBEAST脆弱性への対応がなされているが、v10.8以前では、TLS 1.1以降への対応、TLS 1.0以前におけるBEAST脆弱性への対応のいずれも行われていない。iOS では、5以降ではTLS 1.1以降が利用可能であるが、TLS 1.0以前におけるBEAST脆弱性への対応は行われていない。iOS 7ではじめてTLS 1.0以前におけるBEAST脆弱性への対応が行われた。
パディング攻撃TLSの初期のバージョンはパディングオラクル攻撃に対して脆弱であることが2002年に報告された。
Lucky Thirteen2013年には、Lucky Thirteen 攻撃(英語版 )と呼ばれる新たなパディング攻撃が報告されている。2014年現在では、多くの実装においてLucky Thirteen攻撃に対して対応済みである。
POODLE攻撃2014年9月15日、Google の研究者によって、SSL 3.0の設計に脆弱性が存在することが発表された[232] (CVE-2014-3566 )。これは、SSL 3.0においてブロック暗号をCBCモード で使用した際にパディング攻撃 が可能となるものであり、POODLE (Padding Oracle On Downgraded Legacy Encryption ) と名付けられた。平均してわずか256回のリクエストで暗号文の1バイトの解読が可能となる[43] [233] 。CVE IDはCVE-2014-3566 である。
この脆弱性はSSL 3.0の仕様のみに存在するものでありTLS 1.0以降に影響はないが、主要なすべてのブラウザではTLSでのハンドシェイクが失敗した場合にSSL 3.0での接続にダウングレードする。そのため、攻撃者はバージョンロールバック攻撃 によってSSL 3.0での接続を行わせることでこの脆弱性を利用可能となる[43] [233] 。
POODLE攻撃への根本的な対処法は、少なくともクライアント、サーバのどちらかでSSL 3.0を無効化することである。しかし、古いクライアント、サーバなどではTLS 1.0以降に対応していないため、互換性を考慮してSSL 3.0を無効化できない場合がある。そこで、POODLEの発見者は、TLS_FALLBACK_SCSV[234] の実装を推奨している。この実装によりTLSからSSL 3.0へのフォールバックが抑止されるが[43] [233] 、これはクライアント側だけでなくサーバ側の対応も必要である。
Google Chrome ブラウザやGoogleサービスのサーバは既にTLS_FALLBACK_SCSVに対応しており、加えて数か月以内にこれらクライアント、サーバからSSL 3.0のサポートを除去する予定である[233] 。2014年11月リリースのバージョン39においてSSL 3.0へのフォールバックを、2015年1月リリースのバージョン40においてSSL 3.0そのものを既定で無効化している。
Opera もGoogle Chromeと同様にTLS_FALLBACK_SCSVを実装済みであるほか、バージョン25において"anti-POODLE record splitting"と呼ばれる異なる対策を実装した[235] 。
Mozillaでは2014年12月リリースのMozilla Firefox 34およびESR 31.3からSSL 3.0を無効化したほか、Firefox 35においてTLS_FALLBACK_SCSVをサポートした[236] 。
マイクロソフトでは、グループポリシーからSSL 3.0を無効化する方法を公開しているほか[237] 、10月29日にWindows Vista、Server 2003およびそれ以降のIEにおいてSSL 3.0を無効化する"Fix it"を公開し、数か月以内にIEおよびマイクロソフトのオンラインサービスにおいてSSL 3.0を既定で無効化する方針を表明した[238] 。2015年2月のアップデートにおいて、IE 11の保護モードにおいてSSL 3.0へのフォールバックを既定で無効化した[239] 。加えて、2015年4月にIE 11においてSSL 3.0自体を既定で無効化した[240] 。
Safari (OS X v10.8以降およびiOS 8.1以降)では、POODLEへの対策としてSSL 3.0においてCBCモードのcipher suiteを無効化した[241] [242] 。これによりPOODLEの影響を受けることはなくなるが、SSL 3.0においてCBCモードを無効化したことで、脆弱性が指摘されているRC4 しか利用できなくなるという問題が生じている。
サーバ側では、NSS が2014年10月3日にリリースされたバージョン3.17.1および10月27日にリリースされた3.16.2.3でTLS_FALLBACK_SCSVに対応したほか[243] [244] 、2015年4月までにSSL 3.0を既定で無効化する予定である[245] 。OpenSSL は、10月15日リリースのバージョン1.0.1j、1.0.0、0.9.8zcでTLS_FALLBACK_SCSVに対応した[246] 。LibreSSL では、10月16日リリースのバージョン2.1.1でSSL 3.0を既定で無効化した[247] 。
2014年12月8日に、SSL 3.0ではなくTLS 1.0から1.2に対して有効なPOODLE攻撃の変法が報告された。この変法はTLSの仕様においてサーバ側に要求されているパディングのチェックを正しく行わない実装において、SSL 3.0を無効にしていたとしてもPOODLE攻撃が可能となるというものである[248] 。すなわち、SSL 3.0に対するものが仕様そのものの脆弱性であるのに対し、TLS 1.0以降に対するものは不適切な実装による脆弱性である。SSL Pulseでは、公開前の時点でHTTPS対応のサーバのうちおよそ10%がこの変法に対して脆弱であるとしている[249] 。この変法のCVE IDはCVE-2014-8730 である。この変法では、SSL 3.0へダウングレードさせる必要がなくTLS 1.2のままで攻撃が可能であるなど、オリジナルのSSL 3.0に対するPOODLE攻撃よりも実行が容易であるとされる[250] 。
圧縮サイドチャネル攻撃 TLS1.2では平文を圧縮した後に暗号化を施す。しかし圧縮後の平文のビット長さは圧縮前の平文に依存し、しかも暗号文のビット長は暗号化する文書=圧縮後の平文のビット長に依存するので、暗号文長から平文の情報が攻撃者に漏れてしまう。この事実を利用した攻撃を圧縮サイドチャネル攻撃 という。TLS1.2には以下の様な圧縮サイドチャネル攻撃が知られている。
CRIME攻撃2012年にBEAST攻撃の報告者によって、TLSにおいてデータ圧縮が有効な場合において、本来第三者に対して秘密であるべきCookieの内容が回復可能となるCRIME (Compression Ratio Info-leak Made Easy , 英語版 )が報告された[251] [252] 。ウェブサイトでのユーザ認証に使われているCookieの内容を回復されることで、セッションハイジャック が可能となる。2012年9月にはMozilla FirefoxおよびGoogle ChromeにおいてCRIMEへの対応が実施された。また、マイクロソフトによればInternet ExplorerはCRIMEの影響を受けない。
CRIMEの報告者によって、CRIMEがTLS以外にもデータ圧縮を利用するSPDY やHTTP といったプロトコルにも広く適用可能であることが示されていたにもかかわらず、クライアント、サーバのいずれにおいてもTLSやSPDYに対する修正しか行われず、HTTPに対する修正は行われなかった。
BREACH攻撃2013年に、HTTPでのデータ圧縮をターゲットとしたBREACH (Browser Reconnaissance and Exfiltration via Adaptive Compression of Hypertext , 英語版 )と呼ばれるCRIME攻撃の変法が報告された。BREACH攻撃では、ログイントークン、メールアドレスなどの個人情報をわずか30秒で取得可能であり、不正なリンクを訪れさせたり、正当なウェブページに不正なコンテンツを挿入することも可能であった[253] 。使用するアルゴリズム、Cipher Suiteを問わず、すべてのバージョンのTLS/SSLに対してBREACH攻撃は適用可能である[254] 。TLSでのデータ圧縮やSPDYでのヘッダ圧縮を無効とすることで容易に回避可能であったCRIMEとは異なり、BREACHを回避するためにはHTTPでのデータ圧縮を無効にする必要があるが、通信速度の向上のためにほぼすべてのサーバがHTTPデータ圧縮を有効としている現状では、これを無効化することは現実的ではない[253] 。
その他 再ネゴシエーション脆弱性 2009年11月4日、SSL 3.0以降の再ネゴシエーション機能を利用して、クライアントからのリクエストの先頭に中間者 が任意のデータを挿入できるという脆弱性が報告された[255] [256] 。プロトコル自体の脆弱性であり、すべての実装が影響を受ける。
この脆弱性への簡単な対策は、サーバにおいて再ネゴシエーションを禁止することである。根本対応としては、TLS Extensionを使った安全な再ネゴシエーション手順がRFC 5746 として提案されている。この脆弱性を利用した中間者攻撃では、サーバがRFC 5746 に対応しない限りクライアントは再ネゴシエーションが発生したことを検出できないので、クライアント側のみで対応することは不可能である。
切り詰め攻撃 TLSでの切り詰め攻撃では、ユーザがウェブサービスからログアウトすることを妨害し、意図せずログインしたままとすることが可能である。ユーザからログアウト要求が送信されたときに、攻撃者が偽のTCP FINメッセージ(これ以上データを送信しない)を平文で挿入する。このメッセージを受けたサーバでは、ユーザから送られたログアウト要求を受け取らないため、ユーザの意図とは異なりログイン状態が維持される[257] 。
2013年の報告[258] では、この攻撃への対応として、Gmail やHotmail などのウェブサービスでは、ログアウトが正常に完了した旨のページを表示するようになった。これにより、ログアウトしたか否かをユーザが確認することが可能となり、攻撃者によってログイン状態のアカウントを悪用される危険性が軽減される。
この攻撃では目標のコンピュータにマルウェアなどを導入する必要はないが、攻撃者が目標とサーバの間の回線に割り込むことが可能であること[257] と、目標のコンピュータに物理的にアクセス可能であることが求められる。
実装上の脆弱性をついたもの ハートブリードハートブリード(英 : Heartbleed )は、2014年に発覚したOpenSSL ライブラリのバージョン1.0.1から1.0.1fの間で発見された深刻なセキュリティ脆弱性である。この脆弱性を利用することで、TLS/SSLによって保護されているはずの情報を盗むことが可能である。
このバグでは、インターネット上の誰もが、脆弱性のあるOpenSSLを利用しているシステムのメモリにアクセスすることが可能となり、サービスプロバイダの認証やデータの暗号化に用いられている秘密鍵、ユーザのアカウントおよびパスワード、実際にやり取りされたデータなどを取得できる。これにより、メッセンジャーサービス、電子メールの盗聴、データの盗難、なりすましなどが可能となる。
ウェブサイトの統計 Trustworthy Internet Movementは、TLS/SSLに対する攻撃に対して脆弱なウェブサイトの統計を発表している。2019年8月における統計は以下の通りである[41] 。
TLS/SSLに対する攻撃に脆弱なウェブサイトの統計(括弧内は前月との差) 攻撃 セキュリティ 安全ではない 状況による 安全 その他 再ネゴシエーション脆弱性 0.3%安全ではない再ネゴシエーションに対応 0.1%両方に対応 98.4%安全な再ネゴシエーションに対応 1.1%再ネゴシエーション非対応 RC4攻撃 1.2%最新のブラウザで利用可能なRC4 Suiteをサポート 12.1%RC4 Suiteのいくつかをサポート 86.7%RC4によるCipher Suite非サポート N/A CRIME攻撃 0.6%脆弱 N/A N/A N/A ハートブリード <0.1%脆弱 N/A N/A N/A CCS Injection Vulnerability 0.2%脆弱かつ悪用可能 1.2%脆弱だが悪用不可能 96.9%脆弱ではない 1.7%不明 TLSへのPOODLE攻撃 SSL 3.0へのPOODLE攻撃は含まない 0.3%脆弱かつ悪用可能 N/A 99.5%脆弱ではない 0.2%不明 プロトコルダウングレード 11.3%TLS_FALLBACK_SCSV非サポート N/A 71.6%TLS_FALLBACK_SCSVサポート 17.0%不明
参考文献 Eric Rescorla『マスタリングTCP/IP SSL/TLS編』齊藤孝道・鬼頭利之・古森貞監訳(第1版第1刷)、オーム社、2003年11月28日。ISBN 4-274-06542-1 。 脚注 関連項目 外部リンク 標準化 2018年9月時点での最新版RFC 8446 : "The Transport Layer Security (TLS) Protocol Version 1.3". 過去の版RFC 2246 : "The TLS Protocol Version 1.0".RFC 4346 : "The Transport Layer Security (TLS) Protocol Version 1.1".RFC 5246 : "The Transport Layer Security (TLS) Protocol Version 1.2".RFC 8996 : "Deprecating TLS 1.0 and TLS 1.1" SSLは標準化されていないHickman, Kipp E.B. (1995年4月). “The SSL Protocol ”. 2013年7月31日 閲覧。 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 5469 : "DES and IDEA Cipher Suites for Transport Layer Security (TLS)"RFC 5289 : "TLS Elliptic Curve Cipher Suites with SHA-256/384 and AES Galois Counter Mode (GCM)".RFC 5487 : "Pre-Shared Key Cipher Suites for TLS with SHA-256/384 and AES Galois Counter Mode"RFC 5489 : "ECDHE_PSK Cipher Suites for Transport Layer Security (TLS)"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 6042 : "Transport Layer Security (TLS) Authorization Using KeyNote".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 6358 : "Additional Master Secret Inputs for TLS"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 6961 : "The Transport Layer Security (TLS) Multiple Certificate Status Request Extension"RFC 7027 : "Elliptic Curve Cryptography (ECC) Brainpool Curves for Transport Layer Security (TLS)".RFC 7250 : "Using Raw Public Keys in Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)"RFC 7251 : "AES-CCM Elliptic Curve Cryptography (ECC) Cipher Suites for TLS".RFC 7301 : "Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension".RFC 7366 : "Encrypt-then-MAC for Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)".RFC 7465 : "Prohibiting RC4 Cipher Suites".RFC 7507 : "TLS Fallback Signaling Cipher Suite Value (SCSV) for Preventing Protocol Downgrade Attacks".RFC 7568 : "Deprecating Secure Sockets Layer Version 3.0".RFC 7627 : "Transport Layer Security (TLS) Session Hash and Extended Master Secret Extension".RFC 7685 : "A Transport Layer Security (TLS) ClientHello Padding Extension".RFC 7905 : "ChaCha20-Poly1305 Cipher Suites for Transport Layer Security (TLS)".RFC 7918 : "Transport Layer Security (TLS) False Start"RFC 7919 : "Negotiated Finite Field Diffie-Hellman Ephemeral Parameters for Transport Layer Security (TLS)".RFC 7924 : "Transport Layer Security (TLS) Cached Information Extension"RFC 7925 : "Transport Layer Security (TLS) / Datagram Transport Layer Security (DTLS) Profiles for the Internet of Things"RFC 8442 : "ECDHE_PSK with AES-GCM and AES-CCM Cipher Suites for TLS 1.2 and DTLS 1.2"RFC 8422 : "Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer Security (TLS) Versions 1.2 and Earlier"RFC 8701 : "Applying Generate Random Extensions And Sustain Extensibility (GREASE) to TLS Extensibility"RFC 8492 : "Secure Password Ciphersuites for Transport Layer Security (TLS)" TLS 1.3の拡張RFC 8449 : "Record Size Limit Extension for TLS"RFC 8672 : "TLS Server Identity Pinning with Tickets"RFC 8734 : "Elliptic Curve Cryptography (ECC) Brainpool Curves for Transport Layer Security (TLS) Version 1.3"RFC 8879 : "TLS Certificate Compression"RFC 8902 : "TLS Authentication Using Intelligent Transport System (ITS) Certificates"RFC 8998 : "ShangMi (SM) Cipher Suites for TLS 1.3" TLSを含むカプセル化RFC 5216 : "The EAP -TLS Authentication Protocol"RFC 8472 : "Transport Layer Security (TLS) Extension for Token Binding Protocol Negotiation" X.509 (PKIX)との関係性RFC 6125 : "Representation and Verification of Domain-Based Application Service Identity within Internet Public Key Infrastructure Using X.509 (PKIX) Certificates in the Context of Transport Layer Security (TLS)"RFC 7633 : "X.509v3 Transport Layer Security (TLS) Feature Extension" その他RFC 5705 : "Keying Material Exporters for Transport Layer Security (TLS)"RFC 7457 : "Summarizing Known Attacks on Transport Layer Security (TLS) and Datagram TLS (DTLS)"RFC 7525 : "Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)"RFC 8447 : "IANA Registry Updates for TLS and DTLS"RFC 8448 : "Example Handshake Traces for TLS 1.3"RFC 8744 : "Issues and Requirements for Server Name Identification (SNI) Encryption in TLS" IANA