<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
     which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc PUBLIC "-//IETF//DTD RFC 2629//EN" "rfc2629.dtd" [
<!-- One method to get references from the online citation libraries.
     There has to be one entity for each item to be referenced. 
     An alternate method (rfc include) is described in the references. -->
<!ENTITY RFC2307 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2307.xml">
<!ENTITY RFC3961 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3961.xml">
<!ENTITY RFC3962 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3962.xml">
<!ENTITY RFC3713 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3713.xml">
<!ENTITY RFC4120 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4120.xml">
<!ENTITY RFC1510 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.1510.xml">
<!ENTITY RFC4559 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4559.xml">
<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC2629 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2629.xml">
<!ENTITY RFC3552 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3552.xml">
<!ENTITY RFC2898 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2898.xml">
<!ENTITY RFC4493 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4493.xml">
<!ENTITY I-D.narten-iana-considerations-rfc2434bis SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.narten-iana-considerations-rfc2434bis.xml">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs), 
     please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds might want to use.
     (Here they are set differently than their defaults in xml2rfc v1.32) -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space 
     (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<rfc category="std" docName="draft-ietf-krb-wg-cammac-03"
     ipr="trust200902" updates="4120">
  <!-- category values: std, bcp, info, exp, and historic
     ipr values: full3667, noModification3667, noDerivatives3667
     you can add the attributes updates="NNNN" and obsoletes="NNNN" 
     they will automatically be output with "(if approved)" -->

  <!-- ***** FRONT MATTER ***** -->

  <front>
    <!-- The abbreviated title is used in the page header - it is only necessary if the 
         full title is longer than 39 characters -->

    <title abbrev="Container Authenticated by Multiple MACs">
      Kerberos Authorization Data Container Authenticated by Multiple
      MACs
    </title>

    <!-- add 'role="editor"' below for the editors if appropriate -->

    <!-- Another author who claims to be an editor -->

    <author fullname="Simo Sorce" initials="S.S." role="editor"
            surname="Sorce">
      <organization>Red Hat</organization>

      <address>
        <email>ssorce@redhat.com</email>

        <!-- uri and facsimile elements may also be added -->
      </address>
    </author>

    <author fullname="Tom Yu" initials="T.Y." role="editor" surname="Yu">
      <organization>MIT Kerberos Consortium</organization>

      <address>
        <email>tlyu@mit.edu</email>

        <!-- uri and facsimile elements may also be added -->
      </address>
    </author>

    <author fullname="Thomas Hardjono" initials="T.H." role="editor"
            surname="Hardjono">
      <organization>MIT Kerberos Consortium</organization>

      <address>
        <email>hardjono@mit.edu</email>

        <!-- uri and facsimile elements may also be added -->
      </address>
    </author>

    <date month="Oct" year="2012" />

    <!-- If the month and year are both specified and are the current ones, xml2rfc will fill 
         in the current day for you. If only the current year is specified, xml2rfc will fill 
	 in the current day and month for you. If the year is not the current one, it is 
	 necessary to specify at least a month (xml2rfc assumes day="1" if not specified for the 
	 purpose of calculating the expiry date).  With drafts it is normally sufficient to 
	 specify just the year. -->

    <!-- Meta-data Declarations -->

    <area>Network Working Group</area>

    <workgroup>Internet Engineering Task Force</workgroup>

    <!-- WG name at the upperleft corner of the doc,
         IETF is fine for individual submissions.  
	 If this element is not present, the default is "Network Working Group",
         which is used by the RFC Editor as a nod to the history of the IETF. -->

    <keyword>Kerberos</keyword>

    <!-- Keywords will be incorporated into HTML output
         files in a meta tag but they have no effect on text or nroff
         output. If you submit your draft to the RFC Editor, the
         keywords will be used for the search engine. -->

    <abstract>
      <t>
	Abstract: This document specifies a Kerberos Authorization
	Data container that supersedes AD-KDC-ISSUED. It allows for
	multiple Message Authentication Codes (MACs) or signatures to
	authenticate the contained Authorization Data elements.
      </t>
    </abstract>
  </front>

  <middle>
    <section title="Introduction">
      <t>
	This document specifies a new Authorization Data container for
	Kerberos, called AD-CAMMAC (Container Authenticated by
	Multiple MACs), that supersedes AD-KDC-ISSUED. The container
	allows both the receiving application service and the Key
	Distribution Center (KDC) itself to verify the authenticity of
	the contained authorization data. The AD-CAMMAC container can
	also include additional verifiers that "trusted services" can
	use to verify the contained authorization data.
      </t>
    </section>

    <section title="Requirements Language">
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
      document are to be interpreted as described in <xref
      target="RFC2119">RFC 2119</xref>.</t>
    </section>

    <section title="Validation">
      <t>
	Kerberos ticket authorization data are highly sensitive and
	must be validated to insure that no tampering has
	occurred. Although
	authorization data are in the encrypted part of a Kerberos
	ticket and therefore have their integrity protected by the
	ticket encryption, clients can request that KDCs insert
	potentially arbitrary authorization data into tickets on their
	behalf. The Kerberos protocol specifications allow this client
	behavior
	because the originally envisioned usage of authorization data
	was to serve as restrictions on the client's
	privileges. Services that need to interpret specific
	authorization data as granting increased privileges need some
	way to ensure that the KDC originated those authorization
	data.
      </t>

      <t> In order to validate any information, the receiving
      application service needs to be
      able to cryptographically verify the data. This is done by introducing a
      new AuthorizationData element called AD-CAMMAC that contains enough
      information to bind the contents to a principal in a way that a receiving
      application service can verify autonomously without further
      contact with the KDC.</t>

      <t>The following information is needed:
        <list style="symbols">
          <t>The KDC MAC</t>

          <t>The Service MAC</t>

          <t>Optional Trusted Service MAC</t>
        </list>
      </t>

      <t>The KDC MAC is required to allow the KDC to validate the data
      without needing to recompute the contents at every Ticket
      Granting Service (TGS) request.</t>

      <t>The Service MAC is required so that the Service can verify that
      the authorization data has been validated by the KDC.</t>

      <t>The Trusted Service MAC is useful to verify the authenticity of
      the contents on the same host, when the data is received by a less
      trusted service and passed to a more trusted service on the same host
      without the need for additional round trips to the KDC.</t>

      <t>The ad-type for AD-CAMMAC is (TBD).</t>

    </section>

    <section title="Encoding">
      <t>
	The Kerberos protocol is defined in <xref target="RFC4120"/>
	using Abstract Syntax Notation One (ASN.1) <xref
	target="X.680"/><xref target="X.690"/>. As such, this
	specification also uses the ASN.1 syntax for specifying both
	the abstract layout of the AD-CAMMAC attributes, as well as
	its encoding.
      </t>

      <section title="AD-CAMMAC">
        <figure>
          <preamble></preamble>

          <artwork><![CDATA[
   KerberosV5CAMMAC DEFINITIONS EXPLICIT TAGS ::= BEGIN

   AD-CAMMAC                   ::= SEQUENCE {
         elements              [0] AuthorizationData,
         kdc-verifier          [1] Verifier-MAC,
         svc-verifier          [2] Verifier-MAC OPTIONAL,
         other-verifiers       [3] SEQUENCE OF Verifier
   }

   Verifier             ::= CHOICE {
         mac            Verifier-MAC,
         ...
   }

   Verifier-MAC         ::= SEQUENCE {
         identifier     [0] PrincipalName OPTIONAL,
         kvno           [1] UInt32,
         enctype        [2] Int32,
         mac            [3] Checksum
   }

   END

   elements
      A sequence of authorization data elements issued by the
      KDC. These elements are the authorization data that the verifier
      fields authenticate.

   Verifier
      A CHOICE type that currently contains only one alternative:
      Verifier-MAC. Future extensions might add support for public-key
      signatures.

   Verifier-MAC
      Contains a MAC computed over the encoding of the
      AuthorizationData value in the elements field of the
      AD-CAMMAC. The identifier, kvno, and enctype fields help the
      recipient locate the key required for verifying the MAC.

   kdc-verifier
      A Verifier-MAC where the key is the TGS key. The checksum type
      is the mandatory checksum type for the TGS key.

   svc-verifier
      A Verifier-MAC where the key is the long-term key of the service
      for which the ticket is issued. The checksum type is the
      mandatory checksum type for the long-term key of the
      service. This field MUST be present if the service principal of
      the ticket is not the local TGS, including when the ticket is a
      cross-realm TGT.

   other-verifiers
      A sequence of additional verifiers. In each additional
      Verifier-MAC, the key is the long-term key of the principal name
      specified in the identifier field. The PrincipalName MUST be
      present and be a valid principal in the realm. KDCs MAY add one
      or more 'trusted service' verifiers. Unless otherwise
      administratively configured, the 'trusted service' SHOULD be
      found by replacing the service identifier component of the
      principal name of the svc-verifier with 'host'. The checksum
      type is the mandatory checksum type for the long-term key (which
      one?) of the principal. The key usage is TBD.

      	]]></artwork>

          <postamble></postamble>
        </figure>
      </section>
    </section>

    <section title="Assigned numbers">
      <t>TBD</t>
    </section>

    <!-- Possibly a 'Contributors' section ... -->

    <section anchor="IANA" title="IANA Considerations">
      <t>TBD.</t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>
	Although authorization data are generally conveyed within the
	encrypted part of a ticket and are thereby protected by the
	existing encryption methods on the ticket, some authorization
	data requires the additional protection provided by the
	CAMMAC.
      </t>
      <t>
	Extracting a CAMMAC from a ticket for use as a credential
	removes it from the context of the ticket. In the general
	case, this could turn it into a bearer token, with all of the
	associated security implications. Also, the CAMMAC does not
	itself contain sufficient information to identify the client
	principal. Therefore, application protocols that rely on
	extracted CAMMACs might need to duplicate a substantial
	portion of the ticket contents and include that duplicated
	information in the authorization data contained within the
	CAMMAC.
      </t>
      <t>
	A KDC that needs to verify the contents of a CAMMAC in a
	non-TGS service ticket MUST ensure that the CAMMAC in the
	ticket is the same one that it inserted into the ticket. A
	malicious service could substitute legitimate CAMMACs from
	other tickets that it has received (but not fabricate
	completely new CAMMACs) into a service ticket. A CAMMAC by
	itself does not contain sufficient information to accomplish
	this.
      </t>
    </section>


    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>TBD.</t>
    </section>
  </middle>

  <!--  *****BACK MATTER ***** -->

  <back>
    <!-- References split into informative and normative -->

    <!-- There are 2 ways to insert reference entries from the citation libraries:
     1. define an ENTITY at the top, and use "ampersand character"RFC2629; here (as shown)
     2. simply use a PI "less than character"?rfc include="reference.RFC.2119.xml"?> here
        (for I-Ds: include="reference.I-D.narten-iana-considerations-rfc2434bis.xml")

     Both are cited textually in the same manner: by using xref elements.
     If you use the PI option, xml2rfc will, by default, try to find included files in the same
     directory as the including file. You can also define the XML_LIBRARY environment variable
     with a value containing a set of directories to search.  These can be either in the local
     filing system or remote ones accessed by http (http://domain/dir/... ).-->

    <references title="Normative References">
      <!--?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml"?-->

      &RFC4120;

      &RFC3961;

      &RFC3962;

      <reference anchor="X.680">
        <front>
          <title>
	    Information technology -- Abstract Syntax Notation One
	    (ASN.1): Specification of basic notation -- ITU-T
	    Recommendation X.680 (ISO/IEC International Standard
	    8824-1:2008)
	  </title>

          <author surname="ISO">
            <organization>ISO</organization>
          </author>

          <date year="2008" />
        </front>
      </reference>

      <reference anchor="X.690">
        <front>
          <title>
	    Information technology -- ASN.1 encoding rules:
	    Specification of Basic Encoding Rules (BER), Canonical
	    Encoding Rules (CER) and Distinguished Encoding Rules
	    (DER) -- ITU-T Recommendation X.690 (ISO/IEC International
	    Standard 8825-1:2008)
	  </title>

          <author surname="ISO">
            <organization>ISO</organization>
          </author>

          <date year="1997" />
        </front>
      </reference>

    </references>

    <references title="Informative References">
      <!-- Here we use entities that we defined at the beginning. -->

      &RFC2119;

      &RFC3552;

      &RFC1510;

      <reference anchor="MIT-Athena">
        <!-- the following is the minimum to make xml2rfc happy -->

        <front>
          <title>Kerberos: An Authentication Service for Open Network Systems.
          In Proceedings of the Winter 1988 Usenix Conference.
          February.</title>

          <author initials="J." surname="Steiner">
            <organization></organization>
          </author>

          <author initials="B." surname="Neuman">
            <organization></organization>
          </author>

          <author initials="J." surname="Schiller">
            <organization></organization>
          </author>

          <date year="1988" />
        </front>
      </reference>
    </references>

    <section anchor="app-additional" title="Additional Stuff">
      <t>This becomes an Appendix.</t>
    </section>

    <!-- Change Log

v00 2012-02-08  EBD   Initial version after the split of generalized-pac

  -->
  </back>
</rfc>
