Cryptography Reference
In-Depth Information
1.
Durchlaufe sechs Mal:
•
Wende Viertelrundenfunktion spaltenweise an
•
Wende Viertelrundenfunktion zeilenweise an
2.
Addiere den ursprünglichen Wert der Matrix
X
Anders ausgedrückt gilt:
X
=
X
+(
V
zw
(
V
sw
(
X
)))
6
.
V
steht hierbei für die Viertel-
rundenfunktion und
zw
bzw.
sw
für zeilen- bzw. spaltenweise. Das spaltenweise
oder zeilenweise Anwenden der Viertelrundenfunktion auf
X
bezeichnet eine
Runde. Pro Runde wird also die Viertelrundenfunktion viermal aufgerufen, was
deren Namen erklärt. Das sechsmalige Durchlaufen der oben genannten Schleife
entspricht zwölf Runden und damit der Variante Salsa20/12. Für Salsa20/8 sind
vier Durchläufe notwendig. In der ursprünglichen Version von Salsa20 gab es
zehn Durchläufe und damit 20 Runden. Die Keystream-Extraktion läuft unab-
hängig von der Rundenzahl wie folgt ab (|| steht wie üblich für die Konkatenation):
keystream
=
H
(
c
0
||
k
||
c
1
||
n
||
c
2
||
k
||
c
3
)
c
0
,
c
2
,
c
2
und
c
3
sind Konstanten, deren Wert Sie in der Originalarbeit nachlesen
können. Jede Konstante hat eine Länge von 4 Byte.
k
ist der Schlüssel (16 Byte).
n
ist der Status (also der Zähler), der nach jeder Fortschaltung um eins hochzählt
wird. Der Anfangswert von
n
entspricht dem Initialisierungsvektor. Die Länge
von
n
beträgt 16 Byte. Wie Sie leicht nachrechnen, haben die eingegebenen Vari-
ablen zusammen die Länge 512 Bit (64 Byte) und lassen sich dadurch als Matrix
darstellen und als Eingabe von
H
verwenden. Die Ausgabe ist erneut ein 512-Bit-
Wert. Dieser wird als Keystream ausgegeben.
32
Bit
32
Bit
rot
9
+
32
Bit
32
Bit
rot
7
+
32
Bit
32
Bit
rot
13
rot
18
+
+
32
Bit
32
Bit
Abb. 16-9
Die Viertelrundenfunktion ist der zentrale Bestandteil von Salsa20. Sie spielt bei der
Keystream-Generierung eine Rolle.
Bewertung von Salsa20
Salsa20 ist durch sein außergewöhnliches Design zweifellos eine interessante
Stromchiffre. Das Verfahren hat alle Vorteile, die der in Abschnitt 19.1.5 be-
schriebene CTR-Modus bietet. Insbesondere lässt sich damit ein einzelner Nach-
richtenblock entschlüsseln, ohne dass zuvor eine größere Zahl von Fortschaltun-