[2833] in Kerberos

home help back first fref pref prev next nref lref last post

Kerberos non-repudiation idea

daemon@ATHENA.MIT.EDU (Donald T. Davis)
Sun Oct 3 00:41:49 1993

From: "Donald T. Davis" <don@GZA.COM>
Date: Sun, 3 Oct 93 00:22:16 EDT
To: miller@suite.com
Cc: kerberos@MIT.EDU


jim_miller@suite.com wrote:

   Don Davis and Ralph Swick from MIT described a private-key authentication  
   mechanism that, with some modifications, I think can provide a practical  
   private-key non-repudiation mechanism that can be built into Kerberos 5.

much as i would like to see private-key signatures gain acceptance,
i think there is no chance of krbv5 incorporating a signature mechanism,
just because v5 is a done deal. further, i don't think this notary
function should be part of the kerberos server's responsibility.

   Although interesting, this mechanism is not very efficient.
   Alice needs to send every message she receives to the Authentication
   server for translation, verification, and re-encryption.

your solution for this inefficiency is, i believe, natural and correct:
only the message-checksum should be encrypted. we thought that this
detail was self-evident, and so left it out of our paper.
other efficiency improvements are possible, also.
of course, if bob wants to send his message privately to alice, and
without setting up a network connection with her, he'll still have to
accept the inefficiency of bulk-encryption.

   My proposed additions involve a mechanism for obtaining a private-key
   certificate from the Authentication server (could be built into kinit)...

actually, kinit already can be the mechanism for certificates' issuance,
because certificates are just long-lived tgts, anyway.

   The format of the private-key certificate could be something like:
   certificate = {nonce,
		  time issued,
		  lifetime,
		  certificate key,
		  principal name} Authentication server's private key
   On the message sending side, Kerberos code would XOR the MD4 (or MD5) hash
   of the principal's message with the nonce present in his private-key
   certificate, and then encrypt the result with the key contained in the
   certificate. The result will be called the message signature:
      msg signature = {msg hash XOR certificate nonce}certificate key
    
here, your "nonce" seems to offer little if any extra security; it's really
just a key for an extra layer of vernam encryption under the des layer
this extra layer would only be useful if each "nonce" and certificate were
used only once, but if you're worried about cryptanalysis, triple-key des
would be more effective insurance.
in the literature (Gong, Saltzer, et al, in SOSP '89), this one-time-pad trick
has been called a "confounder;" it was briefly considered for krb v5 tickets,
when v5 was being designed.

   The message signature and the principal's certificate can be placed in the  
   authenticator sent with the message.  (No need to publish certificates in  
   Directories.)

for email-type applications, this works, but for others, directories will still
be valuable.

   The recipient of the message will continue to use standard Kerberos
   mechanisms to authenticate messages.  However, since this is a
   non-repudiable message, the recipient must also verify that the
   message signature is valid.
   ...
   As with tickets, certificates could be sent with the first non-repudiable  
   message to a given destination.  Or it could be sent with every  
   non-repudiable message, thus relieving the destination process from
   having to manage sender's certificates.

agreed. 

   Problem:  If an attacker obtains the sender's credentials, then the
   recipient is in big trouble. The certificate she archived with the sender's
   message has been potentially compromised. The sender can now claim that
   the attacker sent the message.
   To help with this problem, we can alter the message signature validation step
   described earlier.  Instead of simply verifying the message signature and
   returning a yea or nay, the Authentication server will also return an
   encrypted *something* that indicates that a given message signature was
   successfully validated at a time when the certificate was believed to be
   secure.  Let's call this *something* a "validated message signature":
   validated message signature = 
	   {random,
	    timestamp,
	    original message signature,
	    sender's certificate,
	    checksum
	   }Authentication server's private key
   All that the recipient would need to archive would be the original message
   and the validated message signature.
   It is now possible for a recipient to re-authenticate the origin of an
   archived message, even after the sender's certificate has become compromised.

it's not as simple as this, because the recipient needs to know that this
archival signature is itself authentic, because its contents are hidden from
the recipient. this is straightforward to fix, though.

   One problem with the private-key non-repudiation mechanism I've been
   describing is that everybody's archives of validated message signatures
   become (potentially) compromised if the Authentication server's private
   key becomes compromised.
   Here are some possible solutions to this problem.
   1) Extend the certificate creation protocol to enable an application to
   acquire a second private-key certificate from an Authentication server
   higher up in the Authentication server hierarchy.  The application can
   then use this second certificate to periodically send itself a
   non-repudiable message that contains a hash of the current contents
   of its message archive.  The validated message signature the application
   receives back from the remote Authentication server can be used to prove
   the integrity of the application's message archive (at a given time),
   even if the local Authentication server becomes compromised.
   2) Periodically hash your message archive and send the hash to Bellcore's
   timestamping service.
   In either case, it might be sufficient to periodically hash only the
   incremental changes to your message archive, rather than the entire message
   archive.

this sounds right to me, though it also sounds burdensome.

   Now for the 64 dollar questions...
   Is what I have just described really secure?  Does it seem useful?

your efficiency improvements are ones i knew about already, so i certainly
believe they're secure. i don't believe the "nonce" and special certificate
format are necessary. your signature archive mechanism is similar enough to
one that i devised (since writing the paper) that i believe it's right, too.
of your ideas, my favorite is the signed hash of the message archive;
i had believed that a compromised translator key would inevitably invalidate
old signatures.
					-don davis
					 openvision/geer zolot associates
					 1 main st. cambridge, ma 02142
					 (617) 374-3713 x228

home help back first fref pref prev next nref lref last post