ECDH アルゴリズムの概要 (CNG の例)

更新 : 2008 年 7 月

ECDH (Elliptic Curve Diffie-Hellman) キーの承諾プロトコルを使用すると、2 人のユーザーの共有秘密協定を作成できます。両ユーザーは、以前に交換した個人情報を使用することなく、セキュリティで保護されていないパブリックな媒体を介してこの操作を実行できます。共有秘密協定は、一般に、キー マテリアルの派生に使用されます。AES (Advanced Encryption Standard) アルゴリズムなどの対称アルゴリズムでは、キー マテリアルを使用してメッセージを暗号化できます。

CNG (Cryptography Next Generation) のセキュリティで保護された通信の例では、ECDH と AES の両方のアルゴリズムの CNG 実装を示します。Alice、Bob、および Mallory は、Communicator オブジェクトを作成するときに Run メソッド内で暗号化キーを作成します。

ECDH の算出

ECDH プロトコルは、p と g の 2 つのパブリックなパラメータに依存します。パラメータ p は大きな素数で、パラメータ g は p より小さい整数です。これらの 2 つのパラメータは、セキュリティで保護されていない通信回線上で交換されます。Alice と Bob は 2 つのパブリックなパラメータを受け取った後、プライベートな整数を選択します。Alice は a を選択し、Bob は b を選択します。これらの値は、秘密キーと呼ばれます。

次に、Alice と Bob はパブリックなパラメータと秘密キーを使用して、公開キーを作成します。Alice は (g^a) mod p を使用し、Bob は (g^b) mod p を使用します。キーが一致しないため、これらのキーは非対称キーです。

Alice と Bob は公開キーを交換し、これらのキーを使用して、共有秘密協定を計算します。ECDH の算出により、Alice と Bob は互いの秘密キーを知らなくても、両者が同一の共有秘密協定を計算することが保証されます。

メモ :

秘密が守られるのは a、b および g^ab = g^ba だけです。その他の値はすべてパブリックになります。

この交換を傍受したユーザーはだれでも、p、g、および両方の公開キーをコピーできます。ただし、Alice と Bob の秘密キーを把握せずに、パブリックで共有される 4 つの値から共有秘密協定を生成することは、計算上不可能です。

ECDH で暗号化されたメッセージを、ブルート フォースを使用して (考えられるすべてのキーを試行して) 復号化することは、離散対数問題と同程度の難しさがあります。ただし、ECDH アルゴリズムは対数曲線ではなく楕円曲線に依存するため、このアルゴリズムを使用すると、キーの長さが短いものと同程度のセキュリティを実現できます。

ECDH の例

次に、小さな整数を使用して、ECDH アルゴリズムを例示します。

  1. Alice と Bob は、素数 p と基本の整数 g について同意しています。

    p = 83, g = 8

  2. Alice は秘密の整数 a = 9 を選び、Bob に (g^a) mod p を送信します。

    (8^9) mod 83 = 5

  3. Bob は秘密の整数 b = 21 を選び、Alice に (g^b) mod p を送信します。

    (8^21) mod 83 = 18

  4. Alice は ( ( (g^b) mod p)^a) mod p を計算します。

    (18^9) mod 83 = 24

  5. Bob は ( ( (g^a) mod p)^b) mod p を計算します。

    (5^21) mod 83 = 24

g^(ab) = g^(ba) であるため、Alice と Bob は同じ値 (24) を算出します。この値が共有秘密協定になります。Alice と Bob はこの値を使用して、メッセージを暗号化するときに AES アルゴリズムで使用されるキー マテリアルを派生させます。

この例では、値が 24 である共有秘密協定を生成しました。この値は小さいため、生成される暗号化メッセージはブルート フォース攻撃で簡単に解読されるおそれがあります。実際のシナリオでは、p、g、a、および b にははるかに大きい値が使用され、コンピュータを使用して、対応する共有秘密協定を生成することが必要になります。

セキュリティで保護される通信の例で使用される CNG クラスは、複素数学を概念化します。これを使用すると、多数の数値の乗算を気に掛けずに、セキュリティ ソリューションを実装することに専念できます。

プロトコルの制限事項

ECDH キーの交換プロトコルは、公開キーの送信元の認証を行わないため、man-in-the-middle 攻撃は防止されません。傍受する Mallory が Alice の公開キーを傍受した場合、Mallory は自分の公開キーを代用して Bob に送信できます。Mallory は Bob の公開キーを傍受して自分の公開キーに置き換え、Alice に送信することもできます。さらに、Mallory は、Alice と Bob の間で送受信されたすべてのメッセージを簡単に復号化できます。Mallory はメッセージを変更し、独自のキーを使用して再び暗号化して、受信者に送信できます。

この問題を解決するには、Alice と Bob はメッセージを送信する前に、デジタル署名を使用して公開キーに署名します。これには、2 つの方法があります。

  • 音声通信や、信頼される通信事業者など、セキュリティで保護された媒体を使用して、両者間でデジタル署名のキーを送信します。

  • 公的な証明機関 (CA: Certification Authority) を使用して、信頼されるデジタル署名のキーを両者に提供します。

いずれの場合も、公開キー送信者の ID の確認には外部の認証方式を使用する必要があります。CNG 例では、キーの送信者が認証されていない場合に起こり得ることについて説明します。特に、セキュリティ上の弱点が利用される可能性のあることについて説明します。

対称キーと非対称キー

ECDH などの非対称システムはきわめて低速です。そのため、これらのシステムは大規模メッセージの暗号化には使用されません。AES などの対称システムは、より高速であることが多いため、非対称システムの代わりに使用されます。

一般的な暗号化ソリューションは、非対称システムを使用して、対称的な共有秘密協定を派生させます。その後は、共有秘密協定を使用して、対称アルゴリズムがメッセージの暗号化に使用するキー マテリアルを派生させます。

CNG のセキュリティで保護された通信の例は、この動作を次のようにモデル化します。

  • 非対称アルゴリズム、ECDH アルゴリズムの CNG 実装 (ECDiffieHellmanCng クラス) を使用して、対称の暗号化キー (共有秘密協定) を派生させます。

  • このキーは CNG の ECDiffieHellmanCng.DeriveKeyMaterial メソッドによって使用され、キー マテリアルの派生が行われます。対称 AES アルゴリズムの CNG 実装 (Aes クラス) はこのキー マテリアルを使用して、メッセージを暗号化します。

参照

概念

CNG (Cryptography Next Generation) のセキュリティで保護された通信の例

暗号化の概要

履歴の変更

日付

履歴

理由

2008 年 7 月

トピックを追加

情報の拡充