logo

Implementacija Diffie-Hellmanovog algoritma

Diffie-Hellmanov algoritam:

Diffie-Hellmanov algoritam koristi se za uspostavljanje zajedničke tajne koja se može koristiti za tajnu komunikaciju tijekom razmjene podataka putem javne mreže pomoću eliptične krivulje za generiranje točaka i dobivanje tajnog ključa pomoću parametara.  

  • Radi jednostavnosti i praktične primjene algoritma razmotrit ćemo samo 4 varijable, jedan prosti P i G (primitivni korijen od P) i dvije privatne vrijednosti a i b.
  • P i G su javno dostupni brojevi. Korisnici (recimo Alice i Bob) odabiru privatne vrijednosti a i b te generiraju ključ i javno ga razmjenjuju. Suprotna osoba prima ključ i ona generira tajni ključ nakon čega ima isti tajni ključ za šifriranje.


Objašnjenje korak po korak je sljedeće:  



AliceBob
Dostupni javni ključevi = P GDostupni javni ključevi = P G
Odabrani privatni ključ = aOdabran privatni ključ = b

Ključ generiran = 

prioritetni red

x = G^a mod P

Ključ generiran = 



y = G^b mod P

Dolazi do razmjene generiranih ključeva
Ključ primljen = yključ primljen = x

Generirani tajni ključ = 

k_a = y^a mod P



Generirani tajni ključ = 

značajke jave 8

k_b = x^b mod P

Algebarski se može pokazati da 

k_a = k_b

java broj u niz
Korisnici sada imaju simetrični tajni ključ za šifriranje

Primjer:  

Step 1: Alice and Bob get public numbers P = 23 G = 9  
Step 2: Alice selected a private key a = 4 and
Bob selected a private key b = 3
Step 3: Alice and Bob compute public values
Alice: x =(9^4 mod 23) = (6561 mod 23) = 6
Bob: y = (9^3 mod 23) = (729 mod 23) = 16
Step 4: Alice and Bob exchange public numbers
Step 5: Alice receives public key y =16 and
Bob receives public key x = 6
Step 6: Alice and Bob compute symmetric keys
Alice: ka = y^a mod p = 65536 mod 23 = 9
Bob: kb = x^b mod p = 216 mod 23 = 9
Step 7: 9 is the shared secret.

Implementacija:   

