Internet-Draft                      GSS-API Authentication for SOCKS V5
    Expires: 25SEP95                                                24MAR95
    <draft-ietf-aft-gssapi-00.txt>                         P V McMahon, ICL
    
    
                GSS-API Authentication Method for SOCKS Version 5
    
    
    Status of this Memo
    
       This document is an Internet-Draft. Internet-Drafts are working
       documents of the Internet Engineering Task Force (IETF), its areas,
       and its working groups. Note that other groups may also distribute
       working documents as Internet-Drafts.
    
       Internet-Drafts are draft document valid for a maximum of six months
       and may be updated, replaced or obsoleted by other documents at any
       time. It is inappropriate to use Internet-Drafts as reference
       material or to cite them other than as "work in progress".
    
       To learn the current status of any Internet-Draft, please check the
       "1id-abstracts.txt" listing contained in the Internet-Drafts Shadow
       Directories on ds.internic.net (US East Coast), nic.nordu.net
       (Europe), ftp.isi.edu (US West Coast), or munnari.oz.au (Pacific
       Rim).
    
       Comments on this document are welcome and should be sent to
       aft@unify.com, the mailing list of the Authenticated Firewall
       Traversal Working Group of the IETF.
    
    
    
    Contents List
    
         1. Purpose
         2. Introduction
         3. GSS-API Call Specification for SOCKS V5
         4. References
         5. Acknowledgments
         6. Security Considerations
         7. Author's Address
    
    
    
    1. Purpose
    
    The protocol specification for SOCKS Version 5 specifies a generalized
    framework for the use of arbitrary authentication protocols in the
    initial SOCKS connection setup.
    
    This document provides the specification for the SOCKS V5 GSS-API
    authentication protocol, and defines an GSS-API authentication method
    encapsulation that provides integrity, authentication and optional
    confidentiality.
    
    McMahon                                                        [Page 1]


    Internet-Draft                      GSS-API Authentication for SOCKS V5
    
    
    
    2. Introduction
    
    GSS-API provides an abstract interface which provides security services
    for use in distributed applications, but isolates callers from specific
    security mechanisms and implementations.
    
    GSS-API peers achieve interoperability by establishing a common
    security mechanism for security context establishment - either through
    administrative action, or through negotiation.  GSS-API is specified in
    [RFC 1508], and [RFC 1509].
    
    The approach for use of GSS-API in SOCKS V5 is to authenticate the
    client and server by successfully establishing a GSS-API security
    context - such that the GSS-API encapsulates any negotiation protocol
    for mechanism selection, and the agreement of security service options.
    The GSS-API gss_init_sec_context() interface enables the context
    initiator to know what security services the target supports for the
    chosen mechanism.
    
    The GSS-API per-message protection calls are used to encapsulate any
    further TCP traffic between client and server, and, for integrity
    protection of UDP datagrams.
    
    
    
    3. GSS-API Call Specification for SOCKS V5
    
    3.1 Preparation
    
    Prior to use of GSS-API primitives, the client and server should
    be locally authenticated, and have established GSS-API credentials.
    
    The client should call gss_import_name to obtain an internal
    representation of the server name.  For maximal portability
    the default name_type GSS_C_NULL_OID should be used to specify
    the default name space, and the input name_string should
    treated by the client as an opaque name-space specific input.
    For example, when using Kerberos V5 naming, the imported name
    is of the form "SERVICE:socks@socks_server_hostname" where
    "socks_server_hostname" is the fully qualified host name of
    the server with all letters in lower case.
    
    
    3.2 Client Context Establishment
    
    The client should then call gss_init_sec_context, typically
    passing GSS_C_NO_CREDENTIAL into cred_han to specify the default
    credential (for initiator usage), GSS_C_NULL_OID into mech_type to
    specify the default mechanism, GSS_C_NO_CONTEXT into context_handle to
    
    McMahon                                                        [Page 2]


    Internet-Draft                      GSS-API Authentication for SOCKS V5
    
    specify a NULL context (initially), and the previously imported server
    name into targ_name.
    
    The client must also specify its requirements
    for replay protection, delegation, and sequence protection via
    the gss_init_sec_context req_flags parameter.  It is required by this
    specification that the client always requests these service options
    (i.e. passes GSS_C_MUTUAL_FLAG | GSS_C_REPLAY_FLAG | GSS_C_DELEG_FLAG |
    GSS_C_MUTUAL_FLAG into req_flags).  However, GSS_C_SEQUENCE_FLAG should
    only be passed in for TCP-based clients, not for UDP-based clients.
    
    
    3.3 Client Context Establishment Major Status codes
    
    The gss_init_sec_context returned status code can take two different
    success values:
    
    - If gss_init_sec_context returns GSS_S_CONTINUE_NEEDED, then the
      client should expect the server to issue a token in the subsequent
      subnegotiation response.  The client must pass the token to another
      call to gss_init_sec_context, and repeat this procedure until
      continue operations are complete.
    
    - If gss_init_sec_context returns GSS_S_COMPLETE, then the client
      should respond to the server with any resulting output_token.  If
      there is no output_token, the client should proceed to sending the
      protected request details.
    
    
    3.4 Client initial token
    
    The client's GSS-API implementation then typically responds with the
    resulting output_token which the client sends in a message to
    the server.
    
    +------+------+------+.......................+
    + ver  | mtyp | len  |       token           |
    +------+------+------+.......................+
    + 0x01 | 0x01 | 0x02 | up to 2^16 - 1 octets |
    +------+------+------+.......................+
    
    If, however, the client's GSS-API implementation failed during
    gss_init_sec_context, the the client must close its connection to
    the server.
    
    
    3.5 Server Context Establishment
    
    For the case where a client successfully sends a token emitted by
    gss_init_sec_context() to the server, the server must pass the
    client-supplied token to gss_accept_sec_context as input_token.
    
    McMahon                                                        [Page 3]


    Internet-Draft                      GSS-API Authentication for SOCKS V5
    
    For portability, verifier_cred_handle is set to GSS_C_NO_CREDENTIAL
    (for acceptor usage), context_handle initially set to GSS_C_NO_CONTEXT.
    
    If gss_accept_sec_context returns GSS_CONTINUE_NEEDED, the server
    should return the generated output_token to the client, and
    subsequently pass the resulting client supplied token to another call
    to gss_accept_sec_context.
    
    If gss_accept_sec_context returns GSS_S_COMPLETE, then if an
    output_token is returned, the server should return it to the client.
    If no token is returned, a zero length token should be sent
    by the server to signal to the client that it is ready to receive
    the client's request.
    
    
    3.6 Server Reply
    
    In all continue/confirmation cases, the server uses the same message
    type as for the client -> server interaction.
    
    +------+------+------+.......................+
    + ver  | mtyp | len  |       token           |
    +------+------+------+.......................+
    + 0x01 | 0x01 | 0x02 | up to 2^16 - 1 octets |
    +------+------+------+.......................+
    
    
    3.7 Security Context Failure
    
    If the server refuses the client's connection for any reason (GSS-API
    authentication failure or otherwise), it will return:
    
    +------+------+
    + ver  | mtyp |
    +------+------+
    + 0x01 | 0xff |
    +------+------+
    
    
    3.8 UDP Protection
    
    When using GSS-API, the authentication key material identified in
    [SOCKS V5] for computation of the value for the XCOOKIE digest within
    the UDP MAC field is encapsulated by the authentication mechanism.
    
    Therefore, for UDP-based clients, the XCOOKIE digest value for UDP is
    derived by invoking gss_get_mic() for the COOKIE from the UDP ASSOCIATE
    request.
    
    
    
    
    McMahon                                                        [Page 4]


    Internet-Draft                      GSS-API Authentication for SOCKS V5
    
    
    4. References
    
    [RFC 1508] Generic Security Service API, J Linn,
               September 1993
    
    [RFC 1509] Generic Security Service API : C-bindings, J Wray,
               September 1993
    
    [SOCKS V5] SOCKS Protocol V5, draft-ietf-aft-socks-proto-v5-01.txt
               M Leech, March 1995
    
    
    
    
    5. Acknowledgment
    
    This document builds from a previous draft produced by Marcus Leech
    (BNR) - whose comments are gratefully acknowleged.
    
    
    
    6. Security Considerations
    
    The security services provided through the GSS-API are entirely
    dependent on the effectiveness of the underlying security mechanisms,
    and the correctness of the implementation of the underlying algorithms
    and protocols.
    
    The user of a GSS-API service must ensure that the quality of
    protection provided by the mechanism implementation is consistent with
    their security policy.
    
    In addition, where negotiation is supported under the GSS-API,
    constraints on acceptable mechanisms may be imposed to ensure
    suitability for application to authenticated firewall traversal.
    
    
    
    7. Author's Address
    
    P V McMahon
    post: ICL Enterprises, Kings House, 33 Kings Road, Reading, RG1 3PX, UK
    email: p.v.mcmahon@rea0803.wins.icl.co.uk
    phone: +44 734 634882
    fax:   +44 734 855106
    
    
    
    
    
    
    McMahon                                                        [Page 5]