 
  
 
 JNFS employs a more secure challenge-response mechanism for authentication. The protocol, outlined below, requires a user to use its digital signature to sign a random number to prove its authenticity. There are four stages to authentication:
In the initialization stage, the user U tells
JNFS that it would like access to the file system.
The server confirms that U's name  appears in the user table and then proceeds to the 
challenge stage.
appears in the user table and then proceeds to the 
challenge stage.
JNFS then generates a 64-bit random number 
R using the SecureRandom class in the 
java.security package. The server creates a challenge
 , records it, and issues
it to U.
 , records it, and issues
it to U.
U receives the challenge and generates a 
response by signing  with its secret key
 with its secret key
 . Using the Digital
Signature Algorithm [12],
it creates a signature
 . Using the Digital
Signature Algorithm [12],
it creates a signature  for
 for  . The user returns
 . The user returns  back to the
server.
 back to the
server.
The JNFS server verifies the response by
using U's public key  to interpret
the signature
 to interpret
the signature  . If
 . If  is indeed a signed version of the challenge
 is indeed a signed version of the challenge  that it had previously issued, the server accepts the
user's credentials, since only U knows the private key
 that it had previously issued, the server accepts the
user's credentials, since only U knows the private key  used to produce the signature from the challenge.
For efficiency, the server grants U a token (
 used to produce the signature from the challenge.
For efficiency, the server grants U a token (  ) it will use on subsequent transactions until it
expires. When
 ) it will use on subsequent transactions until it
expires. When  expires, U repeats
the authentication process to obtain another token.
 expires, U repeats
the authentication process to obtain another token.