Transport Layer Security

Transport Layer Securityは、インターネットなどのコンピュータネットワークにおいてセキュリティを要求される通信を行うためのプロトコルである。主な機能として、通信相手の認証、通信内容の暗号化、改竄の検出を提供する。TLSは非営利組織IETFによって策定された。

当プロトコルはSSL  と呼ばれることも多い。これは、TLSの元になったプロトコルがSSLであり、そのSSLという名称が広く普及していることによる。SSLはNetscapeが設計・開発した。当初のSSLを元にして、以後、SSL 2、SSL 3がそれぞれ前バージョンの欠陥や脆弱性を修正するものとして公開された。SSLを拡張して、TLS、TLS 1.2、TLS 1.3が作られた。

2022年現在の最新版はTLS 1.3である。

1. 概要
-----

TLSは多くの場合、コネクション型のトランスポート層プロトコルとアプリケーション層の間で使われる。特にHTTPでの利用を意識して設計されているが、アプリケーション層の特定のプロトコルには依存せず、様々なアプリケーションにおいて使われている。TLS 1.1以降を元にしたプロトコルが、UDPやDCCPといったデータグラム型プロトコル上でも実装されており、こちらはDatagram Transport Layer Security  として独立して標準化されている。

TLSはHTTPなどのアプリケーション層のプロトコルと組み合わせることで、HTTPSなどセキュアな通信プロトコルを実現している。そのようなプロトコルとして以下のものがある。



1.1. アプリケーション層プロトコルへの適用
-----------------------

TLSは特定のアプリケーション層プロトコルに依存しないため、HTTP以外にも多くのプロトコルにおいて採用され、クレジットカード情報や個人情報、その他の機密情報を通信する際の手段として活用されている。

既存のアプリケーション層プロトコルでTLSを利用する場合、大きく2つの適用方式が考えられる。まずひとつは、下位層の接続を確立したらすぐにTLSのネゴシエーションを開始し、TLS接続が確立してからアプリケーション層プロトコルの通信を開始する方式である。もうひとつは、まず既存のアプリケーション層プロトコルで通信を開始し、その中でTLSへの切り替えを指示する方式である。切り替えコマンドとしてSTARTTLSが広まっているため、この方式自体をSTARTTLSと呼ぶこともある。

前者はアプリケーション層のプロトコルをまったく変更しなくてすむことが利点である。その反面、平文で接続を開始する実装と共存できなくなるため、既存のポート番号とは別にTLS対応用のポート番号が必要となる。実態としては、SSL/TLSの最初の適用例であるHTTPSをはじめとして、前者の方式を使うことが多い。ただし、この方式はバーチャルホストを構成する際に問題となる可能性がある。詳細は#バーチャルホストの節を参照。

なお、ポート番号を分ける方式をSSL、同一ポート番号で切替える方式をTLSと呼んでいる実装もある。TLS/SSLという用語の区別がプロトコルのバージョンを指しているか、アプリケーション層プロトコルへの適用方式を指しているかは、文脈で判断する必要がある。

1.2. セキュリティ上の考察
---------------

1.2.1. TLS適用の有無と使用アルゴリズムの強度
---------------------------

TLSを導入さえすればセキュリティが確保できるという認識は誤っている。TLS通信は、平文での通信に比べて余分な計算機能力を使用するため、本当に必要なとき以外は使用しないことが多い。システムはデータの重要性を判断することができないので、TLSが必要なときに正しく使われているかどうかは、利用者自身が判断しなければならない。

特にWorld Wide Webでは、ハイパーリンクによるページ遷移を繰り返して処理を行うため、どの通信でSSL/TLSが使用されているか把握することが重要になる。多くのウェブブラウザは、画面のどこかに南京錠のアイコンを表示したり、アドレスバーの色を変化させたりして、利用者に情報を提供している。

また実際に使用するアルゴリズムは双方のネゴシエーションによって決まるため、TLSを使用していても、システムとして許容はするが推奨できないアルゴリズムが採用される可能性がある。このような場合もダイアログメッセージなどを使って利用者に警告すべきである。

1.2.2. 証明書の正当性
--------------

TLSは公開鍵証明書を用いて認証を行い、なりすましを極力排除しようとする。しかしシステムの自動的な対応には限界があり、すべてのなりすましを検出できるわけではない。

公開鍵証明書には認証局による電子署名が与えられる。その署名の正当性を評価するためには認証局の証明書が必要であり、最終的にはルート証明書と呼ばれる一群の証明書に行きつく。各システムは、認証局の証明書として信用できるルート証明書を、あらかじめ保持している。認証局は自身の秘密鍵を厳重に秘匿し、また証明書の発行にあたっては正当なサーバ管理者かどうか確認することが求められる。これらが保証されない認証局のルート証明書を組み込むことは、TLSにおける認証機能を破綻させることになる。仮に認証局自体は安全でも、入手したルート証明書が本当に意図する認証局のものかどうか判断することは難しいという点も注意すべきである。

TLSで認証を行うためには、認証局の署名に加えて、証明書の発行先を確認する必要がある。確認しない場合、サーバAの管理権限を持たない者がサーバBとして正当な証明書を取得し、その証明書を使ってサーバAを名乗ることができてしまう。TLS用のサーバ証明書には発行先サーバのホスト名が書き込まれており、クライアントは自分が接続しようとしているサーバのホスト名と一致するかどうか確認することができる。

現実には「正当な」サーバであっても、これらの検証において「問題がある」と判断される証明書を使って運用されているサーバが少なからず存在する。セキュリティ研究者の高木浩光は、このような証明書のことを、オレオレ詐欺をもじって「オレオレ証明書」と呼んで批判している。

この検証は、システムに指示された接続先のホスト名と実際に接続した先のホスト名が一致することを検証しているのであり、利用者が意図する接続先とは必ずしも一致しないことに注意する必要がある。

例として、利用者が意図する接続先であるサーバ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は、情報処理推進機構  が公開している「安全なウェブサイトの作り方」という文書の「フィッシング詐欺を助長しないための対策」に対応する。

1.2.3. 乱数の品質
------------

他の多くの近代暗号と同様に、TLSもまた、暗号としての強度は乱数の品質に依存している。桁数の大きな暗号は推測が難しいという前提が暗号強度の根拠となっている。もし何らかの理由で乱数の出現確率が大きく偏るようなことがあれば、総当たり攻撃で解読される可能性が上昇する。通常は、これは実装の問題に起因している。

古い例では、Netscapeの初期の実装における乱数生成の脆弱性がある。プロセスIDや時刻から乱数を生成していることが判明し、これらの情報を取得できる場合には総当たり攻撃の所要時間が大幅に短くなるという問題があった。

2008年5月15日にはDebianが脆弱性に関する報告を発表した。OpenSSLライブラリのパッケージメンテナンスの際に誤ったパッチを導入した結果、鍵生成に適切な乱数が使われず僅か65536  通りの予測可能な物が生成されてしまった事を明らかにした。この影響を受けるのは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通り全てを総当たり攻撃で試すだけでいずれの鍵が使われているか解読可能であり、また脆弱な鍵がインストールされたDebianを含む全てのオペレーティングシステムにおいて緊急の対応が必要であると専門家が注意を呼びかけている。生成された鍵に問題があるため、Debian GNU/Linuxで生成した鍵をMicrosoft Windowsのような非UNIXシステムに導入しているような場合も、この脆弱性の影響を受ける。具体的対応については、Debianの報告の他、JPCERT/CCの勧告等に従うべきである。

2. プロトコル概要
----------

本説ではTLS 1.2の概要を説明する。

TLSには主なプロトコルとして暗号通信に必要な鍵  を鍵共有してセッションを確立するTLSハンドシェイクプロトコルと、master secretを用いて暗号通信することで確立されたセッションにおけるコネクションをセキュアにするTLSレコードプロトコルがある。

その他に用いている暗号方式やハッシュ関数等のアルゴリズムを変更する Change Cipher Spec プロトコルと通信相手からの通信終了要求や何らかのエラーを通知する アラートプロトコルがある。

2.1. TLSハンドシェイクプロトコル
--------------------

TLSハンドシェイクプロトコルは4つのフェーズに大別できる。



2.1.1. 第一フェーズ
-------------

第一のフェーズではサーバ・クライアント間で通信に必要情報の合意を図る。このフェーズでは、まずクライアントからサーバにClientHelloが送信され、次にサーバからクライアントにServerHelloが送信される。

ClientHelloはTLSのバージョン、乱数、セッションID、通信に用いる暗号方式やハッシュアルゴリズムのリスト 、通信内容の圧縮方法、および拡張領域の6つからなる。乱数は鍵共有におけるリプレイ攻撃を防ぐためのものである。

ServerHelloもClientHelloと同様の6つからなっている。ServerHelloの主な目的は、ClientHelloで提示された選択肢の中でサーバにとって好ましいものを選択する事で、例えばClientHelloで提示されたcipher_suitesの中から、サーバが通信に使いたいcipher_suiteを一組選ぶ。乱数はClientHelloとは独立して選ぶ。これもリプレイ攻撃を回避するためである。セッションIDは特に問題がなければClientHelloと同一のものを返す。

2.1.2. 第二フェーズ
-------------

第二フェーズではサーバからクライアントに対して鍵共有に必要な情報を送る。具体的にはサーバはCertificate、ServerKeyExchange、CertificateRequest、ServerHelloDoneをクライアントに送信する。

Certificateは鍵共有で用いる公開鍵とその証明書で別途取り決めがない限りX.509v3のフォーマットに従う。なお鍵共有方式としてDH_anonを用いている場合にはcertificateは必要ない。

ServerKeyExchangeは鍵共有プロトコルに依存して送るデータが異なるが、DH_anonであれば、//g////x// mod //p//}}という形のデータを送る。ここでx}}はサーバの秘密の乱数である。鍵共有プロトコルがDHE_DSS、DHE_RSA、DH_anonでは何らかのserver_key_exchangeを送るが、RSA、DH_DSS、DH_RSAでは何も送らない。

CertificateRequestはクライアントの公開鍵とその証明書を送ることを要求するためのもので、サーバが許容できる証明書の種別、ハッシュと署名方式、および認証局のリストからなっている。

そして最後にサーバ側からのメッセージ送信が終わった事を示すServerHelloDoneをクライアントに送る。

2.1.3. 第三フェーズ
-------------

第三フェーズではクライアントからサーバに対して鍵共有に必要な情報を送る。具体的にはクライアントはCertificate、ClientKeyExchange、CertificateVerifyをサーバに送る。

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である。

CertificateVerifyはクライアントが署名能力を持っていることを証明するためにこれまでTLSハンドシェイクプロトコルで送受信された全メッセージに対し、共有されたmaster secret で署名したものであるdate=2016年8月}}。

2.1.4. 第四フェーズ
-------------

クライアントは必要ならChange Cipher Spec プロトコルのメッセージをサーバに送り、終了を意味するFinishedをサーバに送る。同様にサーバも必要ならChange Cipher Spec プロトコルのメッセージをクライアントに送り、終了を意味するFinishedをクライアントに送る。

2.2. TLSレコードプロトコル
-----------------

TLSレコードプロトコルはアプリケーション層から受け取った通信内容を214バイト以下のブロックに分解  し、各ブロックを圧縮  し、圧縮されたブロックを認証暗号で暗号化するレコード Payload 防護を施した上で、通信内容を通信相手に送信する。

認証暗号は、TLS 1.1まではMACをつけた後で共通鍵暗号化するMAC-then-Encrypt  のみが利用可能であった。TLS 1.2からは、AES-GCMのようなAEADに分類される認証暗号専用の暗号利用モードも利用可能になり、TLS 1.3ではAEADのみが利用可能となっている。

認証暗号にブロック暗号を選択した場合、TLS 1.1以降においてIVはTLSレコードプロトコルの送信者がランダムに選ぶ。ランダムなIVは、BEAST攻撃への対策として有効である。一方、認証暗号で用いる共通鍵はTLSハンドシェイクプロトコルで共有されたmaster secretを用いる。

3. バージョン
--------

コンピュータの計算能力の向上とともに、認証の突破、暗号の解読、改竄も以前よりは容易に行えるようになり、セキュリティ確保のための技術も厳しさを増している。

2017年現在では、TLS 1.2 以上のバージョンの実装が推奨され、TLS 1.1 以下のサポートを停止するサイトも出てきている。2021年3月にはRFC 8996により、TLS 1.0〜TLS 1.1の使用禁止が求められている。



3.1. SSL 1.0
------------

ネットスケープコミュニケーションズ社がSSLの最初のバージョンとして設計していたが、設計レビューの段階でプロトコル自体に大きな脆弱性が発見され、破棄された。このため、2018年現在ではSSL 1.0を実装した製品はない。

3.2. 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を無効にしない限りこの脆弱性の影響を受ける可能性を否定できない。SSL 3.0以降に対応した実装が十分に普及したものとして、Internet Explorer 7やMozilla Firefox 2、Opera 9などは、初期状態でSSL 2.0を無効にしている。この決定を受け、SSL 2.0しか対応していなかったサーバでも、SSL 3.0以降へ対応する動きが広まっている。

SSL 2.0にはチェーン証明書がなく、ルートCAから発行したSSLサーバ証明書しか使うことができない。

2011年3月、6176}} によってSSL 2.0の使用は禁止された。

3.3. 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の仕様上の脆弱性が発見されたため、SSL 3.0への対応を打ち切り、TLS 1.0以降のみ対応への移行が望まれている。2015年6月、RFC 7568 によってSSL 3.0の使用は禁止された。

SSLについては、使うべきではない。

3.4. 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月、8996}}によりTLS 1.0を使用しないことが呼びかけられている。

なおTLS 1.0はSSL 3.0より新しい規格であることを示すため、ネゴシエーションにおけるバージョン番号は3.1となっている。

3.5. TLS 1.1
------------

2006年にRFC 4346としてTLS 1.1が制定された。TLS 1.0からの変更点は、新しく発見された攻撃手法に対する耐性の強化が中心である。特にCBC攻撃に対する耐性を上げるため、初期化ベクトルを明示的に指定することにし、さらにパディングの処理も改善された。また、予期せぬ回線クローズ後に、セッションを再開できるようになった。共通鍵暗号アルゴリズムとしてAESが選択肢に加わった。

2021年3月、8996}}によりTLS 1.1を使用しないことが呼びかけられている。

ネゴシエーションにおけるバージョン番号は3.2となっている。

3.6. TLS 1.2
------------

2008年8月にRFC 5246としてTLS 1.2が制定された。ハッシュのアルゴリズムにSHA-256が追加されたほか、ブロック暗号について、従来のCBCモードだけではなく、GCM、CCMといった認証付き暗号を用いたcipher suiteが利用可能となった。また、AESに関する記述がRFC 5246自体に含まれるようになった。

ネゴシエーションにおけるバージョン番号は3.3となっている。

3.7. TLS 1.3
------------

新たなTLSのバージョンとしてTLS 1.3が提案されてきたが、IETFは2018年3月23日に、ドラフト28を標準規格として承認し、同年8月10日にRFC 8446として公開した。

TLS 1.2からの変更点としては、データ圧縮の非サポート、forward secrecyではないcipher suiteおよび認証付き暗号ではないcipher suiteの廃止が挙げられる。なお名称をTLS 2.0やTLS 4等に変更することが検討されたが、最終的にTLS 1.3に落ち着いた。

4. 暗号スイート
---------

TLSではハンドシェイクプロトコルのClientHello・ServerHelloで、以後の通信で用いる暗号スイート  を決定する。TLS 1.2を策定している5246}}では、暗号スイートを以下のフォーマットで表現している：

TLS_DHE_DSS_WITH_AES_256_CBC_SHA256

これは次の意味である。

鍵共有方式として以下のものを用いる：
EDHの通信に
DSS署名したもの
認証暗号として平文にMACをつけた後に共通鍵暗号化するのもので
共通鍵暗号としてCBCモードの256ビット鍵AESを用い、
MACとしてはSHA256ハッシュ関数をベースとしたHMACを用いるTLS1.2では認証暗号としてMtE型のもののみならず、AES-GCMのような認証暗号専用に作られた暗号利用モードも用いる事ができるようになった。この場合MACはそもそも必要ない。

なお、RSA暗号とRSA署名を組み合わせる事で実現した鍵共有方式に対してはTLS_RSA_RSA_WITH…のようにRSAを2回書かず、TLS_RSA_WITH_…のように略記する。

鍵共有、共通鍵暗号、ハッシュ関数の全ての組み合わせが網羅されているわけではないので、同時に利用できない組み合わせも存在する。

4.1. 鍵共有
--------

SSL/TLS使用できる鍵共有方式は以下のとおりである。ここでDHはDiffie-Hellmanの事である。なおDH-ANON、ECDH-ANONは中間者攻撃に対して脆弱であることから安全とはみなされていない。

DH-ANON 、ECDH-ANON  はそれぞれ、送信データに署名する事なくDH鍵共有、ECDH鍵共有を行う方式である。
DHE-*はEphemeral DHと呼ばれるもので、鍵共有の際クライアント、サーバがx}}、y}}をランダムに選び、gx}}、gy}}を計算し、これらに署名文をつけた上で交換しあう方式である。gx}}、gy}}につける署名文を作成する署名方式は「*」の部分に記載されたものを使う。ECDHE-*はDHEの楕円DH版である。
DH-*はFixed DHもしくはnon-interactive DHと呼ばれるもので、Diffie-Hellmanで用いるパラメータがクライアントやサーバの公開鍵として認証局から公開鍵証明書を受け取っているケースのDiffie-Hellman鍵共有である。gx}}、gy}}に対する公開鍵証明書内の署名文を作成する署名方式は「*」の部分に記載されたものを使う。ECDH-*  はFixed DHの楕円DH版である。
RSA-*はランダムに選んだ共有鍵をサーバの公開鍵でRSA暗号化し、暗号文を「*」で指定された署名方式で署名したものをClientKeyExchangeにおいてクライアントがサーバに送る方式である。。いずれの鍵共有においても共有された鍵  を用いた擬似ランダム関数にクライアントが選んだ乱数とサーバが選んだ乱数等を並べたものを入力する事で最終的なmaster secretを得る。これによりリプレイ攻撃を防いでいる。

これらの鍵共有方式の対応状況は以下のとおりである：

事前共有鍵を用いた TLS_PSK、Secure Remote Password protocolを用いた TLS_SRP、ケルベロス認証を用いた KRB5 も存在する。

独立国家共同体のGOST規格によって規定された鍵共有アルゴリズムであるGOST R 34.10も提案されている。

4.2. 認証暗号
---------

4.2.1. 共通鍵暗号
------------

認証暗号に用いる共通鍵暗号として以下のものがある。



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 、AES CCM  が追加されている。IDEA CBC、DES CBCはTLS 1.2で廃止された。

ブロック暗号のCBCモードでの利用については、TLS 1.0以前においてBEAST攻撃と呼ばれる攻撃が可能であることが明らかとなっており、クライアント側、サーバ側での対応が必要とされている。TLS 1.1以降ではこの攻撃への根本的な対処として初期化ベクトルを明示的に指定し、パディングの処理が改善された。ブロック暗号であってもGCM、CCMなどの認証付き暗号を用いる場合にはこれらの攻撃を受けない。

ストリーム暗号であるRC4は前述のBEAST攻撃を受けることはないが、RC4には仕様上の脆弱性が存在する。2015年2月、TLSのすべてのバージョンにおいてRC4の利用を禁止する RFC 7465 が公開された。ストリーム暗号であるChaCha20と認証のためのPoly1305を組み合わせたChaCha20+Poly1305が RFC 7905 として標準化されている。

いくつかの国家標準に基づく暗号化アルゴリズムもTLSで利用可能であり、日本のCRYPTRECによる推奨暗号であるCamellia、韓国の情報通信標準規格に採用されているSEED、ARIAが追加されている。また、独立国家共同体のGOST規格によって規定された暗号化アルゴリズムであるGOST 28147-89も提案されている。

SSLが設計された当時は、アメリカ合衆国によって高強度暗号アルゴリズムの輸出が規制されていた。そのため、全世界で共通して利用できるアルゴリズムとして、DES・RC2・RC4に関して暗号強度を40ビットに制限したものが導入されていた。これらはTLS 1.1以降では利用が禁止されている。

また、鍵共有のみを行い暗号化は行わないこと  も可能であるが、平文でのやりとりとなることから安全とはみなされていない。

4.2.2. MAC
----------

TLS/SSLの各バージョンで使用できるMACの選択肢は以下のとおりである。下欄の「AEAD」は、共通鍵暗号として認証暗号を選んでいるのでMACを用いない事を意味する。

独立国家共同体のGOST規格によって規定されたアルゴリズムであるGOST 28147-89に基づくMACおよび、GOST R 34.11も提案されている。

5. 実装
-----

5.1. ウェブサイト
-----------

 注

5.2. ウェブブラウザ
------------

2021年1月現在、主要なウェブブラウザの最新版ではTLS 1.2、1.3が既定で有効であるが、過去のバージョンのOS向けなどサポートが継続しているウェブブラウザのいくつかのバージョンではそうではない。

TLS 1.3に対応しているが既定で無効：Internet Explorer 11
TLS 1.3に未対応：Internet Explorer 11TLS 1.0、1.1は脆弱性が危惧され、2020年から無効化が実施され始めている。

既知の脆弱性のいくつかへの対応は十分ではない。

POODLE攻撃への対応：いくつかのブラウザではTLS_FALLBACK_SCSVを実装済みでSSL 3.0へのフォールバックを抑止することが可能となっているが、これはクライアント側だけでなくサーバ側での対応も必要である。SSL 3.0そのものの無効化、"anti-POODLE record splitting"の実装、あるいはSSL 3.0におけるCBCモードのcipher suiteの無効化が根本的な対策となる。
Google Chrome：完了
Mozilla Firefox：完了
Internet Explorer：部分的
Opera：完了
Safari：完了
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を無効としている。2016年8月の月例アップデートにおいて、Inter Explorer 11およびEdgeにおいてRC4を用いたCipher Suiteのすべてが既定で無効化。
FREAK攻撃への対応:
Android 4以前の標準ブラウザはFREAK攻撃に対して脆弱である。
Internet Explorer 11 MobileはFREAK攻撃に対して脆弱である。
Google Chrome、Internet Explorer、Safari、OperaはFREAK攻撃に対して対応済みである。
Mozilla Firefox、Google Chrome、OperaはFREAK攻撃の影響を受けない。

5.3. ライブラリ
----------

TLS/SSLライブラリの多くはオープンソースソフトウェアである。

 注

6. 課題
-----

6.1. バーチャルホスト
-------------

TLSは、TCP/IPネットワークでホスト名ベースのバーチャルホストを構成する際に問題となる。TCP/IPでは通信を開始する前にホスト名を解決し、実際にはIPアドレスとポート番号で接続先を識別している。このためTLSのネゴシエーションの時点では、バーチャルホストのうちどのホスト名を期待しているのか判断できず、ホスト名ごとに異なるサーバー証明書を使い分けることができない。

TLSの拡張機能を定義するRFC 6066では、ネゴシエーション時にホスト名を伝える手段としてServer Name Indication  を規定している。用例としては、HTTPの最新バージョンであるHTTP/2においてTLSを利用する際はSNIの利用が必須とされている。

一方、証明書を使い分けず、1つの証明書を複数のバーチャルホストで使い回す方式も広く利用されている。X.509証明書のフォーマットについて記述したRFC5280では、発行先ホスト名を保持するsubjectAltNameはひとつの証明書に複数のエントリを作成できると規定している。これを利用して、ホストに収容されたすべてのバーチャルホストに対応したsubjectAltNameを保持する証明書をクライアントに提示すれば良い。

また、発行先ホスト名にワイルドカードを使う方法も考えられる。HTTP over SSL/TLS  を定義するRFC 2818は、ワイルドカードの適用について記述している。バーチャルホストの対象が、ひとつのドメイン名の中のホストであれば、この方法で対応できる場合もある。

どの方法も実装によって対応状況にバラつきがあり、環境によっては使えない可能性がある。なおIPアドレスベースのバーチャルホストであれば、ネゴシエーションの時点で確実にどのバーチャルホストを期待しているか判断できるので、問題なく証明書を使い分けることができる。

7. TLS/SSLの既知の脆弱性
-----------------

TLS/SSLに対する攻撃のうち主なものを以下に挙げる。2015年2月に、TLS/SSLに対する既知の攻撃についての情報をまとめた7457}}がIETFから公開されている。

7.1. 暗号の危殆化を利用したもの
------------------

TLS 1.2ではすでに危殆化したRC4、MD5、SHA1が選択可能であり、この事が脆弱性の原因となっている。

MD5はすでに衝突が容易に見つかるレベルまで危殆化しているため、これを利用したSLOTH攻撃  が知られている。

SHA1もFreestart Collisionが見つかっており安全ではない。

7.1.1. RC4
----------

RC4もTLSのすべてのバージョンにおいて利用を禁止するRFC 7465が公開された。MozillaおよびマイクロソフトではRC4を無効化することを推奨している。

RC4そのものに対する攻撃法は多く報告されているが、TLS/SSLにおいてRC4を用いたCipher Suiteについては、その脆弱性に対処されており安全であると考えられていた。2011年には、ブロック暗号のCBCモードの取り扱いに関する脆弱性であったBEAST攻撃への対応策の一つとして、ストリーム暗号であるためその影響を受けないRC4に切り替えることが推奨されていた。しかし、2013年にTLS/SSLでのRC4への効果的な攻撃が報告され、BEASTへの対応としてRC4を用いることは好ましくないとされた。RC4に対する攻撃は、AlFardan、Bernstein、Paterson、Poettering、Schuldtによって報告された。新たに発見されたRC4の鍵テーブルにおける統計的な偏りを利用し、平文の一部を回復可能であるというものである。この攻撃では、13 × 220の暗号文を用いることで128ビットのRC4が解読可能であることが示され、2013年のUSENIXセキュリティシンポジウムにおいて「実現可能」と評された。2013年現在では、NSAのような機関であればTLS/SSLを利用したとしてもRC4を解読可能であるとの疑惑がある。

2015年現在ではクライアントのほとんどは既にBEASTへの対処が完了していることから、RC4はもはや最良の選択肢ではなくなっており、TLS 1.0以前においてもCBCモードを用いることがより良い選択肢となっている。

7.2. ダウングレード攻撃
--------------

7.2.1. FREAKFREAK および Logjam
----------------------------

かつてアメリカ合衆国からの暗号の輸出規制が厳しかった時期に、規制を回避するために一時的に512ビットのRSA鍵を生成して、そちらで通信を行うというような手法が存在した。この手法については、一時的な公開鍵を素因数分解することが可能であれば中間者攻撃が成立することが1998年時点で指摘されていたが、コンピュータの性能向上、クラウドコンピューティングの普及により素因数分解が個人レベルですら現実的となったこと、さらに2015年には、OpenSSL、Safari、Androidなどでは輸出用でない暗号スイートでも512ビットの一時鍵を受け入れてしまう実装となっていたことが判明し、FREAK として問題が再浮上している。

対策としては、すでに脆弱となっている輸出対応暗号の無効化、クライアント側では規格書通り、輸出暗号以外で一時的RSA鍵を使わないようにする、ということが挙げられる。

2015年5月、Logjamと呼ばれる脆弱性が発見された。これも、FREAKと同様に輸出用の512ビットの一時鍵を受け入れてしまうものである。FREAKとは異なり、LogjamはTLSプロトコル自体の脆弱性である。発見時点において、主要なブラウザのすべてがLogjamに対して脆弱である。

7.2.2. バージョンロールバック攻撃
--------------------

False StartやSnap StartといったTLS/SSLを高速化する変法は、攻撃者が一定条件下において本来利用可能なTLS/SSLのバージョンよりも低いバージョンでTLS/SSL接続を行うよう仕向けることや、クライアントからサーバへ送られる利用可能なCipher Suiteの一覧を改竄し、より低い暗号強度やより弱い暗号化アルゴリズム・鍵交換アルゴリズムを使用するよう仕向けることが可能であると報告されている。さらに、特定の環境においては、攻撃者がオフラインで暗号化に用いられた鍵を回復し、暗号化されたデータにアクセスすることも可能であることがAssociation for Computing Machinery  のコンピュータセキュリティカンファレンスで報告された。

7.3. Mac-then-Encrypt型の認証暗号に関するもの
---------------------------------

7.3.1. BEAST}}BEAST攻撃
---------------------

2011年9月23日、暗号研究者のThai DuongとJuliano Rizzoが、BEAST  と呼ばれるTLS 1.0におけるブロック暗号のCBCモードの取り扱いに関する脆弱性のコンセプトをJavaアプレットの同一生成元ポリシー違反によって実証した。この脆弱性そのものは2002年にPhillip Rogawayによって発見されていたが、2011年の発表までは実用的なエクスプロイトは報告されていなかった。

2006年に発表されたTLS 1.1においてBEASTへの脆弱性は修正されていたが、2011年の実証までTLS 1.1への対応はクライアント、サーバの双方でほとんど進んでいなかった。

Google ChromeおよびFirefoxはBEASTによる影響を直接的に受けることはないが、MozillaはTLS/SSLのためのライブラリであるNetwork Security Services  に対して、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に対して修正を加えた。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脆弱性への対応が行われた。

7.4. パディングオラクル攻撃}}パディング攻撃
-------------------------

TLSの初期のバージョンはパディングオラクル攻撃に対して脆弱であることが2002年に報告された。

7.4.1. Lucky ThirteenLucky Thirteen
-----------------------------------

2013年には、Lucky Thirteen攻撃と呼ばれる新たなパディング攻撃が報告されている。2014年現在では、多くの実装においてLucky Thirteen攻撃に対して対応済みである。

7.4.2. POODLE}}POODLE攻撃
-----------------------

2014年9月15日、Googleの研究者によって、SSL 3.0の設計に脆弱性が存在することが発表された 。これは、SSL 3.0においてブロック暗号をCBCモードで使用した際にパディング攻撃が可能となるものであり、POODLE  と名付けられた。平均してわずか256回のリクエストで暗号文の1バイトの解読が可能となる。CVE IDは[2]である。

この脆弱性はSSL 3.0の仕様のみに存在するものでありTLS 1.0以降に影響はないが、主要なすべてのブラウザではTLSでのハンドシェイクが失敗した場合にSSL 3.0での接続にダウングレードする。そのため、攻撃者はバージョンロールバック攻撃によってSSL 3.0での接続を行わせることでこの脆弱性を利用可能となる。

POODLE攻撃への根本的な対処法は、少なくともクライアント、サーバのどちらかでSSL 3.0を無効化することである。しかし、古いクライアント、サーバなどではTLS 1.0以降に対応していないため、互換性を考慮してSSL 3.0を無効化できない場合がある。そこで、POODLEの発見者は、TLS_FALLBACK_SCSVの実装を推奨している。この実装によりTLSからSSL 3.0へのフォールバックが抑止されるが、これはクライアント側だけでなくサーバ側の対応も必要である。

Google ChromeブラウザやGoogleサービスのサーバは既にTLS_FALLBACK_SCSVに対応しており、加えて数か月以内にこれらクライアント、サーバからSSL 3.0のサポートを除去する予定である。2014年11月リリースのバージョン39においてSSL 3.0へのフォールバックを、2015年1月リリースのバージョン40においてSSL 3.0そのものを既定で無効化している。

OperaもGoogle Chromeと同様にTLS_FALLBACK_SCSVを実装済みであるほか、バージョン25において"anti-POODLE record splitting"と呼ばれる異なる対策を実装した。

Mozillaでは2014年12月リリースのMozilla Firefox 34およびESR 31.3からSSL 3.0を無効化したほか、Firefox 35においてTLS_FALLBACK_SCSVをサポートした。

マイクロソフトでは、グループポリシーからSSL 3.0を無効化する方法を公開しているほか、10月29日にWindows Vista、Server 2003およびそれ以降のIEにおいてSSL 3.0を無効化する"Fix it"を公開し、数か月以内にIEおよびマイクロソフトのオンラインサービスにおいてSSL 3.0を既定で無効化する方針を表明した。2015年2月のアップデートにおいて、IE 11の保護モードにおいてSSL 3.0へのフォールバックを既定で無効化した。加えて、2015年4月にIE 11においてSSL 3.0自体を既定で無効化した。

Safariでは、POODLEへの対策としてSSL 3.0においてCBCモードのcipher suiteを無効化した。これによりPOODLEの影響を受けることはなくなるが、SSL 3.0においてCBCモードを無効化したことで、脆弱性が指摘されているRC4しか利用できなくなるという問題が生じている。

サーバ側では、NSSが2014年10月3日にリリースされたバージョン3.17.1および10月27日にリリースされた3.16.2.3でTLS_FALLBACK_SCSVに対応したほか、2015年4月までにSSL 3.0を既定で無効化する予定である。OpenSSLは、10月15日リリースのバージョン1.0.1j、1.0.0、0.9.8zcでTLS_FALLBACK_SCSVに対応した。LibreSSLでは、10月16日リリースのバージョン2.1.1でSSL 3.0を既定で無効化した。

2014年12月8日に、SSL 3.0ではなくTLS 1.0から1.2に対して有効なPOODLE攻撃の変法が報告された。この変法はTLSの仕様においてサーバ側に要求されているパディングのチェックを正しく行わない実装において、SSL 3.0を無効にしていたとしてもPOODLE攻撃が可能となるというものである。すなわち、SSL 3.0に対するものが仕様そのものの脆弱性であるのに対し、TLS 1.0以降に対するものは不適切な実装による脆弱性である。SSL Pulseでは、公開前の時点でHTTPS対応のサーバのうちおよそ10%がこの変法に対して脆弱であるとしている。この変法のCVE IDは[3]である。この変法では、SSL 3.0へダウングレードさせる必要がなくTLS 1.2のままで攻撃が可能であるなど、オリジナルのSSL 3.0に対するPOODLE攻撃よりも実行が容易であるとされる。

7.5. 圧縮サイドチャネル攻撃
----------------

TLS1.2では平文を圧縮した後に暗号化を施す。しかし圧縮後の平文のビット長さは圧縮前の平文に依存し、しかも暗号文のビット長は暗号化する文書＝圧縮後の平文のビット長に依存するので、暗号文長から平文の情報が攻撃者に漏れてしまう。この事実を利用した攻撃を圧縮サイドチャネル攻撃という。TLS1.2には以下の様な圧縮サイドチャネル攻撃が知られている。

7.5.1. CRIME攻撃CRIME攻撃
---------------------

2012年にBEAST攻撃の報告者によって、TLSにおいてデータ圧縮が有効な場合において、本来第三者に対して秘密であるべきCookieの内容が回復可能となるCRIMEが報告された。ウェブサイトでのユーザ認証に使われているCookieの内容を回復されることで、セッションハイジャックが可能となる。2012年9月にはMozilla FirefoxおよびGoogle ChromeにおいてCRIMEへの対応が実施された。また、マイクロソフトによればInternet ExplorerはCRIMEの影響を受けない。

CRIMEの報告者によって、CRIMEがTLS以外にもデータ圧縮を利用するSPDYやHTTPといったプロトコルにも広く適用可能であることが示されていたにもかかわらず、クライアント、サーバのいずれにおいてもTLSやSPDYに対する修正しか行われず、HTTPに対する修正は行われなかった。

7.5.2. BREACH攻撃BREACH攻撃
-----------------------

2013年に、HTTPでのデータ圧縮をターゲットとしたBREACHと呼ばれるCRIME攻撃の変法が報告された。BREACH攻撃では、ログイントークン、メールアドレスなどの個人情報をわずか30秒で取得可能であり、不正なリンクを訪れさせたり、正当なウェブページに不正なコンテンツを挿入することも可能であった。使用するアルゴリズム、Cipher Suiteを問わず、すべてのバージョンのTLS/SSLに対してBREACH攻撃は適用可能である。TLSでのデータ圧縮やSPDYでのヘッダ圧縮を無効とすることで容易に回避可能であったCRIMEとは異なり、BREACHを回避するためにはHTTPでのデータ圧縮を無効にする必要があるが、通信速度の向上のためにほぼすべてのサーバがHTTPデータ圧縮を有効としている現状では、これを無効化することは現実的ではない。

7.6. その他
--------

7.6.1. 再ネゴシエーション脆弱性
-------------------

2009年11月4日、SSL 3.0以降の再ネゴシエーション機能を利用して、クライアントからのリクエストの先頭に中間者が任意のデータを挿入できるという脆弱性が報告された。プロトコル自体の脆弱性であり、すべての実装が影響を受ける。

この脆弱性への簡単な対策は、サーバにおいて再ネゴシエーションを禁止することである。根本対応としては、TLS Extensionを使った安全な再ネゴシエーション手順が5746}}として提案されている。この脆弱性を利用した中間者攻撃では、サーバが5746}}に対応しない限りクライアントは再ネゴシエーションが発生したことを検出できないので、クライアント側のみで対応することは不可能である。

7.6.2. 切り詰め攻撃
-------------

TLSでの切り詰め攻撃では、ユーザがウェブサービスからログアウトすることを妨害し、意図せずログインしたままとすることが可能である。ユーザからログアウト要求が送信されたときに、攻撃者が偽のTCP FINメッセージを平文で挿入する。このメッセージを受けたサーバでは、ユーザから送られたログアウト要求を受け取らないため、ユーザの意図とは異なりログイン状態が維持される。

2013年の報告では、この攻撃への対応として、GmailやHotmailなどのウェブサービスでは、ログアウトが正常に完了した旨のページを表示するようになった。これにより、ログアウトしたか否かをユーザが確認することが可能となり、攻撃者によってログイン状態のアカウントを悪用される危険性が軽減される。

この攻撃では目標のコンピュータにマルウェアなどを導入する必要はないが、攻撃者が目標とサーバの間の回線に割り込むことが可能であることと、目標のコンピュータに物理的にアクセス可能であることが求められる。

7.7. 実装上の脆弱性をついたもの
------------------

7.7.1. Heartbleed}}ハートブリード
--------------------------

ハートブリードは、2014年に発覚したOpenSSLライブラリのバージョン1.0.1から1.0.1fの間で発見された深刻なセキュリティ脆弱性である。この脆弱性を利用することで、TLS/SSLによって保護されているはずの情報を盗むことが可能である。

このバグでは、インターネット上の誰もが、脆弱性のあるOpenSSLを利用しているシステムのメモリにアクセスすることが可能となり、サービスプロバイダの認証やデータの暗号化に用いられている秘密鍵、ユーザのアカウントおよびパスワード、実際にやり取りされたデータなどを取得できる。これにより、メッセンジャーサービス、電子メールの盗聴、データの盗難、なりすましなどが可能となる。

7.8. ウェブサイトの統計
--------------

Trustworthy Internet Movementは、TLS/SSLに対する攻撃に対して脆弱なウェブサイトの統計を発表している。2019年8月における統計は以下の通りである。



8. 参考文献
-------

9. 脚注
-----

10. 関連項目
--------

HTTPS
Datagram Transport Layer Security
FTPS
SSH
GnuTLS
Network Security Services
OpenSSL
フィッシング
Extended Validation 証明書 
認証局
SSLオフロード

11. 外部リンク
---------

11.1. 標準化
---------

