# Password Hashing Competition

Die Password Hashing Competition (PHC) war das Auswahlverfahren für ein neues password hashing scheme, einem Schema zum Speichern von Passwörtern oder zur Ableitung von kryptographischen Schlüsseln aus Passwörtern. Es wurde Anfang 2013 maßgeblich von Jean-Philippe Aumasson initiiert und endete 2015 mit der Empfehlung, zukünftig Argon2 als Passwort-Hashfunktion zu verwenden.

## Hintergrund

Passwort-Hashing wird beim Login in ein System mittels Passwort, beispielsweise nach dem Starten eines Rechners, und bei der Ableitung von kryptographischen Schlüsseln aus Passwörtern, wie bei der Verschlüsselung von Partitionen, benutzt. Es existieren nur drei Verfahren, die eine gewisse Verbreitung besitzen: bcrypt, PBKDF2 und scrypt. Von diesen ist nur PBKDF2 vom NIST standardisiert, allerdings gilt besonders dieses Verfahren als sehr verwundbar für Angriffe mit spezialisierter Hardware, wie GPUs, ASICs und FPGAs. Weniger die Fortschritte in der Kryptoanalyse, sondern vielmehr die Entwicklungen der Hardware bewirken, dass viele Passwörter innerhalb kurzer Zeit mittels Wörterbuchangriff oder Brute-Force-Methode gebrochen werden können. Die neuere Funktion scrypt wurde zwar mit dem Ziel konzipiert, genau diese Angriffe zu verhindern, doch ist deren Einsatz insbesondere bei Webservern begrenzt. Die Password Hashing Competition hat sich zum Ziel gesetzt, die Forschung in diesem Bereich zu fördern und am Ende des Auswahlverfahrens ein oder mehrere Schemata zu empfehlen.

## Organisation

Die Password Hashing Competition orientiert sich an transparenten Auswahlverfahren wie dem zur Auswahl der Blockchiffre AES, dem eSTREAM-Verfahren zur Auswahl einer Stromchiffre und dem SHA-3-Verfahren zur Auswahl einer Hashfunktion. Im Unterschied zu all diesen Auswahlverfahren ist die PHC nicht an eine bestimmte Institution gebunden, wie dem NIST im Falle des AES und SHA-3 oder NESSIE im Falle des eSTREAM-Projekts. Die Glaubwürdigkeit wird nur durch die beteiligten Personen gewährleistet. Diese entstammen der Industrie, dem universitären Bereich und staatlichen Institutionen. Die PHC hat damit neue Wege beschritten, noch bevor Edward Snowden die Einflussnahme der NSA auf kryptographische Standards bekannt machte.
Die PHC wurde nur drei Jahre nach einer offiziellen Empfehlung der NIST zum gleichen Thema ins Leben gerufen. Obwohl dieser Umstand eine Ablehnung der Empfehlung nahelegt, äußert die PHC öffentlich keine Kritik am NIST. Es sollen sogar Gespräche stattgefunden haben, bei denen NIST signalisiert habe, das Auswahlverfahren aufmerksam zu verfolgen. Zudem ist mit Meltem Sonmez Turan ein NIST-Mitarbeiter an der PHC beteiligt.

## Personen

Neben bekannten Kryptologen wie Jean-Philippe Aumasson (Entwickler von BLAKE, einem der SHA-3-Finalisten) sind auch Entwickler von bestehenden Password Hashing Schemes beteiligt, wie Colin Percival (scrypt) und Stefan Lucks (Catena). Die PHC legt Wert darauf, Expertise nicht nur aus dem defensiven Bereich einzubeziehen, sondern auch aus dem „offensiven“ Bereich, also Personen, die zukünftige Angriffe simulieren sollen, sowie Sicherheitsbeauftragte und Personen aus der Software- und Hardware-Entwicklung, letztere insbesondere im Bereich ASICs, FPGAs und GPUs.

## Finalisten (Verfahren der zweiten Runde)

Von den 22 Kandidaten der ersten Runde wurden neun Finalisten ausgewählt:
* Argon von Alex Biryukov und Dmitry Khovratovich besteht aus einer 5-Runden-AES-128-Verschlüsselung mit fixem Schlüssel sowie XOR- und Block-Mutationen. Argon profitiert von der AES-Befehlssatzerweiterung moderner Prozessoren. Argon2 wurde erst am 31. Januar 2015 eingereicht und verwendet die Hashfunktion Blake2b statt der AES-Befehlssatzerweiterung.
* battcrypt von Steven Thomas hat sich zum Ziel gesetzt, die Verschlüsselungsfunktion Blowfish speicherintensiv (memory-hard) auszubauen. battcrypt orientiert sich an bcrypt und verwendet intern die Hashfunktion SHA-512.
* Catena von Christian Forler, Stefan Lucks und Jakob Wenzel wurde schon vor der PHC als Alternative zu scrypt vorgestellt. Im Gegensatz zu scrypt ist Catena immun gegen cache-timing attacks und auch resistenter gegen garbage-collector attacks. Version 2.0 erlaubt alternativ zwei speicherintensive Funktionen: die bit-reversal hashing operation (Catena-BRG) und die double butterfly hashing operation (Catena-DBG).
* Lyra2 von Marcos A. Simplicio Jr., Leonardo C. Almeida, Ewerton R. Andrade, Paulo C. F. dos Santos und Paulo S. L. M. Barreto ist ebenfalls angelehnt an das Verfahren scrypt und basiert wie auch die Hashfunktion Keccak (SHA-3) auf der Sponge-Konstruktion. Die Kryptowährung Vertcoin hatte schon vor der Auswahl der Finalisten angekündigt, scrypt durch Lyra2 zu ersetzen.
* Makwa von Thomas Pornin erlaubt die Auslagerung eines großen Teils der Berechnung auf externe Server. Passwort und Salt werden als Seed in einen deterministischen Zufallszahlengenerator (HMAC-DRBG) gegeben und anschließend mehrfach modulo eines BLUM-Integers quadriert. Ähnlich wie das RSA-Kryptosystem beruht die Sicherheit von Makwa auf dem Faktorisierungsproblem.
* Parallel von Steve Thomas verarbeitet eine große Anzahl paralleler SHA-512-Hash-Operationen und basiert auf der Idee, GPUs und FPGAs defensiv einzusetzen.
* POMELO von Hongjun Wu besteht allein aus Additions-, XOR- und Rotationsoperationen und benutzt keine bestehende kryptographische Funktion. Pomelo ist hauptsächlich gegen einen Angriff mit GPUs ausgerichtet, die modifizierte Fassung v2 ist aufgrund ihrer Arbeitsspeicher-Intensität auch zur Abwehr anderer spezialisierter Hardware geeignet.
* Pufferfish von Jeremi M. Gosney ist an das Verfahren bcrypt angelehnt, verwendet jedoch 64-Bit-Wörter und beliebig große, Passwort-abhängige S-Boxen.
* Yescrypt von Alexander Peslyak baut auf dem Verfahren scrypt auf und besitzt auch einen Scrypt-Kompatibilitätsmodus mit dem Scrypt-Hashwerte berechnet werden können. Yescrypt enthält optional unter anderem einen ROM-basierten Zugriff, der auch Angriffe mittels Botnets abwehren soll.

## Sieger

Am 20. Juli 2015 wurde bekannt gegeben, dass Argon2 als Basis des endgültigen Siegers der Password Hashing Competition dienen solle. Es wurden außerdem die Finalisten Catena, Lyra2, Makwa und yescrypt für ihre spezifischen positiven Eigenschaften besonders hervorgehoben. Später im Jahr 2015 wurde die Version 1.2.1 vom 1. Oktober 2015 von Argon2 als Gewinner gekürt.

## Argon2

Die PHC empfiehlt, den Sieger Argon2 zukünftig allen früheren Algorithmen vorzuziehen:
   „We recommend that you use Argon2 rather than legacy algorithms.“
Es existierten zunächst zwei Varianten von Argon2: die Variante Argon2i zielt auf Sicherheit gegenüber Seitenkanalangriffen ab, während die Variante Argon2d vorwiegend vor GPU-Brute-Force-Angriffen schützen soll. Argon2d wurde für Kryptowährungen und Backend-Server-Authentifizierungen empfohlen, während Argon2i für Frontend-Server-Authentifizierungen und Festplatten-Verschlüsselungen empfohlen wurde. Im Zweifel empfahlen die Entwickler, Argon2i zu verwenden. Beide Varianten verfügen über drei Parameter, mit denen sich die Ausführungsdauer, der Speicherverbrauch und die Parallelisierbarkeit einstellen lassen.
Im März 2017 wurde ein Dokument der IETF der Version 1.3 veröffentlicht, das die Variante Argon2id als primäre Variante vorstellt und Argon2i und Argon2d nur noch als zusätzliche Varianten aufführt. Argon2id ist eine hybride Funktion, deren erster Teil resistent gegen cache timing attacks ist, während der zweite Teil einen Time-Memory Tradeoff verhindern soll.
Eine Referenzimplementation in C89-Kompatiblem C, die auf x86-, x64- und den meisten Arm-Systemen unter Unix (wie Linux und macOS) und Windows läuft, wurde unter der Lizenz CC-0 als De-facto-Public-Domain freigegeben.