チャレンジ・レスポンスにおける深刻なセキュリティ上の問題
2026-05-28T00:47:56+08:00
チャレンジ・レスポンスの手法では、検証したい本人にランダムな文字列(nonce)を送り、その文字列を秘密鍵で署名してもらいます。しかし、これには非常に深刻なセキュリティ上の問題があります。
たとえば、Alice が Bob を検証したいとします。しかし、そこに Mallory が割り込んできます。すると、次のようなことが起こります。
- Alice は、Mallory によってなりすまされた 'Bob' にチャレンジを送信する。
- Mallory は Alice になりすまし、そのチャレンジを Bob に転送して応答を要求する。
- Bob は応答を返し、Mallory はその応答をさらに転送する。
このシナリオでは、Mallory は Alice に対して Bob になりすますことに成功しており、MITM 攻撃を実行できるようになります。
解決策は、単なるランダムな文字列だけをチャレンジとして使わないことです。良いチャレンジには、少なくとも次の要素を含めるべきです。
- 検証者と被検証者のトラストアンカーに関する識別情報(たとえば OpenPGP フィンガープリント);
- チャネルに関する識別情報(たとえば、対面で検証する場合の場所、XMPP で検証する場合の JID と OMEMO フィンガープリント、Matrix で検証する場合の双方の Matrix ID とルーム);
- タイムスタンプ;
- nonce、つまりランダムな文字列。
言い換えると、チャレンジは、検証者と被検証者の身元、認証済みのチャネルまたはセッションの文脈、新鮮さのためのタイムスタンプ、そして nonce を結び付ける必要があります。検証者は、署名された身元の主張を認証済みの転送メタデータと照合しなければなりません。
その場合、Mallory は Bob をだますためにチャネルの文脈を改ざんする必要があります(そうしなければ、Bob は問題のあるチャレンジをすぐに見抜いて応答を拒否します)。しかしそうすると、チャレンジが改ざんされているため、Alice が検証する際に応答は無効になります。
さらに強固なセキュリティのためには、相互に検証してください。
















































