Schnorr-Identifikation
# Schnorr-Identifikation

Die Schnorr-Identifikation ist ein 1989/91 von Claus-Peter Schnorr entworfenes kryptographisches Identifikations-Schema, das auf der Schwierigkeit beruht, den diskreten Logarithmus zu berechnen. Aus der Schnorr-Identifikation leitet sich die Schnorr-Signatur ab. Diese digitale Signatur erfordert eine kryptographische Hashfunktion, eine mehrstufige Interaktion wie bei der Fiat-Shamir-Identifikation ist dagegen nicht erforderlich. Schnorr-Identifikation und Schnorr-Signatur wurden patentiert und exklusiv an RSA sowie nicht-exklusiv an Siemens lizenziert; das Patent ist am 23. Februar 2010 abgelaufen.

## Parameter

### Systemweite Parameter

Alle Benutzer können diese Parameter gemeinsam nutzen:

* Eine Gruppe $G$ primer Ordnung $q=|G|$. Diese ist zyklisch, $g$ sei ein Generator.

Schnorr schlägt vor, eine Untergruppe $G$ von $Z_{p}^{*}$ für eine Primzahl $p$ zu wählen. Er argumentiert, dass Schlüssel- und Signaturlängen sich auf $|G|$ beziehen, das Sicherheitsniveau sich hingegen am größeren $|Z_{p}^{*}|$ orientiert.

### Privater Schlüssel

Der nur dem Prover P bekannte private Schlüssel besteht aus einer zufällig gewählten Zahl:

* $x$ mit $0<x<q$

### Öffentlicher Schlüssel

Der öffentliche Schlüssel ist das $x$ entsprechende Gruppenelement $y$:

* $y=g^{x}$

## Drei-Schritt-Protokoll

Der Prover P identifiziert sich gegenüber dem Verifier V durch ein Protokoll bestehend aus 3 Schritten:

* Hinterlegung (Commitment): P wählt $k$ zufällig mit $0<k<q$ und sendet $r:=g^{k}\mod q$ an V.
* Frage (Challenge): V wählt $e$ zufällig mit $0<e<q$ und sendet $e$ an P.
* Antwort (Response): P sendet $s:=(k+xe)\mod q$ an V.

V akzeptiert die Antwort genau dann, wenn $g^{s}=ry^{e}$

## Sicherheitsdiskussion (informell)

Die Sicherheit der Schnorr-Identifikation ist auf die Komplexität des diskreten Logarithmus beweisbar zu reduzieren, d. h. wer das Schema bricht, kann auch effizient den diskreten Logarithmus berechnen. Von diesem Problem nimmt man allerdings nach Jahrzehnten intensiver Forschung an, dass es effizient nicht zu lösen ist. Diese beweisbare Reduktion auf bekannte, als schwierige eingestufte Probleme ist typisch für Public-Key-Verfahren.

Angenommen, es gäbe einen erfolgreichen Betrüger – einen Betrüger also, der also aus dem öffentlichen Schlüssel effizient $y=g^{x}$ den geheimen Schlüssel $x$ bestimmen kann –, so müsste dieser Betrüger dazu in der Lage sein, effizient den diskreten Logarithmus $x$ von $y$ zu berechnen – im Widerspruch zur Annahme, der diskrete Logarithmus sei schwierig.

* Simuliere den Algorithmus zur Identifikation, speichere den Zustand vor dem Senden der Frage $e_{1}$ an den Betrüger.
* Wiederhole die Simulation an gespeicherten Zustand, wähle ein zufälliges $e_{2}$ als Frage (mit großer Wahrscheinlichkeit $1/q$ ist dies ungleich $e_{1}$).
* Seien $s_{1}$ und $s_{2}$ die beiden (verschiedenen) Antworten zum gleichen Zufallswert $k$ bzw. $r$
* Es gilt $s_{1}-s_{2}=(k+xe_{1})-(k+xe_{2})=x(e_{1}-e_{2}){\bmod {q}}$, also $x=(s_{1}-s_{2})/(e_{1}-e_{2}){\bmod {q}}$. Die Division durch $e_{1}-e_{2}$ ist möglich, da die Differenz modulo q ungleich 0 ist da $q$ prim ist, auch ein Inverses modulo q existiert.
