written 2.7 years ago by
binitamayekar
★ 6.6k
|
•
modified 2.7 years ago
|
Diffie Hellman Key Exchange Algorithm
Step 1 -
- Both parties say Alice and Bob initially agreed on the two values 'P' and 'G'.
- Where P is a prime number and G is the generator or primitive root of a prime number.
- In that value of P must be greater than G.(P > G)
Step 2 -
- Both parties decided their private key values individually saying here 'PA' and 'PB' for Alice and Bob respectively.
Step 3 -
- Based on their private key values both Alice and Bob calculate their respective public key values 'pa' and 'pb' at their side and exchange them with each other.
$$ pa = G^{PA} Mod\ P $$
$$ pb = G^{PB} Mod\ P $$
Step 4 -
- After receiving Bob's public key 'pb' Alice calculated Secret Key called 'SA' using their private key 'PA'.
$$ SA = pb^{PA} Mod\ P $$
- After receiving Alice's public key 'pa' Bob calculated Secret Key called 'SB' using their private key 'PB'.
$$ SB = pa^{PB} Mod\ P $$
- Finally, both the parties Alice and Bob obtain the same value of the secret key.
Solved Example -
Step 1 -
- Alice & Bob both agreed on the values of P = 7 and G = 3
Step 2 -
- Alice & Bob decides their respective private key values PA = 2 and PB = 5 separately.
Step 3 -
- Alice & Bob calculates their public key values at their sides as follows:
$$ pa = G^{PA} Mod\ P = 3^2 Mod\ 7 = 2 $$
$$ pb = G^{PB} Mod\ P = 3^5 Mod\ 7 = 5 $$
- After calculating Alice & Bob exchange their public key values with each other.
Step 4 -
- After receiving Bob's public key 'pb' Alice calculated Secret Key called 'SA' using their private key 'PA'.
$$ SA = pb^{PA} Mod\ P = 5^2 Mod\ 7 = 4 $$
- After receiving Alice's public key 'pa' Bob calculated Secret Key called 'SB' using their private key 'PB'.
$$ SB = pa^{PB} Mod\ P = 2^5 Mod\ 7 = 4 $$
- Both the parties get the same value for Secret Key, that is 4.
Java Program for Diffie Hellman
- The below java program takes only two inputs from the user for Modulus Prime 'P' and Primitive Root or Generator value 'G'.
- Private key values for Alice and Bob were computed randomly using the Random Class method.
- Then computed Public key and Secret key values using the Math.pow() function with modulo (%) operator.
- Finally, the program shows the output that contains the following things:
- Randomly computed Private Key Values (PA, PB) for both Alice and Bob.
- Computed Public Key Values (pa, pb) for both Alice and Bob.
- Computed Secret Key Values (SA, SB) from both Alice and Bob.
import java.util.*;
import java.lang.*;
class DiffieHellman
{
public static void main(String[] args)
{
int P, G, PA, PB, pa, pb, SA, SB;
Scanner sc = new Scanner(System.in);
Random random = new Random();
System.out.println("Initial Agreed values for Modulus Prime P and Generator Value G from Alice and Bob");
System.out.println("\nEnter the value for Modulus Prime P = ");
P = sc.nextInt();
System.out.println("Enter the value for Generator Value G = ");
G = sc.nextInt();
if (P > G)
{
PA = 1 + random.nextInt(9);
System.out.println("\nAlice randomly decides its Private Key value PA = " + PA);
PB = 1 + random.nextInt(9);
System.out.println("Bob randomly decides its Private Key value PB = " + PB);
pa = (int)Math.pow(G,PA)%P;
System.out.println("\nAlice computed their public key value pa = " + pa);
pb = (int)Math.pow(G,PB)%P;
System.out.println("Bob computed their public key value pb = " + pb);
System.out.println("\nAlice and Bob EXCHANGED their computed public key values with each other");
SA = (int)Math.pow(pb,PA)%P;
SB = (int)Math.pow(pa,PB)%P;
System.out.println("\nSecret key value SA computed by Alice = " + SA);
System.out.println("Secret key value SB computed by Bob = " + SB);
}
else
{
System.out.println("\nERROR !!! G > P");
}
}
}
Output for the above Java Program for the given Test Cases:
a] P = 7, G = 17
b] P = 17, G = 5
c] P = 5, G = 3