Hacker News new | ask | show | jobs
by nwh 4409 days ago
No spaces in passwords? Obviously not hashing them.
5 comments

Actually, they are (or could be, given that I don't know for sure because I don't work there).

It merely means that they are most likely looking for spaces with client-side JavaScript, and rejecting any string that contains spaces.

Or, they're checking the string server-side, before hashing and storing the hash to their persistent data store.

Either way, as long as the connection is secure, it's reasonable to inspect the string in plain-text, both client-side and server-side, before creating the hash, as long as they actually create the hash when they do actually decide to save a representation of the password, rather than saving the plain-text password itself.

Part of me would like to guess that the reason spaces might be forbidden in passwords (and pass phrases) would be to prevent frequency analysis. But that doesn't really make much sense, when it comes to hashes, does it? So then, might the case be that they are storing the passwords with reversible encryption, and decrypting the token for a match? In my mind of minds, I doubt it, but you never know. What I really think is that the password policy is simply contrived and idiotic, and whatever rationale they've used to forbid spaces is silly and ill-conceived.

Either way, I agree with the author, whole-heartedly. That is a damned frustrating sign-up process. Two-factor account creation AND a CAPTCHA check? Holy moly!

I'm very much aware of that. I'm saying that because they're disallowing the submission of spaces, they aren't hashing their passwords when they get to the server.

> they're checking the string server-side, before hashing and storing the hash to their persistent data store.

But why? People don't just add a rule because they feel like it, I'm suggesting that they are storing it in a stupid way that is not hashed and does not allow spaces.

> part of me would like to guess that the reason spaces might be forbidden in passwords (and pass phrases) would be to prevent frequency analysis.

The output of a cryptographic hash is completely random, you can't do any sort of analysis except for determining H(a) == H(b). You don't even know if H(b) was the same input as H(a) or just a collision against it.

  > But why?
Because you cannot trust any checks performed on the client-side, since the user may have total control over the client-side system, and possess the ability to (somehow) bypass or spoof client-side validation.

Client-side validation only exists to pluck the low-hanging fruit, and provide convenience to the majority of users. You cannot rely on any client-side events, when attempting to secure server-side resources.

All user input must be considered evil until proven otherwise.

You've utterly missed the point of this.

If they hashed the user input, it wouldn't matter what the client gave them in terms of password requirements. Spaces, special characters, arbitrary lengths up to tens of thousands of characters would all be fine with a cryptographic hash, there's no way the resulting hash would be anything but a fixed length of n bytes. Nothing "evil" can make it through being hashed.

The password requirements Flickr has set show that they are not using a cryptographic hash, the limitations on length and character set imply that they are being stored incorrectly, either in plain text or a space delimited format. There's no reason to have these limitations if this were not the case.

So you're just going to implicitly trust the user's browser to generate the hash for you? Good luck with that, sir.

And there is a reason to limit length, the very obvious reason being that short passwords are easier to brute force.

Reduced character sets (numeric only, for example) are also easier to brute force, so by forbidding spaces, technically, they've reduced the character set of their passwords by at least one character (not that it's of any particular concern, all things considered).

By the way, I made mention that perhaps they're encrypting the string, and not hashing it. Did you miss that part?

What the hell? When did I suggest that? Client side validation wasn't even a part of this, the rules are clearly enforced at the server as well.

> By the way, I made mention that perhaps they're encrypting the string, and not hashing it.

Encryption is the same, it's content agnostic. 20 characters doesn't make any sense with the size of a block cipher.

I don't see how setting business rules means that they aren't using a cryptographic hash. Can you explain why that has to be true?

Perhaps eliminating a frequently made mistake by people who don't have much computer expertise is the reason. Wouldn't it be possible that they have found that a large number of support requests for newly created accounts are due to people accidentally adding spaces? So by eliminating spaces, they can still hash the contents without a problem however they also reduce the support load and increase the usability by a subset of their users.

Spaces are just characters. Their presence has nothing to do with hashing algorithms working or not.
That's the point; since spaces in the password cleartext should not matter for storing the password hash, what would be a good reason to disallow them?
There isn't one.
Which begs the question why I was downvoted heavily and posted to @shit_HN_says for making the comment.
How the hell should I know? But if I had to guess, I'd say it was because your prior comment implicitly equates "spaces prohibited in passwords" and "passwords not hashed" and assumes the latter as a necessary consequence of the former, when the two are entirely unrelated.

Now, to be fair, that's an uncharitable interpretation of the comment you're complaining about. But you helpfully make clear in a later comment that that was what you meant:

> I'm saying that because they're disallowing the submission of spaces, they aren't hashing their passwords when they get to the server.

And that just doesn't follow, and that's probably why your comment is getting downvoted, but not why I downvoted it just now. I don't downvote for content, but only for rudeness, unfunny jokes, and complaining about downvotes.

Should leading and trailing spaces be removed from input fields?
It's the lazy way of stopping users from cheating a minimum password length requirement.

To be fair, any other way would be lead to convoluted rules like "no consecutive spaces", "no leading/trailing spaces" or "spaces don't count towards the password length".

This is exactly why forcing users to use strong passwords is a shit idea in the first places. The rules either become ridiculously complicated or you disallow perfectly good passwords. There's no middle ground.

Why are they obviously not hashing?
because if they were hashed, spaces would be irrelevant (hashes don't have spaces)
You can apply a hashing algorithm to a string that contains spaces. The spaces are very much relevant.

In MD5 "String with spaces" yields eab431cd212fb8b5ae223acbcfe58cca

"Stringwithspaces" gives 3cd297b2d7e48709d92890f88abdde0a

I meant the hashes themselves wouldn't have spaces, therefore any odd database storage requirement wouldn't matter.
its probably because of dumb users. user makes password with spaces, then tries with without spaces and cant figure out why it wont work...
I don't know why this is getting downvoted. It's pretty easy to have accidently insert leading or trailing whitespace when copying/pasting a password.

(Users should never store passwords in plain text or email them to one-another but the reality is they do.)

client-side validation?
There's a difference between not allowing spaces and not hashing. They could have just written a bad PW policy that doesn't completely make sense

You're drawing conclusions from information that doesn't lead you to one.