[ 
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


Reply via email to