Einlesen der Nachricht |
|
|
|
|
Die Absorb-Funktion schreibt die Nachricht blockweise in einen State und wendet die Permutationsfunktionen auf diesen an.
Je nach Keccak-Variante wird ein initialer State mit b = 5 * 5 * 2l Nullbits erstellt, wobei gilt 0 ≤ l ≤ 6. Üblich ist l = 5 (Keccak[800], Wortlänge 32 Bit) oder l = 6 (Keccak[1600], Wortlänge 64 Bit). Bei einer festen Hash-Ausgabelänge werden r und c so gewählt, dass c doppelt so groß ist wie Hash-Länge und weiterhin gilt b = r + c. Nun werden die ersten r Bits der Nachricht mit den ersten r Bits des States XOR-verknüpft und die fünf Permutationsfunktionen mehrfach auf den State angewendet. Dabei wird immer mit der Theta-Permutation begonnen. Die Reihenfolge der restlichen Permutationen ist beliebig. Alle Permutationen werden jedoch in 12+2*l Runden (22 bei Keccak[800] bzw. 24 Runden bei Keccak[1600]) wiederholt. Daraufhin werden die nächsten r Bits der Nachricht mit dem State XOR-verknüpft und wieder die Keccak-Permutationen angewendet. Dies wird so lange wiederholt, bis die komplette Nachricht verarbeitet ist. Auf den resultierenden State wird die Squeeze-Funktion angewendet, um den Hash-Wert zu erzeugen. |