DNSでTLSハンドシェイクの鍵交換を改善する、TLS Key Share Predictionについて

IETFGoogleの方々から提案されている『TLS Key Share Prediction』という提案仕様が、WG Adoptionされています。

これは、DNS HTTPS レコードを用いることでTLSハンドシェイクを改善することを目的とした提案仕様です。

TLSハンドシェイクのKey Shareについて

まず、Key Shareについて簡単に補足する

TLSハンドシェイクのClientHelloでは、鍵交換でサポートするnamed groups(名前付きグループ)をSupported groups拡張で送信します。合わせて、鍵交換に必要なパラメータをKey share拡張で送信します。Key Share拡張にはnamed groups事に必要なパラメータを送信します(サポートする全てのnamed groups分送る事は必須ではない)。

Chromeの例:

Key Share拡張には下記のようなトレードオフがあります。

  • 複数のnamed groupsのKeyShareEntryを送ると、その分 データ量が増える
  • 送ったKeyShareEntryにサーバが対応してないかった場合、HelloRetryRequestによって1RTT余計に時間がかかる。

そこでこのトレードオフを改善するために『TLS Key Share Prediction』が役に立ちます。

TLS Key Share Prediction

TLS Key Share Prediction』では、DNS HTTPSレコードにサーバが対応しているSupported groupsをユーザに通知することによって、クライアントはClientHelloで送信する必要があるKey Shareを知ることができます。

これにより、Key Share拡張におけるトレードオフは緩和され、必要なKeyShareEntryのみを送信することが出来るようになります。

(もしなんらかの理由により、HTTPSレコードと齟齬があったとしてもHelloRetryRequestを挟みますが、通信自体は問題なく継続できます)

HTTPSレコードのtls-supported-groupsパラメータ

この仕様では、HTTPSレコードにtls-supported-groupsを新しく定義し、そこにSupported groupsの値を書けるようにします