Implementering av Diffie-Hellman Algorithm
Diffie-Hellman algoritme:
Diffie-Hellman-algoritmen brukes til å etablere en delt hemmelighet som kan brukes til hemmelig kommunikasjon mens du utveksler data over et offentlig nettverk ved å bruke den elliptiske kurven for å generere poeng og hente den hemmelige nøkkelen ved hjelp av parameterne.
- For enkelhets skyld og praktisk implementering av algoritmen vil vi kun vurdere 4 variabler en primtall P og G (en primitiv rot av P) og to private verdier a og b.
- P og G er begge offentlig tilgjengelige tall. Brukere (si Alice og Bob) velger private verdier a og b, og de genererer en nøkkel og utveksler den offentlig. Den motsatte personen mottar nøkkelen, og det genererer en hemmelig nøkkel, hvoretter de har den samme hemmelige nøkkelen å kryptere.
Trinn-for-trinn forklaring er som følger:
| Alice | Bob |
|---|---|
| Offentlige nøkler tilgjengelig = P G | Offentlige nøkler tilgjengelig = P G |
| Privat nøkkel valgt = a | Privat nøkkel valgt = b |
| Nøkkel generert = x = G^a mod P | Nøkkel generert = y = G^b mod P |
| Utveksling av genererte nøkler finner sted | |
| Nøkkel mottatt = y | nøkkel mottatt = x |
| Generert hemmelig nøkkel = k_a = y^a mod P | Generert hemmelig nøkkel = k_b = x^b mod P |
| Algebraisk kan det vises det k_a = k_b | |
| Brukere har nå en symmetrisk hemmelig nøkkel for å kryptere |
Eksempel:
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.
Implementering:
C++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 Java/* 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 : %lld n ' P ); G = 9 ; // A primitive root for P G is taken printf ( 'The value of G : %lld nn ' G ); // Alice will choose the private key a a = 4 ; // a is the chosen private key printf ( 'The private key a for Alice : %lld n ' 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 : %lld nn ' 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 : %lld n ' ka ); printf ( 'Secret Key for the Bob is : %lld n ' kb ); return 0 ; } Python// 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 raghav14C## 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 ()JavaScript// 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< 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>
ProduksjonThe 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