Sponge-Konstruktion

Eine Sponge- oder zu deutsch Schwammkonstruktion ist ein Konstruktionsprinzip, das beim Design von Hash-Funktionen zum Tragen kommt. Es hat seinen Namen daher, weil es sich sinnbildlich wie ein Schwamm verhält: Einer Phase des Aufsaugens folgt eine Phase des Ausdrückens. Allerdings geschieht dies hier nicht mit Wasser, sondern mit Daten.

Die Sponge-Konstruktion verarbeitet die Klartextnachrichten in Blöcken gleicher und festgelegter Länge. Gegebenenfalls muss der Klartext mittels sogenanntem Padding mit einem festgelegten Bitmuster (z. B. Nullbytes) aufgefüllt werden, um dem gerecht zu werden.

Desweiteren gibt es einen internen Statusblock, der länger ist als ein Verarbeitungsblock und den Zustand speichert. Nur ein Teil des Statusblock wird direkt durch die Eingabe des Klartextblockes manipuliert, der andere Teil speichert Hilfsdaten und wird als Aufnahmevermögen oder Kapazität ("Capacity") des Schwamms bezeichnet.

In der "Aufsaug"-Phase werden die Klartextblöcke aufgenommen und verarbeitet, was den internen Zustand stetig verändert. Sind alle Klartextblöcke verarbeitet, folgt die "Auspress"-Phase, in der eine entsprechende Funktion solange aufgerufen wird, um Ausgabebits auszugeben, bis die nötige Länge der Ausgabe (also Hashlänge) erreicht ist.

Gegenüber einer Merkle-Damgard-Konstruktion hat eine Sponge-Konstruktion den Vorteil, dass sie nicht für Verlängerungsangriffe empfindlich ist. Ein weiterer Vorteil ist, dass man eine Schwammkonstruktion auch als Stromchiffre nutzen kann, indem man einen Schlüssel "aufsaugt" und dann den Schwamm solange auspresst, wie man Bits für den Stream benötigt. Der Schwamm übernimmt dann die Funktion eines Pseudozufallgenerators mit dem im Statusblock gespeicherten Initialierungsvektor.

Sponge-Konstruktion werden z. B. angewendet in folgenden Verfahren: