tls13_rfc

wolfSSL – TLS1.3

軽量SSL/TLSライブラリwolfSSLはTLS1.3クライアント、サーバ両方のサポートを公開しました。

wolfSSL (wolfSSL 3.12.0)リリースは弊社ダウンロードページから利用いただけます。

TLS1.3の優位性:

 最新バージョンのTLS仕様に切り替えることでさまざまな利点を享受することができます。

いままでの仕様と大きく異なる点の一つとしてまず気づくのは、フルハンドシェイク時の往復回数の削減かと思います。TLSの旧版のプロトコルではクライアントがサーバーにアプリケーション・データを送出する前に2往復を必要としていました。TLS1.3では1往復で済んでしまいます。さらに、サーバはクライアントに対する最初のハンドシェイク・メッセージのレスポンスとしてアプリケーション・データを送ってしまうことも可能になりました!これは、ネットワークの遅れがあっても、安全な接続を確立するのに要する時間への影響は少なくなるということです。

もう一つの違いは、TLS1.3のセッション再開です。これまでのTLSではクライアントはサーバがキャッシュを探すためのセッションIDを持っていました。もし、マッチした場合は同じセキュリティ・パラメータを使うことになりました。これは、非常に単純ですが、サーバ間で状態を共有する必要がありました。

TLS1.3では、これまでのTLSのチケット・システムを再活用する形で、画期的に進歩しました。ハンドシェーク完了後にサーバはクライアントに対して新しいセッション・チケットを送るようにします。この、クライアントに対するひとかたまりのデータであるチケットは、以前のセッションIDのように鍵を探すデータベースとして利用することができます。ただしこのデータは、前の接続に対応する、自身で暗号化、認証された値とすることができます。つまり、サーバは状態を持たないということになります!

最後に、この仕様はプロトコルの安全性を証明すべく暗号化の専門家によって評価されてきました。どんなセキュリティの証明も完全ではありえませんが、以前あったような再ネゴシエーション、プロトコル・バージョンのダウングレーディング、圧縮、 CBCやパディングに対する攻撃などは改善され、プロトコルは全体的により強い攻撃耐性を実現しています。

TLS1.2 と TLS 1.3、どこが違うの?

TLS 1.3のリリースでは、セキュリティとスピードの向上が約束されています。しかし、TLS 1.2からTLS 1.3への変更は、これらの改善をどのように実現しているのでしょうか?以下に、改善がどのように達成されたか、TLS 1.2と1.3の相違点をあげてみましょう。

TLS1.3は、2017年4月のインタネット・ドラフトで定義されました。wolfSSLは、TLS 1.3をサポートする最初のライブラリの1つです。

•対称暗号アルゴリズムでは、全ての古いアルゴリズムは取り除かれ、TLS1.3で残っているアルゴリズムはすべて、AEAD(Authenticated Encryption with Associated Data) で認証された暗号化を使用します。

•ゼロRTT(0-RTT)モードが追加され、一部のセキュリティ特性を犠牲にすることで一部のアプリケーションデータの接続設定では往復回数を削減できるようになりました。

•ServerHello以後のすべてのハンドシェークメッセージは暗号化されます。

•HMACベースのExtract-and-Expand Key Derivation Function(HKDF)をプリミティブとして使用して、鍵導出関数を再設計しました。

•ハンドシェイク状態遷移は、より一貫性があり余分なメッセージを取り除くよう再構成されました。

•ECCは基本仕様に入り、複数の新しい署名アルゴリズムが含まれています。楕円曲線のポイント・フォーマット・ネゴシエーションは、各楕円曲線の単一ポイント・フォーマットを使用することで削除されました。

•圧縮、カスタムDHEグループ、およびDSAが削除されました。RSAパディングでPSSが使用されるようになりました。

•TLS 1.2のバージョンネゴシエーション検証メカニズムは、拡張機能のバージョンリストを使用して廃止されました。

•セッション再開については、サーバー側の状態の有無にかかわらず旧バージョンTLSのPSKベースの暗号スイートから、1つの新しいPSK交換方式に統一されました。

 

wolfSSLのTLS1.3サポートをコンパイルしてみる

このリリースで TLS1.3 を利用するには、以下のように./configureコマンドで“–enable-tls13” オプションを指定してください:
$ unzip wolfssl-3.11.1-tls13-beta.zip
$ cd wolfssl-3.11.1-tls13-beta
$ ./configure –enable-tls13
$ make
TLS1.3サポートを指定するために、wolfSSL コンテクスト(WOLFSSL_CTX)を生成する際に、新しいクライアント/サーバメソッドとして次のような二つのメソッドが追加されました。
WOLFSSL_METHOD *wolfTLSv1_3_server_method(void);
WOLFSSL_METHOD *wolfTLSv1_3_client_method(void);
wolfSSLサンプルクライアントとサーバで簡単にTLS1.3機能を使うことができます。例えば、wolfSSLサンプルクライアントをTLS1.3、暗号スイートTLS13-AES128-GCM-SHA256 でサーバに接続する場合は、次のように、”-v” オプションに “4” を指定し、”-l”オプションで暗号スイートを指定します:

$ ./examples/server/server -v 4 -l TLS13-AES128-GCM-SHA256
$ ./examples/client/client -v 4 -l TLS13-AES128-GCM-SHA256

サンプルクライアントは外部サーバに接続することもできます。例えば、wolfSSLサイトにTLS1.3で接続する場合は次のように指定します。

$ ./examples/client/client -v 4 -l TLS13-AES128-GCM-SHA256 -h www.wolfssl.com -p 443 -g -A ./certs/wolfssl-website-ca.pem

このコマンドで”-h”はホスト、”-g”はHTTP GET要求、”-A” はサーバ認証のためのCA証明書を指定します。

このバージョンでは、TLS1.3 の暗号スイートとして下記のものをサポートしています:

TLS13-AES128-GCM-SHA256
TLS13-AES256-GCM-SHA384
TLS13-CHACHA20-POLY1305-SHA256
TLS13-AES128-CCM-SHA256
TLS13-AES128-CCM-8-SHA256

TLS1.3 RFCの最新版はこちらをご蘭ください。

その他、wolfSSLサイトの各ページもあわせてご蘭ください。
TLS1.2とTLS1.3の違いは何?
TLS v1.3の優位性:何が良くなったか?
wolfSSL #TLS13: TLS 1.3 βバージョンを公開しました
TLS1.3ドラフトの抜粋:プロトコル概要(日本語訳)

TLS1.3サポートについてさらに詳しい情報は弊社問い合わせ窓口 (info@wolfssl.com, info@wolfssl.jp: 日本語)までお問い合わせください。