|
DigestJ
The goal of DigestJ is to be as compliant as possible with a very specific aspect of RFC 2617 while supporting features above an beyond RFC 2617 to address its shortcomings with respect to vulnerabilities. Additionally, to provide a migration path away from the current state of relatively insecure password storage. DigestJ provides a level of security to users because the user's password will never be sent to the server, even if registering an account with the server. The Registration Process
Differences between RFC 2617 and DigestJ3.2.1 The WWW-Authenticate Response Header
challenge = "DigestJ" The reason for this is simply to circumvent the browser's digest implementation. Available Feature DifferentiationsContrary to, seemingly, most implementations, MD5 is not the only supported algorithm for RFC 2617 compliant digest authentication. MD5 is simply the default, fallback algorithm. RFC 2617 does provide the ability to specify an algorithm which implies other algorithms can be used as long as the client and server both support it.
A1 = digest(username ":" realm ":" digest(passwd ":" salt)) The salt can be chosen to be just about anything but once chosen, must always accompany the username, otherwise it effectively changes the user's password and becomes unrecoverable. A salt that includes a time component and some randomness might be an ideal solution as well as allowing the client and server to each contribute a portion of the salt. Third-party LibrariesThese were included in source until DigestJ v0.3. Required third-party libraries:
It doesn't matter what MD5 or SHA256 algorithm is used, it only matters that the case of the file name and the function in the file correspond to the name used when configuring the session. |
Sign in to add a comment
Perhaps there is a better place to ask this question, but I don't know what that might be...
The description for DigestJ says "does not transmit the user's password to the server".
Question: how?
The users lives at the client, and the user types the password. Something must travel between client and server; what? If the password is encrypted client-side then sent to the server and matched to a server-stored value then a cracker could simply copy the encrypted value and use that himself; he doesn't need to know the clear text value of the password. Need more documentation, thanks.
gerryscat,
> Question: how? > Something must travel between client and server; what? > Need more documentation, thanks.
That is defined in the HTTP spec and RFC 2617.
http://en.wikipedia.org/wiki/Digest_access_authentication was helpful to me.
Matthew
gerryscat,
The key with this digest authentication is in the salt and a "handshake". Just having the encrypted password isn't enough. At each log-in, the client requests authentication with the server. The server responds with a nonce that the client must use to encrypt the password before sending it to the server for verification. As long as the client and server use the same cipher, password and nonce, the encrypted password will validated at the sever. A nonce is generally only good once. So an attacker would have to intercept the response from the server, know the user's password and respond before the user's client can respond (if it ever received the response). There are additional security techniques possible too.
BTW, for questions, there's a DigestJ Google Group.