Diffie-Hellmanův algoritmus slouží k ustanovení společného symetrického klíče pro dva a více uživatelů. Klíč nelze odposlechnout. Jeho bezpečnost je postavená na principu na problému diskrétního logaritmu.
Na počátku známe modul m, prvek a a hodnotu |ax|m. Proto hledáme x. Aby x existovalo, tak musí diskrétní logaritmus existovat - jeho existenci taky neumím efektivně výpočetně zjistit.
Diffie–Hellman pro 2 uživatele
- m je velké prvočíslo, a je celé číslo, které je generátorem násobící grupy mod m.
- Alice a Bob se dohodnou na a , m
- Alice si zvolí ka tak, že gcd(ka,m-1)=1.
- Vypočte ya = |aka|m a pošle to Bobovi
- Bob si zvolí kb tak, že gcd(kb,m-1)=1.
- Vypočte yb |akn|m a pošle to Alici
- Alice spočítá K=|ybka|m.
- Bob spočítá K=|yakb|m.
- Oba spočetli stejné číslo, protože
K=|ybka|m =
||akb|mka|m = ||aka · kb|m = ||aka|mkb|m = |yakb|m - Bezpečnost: Útočník může znát :[a,m,ya,yb], ale je pro něj výpočetně nemožné zjistit ka nebo kb.
Diffie–Hellman pro více uživatelů
- Slouží ke zřízení společného klíče pro 2+ uživatelů se sdíleným médiem
- Klíč nelze odposlechnout (viz dále)
- Algoritmus:
- m je velké prvočíslo a je celé číslo. gcd(m,a)=1
- čísla m, a se rozešlou se všem subjektům
- každý subjekt si zvolí ki tak, že gcd(ki,m-1)=1.
- každý subjekt vypočte yi=|aki|m:
- odešle po sdíleném kanálu všem ostatním stem:[a,m,yi]
- příjemci spočítají zj=|yikj|m.
- rozešlou a takhle se to točí dokud...
- ...není spočteno K=|ylkn|m, kde n je počet subjektů.