ニーダム・シュローダープロトコル

鍵転送プロトコル
対称ニーダム・シュレーダープロトコルスキーム

ニーダム・シュローダープロトコルは、安全でないネットワーク上での使用を目的とした2つの主要なトランスポートプロトコルのうちの1つであり、どちらもロジャー・ニーダムマイケル・シュローダーによって提案されました。[1]これらは以下のとおりです。

対称プロトコル

ここで、アリスは ボブへの通信を開始しますボブは両者が信頼するサーバーです。通信では、以下のようになります {\displaystyle (A)} B {\displaystyle B} S {\displaystyle S}

  • {\displaystyle A} それぞれアリスとボブのアイデンティティである B {\displaystyle B}
  • K S {\displaystyle {K_{AS}}} は、そしてのみに知られている対称鍵です {\displaystyle A} S {\displaystyle S}
  • K B S {\displaystyle {K_{BS}}} は、そしてのみに知られている対称鍵です B {\displaystyle B} S {\displaystyle S}
  • {\displaystyle N_{A}} およびはそれぞれおよびによって生成されるノンスである。 B {\displaystyle N_{B}} {\displaystyle A} B {\displaystyle B}
  • K B {\displaystyle {K_{AB}}} 生成された対称キーであり、間のセッションのセッションキーになります。 {\displaystyle A} B {\displaystyle B}

プロトコルは、セキュリティ プロトコル表記法で次のように指定できます。

S : B {\displaystyle A\rightarrow S:\left.A,B,N_{A}\right.}
アリスは、自分とボブを識別して、ボブと通信したいことをサーバーに伝えるメッセージをサーバーに送信します。
S : { K B B { K B } K B S } K S {\displaystyle S\rightarrow A:\{N_{A},K_{AB},B,\{K_{AB},A\}_{K_{BS}}\}_{K_{AS}}}
サーバーは、アリスがボブに転送するためのコピーと、アリス自身のコピーを生成し、アリスに返送します。アリスは複数の人物の鍵を要求する可能性があるため、ノンスによってアリスはメッセージが新しいこと、サーバーがその特定のメッセージに返信していることを保証されます。また、ボブの名前が含まれていることで、アリスはこの鍵を誰と共有すべきかを知ることができます。 K B {\displaystyle {K_{AB}}} K B S {\displaystyle {K_{BS}}}
B : { K B } K B S {\displaystyle A\rightarrow B:\{K_{AB},A\}_{K_{BS}}}
アリスはボブにキーを転送し、ボブはサーバーと共有しているキーを使用してそのキーを復号化し、データを認証します。
B : { B } K B {\displaystyle B\rightarrow A:\{N_{B}\}_{K_{AB}}}
ボブは、自分が鍵を持っていることを示すために、暗号化された nonce をアリスに送信します。 K B {\displaystyle {K_{AB}}}
B : { B 1 } K B {\displaystyle A\rightarrow B:\{N_{B}-1\}_{K_{AB}}}
アリスは nonce に対して簡単な操作を実行し、それを再暗号化して、自分がまだ生きていることと鍵を保持していることを確認して送り返します。

プロトコルへの攻撃

このプロトコルはリプレイ攻撃に対して脆弱です( DenningとSacco [2]によって特定されています)。攻撃者が K B {\displaystyle K_{AB}} に古くて侵害された値を使用した場合、ボブにメッセージをリプレイすることができ、ボブは鍵が新しいものではないと判断できないため、メッセージを受け入れてしまいます。 { K B } K B S {\displaystyle \{K_{AB},A\}_{K_{BS}}}

攻撃を修正する

この欠陥は、Kerberosプロトコルではタイムスタンプを組み込むことで修正されています。また、後述するナンスを使用することでも修正可能です。[3]プロトコルの冒頭部分:

B : {\displaystyle A\rightarrow B:A}
アリスはボブにリクエストを送信します。
B : { B } K B S {\displaystyle B\rightarrow A:\{A,N_{B}'\}_{K_{BS}}}
ボブは、サーバーのキーで暗号化された nonce で応答します。
S : B { B } K B S {\displaystyle A\rightarrow S:\left.A,B,N_{A},\{A,N_{B}'\}_{K_{BS}}\right.}
アリスは、自分とボブを識別して、ボブと通信したいことをサーバーに伝えるメッセージをサーバーに送信します。
S : { K B B { K B B } K B S } K S {\displaystyle S\rightarrow A:\{N_{A},K_{AB},B,\{K_{AB},A,N_{B}'\}_{K_{BS}}\}_{K_{AS}}}
nonce が含まれていることに注意してください。

その後、プロトコルは上記の元のプロトコルで説明した最後の3つのステップまで、記述どおりに続行されます。 はとは異なるノンスであることに注意してください。この新しいノンスを含めることで、 の侵害されたバージョンの再生を防ぐことができます。なぜなら、そのようなメッセージは、攻撃者がを持っていないため偽造できない形式である必要があるからです B {\displaystyle N_{B}'} B {\displaystyle N_{B}} { K B } K B S {\displaystyle \{K_{AB},A\}_{K_{BS}}} { K B B } K B S {\displaystyle \{K_{AB},A,N_{B}'\}_{K_{BS}}} K B S {\displaystyle K_{BS}}

公開鍵プロトコル

これは、公開鍵暗号化アルゴリズムの使用を前提としています

ここで、アリスとボブは信頼できるサーバーを利用して、リクエストに応じて公開鍵を配布します。これらの鍵は以下のとおりです。 {\displaystyle (A)} B {\displaystyle (B)} S {\displaystyle (S)}

  • K P {\displaystyle K_{PA}} および⁠ は K S {\displaystyle K_{SA}} 、それぞれ(ここでは「秘密鍵」を表す)に属する暗号化鍵ペアの公開鍵と秘密鍵の半分である。 {\displaystyle A} S {\displaystyle S}
  • K P B {\displaystyle K_{PB}} そして K S B {\displaystyle K_{SB}} 、類似のもの B {\displaystyle B}
  • K P S {\displaystyle K_{PS}} および⁠ は、 K S S {\displaystyle K_{SS}} S {\displaystyle S} ⁠に属し、同様に⁠ に属します。(この鍵ペアはデジタル署名に使用されます。つまり、メッセージの署名に使用され、検証に使用されます。 プロトコルが開始する前にが知っている必要があります。) K S S {\displaystyle K_{SS}} K P S {\displaystyle K_{PS}} K P S {\displaystyle K_{PS}} {\displaystyle A} B {\displaystyle B}

プロトコルは次のように実行されます。

S : B {\displaystyle A\rightarrow S:\left.A,B\right.}
{\displaystyle A} B {\displaystyle B} ⁠から S {\displaystyle S} の公開鍵を要求します
S : { K P B B } K S S {\displaystyle S\rightarrow A:\{K_{PB},B\}_{K_{SS}}}
S {\displaystyle S} 認証のためにサーバーによって署名された公開鍵と ⁠ ⁠ の ID で応答ます K P B {\displaystyle K_{PB}} B {\displaystyle B}
B : { } K P B {\displaystyle A\rightarrow B:\{N_{A},A\}_{K_{PB}}}
{\displaystyle A} ランダムに選択してに送信します {\displaystyle N_{A}} B {\displaystyle B}
B S : B {\displaystyle B\rightarrow S:\left.B,A\right.}
B {\displaystyle B} ⁠ ⁠ は A が通信を望んでいることを知ったので、の公開鍵を要求します。 B {\displaystyle B} {\displaystyle A}
S B : { K P } K S S {\displaystyle S\rightarrow B:\{K_{PA},A\}_{K_{SS}}}
サーバーが応答します。
B : { B } K P {\displaystyle B\rightarrow A:\{N_{A},N_{B}\}_{K_{PA}}}
B {\displaystyle B} ランダムな B {\displaystyle N_{B}} を選択し、で復号できることを証明するために⁠ ⁠ と一緒に⁠ ⁠ に送信します {\displaystyle A} {\displaystyle N_{A}} K S B {\displaystyle K_{SB}}
B : { B } K P B {\displaystyle A\rightarrow B:\{N_{B}\}_{K_{PB}}}
{\displaystyle A} 確認し、 で復号化できることを証明します B {\displaystyle N_{B}} B {\displaystyle B} K S {\displaystyle K_{SA}}

プロトコルの最後に、と は互いのIDを知り、と の両方を知りますこれらのノンスは盗聴者には知られません。 {\displaystyle A} B {\displaystyle B} {\displaystyle N_{A}} B {\displaystyle N_{B}}

プロトコルへの攻撃

このプロトコルは中間者攻撃に対して脆弱です。もし詐欺師が相手を説得してセッションを開始させることができれば、メッセージを中継し、相手がであると信じ込ませることができます {\displaystyle I} {\displaystyle A} B {\displaystyle B} B {\displaystyle B} {\displaystyle A}

変更されていない との間のトラフィックを無視すると、攻撃は次のように実行されます。 S {\displaystyle S}

: { } K P {\displaystyle A\rightarrow I:\{N_{A},A\}_{K_{PI}}}
{\displaystyle A} 送信され、⁠ ⁠ はでメッセージを復号化します {\displaystyle N_{A}} {\displaystyle I} K S {\displaystyle K_{SI}}
B : { } K P B {\displaystyle I\rightarrow B:\{N_{A},A\}_{K_{PB}}}
{\displaystyle I} 通信しているふりをして、メッセージを B {\displaystyle B} に中継します。 {\displaystyle A}
B : { B } K P {\displaystyle B\rightarrow I:\{N_{A},N_{B}\}_{K_{PA}}}
B {\displaystyle B} 送信します B {\displaystyle N_{B}}
: { B } K P {\displaystyle I\rightarrow A:\{N_{A},N_{B}\}_{K_{PA}}}
{\displaystyle I} それを⁠ {\displaystyle A} に中継します
: { B } K P {\displaystyle A\rightarrow I:\{N_{B}\}_{K_{PI}}}
A {\displaystyle A} それを復号して、それを知ったに確認します。 N B {\displaystyle NB} I {\displaystyle I}
I B : { N B } K P B {\displaystyle I\rightarrow B:\{N_{B}\}_{K_{PB}}}
I {\displaystyle I} N B {\displaystyle N_{B}} を再暗号化しそれを復号化したと確信します。 B {\displaystyle B}

攻撃の最後に、、が自分と通信しており、はとのみに知られている誤って信じます B {\displaystyle B} A {\displaystyle A} N A {\displaystyle N_{A}} N B {\displaystyle N_{B}} A {\displaystyle A} B {\displaystyle B}

次の例は、この攻撃を示しています。アリス ( A {\displaystyle A} ) は銀行 ( B {\displaystyle B} ) に連絡を取りたいと考えています。ここでは、詐欺師 ( I {\displaystyle I} )が自分は銀行だと信じ込ませることに成功したと想定しています。結果として、アリスが銀行に送るメッセージを暗号化するために、 の公開鍵ではなくの公開鍵を使用します。したがって、 はの公開鍵で暗号化された nonce を送信します。は自分の秘密鍵を使用してメッセージを復号化し、の公開鍵で暗号化されたの nonce を送信して⁠ ⁠ に連絡します。には、このメッセージが実際にから送信されたことを知る方法はありません。は自分の nonce で応答し、 の公開鍵でメッセージを暗号化しますはの秘密鍵を所有していないため、内容を知らずにメッセージを ⁠ ⁠ に中継する必要があります。 A は自分の秘密鍵でメッセージを復号化し、 の公開鍵で暗号化されたの nonce で応答します。は自分の秘密鍵を使用してメッセージを復号化し、今では nonceを所有しています。したがって、彼らはそれぞれ銀行と顧客になりすますことができるようになりました。 A {\displaystyle A} A {\displaystyle A} I {\displaystyle I} B {\displaystyle B} A {\displaystyle A} I {\displaystyle I} I {\displaystyle I} I {\displaystyle I} B {\displaystyle B} A {\displaystyle A} B {\displaystyle B} B {\displaystyle B} I {\displaystyle I} B {\displaystyle B} A {\displaystyle A} I {\displaystyle I} A {\displaystyle A} A {\displaystyle A} B {\displaystyle B} I {\displaystyle I} I {\displaystyle I} A {\displaystyle A} B {\displaystyle B}

中間者攻撃の修正

この攻撃は、1995年にギャビン・ロウによって発表された論文[4]で初めて説明されました。 この論文では、ニーダム・シュローダー・ロウ・プロトコルと呼ばれる、この手法の修正版も説明されています。この修正では、6番目のメッセージに応答者のIDを含めるように変更します。つまり、以下のコードを置き換えます

B A : { N A , N B } K P A {\displaystyle B\rightarrow A:\{N_{A},N_{B}\}_{K_{PA}}}

修正バージョン:

B A : { N A , N B , B } K P A {\displaystyle B\rightarrow A:\{N_{A},N_{B},B\}_{K_{PA}}}

侵入者は、 ⁠ ⁠が A {\displaystyle A} I {\displaystyle I} の ID を含むメッセージを期待していますが、メッセージの ID は B {\displaystyle B} のものであるため、メッセージを正常に再生できません

参照

参考文献

  1. ^ Needham, Roger; Schroeder, Michael (1978年12月). 「大規模コンピュータネットワークにおける認証のための暗号化の利用」Communications of the ACM . 21 (12): 993– 999. CiteSeerX 10.1.1.357.4298 . doi :10.1145/359657.359659. S2CID  7704786.  
  2. ^ Denning, Dorothy E. ; Sacco, Giovanni Maria (1981). 「鍵配布プロトコルにおけるタイムスタンプ」Communications of the ACM . 24 (8): 533– 535. doi : 10.1145/358722.358740 . S2CID  3228356.
  3. ^ Needham, RM ; Schroeder, MD (1987). 「認証の再考」. ACM SIGOPS オペレーティングシステムレビュー. 21 (1): 7. doi : 10.1145/24592.24593 . S2CID  33658476.
  4. ^ Lowe, Gavin (1995年11月). 「Needham–Schroeder公開鍵認証プロトコルへの攻撃」. Information Processing Letters . 56 (3): 131– 136. CiteSeerX 10.1.1.394.6094 . doi :10.1016/0020-0190(95)00144-2 . 2008年4月17日閲覧  
  • ロジャー・ニーダム;マイケル・シュレーダー (1978)。 「ニーダム・シュローダー公開鍵」。ラボラトワールの仕様と検証。
  • ロジャー・ニーダム;マイケル・シュレーダー (1978)。 「ニーダム・シュレーダー対称鍵」。ラボラトワールの仕様と検証。
  • ギャビン・ロウ (1995)。 「Lowe の修正バージョンの Needham-Schroder 公開鍵」。ラボラトワールの仕様と検証。
  • Computerphileによる中間者攻撃の説明
Retrieved from "https://en.wikipedia.org/w/index.php?title=Needham–Schroeder_protocol&oldid=1309498889"