Lamport-Einmal-Signaturverfahren
Das Lamport-Einmal-Signaturverfahren ({{Modul:Vorlage:lang}} Modul:Vorlage:lang:103: attempt to index field 'wikibase' (a nil value), kurz OTS) ist ein Signaturverfahren, das 1979 von Leslie Lamport entwickelt wurde<ref>Leslie Lamport: Constructing Digital Signatures from a One Way Function. 18. Oktober 1979 (microsoft.com [abgerufen am 2. Januar 2022]).</ref>. Normalerweise wird eine kollisionresistente Hashfunktion <math>H : \left\{0,1\right\}^k \rightarrow \left\{0,1\right\}^k, k \in \mathbb{N}</math> als Einwegfunktion verwendet.
OTS verwendet zwei Schlüssel, einen Signaturschlüssel <math>x</math> und einen Verifikationsschlüssel <math>y</math>. Um später ein Dokument mit <math>y</math> zu verifizieren, muss außerdem die verwendete Einwegfunktion <math>H</math> bekannt sein.
Schlüsselerzeugung
Der private Schlüssel <math>x</math> besteht aus <math>n</math> <math>k</math>-bit Zahlenpaaren, die zufällig generiert werden, wobei <math display="inline">n</math> die Länge des zu signierenden Dokuments ist.
<math>x = \Bigl(x(0,1), x(1,1), x(0,2), x(1,2), \ldots, x(0,n), x(1,n)\Bigr) \in (\begin{Bmatrix}0,1\end{Bmatrix}^{k})^{2n}, n \in \N</math>
Bei längeren Dokumenten oder wenn die Länge des Dokuments bei der Schlüsselerzeugung noch nicht bekannt ist, empfiehlt es sich, erst eine kollisionsresistente Hashfunktion auf das Dokument anzuwenden und den resultierenden Hashwert zu signieren, was <math>k</math> auf die Hashlänge begrenzt.
Angenommen, es wird eine 256-bit-Hashfunktion verwendet, empfiehlt es sich, für <math>n</math> 256 zu wählen. Daraus ergibt sich eine Schlüssellänge von 2×256×256 = 128 Kibit.
Den öffentlichen Schlüssel <math>y</math> erhält man, wenn man alle <math>n</math> Zahlenpaare des privaten Schlüssels hasht.
- <math>
\begin{align} y & = \Bigl(H(x(0,1)), H(x(1,1)), H(x(0,2)), H(x(1,2)), \ldots, H(x(0,n)), H(x(1,n))\Bigr ) \\
& = \Bigl(y(0,1), y(1,1), y(0,2), y(1,2), \ldots, y(0,n), y(1,n)\Bigr)
\end{align} </math>
Erzeugung der Signatur
Die Signatur eines Dokuments <math>d = (d_\text{1}, \ldots, d_\text{n}) \in \begin{Bmatrix}0,1\end{Bmatrix}^n</math> ist
- <math>s = (s_{1}, \ldots,s_{n}) = \Bigl(x(d_{1},1), \ldots, x(d_{n},n)\Bigr)</math>
Verifikation
Der Verifizierer kennt die Einwegfunktion <math>H</math>, den Verifikationsschlüssel <math>y</math>, das Dokument <math>d = (d_{1}, \ldots, d_{n}) </math> und die Signatur <math>s = (s_{1}, \ldots, s_{n})</math>.
Wenn
- <math>\Bigl(H(s_{1}), \ldots, H(s_{n})\Bigr) = \Bigl(y(d_{1},1), \ldots, y(d_{n},n)\Bigr)</math>
gilt, dann ist die Signatur korrekt.
Literatur
- Johannes Buchmann: Einführung in die Kryptographie. 5. Auflage. Springer Verlag, 2010, ISBN 978-3-642-11185-3, S. 220 ff.
- Leslie Lamport: Constructing digital signatures from a one-way function, Technical Report SRI-CSL-98, SRI International Computer Science Laboratory, Okt. 1979.
Weblinks
Einzelnachweise
<references />