ホスト名の異なるTLS session resumptionについて

TLS1.3でホスト名が異なるTLS session resumptionを支援する拡張仕様が出ているので紹介する。

TLS1.3とセッション再開(session resumption)

RFC 8446 TLS 1.3 では、セッション再開(session resumption)という方法が定義されています。このsession resumptionを使うことで、2回目からのセッション確立を効率よく行えます。

このとき、TLS1.3からは異なるSNIを指定してのsession resumptionが出来るようになっています。

例えば、証明書が*.example.comの時に、a.example.comで確立したセッションを元に、b.example.comに対してsession resumptionを行えます。

しかし、一般に証明書がカバーしているホスト名だとしてもセッション再開のための状態がサーバ間で共有されているとは限りません。うまく行かないのにクライアントはセッション再開を試みるのは、セッションチケットを無駄にしてしまいます。

そこで、サーバから「この証明書がカバーするホスト名では、SNIの異なるsession resumptionをして良い」と明示する拡張仕様が検討されています。

TLS Resumption across Server Names

TLS Resumption across Server Names」は、GoogleのVictor Vasiliev氏によって提案されている仕様です。

この仕様では、NewSessionTicketメッセージの拡張としてresumption_across_namesを定義しています。

このresumption_across_names拡張をクライアントに通知することで、「この証明書がカバーするホスト名では、SNIの異なるsession resumptionをして良い」ということを示します。

パフォーマンス

Victor Vasiliev氏らの提案とは関係なく、2019年にハンブルク大学のErik Sy氏らによって「Enhanced Performance for the encrypted Web through TLS Resumption across Hostnames(pdf)」という論文が公開されています。

この論文では、有名サイト閲覧時、異なるホスト名でセッション再開した場合の効率性を調査しています。

調査によると、Web上のサイトを取得する際に、行われるTLSハンドシェイクのうち約6割ほどがホスト名の異なるセッション再開が行えるとのことです。

これにより、セッション確立にさかれる時間を最大30%早く出来るとのことです。