C++
/* This program calculates the Key for two persons using the Diffie-Hellman Key exchange algorithm using C++ */ #include  #include    using namespace std; // Power function to return value of a ^ b mod P long long int power(long long int a long long int b  long long int P) {  if (b == 1)  return a;  else  return (((long long int)pow(a b)) % P); } // Driver program int main() {  long long int P G x a y b ka kb;  // Both the persons will be agreed upon the  // public keys G and P  P = 23; // A prime number P is taken  cout << 'The value of P : ' << P << endl;  G = 9; // A primitive root for P G is taken  cout << 'The value of G : ' << G << endl;  // Alice will choose the private key a  a = 4; // a is the chosen private key  cout << 'The private key a for Alice : ' << a << endl;  x = power(G a P); // gets the generated key  // Bob will choose the private key b  b = 3; // b is the chosen private key  cout << 'The private key b for Bob : ' << b << endl;  y = power(G b P); // gets the generated key  // Generating the secret key after the exchange  // of keys  ka = power(y a P); // Secret key for Alice  kb = power(x b P); // Secret key for Bob  cout << 'Secret key for the Alice is : ' << ka << endl;  cout << 'Secret key for the Bob is : ' << kb << endl;  return 0; } // This code is contributed by Pranay Arora 
C
/* This program calculates the Key for two persons using the Diffie-Hellman Key exchange algorithm */ #include  #include  // Power function to return value of a ^ b mod P long long int power(long long int a long long int b  long long int P) {  if (b == 1)  return a;  else  return (((long long int)pow(a b)) % P); } // Driver program int main() {  long long int P G x a y b ka kb;  // Both the persons will be agreed upon the  // public keys G and P  P = 23; // A prime number P is taken  printf('The value of P : %lldn' P);  G = 9; // A primitive root for P G is taken  printf('The value of G : %lldnn' G);  // Alice will choose the private key a  a = 4; // a is the chosen private key  printf('The private key a for Alice : %lldn' a);  x = power(G a P); // gets the generated key  // Bob will choose the private key b  b = 3; // b is the chosen private key  printf('The private key b for Bob : %lldnn' b);  y = power(G b P); // gets the generated key  // Generating the secret key after the exchange  // of keys  ka = power(y a P); // Secret key for Alice  kb = power(x b P); // Secret key for Bob  printf('Secret key for the Alice is : %lldn' ka);  printf('Secret Key for the Bob is : %lldn' kb);  return 0; } 
Java
// This program calculates the Key for two persons // using the Diffie-Hellman Key exchange algorithm class GFG {  // Power function to return value of a ^ b mod P  private static long power(long a long b long p)  {  if (b == 1)  return a;  else  return (((long)Math.pow(a b)) % p);  }  // Driver code  public static void main(String[] args)  {  long P G x a y b ka kb;  // Both the persons will be agreed upon the  // public keys G and P  // A prime number P is taken  P = 23;  System.out.println('The value of P:' + P);  // A primitive root for P G is taken  G = 9;  System.out.println('The value of G:' + G);  // Alice will choose the private key a  // a is the chosen private key  a = 4;  System.out.println('The private key a for Alice:'  + a);  // Gets the generated key  x = power(G a P);  // Bob will choose the private key b  // b is the chosen private key  b = 3;  System.out.println('The private key b for Bob:'  + b);  // Gets the generated key  y = power(G b P);  // Generating the secret key after the exchange  // of keys  ka = power(y a P); // Secret key for Alice  kb = power(x b P); // Secret key for Bob  System.out.println('Secret key for the Alice is:'  + ka);  System.out.println('Secret key for the Bob is:'  + kb);  } } // This code is contributed by raghav14 
Python
# Diffie-Hellman Code # Power function to return value of a^b mod P def power(a b p): if b == 1: return a else: return pow(a b) % p # Main function def main(): # Both persons agree upon the public keys G and P # A prime number P is taken P = 23 print('The value of P:' P) # A primitive root for P G is taken G = 9 print('The value of G:' G) # Alice chooses the private key a # a is the chosen private key a = 4 print('The private key a for Alice:' a) # Gets the generated key x = power(G a P) # Bob chooses the private key b # b is the chosen private key b = 3 print('The private key b for Bob:' b) # Gets the generated key y = power(G b P) # Generating the secret key after the exchange of keys ka = power(y a P) # Secret key for Alice kb = power(x b P) # Secret key for Bob print('Secret key for Alice is:' ka) print('Secret key for Bob is:' kb) if __name__ == '__main__': main() 
C#
// C# implementation to calculate the Key for two persons // using the Diffie-Hellman Key exchange algorithm using System; class GFG {  // Power function to return value of a ^ b mod P  private static long power(long a long b long P)  {  if (b == 1)  return a;  else  return (((long)Math.Pow(a b)) % P);  }  public static void Main()  {  long P G x a y b ka kb;  // Both the persons will be agreed upon the  // public keys G and P  P = 23; // A prime number P is taken  Console.WriteLine('The value of P:' + P);  G = 9; // A primitive root for P G is taken  Console.WriteLine('The value of G:' + G);  // Alice will choose the private key a  a = 4; // a is the chosen private key  Console.WriteLine('nThe private key a for Alice:'  + a);  x = power(G a P); // gets the generated key  // Bob will choose the private key b  b = 3; // b is the chosen private key  Console.WriteLine('The private key b for Bob:' + b);  y = power(G b P); // gets the generated key  // Generating the secret key after the exchange  // of keys  ka = power(y a P); // Secret key for Alice  kb = power(x b P); // Secret key for Bob  Console.WriteLine('nSecret key for the Alice is:'  + ka);  Console.WriteLine('Secret key for the Alice is:'  + kb);  } } // This code is contributed by Pranay Arora 
JavaScript
<script> // This program calculates the Key for two persons // using the Diffie-Hellman Key exchange algorithm  // Power function to return value of a ^ b mod P function power(a b p)  {  if (b == 1)  return a;  else  return((Math.pow(a b)) % p); } // Driver code var P G x a y b ka kb; // Both the persons will be agreed upon the // public keys G and P // A prime number P is taken P = 23; document.write('The value of P:' + P + '  
'
); // A primitive root for P G is taken G = 9; document.write('The value of G:' + G + '
'
); // Alice will choose the private key a // a is the chosen private key a = 4; document.write('The private key a for Alice:' + a + '
'
); // Gets the generated key x = power(G a P); // Bob will choose the private key b // b is the chosen private key b = 3; document.write('The private key b for Bob:' + b + '
'
); // Gets the generated key y = power(G b P); // Generating the secret key after the exchange // of keys ka = power(y a P); // Secret key for Alice kb = power(x b P); // Secret key for Bob document.write('Secret key for the Alice is:' + ka + '
'
); document.write('Secret key for the Bob is:' + kb + '
'
); // This code is contributed by Ankita saini </script>

Izlaz
The value of P : 23 The value of G : 9 The private key a for Alice : 4 The private key b for Bob : 3 Secret key for the Alice is : 9 Secret key for the Bob is : 9