PHP で Diffie-Hellman 鍵交換 (Diffie-Hellman) アルゴリズムを実装するにはどうすればよいですか?この記事では主に、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 を例に挙げます:
<?php include 'DiffieHellman.php'; /* * Alice: prime = 563 * generator = 5 * private key = 9 * Bob: prime = 563 * generator = 5 * private key = 14 */ $p = 563; $g = 5; $alice = new Crypt_DiffieHellman($p, $g, 9); $alice_pubKey = $alice->generateKeys()->getPublicKey(); $bob = new 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
関連する推奨事項:
php array_chunk() を使用せずに配列を分割するアルゴリズム
セッションデッドロックを解決するPHPメソッド_PHPチュートリアル
以上がPHP は Diffie-Hellman 鍵交換 (Diffie-Hellman) アルゴリズムを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。