Facebookが炭酸入りのTLS 1.3ライブラリ「Fizz」のボトルを開ける

Table of Contents

Facebookが炭酸入りのTLS 1.3ライブラリ「Fizz」のボトルを開ける

TLS 1.3ライブラリをお探しですか?Facebookがお手伝いします。広告とデータの販売を手がけるこの企業は、月曜日にC++14で書かれたTLS 1.3ライブラリ「Fizz」をオープンソースプロジェクトとしてリリースする予定です。

TLS 1.3は、クライアントとサーバー間のネットワーク通信を暗号化するSecure Sockets Layer(SSL)の後継となる、トランスポート層セキュリティ(TLS)プロトコルの最新かつ最高のバージョンです。3月に仕様が最終決定され、以前のバージョンよりも強力なセキュリティとより効率的なネットワーク機能を備えています。

このプロトコルはまだ普及段階にあります。Mozillaフェローであり、TLSおよびHTTPS仕様の編集者でもあるエリック・レスコラ氏は、The Registerへのメールで、TLS 1.3を可能な限り容易に導入できるようにするために、既に多くの作業が行われてきたと述べています。

「これはTLS 1.2の代替としてそのまま使えるもので、同じ鍵と証明書を使用します。クライアントとサーバーの両方がTLS 1.3をサポートしていれば、自動的にネゴシエートできます」と彼は述べた。「既にかなり優れたライブラリのサポートがあり、ChromeとFirefoxはどちらもデフォルトでTLS 1.3が有効になっています。」

システム管理者にとってビールの時間です。写真はSHutterstockより

TLS 1.3インターネット暗号が承認され、世界は歓喜、サイバースヌープは嘆く

続きを読む

そうは言っても、展開にはいくつか困難な点もありました。

「以前のドラフト版には導入上の課題がいくつかありました。多くのミドルボックスがTLS 1.3で障害を引き起こすような不具合を抱えていたのです」と彼は述べた。「これを受けてプロトコルにいくつか修正を加えましたが、新バージョンでは大きな問題は見られません。」

Facebook はThe Registerに提供されたブログ記事の草稿で、Fizz を「高性能」と評し、より強力なセキュリティなど、Google の BoringSSL や OpenSSL などの代替品よりも開発者にとって魅力的となる可能性のあるいくつかの機能を挙げている。

同社は、インターネットトラフィックの50%以上がTLS 1.3によって保護されており、Fizzは1秒間に数百万回のハンドシェイクを処理していると主張している。

Facebookのソフトウェアエンジニアであるカイル・ネクリッツ氏、スボード・アイエンガー氏、アレックス・グズマン氏は、「Fizzはレイテンシーだけでなく、1日に何兆ものリクエストを処理するサービスのCPU使用率も削減した」と述べている。

3 社によると、Facebook のロードバランサー合成ベンチマークでは、Fizz を使用すると、同社の以前のスタックに比べてスループットが約 10 パーセント向上するという。

チャンキー

Fizzは、連続したメモリ空間を必要とする他のTLSライブラリよりも効率的にメモリを処理すると言われています。アプリはデータを不連続なチャンクに保存する傾向があるため、データのコピーと再結合を行う際に、余分なレイテンシが発生します。

一方、Fizzはベクトル化I/O(スキャッター/ギャザーI/Oとも呼ばれる)をサポートしており、少ないメモリ割り当てとコピー操作でチャンク化されたデータを送受信できます。こうしたゼロコピー書き込み操作によって、Fizzは「パフォーマンス」が向上します。

また、非同期サーバー操作と、TLS キー署名を API 経由で別のサービスに渡す機能もコードでネイティブにサポートされており、キーの安全を保つのに役立ちます。

このライブラリには、TCP接続が確立されるとすぐにデータを送信する機能も含まれています。早期のデータ送信はリクエストのレイテンシを短縮しますが、リプレイ攻撃のリスクを高めます。Facebookは、早期送信をホワイトリストに登録されたデータに限定し、ロードバランサーにキャッシュを配置して応答の試行を検出することで、この問題を防御しています。

さらに、追加のセキュリティ対策も組み込まれています。Fizzは、OpenSSLで特定されたCCSインジェクション脆弱性など、コードの状態を変更しようとする攻撃を回避するため、状態が単一の場所で明示的に定義されるように設計されています。また、誤った状態遷移を回避するために抽象化レイヤーを実装しています。

「状態ハンドラが明示的な状態マシンで定義されていない誤った状態遷移を使用した場合、コードはコンパイルに失敗します」と、ネクリッツ、アイエンガー、グズマンは説明する。「これにより、実行時ではなくコンパイル時にバグを検出し、ミスを防ぐことができます。」

TLS 1.3 はまだ正式には公開されていませんが、公式のインターネット標準となった後の仕様を示す RFC 8446 が間もなく公開される予定です。®

Discover More