# Diskreter Logarithmus

In der Gruppentheorie und Zahlentheorie ist der diskrete Logarithmus das Analogon zum gewöhnlichen Logarithmus aus der Analysis; diskret kann in diesem Zusammenhang etwa wie ganzzahlig verstanden werden. Die diskrete Exponentiation in einer zyklischen Gruppe ist die Umkehrfunktion des diskreten Logarithmus. Als Vergleich: Die natürliche Exponentialfunktion auf den reellen Zahlen ist die Umkehrfunktion des natürlichen Logarithmus.
Ein wichtiger Anwendungsfall tritt beim Rechnen modulo p auf. Der diskrete Logarithmus von $m$ zur Basis $a$ ist hier der kleinste Exponent $x$ der Gleichung a$^x$≡mmodp{\textstyle a^{x}\equiv m\mod p} bei gegebenen natürlichen Zahlen $m$, $a$ und der Primzahl $p$. Zum Beispiel ist beim Rechnen modulo 11{\textstyle 11} der diskrete Logarithmus von $5$ zur Basis $2$ gleich 4{\textstyle 4}, da 2$^4$=16≡5mod11{\textstyle 2^{4}=16\equiv 5\mod 11} ist.
Da für den diskreten Logarithmus meist nur ineffiziente (im Sinne der Komplexitätstheorie) Algorithmen bekannt sind, während sich die Umkehrfunktion, die diskrete Exponentialfunktion, leicht (im Sinne der Komplexitätstheorie) berechnen lässt, eignet sich die diskrete Exponentialfunktion als Einwegfunktion in der Kryptografie. Anwendungsbeispiele sind u. a.
* Diffie-Hellman-Schlüsselaustausch
* Elgamal-Signaturverfahren
* Schnorr-Signaturverfahren
* DSA-Verfahren
* Elliptische-Kurven-Kryptosystem

## Theorie
### Allgemeine Definition

Es sei (G, ∘){\textstyle (G, \circ )} eine endliche zyklische Gruppe mit Erzeuger g{\textstyle g} der Ordnung n{\textstyle n}. Mit der Restklassengruppe Z/nZ{\textstyle \mathbb {Z} /n\mathbb {Z} } ist die diskrete Exponentiation
    exp$_g$:Z/nZ→Gx↦g$^x${\textstyle {\begin{aligned}\exp _{g}\colon \mathbb {Z} /n\mathbb {Z} &\to G\\x&\mapsto g^{x}\end{aligned}}}
ein Gruppenisomorphismus. Die zugehörige Umkehrfunktion
    log$_g$:G→Z/nZx↦log$_g$⁡x{\textstyle {\begin{aligned}\log _{g}\colon G&\to \mathbb {Z} /n\mathbb {Z} \\x&\mapsto \log _{g}x\end{aligned}}}
heißt diskreter Logarithmus zur Basis g{\textstyle g}.
Die bekannte Basiswechselformel bleibt gültig: Ist $h$ ein weiterer Erzeuger, dann ist
    log$_h$⁡x=log$_h$⁡g⋅log$_g$⁡xmodn{\textstyle \log _{h}x=\log _{h}g\cdot \log _{g}x\mod n}.
Weiterhin gilt die folgende Beziehung für den diskreten Logarithmus, die der Funktionalgleichung des Logarithmus entspricht:
    log$_g$⁡x+log$_g$⁡y=log$_g$⁡(x∘y)modn{\textstyle \log _{g}x+\log _{g}y=\log _{g}(x\circ y)\mod n}.Weiterhin gilt die folgende Beziehung für den diskreten Logarithmus, die der Funktionalgleichung des Logarithmus entspricht:
    log$_g$⁡x+log$_g$⁡y=log$_g$⁡(x∘y)modn{\textstyle \log _{g}x+\log _{g}y=\log _{g}(x\circ y)\mod n}.

### Prime Restklassengruppe

