QUIC用APIを実装したOpenSSL forkの登場 (quictls/openssl)

AkamaiMicrosoftらによって、QUIC用APIを実装したOpenSSLのforkが公開されています。
github.com

これらは、公式がQUIC用APIをサポートするまでの一次的なソリューションとのことですが、流れを簡単に整理しておく。

目次

背景: QUICとTLS

QUICと呼ばれる新しいトランスポートプロトコルは、IETFで標準化が進められていましたが、RFCがもうすぐ出るところまできています。

このQUICでは通信を暗号化しますが、コネクションを確立する際に、TLS1.3相当のメッセージをやりとりしサーバ認証および鍵の共有を行います。

f:id:ASnoKaze:20210307224808p:plain
(詳細については 「QUIC-TLS」の仕様を御覧ください)

そこで、QUICを実装するに当たり暗号ライブラリとしてOpenSSLを使いたいところです。

OpenSSL 3.0とQUICサポートの見解

OpenSSLのQUICに対する見解は、2020年2月に投稿された「QUIC and OpenSSL」で述べられています。

OpenSSL 3.0ではQUICをサポートをしない事が述べられています。

QUICが非常に重要だと述べつつも、その時点ではOpenSSL 3.0に注力する事。2020年2月時点では、QUICが成熟しているか判断できないことに触れています。

2019年頃には、QUICをサポートするプルリクエストも出されていますが、上記の理由によりマージされてはいません。
https://github.com/openssl/openssl/pull/8797

forkされたOpenSSL

QUICの標準化も終わりが見えてきており、様々なところでQUICの実装が進められています。各コミュニティのOpenSSLのQUIC APIサポートのニーズは高くなってきているようです。

そのような中で、AkamaiMicrosoftらによって、QUIC用APIを実装したOpenSSLのforkが公開されました。詳細については、Readmeにかかれているとおりだが、ここでは簡単にかいつまんで紹介する
github.com

このforkは、公式がQUICをサポートするまでな一次的なソリューションとして公開されている。

実装的には、上述の"プルリクエスト"を取り込んだ形です。このAPI実装はBoringSSLから取り込まれており、すでにChromiumMSQuicで使用されている。

また、本家のリリースには、1日遅れを目安に追従していくとのことです。

その他の動き

もともとAkamaiはOpenSSLをforkしていたが、MSと共同で、コミュニティー利用のためのforkとして新しく公開した形になるようだ。

Akamai版OpenSSLを利用していたNode.jsは、すでに新しいforkに切り替える準備が進められている。
github.com