DNSを使ってTLSハンドシェイクを高速化するZTLSについて

ZTLS: A DNS-based Approach to Zero Round Trip Delay in TLS」という論文が公開されている。アイデアが面白いので簡単に眺める。

PDFも今のところACMのサイトから見れる
https://dl.acm.org/doi/abs/10.1145/3543507.3583516

概要

  • DNSからTLSハンドシェイクに必要な情報を通知し、0-RTTハンドシェイクを行う
  • 通常のTLSと互換性がある

シーケンス図


(引用: 「ZTLS: A DNS-based Approach to Zero Round Trip Delay in TLS」 Figure 3)

  • 事前に、サーバ側はZ-Data(ハンドシェイクに必要な情報)をDNSにアップロードしておく
  • クライアントはサーバDNSに対してAレコードと、Z-Dataを含むレコードを並列に問い合わせ取得する
  • クライアントは、取得したZ-Dataに含まれるデータと自身のClientHelloの情報を元にセッションキーを生成する。その鍵でアプリケーションを暗号化し、Encrypted App Dataとして送信する。あわせてztls拡張として使用したZ-Dataのバージョンをサーバに通知する。
  • サーバは受信したClientHelloにztls拡張がなければ通常のTLSハンドシェイクにフォールバックする。ztls拡張があれば、そこに含まれるZ-Dataバージョンを元にクライアントが使ったZ-Dataを手元に用意します。そこからセッションキーを導出し、Encrypted App Dataを復号します。それ以外は、ほぼ通常のTLSと同じようにServerHelloを応答します。(Certificateは省略可能)


Z-Dataには、本Z-Dataのバージョン、本Z-Dataの有効期限、DH グループ、DH public key、証明書が格納されています。

有効性

詳しくは論文に記載のとおりだが、実際にその有効性についても実験を行っている。
アジアの各AWSリージョンにインスタンスを起動し、実際に1-RTT分早くなっている事を確認している。

感想

これって、中間者攻撃に対して初回のEncrypted App Data保護できてるのかな... よく分かってない