Von praktischem Nutzen in der Kryptografie ist der Spezialfall, wenn die zyklische Gruppe eine prime Restklassengruppe ist, insbesondere modulo Primzahlen.
Sei p{\textstyle p} eine Primzahl und $g$ eine Primitivwurzel modulo p{\textstyle p}, also ein Erzeuger der primen Restklassengruppe (Z/pZ)$^×${\textstyle (\mathbb {Z} /p\mathbb {Z} )^{\times }}. Der diskrete Logarithmus (auch Index genannt) einer zu p{\textstyle p} teilerfremden Zahl $x$ zur Basis $g$ ist definiert als die eindeutig bestimmte Zahl a∈{1, 2, …, p−1}{\textstyle a\in \{1, 2, \dotsc , p-1\}} mit:
    g$^a$≡xmodp{\textstyle g^{a}\equiv x\mod {p}}
und wird mit a=log$_g$⁡x{\textstyle a=\log _{g}x} bzw. a=ind$_g$⁡x{\textstyle a=\operatorname {ind} _{g}x} bezeichnet (zur Schreibweise siehe Kongruenz (Zahlentheorie) und modulo).

## Algorithmen zur Berechnung des diskreten Logarithmus

Es sind bisher keine schnellen Algorithmen zur Berechnung des diskreten Logarithmus bekannt. Deren Laufzeit verhielte sich polynomial zur Länge der Eingabe. Es gibt aber Algorithmen, die die Lösung gezielter finden als bloßes Ausprobieren. Aufgrund des angesprochenen Laufzeitverhaltens und der in der Kryptografie üblichen Größenordnungen (mehrere hundert Dezimalstellen in Numerus und Basis) spielen sie praktisch aber keine Rolle. Zu den bekanntesten Algorithmen zählen:
* Babystep-Giantstep-Algorithmus
* Pohlig-Hellman-Algorithmus
* Index-Calculus-Algorithmus
* Pollard-Rho-Methode
* Zahlkörpersieb

## Beispiel

Als Beispiel diene die Primzahl p=11{\textstyle p=11} und die zugehörige prime Restklassengruppe G=(Z/11Z)$^×$={1, 2, …, 10}{\textstyle G=(\mathbb {Z} /11\mathbb {Z} )^{\times }=\{1, 2, \dotsc , 10\}}. Zur Primitivwurzel g=2{\textstyle g=2} wird nun die Wertetabelle der diskreten Exponentiation bestimmt.
    2$^1$=2≡2mod112$^2$=4≡4mod112$^3$=8≡8mod112$^4$=16≡5mod112$^5$=32≡10mod112$^6$=64≡9mod112$^7$=128≡7mod112$^8$=256≡3mod112$^9$=512≡6mod112$^{10}$=1024≡1mod11{\textstyle {\begin{array}{lcrlrl}2^{1}&=&2&\equiv &2&\mod {11}\\2^{2}&=&4&\equiv &4&\mod {11}\\2^{3}&=&8&\equiv &8&\mod {11}\\2^{4}&=&16&\equiv &5&\mod {11}\\2^{5}&=&32&\equiv &10&\mod {11}\\2^{6}&=&64&\equiv &9&\mod {11}\\2^{7}&=&128&\equiv &7&\mod {11}\\2^{8}&=&256&\equiv &3&\mod {11}\\2^{9}&=&512&\equiv &6&\mod {11}\\2^{10}&=&1024&\equiv &1&\mod {11}\end{array}}}
| a{\textstyle a} | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 2$^a$mod11{\textstyle 2^{a}\mod 11} | 2 | 4 | 8 | 5 | 10 | 9 | 7 | 3 | 6 | 1 |
Dass es sich bei $g$ tatsächlich um eine Primitivwurzel modulo 11 handelt, ist an den paarweise verschiedenen diskreten Potenzen erkennbar. Mit anderen Worten, die gesamte prime Restklassengruppe kann mithilfe der diskreten Potenzen von $g$ erzeugt werden. Durch Vertauschen der Zeilen und Sortieren erhält man die Wertetabelle des diskreten Logarithmus.
| x{\textstyle x} | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| log$_2$⁡x{\textstyle \log _{2}x} | 10 | 1 | 8 | 2 | 4 | 9 | 7 | 3 | 6 | 5 |