# BLAKE (Hashfunktion)

BLAKE ist eine kryptographische Hashfunktion, die 2008 von Jean-Philippe Aumasson, Luca Henzen, Willi Meier und Raphael C.-W. Phan entwickelt wurde. BLAKE war einer der Finalisten im SHA-3-Auswahlverfahren der NIST.

## Struktur

Für das SHA-3-Verfahren unterstützt BLAKE Hashwerte von 224, 256, 384 und 512 Bit. BLAKE arbeitet auf einem Datenblock von 16 Wörtern von je 32 Bit (für die Hash-Längen 224 und 256 Bit) oder 64 Bit (für die größeren Hash-Längen). Erstere Variante wird als BLAKE-256, die zweite als BLAKE-512 bezeichnet. BLAKE entspricht der 2007 vorgestellten HAIFA-Struktur.
Die Nachricht wird mit einem Abschlussbyte und der Länge der Nachricht erweitert und in Blöcke zu 512 bzw. 1024 Bit geteilt, die nacheinander verarbeitet werden. Der Verkettungswert (Hash aus den bereits verarbeiteten Nachrichtenblöcken, am Anfang ein konstanter Initialisierungsvektor) ist halb so lang wie ein Datenblock. Zur Verarbeitung eines Nachrichtenblocks wird zuerst der Verkettungswert mit optionalem Salz und einem Zähler, der die verarbeiteten Nachrichtenbits zählt, auf die Datenblockgröße erweitert. Der Zähler bewirkt, dass die Nachrichtenblöcke, wie durch das HAIFA-Schema vorgesehen, nicht auf genau gleiche Weise verarbeitet werden.
Anschließend werden die Werte des Datenblocks permutiert und dabei der Nachrichtenblock eingearbeitet. Dies entspricht einer Blockverschlüsselung, wobei der Nachrichtenblock als Schlüssel dient. Die dabei verwendete Rundenfunktion basiert auf der Stromchiffre ChaCha, einer Weiterentwicklung von Salsa20. Sie verwendet Additionen, XOR-Verknüpfungen und Rotationen eines Datenworts mit konstanter Rotationsweite. Während des SHA-3-Auswahlverfahrens wurde die Anzahl der Runden für BLAKE-256 von 10 auf 14 und für BLAKE-512 von 14 auf 16 Runden erhöht, um die Sicherheitsreserve zu vergrößern.
Nach der Permutation wird der Datenblock zum Verkettungswert komprimiert, indem man eine Hälfte mit der anderen XOR-verknüpft, wobei das Salz, falls verwendet, nochmals per XOR eingearbeitet wird. Nach dem letzten Nachrichtenblock ist der Verkettungswert (oder ein Teil davon) der Hash-Wert.

## Eigenschaften

BLAKE hatte zusammen mit Skein im SHA-3-Verfahren die beste Software-Performance und war in den meisten Fällen schneller als SHA-2. Jedoch wies der Algorithmus vor allem im Vergleich zum Gewinner Keccak eine viel schlechtere Hardware-Performance auf.

## Sicherheit

Im SHA-3-Verfahren wurde BLAKE eine hohe Sicherheitsmarge bescheinigt, zudem gilt der Algorithmus als gut verstanden und intensiv analysiert. 2011 veröffentlichten Alex Biryukov, Ivica Nikolic und Arnab Roy einen Angriff auf 8 Runden von BLAKE-256, allerdings mit einer Komplexität von 2$^{232}$. Der Angriff wurde im Auswahlverfahren berücksichtigt und stellt bis zum Stand Juni 2015 die beste Kryptoanalyse dar.

## BLAKE2

2012 veröffentlichten Jean-Philippe Aumasson, Samuel Neves, Zooko Wilcox-O'Hearn und Christian Winnerlein BLAKE2 als eine Weiterentwicklung von BLAKE. BLAKE2 ist vor allem auf eine weitere Verbesserung der Performance bei gleichen Sicherheitseigenschaften ausgerichtet und soll auf 64-Bit-Plattformen schneller sein als SHA-1, MD5 und MD4. In einer ersten Analyse von 2013 gehen deren Autoren von ähnlichen Sicherheitseigenschaften im Vergleich zu BLAKE aus. Allerdings erwies sich BLAKE2 für manche Angriffsszenarien als anfälliger, der beste Angriff auf BLAKE (boomerang attack) lässt sich jedoch nicht einfach auf BLAKE2 übertragen.

## BLAKE3

2020 veröffentlichten Jean-Philippe Aumasson, Samuel Neves, Zooko Wilcox-O'Hearn und Jack O’Connor BLAKE3 als eine Weiterentwicklung von BLAKE2 mit zusätzlich verbesserter Performance unter anderem durch die Möglichkeit der unbegrenzten parallelen Ausführung.