Das GGH-Kryptosystem, benannt nach seinen Entdeckern Oded Goldreich,
Shafi Goldwasser und Shai Halevi, wurde 1997 vorgestellt und basiert auf
der vermuteten Schwierigkeit des Closest Vector Problems. Obwohl das
GGH-Kryptosystem heutzutage nicht mehr als sicher gilt, dient es
aufgrund seiner einfachen Verständlichkeit als solider Ausgangspunkt, um
sich tiefer mit der gitterbasierten Kryptografie zu beschäftigen. Viele
seiner Elemente finden auch in aktuellen gitterbasierten Verfahren
Anwendung. Im Allgemeinen funktioniert das GGH-Kryptosystem wie folgt:
- Privater Schlüssel
Als privaten Schlüssel verwendet man eine wohlgeformte Basis \(B \in
\mathbb{R}^{n\times n}\) eines Gitters. Ein typischer Parameter ist
beispielsweise \(n = 300\). Unter einer wohlgeformten Basis versteht man
eine Basis, deren Spaltenvektoren möglichst kurz sind und nahezu
orthogonal zueinander stehen. Durch eine solche Basis kann man bestimmte
Varianten des Closest Vector Problems in \(\mathcal{L}(B)\) effizient
lösen.
- Öffentlicher Schlüssel
Als öffentlichen Schlüssel verwendet man eine nicht wohlgeformte Basis
\(H\) für dasselbe Gitter. Hierbei sind die enthaltenen Spaltenvektoren
möglichst lang und nahezu parallel zueinander ausgerichtet. Trotz dieser
Unterschiede muss \(\mathcal{L}(B)=\mathcal{L}(H)\) gelten.
Kryptoanalytisch betrachtet ist die sogenannte Hermite-Normalform (HNF)
von \(B\) die optimale Wahl. Dabei handelt es sich um eine ganzzahlige
Matrix in oberer oder unterer Dreiecksmatrixform, die beispielsweise
mithilfe des sogenannten Nemhauser/Wolsey-Algorithmus (s.
5.4.) aus \(B\)
abgeleitet werden kann und eine Basis für dasselbe Gitter wie \(B\)
darstellt. Die Hermite-Normalform ist eindeutig für jedes Gitter und
kann aus jeder beliebigen Basis des entsprechenden Gitters berechnet
werden. Anders ausgedrückt: Ein Angriff auf einen beliebigen
öffentlichen Schlüssel \(H\) ist stets höchstens so schwierig wie ein
Angriff auf die entsprechende Hermite-Normalform HNF\((H)\). Aus diesem
Grund verwendet man sie als öffentlichen Schlüssel.
Zusätzlich muss ein Parameter \(p \in \mathbb{N}\) festgelegt werden,
der den maximalen betragsmäßigen Wert der zufälligen Komponenten des
Fehlervektors \(e\) bei der Verschlüsselung repräsentiert. Dieser
Parameter muss so gewählt werden, dass für einen zufälligen Vektor \(e
\in [-p,p]^n\) der Ausdruck \(\lfloor B^{-1}e \rceil = 0\) sehr
wahrscheinlich und \(\lfloor H^{-1}e \rceil = 0\) sehr unwahrscheinlich
ist (\(\lfloor a \rceil\) bedeutet, dass die Komponenten von \(a\) auf
die nächste ganze Zahl gerundet werden sollen).
- Verschlüsselung
Um einen Klartext sicher zu verschlüsseln, wird er zunächst auf einen
Gitterpunkt \(m \in \mathcal{L}\) abgebildet. Dies geschieht, indem der
Klartext als ganzzahliger Spaltenvektor \(x \in \mathbb{Z}^n\)
betrachtet und mit der öffentlichen Basis \(Hx = m\) gebildet wird. Die
einzelnen Komponenten von \(x\) repräsentieren dabei die Koeffizienten
der Linearkombination mit den Spaltenvektoren von \(H\), die den
berechneten Gitterpunkt \(m\) ergeben. Anschließend wird diesem Punkt
ein zufälliger Fehler \(e \in [-p,p]^n\) mit ganzzahligen Komponenten
aufaddiert.
- Entschlüsselung
Um den Klartext \(x\) aus einem gegebenen Geheimtext \(c\)
wiederherzustellen, muss im ersten Schritt der Gitterpunkt \(m\)
bestimmt werden, der \(c\) am nächsten liegt. Dieser lässt sich mithilfe
der wohlgeformten Basis \(B\) und dem Rundungsverfahren von Babai wie
folgt berechnen:
\(m = B \lfloor B^{-1}c \rceil\)
Das ist möglich da:
\(B \lfloor B^{-1}c \rceil\ = B \lfloor B^{-1}(m+e) \rceil\)
Durch Ausmultiplizieren erhält man:
\(B \lfloor B^{-1}(m+e) \rceil = B(\lfloor B^{-1}m \rceil + \lfloor
B^{-1}e \rceil)\)
Da \(m \in \mathcal{L}\) und \(B\) ebenfalls eine Basis von
\(\mathcal{L}\) darstellt, entspricht \(B^{-1}m\) der ganzzahligen
Linearkombination von \(m\) mit den Spaltenvektoren von \(B\) und muss
daher nicht mehr gerundet werden:
\(B(\lfloor B^{-1}m \rceil + \lfloor B^{-1}e \rceil) = B(B^{-1}m +
\lfloor B^{-1}e \rceil)\)
Da wir sowohl von einem kleinen Fehler \(e\) als auch von kurzen
Spaltenvektoren in \(B\) ausgehen, nehmen wir an, dass \(\lfloor B^{-1}e
\rceil = 0\) gilt. Also ist:
\(B(B^{-1}m + \lfloor B^{-1}e \rceil) = B(B^{-1}m) = BB^{-1}m = Im = m\)
Zuletzt lässt sich der Klartext \(x\) durch Auflösen von \(Hx = m\)
wiederherzustellen.