Swift implementation of classic cryptographic key exchange method.
Swift implementation of classic cryptographic key exchange method.
Diffie-Hellman Key Exchange allow parties to jointly establish a secure private key without sharing it in any way (Forward secrecy) and then use it for a symmetric key cipher.
DHParameters.swift
for more info.Afterward, both parties can compute common secret key using own private key and peer’s public key. They can do it using the following formula secretKey = peerPublicKey^ownPrivateKey mod p
Underlying math:
(g^a mod p)^b mod p = g^ab mod p
(g^b mod p)^a mod p = g^ba mod p
Now both parties can communicate using symmetric cryptography using a jointly established private key.
This protocol is considered secure (check disclaimer), because it’s relatively hard for eavesdroppers to compute a common secret key knowing only public keys if p is big enough.
Don’t use it in a production environment. Generated keys are very small (Int64) thus making them easily breakable.
Use already generated RFC primes, but even them may not be strong enough.
Greg (Grzegorz) Surma
@gsurma">BLOG