鍵転送プロトコル
対称ニーダム・シュレーダープロトコルスキーム
ニーダム ・シュローダープロトコルは 、安全でないネットワーク上での使用を目的とした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}
のものであるため、メッセージを正常に再生できません 。
参照
参考文献
^ 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.
^ Denning, Dorothy E. ; Sacco, Giovanni Maria (1981). 「鍵配布プロトコルにおけるタイムスタンプ」 Communications of the ACM . 24 (8): 533– 535. doi : 10.1145/358722.358740 . S2CID 3228356.
^ Needham, RM ; Schroeder, MD (1987). 「認証の再考」. ACM SIGOPS オペレーティングシステムレビュー . 21 (1): 7. doi : 10.1145/24592.24593 . S2CID 33658476.
^ 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 による中間者攻撃の説明 。