by baddate on 12/3/20, 10:30 AM with 61 comments
by skrebbel on 12/3/20, 1:53 PM
This post truly is internet history. Complaining that there's alternatives today that solve the same problem better than bcrypt is beside the point. The fundamental insight hasn't changed, only the best available algorithm.
by Ciantic on 12/3/20, 2:46 PM
OWASP has nice document: https://cheatsheetseries.owasp.org/cheatsheets/Password_Stor...
It boils down to this:
> Bcrypt is the most widely supported of the algorithms and should be the default choice unless there are specific requirements for PBKDF2, or appropriate knowledge to tune Argon2.
by Straw on 12/3/20, 12:39 PM
More recent designs such as scrypt and Argon2 force high memory usage as well as computation time, incurring little cost on the users but making ASIC and GPU attacks significantly less cost-effective.
Of course, any of these will still give better protection than plain cryptographic hashes.
by OliverJones on 12/3/20, 1:24 PM
The idea is to alert an application program to the need to regenerate the hash at the time it has the plaintext password in hand (when the user has just presented it for login).
This is a great idea; rehashing a long-standing bcrypt password with a larger work factor makes it safer.
And, an extension or new version of the runtime can add a new hashing scheme.
It would be sweet if other password-hashing APIs added the same kind of thing. User accounts can last far longer than LTS versions of software runtimes, and this can help future-proof them.
by _wldu on 12/3/20, 3:24 PM
(Cracking Passwords with Cheap Hardware at Defcon):
by wagslane on 12/3/20, 1:53 PM
by bob1029 on 12/3/20, 3:04 PM
Imagine every device has a cookie/token with 256-512 CSPRNG bytes which uniquely identify it. The server uses this as the exclusive means of authentication. For sensitive application scenarios, an in-app PIN mechanism can be used as a soft protective measure (e.g. Robinhood mobile apps use this). The device you initially sign up on can be used to activate additional devices by way of scanning a QR code, offline recovery codes, SMS, etc.
This model makes it so that a user has no username or password to remember. They just need to make sure they have a backup device and/or offline recovery options available. I find that side-stepping the problem altogether might be the best solution for all involved. Users loathe remembering passwords. Developers screw up password hashing constantly. Malicious actors should grow to strongly dislike this approach.
This also provides a much stricter chain of custody over how additional devices are added to an account. You have to already have a trusted device to bring another. Making the "What you have" (device) the first factor, and the "What you know" (i.e. pin code) the second factor seems to work out a lot better looking forward.
by mijoharas on 12/3/20, 2:48 PM
Why would you pick one over the other? Or are both "pretty much fine" for most workloads and a casual user shouldn't worry too much?
by dang on 12/3/20, 6:54 PM
2011 https://news.ycombinator.com/item?id=2716714
2010 https://news.ycombinator.com/item?id=2004833
Discussed at the time: https://news.ycombinator.com/item?id=1091104
by rendall on 12/3/20, 2:50 PM
by edf13 on 12/3/20, 2:13 PM
https://www.google.co.uk/amp/s/nakedsecurity.sophos.com/2013...
(Apologies for the blasted Amp link... on my phone)
by jonathanstrange on 12/3/20, 1:47 PM
There are constructions to avoid this problem but they are not commonly used.
by neallindsay on 12/3/20, 4:47 PM
But an article with that title would probably be less visible to the audience that really needs to read it.
by WorldMaker on 12/3/20, 6:13 PM
Feeling glib, but passwords are hot potatoes best to avoid if you can. There are plenty of OpenID Connect providers to pass off the buck to, or an increasing number of "passwordless" options including the simple scheme of one-time codes delivered to user email addresses.
by jgalt212 on 12/3/20, 5:42 PM
Only true if you don't know the salt. Of course, most folks store the hash and salt in the same table or column (Django).
by kordlessagain on 12/4/20, 4:51 AM
by _wldu on 12/3/20, 1:01 PM
by theandrewbailey on 12/3/20, 1:34 PM
Use argon2. Use argon2. Use argon2. Use argon2. Use argon2. Use argon2. Use argon2. Use argon2. Use argon2.
by kemiller2002 on 12/3/20, 1:41 PM
Finding a trusted 3rd party who's responsibility is to stay on top of it, is definitely the way to go if you're not in the security space. It's scary how many people don't understand the basics of hashing and encryption that have written authentication systems. When people ask me if we should do something like this, I normally say, "If you're asking me, then you probably already know the answer."