TLS 1.3の性能 その2 – フルハンドシェイク

TLS 1.3では、性能を重視した重大な変更がTLS 1.2から加えられています。このブログシリーズではwolfSSLのTLS 1.2とTLS 1.3の間に見られる性能の違いと、その利点をアプリケーションへ最大限に取り入れる方法について説明します。今回はその2回目で、証明書を使用したサーバー認証によるフルハンドシェイクの性能の違いについて説明します。
TLS 1.2のフルハンドシェイクは下の図のようになっています。

TLS 1.3のフルハンドシェイク(HelloRetryRequestなし)では、証明書を使ったサーバーのみの認証が実行されます。

アプリケーションデータが送信されるまで、TLS 1.2と比較してTLS 1.3では往復の行き来が1つ少なくなっています。これにより、特に高レイテンシのネットワークではパフォーマンスが大幅に向上します。実はもうひとつ性能改善がされています。それはハンドシェイクメッセージの順序付けと、時間のかかる暗号操作が実行されたときに影響します。
TLSハンドシェイクでは、サーバーはClientHelloを受け取ると、ハンドシェイクメッセージを別々のパケットとして生成して送信します。パケットの送信タイミングは、データを生成するために必要な処理量に依存します。たとえば、一連の証明書をCertificateメッセージにコピーするのにさほど時間はかかりませんが、TLS 1.2 のServerKeyExchangeメッセージを生成するには複数の公開鍵操作が必要なため、処理に時間がかかります。クライアントが受け取るメッセージには様々なタイミングの差があり、処理時間も異なります。
たとえば、Certificateメッセージは、リーフ証明書に少なくとも1つの署名検証操作を必要とする可能性があります。このメッセージの非対称処理は、ハンドシェイクメッセージには到着時に処理されるものもあり、以前のメッセージの処理が完了するまで待たなければならないものもあることを意味します。
次の図は、メッセージの処理と実行される主な暗号操作を含む、TLS 1.2のハンドシェイクを示しています。ネットワークレイテンシに関連して同時に実行される操作は、同じ行にあります。

上の図からRSAでは、VerifyがSignに対して非常に高速であるので、TLS 1.2のハンドシェイクは、Key Genが2回、Secret Genが2回、Signが1回、そしてVerify1回の処理時間に依存します。ECDSAの場合、VerifyがKey Gen+Signよりも遅く、Key Genが1回、Secret Genが2回、Verifyが2回となります。次の図は、メッセージの処理と主要な暗号操作を含むTLS 1.3ハンドシェイクを表しています。

RSAを使ったTLS 1.3ハンドシェイクは、VerifyがSignよりもはるかに高速であり、Key Genが2回、Secret Genが1回、Signが1回となります。 したがって、TLS 1.2でのSecret GenとVerifyはなくなります。ECDSAの場合、VerifyがSignよりもかなり遅く、TLS 1.3ハンドシェイクはKey Genが2回、Secret Genが1回、Verifyは2回です。TLS 1.2のSecret Genは、より速いKey Genに変わります。同じコンピュータ上でクライアントとサーバーの両方を実行すると、RSAハンドシェイクを使用したDHEの性能は約15%向上します。これは主に並列操作によるものです。 ECDHEとRSAの場合、約6%の改善があり、ECDHEとECDSAの場合、往復を減らすことで約7%の改善が見られます。これらの改善は、HelloRetryRequestなしでTLS 1.3を使用すると得られます。次回は事前共有キーを使用したハンドシェイクについて説明します。
さらに詳しい情報は弊社問い合わせ窓口info@wolfssl.jpまでお問い合わせください。
原文: https://www.wolfssl.com/tls-1-3-performance-part-2-full-handshake/
wolfSSLホーム:www.wolfssl.jp (English:www.wolfssl.com)