DiffieHellman Algorithm in Java
DiffieHellman algorithm is one of the most important algorithms used for establishing a shared secret. At the time of exchanging data over a public network, we can use the shared secret for secret communication. We use an elliptic curve for generating points and getting a secret key using the parameters.
 We will take four variables, i.e., P (prime), G (the primitive root of P), and a and b (private values).
 The variables P and G both are publicly available. The sender selects a private value, either a or b, for generating a key to exchange publicly. The receiver receives the key, and that generates a secret key, after which the sender and receiver both have the same secret key to encrypt.
Let's understand the process step by step for user1 (sender) and user2 (receiver):
Steps 
User1 
User2 
1. 
P, G => available public keys. 
P, G => available public keys. 
2. 
a is selected as a private key. 
b is selected as a private key. 
3. 
Eq. to generate key:
x=G^{a} modP 
Eq. to generate key:
y=G^{b} modP 
4. 
After exchanging keys, user1 receives key y. 
After exchanging keys, user2 receives key x. 
5. 
User1 generates a secret key by using the received key y:
k_{a}=y^{a} modP 
User2 generates a secret key by using the received key x:
k_{b}=x^{b} modP 
Algebraically, 5^{th} step can be shown as follows:
It means that both the users have the symmetric secret key to encrypt.
Example:
 User1 and User2 get public keys P = 33 and G = 8.
 User1 selects a as a private key, i.e., 3, and User2 selects b as a private key, i.e., 2.
 User1 calculate the public value:
x=(8^{3} mod 33)=512mod33=17
 User2 calculate the public value:
y=(8^{2} mod33)=64mod33= 31
 User1 and User2 exchange public keys, i.e., 17 and 31.
 User1 receives public key y = 31 and User2 receives public key x = 17.
 User1 and User2 calculate symmetric keys:
User1: k_{a}=y_{a} modP=31_{3} mod33=29791mod33=25
User2:k_{b}=x_{b} modP=17_{2} mod33=289mod33=25
 25 is the shared secret.
Now, let's implement the Java code for the DiffieHellman algorithm:
DiffieHellmanAlgorithmExample.java
Output:
