[2969] in Kerberos

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

Re: a question about kerberos

daemon@ATHENA.MIT.EDU (Wenbo Mao)
Mon Jan 10 10:54:40 1994

From: Wenbo Mao <wenbo@comms.ee.man.ac.uk>
To: bcn@ISI.EDU (Clifford Neuman)
Date: Mon, 10 Jan 1994 15:18:42 +0000 (GMT)
Cc: kerberos@MIT.EDU
In-Reply-To: <9401071655.AA03914@tgo.isi.edu> from "Clifford Neuman" at Jan 7, 94 08:55:39 am

Dear Cliff,

Thank you very much for answering my question and directing the newest
version of the internet document regarding Kerberos.

About the integrity protection for a kerberos ticket, my comment on
the current specification in RFC 1510 is that the specification is
unclear and potentially dangerous. Reasons are given below. First, let
me recite my understanding obtained from the previous versions:

4) the integrity of the ticket is protected by a checksum which is
retrived from the authenticator.

To it your answer is:
 
> No.  The integrity of the ticket is protected by a checksum that is
> encrypted together with the ticket by the long lived secret key from (1).

After carefully checking the RFC 1510, I do find that there is a place
indicating your answer to some conditional extent. This is the
definition of the CipherText (in page 70):

  CipherText ::=   ENCRYPTED       SEQUENCE {
         confounder[0]   UNTAGGED OCTET STRING(conf_length)     OPTIONAL,
         check[1]        UNTAGGED OCTET STRING(checksum_length) OPTIONAL,
         msg-seq[2]      MsgSequence,
         pad             UNTAGGED OCTET STRING(pad_length) OPTIONAL
  }

where the OPTIONAL item check[1] seems to be the mechanism that you
addressed. However, it seems to me that your claim (or the integrity
mechanism used) may not be fully correct if this check is only
OPTIONAL. In contrast, there are many places in the document which
affirmatively specify a different integrity mechanism. Below I copy
these specification parts which concern the integrity and checksum.

In page 6:

   The integrity of the messages exchanged between principals can also
   be guaranteed using the session key (passed in the ticket and
   contained in the credentials).  This approach provides detection of
   both replay attacks and message stream modification attacks.  It is
   accomplished by generating and transmitting a collision-proof
   checksum (elsewhere called a hash or digest function) of the client's
   message, keyed with the session key.  Privacy and integrity of the
   messages exchanged between principals can be secured by encrypting
   the data to be passed using the session key passed in the ticket, and
   contained in the credentials.

In page 27:

   Once the accompanying ticket has been decrypted, the user-supplied
   checksum in the Authenticator must be verified against the contents
   of the request, and the message rejected if the checksums do not
   match (with an error code of KRB_AP_ERR_MODIFIED) or if the checksum
   is not keyed or not collision-proof (with an error code of
   KRB_AP_ERR_INAPP_CKSUM).

The points in these two paragraphs are clearer if the data
structures of ticket and authenticator are compared.

In page 42:

  5.3.1. Tickets

     A ticket is a record that helps a client authenticate to a service.
     A Ticket contains the following information:

  Ticket ::=                    [APPLICATION 1] SEQUENCE {
                                tkt-vno[0]                   INTEGER,
                                realm[1]                     Realm,
                                sname[2]                     PrincipalName,
                                enc-part[3]                  EncryptedData
  }
  -- Encrypted part of ticket
  EncTicketPart ::=     [APPLICATION 3] SEQUENCE {
                      flags[0]             TicketFlags,
                      key[1]               EncryptionKey,
                      crealm[2]            Realm,
                      cname[3]             PrincipalName,
                      transited[4]         TransitedEncoding,
                      authtime[5]          KerberosTime,
                      starttime[6]         KerberosTime OPTIONAL,
                      endtime[7]           KerberosTime,
                      renew-till[8]        KerberosTime OPTIONAL,
                      caddr[9]             HostAddresses OPTIONAL,
                      authorization-data[10]   AuthorizationData OPTIONAL
  }

There is no checksum in it. In contrast, there is an OPTIONAL one in
an authenticator (in pages 47-48):

  5.3.2. Authenticators

     An authenticator is a record sent with a ticket to a server to
     certify the client's knowledge of the encryption key in the ticket,
     to help the server detect replays, and to help choose a "true session
     key" to use with the particular session.  The encoding is encrypted
     in the ticket's session key shared by the client and the server:

  -- Unencrypted authenticator
  Authenticator ::=    [APPLICATION 2] SEQUENCE    {
               authenticator-vno[0]          INTEGER,
               crealm[1]                     Realm,
               cname[2]                      PrincipalName,
               cksum[3]                      Checksum OPTIONAL,
               cusec[4]                      INTEGER,
               ctime[5]                      KerberosTime,
               subkey[6]                     EncryptionKey OPTIONAL,
               seq-number[7]                 INTEGER OPTIONAL,
               authorization-data[8]         AuthorizationData OPTIONAL
  }


Am I correct to say that this latter mechanism is the integrity
protection that is proposed for the kerberos proper since the
definition of CipherText in page 70 is not a part of the Kerberos and
hence is optional? If so, we may see the following scenario: the
ckecksum which supposes to protect the integrity of a key is protected
by the key.

May be I have missed something. I would be grateful for your pointing
them out for me.

Kindest regards,
Wenbo

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