「ZTLS: A DNS-based Approach to Zero Round Trip Delay in TLS」という論文が公開されている。アイデアが面白いので簡単に眺める。
PDFも今のところACMのサイトから見れる
https://dl.acm.org/doi/abs/10.1145/3543507.3583516
概要
シーケンス図
(引用: 「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、証明書が格納されています。
感想
これって、中間者攻撃に対して初回のEncrypted App Data保護できてるのかな... よく分かってない