2018年9月時点での最新版
8446}}: "The Transport Layer Security  Protocol Version 1.3".
過去の版
2246}}: "The TLS Protocol Version 1.0".
4346}}: "The Transport Layer Security  Protocol Version 1.1".
5246}}: "The Transport Layer Security  Protocol Version 1.2".
8996}}: "Deprecating TLS 1.0 and TLS 1.1"
SSLは標準化されていない
last=Hickman This Internet Draft defines the now completely broken SSL 2.0.
6101}}: "The Secure Sockets Layer  Protocol Version 3.0".
TLS 1.0の拡張
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 ". 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  over an existing TCP connection. This allows unsecured and secured HTTP traffic to share the same //well known// port .
2818}}: "HTTP Over TLS", distinguishes secured traffic from insecure traffic by the use of a different 'server port'.
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  cipher suites to the previously existing symmetric ciphers.
3546}}: "Transport Layer Security  Extensions", adds a mechanism for negotiating protocol extensions during session initialisation and defines some extensions. Made obsolete by 4366}}.
RFC 3749: "Transport Layer Security Protocol Compression Methods", specifies the framework for compression methods and the DEFLATE compression method.
3943}}: "Transport Layer Security  Protocol Compression Using Lempel-Ziv-Stac ".
RFC 4132: "Addition of Camellia Cipher Suites to Transport Layer Security ".
RFC 4162: "Addition of SEED Cipher Suites to Transport Layer Security ".
RFC 4217: "Securing FTP with TLS".
4279}}: "Pre-Shared Key Ciphersuites for Transport Layer Security ", 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 .
4366}}: "Transport Layer Security  Extensions" describes both a set of specific extensions and a generic extension mechanism.
RFC 4492: "Elliptic Curve Cryptography  Cipher Suites for Transport Layer Security ".
4680}}: "TLS Handshake Message for Supplemental Data".
4681}}: "TLS User Mapping Extension".
4785}}: "Pre-Shared Key  Ciphersuites with NULL Encryption for Transport Layer Security ".
RFC 5054: "Using the Secure Remote Password  Protocol for TLS Authentication". Defines the TLS-SRP ciphersuites.
5077}}: "Transport Layer Security  Session Resumption without Server-Side State".
RFC 5081: "Using OpenPGP Keys for Transport Layer Security  Authentication", obsoleted by RFC 6091.
TLS 1.2の拡張
RFC 5288: "AES Galois Counter Mode  Cipher Suites for TLS".
5469}}: "DES and IDEA Cipher Suites for Transport Layer Security "
5289}}: "TLS Elliptic Curve Cipher Suites with SHA-256/384 and AES Galois Counter Mode ".
5487}}: "Pre-Shared Key Cipher Suites for TLS with SHA-256/384 and AES Galois Counter Mode"
5489}}: "ECDHE_PSK Cipher Suites for Transport Layer Security "
5746}}: "Transport Layer Security  Renegotiation Indication Extension".
5878}}: "Transport Layer Security  Authorization Extensions".
5932}}: "Camellia Cipher Suites for TLS"
6042}}: "Transport Layer Security  Authorization Using KeyNote".
RFC 6066: "Transport Layer Security  Extensions: Extension Definitions", includes Server Name Indication and OCSP stapling.
RFC 6091: "Using OpenPGP Keys for Transport Layer Security  Authentication".
6176}}: "Prohibiting Secure Sockets Layer  Version 2.0".
RFC 6209: "Addition of the ARIA Cipher Suites to Transport Layer Security ".
6347}}: "Datagram Transport Layer Security Version 1.2".
6358}}: "Additional Master Secret Inputs for TLS"
6367}}: "Addition of the Camellia Cipher Suites to Transport Layer Security ".
6460}}: "Suite B Profile for Transport Layer Security ".
RFC 6655: "AES-CCM Cipher Suites for Transport Layer Security ".
6961}}: "The Transport Layer Security  Multiple Certificate Status Request Extension"
7027}}: "Elliptic Curve Cryptography  Brainpool Curves for Transport Layer Security ".
7250}}: "Using Raw Public Keys in Transport Layer Security  and Datagram Transport Layer Security "
7251}}: "AES-CCM Elliptic Curve Cryptography  Cipher Suites for TLS".
7301}}: "Transport Layer Security  Application-Layer Protocol Negotiation Extension".
RFC 7366: "Encrypt-then-MAC for Transport Layer Security  and Datagram Transport Layer Security ".
7465}}: "Prohibiting RC4 Cipher Suites".
7507}}: "TLS Fallback Signaling Cipher Suite Value  for Preventing Protocol Downgrade Attacks".
7568}}: "Deprecating Secure Sockets Layer Version 3.0".
7627}}: "Transport Layer Security  Session Hash and Extended Master Secret Extension".
7685}}: "A Transport Layer Security  ClientHello Padding Extension".
7905}}: "ChaCha20-Poly1305 Cipher Suites for Transport Layer Security ".
7918}}: "Transport Layer Security  False Start"
7919}}: "Negotiated Finite Field Diffie-Hellman Ephemeral Parameters for Transport Layer Security ".
7924}}: "Transport Layer Security  Cached Information Extension"
7925}}: "Transport Layer Security  / Datagram Transport Layer Security  Profiles for the Internet of Things"
8442}}: "ECDHE_PSK with AES-GCM and AES-CCM Cipher Suites for TLS 1.2 and DTLS 1.2"
8422}}: "Elliptic Curve Cryptography  Cipher Suites for Transport Layer Security  Versions 1.2 and Earlier"
8701}}: "Applying Generate Random Extensions And Sustain Extensibility  to TLS Extensibility"
8492}}: "Secure Password Ciphersuites for Transport Layer Security "
TLS 1.3の拡張
8449}}: "Record Size Limit Extension for TLS"
8672}}: "TLS Server Identity Pinning with Tickets"
8734}}: "Elliptic Curve Cryptography  Brainpool Curves for Transport Layer Security  Version 1.3"
8879}}: "TLS Certificate Compression"
8902}}: "TLS Authentication Using Intelligent Transport System  Certificates"
8998}}: "ShangMi  Cipher Suites for TLS 1.3"
TLSを含むカプセル化
RFC 5216: "The EAP-TLS Authentication Protocol"
8472}}: "Transport Layer Security  Extension for Token Binding Protocol Negotiation"
X.509 との関係性
6125}}: "Representation and Verification of Domain-Based Application Service Identity within Internet Public Key Infrastructure Using X.509  Certificates in the Context of Transport Layer Security "
7633}}: "X.509v3 Transport Layer Security  Feature Extension"
その他
5705}}: "Keying Material Exporters for Transport Layer Security "
7457}}: "Summarizing Known Attacks on Transport Layer Security  and Datagram TLS "
7525}}: "Recommendations for Secure Use of Transport Layer Security  and Datagram Transport Layer Security "
8447}}: "IANA Registry Updates for TLS and DTLS"
8448}}: "Example Handshake Traces for TLS 1.3"
8744}}: "Issues and Requirements for Server Name Identification  Encryption in TLS"

11.2. IANA
----------

[4]
[5]