[ https://issues.apache.org/jira/browse/DERBY-5539?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Knut Anders Hatlen resolved DERBY-5539. --------------------------------------- Resolution: Fixed Fix Version/s: 10.9.0.0 Issue & fix info: (was: Patch Available) Committed revision 1292704. Marking the issue as resolved since there's no more planned work. > Harden password hashing in the builtin authentication service > ------------------------------------------------------------- > > Key: DERBY-5539 > URL: https://issues.apache.org/jira/browse/DERBY-5539 > Project: Derby > Issue Type: Improvement > Components: Services > Affects Versions: 10.9.0.0 > Reporter: Knut Anders Hatlen > Assignee: Knut Anders Hatlen > Fix For: 10.9.0.0 > > Attachments: d5539-1a.diff, d5539-1b.diff, d5539-2a.diff > > > The Open Web Application Security Project has some suggestions on how to make > it harder for an attacker to crack hashed passwords: > https://www.owasp.org/index.php/Hashing_Java > The builtin authentication service doesn't follow all the suggestions. In > particular, it doesn't add a random salt, and it only performs the hash > operation once. > I propose that we add two new properties that makes it possible to configure > builtin to use a random salt and run multiple iterations of the hash > operation: > - derby.authentication.builtin.saltLength - the length of the random salt to > add (in bytes) > - derby.authentication.builtin.iterations - the number of times to perform > the hash operation > I'd also suggest that we set the defaults so that random salt and multiple > iterations are used by default. The OWASP page mentions 64 bits of salt (8 > bytes) and a minimum of 1000 iterations. I consulted a security expert who > thought that these recommendations sounded OK, but he believed the > recommended salt length was likely to be revised and suggested 16 bytes > instead. The only price we pay by going from 8 to 16 bytes, is that we'll > need to store 8 bytes extra per user in the database, so I don't see any > reason not to set the default for derby.authentication.builtin.saltLength as > high as 16. Setting the default for derby.authentication.builtin.iterations > to 1000 will make authentication of a user somewhat slower (which is the > point, really), but experiments on my machine suggest that running our > default hash function (SHA-256) 1000 times takes around 1 ms. Since > authentication only happens when establishing a new connection to the > database, that would be a negligible cost, I think. > If saltLength is set to 0 and iterations is set to 1, the hashing will be > done in the exact same way as in previous versions. > Both of the properties should only be respected when the data dictionary > version is 10.9 or higher, so that users in soft-upgraded databases can still > log in after a downgrade. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira