Cálculo da chave secreta do protocolo Diffie-Hellmann

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

[ Hits: 5.623 ]

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

Cifra de César!

Captura de Banners dos Serviços

Esse código pode ser considerado um vírus?

Cifra de Vigenère

SSH PortScan


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts