KEMTLS: 署名を鍵交換に置き換えた量子耐性のあるTLS
TL;DR
CloudflareとGoogleが行った実験を基に、量子耐性のあるTLSについて解説
署名と鍵交換に利用されるアルゴリズムを量子耐性のあるものに置き換えることでデータサイズが肥大化
1,376 bytes → 10,036 bytes
署名を鍵交換に置き換えることでサイズを削減
10,036 bytes → 8,344 bytes
本文
実験では、パフォーマンスとフィージビリティの評価をゴールとし、対象をTLS1.3 handshakeとしている。TLS1.3のゴールは秘匿性と完全性の保証であり、handshakeは接続を保護および認証するための暗号化パラメタを確立するフェーズである。実験はこのhandshake内で利用されるアルゴリズムを量子耐性のあるアルゴリズムに置き換えるものだ。
しかし量子耐性のあるアルゴリズムは利用する数学的プリミティブのサイズが大きい。X25519楕円曲線とRSA-2048を利用する典型的なTLS1.3 handshakeの場合、送信されるデータサイズ(鍵交換の公開鍵、証明書、handshakeの署名、証明書チェーンが含まれる)は1,376 bytesである。一方で量子耐性を求め、X25519楕円曲線をKyber512、RSA-2048をDilithium IIに置き換えた場合、10,036 bytesまで増加する。
KEMTLSはこのサイズを少なくするものだ。アイデアとしては、量子耐性のある鍵交換と署名では署名サイズのほうが大きいことに着目し、署名を鍵交換で置き換える。
https://gyazo.com/432880411b2927a408121cd292130ff5
そもそも認証のために署名を利用していたが、署名以外のメカニズムで認証を行うことも可能だ。実際、鍵交換のメカニズムに基づいた認証はSignalやWireGuardでも利用されている。ただしSignalやWireGuardは鍵の材料となる情報が長期的に関係者に事前共有されている前提のため、TLSへの利用には適していない。
KEMTLSではその名の通り、認証にKey Encapsulation Mechanisms(KEM)を利用する。KEMは鍵交換プリミティブの抽象化であり、ハイブリッド暗号におけるshared secretを生成するための仕様だ。KEMTLSではhandshakeの署名を量子耐性のあるKEM鍵交換に置き換え、認証と秘匿性、完全性を達成する。直感的にはTLS1.3 handshake署名はTLS.13のserver証明書で認定された対応する秘密鍵を所有していることを証明することであるが、所有を証明するための別の方法として鍵交換を利用する。具体的には、対応する秘密鍵を保持している場合のみ、clientからのメッセージを復号できるようにすることで暗黙的な認証を実現する。KEMTLSによって10,036 bytes掛かっていたデータサイズを8,344 bytesに削減できるとしている。
筆者の所感としては、8,344 bytesも大きいように感じた。一般的なインターネットではMTUが1,500 bytesであり、IPヘッダとTCPヘッダに20 bytesずつ利用すると1,460 bytesに収まらない。自社内で閉じたネットワーク環境であればジャンボフレームを許容することも一案ではあるが、TLSというインターネットを支えるプロトコルではそぐわず、パケットを分割することになるだろう。この影響について実験が進められていると推察し、今後のレポートも楽しみだ。(文責・恩田) minaminao.icon フラグメンテーションしなければいけない場合、レイテンシが約6倍(?)になる以外にどういった影響が生まれる可能性があるのだろう
cipepser.icon L4にTCPを採用した場合、パケットの順序入れ替えや再送が発生する可能性はありますね。(QUICでやったとしても経路上でpacketがドロップした場合は同じような話はあるかと)ただ、実験のレポートでもレイテンシが横軸に取った結果について議論されているので、関心はレイテンシになるかと思います。どしどし送ってしまえばいいのでレイテンシは6倍にならなそう?:chimpan:
minaminao.icon fmfm