ディフィ-ヘルマン鍵交換(ディフィーシェルマン)アルゴリズム原理とPHP実現版


ディフィ-ヘルマンは、双方が安全でない共通チャネル上で秘密鍵を確立することができるアルゴリズムであり、双方が後期にこの秘密鍵を利用して内容を暗号化することができる。
ディフィーハーマンアルゴリズム原理は簡単です。

上記のように、最後は数学原理で証明しやすいです(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_ディffie Hellmanの例:

<?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