디 피 헤 르 만 키 교환(Diffiechellman)알고리즘 원리 와 PHP 구현 판
디 피 헤 르 만 알고리즘 원 리 는 간단 하 다.
위의 원리 와 같이 마지막 으로 수학 원 리 를 통 해(g^b%p)^a%p=(g^a%p)^b%p 를 증명 하기 쉬 우 므 로 같은 키 를 얻 을 수 있 습 니 다.
위 에 a,b 와 마지막 으로 나 온 공공 키 는 비밀 이 고 다른 것 은 모두 공공 채널 에서 전달 할 수 있 습 니 다.실제 운용 중 p 가 매우 크 고 g 는 보통 2 또는 5 를 취한 다.그러면 p,g,g^a%p 에서 a(이산 수학 문제)를 계산 하 는 것 은 거의 불가능 합 니 다.
많은 언어 가 이 알고리즘 을 실 현 했 습 니 다.PHP package 에서 CryptDiffie 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