Password Hashing Competition winner and special recognitions
groups.google.com
groups.google.com
Anyway, as best as I could tell, the consensus on the public mailing list was that the best case for a singular winner would be an amalgamation of four finalists: Argon2, Lyra2, Catena, and yescrypt. Each of them has some properties that are desirable. I'm curious to what extent Argon2 will be modified - and especially curious if the final spec will have tunable parameters / multiple modes or be a one-size-fits-all deal.
Edit: If you're interested in more information, a decent starting place is this paper: https://eprint.iacr.org/2014/881.pdf If you folks want more reading material, I can pull some emails from the mailing list
I expect there will be a long review period before the winner is considered suitable for common use. It reminds me of the backlash at NIST for some late changes to the SHA-3 winner, Keccak: https://en.wikipedia.org/wiki/SHA-3#NIST_announcement_contro...
Argon2's internals will likely be altered (with community input); Keccak's internals were left alone (only parameters were tweaked).
The community wants modifications to Argon2 before its final publication. Essentially, each of the five supreme finalists possess nifty properties. It'd be nice if Argon2 could be modified to possibly have some of these too.
That being said, I do expect you're correct that the winner will not be in mainstream production for a couple years at least.
If fancy client support is really an option it would usually be better to use a zero-knoweldge authentication protocol (like SRP), though one of these KDFs could be used as a preprocessing step.
1. check if the stored hash is identical to the hash you generate on fly using the old algorithm
2. create a new hash using the new algorithm and substitute both the old hash and the old informations about the algorithm/parameters
What's the trivial way to achieve it without the user logging in?
I'm not aware of any currently recommended algorithm that does this, though. The original passphrase usually goes into each and every iteration, not just the first round.
Can't you do that with any password hashing alg?
There are really two reasons for this: (1) optimization is a really big deal; some impls go so far as to have asm for specific architectures or use architecture-specific features like SSE2 and (2) there really isn't very much code for a cryptographic primitive, typically <=1000 lines. (e.g., see https://github.com/khovratovich/Argon2/tree/master/Argon2i/r...).
Once a simple reference implementation is hand-checked, it can be used to generate comprehensive test vectors for other implementations.
This isn't my area of expertise, but I believe there's some research in applied crypto for implementation verification. I know https://github.com/GaloisInc/cryptol is a language that's supposed to help in that regard, but I don't know offhand who all uses that.
If you can also write an implementation in something such as Haskell, verifying the input/output between the two implementations is a great way to assure it works as expected.
Another reason for C and assembly is that when everything your algorithm manipulates is a bunch of bytes you don't get much advantage from a type system.