Argon2

Note

TL;DR: Use Argon2i to securely hash your passwords.

You do not need to read or understand anything below this box.

Argon2 is a secure password hashing algorithm. It is designed to have both a configurable runtime as well as memory consumption.

This means that you can decide how long it takes to hash a password and how much memory is required.

Argon2 comes in two variants:

Argon2d
is faster and uses data-depending memory access, which makes it less suitable for hashing secrets and more suitable for cryptocurrencies and applications with no threats from side-channel timing attacks.
Argon2i
uses data-independent memory access, which is preferred for password hashing and password-based key derivation. Argon2i is slower as it makes more passes over the memory to protect from tradeoff attacks.

Why “just use bcrypt” Is Not the Answer

There’s an unfortunate meme to respond to questions of storage of secrets like passwords to “just use bcrypt”. The problem is, neither bcrypt nor its closest NIST-approved competitor PBKDF2 are fit for hashing passwords in the days of ASIC password breakers. In a nutshell, password crackers are able to create highly parallelized hardware specifically tailored to crack computationally expensive password hashes.

An effective measure against extreme parallelism proved making computation of password hashes also memory hard. The best known implementation of that approach is to date scrypt. However according to the Argon2 paper, page 2:

[…] the existence of a trivial time-memory tradeoff allows compact implementations with the same energy cost.

Therefore a new algorithm was needed.

Password Hashing Competition

The Password Hashing Competition took place between 2012 and 2015 to find a new, secure, and future-proof password hashing algorithm. Previously the NIST was in charge but after certain events and revelations their integrity has been put into question by the general public. So a group of independent cryptographers and security researchers came together.

In the end, Argon2 was announced as the winner.