Meta Stack Exchange is where users like you discuss bugs, features, and support issues that affect the software powering all 158 Stack Exchange communities.

What is meta?
Here's how it works:
  1. Any Stack Exchange user can ask a question
  2. The community provides support, votes on ideas, and reports bugs
  3. Your voice helps shape the way Stack Exchange operates

I'm wondering how exactly the SE Open ID provider stores passwords, in far too many high-profile cases passwords were only marginally protected. I personally expect that SE uses a suitable hash function and salt, but it would be nice to know for sure.

share|improve this question
No salt is used. The only hash is 2ROT13. – Cole Johnson Jul 22 '13 at 8:31
I've heard they bathsalt the passwords... – Bart Jul 22 '13 at 8:51
They md5 them, twice. That's right, TWICE. No way you're getting past that! – Jimbo Jul 22 '13 at 10:06
Exactly what I wanted to know about the often defunct myOpenId, and the reason to remove my account there as soon as it was online again for just a bit. Nice detail: myOpenId will block my old username forever, in case I forgot to delete some old usage. (At least, they promise.) – Arjan Jul 22 '13 at 10:48
@Arjan yah, well, the NSA claims they aren't spying on us, and Microsoft claims there isn't a back door for them – Cole Johnson Jul 23 '13 at 2:02
up vote 20 down vote accepted

PBKDF2 based on HMAC-SHA1 with twenty-thousand iterations (the latter is set in our configuration).

Just check the code (search for SecureHash and go from there).

share|improve this answer
Thanks, I totally missed that the source is available. – Mad Scientist Jul 22 '13 at 10:50
Hehe, this code says it can do better ;-) private const int DefaultHashIterations = 1000; ...but also if (val < DefaultHashIterations) throw new ArgumentException("HashIterations cannot be less than 4000"); – Arjan Jul 22 '13 at 10:54
@Arjan Oops you're right; I've updated with the value we use. – balpha Jul 22 '13 at 10:58
Ah, that was not what I was trying to say. I guess in the above snippet 1,000 is the minimum, but the error message claims it's 4,000. :-) – Arjan Jul 22 '13 at 11:02
For my own sanity, are we talking about the actual user's passwords here, because I can't make that out from the code :( it seems that this deals mostly with decrypting the user's profile for populating the OpenID response. – Jack Jul 22 '13 at 11:07
@Jack Yes, it's the actual password. See… (a "pending user" is a user before they have confirmed their email and is later turned into a real user, where these fields are copied from the PendingUser – balpha Jul 22 '13 at 11:09
I see. Having implemented my own provider, I had assumed this was similar in the sense that the provider offloads the actual authentication and then uses the information found inside the authenticated session to produce the response :) thanks for the additional info! – Jack Jul 22 '13 at 11:14
Is this on github now? – Won't Oct 6 '15 at 15:27
@Won't No, we haven't moved it yet. – balpha Oct 6 '15 at 15:34

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .