[HEIMDAL-646] malloc(0) checks for AIX
[heimdal.git] / doc / standardisation / draft-ietf-kitten-gss-naming-02.txt
blobb5d044788504391c6190e3619a9972b6e655cc7c
5 Network Working Group                                         S. Hartman
6 Internet-Draft                                                       MIT
7 Expires: December 4, 2005                                   June 2, 2005
10                  Desired Enhancements to GSSAPI Naming
11                   draft-ietf-kitten-gss-naming-02.txt
13 Status of this Memo
15    By submitting this Internet-Draft, each author represents that any
16    applicable patent or other IPR claims of which he or she is aware
17    have been or will be disclosed, and any of which he or she becomes
18    aware will be disclosed, in accordance with Section 6 of BCP 79.
20    Internet-Drafts are working documents of the Internet Engineering
21    Task Force (IETF), its areas, and its working groups.  Note that
22    other groups may also distribute working documents as Internet-
23    Drafts.
25    Internet-Drafts are draft documents valid for a maximum of six months
26    and may be updated, replaced, or obsoleted by other documents at any
27    time.  It is inappropriate to use Internet-Drafts as reference
28    material or to cite them other than as "work in progress."
30    The list of current Internet-Drafts can be accessed at
31    http://www.ietf.org/ietf/1id-abstracts.txt.
33    The list of Internet-Draft Shadow Directories can be accessed at
34    http://www.ietf.org/shadow.html.
36    This Internet-Draft will expire on December 4, 2005.
38 Copyright Notice
40    Copyright (C) The Internet Society (2005).
42 Abstract
44    The Generic Security Services API (GSS-API) provides a naming
45    architecture that supports  name-based authorization.  GSS-API
46    authenticates two named parties to each other.  Names can be stored
47    on access control lists to make authorization decisions.  Advances in
48    security mechanisms and the way implementers wish to use GSS-API
49    require this model to be extended.  As people move within an
50    organization or change their names, the name authenticated by GSS-API
51    may change.  Using some sort of constant identifier would make ACLs
52    more stable.  Some mechanisms such as public-key mechanisms do not
56 Hartman                 Expires December 4, 2005                [Page 1]
58 Internet-Draft                  GSS Names                      June 2005
61    have a single name to be used across all environments.  Other
62    mechanisms such as Kerberos include may include group membership or
63    role information as part of authentication.  This document motivates
64    extensions to GSS-API naming and describes the extensions under
65    discussion.
112 Hartman                 Expires December 4, 2005                [Page 2]
114 Internet-Draft                  GSS Names                      June 2005
117 1.  Introduction
119    The Generic Security Services API [2] authenticates two named parties
120    to each other.  GSS names can be imported in a variety of formats
121    through the gss_import_name call.  Several mechanism-independent name
122    formats are provided including GSS_C_NT_HOSTBASED_SERVICE for
123    services running on an Internet host and GSS_C_NT_USER_NAME for the
124    names of users.  Other mechanism-specific name types are also
125    provided.  By the time a name is used in acquiring a mechanism-
126    specific credential or establishing a security context, it has been
127    transformed into one of these mechanism-specific name types.  In
128    addition, the GSS-API provides a function called gss_export_name that
129    will flatten a GSS-API name into a binary blob suitable for
130    comparisons.  This binary blob can be stored on ACLs and then
131    authorization decisions can be made simply by comparing the name
132    exported from a newly accepted context to the name on the ACL.
134    Storing names on ACLs can be problematic because names tend to change
135    over time .  If the name contains organizational information such as
136    a domain part or an indication of what department someone works for,
137    this changes as the person moves around the organization.  Even if no
138    organizational information is included in the name, the name will
139    change as people change their names.  Updating ACLs to reflect name
140    changes is difficult.  Another significant problem is that names can
141    be reused to apply to another entity than the entity to which they
142    originally applied.  For example if a Unix user ID is placed on an
143    ACL, the account deleted and then a new user assigned the old ID,
144    then that new user may gain privileges intended for the old user.
146    Inherent in the GSS naming  model is the idea that  mechanism names
147    need to be able to be represented in a single canonical form.  Anyone
148    importing that name needs to be able to retrieve the canonical form
149    of that name.
151    Several security mechanisms have been proposed for which this naming
152    architecture is too restrictive.  In some cases it is not always
153    possible to canonicalize any name that is imported.  In other cases
154    there is no single canonical name.
156    Also, as GSS-API is used in more complex environments, there is a
157    desire to use attribute certificates [6], Kerberos authorization data
158    [3], or other non-name-based authorization models.  GSS-API needs to
159    be enhanced in order to support these uses in a mechanism-independent
160    manner.
162    This document discusses the particular naming problems with two
163    important classes of GSS-API mechanisms.  It also discusses the set
164    of proposed solutions and open issues with these solutions.  This
168 Hartman                 Expires December 4, 2005                [Page 3]
170 Internet-Draft                  GSS Names                      June 2005
173    draft limits discussion to these solutions and provides a description
174    of the problem against which the solutions can be judged.
224 Hartman                 Expires December 4, 2005                [Page 4]
226 Internet-Draft                  GSS Names                      June 2005
229 2.  Kerberos Naming
231    The Kerberos mechanism demonstrates both the naming stability problem
232    and the authorization extension problem.
234    The Kerberos Referrals draft [4] proposes a new type of Kerberos name
235    called an enterprise name.  The intent is that the enterprise name is
236    an alias that the user knows for themselves and can use to login.
237    The Kerberos KDC translates this name into a normal Kerberos
238    principal and gives the user tickets for this principal.  This normal
239    principal is used for authorization.  The intent is that the
240    enterprise name tracks the user as they move throughout the
241    organization, even if they move to parts of the organization that
242    have different naming policies.  The name they type at login remains
243    constant, but the Kerberos principal used to authenticate them to
244    services changes.
246    Performing a mapping from enterprise  name to principal name is not
247    generally possible for unauthenticated services.  Even authenticated
248    services may not be authorized to perform this mapping except for
249    their own name.  Also, Kerberos does not (and does not plan to)
250    provide a mechanism for mapping enterprise names to principals
251    besides authentication as the enterprise name.  Thus, any such
252    mapping would be vendor-specific.  With this feature in Kerberos, it
253    is not possible to implement gss_canonicalize_name for enterprise
254    name types.
256    Another issue arises with enterprise names.  IN some cases it would
257    be desirable to put   the enterprise name on the ACL instead of a
258    principal name for greater ACL stability.  At first glance this could
259    be accomplished by including the enterprise name in the name exported
260    by gss_export_name.  Unfortunately, if this were done, the exported
261    name would change whenever the mapping changed, invalidating any ACL
262    entries based off the old exported name and defeating the purpose  of
263    including the enterprise name in the exported name.  In some cases it
264    would be desirable to have the exported name be based on the
265    enterprise name and in others based on the principal name, but this
266    is not permitted by the current GSS-API.
268    Another development also complicates GSS-API naming for Kerberos.
269    Several vendors have been looking at mechanisms to include group
270    membership information in Kerberos authorization data.  It is
271    desirable to put these group names on ACLs.  Again, GSS-API currently
272    has no mechanism to use this information.
280 Hartman                 Expires December 4, 2005                [Page 5]
282 Internet-Draft                  GSS Names                      June 2005
285 3.  X.509 Names
287    X.509 names are more complicated than Kerberos names.  In the
288    Kerberos case there is a single principal carried in all Kerberos
289    messages.  X.509 certificates have multiple options.  It seems  the
290    subject name might be the appropriate name to use as the name to be
291    exported in a GSS-API mechanism.  However RFC 3280 [5] does not even
292    require the subject name to be a non-empty sequence.  Instead there
293    are cases where the subjectAltName extension is the only thing to
294    identify the subject of the certificate.  As in the case of Kerberos
295    group memberships, there may be many subjectAltName extensions
296    available in a certificate.  Different applications will care about
297    different extensions.  One possible candidate for an exported name
298    would be all the names and SubjectAltName extensions from a
299    certificate.  However as new names are added then existing ACL
300    entries would be invalidated; this is undesirable.  Thus there is no
301    single value that can be  defined as the exported GSS-API name that
302    will be useful in all environments.
304    A profile of a particular X.509  GSS-API mechanism could require a
305    specific name be used.  However this would limit that mechanism to
306    require a particular type of certificate.  There is interest in being
307    able to use arbitrary X.509 certificates with GSS-API for some
308    applications.
310    Experience so far has not lead to sufficient interoperability with
311    GSS-API X.509 mechanisms.  Even if the subject name is used, there is
312    ambiguity in how to handle sorting of name components.  Martin Rex
313    said that he was aware of several SPKM [1] implementations but no two
314    were fully interoperable on names.
316    Also, as discussed in the introduction, it is desirable to support
317    X.509 attribute certificates.
336 Hartman                 Expires December 4, 2005                [Page 6]
338 Internet-Draft                  GSS Names                      June 2005
341 4.  Composite Names
343    One proposal to solve these problems is to extend the concept of a
344    GSS-API name to include a set of name attributes.  Each attribute
345    would be an octet-string labeled by an OID.  Examples of attributes
346    would include Kerberos enterprise names, group memberships in an
347    authorization infrastructure, Kerberos authorization data attributes
348    and subjectAltName attributes in a certificate.  Several new
349    operations would be needed:
351    1.  Add an  attribute to name.
353    2.  Query attributes of name.
355    3.  Query values of an attribute.
357    4.  Delete an attribute from a name.
359    5.  Export a complete composite name and all its attributes for
360        transport between processes.
362    Note that an exported composite name would not generally be suitable
363    for binary comparison.  Avoiding confusion between this operation and
364    the existing gss_export_name operation will require careful work.
366    Additional utility operations will probably be needed depending on
367    the implementation of name attributes.
369 4.1  Usage of Name Attributes
371    Since attributes are part of GSS-API names, the acceptor can retrieve
372    the attributes of the initiator's and acceptor's name from the
373    context.  These attributes can then be used for authorization.
375    Most name attributes will probably not come from explicit operations
376    to add attributes to a name.  Instead, name attributes will probably
377    come from mechanism specific credentials.  Components of these
378    mechanism specific credentials may come from platform or environment-
379    specific names.  Mechanism specific naming and group membership can
380    be  mapped into name attributes by the mechanism implementation.  The
381    specific form of this mapping will generally require protocol
382    specification for each mechanism.
384    The value of many  name attributes may be suitable for use in binary
385    comparison.  This should enable applications to use these name
386    attributes on ACLs the same way exported names are now used on ACLs.
387    For example if a particular Subjectaltname extension contains the
388    appropriate  identity for an application, then  the name attribute
392 Hartman                 Expires December 4, 2005                [Page 7]
394 Internet-Draft                  GSS Names                      June 2005
397    for this Subjectaltname can be placed on the ACL.  This is only true
398    if the name attribute is stored in some canonical form.
400 4.2  Open issues
402    This section describes parts of the proposal to add attributes to
403    names that will need to be explored before the proposal can become a
404    protocol specification.
406    Are mechanisms expected to be able to carry arbitrary name attributes
407    as part of a context establishment?  At first it seems like this
408    would be desirable.  However the purpose of GSS-API is to establish
409    an authenticated context between two peers.  In particular, a context
410    authenticates two named entities to each other.  The names of these
411    entities and attributes associated with these names will be used for
412    authorization decisions.  If an initiator or acceptor is allowed to
413    assert name attributes and the authenticity of these assertions is
414    not validated by the mechanisms, then security problems will result.
415    On the other hand, requiring that name attributes be mechanism
416    specific and only be carried by mechanisms that understand the name
417    attributes and can validate them compromises GSS-API's place as a
418    generic API.  Application authors would be forced to understand
419    mechanism-specific attributes to make authorization decisions.  In
420    addition if mechanisms are not required to transport arbitrary
421    attributes, then application authors will need to deal with different
422    implementations of the same mechanism that support different sets of
423    name attributes.  One possible solution is to carry a source along
424    with each name attribute; this source could indicate whether the
425    attribute comes from a mechanism data structure or from the other
426    party in the authentication.
428    Another related question is how will name attributes be mapped into
429    their mechanism-specific forms.  For example it would be desirable to
430    map many  Kerberos authorization data elements into name attributes.
431    In the case of the Microsoft PAC, it would be desirable for some
432    applications to get the entire PAC.  However in many cases, the
433    specific lists of security IDs contained in the PAC would be more
434    directly useful to an application.  So there may not be a good one-
435    to-one mapping between the mechanism-specific elements and the
436    representation desirable at the GSS-API layer.
438    Specific name matching rules need to be developed.  How do names with
439    attributes compare?  What is the effect of a name attribute on a
440    target name in gss_accept_sec_context?
442 4.3  Handling gss_export_name
444    For many mechanisms, there will be  an obvious choice to use for the
448 Hartman                 Expires December 4, 2005                [Page 8]
450 Internet-Draft                  GSS Names                      June 2005
453    name exported by gss_export_name.  For example in the case of
454    Kerberos, the principal name can continue to be used as the exported
455    name.  This will allow applications depending on existing GSS-API
456    name-based authorization to continue to work.  However it is probably
457    desirable to allow GSS-API mechanisms for which gss_export_name
458    cannot meaningfully be defined.  The behavior of gss_export_name in
459    such cases should probably be to return some error.  Such mechanisms
460    may not work with existing applications and cannot conform to the
461    current version of the GSS-API.
504 Hartman                 Expires December 4, 2005                [Page 9]
506 Internet-Draft                  GSS Names                      June 2005
509 5.  Credential Extensions
511    An alternative to the name attributes proposal  is to extend GSS-API
512    credentials  with extensions labeled by OIDs.  Interfaces would be
513    needed to manipulate these credential extensions and to retrieve the
514    credential extensions for credentials used to establish a context.
515    Even if name attributes are used, credential extensions may be useful
516    for other unrelated purposes.
518    It is possible to solve problems discussed in this document using
519    some credential extension mechanism.  Doing so will have many of the
520    same open issues as discussed in the  composite names  proposal.  The
521    main advantage of a credential extensions proposal is that  it avoids
522    specifying how name attributes interact with name comparison or
523    target names.
525    The primary advantage of the name attributes proposal over credential
526    extensions is that name attributes seem to fit better into the GSS-
527    API authorization model.  Names are already available at all points
528    when authorization decisions are made.  In addition, for many
529    mechanisms the sort of information carried as name attributes will
530    also be carried as part of the name in the mechanism
560 Hartman                 Expires December 4, 2005               [Page 10]
562 Internet-Draft                  GSS Names                      June 2005
565 6.  Mechanisms for Export Name
567    Another proposal is to define some GSS-API mechanisms whose only
568    purpose is to have an exportable name form that is useful.  For
569    example, you might be able to export a name as a local machine user
570    ID with such a mechanism.
572    This solution works well especially for name information that can be
573    looked up in a directory.  It was unclear from the p      discussion
574    whether this solution would allow mechanism-specific name information
575    to be extracted from a context.  If so, then this solution would meet
576    many of the goals of this document.
578    One advantage of this solution is that it requires few if any changes
579    to GSS-API semantics.  It is not as flexible as other solutions.
580    Also, it is not clear how to handle mechanisms that do not have a
581    well defined name to export with this solution.
616 Hartman                 Expires December 4, 2005               [Page 11]
618 Internet-Draft                  GSS Names                      June 2005
621 7.  Deferring Credential Binding
623    Currently GSS-API credentials represent a single mechanism name.
624    While working on other issues discussion came up focused around
625    choosing the correct credential for a particular target.  There are
626    several situations where an implementation can do a better job of
627    choosing a default source name to use given the name of the target to
628    connect to.  Currently, GSS-API does not provide a mechanism to do
629    this.  Adding such a mechanism would be desirable.
672 Hartman                 Expires December 4, 2005               [Page 12]
674 Internet-Draft                  GSS Names                      June 2005
677 8.  Security Considerations
679    GSS-API sets up a security context between two named parties.  The
680    GSS-API names are security assertions that are authenticated by the
681    context establishment process.  As such  the GSS naming architecture
682    is critical to the security of GSS-API.
684    Currently GSS-API uses a simplistic naming model for authorization.
685    Names can be compared  against a set of names on an access control
686    list.  This architecture is relatively simple and its security
687    properties are well understood.  However it does not provide the
688    flexibility and feature set for future deployments of GSS-API.
690    This proposal will significantly increase the complexity of the GSS
691    naming architecture.  As this proposal is fleshed out, we need to
692    consider ways of managing security exposures created by this
693    increased complexity.
695    One area where the complexity may lead to security problems is
696    composite names with attributes from different sources.  This may be
697    desirable so that name attributes that carry their own
698    authentication.  However the design of any solutions needs to make
699    sure that applications can assign appropriate trust to name
700    components.
728 Hartman                 Expires December 4, 2005               [Page 13]
730 Internet-Draft                  GSS Names                      June 2005
733 9.  Acknowledgements
735    John Brezak, Paul Leach and Nicolas Williams all participated in
736    discussions that lead to a desire to enhance GSS naming.  Martin Rex
737    provided descriptions of the current naming architecture and pointed
738    out many ways in which proposed enhancements would create
739    interoperability problems or increase complexity.  Martin also
740    provided excellent information on what aspects of GSS naming have
741    tended to be implemented badly or have not met the needs of some
742    customers.
744    Nicolas Williams helped describe the possible approaches for
745    enhancing naming.
747 10.  Informative References
749    [1]  Adams, C., "The Simple Public-Key GSS-API Mechanism (SPKM)",
750         rfc 2025, October 1996.
752    [2]  Linn, J., "Generic Security Service Application Program
753         Interface Version 2, Update 1", RFC 2743, January 2000.
755    [3]  Neuman, C., Yu, T., Hartman, S., and K. Raeburn, "The Kerberos
756         Network Authentication Service (V5)",
757         draft-ietf-krb-wg-kerberos-clarifications-06.txt (work in
758         progress), June 2004.
760    [4]  Jaganathan , K., Zhu, L., Swift, M., and J. Brezak, "Generating
761         KDC Referrals to locate Kerberos realms",
762         draft-ietf-krb-wg-kerberos-referrals-03.txt (work in progress),
763         2004.
765    [5]  Housley, R., Polk, W., Ford, W., and D. Solo, "Internet X.509
766         Public Key Infrastructure Certificate and Certificate Revocation
767         List (CRL) Profile", rfc 3280, April 2002.
769    [6]  Farrell, S. and R. Housley, "An Internet Attribute Certificate
770         Profile for Authorization.", rfc 3281, April 2002.
773 Author's Address
775    Sam Hartman
776    MIT
778    Email: hartmans@mit.edu
784 Hartman                 Expires December 4, 2005               [Page 14]
786 Internet-Draft                  GSS Names                      June 2005
789 Intellectual Property Statement
791    The IETF takes no position regarding the validity or scope of any
792    Intellectual Property Rights or other rights that might be claimed to
793    pertain to the implementation or use of the technology described in
794    this document or the extent to which any license under such rights
795    might or might not be available; nor does it represent that it has
796    made any independent effort to identify any such rights.  Information
797    on the procedures with respect to rights in RFC documents can be
798    found in BCP 78 and BCP 79.
800    Copies of IPR disclosures made to the IETF Secretariat and any
801    assurances of licenses to be made available, or the result of an
802    attempt made to obtain a general license or permission for the use of
803    such proprietary rights by implementers or users of this
804    specification can be obtained from the IETF on-line IPR repository at
805    http://www.ietf.org/ipr.
807    The IETF invites any interested party to bring to its attention any
808    copyrights, patents or patent applications, or other proprietary
809    rights that may cover technology that may be required to implement
810    this standard.  Please address the information to the IETF at
811    ietf-ipr@ietf.org.
814 Disclaimer of Validity
816    This document and the information contained herein are provided on an
817    "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
818    OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
819    ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
820    INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
821    INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
822    WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
825 Copyright Statement
827    Copyright (C) The Internet Society (2005).  This document is subject
828    to the rights, licenses and restrictions contained in BCP 78, and
829    except as set forth therein, the authors retain all their rights.
832 Acknowledgment
834    Funding for the RFC Editor function is currently provided by the
835    Internet Society.
840 Hartman                 Expires December 4, 2005               [Page 15]