IETF 126 QUIC WG セッションまとめ(2026-07-22, ウィーン)

Summarized by @unasuke with Claude on 2026-08-09 13:06:44 UTC

IETF 126 QUIC WG セッションまとめ

日時: 2026年7月22日(水)16:00–18:00 Session IV / ウィーン
情報源: 録画の文字起こし(recording-126-quic-1)、各発表スライド


全体状況


WG 採択済みアイテム

QMux(draft-ietf-quic-qmux-02)— Lucas Pardue 代理発表、Eric Kinnear

IETF 125 以降 01・02 を発行。00→01 はワイヤ非互換、01→02 はワイヤ互換(振る舞い・記述の厳密化のみ)。主な変更は QMux records(§3.2)、QMux over TLS での ALPN 必須化(§8.1)、RESET_STREAM_AT の許可、全般的なハードニング。

実装は quicly / HAProxy / mvfst / picoquic / msquic fork / Cloudflare quiche fork(curl バックエンドで HTTP/3 over QMux)/ quic-go fork / moq-dev 系ライブラリ / Wireshark dissector MR と幅広い。dissector は既存 QUIC 処理を再利用できたため想定より容易で、QMux の価値提案の裏付けとして紹介された。

Interop ドライバとしては draft-kazuho-httpbis-http3-over-qmux-00(ALPN h3qx-01)を更新。02 はワイヤ互換なので新 ALPN は不要。MoQ over QMux も人気の標的。Marco Munizaga が QUIC interop runner の PR を作業中。結果の記録が不十分だった点は反省として挙げられた。

未解決 issue は4件のみ:

Issue 論点 議論の方向
#17 QUIC の TLS ネゴシエーション(CRYPTO フレーム)を QMux で流用可能にするか 「QUIC 実装は既に TLS 機構を内蔵しているので楽」という提案に対し、モードを増やす複雑さを嫌う声が優勢。Lucas・Alan Frindell・Marco とも現状維持支持。将来別ドキュメントの拡張として書ける、と整理
#41 TCP 必須か(editorial) Kazuho Oku: 基板ごとにクローズ方法が違う(TCP の FIN は単方向、RST は双方向)ので、TCP 使用時を規定し他は「自分で決めろ」節を置くのが現実的。Eric も同意
#60 非 TLS 基板での ALPN 相当 選択肢は (a) you problem (b) ポート番号 (c) QMux TP で ALPN。Christian Huitema は (a) 支持(Unix socket をやりたい人が draft を書けばよい)、Alan Frindell は ALPN/ポートの組み合わせ爆発を指摘。Lucas は当面 punt を主張
#67 graceful close の再検討 バッテリー駆動端末が「アイドル接続が消えた」通知で起こされる問題。「寝ろと言うためにドアをノックするようなもの」。silent close を可能にする案は好意的

Extended Key Update(draft-ietf-quic-extended-key-update-03)— Yaroslav Rosomakho

QUIC に post-compromise security を導入する提案。通常の Key Update はハンドシェイクと同じ shared secret 由来なので鍵漏洩に無力だが、EKU は新規の鍵交換を含むため blast radius を「EKU と EKU の間」に限定できる。

QUIC EKU は TLS EKU に依存。TLS 側は形式的解析中でまもなく WGLC 見込みで、解析結果次第で変更があり得るため待ちの状態。

TLS EKU 側の最近の変更で QUIC にも効くもの:

実装は TLS EKU が mbedTLS と rustls、QUIC は rustls/quinn ベースを作業中。Magnus Westerlund から「ハンドシェイク完了後の CRYPTO フレーム禁止を上書きするのでは」との指摘があり、NewSessionTicket と同じ仕組みを利用する旨が回答された。動機となるユースケースは VPN・IoT・BGP over QUIC といった長寿命接続。interop 参加者とレビュアを募集中

ACK Receive Timestamps(draft-ietf-quic-receive-ts-03)— Joseph Beshay (Meta), Ian Swett (Google)

02→03 は editorial のみ(max_receive_timestamps_per_ack のデフォルト 0 = フレーム禁止の明確化、タイムスタンプ操作とリソース枯渇に関する Security Considerations 追加)。

議論の中心は open issue #43「実現不可能なタイムスタンプの棄却ガイダンスは要るか」。タイムスタンプは peer 制御(完全性保護はあるが信頼はできない)で、実時間 1ms を 2ms として報告し続けると BBR の帯域推定が持続的に2倍になる、という Victor の指摘が具体例。現 draft は「SHOULD 妥当性チェック / MAY 無視」と書くのみで具体的ヒューリスティックがなく、Ian と Victor が2案を提示:

主なコメント:

実装は mvfst が最新 draft 対応(インターネット未有効、interop endpoint には出せる)、Google Quiche も最新フォーマット対応(TP ネゴシエーションは今後)。

qlog(main-schema-14 / quic-events-13 / h3-events-13)— Lucas Pardue

個別イベントの多数の設計変更と editorial 改善。基盤設計は変更予定なし、拡張性モデルは決着、長期懸案だった JSON-SEQ vs JSON は「no action」でクローズ(JSON-SEQ 維持)。実装間で qlog バージョンがまちまちなので「今が最新に更新する良い時期」、構造化定義の取り込みは LLM が得意なので移行コストは低いかも、との案内。

新パーサツールとして Pat Meenan の Waterfall Tools(webperf 由来、HAR や Chrome NetLog を解析)を紹介。リソースごとのウォーターフォールで開始/終了だけでなくバイト到達のバンディングが見え、優先度・HOL ブロッキング・ロス再送の示唆が得られる。さらに qvis のシーケンス図と Chrome NetLog Viewer 風のイベントビューまで統合されている。

