Cálculo da chave secreta do protocolo Diffie-Hellmann

Publicado por Reginaldo de Matias (última atualização em 13/01/2010)

[ Hits: 5.411 ]

Homepage: http://mundodacomputacaointegral.blogspot.com/

Download protocoloDiffieHellman.c




O presente programa escrito em C, calcula a chave secreta do protocolo Diffie-Hellmann.

Explicação:

- Alice escolhe um valor para x
- Bob escolhe um valor para y
- Alice envia a mensagem para Bob: (n,g, g^x mod n)
- Bob envia a mensagem para Alice: (g^y mod n)
- Alice calcula (g^y mod n)^x mod n = g^x*y mod n
- Bob calcula (g^x mod n)^x mod n = g^x*y mod n

Assim obtém-se a chave secreta compartilhada.

  



Esconder código-fonte

/*Este pequeno programa faz o cálculo do protocolo Diffie-Hellmann
 Alice escolhe um valor para x
 Bob escolhe um valor para y
 Alice envia a mensagem para Bob: (n,g, g^x mod n)
 Bob envia a mensagem para Alice: (g^y mod n)
 Alice calcula (g^y mod n)^x mod n = g^x*y mod n
 Bob calcula (g^x mod n)^x mod n = g^x*y mod n
Assim obtém a chave secreta compartilhada

Autor: Reginaldo de Matias
Disciplina: Segurança em Redes - UDESC

Exemplo de teste - exercício
n=59 p=14 x=2 e y=5
chave secreta=46
compilar: gcc protocoloDiffieHellman -o dh -lm
executar: ./dh
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
  int n,g,x,y, gx, gy, GX,GY,mdgx,mdgy,mdgx2,mdgy2, chave_secreta;
  printf("Protocolo Diffie-Hellmann\n\n");
  printf("Digite um valor para x:");
  scanf("%i", &x);
  printf("Digite um valor para y:");
  scanf("%i", &y);
  printf("Digite um valor para n:");
  scanf("%i", &n);
  printf("Digite um valor para g: ");
  scanf("%i", &g);
  printf("(%i,%i, %i^%i mod %i)", n, g, g,x,n);
  /*inicio do cálculo do protoloco Diffie-Hellmann*/
  gx = pow(g,x); //gx = g^x
  gy = pow(g,y); //gy = g^y
  
  mdgx = gx%n; //gx = g^x mod n
  mdgy = gy%n; //gy = g^y mod n
 
  mdgx2 = pow(mdgx,y); 
  mdgy2 = pow(mdgy,x); 

  GX = mdgx2%n; //(g^x mod n)^y mod n
  GY = mdgy2%n; //(g^y mod n)^x mod n
  
  chave_secreta=GX;
  printf("GX= %i e GY=%i\n", GX, GY);
  printf("\nPortanto a chave segreta eh: %i\n", chave_secreta);

return 0;
}


Scripts recomendados

IntensiveDoS - ferramenta de DoS para pentesting

USER ID (verificador)

Validador de CPF e CNPJ

Cifra de César!

Exploit para kernel 2.6.12-rc4


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts