この記事では主に Diffie-Hellman 鍵交換 (Diffie-Hellman) アルゴリズム原理と PHP 実装バージョンを紹介します。必要な友人は参照してください。
Diffie-Hellman は、安全でないパブリック チャネル上で双方が秘密鍵を確立できるようにするアルゴリズムで、後でこの秘密鍵を使用してコンテンツ (RC4 など) を暗号化できます。
Diffie–Hellman アルゴリズムの原理は非常にシンプルです:
上記の原理に基づいて、(g^b%p)^a%p = (g^a%p)^b%p であるため、同じキーを取得することは数学的原理を通じて簡単に証明できます。
秘密である a、b、および最終公開鍵を除いて、その他は公開チャネルで送信できます。実際のアプリケーションでは、p は非常に大きく (300 ビット以上)、g は通常 2 または 5 になります。その場合、p、g、g^a%p から a を計算することはほとんど不可能です (離散数学の問題)。
多くの言語がこのアルゴリズムを実装しています。例として PHP パッケージの Crypt_DiffieHellman を取り上げます。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
「DiffieHellman.php」をインクルードします;
/* * アリス: 素数 = 563 * ジェネレーター = 5 * 秘密鍵 = 9 * ボブ: 素数 = 563 * ジェネレーター = 5 * 秘密鍵 = 14 */
$p = 563; $g = 5; $alice = 新しい Crypt_DiffieHellman($p, $g, 9); $alice_pubKey = $alice->generateKeys()->getPublicKey();
$bob = 新しい Crypt_DiffieHellman($p, $g, 14); $bob_pubKey = $bob->generateKeys()->getPublicKey();
$alice_computeKey = $alice->computeSecretKey($bob_pubKey)->getSharedSecretKey(); $bob_computeKey = $bob->computeSecretKey($alice_pubKey)->getSharedSecretKey();
echo "{$alice_pubKey}-{$bob_pubKey}-{$alice_computeKey}-{$bob_computeKey}" //78-534-117-117
|