My favorites | Sign in
Project Logo
             
Search
for
Updated Oct 13, 2009 by nicero...@gmail.com
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 DigestJ

3.2.1 The WWW-Authenticate Response Header

  • The scheme is different. Instead of "Digest", it's "DigestJ".
  • challenge = "DigestJ"
The reason for this is simply to circumvent the browser's digest implementation.

Available Feature Differentiations

Contrary 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.
  • Salt can be added which affects 3.2.2.2 A1 (Is this *-sess algorithm?)
  • 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 Libraries

These were included in source until DigestJ v0.3.

Required third-party libraries:

  • jQuery Core.
  • MD5 and/or SHA256
  • 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.


Comment by gerryscat, Jul 06, 2009

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.

Comment by tazbo...@hotmail.com, Aug 19, 2009

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

Comment by nicero...@gmail.com, Aug 25, 2009

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.

Comment by nicero...@gmail.com, Aug 26, 2009

BTW, for questions, there's a DigestJ Google Group.


Sign in to add a comment
Hosted by Google Code