Edit: I just went through Ubi's password change process, they also restrict password lengths to 8 to 16 characters. Annoys the heck out of me when companies do this.
Edit: I just went through Ubi's password change process, they also restrict password lengths to 8 to 16 characters. Annoys the heck out of me when companies do this.
http://arstechnica.com/gaming/2011/11/valve-confirms-steam-h...
No company is immune from hacking, the best anyone can hope for is secure hashing functions are in place and that financial and user account data are properly separated.
A potential common excuse may be, "No one will remember a secure password in excess of 16 characters, we are trying to minimize support volume", but this is not a "reasonable" excuse.
Really though, just reject passwords over a few KB. Nobody will ever notice that limit except for people trying to fuck with you.
I'm not arguing that if this functionality were already present in an app that you should remove it; however if it's not there already there's very little value it could add that would justify any development time. That's just my opinion though.
1KB: 0.279 secs
1MB: 0.277
10MB: 0.293
100MB: 0.473
1000MB: 2.169
Getting the 1GB string allocated in Python locked my system up for longer than the 20 loops over bcrypt did. :)
I should probably find a machine with a little more RAM to test 10GB...
edit: also, merely saying "bcrypt" isn't quite sufficient; we'd have to know what work factor you were testing with. bcrypt with a work factor of 2 is vastly different in performance from bcrypt with a work factor of 12.
Parentheses are not made to be ignored.
But I don't think it matters, which is why it was a parenthetical. The point is the relative differences between different sized strings, not the absolute timings.
The check on that should (and, AFAIK, is) done server-side, with the server closing the connection after a certain amount of data or time.
Edit: after reading https://en.wikipedia.org/wiki/Bcrypt#Algorithm, it looks like bcryt's make-work loop does refer to the key in each iteration. I can't tell on a cursory reading whether access to the original key can be memoized, though hashing the large input once before passing it into bcrypt would have the same effect.
1MB -- 0.310421895981 seconds
10MB -- 0.317299044132
100MB -- 0.409169948101
1GB -- 1.3299703002
10GB -- 10.8254830956
100GB -- 133.936514747
I noticed during the 100GB loop that the process oscillated between 100GB and 200GB, making me suspect that the 100GB string is actually being copied somewhere, which is inefficient and surely has a significant effect on the timings at larger string sizes. As such, I didn't go for a 200GB string.
And just 'cause most of us don't see 200GB python processes every day:
https://dl.dropboxusercontent.com/u/14571816/python%20200gb....
I'd had preferred if they used a one way hash instead, obviously with a secure hash algorithm, uniquely salted and rehashed multiple times. All passwords would then be the same length when stored and users wouldn't have to have such a low maximum limit.
There are worse offenders for low character limits, like Adobe with a 12 char maximum. Used to be a site that listed some, just a shame it's no longer available http://web.archive.org/web/20100526105638/http://www.weakpas...