Geração de chaves Diffie-Hellman

Publicado por Perfil removido (última atualização em 24/09/2009)

[ Hits: 4.810 ]

Download diffiehellman.php




Este script é um exemplo em PHP que ilustra o artigo do Elgio - http://www.vivaolinux.com.br/artigo/Fundamentos-da-criptografia-assimetrica/

Ele está comentado, mas recomendo ler o artigo pois está bem didático.

A parte da geração de números primos eu ainda não implementei, usei os números que ele citou no artigo dele.

  



Esconder código-fonte

<?php
//
// para entender esse script leia o artigo sobre Fundamentos da Criptografia aqui no VOL
// http://www.vivaolinux.com.br/artigo/Fundamentos-da-criptografia-assimetrica/
//
// Desenvolvido por: Daniel Gianni
//

<?php

echo "<pre>";

$p = 131;  // 1o número primo
$e = 5;     // 2o número primo

$xf =31;   // número secreto (chave) do usuário F
$xc = 17; // número secreto (chave) do usuário C

printf( "p=%d   e=%d   xf=%d    xc=%d \n\n" , $p, $e, $xf, $xc ); 

$temp = bcpow($e,$xf); // e^xf
$yf = bcmod( $temp , $p ); // (e^xf) mod p 

// aqui temos o número (chave pública) a ser enviada ao usuário C pelo usuário F
printf( "e^xf => %d ^ %d = %d mod %d = %d \n\n" , $e, $xf, $temp, $p, $yf );

$temp = bcpow($e,$xc); // e^xc
$yc = bcmod( $temp , $p ); // (e^xc) mod p

// aqui temos o número (chave pública) a ser enviada ao usuário F pelo usuário C
printf( "e^xc => %d ^ %d = %d mod %d = %d \n\n" , $e, $xc, $temp, $p, $yc );

// aqui está a decodificação da chave para o usuário F e a decodificação da chave para o usuário C
printf( "kf = %d    kc = %d " , bcmod(bcpow($yc,$xf) , $p) , bcmod(bcpow($yf,$xc) , $p) );

echo "</pre>";
?>

Scripts recomendados

KWEB.SYS - Simples script de login em PHP sem uso de bancos de dados (MySQL)

Página protegida v2004.1

Anti Intruso

Página protegida

Gerador simples de hash MD5 em PHP


  

Comentários
[1] Comentário enviado por removido em 28/06/2012 - 00:18h

$temp = bcpow($e,$xc); // e^xc
$yc = bcmod( $temp , $p ); // (e^xc) mod p

Essa potenciação poderia funcionar melhor se fosse tirado o módulo a cada operação.
Faria o valor de uma multiplicação nunca exceder e^2.
Inclusive há um método de multiplicação em módulo baseado em sistema binário que acelera em muito esse cálculo.


Contribuir com comentário