open issue 4件(#27 0-RTT の曖昧さ、#121 Session Ticket 内容と保存 TP/SETTINGS のログ、#501 tuple 情報の移動、#517 frames_processed の一貫性)のうち #517 のみ議論。QMux にはパケットがなくフレームの可視性が問題になったことから frames_created / frames_parsed を追加した結果、HTTP/3 側(frame_created / frame_parsed)と不整合になったもの。3案(QUIC の frames_processed 削除/HTTP/3 に追加/何もしない)に対し:

残る 0-RTT / Session Ticket 系 issue を閉じれば WGLC の準備はほぼ整ったとの認識。careful-resume-qlog、happy-qlog、roq-events、moq-qlog、h2-events といった後続 draft の基盤として、ここを固めることが重要と強調された。


As Time Permits

Reverso for QUIC(draft-frochet-quicwg-reverso-for-quic-01)— Florentin Rochet (UNamur)

QUIC v1 では受信側の contiguous zero-copy が原理的に不可能(暗号化データが暗号化された制御情報に挟まれるため)という問題提起。SIGCOMM CCR 2026年1月号の論文がベース。必要な変更は3つ:

  1. short header に stream ID と offset を追加(最悪ケースで 5→13 バイト、ヘッダ保護アルゴリズムは不変)
  2. STREAM フレームがあればパケット内の最初に置く
  3. 全フレームの要素順序をワイヤ上で反転

仕組みは out-of-place 復号の「隠れたコピー」を再組立に流用するもので、復号先をストリームバッファ上の適切な位置に指定し、前パケットの制御フレームを上書きしながら連続したストリームデータを得る。順序反転の理由は short header への追加情報を最小化でき、双方向に読み書きできるバッファ抽象さえあれば v1 と vReverso で同一のパース/シリアライズコードが使えるため。

主なコメント:

CTaps / TAPS over QUIC — Ingebrigt Hovind

TAPS の C 実装で、QUIC をサポートする初のオープンソース TAPS 実装(修士論文+ANRW 投稿論文ベース)。報告されたギャップ:

議論:

チェアは「ここは TAPS WG ではない」としつつ、QUIC ストリームの強力な機能に API が追いついていない点は QUIC 的にも興味深いと評し、継続議論は TSV へ誘導した。

GCM-SST in QUIC(draft-westerlund-tls-gcm-sst-00)— Magnus Westerlund(+ John Preuß Mattsson)

GCM-SST は AES-GCM と同じ暗号構成ながら AEAD 呼び出し(QUIC ではパケット)ごとに認証鍵を導出する AEAD アルゴリズム。CFRG の個人 draft で、ETSI/3GPP で標準化済み、独立した安全性証明が2つ。

AES-GCM は全呼び出しで同一の認証鍵 H を使うため、一度偽造に成功すると鍵が判明し以後の偽造が容易になる(rekey まで)。これがタグ切り詰めを困難にしている根本原因で、GCM-SST は「崩壊」しないため truncation が可能。

名前 タグ長 初回偽造確率 初回偽造後
GCM_SST_14 14 B 1/2^112 1/2^112
GCM_SST_12 12 B 1/2^96 1/2^96
POLY1305 16 B 1/2^91 1/2^91
GCM 16 B 1/2^116 1

つまり 12 バイトの GCM_SST_12 が 16 バイトの POLY1305 より 5 bit 強い。ヘッダ保護は AES-GCM 同様 AES-ECB を使い、Rijndael(256bit ブロック)では nonce 用に sample をゼロパディングで拡張(mask = Stream(40, hp_key, ZeroPad(sample,28))[0..4])して短いパケットでも成立させる。

Multipath / Multicast での意義が強調された。AES-GCM は全パスで同じ認証鍵 H(nonce のみ違う)なので攻撃を複数パスに分散できるが、GCM-SST は特定 nonce を狙う必要があり multipath でも ideal を維持。Multicast では受信者が独立に鍵付けされないため、AES-GCM だと受信者数 R にスケールして偽造試行を分散でき、1回成功すると各受信者向けにパケットを仕立てられてしまう。

議論:

HTTPS RR と QUIC v2 の採用状況 — Max Inden (Mozilla)

Firefox の公開テレメトリ(GLAM)に基づくクライアント側の測定報告。

HTTPS RR: Firefox 接続の 35% は Alt-Svc 経由でのみ h3 を学習=最初の接続では HTTP/3 にならない。HTTPS レコードで h3 が広告されている接続は約7%のみ。原因は公開サイトの少なさ(上位100万サイトの20%強、しかもその70%超が単一 CDN のデフォルト、Dong et al. IMC 2024)と、オンパス機器が SNI を見えるようにするためレコードや ECH パラメータを剥がし h3 のヒントごと失われること(FortiGate, Cisco)。論点として「Alt-Svc を deprecate するか、SVCB に移すか(draft-thomson-httpbis-alt-svcb)」が提起された。

QUIC v2: RFC 9369 は v1 と機能的に同一で salt / label / codepoint のみ異なる anti-ossification 版。Firefox Nightly では v1 ≈ 100%、v2 ≈ 0%。IMC 2024 でも QUICv1 ドメインの 0.003% 未満。14 スタック中10が実装しているのに本番デプロイは稀(Google/YouTube・Meta・Cloudflare・Bing は v1、Outlook・Caddy・LiteSpeed・HAProxy は v2)。ドメインの HTTPS RR と v1/v2 対応をチェックできる savearoundtrip.com を公開。

David Schinazi (Google) の反論が重要:「Google は v2 を実装したがデプロイしていない。理由は v2 が ossification に効かないから。HTTPS レコードや Alt-Svc でサーバの v2 対応を事前に知る手段がないので、ハンドシェイクは結局 v1 で始まる。compatible version negotiation で v2 に移っても最初に送るのは QUIC v1 Initial。ossification が問題なのは SNI や ClientHello が JA3 等でハッシュされる上り方向であり、下り方向を見ている者はいない。v2 を有用にするには HTTPS レコードでの対応発見手段が必要」。Max は「Firefox は v1 と v2 を offer して下り方向を grease している」「サーバの v2 対応は現状記憶していない」と応答。

Mutable Idle Timeout?(draft-pardue-quic-idle-timeout-update-00)— Lucas Pardue(個人)

「モントリオールの昼食での雑談から生まれた draft で、考えるほど自分は反対に傾いているが賛成する人もいるので『?』付き。むしろ他のトランスポートパラメータを可変にする話が今後出たときのために議論を記録に残したい」という趣旨。

RFC 9000 §10.1 の整理: 実効 idle timeout は両端の広告値の最小(ただし 0 は特別扱いで、TP を送らないのと同じ)。silent close されるのが良い特性(無線を起こさずに済む)。一方「実効値より前に接続を放棄するなら immediate close を開始することにコミットする」という文言は意外。

実装デフォルトの調査:

値 (ms) 実装
30,000 Chromium, quic-go, MsQuic, quinn, picoquic, lsquic, neqo, haproxy, h2o
60,000 aioquic, mvfst
240,000 GFE
300,000 envoy
0 ngtcp2
なし s2n-quic, quicly, Cloudflare quiche

30秒が多いのは NAT タイムアウトが約30秒であることの影響がありそう(ただし idle timeout で NAT 問題を回避すべきでないという指摘も)。quiche が none なのは「ライブラリが意見を持つべきでなく、どの値も Goldilocks 問題になる」ため。

動機の中心は HTTP/3 GOAWAY。GOAWAY 後はサーバのレスポンス送信だけが接続を駆動するため、immediate close するかクライアントの30秒 idle timeout を待つかの二択になる。GOAWAY 送信時に idle timeout を短く(例: 5秒)再交渉できれば、アプリ層のタイムアウト管理をトランスポートに押し込めて追加トラフィックなしに片付けられるという発想。提案は IDLE_TIMEOUT_UPDATE_REQUEST / _ACCEPT / _REJECT の3フレームで、どちらの端点も要求可能、0 で無効化。ただしシーケンス番号でのロックや DoS 考慮が必要で「単純化のはずが結局かなり複雑」と自己評価。

議論:

QUIC and Multicast — Max Franke (TU Berlin), Louis Navarre, Kyle Rose, Olivier Bonaventure

技術詳細・draft の優劣・privacy/security トレードオフにはあえて踏み込まず、実ユースケース・動くコード・「なぜ今か」に絞った発表。

multicast は今日のインターネットで実際に使われている(Broadpeak の Multicast ABR がワールドカップ配信に使用)が、配信経路が複雑で専用ハードを要し、独自仕様で安全でもない。QUIC は UDP 上で動くので自然に載り、WebTransport 経由でブラウザへの道があり、セキュリティと信頼性が得られ、middlebox なしに end-to-end で完結し、拡張が綺麗に収まる、という位置づけ。

PoC は3種:

質疑:

発表者からは今後1年の公的資金を確保しフルタイムで取り組める旨の表明。チェアのまとめは「関心はあり、MoQ 空間に牽引ユースケースがありそうだが MoQ WG は多忙。チャットでは BoF 的なものの提案もあった。チェア陣と AD で今週話す必要がある。過去にも提示され関心が高かったので、何もせず1年待たせて資金が尽きるのは残念」。

n0 QUIC NAT Traversal(draft-bruynooghe-n0-quic-nat-traversal-00)— Floris Bruynooghe, Diva Martinez

Quinn のフォークで Multipath と NAT traversal を組み合わせた実装報告(github.com/n0-computer/noq)。

接続はリレー経路(HTTPS/WebSocket)で確立し、QUIC スタックからは IPv6 ULA の普通のパスに見えるので path 0 として扱い、NAT traversal をその上で調整。probe は RFC 9000 の PATH_CHALLENGE / PATH_RESPONSE を使い、成功したら path 1..n として開く。

draft-seemann-quic-nat-traversal がベースで、サーバは ADD_ADDRESS / REMOVE_ADDRESS で候補を広告・撤回。本家と異なるのはクライアントが REACH_OUT フレーム(round + アドレス)で開始する点で、ICE のようなアドレスペアリングをせず候補を総当たりで flood する off-path probing。

捨てた設計として「新パスの path ID を使って probing する方式」を挙げ、サーバ側が1つの path ID しか使っていないのにパス churn が大きすぎ CID を大量消費し、peer が max path ID を上げて新 CID を発行するまで待つ必要があったと説明。代わりに probing フレームの概念を戻した(multipath では全パケットが migration 扱いになり off-path probing ができないため)結果、multipath 非依存になったのが綺麗な副産物

残る課題:

初 IETF 参加とのことで、チェアは「P2P ユースケース自体が charter 内かは微妙だが、それを可能にする QUIC の拡張・部品は範囲内」としてメーリングリストでの議論を促した。


発言者名は録画の自動文字起こしから拾っているため、一部に表記ゆれや誤りが含まれる可能性があります(スライドに記載のある著者名は正しい綴りに修正)。