Argon2

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Argon2 ist ein Passwort-Hashing-Verfahren, das neben der Authentifizierung auch zur Schlüsselableitung und für Kryptowährungen verwendet werden kann. Der Algorithmus wurde 2014 von Alex Biryukov, Daniel Dinu und Dmitry Khovratovich von der Universität Luxembourg vorgestellt und gewann 2015 die Password Hashing Competition. Argon2 ist Arbeitsspeicher-intensiv und für die x86-Architektur optimiert. Eine Kernfunktion ist eine Parallelität, die Time-Memory Tradeoffs verhindert.

Hintergrund[Bearbeiten | Quelltext bearbeiten]

Passwort-Hashing ist ein Verfahren, um aus einem Passwort einen kryptographischen Schlüssel zur Verschlüsselung zu gewinnen oder um ein Passwort für einen Authentifizierungsprozess zu speichern. Bisherige Verfahren dafür, wie bcrypt oder PBKDF2 erwiesen sich als sehr anfällig für Angriff mit spezialisierter Hardware (custom hardware attacks), mit denen vor allem Passwort-Listen innerhalb kurzer Zeit durchprobiert werden können. Eine erste Alternative bot das 2010 veröffentlichte Verfahren Scrypt. 2013 wurde mit der Password Hashing Competition ein Auswahlverfahren ins Leben gerufen, das die Forschung zum Passwort-Hashing fördern und einen Algorithmus zur Verwendung vorschlagen sollte.

Geschichte[Bearbeiten | Quelltext bearbeiten]

2014 wurde das Verfahren Argon bei der Password Hashing Competition eingereicht. Argon basierte auf den AES-Befehlsinstruktionen des Prozessors und erreichte damit eine schnelle Ausführung, die auch durch spezialisierte Hardware nicht wesentlich übertroffen werden konnte.

Am 31. Januar 2015 (Paper v2 S. 34) wurde neben einer Modifikation von Argon auch das Verfahren Argon2 vorgestellt. Argon2 verzichtet auf AES-Befehlsinstruktionen und basiert stattdessen auf der Hashfunktion Blake2b. Da dieses neue Verfahren während der zweiten Phase der Password Hashing Competition eingereicht wurde, in der eigentlich nur geringfügige Änderungen (tweaks) erlaubt waren, musste dessen Zulassung durch das Gremium der Password Hashing Competition ausdrücklich beschlossen werden. Am 20. Juli 2015 wurde schließlich Argon2 zum Sieger des Auswahlverfahrens erklärt.

2016 wurde eine Kryptoanalyse der Variante Argon2i veröffentlicht, die eine Ausführung mit weniger Arbeitsspeicher (Faktor 2,72 – 4) bei gleicher Rechenzeit erlaubt [1]. Mit der 2017 veröffentlichten Version 1.3 wurde auf diese Analyse reagiert [2].

Struktur[Bearbeiten | Quelltext bearbeiten]

Argon2 erzeugt einen großen Vektor im Arbeitsspeicher, der als Matrix aufgebaut ist, um eine synchronisierte Parallelität zu ermöglichen. Die Zugriffe auf den Vektor stellen sicher, dass nur zugunsten einer sehr viel längeren Laufzeit darauf verzichtet werden kann, diesen Vektor vollständig im Arbeitsspeicher zu halten. Es wird somit verhindert, dass der Algorithmus durch spezialisierte Hardware (ASICs und andere), die über geringe Arbeitsspeicher verfügen, wesentlich schneller ausgeführt werden kann, als auf einem PC oder Server. Dazu berechnet die indexing function die Indices des Vektors, auf die zugegegriffen wird. Sie ist im Falle von Argon2i unabhängig von Passwort und Salt, dafür jedoch langsamer als Argon2d und kann daher in der gleichen Zeit nur einen kleineren Vektor berechnen.

Argon2 verwendet

  • eine interne Kompressionsfunktion G mit zwei 1024-byte Inputs und einem 1024-byte output: G ist aufgebaut aus der Runden-Funktion P von Blake2b und umfasst lediglich eine Runde
  • eine interne Hashfunktion H (Blake2b)

De Kompressionsfunktion G, die Hashfunktion H, die Blocklänge und die Anzahl der slices sind grundsätzlich austauschbar, in der Referenzimplementierung von Argon2 sind diese jedoch festgelegt.

Konkrete Instanzen[Bearbeiten | Quelltext bearbeiten]

Argon2d kann Angriffen mit spezialisierter Hardware besser vorbeugen, ist jedoch verwundbar für Cache-Timing-Atacks. Die Autoren schlagen diese Variante für Kryptowährungen und Backend-Server vor.

Argon2i ist für Szenarien geeignet, in denen Angreifer möglicherweise Zugang zur CPU haben, in der Argon2 ausgeführt wird. Die Autoren schlagen als Anwendungsgebiete Passwort Hashing und Schlüsselableitungen vor. In einem Internet-Draft vom August 2017 wurde für diese Szenarien die Variante Argon2id empfohlen [3].

Argon2i und Argon2d unterscheiden sich in der Art, in der die Indices des Vektors berechnet werden: Argon2d berechnet die Indices abhängig von Passwort und Salt, Argon2i berechnet die Indices unabhängig von Passwort und Salt (gegebenenfalls abhängig von öffentlichen Input-Parametern).

Mit der Version v1.2.1 vom Februar 2016 wurde die Instanz Argon2id als optionale Instanz eingeführt, in der beide Instanzen kombiniert werden. Diese Variante weist in Bezug auf eine Verwundbarkeit mit Cache-Timing-Attacks eine hybride Struktur auf, ähnlich wie die die Verfahren Lyra2 und Pomelo.

Empfohlene Parameter[Bearbeiten | Quelltext bearbeiten]

Die Auswahl der Parameter richtet sich nach dem System, auf dem Argon2 ausgeführt wird. Die Autoren legen keine Standard-Parameter fest.

  • Arbeitsspeicher m: so hoch wie möglich und tolerabel
  • Zeit t: so hoch wie möglich und tolerabel
  • Parallelismus p: Doppelte Anzahl der Prozessorkerne
  • Länge von Salt (mindestens 128 Bits) und Tag (mindestens 128 Bits)

Für bestimmte Anwendungen schlagen die Autoren folgende Werte für Rechenzeit und Arbeitsspeicheranforderung vor:

  • Argon2d für Krypto-Währungen: 0,1 s, mit einem Kern (p = 2), 256 MB RAM
  • Argon2d für Backend-Server-Authentifizierung: 0,5 s, mit 4 Kernen (p = 8), 4 GB RAM
  • Argon2i für Schlüsselableitung für Festplattenverschlüsselung: 3s, mit 2 Kernen (p = 4), 6 GB RAM
  • Argon2i für Frontend-Server-Authentifizierung: 0,5 s, mit 2 Kernen (p = 4), 1 GB RAM.

Weblinks[Bearbeiten | Quelltext bearbeiten]

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]

  1. Balloon Hashing: Provably Space-Hard Hash Functions with Data-Independent Access Patterns Vorstellen des Verfahrens Balloon Hashing und Kryptoanalyse von Argon2. Abgerufen am 28. September 2018. (PDF)
  2. Argon2: the memory-hard function for password hashing and other applications Vorstellung der Version 1.3 von Argon2. Abgerufen am 28. September 2018. (PDF)
  3. The memory-hard Argon2 password hash and proof-of-work function Internet-Draft zu Argon2. Abgerufen am 28. September 2018