キートランスポートプロトコル
対称ニーダム・シュレーダープロトコルスキーム
ニーダム・シュローダープロトコルは 、 安全でないネットワーク上での使用を目的とした2つの主要なトランスポートプロトコルのうちの1つであり、どちらも ロジャー・ニーダム と マイケル・シュローダー によって提案されました。 [1] これらは次のとおりです。
Needham -Schroeder 対称鍵プロトコルは、 対称暗号化アルゴリズム に基づいています。これは、 Kerberos プロトコルの基礎となります。このプロトコルは 、通常は以降の通信を保護するために、ネットワーク上の 2 つの当事者間で セッション キー を確立することを目的としています。
公開鍵暗号 に基づく Needham -Schroeder 公開鍵プロトコル 。このプロトコルは、ネットワーク上で通信する 2 者間の相互 認証を 提供することを目的としていますが、提案された形式では安全ではありません。
対称プロトコル
ここで、 アリスは ボブ との通信を開始します 。 ボブは両者が信頼するサーバーです。通信では次のことが行われます
。
(
あ
)
{\displaystyle (A)}
B
{\displaystyle B}
S
{\displaystyle S}
あ
{\displaystyle A}
それぞれ アリスとボブのアイデンティティである
B
{\displaystyle B}
け
あ
S
{\displaystyle {K_{AS}}}
は、そして のみに知られている対称鍵です
あ
{\displaystyle A}
S
{\displaystyle S}
け
B
S
{\displaystyle {K_{BS}}}
は、そして のみに知られている対称鍵です
B
{\displaystyle B}
S
{\displaystyle S}
いいえ
あ
{\displaystyle N_{A}}
およびは それぞれ および によって生成される ノンス である。
いいえ
B
{\displaystyle N_{B}}
あ
{\displaystyle A}
B
{\displaystyle B}
け
あ
B
{\displaystyle {K_{AB}}}
は対称的に生成されたキーであり、 と 間のセッションの セッションキーになります。
あ
{\displaystyle A}
B
{\displaystyle B}
プロトコルは、 セキュリティ プロトコル表記法 で次のように指定できます。
あ
→
S
:
あ
、
B
、
いいえ
あ
{\displaystyle A\rightarrow S:\left.A,B,N_{A}\right.}
アリスは、自分とボブを識別するメッセージをサーバーに送信し、ボブと通信したいことをサーバーに伝えます。
S
→
あ
:
{
いいえ
あ
、
け
あ
B
、
B
、
{
け
あ
B
、
あ
}
け
B
S
}
け
あ
S
{\displaystyle S\rightarrow A:\{N_{A},K_{AB},B,\{K_{AB},A\}_{K_{BS}}\}_{K_{AS}}}
サーバーは、アリスがボブに転送するための 暗号化されたコピーとアリス用のコピーを生成してアリスに送り返します 。アリスは複数の人のキーを要求している可能性があるため、ノンスによりアリスはメッセージが新しいこと、サーバーがその特定のメッセージに返信していることを確信し、ボブの名前が含まれていることでアリスはこのキーを誰と共有するかを知ることができます。
け
あ
B
{\displaystyle {K_{AB}}}
け
B
S
{\displaystyle {K_{BS}}}
あ
→
B
:
{
け
あ
B
、
あ
}
け
B
S
{\displaystyle A\rightarrow B:\{K_{AB},A\}_{K_{BS}}}
アリスはボブにキーを転送し、ボブはサーバーと共有しているキーを使用してそのキーを復号化し、データを認証します。
B
→
あ
:
{
いいえ
B
}
け
あ
B
{\displaystyle B\rightarrow A:\{N_{B}\}_{K_{AB}}}
ボブは、自分が鍵を持っていることを示すために、 次のように暗号化された nonce をアリスに送信します。
け
あ
B
{\displaystyle {K_{AB}}}
あ
→
B
:
{
いいえ
B
−
1
}
け
あ
B
{\displaystyle A\rightarrow B:\{N_{B}-1\}_{K_{AB}}}
アリスは nonce に対して簡単な操作を実行し、それを再暗号化して、自分がまだ生きていることと鍵を保持していることを確認して送り返します。
プロトコルへの攻撃
このプロトコルはリプレイ攻撃 に対して脆弱です( Denning とSacco [2] によって特定されています )。攻撃者が
け
あ
B
{\displaystyle K_{AB}}
に古くて侵害された値を使用した場合、ボブにメッセージをリプレイすることができ 、ボブはキーが新しいものではないことを判断できずにメッセージを受け入れてしまいます。
{
け
あ
B
、
あ
}
け
B
S
{\displaystyle \{K_{AB},A\}_{K_{BS}}}
攻撃を修正する
この欠陥は、タイムスタンプ を組み込むことで Kerberosプロトコル で修正されます 。また、以下で説明するように、ナンスを使用することで修正することもできます。 [3] プロトコルの冒頭部分:
あ
→
B
:
あ
{\displaystyle A\rightarrow B:A}
アリスはボブにリクエストを送信します。
B
→
あ
:
{
あ
、
いいえ
B
′
}
け
B
S
{\displaystyle B\rightarrow A:\{A,N_{B}'\}_{K_{BS}}}
ボブは、サーバーのキーで暗号化された nonce で応答します。
あ
→
S
:
あ
、
B
、
いいえ
あ
、
{
あ
、
いいえ
B
′
}
け
B
S
{\displaystyle A\rightarrow S:\left.A,B,N_{A},\{A,N_{B}'\}_{K_{BS}}\right.}
アリスは、自分とボブを識別するメッセージをサーバーに送信し、ボブと通信したいことをサーバーに伝えます。
S
→
あ
:
{
いいえ
あ
、
け
あ
B
、
B
、
{
け
あ
B
、
あ
、
いいえ
B
′
}
け
B
S
}
け
あ
S
{\displaystyle S\rightarrow A:\{N_{A},K_{AB},B,\{K_{AB},A,N_{B}'\}_{K_{BS}}\}_{K_{AS}}}
nonce が含まれていることに注意してください。
その後、プロトコルは、上記の元のプロトコルで説明されている最後の 3 つのステップまで説明どおりに続行されます。 は とは異なる nonce であることに注意してください 。この新しい nonce を含めることで、 の侵害されたバージョンの再生を防ぐことができます。これは、そのようなメッセージは、攻撃者が を 持っていないため偽造できない 形式である必要があるためです 。
いいえ
B
′
{\displaystyle N_{B}'}
いいえ
B
{\displaystyle N_{B}}
{
け
あ
B
、
あ
}
け
B
S
{\displaystyle \{K_{AB},A\}_{K_{BS}}}
{
け
あ
B
、
あ
、
いいえ
B
′
}
け
B
S
{\displaystyle \{K_{AB},A,N_{B}'\}_{K_{BS}}}
け
B
S
{\displaystyle K_{BS}}
公開鍵プロトコル
これは、公開鍵暗号化アルゴリズム の使用を前提としています 。
ここで、アリス とボブは 信頼できるサーバーを使用して 、要求に応じて公開鍵を配布します。これらの鍵は次のとおりです。
(
あ
)
{\displaystyle (A)}
(
B
)
{\displaystyle (B)}
(
S
)
{\displaystyle (S)}
け
ポ
あ
{\displaystyle K_{PA}}
および は
け
S
あ
{\displaystyle K_{SA}}
、それぞれ( ここでは「秘密鍵」を表す) に属する暗号化キーペアの公開鍵と秘密鍵です。
あ
{\displaystyle A}
S
{\displaystyle S}
け
ポ
B
{\displaystyle K_{PB}}
そして 、 同様
け
S
B
{\displaystyle K_{SB}}
に所属する
B
{\displaystyle B}
け
ポ
S
{\displaystyle K_{PS}}
および 、同様に
け
S
S
{\displaystyle K_{SS}}
S
{\displaystyle S}
に属します。 (この鍵ペアは デジタル署名 に使用されます。 つまり、 メッセージの署名に使用され、 検証に使用されます。 プロトコルが開始する前に が 知っておく必要があります 。)
け
S
S
{\displaystyle K_{SS}}
け
ポ
S
{\displaystyle K_{PS}}
け
ポ
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
→
あ
:
{
け
ポ
B
、
B
}
け
S
S
{\displaystyle S\rightarrow A:\{K_{PB},B\}_{K_{SS}}}
S
{\displaystyle S}
認証目的でサーバーによって署名された 公開鍵 と の ID で応答します。
け
ポ
B
{\displaystyle K_{PB}}
B
{\displaystyle B}
あ
→
B
:
{
いいえ
あ
、
あ
}
け
ポ
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
:
{
け
ポ
あ
、
あ
}
け
S
S
{\displaystyle S\rightarrow B:\{K_{PA},A\}_{K_{SS}}}
サーバーが応答します。
B
→
あ
:
{
いいえ
あ
、
いいえ
B
}
け
ポ
あ
{\displaystyle B\rightarrow A:\{N_{A},N_{B}\}_{K_{PA}}}
B
{\displaystyle B}
ランダムな を選択し、
いいえ
B
{\displaystyle N_{B}}
で復号できることを証明するために とともに に送信します 。
あ
{\displaystyle A}
いいえ
あ
{\displaystyle N_{A}}
け
S
B
{\displaystyle K_{SB}}
あ
→
B
:
{
いいえ
B
}
け
ポ
B
{\displaystyle A\rightarrow B:\{N_{B}\}_{K_{PB}}}
あ
{\displaystyle A}
に 確認し、 で復号化できることを証明します 。
いいえ
B
{\displaystyle N_{B}}
B
{\displaystyle B}
け
S
あ
{\displaystyle K_{SA}}
プロトコルの最後に、 と は 互いの ID を知り、 と の両方を知ります 。 これら の nonce は盗聴者には知られません。
あ
{\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}
あ
→
私
:
{
いいえ
あ
、
あ
}
け
ポ
私
{\displaystyle A\rightarrow I:\{N_{A},A\}_{K_{PI}}}
あ
{\displaystyle A}
に 送信され、 は でメッセージを復号化します 。
いいえ
あ
{\displaystyle N_{A}}
私
{\displaystyle I}
け
S
私
{\displaystyle K_{SI}}
私
→
B
:
{
いいえ
あ
、
あ
}
け
ポ
B
{\displaystyle I\rightarrow B:\{N_{A},A\}_{K_{PB}}}
私
{\displaystyle I}
通信しているふりをして、 メッセージを
B
{\displaystyle B}
に中継します。
あ
{\displaystyle A}
B
→
私
:
{
いいえ
あ
、
いいえ
B
}
け
ポ
あ
{\displaystyle B\rightarrow I:\{N_{A},N_{B}\}_{K_{PA}}}
B
{\displaystyle B}
送信します 。
いいえ
B
{\displaystyle N_{B}}
私
→
あ
:
{
いいえ
あ
、
いいえ
B
}
け
ポ
あ
{\displaystyle I\rightarrow A:\{N_{A},N_{B}\}_{K_{PA}}}
私
{\displaystyle I}
それを
あ
{\displaystyle A}
に中継します 。
あ
→
私
:
{
いいえ
B
}
け
ポ
私
{\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 は 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 による中間者攻撃の説明 。