Authenticated Key Exchange

能動的/受動的な中間者が想定される通信路を使って共通鍵暗号の鍵を共有するとき、DH鍵共有のような鍵交換とその鍵の持ち主を認証する技術を組み合わせて使う。このような鍵交換の仕組みのことをAuthenticated Key Exchange (AKE) という。このスクラップでは自分の関心のあるいくつかのプロトコルにおける手法を調査、比較してみる。暗号技術の詳細に関しては専門外で深く理解しようとすると難しいので、あくまでそういったプロトコルのユーザとしてハイレベルな理解で留める。

TLS1.3
TLS1.3ではECDHEやDHEでハンドシェイク用の一時鍵を導出して、証明書や署名をその鍵で暗号化して送信する。
TLSはハンドシェイクのやり方が決まっていて、具体的な鍵交換と認証の手法はネゴシエーションで決定するようになっている。ハンドシェイクの概略は以下。
Clientは ClientHello
に含まれる key_share
であらかじめ生成しておいたFFDHEかECDHEの (Ephemeralな) 公開鍵 (パラメータ) を送る。Clientは自分が使いたいDH Group (FFDHEであれば ffdhe2048
、 ECDHEであれば x25519
など) とGroup固有のパラメータを送る (複数個送ってもいい)。
この時に他のサポートしているDH Groupも supported_groups
を使って一緒に送る。key_share
にサポートしている全てのDH Groupのパラメータを含める必要はなく、サーバは key_share
に含まれているGroupが使えない場合は HelloRetryRequest
メッセージを返して他のGroupを使うように要請することができる。
ClientHelloが終わった段階でServer側ではClientの公開鍵とServerの秘密鍵でDHの計算をしてハンドシェイク用の一時鍵を導出できる。