
Transport Layer Security TLSとは(TLS1.3とTLS1.2の違い)
TLSとはWEBプライバシーとセキュリティ保護のため設計された暗号化技術で、HTTP環境におけるTLS暗号化通信をSSL(HTTPS)と呼びます。
TLSは公開鍵・秘密鍵を用いたハンドシェイク技術により、データの秘匿性・認証・整合性を図っています。
TLS1.2と比べ1.3はよりセキュリティが向上し、TLS False Startやゼロラウンドトリップ等の技術でより処理速度が向上しています。
Transport Layer Security(TLS)とは
Transport Layer Security(TLS)は、インターネット通信のプライバシーとセキュリティを容易にするために設計された暗号化通信を指します。
一般的によく使われるのがWEBアプリケーションとサーバー間の通信を暗号化することですよね。
TLSは、電子メール、メッセージング、Voice over IP(VOIP)などの他の通信の暗号化にも使用できます。
TLSとは
TLSは国際標準化機構であるInternet Engineering Task Force(IETF)によって提案されたものです。
現在も幅広く採用されているセキュリティプロトコルです。
1999年に最初のプロトコルバージョンが公開され、2018年に最新バージョン「TLS1.3」が公開されています。
TLSとSSLの違い
TLSは、SSL暗号化プロトコルをさらに発展化させた通信です。
SSLとは「Secure Socket Layer」の事で、元々はNetscapeによって開発された暗号化通信技術でした。
このSSLのバージョン3.1版として開発が開始されたのが、TLSのバージョン1.0となります。
独立による名称変更
しかし元会社のNetscapeの手を離れそことの関係性を解消する事になったため、公開前にプロトコル自体の名前が変更された訳です。
Netscape社のSSL技術が独立してTLSとなった訳です。
TLSとSSLとが同じ意味で使用されているのは、この歴史が背景となっています。
TLSとHTTPSの違い
HTTPSは、HTTPプロトコル上でTLS暗号化通信を実装した形になります。
HTTPSを使用していれば、それはTLS暗号化を採用している事になり、全てのWEBサイトや他のWEBサービスで使用する事ができます。
HTTPSはHTTP環境の上にTLS技術が乗っかっている状態ですね。
つまりHTTPSを利用するという事は、必然とTLS通信を利用している事になります。
TLSを使用する理由
TLS暗号化は、データ侵害やDDoS攻撃などの攻撃からWEBアプリケーションを保護するのに役立ちます。
さらにTLSで保護されたHTTPSは、GoogleのSEOランキング要因になる事もあり、WEBサイトの標準ステータスになりつつあります。
ここ数年でSSL通信はWEBサイトにおいて必須と言える設備となっていますよね。
Googleはブラウザで移行を推奨
例えばGoogleChromeブラウザは、HTTPS以外のサイトに対し警告を出していますよね。
日常のインターネットユーザーにもHTTPSの鍵マークアイコンが表示されていないWEBサイトは「セキュリティが甘い」という認識が浸透しつつあります。
半ば強制的にHTTPSへの移行を求めている状態です。
TLSの特徴(TLSハンドシェイク)
TLSは、TCPなどの「Transport Layer Security」プロトコルの上で使用できます。
TLSには、暗号化、認証、整合性の3つの主要コンポーネントがあります。
・暗号化:第三者から転送されるデータを隠します。
・認証:情報を交換する当事者が本人であることを保証します。
・整合性:データが偽造または改ざんされていない事を確認します。
このコンポーネントを実現するために採用されている技術が「TLSハンドシェイク」です。
TLSハンドシェイクとは
TLS接続は「TLSハンドシェイク」と呼ばれるシーケンスを使用して開始されます。
TLSハンドシェイクとは、クライアントとサーバー間の通信セッションごとに暗号スイートを確立するものです。
「暗号スイート」とは、特定のセッションで使用される「共有暗号化鍵」または「セッション鍵」などの詳細を指定する一連のアルゴリズムです。
データの暗号化・秘匿化
TLSはこの公開鍵暗号化と呼ばれる技術のおかげで、暗号化されていないチャネルを介して一致するセッション鍵を設定する事ができています。
このハンドシェイク技術によりデータの暗号化が実現され、公開データを隠す事ができています。
秘密鍵と公開鍵による認証
さらにハンドシェイクは認証も処理します。
認証は通常クライアントにIDを証明するWEBサーバーで構成され、これは公開鍵を使用して行われます。
公開鍵とは一方向による暗号化を使用する暗号化鍵の事です。
元の送信者だけが秘密鍵でデータを暗号化する事ができ、誰でも秘密鍵で暗号化されたデータの暗号を公開鍵で解除する事ができます。
データ整合・通信が改ざんされていない証を示す
送信者によりデータが暗号化および認証されると、メッセージ認証コード(MAC)で署名されます。
次に受信者はこのMACを検証してデータの整合性を確認できます。
これは郵便物や商品の「お帯封」と同じ意味合いになります。
自分が購入した商品は購入時のまま、一度も封が開けられていない事の証になる訳です。
WEBパフォーマンスおけるTLSの課題
TLS接続のセットアップには実は目に見えない複雑なプロセスが発生します。
クライアントとサーバーは、データが送信される前に数回交互通信する必要があります。
なのでどうしてもクライアントとサーバー双方が読込時間とメモリ処理をいくらか消費しなければなりません。
しかしこのTLSハンドシェイクによって生じる遅延を緩和できる技術が導入されています。
TLS False Start
1つはTLS False Startです。
TLS False Startは双方向による2ウェイラウンドトリップを待つことなく、クライアントであるブラウザがHTTPSでの通信をリクエストするものです。
これにより、サーバーとクライアントはTLSハンドシェイクが完了する前にデータの送信を開始できます。
TLSセッション再開(ゼロラウンドトリップ)
それに対しもう1つのテクノロジーはTLSセッション再開(ゼロラウンドトリップ:0-RTT)による高速化です。
TLSセッションは、一度ハンドシェイクが完了した状態を維持し、一意の識別子(セッションID)で特定可能な情報です。
TLSセッションを再利用する事で、2回目以降に必要な以下のTLSハンドシェイクを簡略化する事ができます。
・アプリケーションデータの暗号化アルゴリズムを決定するための処理
・証明書の送受信
・証明書の検証によるクライアント/サーバ間の認証
以上を省略できます。
これらの改善によりTLSは非常に高速なプロトコルになり、読込時間に大きな影響を与える事がなくなりました。
サーバーメモリ負担は問題なし
TLSに関連するサーバーへの負担も、今日の標準環境であればほとんどありません。
たとえば、Googleが2010年にGmailプラットフォーム全体をHTTPSに移行したとき、追加のハードウェアを有効にする必要はありませんでした。
TLS暗号化の結果としてサーバーにかかる追加の負荷は1%未満だったとされています。
TLS1.3とTLS1.2の違い
TLSの以前のバージョンであるTLS1.2は、IETFによりRFC5246で定義されており、過去8年間全てのWEBブラウザの大多数によって使用されていました。
28のドラフトを通過した後、2018年3月21日にTLS1.3としてIETFによって確定されました。
そして2018年8月の時点では、TLS1.3の最終バージョンが公開されています(RFC8446)。
IETF(Internet Engineering Task Force)は、TLSプロトコルの定義を担当してきたグループです。
TLS1.2とTLS1.3の違い
TLS1.2とTLS1.3の違いは、速度が速くさらにセキュリティが向上している所と言えるでしょう。
これまで以上に読込時間を短縮し、セキュリティ性能を向上させ、かつ負担も軽いものになっています。
この性能アップを受けて、Cloudflareなどの企業は確定当初から既にTLS1.3を提供しています。
TLS1.3の特徴
TLSおよび暗号化された接続は、先述しましたがWEBパフォーマンスに関して処理工程の分わずかな読込時間差が生じます。
HTTP/2ももちろんこの高速化問題に対して一定の役に立っていました。
TLS1.3は「TLS False start」や「ゼロラウンドトリップ」などの機能により、暗号化された接続をさらに高速化します。
WEBサイトのセキュリティとパフォーマンスについて懸念されるこの読込時間をさらに減らす事に成功しています。
2回のラウンドトリップを1回に
簡単に言えば、TLS1.2まではTLSハンドシェイクを完了するために2回のラウンドトリップが必要でした。
しかし1.3の場合必要なラウンドトリップは1回だけなので、暗号化の待ち時間自体は半分になっている計算です。
これにより暗号化接続は以前よりも高速に処理されるようになりました。
ゼロラウンドトリップ
TLS1.3ハンドシェイクのパフォーマンスのもう一つの利点は、パフォーマンス自体が記録されているという事です。
以前にアクセスした際の最初のメッセージのデータをサーバーに送信できるようになりました。
これを「ゼロラウンドトリップ」と呼ばれ、これにより読み込み時間も短縮されます。
TLS1.3によるセキュリティの向上
TLS1.2の大きな問題の一つとして、その不適切な構成によるWEBサイトの脆弱性が指摘されていました。
TLS1.3は、TLS1.2において安全性が低いとされた旧式の機能を削除しています。
セキュリティリスクのある機能の削除
・SHA-1
・RC4
・DES
・3DES
・AES-CBC
・MD5
・任意のDiffie-Hellmanグループ
プロトコル自体がよりシンプルに構成されているため、管理者や開発者がプロトコルを誤って構成する可能性が低くなります。
TLS1.3ブラウザのサポート
各ブラウザの対応状況
GoogleChrome
GoogleChromeではTLS1.3の最終版が利用できる様になっています。
Chrome83において、TLS1.0/1.1の接続の無効化を実施しています。
Forefox
Firefox63以降(2018年10月にリリース)は、TLS1.3の最終バージョンが導入されています。
Forefox74のリリース直後はTLS1.0/1.1を無効にしていたようですが、現在は一時的に再有効化している様です。
Microsoft Edge
Microsoft Edgeはバージョン76からTLS1.3のサポートを開始しています。
サポート中の全てのバージョンのIE11、Microsoft Edge Legacy(EdgeHTMLベース)では、2020年9月8日をもってTLS1.0およびTLS1.1がデフォルトで無効になります。
新しいMicrosoft Edge(Chromiumベース)においては、TLS1.0および1.1はデフォルトで無効になります。
Safafi
Safari12.1(macOS 10.14.4)ではデフォルトで有効になっています。
Safari13でTLS1.0/1.1 の接続は無効化されず、TLS1.0/1.1を利用した接続時にアドレスバーに「安全ではありません」と表示されるのみです。
その他
その他のブラウザではTLS1.3への対応のため開発中であり、しばらく時間が掛かりそうです。
TLS1.3サーバーのサポート
自信のWEBサーバーまたはホストがTLS1.3をサポートしているかどうかを調べるには、SSLサーバーテストツールが使用できます。
リンク:SSLサーバーテストツール
対象のWEBサイトドメインをスキャンすれば、「プロトコル機能」欄に表示されます。
運営サイトがTLS1.3に対応しているかどうか確認をしてみましょう。