メンバー: 山本和彦
カテゴリー: Underpinning
- 背景:IETFでは活発に新しいプロトコルが標準化されており、その仕様の正しさを検証することが望まれている
- 目的:最新のプロトコルを実装し、相互接続性を検証することで、プロトコルの標準化に貢献する
概要
プログラミング言語Haskellを用いて、さまざまなネットワークプロトコルを実装し、相互接続性を検証している。
成果物
- ポジションペーパー:Network Protocol Programming in Haskell, ACM SIGCOMM 2017 The Third Workshop on Networking and Programming Languages (NetPL 2017)
- ソフトウェア:network, warp, tls, http2, http2-tls, quic, http3
- QUICをゆっくり解説, IIJ エンジニアブログ, 2021〜2022.
- HaskellによるQUICの実装, Internet Infrastructure Review(IIR)Vol.52, 2021.
- TLS 1.3の標準化と実装, IIJ エンジニアブログ, 2018.
- TLSの動向, Internet Infrastructure Review(IIR)Vol.31, 2016.
- Exploring HTTP/2 Header Compression, Kazuhiko Yamamoto, Tatsuhiro Tsujikawa and Kazuho Oku. In Proceedings of CFI 2017, the 12th Internatinal Conference on Future Internet Technologies.
- Experience Report: Developing High Performance HTTP/2 Server in Haskell, Kazuhiko Yamamoto. In Proceedings of Haskell Symposium 2016.
- Mio: A High-Performance Multicore IO Manager for GHC, Andreas Voellmy, Junchang Wang, Paul Hudak and Kazuhiko Yamamoto. In Proceedings of Haskell Symposium 2013.
進捗
2024FY4Qの進捗
tlsfuzzer
を用いてtls
ライブラリのための回帰テストを実現したtls
ライブラリに、レコード・サイズ制限拡張や証明書圧縮拡張を実装したtls
ライブラリにECH(Encrypted ClientHello)を実装し、他の実装との相互接続性を検証することで、仕様を検証したquic
ライブラリに、stateless resetを再実装するとともに、複数のTLSチケットに対応させた- ブログ記事
2024FY3Qの進捗
- 同調スレッド・モデル:
network
やhttp2
ライブラリなどで非同期例外の利用を低減して同期化することで、コードの見通しを明瞭にした - スレッド・モニター:HTTPサーバにスレッド・モニターを実装し、非同期例外のため生じていたスレッド・リークを依存ライブラリから取り除いた
- tlsライブラリ:
tlsfuzzer
を使ったテストでコーナーケースを改善するとともに、テストを自動化して回帰テストを可能とした - ブログ記事:Myth and truth in Haskell asynchronous exceptions
2024FY2Qの進捗
http2
サーバ・アーキテクチャの刷新: ストリーミングの際に大量に軽量スレッドを利用する問題を解決すると同時に、コードを簡潔にした。またそれに関して、ブログ記事を書いたquic
サーバアーキテクチャの刷新: コネクト済ソケット方式をやめて、ワイルドカードソケットを用いるように変更し、中間に頻繁にポートを変更するNATが存在しても通信を可能とした。またそれに関して、ブログ記事を書いた
2024FY1Qの進捗
- ネットワーク・ライブラリ群の安定化:
tls
/http2
/http2-tls
/quic
/http3
ライブラリに実装しているデバッグツールの機能を統一し、網羅的なテストを可能とした。このテストで新たに発見した複数のバグと、DNS への応用の際に発見したバグを取り、安定化させた - TLSの複数チケットへの対応: 複数のチケットを送ってくるTLSサーバに対応し、セッションの再開を安定化させた。その際発見した0-RTTのバグも修正した
2023FY4Qの進捗
tls
ライブラリの0-RTT:ハンドシェイクの実装を非同期化し、クライアント側が送信する0-RTTデータを動的に決定可能にした。DNS over TLSで0-RTTを使用し、実用性を確かめたquic
ライブラリの安定化:New Connection ID フラッド攻撃へ対処した。DNSover QUICで0-RTTを使用し、実用性を確かめた
2023FY3Qの進捗
tls
ライブラリ:大幅リファクタリング、TLS 1.0/1.1を削除、CBC暗号スイートを削除、テストの洗練化、channel binding の実装tls-session-manager
ライブラリ:セッションチケット方式を実装したnetwork-control
ライブラリ:フロー制御の共通部分を抽出しライブラリとしてリリースしたquic
ライブラリ:フロー制御の仕組みを刷新した。Path Challengeフラッド攻撃へ対処したhttp2
ライブラリ:HTTP/2 rapid reset 攻撃へ対処した。DNSパイプラインへ効率よく対応するための機構を組み込んだ。フロー制御の仕組みを刷新した
2023FY2Qの進捗
quic
ライブラリを安定化させたhttp2
ライブラリとtls
ライブラリを結合し簡単に利用するためのhttp2-tls
ライブラリをリリースした
2023FY1Qの進捗
http2
ライブラリを安定化させた- 暗号ライブラリ
cryptonite
が保守されなくなったので、フォークをcrypton
と名付け、各ライブラリをcrypton
へ移行した