One document matched: draft-ietf-kitten-gssapi-naming-exts-15.xml


<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc toc="yes" ?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<?rfc tocindent="no" ?>
<?rfc autobreaks="no" ?>
<?rfc symrefs="yes" ?>
<?rfc sortrefs="yes"?>
<?rfc iprnotified="no" ?>
<?rfc strict="yes" ?>

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
    <!ENTITY rfc2119 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml'>
    <!ENTITY rfc2743 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2743.xml'>
    <!ENTITY rfc2744 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2744.xml'>
    <!ENTITY rfc3629 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3629.xml'>
    <!ENTITY rfc4556 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4556.xml'>
    <!ENTITY rfc4768 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4768.xml'>
    <!ENTITY rfc5587 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5587.xml'>
    <!ENTITY ascii PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml2/_reference.ANSI.X3-4.1986.xml'>
    <!ENTITY gssapi-naming-exts PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-kitten-gssapi-naming-exts'>
    <!ENTITY saml-core PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml2/reference.OASIS.saml-core-2.0-os.xml'>
    <!ENTITY saml-bindings PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml2/reference.OASIS.saml-bindings-2.0-os.xml'>
]>


<rfc category="std" docName="draft-ietf-kitten-gssapi-naming-exts-15"
     ipr="pre5378Trust200902">
  <front>
    <title abbrev="GSS-API Naming Extensions">GSS-API Naming
    Extensions</title>

    <author fullname="Nicolas Williams" initials="N." surname="Williams">
      <organization>Cryptonector, LLC</organization>

      <address>
        <email>nico@cryptonector.com</email>
      </address>
    </author>

    <author fullname="Leif Johansson" initials="L." surname="Johansson">
      <organization abbrev="SUNET">Swedish University Network</organization>

      <address>
        <postal>
          <street>Thulegatan 11</street>

          <city>Stockholm</city>

          <country>Sweden</country>
        </postal>

        <email>leifj@sunet.se</email>

        <uri>http://www.sunet.se</uri>
      </address>
    </author>

    <author fullname="Sam Hartman" initials="S. " surname="Hartman">
      <organization>Painless Security</organization>

      <address>
        <postal>
          <street></street>

          <city></city>

          <region></region>

          <code></code>

          <country></country>
        </postal>

        <phone></phone>

        <facsimile></facsimile>

        <email>hartmans-ietf@mit.edu</email>

        <uri></uri>
      </address>
    </author>

    <author fullname="Simon Josefsson" initials="S. " surname="Josefsson">
      <organization>SJD AB</organization>

      <address>
        <postal>
          <street>Hagagatan 24</street>

          <city>Stockholm</city>

          <code>113 47</code>

          <country>SE</country>
        </postal>

        <email>simon@josefsson.org</email>

        <uri>http://josefsson.org/</uri>
      </address>
    </author>

    <date day="31" month="May" year="2012" />

    <area>Security</area>

    <workgroup>KITTEN WORKING GROUP</workgroup>

    <keyword>Internet-Draft</keyword>

    <abstract>
      <t>The Generic Security Services API (GSS-API) provides a simple naming
      architecture that supports name-based authorization. This document
      introduces new APIs that extend the GSS-API naming model to support name
      attribute transfer between GSS-API peers.</t>
    </abstract>
  </front>

  <middle>
    <section title="Conventions used in this document">
      <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"></xref> .</t>
    </section>

    <section title="Introduction">
      <t>As described in <xref target="RFC4768"></xref> the GSS-API's naming
      architecture suffers from certain limitations. This document defines
      concrete GSS-API extensions.</t>

      <t>A number of extensions to the GSS-API <xref target="RFC2743"></xref>
      and its C Bindings <xref target="RFC2744"></xref> are described herein.
      The goal is to make information modeled as "name attributes" available
      to applications. Such information MAY for instance be used by
      applications to make authorization-decisions. For example, Kerberos V
      authorization data elements, both in their raw forms, as well as mapped
      to more useful value types, can be made available to GSS-API
      applications through these interfaces.</t>

      <t>The model is that GSS names have attributes. The attributes of a name
      may be authenticated (e.g., an X509 attribute certificate or signed SAML
      attribute assertion), or may have been set on a GSS name for the purpose
      of locally "asserting" the attribute during credential acquisition or
      security context exchange. Name attributes' values are network
      representations thereof (e.g., the actual value octets of the contents
      of an X.509 certificate extension, for example) and are intended to be
      useful for constructing portable access control facilities. Applications
      may often require language- or platform-specific data types, rather than
      network representations of name attributes, so a function is provided to
      obtain objects of such types associated with names and name
      attributes.</t>

      <t>Future updates of this specification may involve adding an attribute
      namespace for attributes that only have application-specific semantics.
      Note that mechanisms will still need to know how to transport such
      attributes. The IETF may also wish to add functions by which to inquire
      whether a mechanism(s) understands a given attribute name or namespace,
      and to list which attributes or attribute namespaces a mechanism
      understands. Finally, the IETF may want to consider adding a function by
      which to determine the name of the issuer of a name attribute.</t>
    </section>

    <section title="Name Attribute Authenticity">
      <t>An attribute is 'authenticated' if and only if there is a secure association
      between the attribute (and its values) and the trusted source of the
      peer credential. Examples of authenticated attributes are (any part of)
      the signed portion of an X.509 certificate or AD-KDCIssued
      authorization-data elements in Kerberos V Tickets provided of course
      that the authenticity of the respective security associations (e.g.,
      signatures) have been verified.</t>

      <t>Note that the fact that an attribute is authenticated does not imply
      anything about the semantics of the attribute nor that the trusted
      credential source was authorized to assert the attribute. Such
      interpretations SHOULD be the result of applying local policy to the
      attribute.</t>

      <t>An un-authenticated attribute is called <spanx style="emph">asserted</spanx>
      in what follows. This is not to be confused with other uses of the word
      asserted or assertion such as "SAML attribute assertion", the attributes of
      which may be authenticated in the sense of this document for instance if
      the SAML attribute assertion was signed by a key trusted by the
      peer.</t>
    </section>

    <section title="Name Attributes/Values as ACL Subjects">
      <t>To facilitate the development of portable applications that make use
      of name attributes to construct and evaluate portable ACLs the GSS-API
      makes name attribute values available in canonical network encodings
      thereof.</t>
    </section>

    <section title="Naming Contexts">
      <t>Several factors influence the context in which a name attribute is
      interpreted. One is the trust context.</t>

      <t>As discussed previously, applications apply local policy to determine
      whether a particular peer credential issuer is trusted to make a given
      statement. Different GSS-API mechanisms and deployments have different
      trust models surrounding attributes they provide about a name.</t>

      <t>For example, Kerberos deployments in the enterprise typically trust a
      KDC to make any statement about principals in a realm. This includes
      attributes such as group membership.</t>

      <t>In contrast, in a federated SAML environment, the identity provider
      typically exists in a different organization than the acceptor. In this
      case, the set of group memberships or entitlements that the IDP is
      permitted to make needs to be filtered by the policy of the acceptor and
      federation.</t>

      <t>So even an attribute containing the same information such as e-mail
      address would need to be treated differently by the application in the
      context of an enterprise deployment from the context of a
      federation.</t>

      <t>Another aspect related to trust is the role of the credential issuer
          in providing the attribute. Consider Kerberos PKINIT <xref
              target='RFC4556'/>. In this
      protocol, a public key and associated certificate are used to
      authenticate to a Kerberos KDC. Consider how attributes related to a
      pkinit certificate should be made available in GSS-API authentications
      based on the Kerberos ticket. In some deployments the certificate may be
      fully trusted; in including the certificate information in the ticket,
      the KDC permits the acceptor to trust the information in the certificate
      just as if the KDC itself had made these statements. In other
      deployments, the KDC may have authorized a hash of the certificate
      without evaluating the content of the certificate or generally trusting
      the issuing certification authority. In this case, if the certificate were
      included in the issued ticket, the KDC would only be making the
      statement that the certificate was used in the authentication. This
      statement would be authenticated, but would not imply that the KDC
      stated particular attributes of the certificate described the
      initiator.</t>

      <t>Another aspect of context is encoding of the attribute information.
          An attribute containing an ASCII <xref target='ANSI.X3-4.1986'/> or UTF-8 <xref target='RFC3629'/> version of an e-mail address
      could not be interpreted the same as a ASN.1 Distinguished Encoding
      Rules e-mail address in a certificate.</t>

      <t>All of these contextual aspects of a name attribute affect whether
      two attributes can be treated the same by an application and thus
      whether they should be considered the same name attribute. In the
      GSS-API naming extensions, attributes that have different contexts MUST
      have different names so they can be distinguished by applications. As an
      unfortunate consequence of this requirement, multiple attribute names
      will exist for the same basic information. That is, there is no single
      attribute name for the e-mail address of an initiator. Other aspects of
      how mechanisms describe information about subjects would already make
      this true. For example, some mechanisms use OIDs to name attributes;
      others use URIs.</t>

      <t>Local implementations or platforms are likely to have sufficient
      policy and information to know when contexts can be treated as the same.
      For example the GSS-API implementation may know that a particular
      certification authority can be trusted in the context of a pkinit
      authentication. The local implementation may have sufficient policy to
      know that a particular credential issuer is trusted to make a given
      statement. In order to take advantage of this local knowledge within the
      GSS-API implementation, naming extensions support the concept of local
      attributes in addition to standard attributes. For example, an
      implementation might provide a local attribute for e-mail address. The
      implementation would specify the encoding and representation of this
      attribute; mechanism-specific standards attributes would be re-encoded
      if necessary to meet this representation. Only e-mail addresses in
      contexts that meet the requirements of local policy would be mapped into
      this local attribute.</t>

      <t>Such local attributes inherently expose a tradeoff between
      interoperability and usability. Using a local attribute in an
      application requires knowledge of the local implementation. However
      using a standardized attribute in an application requires more knowledge
      of policy and more validation logic in the application. Sharing this
      logic in the local platform provides more consistency across
      applications as well as reducing implementation costs. Both options are
      needed.</t>
    </section>

    <section title="Representation of Attribute Names">
      <t>Different underlying mechanisms (e.g., SAML or X.509 certificates)
      provide different representations for the names of their attribute. In
      X.509 certificates, most objects are named by object identifiers (OIDs).
      The type of object (certificate extension, name constraint,
      keyPurposeID, etc) along with the OID is sufficient to identify the
      attribute. By contrast, according to Section 8.2 and 2.7.3.1 of <xref
      target="OASIS.saml-core-2.0-os"></xref>, the name of an attribute has
      two parts. The first is a URI describing the format of the name. The
      second part, whose form depends on the format URI, is the actual name.
      In other cases an attribute might represent a certificate that plays
      some particular role in a GSS-API mechanism; such attributes might have
      a simple mechanism-defined name.</t>

      <t>Attribute names MUST support multiple components. If there are more
      than one component in an attribute name, the more significant components
      define the semantics of the less significant components.</t>

      <t>Attribute names are represented as OCTET STRING elements in the API
      described below. These attribute names have syntax and semantics that
      are understood by the application and by the lower-layer implementations
      (some of which are described below).</t>

      <t>If an attribute name contains a space (ASCII 0x20), the first space
      separates the most significant or primary component of the name from the
      remainder. We may refer to the primary component of the attribute
      name as the attribute name's "prefix". If there is no space, the
      primary component is the entire name, otherwise it defines the
      interpretation of the remainder of the name.s</t>

      <t>If the primary component contains an ASCII : (0x3a), then the primary
      component is a URI. Otherwise, the attribute is a local attribute and
      the primary component has meaning to the implementation of GSS-API or to
      the specific configuration of the application. Local attribute
      names with an at-sign ('@') in them are reserved for future allocation by
      the IETF.</t>

      <t>Since attribute names are split at the first space into prefix
      and suffix, there is a potential for ambiguity if a mechanism
      blindly passes through a name attribute whose name it does not
      understand.  In order to prevent such ambiguities the mechanism
      MUST always prefix raw name attributes with a prefix that reflects
      the context of the attribute.</t>

      <t>Local attribute names under the control of an administrator or a
      sufficiently trusted part of the platform need not have a prefix to
      describe context.</t>
    </section>

    <section title="API">
      <section title="SET OF OCTET STRING">
        <t>The construct SET OF OCTET STRING occurs once in <xref
        target="RFC2743">RFC 2743</xref> where it is used to represent a set
        of status strings in the GSS_Display_status call. The Global Grid
        Forum has defined SET OF OCTET STRING as a buffer-set type in <xref
        target="GFD.024">GFD.024</xref> which also provides one API for memory
        management of these structures. The normative reference to <xref
        target="GFD.024">GFD.024</xref> is for the buffer set functions
        defined in section 2.5 and the associated buffer set C types defined
        in section 6 (namely gss_buffer_set_desc, gss_buffer_set_t,
        gss_create_empty_buffer_set, gss_add_buffer_set_member,
        gss_release_buffer_set). Nothing else from GFD.024 is required to
        implement this document. In particular, that document specify changes
        in behaviour existing GSS-API functions in section 3: implementing
        those changes are not required to implement this document. Any
        implementation of SET OF OCTET STRING for use by this specification
        MUST preserve order.</t>
      </section>

      <section title="Const types">
        <t>The C bindings for the new APIs uses some types from <xref
        target="RFC5587"></xref> to avoid issues with the use of "const". The
        normative reference to <xref target="RFC5587"></xref> is for the C
        types specified in Figure 1 of 3.4.6, nothing else from that document
        is required to implement this document.</t>
      </section>

      <section title="GSS_Display_name_ext()">
        <t>Inputs: <vspace blankLines="1" /> <list style="symbols">
            <t>name INTERNAL NAME,</t>

            <t>display_as_name_type OBJECT IDENTIFIER</t>
          </list></t>

        <t>Outputs: <vspace blankLines="1" /> <list style="symbols">
            <t>major_status INTEGER,</t>

            <t>minor_status INTEGER,</t>

            <t>display_name OCTET STRING -- caller must release with
            GSS_Release_buffer()</t>
          </list></t>

        <t>Return major_status codes: <list style="symbols">
            <t>GSS_S_COMPLETE indicates no error.</t>

            <t>GSS_S_UNAVAILABLE indicates that the given name could not be
            displayed using the syntax of the given name type.</t>

            <t>GSS_S_FAILURE indicates a general error.</t>
          </list></t>

        <t>This function displays a given name using the given name syntax, if
        possible. This operation may require mapping Mechanism Names (MNs) to
        generic name syntaxes or generic name syntaxes to mechanism-specific
        name syntaxes; such mappings may not always be feasible and MAY be
        inexact or lossy, therefore this function may fail.</t>

        <section title="C-Bindings">
          <t>The display_name buffer is de-allocated by the caller with
          gss_release_buffer.</t>

          <figure>
            <artwork><![CDATA[
OM_uint32 gss_display_name_ext(
  OM_uint32                     *minor_status,
  gss_const_name_t              name,
  gss_const_OID                 display_as_name_type,
  gss_buffer_t                  display_name
);
		    			]]></artwork>
          </figure>
        </section>
      </section>

      <section title="GSS_Inquire_name()">
        <t>Inputs: <vspace blankLines="1" /> <list style="symbols">
            <t>name INTERNAL NAME</t>
          </list></t>

        <t>Outputs: <vspace blankLines="1" /> <list style="symbols">
            <t>major_status INTEGER,</t>

            <t>minor_status INTEGER,</t>

            <t>name_is_MN BOOLEAN,</t>

            <t>mn_mech OBJECT IDENTIFIER,</t>

            <t>attrs SET OF OCTET STRING -- the caller is responsible for
            de-allocating memory using GSS_Release_buffer_set</t>
          </list></t>

        <t>Return major_status codes: <list style="symbols">
            <t>GSS_S_COMPLETE indicates no error.</t>

            <t>GSS_S_FAILURE indicates a general error.</t>
          </list></t>

        <t>This function outputs the set of attributes of a name. It also
        indicates if a given name is an Mechanism Name (MN) or not and, if it
        is, what mechanism it's an MN of.</t>

        <section title="C-Bindings">
          <figure>
            <artwork><![CDATA[
OM_uint32 gss_inquire_name(
  OM_uint32                     *minor_status,
  gss_const_name_t              name,
  int                           *name_is_MN,
  gss_OID                       *MN_mech,
  gss_buffer_set_t              *attrs
);
			    		]]></artwork>
          </figure>

          <t>The gss_buffer_set_t is used here as the C representation of SET
          OF OCTET STRING. This type is used to represent a set of attributes
          and is a NULL-terminated array of gss_buffer_t. The gss_buffer_set_t
          type and associated API is defined in <xref
          target="GFD.024">GFD.024</xref>. The "attrs" buffer set is
          de-allocated by the caller using gss_release_buffer_set().</t>
        </section>
      </section>

      <section title="GSS_Get_name_attribute()">
        <t>Inputs: <vspace blankLines="1" /> <list style="symbols">
            <t>name INTERNAL NAME,</t>

            <t>attr OCTET STRING</t>
          </list></t>

        <t>Outputs: <vspace blankLines="1" /> <list style="symbols">
            <t>major_status INTEGER,</t>

            <t>minor_status INTEGER,</t>

            <t>authenticated BOOLEAN, -- TRUE if and only if authenticated by the trusted
            peer credential source.</t>

            <t>complete BOOLEAN -- TRUE if and only if this represents a complete set of
            values for the name.</t>

            <t>values SET OF OCTET STRING -- the caller is responsible for
            de-allocating memory using GSS_Release_buffer_set.</t>

            <t>display_values SET OF OCTET STRING -- the caller is responsible
            for de-allocating memory using GSS_Release_buffer_set</t>
          </list></t>

        <t>Return major_status codes: <list style="symbols">
            <t>GSS_S_COMPLETE indicates no error.</t>

            <t>GSS_S_UNAVAILABLE indicates that the given attribute OID is not
            known or set.</t>

            <t>GSS_S_FAILURE indicates a general error.</t>
          </list></t>

        <t>This function outputs the value(s) associated with a given GSS name
        object for a given name attribute.</t>

        <t>The complete flag denotes that (if TRUE) the set of values
        represents a complete set of values for this name. The peer being an
        authoritative source of information for this attribute is a sufficient
        condition for the complete flag to be set by the peer.</t>

        <t>In the federated case when several peers may hold some of the
        attributes about a name this flag may be highly dangerous and SHOULD
        NOT be used.</t>

        <t>NOTE: This function relies on the GSS-API notion of "SET OF"
        allowing for order preservation; this has been discussed on the KITTEN
        WG mailing list and the consensus seems to be that, indeed, that was
        always the intention. It should be noted however that the order
        presented does not always reflect an underlying order of the mechanism
        specific source of the attribute values.</t>

        <section title="C-Bindings">
          <t>The C-bindings of GSS_Get_name_attribute() requires one function
          call per-attribute value, for multi-valued name attributes. This is
          done by using a single gss_buffer_t for each value and an
          input/output integer parameter to distinguish initial and subsequent
          calls and to indicate when all values have been obtained.</t>

          <t>The 'more' input/output parameter should point to an integer
          variable whose value, on first call to gss_get_name_attribute() MUST
          be -1, and whose value upon function call return will be non-zero to
          indicate that additional values remain, or zero to indicate that no
          values remain. The caller should not modify this parameter after the
          initial call. The status of the complete and authenticated flags
          MUST NOT change between multiple calls to iterate over values for an
          attribute.</t>

          <t>The output buffers "value" and "display_value" are de-allocated
          by the caller using gss_release_buffer().</t>

          <figure>
            <artwork><![CDATA[
OM_uint32 gss_get_name_attribute(
  OM_uint32                     *minor_status,
  gss_const_name_t              name,
  gss_const_buffer_t            attr,
  int                           *authenticated,
  int                           *complete,
  gss_buffer_t                  value,
  gss_buffer_t                  display_value,
  int                           *more
);
				    ]]></artwork>
          </figure>
        </section>
      </section>

      <section title="GSS_Set_name_attribute()">
        <t>Inputs: <vspace blankLines="1" /> <list style="symbols">
            <t>name INTERNAL NAME,</t>

            <t>complete BOOLEAN, -- TRUE if and only if this represents a complete set of
            values for the name.</t>

            <t>attr OCTET STRING,</t>

            <t>values SET OF OCTET STRING</t>
          </list></t>

        <t>Outputs: <vspace blankLines="1" /> <list style="symbols">
            <t>major_status INTEGER,</t>

            <t>minor_status INTEGER</t>
          </list></t>

        <t>Return major_status codes: <list style="symbols">
            <t>GSS_S_COMPLETE indicates no error.</t>

            <t>GSS_S_UNAVAILABLE indicates that the given attribute NAME is
            not known or could not be set.</t>

            <t>GSS_S_FAILURE indicates a general error.</t>
          </list>When the given NAME object is an MN this function MUST fail
        (with GSS_S_FAILURE) if the mechanism for which the name is an MN does
        not recognize the attribute name or the namespace it belongs to. This
        is because name attributes generally have some semantics that
        mechanisms must understand.</t>

        <t>On the other hand, when the given name is not an MN this function
        MAY succeed even if none of the available mechanisms understand the
        given attribute, in which subsequent credential acquisition attempts
        (via GSS_Acquire_cred() or GSS_Add_cred()) with the resulting name
        MUST fail for mechanisms that do not understand any one or more name
        attributes set with this function. Applications may wish to use a
        non-MN, then acquire a credential with that name as the desired name.
        The acquired credentials will have elements only for the mechanisms
        that can carry the name attributes set on the name.</t>

        <t>Note that this means that all name attributes are locally critical:
        the mechanism(s) must understand them. The reason for this is that
        name attributes must necessarily have some meaning that the mechanism
        must understand, even in the case of application-specific attributes
        (in which case the mechanism must know to transport the attribute to
        any peer). However, there is no provision to ensure that peers
        understand any given name attribute. Individual name attributes may be
        critical with respect to peers, and the specification of the attribute
        will have to indicate which of the mechanism's protocol or the
        application is expected to enforce criticality.</t>

        <t>The complete flag denotes that (if TRUE) the set of values
        represents a complete set of values for this name. The peer being an
        authoritative source of information for this attribute is a sufficient
        condition for the complete flag to be set by the peer.</t>

        <t>In the federated case when several peers may hold some of the
        attributes about a name this flag may be highly dangerous and SHOULD
        NOT be used.</t>

        <t>NOTE: This function relies on the GSS-API notion of "SET OF"
        allowing for order preservation; this has been discussed on the KITTEN
        WG mailing list and the consensus seems to be that, indeed, that was
        always the intention. It should be noted that underlying mechanisms
        may not respect the given order.</t>

        <section title="C-Bindings">
          <t>The C-bindings of GSS_Set_name_attribute() requires one function
          call per-attribute value, for multi-valued name attributes -- each
          call adds one value. To replace an attribute's every value delete
          the attribute's values first with GSS_Delete_name_attribute().</t>

          <figure>
            <artwork><![CDATA[
OM_uint32 gss_set_name_attribute(
  OM_uint32                     *minor_status,
  gss_const_name_t              name,
  int                           complete,
  gss_const_buffer_t            attr,
  gss_const_buffer_t            value
);
				    ]]></artwork>
          </figure>
        </section>
      </section>

      <section title="GSS_Delete_name_attribute()">
        <t>Inputs: <vspace blankLines="1" /> <list style="symbols">
            <t>name INTERNAL NAME,</t>

            <t>attr OCTET STRING,</t>
          </list></t>

        <t>Outputs: <vspace blankLines="1" /> <list style="symbols">
            <t>major_status INTEGER,</t>

            <t>minor_status INTEGER</t>
          </list></t>

        <t>Return major_status codes: <list style="symbols">
            <t>GSS_S_COMPLETE indicates no error.</t>

            <t>GSS_S_UNAVAILABLE indicates that the given attribute NAME is
            not known.</t>

            <t>GSS_S_UNAUTHORIZED indicates that a forbidden delete operation
            was attempted, such as deleting a negative attribute.</t>

            <t>GSS_S_FAILURE indicates a general error.</t>
          </list></t>

        <t>Deletion of negative authenticated attributes from NAME objects
        MUST NOT be allowed and must result in a GSS_S_UNAUTHORIZED.</t>

        <section title="C-Bindings">
          <figure>
            <artwork><![CDATA[
OM_uint32 gss_delete_name_attribute(
  OM_uint32                     *minor_status,
  gss_const_name_t              name,
  gss_const_buffer_t            attr
);
				    ]]></artwork>
          </figure>
        </section>
      </section>

      <section title="GSS_Export_name_composite()">
        <t>Inputs: <vspace blankLines="1" /> <list style="symbols">
            <t>name INTERNAL NAME</t>
          </list></t>

        <t>Outputs: <vspace blankLines="1" /> <list style="symbols">
            <t>major_status INTEGER,</t>

            <t>minor_status INTEGER,</t>

            <t>exp_composite_name OCTET STRING -- the caller is responsible
            for de-allocating memory using GSS_Release_buffer</t>
          </list></t>

        <t>Return major_status codes: <list style="symbols">
            <t>GSS_S_COMPLETE indicates no error.</t>

            <t>GSS_S_FAILURE indicates a general error.</t>
          </list></t>

        <t>This function outputs a token which can be imported with
        GSS_Import_name(), using GSS_C_NT_COMPOSITE_EXPORT as the name type
        and which preserves any name attribute information (including the
        authenticated/complete flags) associated with the input name (which
        GSS_Export_name() may well not). The token format is not specified
        here as this facility is intended for inter-process communication
        only; however, all such tokens MUST start with a two-octet token ID,
        hex 04 02, in network byte order.</t>

        <t>The OID for GSS_C_NT_COMPOSITE_EXPORT is <TBD>.</t>

        <section title="C-Bindings">
          <t>The "exp_composite_name" buffer is de-allocated by the caller
          with gss_release_buffer.</t>

          <figure>
            <artwork><![CDATA[
OM_uint32 gss_export_name_composite(
  OM_uint32                     *minor_status,
  gss_const_name_t              name,
  gss_buffer_t                  exp_composite_name
);
				    ]]></artwork>
          </figure>
        </section>
      </section>
    </section>

    <section title="IANA Considerations">
      <t>This specification has no actions for IANA.</t>

      <t>This document creates a namespace of GSS-API name attributes.
      Attributes are named by URIs, so no single authority is technically
      needed for allocation. However future deployment experience may indicate
      the need for an IANA registry for URIs used to reference names specified
      by IETF standards. It is expected that this will be a registry of URNs
      but this document provides no further guidance on this registry.</t>
    </section>

    <section title="Security Considerations">
      <t>This document extends the GSS-API naming model to include support for
      name attributes. The intention is that name attributes are to be used as
      a basis for (among other things) authorization decisions or
      personalization for applications relying on GSS-API security
      contexts.</t>

      <t>The security of the application may be critically dependent on the
      security of the attributes. This document classifies attributes as
      asserted or authenticated. Asserted (non-authenticated) attributes MUST
      NOT be used if the attribute has security implications for the
      application (e.g., authorization decisions) since asserted attributes may
      easily be controlled by the peer directly.</t>

      <t>It is important to understand the meaning of 'authenticated' in this
      setting. Authenticated does not imply that any semantic of the attribute
      is claimed to be true. The only implication is that a trusted third
      party has asserted the attribute as opposed to the attribute being
      asserted by the peer itself. Any additional semantics are always the
      result of applying policy. For instance in a given deployment the mail
      attribute of the subject may be authenticated and sourced from an email
      system where 'authoritive' values are kept. In another situation users
      may be allowed to modify their mail addresses freely. In both cases the
      'mail' attribute may be authenticated by virtue of being included in
      signed SAML attribute assertions or by other means authenticated by the
      underlying mechanism.</t>

      <t>When the underlying security mechanism does not provide a permanent
      unique identity (e.g., anonymous kerberos), GSS-API naming extensions
      may be used to provide a permanent unique identity attribute. This may
      be a globally unique identifier, a value unique within the namespace of
      the attribute issuer, or a "directed" identifier that is unique per peer
      acceptor identity. SAML, to use one example technology, offers a number
      of built-in constructs for this purpose, such as a <NameID> with a
      Format of "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent". SAML
      deployments also typically make use of domain-specific attribute types
      that can serve as identifiers.</t>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      &rfc2119;
      &rfc2743;
      &rfc2744;
      &rfc5587;

      <reference anchor="GFD.024">
        <front>
          <title>GSS-API Extensions</title>

          <author fullname="Samuel Meder">
            <organization>Argonne National Laboratory</organization>
          </author>

          <author fullname="Von Welch">
            <organization>National Center for Supercomputing
            Applications</organization>

            <address>
              <postal>
                <street></street>

                <city></city>

                <region></region>

                <code></code>

                <country></country>
              </postal>

              <phone></phone>

              <facsimile></facsimile>

              <email></email>

              <uri></uri>
            </address>
          </author>

          <author fullname="Steven Tuecke">
            <organization>Argonne National Laboratory</organization>

            <address>
              <postal>
                <street></street>

                <city></city>

                <region></region>

                <code></code>

                <country></country>
              </postal>

              <phone></phone>

              <facsimile></facsimile>

              <email></email>

              <uri></uri>
            </address>
          </author>

          <author fullname="Doug Engert">
            <organization>Argonne National Laboratory</organization>

            <address>
              <postal>
                <street></street>

                <city></city>

                <region></region>

                <code></code>

                <country></country>
              </postal>

              <phone></phone>

              <facsimile></facsimile>

              <email></email>

              <uri></uri>
            </address>
          </author>

          <date month="June" year="2004" />
        </front>

        <seriesInfo name="GFD" value="GFD.024" />

        <format target="http://www.ggf.org/documents/GFD.24.pdf" type="PDF" />
      </reference>
    </references>

    <references title="Informative References">
      &rfc4768;
      &rfc4556;
      &saml-core;
      &saml-bindings;

      &ascii;
      &rfc3629;
    </references>
  </back>
</rfc>

PAFTECH AB 2003-20262026-04-23 21:42:19