Internet-Draft                                       ERIC BAIZE, BULL
IETF Common Authentication Technology WG         STEPHEN FARRELL, SSE
                                                      TOM PARKER, ICL
<draft-ietf-cat-sesamemech-00.txt>                  November 21, 1995

                    The SESAME GSS-API Mechanism

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 documents 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 should be sent to "cat-ietf@mit.edu", the
IETF Common Authentication Technology WG discussion list.


ABSTRACT

   This specification defines protocols, data elements, and
   conventions to be employed by peers implementing the Generic
   Security Service Application Program Interface (as specified in
   RFCs 1508 and 1509) when using the SESAME Mechanism.

1.  BACKGROUND

   In most systems of today, protection of resources in a
   distributed computing environment is principally achieved by
   direct login to each end-system accessed, using passwords
   transmitted in clear and unprotected. This has a number of
   drawbacks: firstly it is not very secure; secondly it is not
   convenient to have to remember several passwords, and thirdly the
   user is not known as one single user to the distributed system as
   a whole - there is no co-ordination of his use of the distributed
   system across the different servers of the system.

   To find solutions to these and related problems, work has been
   underway for a number of years in Europe, under the aegis of
   ECMA, to develop security standards for open systems. The SESAME

Baize, Farrell, Parker     Document Expiration: 21 May 1996     [Page 1]


internet-draft                                       November 21, 1995

   project, initiated in the wake of the ECMA work by the Commission
   of the European Communities (CEC), has implemented a profile of
   the ECMA standards.

   This draft specifies the use of the security protocols
   implemented in the SESAME project in a GSS-API [GSSAPI]
   environment. A more complete overview of SESAME is available in
   [SESOV].

1.1 Table of Contents

1. BACKGROUND                                                       1
1.1 TABLE OF CONTENTS                                               2
1.2 ACKNOWLEDGEMENTS                                                3
2. THE SESAME TECHNOLOGY                                            3
2.1 OVERVIEW                                                        3
2.2 SESAME CONCEPTS                                                 4
2.2.1 SESAME ACCESS CONTROL CONCEPTS                                4
2.2.2 TARGET ACCESS ENFORCEMENT FUNCTION                            7
2.2.3 SESAME KEY DISTRIBUTION                                       8
2.2.4 USE OF CRYPTOGRAPHY IN SESAME                                10
3. GSS-API TOKEN FORMATS                                           10
3.1 TOKEN FRAMINGS                                                 10
3.2 INITIALCONTEXTTOKEN FORMAT                                     12
3.3 TARGETRESULTTOKEN                                              15
3.4 ERRORTOKEN                                                     16
3.5 PER MESSAGE TOKENS                                             17
3.5.1 MICTOKEN                                                     18
3.5.2 WRAPTOKEN                                                    19
3.6 CONTEXTDELETETOKEN                                             19
4. DATA ELEMENT DEFINITIONS                                        20
4.1 ACCESS CONTROL DATA ELEMENTS                                   20
4.1.1 GENERALISED CERTIFICATE                                      20
4.1.2 SECURITY ATTRIBUTES                                          25
4.1.3 PAC CONTENTS                                                 26
4.1.4 PROTECTION METHODS                                           28
4.1.5 EXTERNAL CONTROL VALUES CONSTRUCT                            33
4.2 BASIC KEY DISTRIBUTION                                         34
4.2.1 KEYING INFORMATION SYNTAX                                    34
4.2.2 OBJECT IDENTIFIERS                                           36
4.2.3 HYBRID INTER-DOMAIN KEY DISTRIBUTION SCHEME DATA ELEMENTS    37
4.2.4 KEY ESTABLISHMENT DATA ELEMENTS                              38
4.2.5 KERBEROS DATA ELEMENTS                                       39
4.2.6 PROFILING OF KD-SCHEMES                                      39
4.3 DIALOGUE KEY BLOCK                                             42
4.4 ATTRIBUTE DEFINITIONS                                          43
4.4.1 PRIVILEGE ATTRIBUTES                                         44
4.4.2 MISCELLANEOUS ATTRIBUTES                                     45
4.4.3 QUALIFIER ATTRIBUTES                                         45
5. ALGORITHMS AND CIPHERTEXT FORMATS                               46

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 2]


internet-draft                                       November 21, 1995

6. SESAME MECHANISM NEGOTIATION                                    48
7. NAME TYPES                                                      50
7.1 KERBEROS NAMING                                                50
7.2 DIRECTORY NAMING                                               51
8. ERROR CODES                                                     52
9. SECURITY CONSIDERATIONS                                         52
10. REFERENCES                                                     52
11. AUTHOR'S ADDRESSES                                             53
APPENDIX A: ASN.1 MODULE DEFINITIONS                               53
A.1 SESAME ASN.1 DEFINITIONS                                       53
A.2  KERBEROS ASN.1 DEFINITIONS                                    62
A.3  SPKM ASN.1 DEFINITIONS                                        64
APPENDIX B: ECMA BACKGROUND MATERIAL.                              68
APPENDIX C: SESAME IMPLEMENTATION STATUS                           68


1.2 Acknowledgements

   The SESAME project has been carried out by Bull SA, ICL and
   Siemens (SNI, Siemens ZFE and SSE) under part funding from the
   CEC as RACE project R2051.

   The SESAME GSS-API protocols re-use data structures developed in
   Kerberos V5 [Kerberos] and SPKM [SPKM] for key management and
   authentication. SESAME has merged these into a wider framework
   supporting distributed access control and delegation features.

   With apologies to those omitted, the following are amongst the
   people who have made significant contributions to the ECMA and
   SESAME work: Helmut Baumgaertner, John Cosgrove, Hiep Doan,
   Belinda Fairthorne, Peter Hartmann, Keith Howker, Per Kaijser,
   Jacques Lebastard, Ronan Long, Piers McMahon, Frank O'Dwyer,
   Denis Pinkas, Mike Roe, Laurent Rouilhac, Don Salmon, Asmund
   Skomedal and Mark Van DenWauver.

2.  THE SESAME TECHNOLOGY

2.1 Overview

   SESAME supports authentication, access control, communication
   integrity and communication confidentiality, and offers the means
   to ensure that access to services is policed to the appropriate
   level of security.

   The SESAME authentication service supports authentication using
   either the Kerberos V5 protocols or public key technology (based
   on X.511). In SESAME then, principals may authenticate using
   either a password or their private key.

   After successful authentication by an Authentication Server (AS),
   the initiator obtains a ticket (a "PAS Ticket") which he can

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 3]


internet-draft                                       November 21, 1995

   present to a Privilege Attribute Server (PAS) to obtain proof of
   his access rights in the form of a Privilege Attribute
   Certificate (PAC) which is a specific form of the Access Control
   Certificate defined in [ISO 10181-3], the Access Control
   Framework.

   Having selected a target application, the initiator requires
   keying information which, in SESAME provides two functions:

   -  PAC protection, in order to prevent anybody but the owner or
       authorised delegates making use of the PAC, and,
   -  key distribution, to support integrity or confidentiality
       protection of application data.

   Depending on whether the initiator and/or target make use of
   asymmetric or symmetric key technology for key distribution, the
   keying information is either fully constructed by the initiator
   or constructed with the assistance of a Key Distribution Service
   (KDS).

   The PAC and the keying information are then presented by the
   initiator to the target application in an initial context token.

   An access control decision can then be made based on the
   initiator's security attributes and the access control
   information attached to the controlled resource.

   Some extensions to the base GSS-API are required in order for
   applications to take full advantage of the access control and
   delegation capabilities of SESAME. As these extensions are
   independent of the SESAME mechanism they are specified in a
   separate draft [XGSSAPI].

   Having established a security context the initiator and target
   application can then use the per message protection services
   provided by GSS-API.

   This draft specifies the exchanges between initiator and target
   which take place in this environment.

2.2 SESAME Concepts

   The next sections contain very brief descriptions of the key
   concepts from the ECMA architecture which are implemented in
   SESAME. For full details refer to [SESOV].

2.2.1    SESAME Access Control Concepts

2.2.1.1  Domains

   A `security domain' is a set of elements, a security authority

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 4]


internet-draft                                       November 21, 1995

   and a set of security relevant activities in which the set of
   elements are subject to the security policy, administered by the
   security authority, for the specified activities [ISO 10181-1].
   In the current SESAME UNIX implementation there is one
   authentication service (AS), privilege attribute service (PAS)
   and key distribution service (KDS) per domain.

2.2.1.2  Identity

   Identity is a real world attribute having multiple uses in
   computer systems. Amongst the uses to which identity may be put
   are:

   -  as a means of claiming who you are, i.e. it is what you
       present when logging on to a system to help the system locate
       the authentication information that it will use to verify your
       claim. Call this use "Login",
   -  as a means of making you accountable for your actions, i.e. it
       is the identity that appears in audit trails. Call this use
       "Audit",
   -  as a means of obtaining access to protected objects, for
       example the identity that appears in an Access Control List.
       Call this use "Access",
   -  as a means of locating and permitting the release of your
       Privilege Attributes within a Privilege Attribute Service.
       This is a special case of the "Access" use. Call this use
       "Access to Privilege Attributes".

   All of these uses could in theory be encompassed by implementing
   one single type of attribute called "Identity Attribute" used for
   everything, and this is commonly done; however this results in
   there being a number of security policies that are impossible to
   implement.

   The question now arises: In order to support a reasonable
   spectrum of real world security policies, how many separate types
   of identity attribute is it appropriate to support in a
   distributed security architecture? The SESAME answer is:
   potentially all of them, but the identity used for login (the
   "Login Name") need not appear other than as a parameter in
   authentication exchanges. Most of the others are optional. The
   names that have been chosen for the identity attribute types that
   are supported in SESAME are as follows:

   Authenticated Identity   which in SESAME is the identity held in
                             the PAS ticket obtained from
                             Authentication Server. This is used for
                             "Access to Privilege Attributes",
   Access Identity          which is used in PACs for "Access" In
                             SESAME this attribute reflects a value
                             given by the PAS administrator,

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 5]


internet-draft                                       November 21, 1995

   Audit Identity           which is used in PACs for "Audit". In
                             SESAME this is a separate field in the
                             PAC, which reflects a value given by
                             the PAS administrator.


2.2.1.3  Privilege Attributes

   SESAME is designed to cater for heterogeneous systems where users
   need to access UNIX applications as well as proprietary
   applications in the same session. The user's security manager
   does not have to manage separate sets of Privilege Attributes for
   each of end-system even if they handle the same global values in
   different ways.

   ECMA addressed this problem by defining standard Privilege
   Attribute types that are independent of specific end-system
   representations but which can be mapped as appropriate in the
   receiving system. When a SESAME user is granted membership of
   e.g. a group, this can be represented once as a Privilege
   Attribute in a global form.

   The privilege attributes which are supported in this draft are:
                 access identity
                 primary group
                 group
                 role

   SESAME also allows for domain defined attributes (i.e. defined by
   the PAS administrator) to be placed in the PAC.

2.2.1.4  Roles

   SESAME supports access control policies based on the concept of a
   user's organisational role or job. A user working in a particular
   role is likely to need particular privileges and controls which
   give the required access to particular applications and services.
   For example, he may need to be a member of a particular group and
   have access to particular target application groups. The
   administrator defines a set of Privilege Attributes which are
   associated with a role, and the controls (see later) which are to
   apply to their use. The administrator also defines which users
   can take which roles.

   Some of the advantages of role based access control are:

   -  the user does not need to be aware of the Privilege Attributes
       he has. The most he needs to know are his different role names
       (e.g. quality controller, or pay clerk) and select one of
       these. However he does not necessarily even need to know these
       since he always has either an individual default role name or

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 6]


internet-draft                                       November 21, 1995

       the system default role name,
   -  if the user changes job, once the administrator has updated
       his roles, when he next uses the system, he automatically gets
       the privileges associated with the new job,
   -  administration is significantly simplified if many users take
       the same role, as the set of Privilege Attributes for the role
       only need to be defined once,
   -  if a specific "Role" Privilege Attribute is associated with
       the job role, access control in applications can be based on
       this, rather than on individual user identities, thus
       simplifying administration of the target system.

2.2.1.5  Access Paths and Delegation

   Distributed systems commonly contain application services that
   are themselves distributed over a number of servers. An initiator
   accessing such a service may not know which server can support
   its requests, and may simply make a request on a convenient
   server, expecting that server to act as its delegate with respect
   to another server if necessary. This delegation could be repeated
   until the server that can handle the request directly is found.

   An initiator may not wish to delegate all his rights, and may
   also want to restrict the area within which the PAC may be used.
   For that purpose, PACs can be arranged to be valid only for
   specific nominated targets. A PAC may contain many target names.

   Mechanisms are provided to prevent a PAC from being delegated
   where this is appropriate. In fact the same PAC can be sometimes
   delegatable, sometime not.

2.2.1.6  Application trust Groups

   A PAC may contain one or more target or delegate application or
   "Trust Group" names specifying which targets or delegate-targets
   the PAC is valid for. A Trust Group name is simply the name of a
   group of applications, defined by the security administrator,
   that mutually trust each other not to spoof each others'
   identities.

   In order to allow for a PAC which is usable at all targets a
   special trust group is defined - the "universal" trust group. A
   PAC targeted at the universal trust group can still be protected
   using target controls (as in delegation) which means that such a
   PAC still cannot be stolen.

2.2.2    Target Access Enforcement Function

   In SESAME the security processing functionality on the target is
   split between two different entities - the target application and
   the target access enforcement function (targetAEF). ISO [ISO/IEC

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 7]


internet-draft                                       November 21, 1995

   10181-3] defines an Access Enforcement Function to be  something
   collocated with a target application which controls access to
   that target application. This has a number of advantages:

   -  the security critical code is isolated which makes security
       evaluation simpler,
   -  administration is simplified as one targetAEF may "serve" many
       target applications,
   -  the number of long-term keys in the system can be reduced
       since only the targetAEF need share a symmetric key with the
       security server or possess a key pair,
   -  different administrators can be responsible for the target
       application and targetAEF,
   -  as the initiator establishes a key with the targetAEF (see
       later) this keying information can be re-used whenever another
       target on the same machine is accessed.

   The functions for which the targetAEF is responsible are:

   -  processing of keying information (resulting in the
       establishment of a shared symmetric key between initiator and
       target)
   -  PAC validation; including e.g. checking that the PAS that
       produced the PAC is trusted, the timeliness of the PAC, and
       its cryptographic correctness
   -  target access control; releasing the established keys to the
       appropriate target application

   In the UNIX SESAME implementation, the targetAEF is implemented
   as a separate daemon per machine which deals with all target
   applications on that machine. The SESAME GSS-API library linked
   to the target application communicates with this process.  Of
   course, none of this precludes the targetAEF being linked to the
   target in other implementations (e.g. on Windows) - however, in
   such cases some of the above advantages are lost.

2.2.3    SESAME Key Distribution

   There are three different key distribution schemes in SESAME.
   Each depends upon the existence of long term cryptographic keys
   which held by targetsAEFs and KDSs. These keys may be either
   symmetric or asymmetric. In the case where the keys are symmetric
   they are always shared between the targetAEF and its KDS. In the
   case where the long term keys are asymmetric we speak of, for
   example, the KDS's private key.

   Initiators may also possess symmetric or asymmetric keys.  In the
   case where an initiator possesses a  symmetric key this will have
   been established as a result of an earlier authentication.

   SESAME can be extended to support other variants, e.g. where the

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 8]


internet-draft                                       November 21, 1995

   initiator shares a symmetric key with a KDS and the targetAEF
   possesses a key pair.

2.2.3.1  Basic keys and dialogue keys

   In SESAME two separate keys which are established between the
   initiator and target for the purpose of application data
   protection. These are known as the integrity and confidentiality
   dialogue keys and are always symmetric.

   Another symmetric key, called the basic key, is established
   between the initiator and targetAEF which is used in PAC
   protection and to derive the dialogue keys.

   The basic key is transmitted from the initiator to the target in
   a structure called a TargetKeyBlock. The information required to
   derive the dialogue keys is transmitted in a structure called a
   DialogueKeyPackage.

2.2.3.2  Basic symmetric key distribution scheme (symmIntradomain)

   In this scheme, the initiator and the targetAEF each share
   different secret keys with the same KDS.

   To establish a basic key between an initiator and a targetAEF,
   the initiator KDS returns, as a result of an initiator request, a
   targetKeyBlock containing a basic key encrypted under the
   targetAEF's long term secret key. On receipt of the
   targetKeyBlock, the targetAEF can extract the basic key directly
   from it.

   An unmodified Kerberos TGS can be used as the KDS in this case.

2.2.3.3  Symmetric key distribution scheme with asymmetric KDSs
(hybridInterdomain)

   In this scheme, the initiator shares a key with a KDS that is
   different from the KDS with which the targetAEF shares its long
   term key. In addition, each KDS possesses an asymmetric key pair.

   To establish a basic key between an initiator and a targetAEF,
   the initiator KDS returns, as a result of an initiator request, a
   TargetKeyBlock containing a basic key encrypted under a temporary
   key and the temporary key encrypted under the targetAEF KDS's
   public key. The TargetKeyBlock is signed using the initiator
   KDS's private key.

   On receipt of the TargetKeyBlock, the targetAEF transmits it to
   its own KDS, and gets back the basic key encrypted under the long
   term secret key it (the targetAEF) shares with its KDS.


Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 9]


internet-draft                                       November 21, 1995

   A modified Kerberos TGS can be used as the KDS in this case.

2.2.3.4  Full public key distribution scheme (asymmetric)

   In this scheme, neither the initiator nor the targetAEF uses a
   KDS. Both the initiator and the targetAEF possesses a
   private/public key pair.

   To establish a basic key with a targetAEF, the initiator
   constructs a TargetKeyBlock containing a basic key encrypted
   under the targetAEF's public key. The TargetKeyBlock is signed
   using the initiator's private key.

   On receipt of the TargetKeyBlock, the targetAEF directly
   establishes a basic key from it.

   Modified SPKM handling code can be used for this scheme.

2.2.3.5  Derivation of Dialogue Keys

   Once a basic key has been established between the initiator and
   targetAEF, the derivation of the dialogue keys can take place.
   The dialogue keys are derived using key offsetting - see the
   description of the dialogue key package below.

2.2.4    Use of Cryptography in SESAME

   In several countries of the world the use of cryptography is
   subject to government control, particularly in relation to the
   hiding of information by enciphering it.

   The SESAME architecture has been designed to address these
   problems. The use of confidentiality is kept to a minimum. It is
   provided only where it is an essential function (for example in
   the SESAME key distribution protocols it is necessary to encipher
   the basic key being distributed). PACs are cryptographically
   signed, not enciphered. When encipherment of user and system data
   is a requirement, SESAME allows the algorithms and keys used to
   be separately specified, permitting them to have characteristics
   acceptable to the prevailing political environment.

3.  GSS-API TOKEN FORMATS

   This section describes protocol-visible characteristics of the
   GSS-API as implemented above the SESAME mechanism.

3.1 Token framings

   Following [GSS-API], tokens are enclosed within framing as
   follows:


Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 10]


internet-draft                                       November 21, 1995

   Token ::=
     [APPLICATION 0] IMPLICIT SEQUENCE {
      thisMech      MechType, -- the OBJECT IDENTIFIER specified
   below
      innerContextToken ANY DEFINED BY thisMech
   }

   The SESAME mechanism type is identified by an OBJECT IDENTIFIER
   with value:

   { generic-sesame-mech (y) (z) }

   Where:

   generic-sesame-mech ::=OBJECT IDENTIFIER { tbs }

   The values of y and z represent architectural options and
   cryptographic algorithm profiles which are specified in section
   5. These values are intended to be negotiated using a generic GSS-
   API mechanism negotiation scheme like that given in [SNEGO].

   The above GSS-API framing is to be applied to all tokens emitted
   by the SESAME GSS-API mechanism, including context-establishment
   tokens, per-message tokens, and context-deletion token.

   The innerContextToken field of context establishment tokens for
   the SESAME GSS-API mechanism will consist of a SESAME token
   (InitialContextToken, TargetResultToken, ErrorToken) containing a
   token identifier (tokenId) field having the value 01 00 (hex) for
   InitialContextToken, 02 00 (hex) for TargetResultToken, and 03 00
   (hex) for ErrorToken. These are defined to be:

   InitialContextToken  sent by the initiator to a target, to start
                         the process of establishing a Security
                         Association. Returned by the
                         GSS_Init_sec_context call.
   TargetResultToken    sent to the initiator by the target
                         following receipt of an Initial Context
                         Token. Returned by the
                         GSS_Accept_sec_context call.
   ErrorToken           sent by target on detection of an error
                         during Security Association establishment.
                         Returned by either the GSS_Init_sec_context
                         call or the GSS_Accept_sec_context call.

   The innerContextToken field of per-message tokens for the SESAME
   GSS-API mechanism will consist of a SESAME  token (MICToken,
   WrapToken) containing a tokenId field having the value 01 01
   (hex) for MICToken, and 02 01 (hex) for WrapToken. These are
   defined to be:


Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 11]


internet-draft                                       November 21, 1995

   MICToken             sent either by the initiator or the target
                         to verify the integrity of the user data
                         sent separately. Returned by GSS_GetMIC.
   WrapToken            sent either by the initiator or the target.
                         Encapsulates the input user data
                         (optionally encrypted) along with integrity
                         check values. Returned by GSS_Wrap.

   The innerContextToken field of context-deletion token for the
   SESAME GSS-API mechanism will consist of a SESAME token
   (ContextDeleteToken) containing a tokenId field having the value
   01 02 (hex). This is defined to be:

   ContextDeleteToken   sent either by the initiator, or the target
                         to release a Security Association. Returned
                         by GSS_Delete_sec_context.

3.2 InitialContextToken format

   This construct provides for the carrying of the following
   Security Association information:

   -  replay protection,
   -  keying information for establishing both the key for
       protecting the exchange of context tokens, including this one,
       and keys for later use in protecting user data exchanges,
   -  access control information (ACI) used to determine what access
       is to be granted by the target to the initiator of the
       Security Association,
   -  information to control the applicability of the ACI (e.g.
       whether delegation is permissible, or identifying for which
       targets the access rights are valid),
   -  information to protect the ACI from being tampered with or
       stolen,
   -  accountability information for use in audit trails.

   InitialContextToken ::=  SEQUENCE{
     ictContents    [0]   ICTContents,
     ictSeal        [1]   Seal
   }

   ictContents
   Body of the initial context token

   ictSeal
   Seal of ictContents computed with the integrity dialogue key.
   Only the sealValue field of the Seal data structure is present.
   The cryptographic algorithms that apply are specified by
   integDKUseInfo in the dialogueKeyBlock field of the initial
   context token.


Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 12]


internet-draft                                       November 21, 1995

   ICTContents ::= SEQUENCE {
     tokenId              [0]   INTEGER, -- shall contain X'0100'
     SAId               [1]   OCTET STRING,
     targetAEFPart        [2]   TargetAEFPart,

     targetAEFPartSeal    [3]   Seal,
     contextFlags       [4]   BIT STRING {
                              delegation         (0),
                              mutual-auth        (1),
                              replay-detect       (2),
                              sequence           (3),
                              conf-avail         (4),
                              integ-avail        (5)
                              }
     utcTime              [5]   UTCTime      OPTIONAL,
     usec               [6]   INTEGER    OPTIONAL,
     seq-number           [7]   INTEGER      OPTIONAL,
     initiatorAddress     [8]   HostAddress   OPTIONAL,
     targetAddress        [9]   HostAddress   OPTIONAL
        -- imported from [Kerberos] and used as channel bindings
   }

   tokenId
   Identifies the initial-context token. Its value is 01 00 (hex)

   SAId
   A  random number for identifying the Security Association being
   formed; it is one which (with high probability) has not been used
   previously. This random number is generated by the initiator GSS-
   API implementation and processed by the target GSS-API
   implementation as follows :

   -  If no targetResultToken is expected, the SAId value is taken
       to be the identifier of the Security Association being
       established (if this is unacceptable to the target, then an
       error token with etContents value of
       gss_ses_s_sg_sa_already_established must be generated).
   -  If a targetResultToken is expected, the target generates its
       random number and concatenates it to the end on the
       initiator's random number. The concatenated value is then
       taken to be the identifier of the Security Association being
       established.

   targetAEFPart
   Part of the initial-context token to be passed to the target
   access enforcement function.

   targetAEFPartSeal
   Seal of the targetAEFPart computed with the basic key. Only the
   sealValue field of the Seal data structure is present. The
   cryptographic algorithms that apply are specified by algorithm

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 13]


internet-draft                                       November 21, 1995

   profile in the SESAME mechanism option (see section 6).

   contextFlags
   Combination of flags that indicates context-level functions
   requested by the GSS-API initiator implementation.

   delegation       when set to 0, indicates that the initiator
                     explicitly forbids delegation of the PAC in the
                     targetAEFPart.
   mutual-auth      indicates that mutual authentication is
                     requested.
   replay-detect    indicates that replay detection features are
                     requested to be applied to messages transferred
                     on the established Security Association.
   sequence         indicates that sequencing features are
                     requested to be enforced to messages
                     transferred on the established Security
                     Association.
   conf-avail       indicates that a confidentiality service is
                     available on the initiator side for the
                     established Security Association.
   integ-avail      indicates that an integrity service is
                     available on the initiator side for the
                     established Security Association.
   utcTime
   The initiator's UTC time.

   usec
   Micro second part of the initiator's time stamp. This field along
   with utcTime are used together to specify a reasonably accurate
   time stamp

   seq-number
   When present, specifies the initiator's initial sequence number.
   Otherwise, the default value of 0 is to be used as an initial
   sequence number.

   initiatorAddress
   Initiator's network address part of the channel bindings. This
   field is only present when channel bindings are transmitted by
   the GSS-API caller to the SESAME GSS-API implementation.

   targetAddress
   Target's network address part of the channel bindings. This field
   is only present when channel bindings are transmitted by the GSS-
   API caller to the SESAME GSS-API implementation.

   TargetAEFPart ::= SEQUENCE {
     pacAndCVs          [0]   SEQUENCE OF CertandECV OPTIONAL,
     targetKeyBlock   [1]   TargetKeyBlock,
     dialogueKeyBlock [2]   DialogueKeyBlock,

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 14]


internet-draft                                       November 21, 1995

     targetIdentity   [3]   Identifier,
     flags            [4]   BIT STRING   {
                              delegation         (0)
                            }
   }

         Note 1:  SESAME Validity philosophy is that individual
         PACs have validity of their own, and that it is not
         sensible to have an overall separately specified validity
         period for the whole context.
         Note 2:  SESAME does not permit the target to opt for a
         shorter validity time than that specified by the initiator.
         If it wants to cut off the context earlier it just does it,
         returning an appropriate error.

   pacAndCVs
   The initiator ACI to be used for this Security Association. This
   field is not present when the association does not require any
   ACI. This field contains the PAC together with associated PAC
   protection information. In this specification exactly one of
   these should be present.

   targetKeyBlock
   The targetKeyBlock carrying the basic key to be used for the
   Security Association being established.

   dialogueKeyBlock
   A dialogue key block used by the targetAEF along with the basic
   key to establish an integrity dialogue key and a confidentiality
   dialogue key for per-message protection over the Security
   Association being established.

   targetIdentity
   The identity of the intended target of the Security Association.
   Used by the targetAEF to validate the PAC. Can also be used by
   the targetAEF to help protect the delivery of dialogue keys.

   flags
   flags required by the Target AEF for its validation process. Only
   contains a delegation flag, the value of which is the same as the
   value of delegation flag in contextFlag field of ictContents.
   When the flag is set, all ECVs sent in pacAndCVs are made
   available to the target. Other bits are reserved for future use.

3.3 TargetResultToken

   This token is returned by the target if the mutual-req flag is
   set in the Initial Context Token. It serves to authenticate the
   target to the initiator, since only the genuine target could
   derive the integrity dialogue key needed to seal the
   TargetResultToken.

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 15]


internet-draft                                       November 21, 1995


   TargetResultToken ::=  SEQUENCE{
     trtContents    [0] TRTContents,
     trtSeal        [1] Seal
   }

   TRTContents ::= SEQUENCE {
     tokenId        [0]   INTEGER,    -- shall contain X'0200'
     SAId         [1]   OCTET STRING,
     utcTime        [5]   UTCTime     OPTIONAL,
     usec         [6]   INTEGER     OPTIONAL,
     seq-number     [7]   INTEGER     OPTIONAL,
   }

         Note:    There is no field for returning certification
         data here. This is because any such data that may be
         required is assumed to be returned at the conclusion of
         mechanism negotiation.

   trtContents
   This contains only administrative fields, identifying the token
   type, the context and providing exchange integrity.

         seq-number
         When present, specifies the target's initial sequence
         number, otherwise, the default value of 0 is to be used as
         an initial sequence number.

   The other administrative fields are as described in above.

   trtSeal
   Seal of trtContents computed with the integrity dialogue key.
   Only the sealValue field of the Seal data structure is present.
   The cryptographic algorithms that apply are specified by
   integDKUseInfo in the dialogueKeyBlock field of the initial
   context token.

3.4 ErrorToken

   ErrorToken ::=   {
      tokenType     [0]   OCTET STRING VALUE X'0400',
      etContents    [1]   ErrorArgument,
   }

   etContents
   Contains the reason for the creation of the error token. The
   different reasons are given as minor status return values.

   ErrorArgument ::= ENUMERATED {
     gss_ses_s_sg_server_sec_assoc_open              (1),
     gss_ses_s_sg_incomp_cert_syntax                     (2),

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 16]


internet-draft                                       November 21, 1995

     gss_ses_s_sg_bad_cert_attributes                (3),
     gss_ses_s_sg_inval_time_for_attrib              (4),
     gss_ses_s_sg_pac_restrictions_prob              (5),
     gss_ses_s_sg_issuer_problem                         (6),
     gss_ses_s_sg_cert_time_too_early                (7),
     gss_ses_s_sg_cert_time_expired                  (8),
     gss_ses_s_sg_invalid_cert_prot                  (9),
     gss_ses_s_sg_revoked_cert                           (10),
     gss_ses_s_sg_key_constr_not_supp                (11),
     gss_ses_s_sg_init_kd_server_ unknown            (12),
     gss_ses_s_sg_init_unknown                           (13),
     gss_ses_s_sg_alg_problem_in_dialogue_key_block    (14),
     gss_ses_s_sg_no_basic_key_for_dialogue_key_block   (15),
     gss_ses_s_sg_key_distrib_prob                       (16),
     gss_ses_s_sg_invalid_user_cert_in_key_block       (17),
     gss_ses_s_sg_unspecified                        (18),
     gss_ses_s_g_unavail_qop                             (19),
     gss_ses_s_sg_invalid_token_format                   (20)
   }

3.5 Per Message Tokens

   The syntax of the Per Message Token has the same general
   structure for both MIC and Wrap tokens:

   PMToken ::=  SEQUENCE{
     pmtContents    [0]   PMTContents,
     pmtSeal        [1]   Seal
        -- seal over the pmtContents being protected
   }

   PMTContents ::= SEQUENCE {
     tokenId              [0]   INTEGER, -- shall contain X'0101'
     SAId               [1]   OCTET STRING,
     seq-number           [2]   INTEGER
   OPTIONAL,
     userData           [3]   CHOICE {
                                plaintextBIT STRING,
                                ciphertext    OCTET STRING
                        }                            OPTIONAL,
     directionIndicator [4]   BOOLEAN                OPTIONAL
   }

   pmtContents

         tokenId
         SAId
         See above for a description of these fields

         seq-number
         This field must be present if replay detection or message

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 17]


internet-draft                                       November 21, 1995

         sequencing have been specified as being required at
         Security Association initiation time. The field contains a
         message sequence number whose value is incremented by one
         for each message in a given direction, as specified by
         directionIndicator. The first message sent by the initiator
         following the InitialContextToken shall have the message
         sequence number specified in that token, or if this is
         missing, the value 0. The first message returned by the
         target shall have the message sequence number specified in
         the TargetReplyToken if present, or failing this, the value
         0.
         The receiver of the token will verify the sequence number
         field by comparing the sequence number with the expected
         sequence number and the direction indicator with the
         expected direction indicator. If the sequence number in the
         token is higher than the expected number, then the expected
         sequence number is adjusted and GSS_S_GAP_TOKEN is
         returned. If the token sequence number is lower than the
         expected number, then the expected sequence number is not
         adjusted and GSS_S_DUPLICATE_TOKEN or GSS_S_OLD_TOKEN is
         returned, whichever is appropriate. If the direction
         indicator is wrong, then the expected sequence number is
         not adjusted and GSS_S_UNSEQ_TOKEN is returned

         userData
         See specific token type narratives below.

         directionIndicator
         FALSE indicates that the sender is the context initiator,
         TRUE that the sender is the target.

   pmtSeal
   See specific token type narratives below.

3.5.1    MICToken

   Use of the GSS_Get_MIC() call yields a per-message token,
   separate from the user data being protected, which can be used to
   verify the integrity of that data as received. The token and the
   data may be sent separately by the sending application and it is
   the receiving application's responsibility to associate the
   received data with the received token. The syntax of the token
   is:

      MICToken  ::=   PMToken

   The overall structure and field contents of the token are
   described above. Fields specific to the MICToken are:

   userData
   Not present for MIC Tokens.

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 18]


internet-draft                                       November 21, 1995


   pmtSeal
   The Checksum is calculated over the DER encoding of the
   pmtContents field with the user data temporarily placed in the
   userData field. The userData field is not transmitted.


3.5.2    WrapToken

   Use of the GSS_Wrap() call yields a token which encapsulates the
   input user data (optionally encrypted) along with associated
   integrity check values. The token emitted by GSS_Wrap() consists
   of an integrity header followed by a body portion that contains
   either the plaintext data (if conf_alg = NULL) or encrypted data.
   The syntax of the token is:

      WrapToken  ::=   PMToken

   The overall structure and field contents of the token are
   described above. Fields specific to the WrapToken are:

   userData
   Present either in plain text form (the choice is plaintext), or
   encrypted (choice ciphertext). If the data is encrypted, it is
   performed using the Confidentiality Dialogue Key, and as in
   [Kerberos], an 8-byte random confounder is first prepended to the
   data to compensate for the fact that an IV of zero is used for
   encryption.

   wtSeal
   The Checksum is calculated over the pmtContents field, including
   the userData. However if the userData field is to be encrypted,
   the seal value is computed prior to the encryption.

3.6 ContextDeleteToken

   The ContextDeleteToken is issued by either the context initiator
   or the target to indicate to the other party that the context is
   to be deleted.

   ContextDeleteToken ::=  SEQUENCE {
     cdtContents  [0]   CDTContents,
     cdtSeal      [1]   Seal
                          -- seal over cdtContents, encrypted
                          -- under the Integrity Dialogue Key
                          -- contains only the sealValue field
   }

   CDTContents ::= SEQUENCE {
     tokenType    [0]   OCTET STRING VALUE X'0301',
     SAId       [1]   OCTET STRING,

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 19]


internet-draft                                       November 21, 1995

     utcTime      [2]   UTCTime OPTIONAL,
     usec       [3]   INTEGER OPTIONAL,
     seq-number   [4]   INTEGER OPTIONAL,
   }

   cdtContents
   This contains only administrative fields, identifying the token
   type, the context and providing exchange integrity.

         seq-number
         When present, this field contains a value one greater than
         that of the seq-number field of the last token issued from
         this issuer.
         The other administrative fields are as described above.

   trtSeal
   See above for a general description of the use of this construct.

4.  DATA ELEMENT DEFINITIONS

   In this section we give the details of the structures which are
   present in the tokens defined above.

   These ASN.1 definitions represent the profile of the ASN.1 types
   defined in [ECMA-219] which are implemented in the SESAME
   project. In some cases CHOICEs and OPTIONAL fields which are
   defined by ECMA have been omitted as they are not supported in
   this version of SESAME. In order to retain compatibility this
   leads to a non-obvious numbering for tags.

   In this specification all of the type specifying object
   identifiers are below the arc:

   generic-sesame-oids ::= OBJECT IDENTIFIER { tbs }
      -- top of the SESAME types arc


4.1 Access Control Data Elements

   The ASN.1 definitions for the PAC and related data structures.

4.1.1    Generalised certificate

   A Generalised Certificate (PAC) is composed of three main
   structural components :

   The "commonContents" fields collectively serve to provide
   generally required management and control over the use of the
   PAC.

   The "specificContents" fields are different for different types

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 20]


internet-draft                                       November 21, 1995

   of certificate, and contain a type identifier to indicate the
   type. In this draft only one type is defined: the Privilege
   Attribute Certificate (PAC).

   The "checkValue" fields are used to guarantee the origin of the
   certificate.

   GeneralisedCertificate ::= SEQUENCE{
     certificateBody    [0]   CertificateBody,
     checkValue       [1]   CheckValue}

   CertificateBody ::= CHOICE{
     encryptedBody      [0]   BIT STRING,
     normalBody       [1]   SEQUENCE{
                              commonContents  [0] CommonContents,
                              specificContents[1] SpecificContents
                            }
   }

   The next sections describe these three main structural components
   of the Generalised Certificate.

4.1.1.1  Common Contents fields

   CommonContents ::= SEQUENCE{
     comConSyntaxVersion  [0]   INTEGER { version1 (1) }DEFAULT 1,
     issuerDomain       [1]   Identifier             OPTIONAL,
     issuerIdentity     [2]   Identifier,
     serialNumber       [3]   INTEGER,
     creationTime       [4]   UTCTime                OPTIONAL,
     validity           [5]   Validity,
     algId              [6]   AlgorithmIdentifier,
     hashAlgId            [7]   AlgorithmIdentifier    OPTIONAL
   }

         Note:
         In the imported definition of AlgorithmIdentifier, ISO
         currently permits both a hash and a cryptographic algorithm
         to be specified. If this is done, they must appear in the
         algId field. The hashAlgId field is present for those cases
         where a separate hash algorithm specification is required.

   Identifier ::= CHOICE{
     objectId         [0]   OBJECT IDENTIFIER,
     directoryName      [1]   Name,

            -- imported from the Directory Standard
     printableName      [2]   PrintableString,
     octets           [3]   OCTET STRING,
     intVal           [4]   INTEGER,
     bits             [5]   BIT STRING,

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 21]


internet-draft                                       November 21, 1995

     pairedName       [6]   SEQUENCE{
                              printableName   [0] PrintableString,
                              uniqueName     [1] OCTET STRING
                            }
   }

   Validity ::= SEQUENCE {
            notBefore     UTCTime,
            notAfter      UTCTime
   } -- as in [ISO/IEC 9594-8]
   -- Note: Validity is not tagged, for compatibility with the
   -- Directory Standard.

   comConFieldsSyntaxVersion
   Identifies the version of the syntax of the combination of the
   commonContents and the checkValue fields parts of the
   certificate.

   issuerDomain
   The security domain of the issuing authority. Not required if the
   form of issuerIdentity is a full distinguished name, but required
   if other forms of naming are in use, such as proprietary
   identifiers.

   issuerIdentity
   The identity of the issuing authority for the certificate.

         Note
         Identifier is a general syntax which is used for all fields
         containing names or identifiers of various kinds. It can
         take any of the forms listed: object identifier, Directory
         DN or RDN, a printable name, an octet string, an integer
         value, a bit string or a paired value consisting of
         readable and unique components.

   serialNumber
   The serial number of the certificate (PAC) as allocated by the
   issuing authority.

   creationTime
   The UTC time that the certificate was created, according to the
   authority that created it.

   validity
   A pair of start and end times within which the certificate is
   deemed to be valid.

   algId
   The identifier of the symmetric or of the asymmetric
   cryptographic algorithm used to seal or to sign the certificate.
   If there is a single identifier for both the encryption algorithm

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 22]


internet-draft                                       November 21, 1995

   and the hash function, it appears in this field.

   hashAlgId
   The identifier of the hash algorithm used in the seal or in the
   signature.

4.1.1.2  Specific Certificate Contents

   SpecificContents ::= CHOICE{
     pac                [1]   PACSpecificContents
      -- only the PAC is used here
   }

   SpecificContents
     pac               The PAC specific contents defined below.

4.1.1.3  Check value

   In this specification a PAC is protected using by being digitally
   signed by the issuer.

   A signature may be accompanied by information identifying the
   Certification Authority under which the signature can be
   verified, and with an optional convenient reference to or the
   actual value of the user certificate for the private key that the
   signing authority used to sign the certificate.

   CheckValue ::= CHOICE{
     signature      [0]   Signature
        -- only signature supported here
   }

   Signature ::= SEQUENCE{
     signatureValue       [0]   BIT STRING,
     asymmetricAlgId        [1]   AlgorithmIdentifier
   OPTIONAL,
     hashAlgId              [2]   AlgorithmIdentifier
   OPTIONAL,
     issuerCAName         [3]   Identifier
   OPTIONAL,
     caCertInformation      [4]   CHOICE {
            caCertSerialNumber    [0]    INTEGER,
            certificationPath     [1]    CertificationPath
     }
   OPTIONAL
   }
   --CertificationPath    is imported from [ISO/IEC 9594-8]

   signatureValue
   The value of the signature. It is the result of an asymmetric
   encryption of a hash value of the certificateBody.

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 23]


internet-draft                                       November 21, 1995


   asymmetricAlgId
   Only present if the certificate body is encrypted, then it is a
   duplication of the algId value in "commonContents".

   hashAlgId
   Only present if the certificate body is encrypted, then it is a
   duplication of the hashAlgId value in "commonContents".

   issuerCAName
   The identity of the Certification Authority that has signed the
   user certificate corresponding to the private key used to sign
   this certificate.

   caCertInformation
   Contains either just a certificate serial number which together
   with the issuerCAName uniquely identifies the user certificate
   corresponding to the private key used to sign this certificate,
   or a full specification of a certification path via which the
   validity of the signature can be verified. The latter option
   follows the approach used in [ISO/IEC 9594-8].

   The Seal structure is used in the Tokens defined in section 3
   above.

   Seal ::= SEQUENCE{
     sealValue          [0]   BIT STRING,
     symmetricAlgId   [1]   AlgorithmIdentifier        OPTIONAL,
     hashAlgId          [2]   AlgorithmIdentifier      OPTIONAL,
     targetName       [3]   Identifier           OPTIONAL,
     keyId            [4]   INTEGER              OPTIONAL
   }

   sealValue
   The value of the seal. It is the result of a symmetric encryption
   of a hash value of a set of octets (which are the DER encoding of
   some ASN.1 type)

   symmetricAlgId
   An optional indicator of the sealing algorithm.

   hashAlgId
   Only present if the symmetricAlgId does not specify which hashing
   algorithm is used.

   targetName
   This field identifies the targetAEF or target with which the
   symmetric key used for the seal is shared.

   keyId
   This serial number together with the targetName uniquely

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 24]


internet-draft                                       November 21, 1995

   identifies the symmetric key used in the seal.

4.1.1.4  Certificate Identity

   Certificate identity is a named concatenation of the three named
   field types defined in CommonContents which together uniquely
   identify a certificate.

   CertificateId ::= SEQUENCE {
     issuerDomain   [0] Identifier
   OPTIONAL,
     issuerIdentity [1] Identifier,
     serialNumber   [2] INTEGER
   }
            -- serialNumber is the same as in [ISO/IEC 9594-8]

4.1.2    Security Attributes

   The security attribute is a basic construct used in all
   certificate types defined in this specification.

   SecurityAttribute ::= SEQUENCE{
     attributeType    Identifier,
     attributeValue SET OF SEQUENCE {
                      definingAuthority  [0] Identifier
   OPTIONAL,
                      securityValue      [1] SecurityValue
                    }
   }
      --  NOTE: SecurityAttribute is not tagged, for compatibility
      -- with the Directory Standard.

   SecurityValue ::= CHOICE{
     directoryName      [0]   Name,
     printableName      [1]   PrintableString,
     octets           [2]   OCTET STRING,
     intVal           [3]   INTEGER,
     bits             [4]   BIT STRING,
     any                [5]   ANY -- defined by attributeType
   }

   Note:
   Only one set member is permitted in attributeValue. Multivalue
   attributes are effected in the securityValue field, where the
   "SEQUENCE OF" construct can be used. This restriction avoids any
   certificate hash value ambiguity that may occur with
   indeterminacy in the representation of the order of SET members.
   At the same time, by including "SET OF" in the syntax, we enable
   security attributes to be stored as normal in a Directory
   whenever the choice made within Identifier is OBJECT IDENTIFIER.
   If other choices are made, encapsulation in an outer Directory

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 25]


internet-draft                                       November 21, 1995

   Attribute structure would first be necessary.

   attributeType
   Defines the type of the attribute. Attributes of the same type
   have the same semantics when used in Access Decision Functions,
   though they may have different defining authorities.

   definingAuthority
   The authority responsible for the definition of the semantics of
   the value of the security attribute. This optional field of the
   attributeValue can be used to resolve potential value clashes.

         Note:
         This is not to be confused with the Attribute Authority
         responsible for controlling which principals are permitted
         to use which attribute values in PACs - though under some
         security policies they may be the same.

   securityValue
   The value of the security attribute. Its syntax is can be either
   one of the basic syntaxes for attributes or a more complex one
   determined by the attribute type.

4.1.3    PAC Contents

   The syntax of the PAC contents is:

   PACSpecificContents ::= SEQUENCE{
     pacSyntaxVersion [0]   INTEGER{  version1 (1)}
   DEFAULT 1,
     protectionMethods  [2]   SEQUENCE OF MethodGroup
   OPTIONAL,
     pacType            [4]   ENUMERATED{
                                  primaryPrincipal     (1),
                                  temperedSecPrincipal  (2),
                                  untemperedSecPrincipal(3)
                            }
   DEFAULT 3,
     privileges       [5]   SEQUENCE OF PrivilegeAttribute,
     restrictions     [6]   SEQUENCE OF Restriction
   OPTIONAL,
     miscellaneousAtts  [7]   SEQUENCE OF SecurityAttribute
   OPTIONAL,
     timePeriods        [8]   TimePeriods
   OPTIONAL
   }

   PrivilegeAttribute ::= SecurityAttribute

   Restriction ::= SEQUENCE {
     howDefined [0] CHOICE {

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 26]


internet-draft                                       November 21, 1995

                included        [3] BIT STRING
                },
                                -- the actual restriction in a form
                                -- undefined here
     type       [2] ENUMERATED  {
                      mandatory (1),
                      optional    (2)}       DEFAULT mandatory,
     targets      [3] SEQUENCE OF SecurityAttribute    OPTIONAL
   }
                  -- applies to all targets if this is omitted

   pacSyntaxVersion
   Syntax version of the PAC.

   protectionMethods
   A sequence of optional groups of Method fields used to protect
   the certificate from being stolen or misused. For a full
   description see section 4.1.4.

   pacType
   Indicates whether the privileges contained in the PAC are those
   of a Primary Principal, of a Secondary Principal tempered by the
   privileges of a Primary Principal (the privileges of the
   Secondary Principal which appear in the PAC are a subset of the
   whole set of the privileges of the Secondary Principal, taking
   into consideration the privileges of the Primary Principal - or
   the lack of knowledge of them) or of a Secondary Principal (the
   privileges of the Secondary Principal have not been affected by
   any privileges of the Primary Principal).

   privileges
   Privilege Attributes of the principal.

   restrictions
   This field enables the original owner of the PAC to impose
   constraints on the operations for which it is valid. A
   restriction is a bit string which can be either included in the
   PAC or external to it. A restriction can be targeted to one or
   more application components. Two types of restriction are
   supported:
         -   Mandatory: If a target application to which the
              restriction applies cannot understand the bit string
              defining the restriction, access should not be
              granted,
         -   Optional: If a target application to which the
              restriction applies cannot understand the bit string,
              it is expected to ignore it.

    Only one way of expressing the restrictions is supported in this
    specification:


Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 27]


internet-draft                                       November 21, 1995

         included
         The restriction is directly included in "restrictions"
         field of the certificate.

   miscellaneousAtts
   Security attributes which are neither privileges attributes nor
   restrictions attributes. In a PAC, this may include identity
   attributes such as Audit Identity.

         Note:
         We do not preclude the authenticated identity to be one of
         the miscellaneous attributes. However, when it is present,
         it must not be used for access control purposes. Access
         identity security attributes, if present in the PAC, appear
         in the privileges field.

   timePeriods
   This field adds further time restrictions to the validity field
   of the commonContents. Either startTime or endTime can be
   optional. The TimePeriods control is passed if the time now is
   within any of the sequence periods, or if there is a period with
   a start before now and no endTime, or there is a period with an
   end after now and no startTime.

4.1.4    Protection Methods

   MethodGroup ::= SEQUENCE OF Method

   Method ::= SEQUENCE{
     methodId         [0] MethodId,
     methodParams     [1] SEQUENCE OF Mparm
   OPTIONAL
   }

   MethodId ::= CHOICE{
     predefinedMethod [0] ENUMERATED {
                                controlProtectionValues     (1),
                                ppQualification
   (2),
                                targetQualification        (3),
                                delegateTargetQualification  (4)
                              }
   }

   Mparm ::= CHOICE{
     pValue               [0]   PValue,
     securityAttribute      [1]   SecurityAttribute
   }

   PValue ::= SEQUENCE{
     pv                   [0]   BIT STRING,

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 28]


internet-draft                                       November 21, 1995

     algorithmIdentifier    [1]   AlgorithmIdentifier
   OPTIONAL
   }


   CertandECV ::=   SEQUENCE {
     certificate      [0]   GeneralisedCertificate,
     ecv              [1]   ECV,             OPTIONAL}
            -- ECV is defined in later

   methodId
   Identifies a protection method. Several methods are here. Methods
   can be used in any combination, and except where stated
   otherwise, multiple occurrences of the same method are permitted.
   The choice of methodId determines the permitted choices of method
   parameters in the methodParams construct as described below.

   methodParams
   Parameters for a protection method. The semantics of each
   protection method is described in following sections below. In
   each case, the syntax choice of the mParm field is defined.

4.1.4.1  "Control/Protection Values" protection method

   The MethodId for this is: controlProtectionValues

   This method protects the certificate from being stolen, at the
   same time controlling its acceptance for use by proxy to defined
   groups of target applications. The syntax choice of Mparm for
   this method is:

                 pValue.

   This scheme uses a PAC Protection Value (PV) to provide a method
   of controlling the forwarding of a certificate for use by proxy,
   without the user of the certificate needing to know the precise
   identity of the final target application. It prevents a line-
   tapper from stealing the certificate for his own use, but does
   not demand that the certificate be encrypted. A maximum of one PV
   method is permitted in each method group. Security attributes can
   be associated with the PV by including appropriate protection
   methods in the PV's method group.

   More than one method group can be specified, each containing a
   PV.

   Also associated with each PV is a certificate Control Value (CV)
   external to the certificate. The PV is the result of a one-way
   function applied to the corresponding CV. When the PAC is offered
   to a targetAEF, it is proof of knowledge of this CV which causes
   the PAC to be accepted (subject to the other controls in the PV's

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 29]


internet-draft                                       November 21, 1995

   method group). Unless otherwise specified, the one-way function
   that is used for this method is MD5.

   Either the CVs are generated and PVs calculated by the PAC issuer
   for the client on request for each occurrence of the method in
   the certificate, or the client itself generates the CVs and
   specifies the PVs to the PAC issuer. The PVs are returned in the
   certificate; the corresponding CVs, if they have been generated
   by PAC issuer, are returned along with the certificate, encrypted
   under the key used to protect the certificate request. They are
   returned in the ECV construct described below.

   When the client now sends the PAC to a targetAEF, one or more CVs
   are also sent encrypted under the basic key used to communicate
   with the target AEF. They are sent in the ECV construct. Not all
   of the CVs associated with the PAC need always be sent. The
   targetAEF knows the one-way function and therefore is able to
   verify that the client knows a CV which corresponds to a PV in
   the certificate. If the other controls in the PV's method group
   are passed, the PAC is acceptable under this method group.

   The targetAEF now knows the value of the CVs that have been sent
   to it, and can make available this value to the application or to
   the infrastructure supporting that application so that it can
   forward the certificate for use with target application. By
   including target qualification controls in the method group,
   proxy can be confined to groups of target applications, for
   example all of the servers in a distributed service.

4.1.4.2  "Primary Principal Qualification" protection method

   The MethodId for this is: ppQualification

   This method protects the certificate from being stolen, by
   confining its use to be from one or more nominated Primary
   Principals. In its most restrictive form it permits a certificate
   to be used only from the Primary Principal of the client entity
   to which it was originally issued. It can also be used to permit
   proxy, when the required attributes of the proxy application
   Primary Principals are precisely known. The method does not limit
   the number of target applications at which a PAC might be
   accepted. The syntax choice of Mparm for this method is :

                 securityAttribute

   A sequence of Mparm constructs is permissible, resulting in
   multiple security attributes being present.

   The attributes are inserted in the certificate by the PAC issuer
   according to security policy. They may be requested by the
   client. They are attributes that must be possessed by any Primary

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 30]


internet-draft                                       November 21, 1995

   Principal from which this certificate is to be validly used. When
   a targetAEF receives such a certificate, it is responsible for
   comparing the attributes found in the PAC with the attributes
   that it knows (by other means described below) are associated
   with the initiating Primary Principal. Only if the initiator has
   all of the ppQualification attributes in the certificate, is the
   PAC accepted under this method.

   There way in which a target AEF can know the attributes
   associated with a Primary Principal is by the use of Security
   Associations or Contexts established via a target key block as
   defined here. Whenever an initiator sends a PAC to a target AEF,
   it does so under the protection of a key established by use of
   the targetKeyBlock constructs defined in below. The targetPart of
   the targetKeyBlock defined there contains a construct which
   includes a sequence of Primary Principal security attributes.

   The attribute values are placed in the target key block by the
   trusted server (the KDS) which created it or by the initiator
   (with the asymmetric key distribution scheme).

   The attribute value used here is termed the primary principal
   identifier (PPID) and takes one of two forms depending on the key
   distribution scheme used by the initiator. For the symmetric
   intradomain and hybrid interdomain schemes the PPID takes the
   form of a random bit string which is also sent in the
   authorization data field of the Kerberos ticket. For the
   asymmetric scheme the PPID contains the certificate serial number
   and CA name for the initiator's X.509 public key certificate.
   Further details are given in the profiling of the target key
   block below.

4.1.4.3  "Target Qualification" protection method

   The MethodId for this is: targetQualification.

   This method protects the PAC from misuse by allowing its use only
   by a nominated set of target applications and at the same time
   preventing it from being forwarded by them.

   The syntax choice of Mparm for this method is :

                 securityAttribute

   A sequence of Mparm constructs is permissible, resulting in
   multiple security attributes being present.

   The attributes are inserted in the PAC by the PAC issuer
   according to security policy. They may be requested by the
   client.


Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 31]


internet-draft                                       November 21, 1995

   Target AEFs receiving such PACs will compare the values found in
   the PAC with the attributes of the target application. If the
   target application possesses one of the attributes in one of the
   occurrences of this method that is present in a method group, the
   Certificate is deemed to be acceptable under this method in this
   group but the target AEF is expected not to allow the use of the
   certificate for access to further target applications.

4.1.4.4  "Delegate/Target Qualification" protection method

   The MethodId for this is: delegateTargetQualification

   This method protects the certificate from misuse by confining its
   validity to a set of target applications.

   The syntax choice of Mparm for this method is:

                 securityAttribute

   A sequence of Mparm constructs is permissible, resulting in
   multiple security attributes being present.

   The attributes are inserted in the certificate by the PAC issuer
   according to security policy. They may be requested by the
   client.

   The target AEF makes the comparisons described in section
   4.1.4.5, but if the checks are passed, the nominated target
   application is acceptable as both an accessible target and as a
   delegate. The attributes carried by the certificate are valid at
   the target application for authentication or access control
   purposes and the target AEF will allow the use of the certificate
   for access to further target applications.

4.1.4.5  Combining the methods

   PACs are unlikely to contain complex combinations of many method
   types with multiple occurrences of each type. It is expected that
   one occurrence of each of one or two method types in one method
   group would be normal. However the general rule for validating a
   certificate when received by a target AEF is as follows:

   If the PAC is properly signed by an authority recognised by this
   targetAEF and is within the valid time periods then the
   protection methods in each group are tested in turn as described
   below until one of the groups is passed or the PAC is declared
   invalid.

   A method group is passed if it is empty, or if:

         the PAC is for the nominated target application under any

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 32]


internet-draft                                       November 21, 1995

         target or delegateTarget qualification method in this group

         and

         tests on any ppQualification or controlProtectionValues
         method in the group succeeds. If more than one of these is
         present, at least one must be passed. If only one is
         present it must be passed. If none of them is present this
         last check is not required.

   If the group that has been passed only validates the certificate
   for its recipient being a target, then further groups are checked
   to see if the recipient is also valid as a delegate/target. If,
   following these additional checks, a recipient is still valid
   only as a target, the targetAEF is responsible for preventing its
   use for access to further target applications.

4.1.5    External Control Values Construct

   Whenever the protection controlProtectionValues method is in
   place, when a PAC protected under that method is being presented
   as authorisation for an operation, it may be accompanied by one
   or more control values and indices to the method occurrences in
   the certificate to which they apply. Also, when such a
   certificate is being issued to a requesting client, the CV values
   it will need in order to use that certificate may need to be
   returned with it.

   ECV ::= SEQUENCE {
     crypAlgIdentifier  [0]   AlgorithmIdentifier      OPTIONAL,
     cValues            [1]   CHOICE {
                            encryptedCvalueList    [0] BIT STRING,
                            individualCvalues     [1] CValues
                            }
   }

   CValues ::= SEQUENCE OF SEQUENCE {
     index          [0]   INTEGER,
     value          [1]   BIT STRING
   }

   crypAlgIdentifier
   This specifies the encryption algorithm of the control values.

   cValues
   An ECV construct can contain either an encrypted list of control
   values in the encryptedCvalueList field, or a list of
   individually control values in individualCvalues.

   If the encryptedCvalueList choice is made, the whole list is
   encrypted in bulk, but the in-clear contents of this field are

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 33]


internet-draft                                       November 21, 1995

   expected to have the syntax CValues. If the individualCvalues
   choice is made, values are individually encrypted in the value
   fields of the list. Encryption is always done under the basic key
   protecting the operation.

   In the case of the controlProtectionValues method, value is a CV,
   and index is then the index of the method occurrence in the
   certificate, starting at 1.

4.2 Basic Key Distribution

   The TargetKeyBlock is structured as follows:

   -  an identifier (kdSchemeOID) for the key distribution scheme
       being used, which takes the form of an OBJECT IDENTIFIER,
   -  a part which, if present, the target AEF needs to pass on to
       its KDS (targetKDSPart - will be present only when the target
       AEF's KDS is different from the initiator's),
   -  a part which, if present, can be used directly by the target
       AEF (targetPart).

   When a targetAEF using a separate KDS receives the
   targetKeyBlock, it first checks whether it supports the key
   distribution scheme indicated in kdsSchemeOID. Two different
   cases need to be considered:

   1) Only the targetPart is present. The target AEF computes the
       basic key directly, using the information present in the
       TargetPart. The syntax of targetPart is scheme dependent.
       Expiry information can optionally be present in targetPart. If
       supported by the scheme, the Primary Principal attributes of
       the initiator will also be present for PAC protection under
       the Primary Principal Qualification method (see above).

   2) Only the targetKDSPart is present. The targetAEF forwards
       TargetKeyBlock to its KDS. In return it receives a scheme
       dependent data structure which by itself allows the target AEF
       to determine the basic key and, if supported by the scheme,
       the Primary Principal attributes of the initiator for PAC
       protection purposes. Expiry information can optionally be
       present in the targetKDSPart.

   The form of this information depends on the key distribution
   configuration in place.

4.2.1    Keying Information Syntax

   TargetKeyBlock ::= SEQUENCE {
      kdSchemeOID       [2]   OBJECT IDENTIFIER,
      targetKDSpart     [3]   ANY                OPTIONAL,
                                    -- depending on kdSchemeOID

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 34]


internet-draft                                       November 21, 1995

      targetPart        [4]   ANY                OPTIONAL
                                    -- depending on kdSchemeOID
   }

   kdSchemeOID
   Identifies the key distribution scheme used. Allows the targetAEF
   to determine rapidly whether or not the scheme is supported. It
   also allows for the easy addition of future schemes.

   targetKDSpart
   Part of the Target Key Block which is processable only by the KDS
   of the target AEF. This part is sent by the target AEF to its
   local KDS, in order to get the basic key which is in it. It must
   always contain the name of a target "served" by the targetAEF in
   question. The mapping between the name of the application and the
   name of the target AEF is known to the target AEF's KDS which is
   able to authenticate which target AEF is issuing the request for
   translating the targetKDSpart. It can then verify that the AEF is
   one which is responsible for the application name contained in
   the targetKDSpart. If it is, the key is released and is sent
   protected back to the requesting AEF. targetKDSpart should
   include data that enables the KDS of the target AEF to
   authenticate the KDS of the initiator. When the "Primary
   Principal Qualification" protection method needs to be used for
   the PAC, unless there is an accompanying targetPart,
   targetKDSpart must contain the appropriate primary principal
   security attributes (which is always true in this specification).

   targetPart
   Part of the Target Key Block which is processed only by the
   target AEF. When there is no targetKDSpart it is processable
   directly; otherwise it can only be processed after the target
   KDSpart has been processed by the KDS of the target AEF, and the
   appropriate Keying Information has been returned to the AEF. The
   targetPart construct should include data that enables the target
   AEF to authenticate the KDS of the initiator. When the "Primary
   Principal Qualification" protection method needs to be used for
   the PAC, targetPart must contain the primary principal security
   attributes.

   The following table shows the different syntaxes used for
   targetKDSpart and targetPart for the defined KD-schemes.
   "Missing" in the tables means that the relevant construct is not
   supplied.

     KD-Scheme name        kdSchemeOID    targetKDSpart  targetPart

     symmIntradomain     {kd-schemes 1}      Missing       Ticket
     hybridInterdomain   {kd-schemes 3}   PublicTicket    Missing
     asymmetric          {kd-schemes 6}      Missing      SPKM_REQ


Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 35]


internet-draft                                       November 21, 1995

        Table 1 - Key Distribution Scheme OBJECT IDENTIFIERs

   The syntax of PublicTicket is given below, and the syntax of
   Ticket (copied from [Kerberos]) is given in appendix A.2. The
   syntax of SPKM_REQ (copied from [SPKM])is given in appendix A.3.

   We now define the new ASN.1 OBJECT IDENTIFIERs and token
   construct data types required for these KD-schemes.

4.2.2    Object Identifiers

   The OBJECT IDENTIFIERs that are for use in the kdSchemeOID field
   of TargetKeyBlock are formally derived from the kd-schemes OBJECT
   IDENTIFIER which is defined as follows:

   kd-schemes   OBJECT IDENTIFIER ::= { generic-sesame-oids tbs }
      -- arc for SESAME key distribution schemes
   symmIntradomain      OBJECT IDENTIFIER ::= {kd-schemes 1}
   hybridInterdomain    OBJECT IDENTIFIER ::= {kd-schemes 3}
   asymmetric             OBJECT IDENTIFIER ::= {kd-schemes 6}
      -- supported key distribution schemes

   The SPKM_REQ construct used in scheme 6 requires a sequence of
   key establishment algorithm identifier values to be inserted into
   the key_estb_set field. The OBJECT IDENTIFIER below is defined as
   the (single) key establishment "algorithm" for the SESAME
   mechanism:

   sesame-key-estb-alg AlgorithmIdentifier ::= {kd-schemes, NULL }
      -- indicates a SESAME key establishment structure within
      -- an SPKM_REQ structure

   kd-schemes
   This OBJECT IDENTIFIER is the top of the arc of key distribution
   scheme OBJECT IDENTIFIERs defined in this specification.

   symmIntradomain
   This OBJECT IDENTIFIER indicates the basic symmetric key
   distribution scheme described in section 2.2.3. As indicated in
   the third column of Table 1, the targetKDSpart of the
   TargetKeyBlock is not supplied and the targetPart contains a
   Kerberos Ticket (see [Kerberos] and appendix A.2). The profile of
   the ticket that is supported this scheme can be found in Table 2.

   hybridInterdomain
   This OBJECT IDENTIFIER indicates the hybrid scheme described in
   section 2.2.3. The targetKDSpart contains a PublicTicket (defined
   in section 4.2.3). The targetPart field is not supplied. The
   PublicTicket contains a Kerberos Ticket. The profile supported in
   this scheme can be found in Table 3.


Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 36]


internet-draft                                       November 21, 1995

   asymmetric
   This OBJECT IDENTIFIER indicates the scheme described in section
   2.2.3. The targetKDSpart is not supplied and the targetPart
   contains an SPKM_REQ. The syntax of SPKM_REQ  is given in
   appendix A.3. The profile of SPKM_REQ that is supported in this
   scheme is given in Table 4.

   sesame-key-estb-alg
   This AlgorithmIdentifier identifies the key establishment
   algorithm value to be used within the key_estb_set field of an
   SPKM_REQ data element as the one defined by SESAME.

   This algorithm is used to establish a symmetric key for use by
   both the initiator and the target AEF as part of the context
   establishment. The corresponding key_estb_req field of the
   SPKM_REQ will be a BIT STRING the content of which is a DER
   encoding of the KeyEstablishmentData element defined later.

4.2.3    Hybrid inter-domain key distribution scheme data elements

   PublicTicket ::= SEQUENCE{
     krb5Ticket     [0]   Ticket,
     publicKeyBlock [1]   PublicKeyBlock}

   PublicKeyBlock ::= SEQUENCE{
     signedPKBPart  [0]   SignedPKBPart,
     signature      [1]   Signature OPTIONAL,
     certificate    [2]   Certificate OPTIONAL
   }

   SignedPKBPart ::= SEQUENCE{
     keyEstablishmentData [0]   KeyEstablishmentData,
     encryptionMethod     [1]   AlgorithmIdentifier
   OPTIONAL,
     issuingKDS           [2]   Identifier,
     uniqueNumber         [3]   UniqueNumber,
     validityTime         [4]   TimePeriods,
     creationTime         [5]   UTCTime
   }

   UniqueNumber ::= SEQUENCE{
     timeStamp      [0] UTCTime,
     random           [1] BIT STRING
   }

   krb5Ticket
   The Kerberos Ticket which contains the basic key. The encrypted
   part of this ticket is encrypted using the key found within the
   encryptedPlainKey field of the KeyEstablishmentData in the
   PublicKeyBlock.


Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 37]


internet-draft                                       November 21, 1995

   publicKeyBlock
   Contains the key used to protect the krb5Ticket encrypted using
   the public key of the recipient and signed by the encryptor (i.e.
   the context initiator's KD-Server).

         signedPKBPart
         The part of the publicKeyBlock which is signed. The
         keyEstablishmentData field contains the
         KeyEstablishementData (defined in section 4.2.4), i.e. the
         actual encrypted temporary key (see section 2.2.3). The
         encryptionMethod indicates the algorithm used to encrypt
         the encryptedKey. The issuingKDS is the name of the KD-
         Server who produced the PublicTicket. The uniqueNumber is a
         value (containing a timestamp and a random number) which
         prevents replay of the PublicTicket. validityTime specifies
         the times for which the PublicTicket is valid. creationTime
         contains the time at which the PublicTicket was created.

         signature
         Contains the signature calculated by the issuingKDS on the
         signedPKBPart field.

         certificate
         If present, contains the public key certificate of the
         issuing KDS.

4.2.4    Key establishment data elements

   KeyEstablishmentData ::= SEQUENCE {
      encryptedPlainKey [0]   BIT STRING,-- encrypted PlainKey
      targetName        [1]   Identifier
   OPTIONAL,
      nameHashingAlg    [2]   AlgorithmIdentifier
   OPTIONAL
   }

   HashedNameInput ::= SEQUENCE {
      hniPlainKey       [0]   BIT STRING,-- same as plainKey
      hniIssuingKDS     [1]   Identifier
   }

   PlainKey ::= SEQUENCE {
     plainKey         [0]   BIT STRING,  -- The cleartext key
     hashedName       [1]   BIT STRING
   }

   encryptedPlainKey
   Contains the encrypted key. The BIT STRING contains the result of
   encrypting a PlainKey structure.

   targetName

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 38]


internet-draft                                       November 21, 1995

   If present, contains the name of the target application. This is
   necessary for some of the SESAME KD-schemes.

   nameHashingAlg
   Specifies the algorithm which is used to calculate the hashedName
   field of the PlainKey.

   hniPlainKey
   hniIssuingKDS
   Used as input to a hashing algorithm as a general means to
   prevent ciphertext stealing attacks.

   plainKey
   Contains the actual bits of the plaintext key which is to be
   established.

   hashedName
   A hash of the name of the encrypting KDS calculated using the
   plainkey and KDS name as input (within the HashedNameInput
   structure). The algorithm identified in nameHashingAlg is used to
   calculate this value.

   targetName
   If present, contains the name of the target for which the
   PublicTicket was originally produced. This may be different from
   the targetIdentity field of the initialContextToken if caching of
   PublicTickets has been implemented.

4.2.5    Kerberos Data elements

   The full ASN.1 for the Kerberos elements used by the SESAME GSS-
   API mechanism is given in appendix A.2. This section specifies
   the specific contents of the Kerberos Ticket's authorization_data
   field required by the SESAME GSS-API mechanism.

   Essentially this construct contains the PPID of the context
   initiator, as formally defined below.

   SESAME-AUTHORISATION-DATA-TYPE ::= INTEGER { SESAME-ADATA (65) }

   SESAME-AUTHORISATION-DATA ::= SEQUENCE {
     sesame-ad-type   [0] ENUMERATED  {
                            ppidType  (0)
                          },
     sesame-ad-value    [1] CHOICE  {
                            ppidValue [0]SecurityAttribute
                          }
   }

   ppidType
   Indicates the type of the SESAME authorisation data which is

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 39]


internet-draft                                       November 21, 1995

   included in the Ticket

   ppidValue
   This value is used in the ppQualification PAC protection method
   as defined above

4.2.6    Profiling of KD-schemes

   The following tables provide profiling information for the data
   elements defined above and in appendices A.1 and A.2. The tables
   indicate which optional fields must be present for each of the KD-
   Schemes and indicate the values which are required to be present
   in all fields.

4.2.6.1  Profile of Ticket as used in symmIntradomain scheme

    Field                 Value/Constraint
    -----                 ----------------
    tkt-vno               5
    realm                 ticket issuer's domain name in Kerberos realm
                          name form
    sname                 target application name including the realm of
                          the target
    - EncTicketPart       encrypted with long term key of target AEF
       -- flags           only bits 6, 10 and 11 can be meaningful in
                          the context of the SESAME mechanism, the rest
                          are ignored
       -- key             the basic key
       -- crealm          initiator domain name in Kerberos realm name
                          form
       -- cname           principal name of the initiator (in the case
                          of delegation the cname will be that of the
                          delegate)
       -- transited       not used
       -- authtime        the time at which the initiator was
                          authenticated
       -- starttime       not used
       -- endtime         the time at which the ticket becomes invalid
       -- renew-till      not used
       -- caddr           not used
       -- authorization-  contains the PPID corresponding to cname
          data

             Table 2 - Kerberos ticket fields supported

4.2.6.2  Profile of PublicTicket as used in hybridInterdomain scheme

     Field                  Value/Constraint
     -----                  ----------------
     krb5Ticket
     - tkt-vno              5

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 40]


internet-draft                                       November 21, 1995

     - realm                initiator domain name in Kerberos realm name
                            form
     - sname                target application name including the realm
                            of the target
     -- EncTicketPart       encrypted with temporary key (which is in
                            turn encrypted within the
                            keyEstablishmentData field)
     --- flags              only bits 6, 10 and 11 can be meaningful in
                            the context of the SESAME mechanism, the
                            rest are ignored
     --- key                the basic key
     --- crealm             initiator domain name in Kerberos realm name
                            form
     --- cname              principal name of the initiator (in the case
                            of delegation the cname will be that of the
                            delegate)
     --- transited          not used
     --- authtime           the time at which the initiator was
                            authenticated
     --- starttime          not used
     --- endtime            the time at which the ticket becomes invalid
     --- renew-till         not used
     --- caddr              not used
     --- authorization-     contains the PPID corresponding to cname
         data
     publicKeyBlock
      - signedPKBPart
       -- encryptedKey      KeyEstablishmentData structure
       -- encryptionMethod  sesame-key-estb-alg
       -- issuingKDS        X.500 name of initiator's KDS (the signer)
       -- uniqueNumber      creation time of publicKeyBlock plus a
                            random bit string
       -- validityTime      only one period allowed
       -- creationTime      creation time of publicKeyBlock
      - signature           contains all the signing information as well
                            as the actual signature bits
      - certificate         optional

               Table 3 - PublicTicket fields supported

 4.2.6.3  Profile of SPKM_REQ as used in asymmetric scheme


     Field                  Value/Constraint
     -----                  ----------------
     requestToken
      - tok_id              not used - fixed value of `0'
      - context_id          not used - fixed value of bit string
                            containing one zero bit
      - pvno                not used - fixed value of bit string
                            containing one zero bit

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 41]


internet-draft                                       November 21, 1995

      - timestamp           creation time of SPKM_REQ - required
      - randSrc             random bit string
      - targ_name           X.500 Name of target AEF
      - src_name            X.500 Name of initiator
      - req_data
       -- channelId         not used - octet string of length one value
                            `00'H
       -- seq_number        missing
       -- options           not used - all bits set to zero
       -- conf_alg          not used - use NULL CHOICE
       -- intg_alg          not used - use a SEQUENCE OF with zero
                            elements
      - validity            mandatory
      - key_estb_set        only one element supplied containing sesame-
                            -key-estb-alg
     - key_estb_req         contains KeyEstablishmentData with
                            targetApplication field missing
      - key_src_bind        missing
     req_integrity          sig_integ mandatory
     certif_data            only userCertificate field supported
     auth_data              missing

                 Table 4 - SPKM_REQ fields supported

4.3 Dialogue Key Block

   Dialogue Key Block constructs are used to specify how the
   integrity dialogue key and confidentiality dialogue key should be
   derived from the basic key, and specify the cryptographic
   algorithms with which the keys should be used. Dialogue keys are
   explained in Part 1. The syntax is as follows:

   DialogueKeyBlock   ::=   SEQUENCE {
      integKeySeed            [0]   SeedValue,
      confKeySeed             [1]   SeedValue,
      integKeyDerivationInfo  [2]   KeyDerivationInfo   OPTIONAL,
      confKeyDerivationInfo   [3]   KeyDerivationInfo   OPTIONAL,
      integDKuseInfo          [4]   DKuseInfo         OPTIONAL,
      confDKuseInfo           [5]   DKuseInfo         OPTIONAL
   }

   SeedValue  ::= SEQUENCE {
      timeStamp     [0]   UTCTime                    OPTIONAL,
      random        [1]   BIT STRING
   }

   KeyDerivationInfo::= SEQUENCE {
      owfId         [0]   AlgorithmIdentifier,
      keySize       [1]   INTEGER
   }


Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 42]


internet-draft                                       November 21, 1995

   DKuseInfo    ::= SEQUENCE {
      useAlgId        [0]   AlgorithmIdentifier,
      useHashAlgId    [1]   AlgorithmIdentifier
   OPTIONAL
   }

   integKeySeed
   A random number, optionally concatenated with a time value to
   ensure uniqueness, used as input to the one way function
   specified in integKeyDerivationInfo.

   confKeySeed
   A random number, optionally concatenated with a time value to
   ensure uniqueness, used as input to the one way function
   specified in confKeyDerivationInfo.

   integKeyDerivationInfo
   Key derivation information for the integrity dialogue key, as
   follows:

         owfId
         The one way algorithm which takes the basic key XOR the
         seed as input, resulting in the integrity dialogue key.

         keySize
         The size of the key in bits. If the algorithm identified by
         owfId produces a larger key, it is reduced by masking to
         this length, losing its most significant end.

   confKeyDerivationInfo
   Key derivation information for the confidentiality dialogue key.
   The fields in this construct have the same meanings as defined
   above for the integrity dialogue key.

   Note:
   It may be insecure to specify the same derivation algorithms and
   seeds for both integrity and confidentiality dialogue keys,
   particularly if they are to be of different lengths.

   integDKuseInfo
   Information describing how the integrity dialogue key is to be
   used, as follows:

         useAlgId
         The symmetric or asymmetric reversible encryption algorithm
         with which the integrity dialogue key is to be used.

         useHashAlgId
         The one way function with which the integrity dialogue key
         is to be used. It is the hash produced by this algorithm on
         the data to be protected which is encrypted using useAlgId.

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 43]


internet-draft                                       November 21, 1995


   confDKuseInfo
   Information describing how the confidentiality key is to be used.
   The useHashAlgId construct is not used here.

4.4 Attribute Definitions

   Note: the types given for the attributes below use the type
   Identifier whereas the SecurityAttribute type is actually used in
   the PAC. The mapping from Identifier to SecurityAttribute is TBS
   (due to time constraints on the production of this I-D).

4.4.1    Privilege attributes

   Privileges are defined under the OBJECT IDENTIFIER:

   privilege-attributeOBJECT IDENTIFIER ::=
      {   generic-sesame-oids     privilege-attribute(4) }
     -- OID below which privilege attributes are defined

4.4.1.1  Access Identity

   The access identity represents the principal's identity to be
   used for access control purposes.

   The type of this attribute is :

   access-identity-privilege ::= OBJECT IDENTIFIER
        { privilege-attribute 2 }

   Its syntax in the PAC is:

   AccessPrivilegeValueSyntax ::= Identifier

4.4.1.2  Group

   The group represents a characteristic common to several
   principals. A security context may contain more than one group
   for a given principal.

   The type of this attribute is:

   group-privilege ::= OBJECT IDENTIFIER { privilege-attribute 4 }

   Its syntax in the PAC is:

   GroupPrivilegeValueSyntax ::= SEQUENCE OF Identifier

4.4.1.3  Primary group

   The primary group represents a unique group to which a principal

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 44]


internet-draft                                       November 21, 1995

   belongs. A security context must not contain more than one
   primary group for a given principal.

   The type of this attribute is:

   primary-group-privilege ::= OBJECT IDENTIFIER { privilege-
   attribute 3 }

   Its syntax in the PAC is:

   PrimaryGroupValueSyntax ::= Identifier

4.4.1.4  Role attribute

   The role attribute represents the principal's role. There may be
   a one to one mapping between a role name and a role attribute.

   The type of this attribute is:

   role-privilege ::= OBJECT IDENTIFIER { privilege-attribute 1 }

   Its syntax in the PAC is:

   RolePrivilegeValueSyntax ::= Identifier

4.4.2    Miscellaneous attributes

   Miscellaneous attributes are defined under the OBJECT IDENTIFIER:

   misc-attribute   OBJECT IDENTIFIER ::=
      {   generic-sesame-oids   misc-attribute(3) }
     -- OID below which miscellaneous attributes are defined

4.4.2.1  Audit Identity

   The access identity represents the principal's identity to be
   used for audit purposes.

   The type of this attribute is:

   audit-id-misc ::= OBJECT IDENTIFIER { misc-attribute 2 }

   Its syntax in the PAC is:

   AuditIdValueSyntax ::= Identifier

4.4.3    Qualifier Attributes

   When a targetQualifiication or delegateTargetQualification method
   is present in the PAC, the syntax used for the method parameters
   is securityAttribute. In this section we define the OIDs and

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 45]


internet-draft                                       November 21, 1995

   attribute value syntaxes for these methods.

   qualifier-attribute  OBJECT IDENTIFIER ::=
      {   generic-sesame-oids   qualifier-attribute (4) }
     -- OID below which qualifier attributes are defined


4.4.3.1  Target Names

   Within a PAC protection method a target name is indicated using
   the OID:

   target-name-qualifier OBJECT IDENTIFIER ::= { qualifier-attribute
   1 }

   It's syntax in the PAC is:

   TargetNameValueSyntax ::= Identifier

4.4.3.2  Application Trust Groups

   Within a PAC protection method an application trust group name is
   indicated using the OID:

   trust-group-qualifier OBJECT IDENTIFIER ::= { qualifier-attribute 2 }

   It's syntax in the PAC is:

   TrustGroupValueSyntax ::= Identifier

   The universal application trust group (see section 2) is
   specified by using the printableName field of the Identifier
   where the value is an empty string.

5.  ALGORITHMS AND CIPHERTEXT FORMATS

   Cryptographic and hashing algorithms are used for various
   purposes within the SESAME GSS-API mechanism. This section
   categorises these algorithms according to usage so that context
   initiators and acceptors can more easily determine if they have
   the cryptographic support required to allow inter-operation. The
   categorisation is then refined into cryptographic profiles that
   can be incorporated into specific mechanism identifiers for the
   purpose of mechanism negotiation.

   The table below summarises the different uses to which algorithms
   are put within the SESAME GSS-API mechanism.

  Use            Description of use       Type of Algorithm
  Reference
  2              PAC protection           OWF + asymmetric

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 46]


internet-draft                                       November 21, 1995

                 using signature         signature
  3              basic key usage          symmetric
                                         confidentiality and
                                         integrity
  4              integrity dialogue       OWF
                 key derivation
  5              integrity dialogue       symmetric integrity
                 key usage
  6              CA public keys           OWF + asymmetric
                                         signature
  7              encryption using         symmetric
                 shared long term        confidentiality.
                 symmetric key
  8              name hash to             OWF
                 prevent ciphertext
                 stealing
  9              asymmetric basic         asymmetric encryption
                 key distribution        and OWF + signature
  10             key estab. within        (fixed value)
                 SPKM_REQ
  11             confidentiality          OWF
                 dialogue key
                 derivation
  12             confidentiality          symmetric
                 dialogue key use        confidentiality

                Table 5 - Summary of algorithm uses:

   The algorithms can now be further categorised into broader
   classes as follows:

   Class 1: symmetric for security of mechanism:
               Uses 3, 5, 7
   Class 2: all OWFs:
               Uses 2, 4, 6, 8, 11
   Class 3: internal mechanism asymmetric, encrypting:
               Use 9
   Class 4: internal mechanism asymmetric, non-encrypting:
               Use 2
   Class 5: CA's asymmetric non-encrypting:
               Use 6
   Class 6: Data confidentiality, symmetric:
               Use  12

   Use 10 is a fixed value, and does not contribute to mechanism use
   options. The fixed value for this has already been defined above.

   Based on these classes, the following cryptographic algorithm
   usage profiles are defined. Other profiles are possible and can
   be defined as required. Note that symmetric algorithm key sizes
   are included in this profiling, thus DES/64 indicates DES with a

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 47]


internet-draft                                       November 21, 1995

   64 bit key.

             Profile 1:  Profile 2: Profile 3:  Profile 5:
             Full        No user    Exportable  Defaulted
                         data
                         Confidenti
                         ality
    Class 1  DES/64      DES/64     RC4/128     separately
                                                agreed
                                                default
    Class 2  MD5         MD5        MD5         separately
                                                agreed
                                                default
    Class 3  RSA         RSA        RSA         separately
                                                agreed
                                                default
    Classes  RSA         RSA        RSA         separately
    4                                           agreed
    and 5                                       default
    Class 6  DES/64      None       RC4/40      separately
                                                agreed
                                                default
                    Table 6 - Algorithm profiles

   Where:

   -  Profile 1 provides full security, using standard cryptographic
       algorithms with commonly accepted key sizes.
   -  Profile 2 is the same but without supporting any
       confidentiality of user data.
   -  Profile 3 is exportable under many countries' legislations,
   -  Profile 5 uses algorithms identified by a separately specified
       default. It is intended for use by organisations who wish to
       use their own proprietary or government algorithms by separate
       agreement or negotiation.

   The next section shows how these algorithm profiles can be used
   to extend the architectural key distribution schemes to form
   negotiable SESAME mechanism choices.

6.  SESAME MECHANISM NEGOTIATION

   Preceding sections have separately defined the alternatives
   allowed by the generic SESAME mechanism in terms of key
   distribution schemes and the use of cryptographic and hash
   algorithms within the data elements.

   This section brings these together by defining the specific
   SESAME mechanism identifiers which correspond to each combination
   of the available options under these headings. These specific
   mechanism identifiers are intended to be negotiable using a

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 48]


internet-draft                                       November 21, 1995

   generic GSS-API negotiation scheme (like [SNEGO]).

   The approach is to use the  key distribution schemes to form
   broad architectural mechanism options, as follows (more options
   are defined by ECMA, hence the numbering):

   Architectural  Description of         Key Distribution
   Mechanism      Mechanism Option       Scheme(s)
   Number
   2              Symmetric key          symmIntradomain
                  distribution
   3              Symmetric initiator    symmIntradomain;
                  and target;            hybridInterdomain
                  Asymmetric KD-
                  Servers;
   6              Asymmetric Initiator   asymmetric
                  and Target

            Table 7 - Key Distribution Mechanism Options

   Each of the security mechanism options described above represents
   a key distribution scheme.

   Generic GSS-API mechanism negotiation will be carried out on the
   basis of the generic SESAME mechanism OBJECT IDENTIFIER
   concatenated with an architectural mechanism number from table 7,
   and an algorithm profile reference number from table 6. Thus the
   form of a negotiable SESAME mechanism is:

           SESAME Mechanism OID ,   Y    ,   Z
                               ^       ^
                               |       |
                               |       +-- algorithm
                               |           profile
                               |
                               +-- architectural option

   Thus a SESAME mechanism using a fully symmetric key distribution
   scheme and an exportable cryptographic algorithm profile would
   have an OBJECT IDENTIFIER of:

        { generic_sesame_mech  (2)  (3) }

   A SESAME mechanism using a fully asymmetric initiator and target
   architectural scheme, and an algorithm profile not supporting
   user data confidentiality would have an OBJECT IDENTIFIER of:

        { generic-sesame-mech  (6)  (2) }

   Not all combinations of key distribution scheme and algorithm
   profile are meaningful, however, but those that are, are intended

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 49]


internet-draft                                       November 21, 1995

   to be negotiable using a generic GSS-API negotiation scheme such
   as [SNEGO].

   Where information is returned from the target to the initiator as
   a result of negotiation then for the SESAME mechanism the
   information should contain the public key certificates required
   for the initiator to be able to use the selected KD-Scheme. For
   example, if the asymmetric KD-Scheme is to be used the target
   should return to the initiator the public key certificate of the
   targetAEF (containing the target's own name in the extensions
   field). The syntax of the mechanism specific information is the
   `Certificates' ASN.1 type defined in the AuthenticationFramework.
   (To allow multiple certificates to be passed to the initiator.)

7.  NAME TYPES

   Because [Kerberos] does not support Directory Names (DNs), SESAME
   uses two distinct naming conventions, Kerberos and X.500.

7.1 Kerberos naming

   SESAME uses the Kerberos V5 Authentication Server protocol for
   password based authentication, so SESAME principals are given
   Kerberos principal names. Moreover, the SESAME security domain is
   equivalent to a Kerberos realm, so Kerberos realm names are used
   to identify SESAME security domains. In SESAME, an entity that
   uses the normal Kerberos V5 authentication via a password is
   given a printable Kerberos principal name of the form :

                 <principal_name>@<realm_name>
   Notes:
   1. Components of a name can be separated by `/`.
   2. The separator `@` signifies that the remainder of the string
   following the `@` is to be interpreted as a realm identifier. If
   no `@` is encountered, the name is interpreted in the context of
   the local realm. Once an `@` is encountered, a non-null realm
   name, with no embedded `/` separators, must follow. The `\`
   character is used to quote the immediately-following character.

   SESAME reserves two specific Kerberos principal names for its own
   use:

   -  for the SESAME Security Server (containing the AS, PAS and
       KDS):

                 krbtgt/<realm_name>@<realm_name>

   -  for the SESAME PVF :

                 pvf/<host_name>/<realm_name>@<realm_name>


Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 50]


internet-draft                                       November 21, 1995

   The realm_name in each of these constructs is repeated for
   compatibility with Kerberos.

   Note that a <host_name> or a <realm_name> might take the form of
   an Internet Protocol domain name, and so a name like:

                 pvf/mybox.bull.fr/sesame.bull.fr@sesame.bull.fr

   is a valid principal name for a SESAME PVF.

   When invoking gss_import_name, a Kerberos principal name type can
   be identified using either gss_ses_krb5_oid or
   GSS_KRB5_NT_PRINCIPAL_NAME symbolic names. A Kerberos service
   name type can be identified using either gss_ses_krb5_oid or
   GSS_KRB5_NT_HOSTBASED_ SERVICE_NAME symbolic names.

7.2 Directory Naming

   As described elsewhere, SESAME uses public key technology
   supported by Directory Certificates, so for this purpose SESAME
   entities are given DNs. Such names are built from components
   separated  by a semicolon. The standardised keywords supported by
   SESAME are :

                 CN (common-name).
                 S  (surname),
                 OU (organisational-unit),
                 O  (organisation),
                 C  (country),

   So an example of a DN supported at SESAME is:

                 CN=Martin;OU=sesame;O=bull;C=fr

   SESAME defines a set of reserved common-name parts for DNs for
   the core SESAME security components, as follows:

   the PAS:         CN=SesamePAS.<realm_name>[;...]
   the AS:          CN=SesameAS.<realm_name>[;...]
   the KDS:         CN=SesameKDS.<realm_name>[;...]
   the PVF:         CN=pvf.<host_name>[;...]
   the security domain:  CN=SesameDomain.<realm_name>[;...]
                    where <realm_name> is the name of the Kerberos
                     realm to which the entity belongs.

   Note that there is no generic rule for mapping the Directory Name
   of a SESAME entity to its Kerberos principal name, so SESAME
   provides an explicit mapping in a principal's Directory
   Certificate, using the extensions field of the extended Directory
   Certificate syntax (version 3) to carry the principal's Kerberos
   name.

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 51]


internet-draft                                       November 21, 1995


   Note also that in the case of a PVF's Directory Certificate, the
   names of the applications supported by the PVF are also held in
   this field, preceded by the Kerberos principal name of the PVF
   itself. In the absence of such a certificate (i.e. if the PVF
   does not have a key pair of its own) the list of application
   names can be held (e.g. in a file) in the KDS.

   In SESAME the syntax of the Login Name is imported from the
   Kerberos Version 5 GSS-API Mechanism. This form of name is
   referred to using the symbolic name: GSS_KRB5_NT_PRINCIPAL.
   Syntax details are given in [KRB5GSS].When a principal possesses
   a private key for authentication, the login name is also stored
   in an extension field of the principal's Directory Certificate so
   that it can be linked to the principal's Distinguished Name.

8.  ERROR CODES

   To be supplied.

9.  SECURITY CONSIDERATIONS

   Security issues are discussed throughout this memo.

10. REFERENCES

   ECMA-219       ECMA-219, Authentication and Privilege Attribute
                   Application with related key distribution
                   functions
   GSS-API        1.  Internet RFC 1508 Generic Security Service
                   API
                       (J. Linn, September 1993)
                  2.  X/Open P308 Generic Security Service API
                   (GSS-API)
                       Base
                  3.  Internet RFC 1509 "Generic Security Service
                   API:
                       C-Bindings"
   Kerberos       Internet RFC 1510 The Kerberos Network
                   Authentication Service (V5) (J. Kohl and C.
                   Neumann, September 1993)
   ISO/IEC 9594-8 ISO/IEC 9594-8, Information Processing Systems -
                   Open Systems Interconnection - The Directory -
                   Part 8: Authentication Framework (X.509)
   KERB5GSS       draft-ietf-cat-kerb5gss-03 The Kerberos Version 5
                   GSS-API Mechanism (J. Linn, September 1995)
   XGSSAPI        draft-ietf-cat-xgssapi-sesame-00: Extended
                   Generic Security Service APIs: XGSS-APIs (Denis
                   Pinkas and Piers McMahon, November 1995)
   SESOV          SESAME Overview, Version 4, (Tom Parker and Denis
                   Pinkas, December 1995)

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 52]


internet-draft                                       November 21, 1995

   SPKM           draft-ietf-cat-spkmgss-04: The Simple Public-Key
                   GSS-API Mechanism (C. Adams, May 1995)
   SNEGO          draft-ietf-cat-snego-00 Simple GSS-API
                   Negotiation Mechanism (Eric Baize and Denis
                   Pinkas, July 1995)


11. AUTHOR'S ADDRESSES

   Eric Baize,
   BULL S.A.,
   Rue Jean Jaures,
   78340 LES CLAYES SOUS BOIS,
   FRANCE.

   email: E.Baize@frcl.bull.fr

   Stephen Farrell
   Software and Systems Engineering Ltd.
   Fitzwilliam Court,
   Dublin 2,
   IRELAND.

   email: Stephen.Farrell@sse.ie

   Tom Parker, ICL,
   Eskdale Road,
   Winnersh, Wokingham,
   Berkshire, UK RG11 5TT

   email: t.a.parker@win0199.wins.icl.co.uk

APPENDIX A: ASN.1 MODULE DEFINITIONS

A.1 SESAME ASN.1 Definitions

   SESAME-gss-api-types  { tbs }

   DEFINITIONS ::=

   BEGIN

   -- exports everything

   IMPORTS

     Name
      FROM  InformationFramework
            {joint-iso-ccitt(2) ds(5) module(1)
            informationFramework(1) }


Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 53]


internet-draft                                       November 21, 1995

     Certificate, AlgorithmIdentifier, Validity,
     CertificationPath
      FROM  AuthenticationFramework
            {joint-iso-ccitt(2) ds(5) module(1)
            authenticationFramework(7) }

     HostAddress, Ticket
      FROM SESAME-Kerberos-Definitions { tbs }

     SPKM-REQ
      FROM SESAME-SPKM-Definitions { tbs };

   -- OBJECT IDENTIFIERS

   access-identity-privilege ::= OBJECT IDENTIFIER
        { privilege-attribute 2 }

   audit-id-misc ::= OBJECT IDENTIFIER { misc-attribute 2 }

   generic-sesame-mech ::=OBJECT IDENTIFIER { tbs }

   generic-sesame-oids ::= OBJECT IDENTIFIER { tbs }
      -- top of the SESAME types arc

   group-privilege ::= OBJECT IDENTIFIER { privilege-attribute 4 }

   kd-schemes   OBJECT IDENTIFIER ::= { generic-sesame-oids tbs }
      -- arc for SESAME key distribution schemes
   symmIntradomain      OBJECT IDENTIFIER ::= {kd-schemes 1}
   hybridInterdomain    OBJECT IDENTIFIER ::= {kd-schemes 3}
   asymmetric             OBJECT IDENTIFIER ::= {kd-schemes 6}
      -- supported key distribution schemes

   misc-attribute   OBJECT IDENTIFIER ::=
      {   generic-sesame-oids   misc-attribute(3) }
     -- OID below which miscellaneous attributes are defined

   primary-group-privilege ::= OBJECT IDENTIFIER{privilege-attribute 3}

   privilege-attributeOBJECT IDENTIFIER ::=

      {   generic-sesame-oids     privilege-attribute(4) }
     -- OID below which privilege attributes are defined

   qualifier-attribute  OBJECT IDENTIFIER ::=
      {   generic-sesame-oids   qualifier-attribute (4) }
     -- OID below which qualifier attributes are defined

   role-privilege ::= OBJECT IDENTIFIER { privilege-attribute 1 }

   sesame-key-estb-alg AlgorithmIdentifier ::= {kd-schemes, NULL }

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 54]


internet-draft                                       November 21, 1995

      -- indicates a SESAME key establishment structure within
      -- an SPKM_REQ structure

   target-name-qualifier OBJECT IDENTIFIER ::= { qualifier-attribute 1 }

   trust-group-qualifier OBJECT IDENTIFIER ::= { qualifier-attribute 2 }

   -- Types in alphabetical order

   AccessPrivilegeValueSyntax ::= Identifier

   AuditIdVlaueSyntax ::= Identifier

   CDTContents ::= SEQUENCE {
     tokenType    [0]   OCTET STRING VALUE X'0301',
     SAId       [1]   OCTET STRING,
     utcTime      [2]   UTCTime OPTIONAL,
     usec       [3]   INTEGER OPTIONAL,
     seq-number   [4]   INTEGER OPTIONAL,
   }

   CertandECV ::=   SEQUENCE {
     certificate      [0]   GeneralisedCertificate,
     ecv              [1]   ECV,             OPTIONAL}
            -- ECV is defined in later

   CertificateBody ::= CHOICE{
     encryptedBody      [0]   BIT STRING,
     normalBody       [1]   SEQUENCE{
                              commonContents  [0] CommonContents,
                              specificContents[1] SpecificContents
                            }
   }

   CertificateId ::=SEQUENCE {
     issuerDomain   [0] Identifier                       OPTIONAL,
     issuerIdentity [1] Identifier,
     serialNumber   [2] INTEGER
   }
            -- serialNumber is the same as in [ISO/IEC 9594-8]

   CheckValue ::= CHOICE{
     signature      [0]   Signature
        -- only signature supported here
   }

   CommonContents ::= SEQUENCE{

     comConSyntaxVersion  [0]   INTEGER { version1 (1) }DEFAULT 1,
     issuerDomain       [1]   Identifier             OPTIONAL,
     issuerIdentity     [2]   Identifier,

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 55]


internet-draft                                       November 21, 1995

     serialNumber       [3]   INTEGER,
     creationTime       [4]   UTCTime                OPTIONAL,
     validity           [5]   Validity,
     algId              [6]   AlgorithmIdentifier,
     hashAlgId            [7]   AlgorithmIdentifier    OPTIONAL
   }

   ContextDeleteToken ::=  SEQUENCE {
     cdtContents    [0]   CDTContents,
     cdtSeal        [1]   Seal
                          -- seal over cdtContents, encrypted
                          -- under the Integrity Dialogue Key
                          -- contains only the sealValue field
   }

   CValues ::= SEQUENCE OF SEQUENCE {
     index          [0]   INTEGER,
     value          [1]   BIT STRING
   }

   DialogueKeyBlock   ::=   SEQUENCE {
      integKeySeed            [0]   SeedValue,
      confKeySeed             [1]   SeedValue,
      integKeyDerivationInfo  [2]   KeyDerivationInfo   OPTIONAL,
      confKeyDerivationInfo   [3]   KeyDerivationInfo   OPTIONAL,
      integDKuseInfo          [4]   DKuseInfo         OPTIONAL,
      confDKuseInfo           [5]   DKuseInfo         OPTIONAL
   }

   DKuseInfo    ::= SEQUENCE {
      useAlgId        [0]   AlgorithmIdentifier,
      useHashAlgId    [1]   AlgorithmIdentifier            OPTIONAL
   }

   ECV ::= SEQUENCE {
     crypAlgIdentifier  [0]   AlgorithmIdentifier      OPTIONAL,
     cValues            [1]   CHOICE {
                              encryptedCvalueList  [0] BIT STRING,
                              individualCvalues        [1] CValues
                            }
   }

   ErrorArgument ::= ENUMERATED {
     gss_ses_s_sg_server_sec_assoc_open              (1),
     gss_ses_s_sg_incomp_cert_syntax                 (2),
     gss_ses_s_sg_bad_cert_attributes                (3),
     gss_ses_s_sg_inval_time_for_attrib              (4),
     gss_ses_s_sg_pac_restrictions_prob              (5),
     gss_ses_s_sg_issuer_problem                     (6),
     gss_ses_s_sg_cert_time_too_early                (7),
     gss_ses_s_sg_cert_time_expired                  (8),

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 56]


internet-draft                                       November 21, 1995

     gss_ses_s_sg_invalid_cert_prot                  (9),
     gss_ses_s_sg_revoked_cert                       (10),

     gss_ses_s_sg_key_constr_not_supp                (11),
     gss_ses_s_sg_init_kd_server_ unknown            (12),
     gss_ses_s_sg_init_unknown                       (13),
     gss_ses_s_sg_alg_problem_in_dialogue_key_block    (14),
     gss_ses_s_sg_no_basic_key_for_dialogue_key_block   (15),
     gss_ses_s_sg_key_distrib_prob                   (16),
     gss_ses_s_sg_invalid_user_cert_in_key_block       (17),
     gss_ses_s_sg_unspecified                        (18),
     gss_ses_s_g_unavail_qop                         (19),
     gss_ses_s_sg_invalid_token_format               (20)
   }

   ErrorToken ::=   {
      tokenType     [0]   OCTET STRING VALUE X'0400',
      etContents    [1]   ErrorArgument,
   }

   GeneralisedCertificate ::= SEQUENCE{
     certificateBody    [0]   CertificateBody,
     checkValue       [1]   CheckValue}

   GroupPrivilegeValueSyntax ::= SEQUENCE OF Identifier

   HashedNameInput ::= SEQUENCE {
      hniPlainKey       [0]   BIT STRING,-- the same value as plainKey
      hniIssuingKDS     [1]   Identifier
   }

   ICTContents ::= SEQUENCE {
     tokenId              [0]   INTEGER, -- shall contain X'0100'
     SAId               [1]   OCTET STRING,
     targetAEFPart        [2]   TargetAEFPart,
     targetAEFPartSeal    [3]   Seal,
     contextFlags       [4]   BIT STRING {
                              delegation         (0),
                              mutual-auth        (1),
                              replay-detect       (2),
                              sequence           (3),
                              conf-avail         (4),
                              integ-avail        (5)
                              }
     utcTime              [5]   UTCTime      OPTIONAL,
     usec               [6]   INTEGER    OPTIONAL,
     seq-number           [7]   INTEGER      OPTIONAL,
     initiatorAddress     [8]   HostAddress   OPTIONAL,
     targetAddress        [9]   HostAddress   OPTIONAL
        -- imported from [Kerberos] and used as channel bindings
   }

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 57]


internet-draft                                       November 21, 1995


   Identifier ::= CHOICE{
     objectId         [0]   OBJECT IDENTIFIER,
     directoryName      [1]   Name,
            -- imported from the Directory Standard
     printableName      [2]   PrintableString,
     octets           [3]   OCTET STRING,
     intVal           [4]   INTEGER,

     bits             [5]   BIT STRING,
     pairedName       [6]   SEQUENCE{
                              printableName   [0] PrintableString,
                              uniqueName     [1] OCTET STRING
                            }
   }

   InitialContextToken ::=  SEQUENCE{
     ictContents    [0]   ICTContents,
     ictSeal        [1]   Seal
   }

   KeyDerivationInfo::= SEQUENCE {
      owfId         [0]   AlgorithmIdentifier,
      keySize       [1]   INTEGER
   }

   KeyEstablishmentData ::= SEQUENCE {
      encryptedPlainKey [0]   BIT STRING,-- encrypted PlainKey
      targetName        [1]   Identifier                 OPTIONAL,
      nameHashingAlg    [2]   AlgorithmIdentifier          OPTIONAL
   }

   Method ::= SEQUENCE{
     methodId         [0] MethodId,
     methodParams     [1] SEQUENCE OF Mparm               OPTIONAL
   }

   MethodGroup ::= SEQUENCE OF Method

   MethodId ::= CHOICE{
     predefinedMethod [0] ENUMERATED {
                                controlProtectionValues     (1),
                                ppQualification                (2),
                                targetQualification        (3),
                                delegateTargetQualification  (4)
                              }
   }

      MICToken  ::=   PMToken

   Mparm ::= CHOICE{

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 58]


internet-draft                                       November 21, 1995

     pValue               [0]   PValue,
     securityAttribute      [1]   SecurityAttribute
   }

   PACSpecificContents ::= SEQUENCE{
     pacSyntaxVersion [0]   INTEGER{  version1 (1)}        DEFAULT 1,
     protectionMethods  [2]   SEQUENCE OF MethodGroup      OPTIONAL,
     pacType            [4]   ENUMERATED{
                                  primaryPrincipal     (1),
                                  temperedSecPrincipal  (2),
                                  untemperedSecPrincipal(3)
                            }                            DEFAULT 3,
     privileges       [5]   SEQUENCE OF PrivilegeAttribute,
     restrictions     [6]   SEQUENCE OF Restriction        OPTIONAL,

     miscellaneousAtts  [7]   SEQUENCE OF SecurityAttribute OPTIONAL,
     timePeriods        [8]   TimePeriods                OPTIONAL
   }

   PlainKey ::= SEQUENCE {
     plainKey         [0]   BIT STRING,      -- The cleartext key
     hashedName       [1]   BIT STRING
   }

   PMTContents ::= SEQUENCE {
     tokenId              [0]   INTEGER, -- shall contain X'0101'
     SAId               [1]   OCTET STRING,
     seq-number           [2]   INTEGER                  OPTIONAL,
     userData           [3]   CHOICE {
                                plaintextBIT STRING,
                                ciphertext    OCTET STRING
                        }                            OPTIONAL,
     directionIndicator [4]   BOOLEAN                OPTIONAL
   }

   PMToken ::=  SEQUENCE{
     pmtContents    [0]   PMTContents,
     pmtSeal        [1]   Seal
        -- seal over the pmtContents being protected
   }

   PrimaryGroupValueSyntax ::= Identifier

   PrivilegeAttribute ::= SecurityAttribute

   PublicKeyBlock ::= SEQUENCE{
     signedPKBPart  [0]   SignedPKBPart,
     signature      [1]   Signature OPTIONAL,
     certificate    [2]   Certificate OPTIONAL
   }


Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 59]


internet-draft                                       November 21, 1995

   PublicTicket ::= SEQUENCE{
     krb5Ticket     [0]   Ticket,
     publicKeyBlock [1]   PublicKeyBlock}

   PValue ::= SEQUENCE{
     pv                   [0]   BIT STRING,
     algorithmIdentifier    [1]   AlgorithmIdentifier           OPTIONAL
   }

   Restriction ::= SEQUENCE {
     howDefined [0] CHOICE {
                hashedExternal  [0] BIT STRING, -- the hash value
                signedExternal  [1] BIT STRING, -- the public key
                certExternal    [2] CertificateId, -- user certificate
                included        [3] BIT STRING
                },
                                -- the actual restriction in a form
                                -- undefined here
     algId      [1] AlgorithmIdentifier              OPTIONAL,
                          -- either identifies the hash algorithm

                          -- or the public key algorithm
                          -- for choices 1 or 2 above.
     type       [2] ENUMERATED  {
                      mandatory (1),
                      optional    (2)}       DEFAULT mandatory,
     targets      [3] SEQUENCE OF SecurityAttribute    OPTIONAL
   }
                  -- applies to all targets if this is omitted

   RolePrivilegeValueSyntax ::= Identifier

   Seal ::= SEQUENCE{
     sealValue          [0]   BIT STRING,
     symmetricAlgId   [1]   AlgorithmIdentifier        OPTIONAL,
     hashAlgId          [2]   AlgorithmIdentifier      OPTIONAL,
     targetName       [3]   Identifier           OPTIONAL,
     keyId            [4]   INTEGER                  OPTIONAL
   }

   SecurityAttribute ::= SEQUENCE{
     attributeType    Identifier,
     attributeValue SET OF SEQUENCE {
                      definingAuthority  [0] Identifier    OPTIONAL,
                      securityValue      [1] SecurityValue
                    }
   }
      --  NOTE: SecurityAttribute is not tagged, for compatibility
      -- with the Directory Standard.

   SecurityValue ::= CHOICE{

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 60]


internet-draft                                       November 21, 1995

     directoryName      [0]   Name,
     printableName      [1]   PrintableString,
     octets           [2]   OCTET STRING,
     intVal           [3]   INTEGER,
     bits             [4]   BIT STRING,
     any                [5]   ANY -- defined by attributeType
   }

   SeedValue  ::= SEQUENCE {
      timeStamp     [0]   UTCTime                    OPTIONAL,
      random        [1]   BIT STRING
   }

   SESAME-AUTHORISATION-DATA ::= SEQUENCE {
     sesame-ad-type   [0] ENUMERATED  {
                            ppidType  (0)
                          },
     sesame-ad-value    [1] CHOICE  {
                            ppidValue [0]SecurityAttribute
                          }
   }

   SESAME-AUTHORISATION-DATA-TYPE ::= INTEGER { SESAME-ADATA (65) }

   Signature ::= SEQUENCE{
     signatureValue       [0]   BIT STRING,

     asymmetricAlgId        [1]   AlgorithmIdentifier       OPTIONAL,
     hashAlgId              [2]   AlgorithmIdentifier       OPTIONAL,
     issuerCAName         [3]   Identifier                OPTIONAL,
     caCertInformation      [4]   CHOICE {
            caCertSerialNumber    [0]    INTEGER,
            certificationPath     [1]    CertificationPath
     }                                                       OPTIONAL
   }
   --CertificationPath    is imported from [ISO/IEC 9594-8]

   SignedPKBPart ::= SEQUENCE{
     keyEstablishmentData [0]   KeyEstablishmentData,
     encryptionMethod     [1]   AlgorithmIdentifier        OPTIONAL,
     issuingKDS           [2]   Identifier,
     uniqueNumber         [3]   UniqueNumber,
     validityTime         [4]   TimePeriods,
     creationTime         [5]   UTCTime
   }

   SpecificContents ::= CHOICE{
     pac                [1]   PACSpecificContents
      -- only the PAC is used here
   }


Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 61]


internet-draft                                       November 21, 1995

   TargetAEFPart ::= SEQUENCE {
     pacAndCVs          [0]   SEQUENCE OF CertandECV OPTIONAL,
     targetKeyBlock   [1]   TargetKeyBlock,
     dialogueKeyBlock [2]   DialogueKeyBlock,
     targetIdentity   [3]   Identifier,
     flags            [4]   BIT STRING   {
                              delegation         (0)
                            }
   }

   TargetKeyBlock ::= SEQUENCE {
      kdSchemeOID       [2]   OBJECT IDENTIFIER,
      targetKDSpart     [3]   ANY                OPTIONAL,
                                    -- depending on kdSchemeOID
      targetPart        [4]   ANY                OPTIONAL
                                    -- depending on kdSchemeOID
   }

   TargetNameValueSyntax ::= Identifier

   TargetResultToken ::=  SEQUENCE{
     trtContents    [0] TRTContents,
     trtSeal        [1] Seal
   }

   Token ::=
     [APPLICATION 0] IMPLICIT SEQUENCE {
      thisMech      MechType, -- the OBJECT IDENTIFIER specified below
      innerContextToken ANY DEFINED BY thisMech
   }

   TRTContents ::= SEQUENCE {

     tokenId        [0]   INTEGER,    -- shall contain X'0200'
     SAId         [1]   OCTET STRING,
     utcTime        [5]   UTCTime     OPTIONAL,
     usec         [6]   INTEGER     OPTIONAL,
     seq-number     [7]   INTEGER     OPTIONAL,
   }

   TrustGroupValueSyntax ::= Identifier

   UniqueNumber ::= SEQUENCE{
     timeStamp      [0] UTCTime,
     random           [1] BIT STRING
   }

   Validity ::=SEQUENCE {
            notBefore     UTCTime,
            notAfter      UTCTime
   } -- as in [ISO/IEC 9594-8]

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 62]


internet-draft                                       November 21, 1995

   -- Note: Validity is not tagged, for compatibility with the
   -- Directory Standard.

   WrapToken  ::=   PMToken

   END


A.2  Kerberos ASN.1 Definitions

   The SESAME GSS-API mechanism re-uses the HostAddress and Ticket
   types from [Kerberos]. These are reproduced here for ease of
   reference.

   SESAME-Kerberos-Definitions   {tbs }

   DEFINITIONS ::=

   BEGIN

   -- exports everything

   IMPORTS

   -- imports nothing

   -- data types

   AuthorizationData ::= SEQUENCE OF SEQUENCE {
     ad-type    [0]   INTEGER,
     ad-data  [1]   OCTET STRING}

   EncryptedData ::= SEQUENCE {
     etype    [0]   INTEGER, -- EncryptionType
     kvno     [1]   INTEGER       OPTIONAL,
     cipher   [2]   OCTET STRING  _ciphertext}

   EncryptionKey ::= SEQUENCE {

     keytype  [0]   INTEGER,
     keyvalue [1]   OCTET STRING}

   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,

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 63]


internet-draft                                       November 21, 1995

     renew-till       [8]   KerberosTime OPTIONAL,
     caddr          [9]   HostAddresses OPTIONAL,
     authorization-data   [10]  AuthorizationData OPTIONAL}

   HostAddress ::= SEQUENCE {
     addr-type        [0]   INTEGER,
     address        [1]   OCTET STRING}

   HostAddresses ::= SEQUENCE OF SEQUENCE {
     addr-type        [0]   INTEGER,
     address        [1]   OCTET STRING}

   KerberosTime ::= GeneralizedTime
      -- Specifying UTC time zone (Z)

   PrincipalName ::= SEQUENCE {
     name-type        [0]   INTEGER,
     name-string        [1]   SEQUENCE OF GeneralString}

   Realm ::= GeneralString

   Ticket ::= [APPLICATION 1] SEQUENCE {
     tkt-vno          [0]   INTEGER,
     realm          [1]   Realm,
     sname          [2]   PrincipalName,
     enc-part       [3]   EncryptedData} -- decrypts to
   EncTicketPart

   TicketFlags ::= BIT STRING {
     reserved       (0),  -- not supported in the SESAME mechanism
     forwardable        (1),  -- not supported in the SESAME
   mechanism
     forwarded        (2),  -- not supported in the SESAME mechanism
     proxiable        (3),  -- not supported in the SESAME mechanism
     proxy          (4),  -- not supported in the SESAME mechanism
     may-postdate     (5),  -- not supported in the SESAME mechanism
     postdated        (6),
     invalid          (7),  -- not supported in the SESAME mechanism
     renewable        (8),  -- not supported in the SESAME mechanism
     initial          (9),  -- not supported in the SESAME mechanism
     pre-authent        (10),
     hw-authent       (11)}

   TransitedEncoding ::= SEQUENCE {

     tr-type          [0]   INTEGER, -- must be registered
     contents       [1]   OCTET STRING}
        -- the TransitedEncoding construct is not used in the SESAME
   mechanism.

   END

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 64]


internet-draft                                       November 21, 1995


A.3  SPKM ASN.1 Definitions

   The SESAME GSS-API mechanism re-uses the SPKM-REQ type from
   [SPKM]. These are reproduced here for ease of reference.

   SESAME-SPKM-Definitions   {tbs }

   DEFINITIONS ::=

   BEGIN

   -- exports everything

   IMPORTS

     AuthorizationData
      FROM SESAME-Kerberos-Defintions   { tbs }

     AlgorithmIdentifier, Certificate, CertificateList,
   CertificatePair, CertificatePath
      FROM AuthenticationFramework {
                joint-iso-ccitt ds(5) modules(1)
   authenticationFramework(7) }

     Name
      FROM InformationFramework {
                joint-iso-ccitt ds(5) modules(1)
   informationFramework(1) }

   -- data types

   CertificationData ::= SEQUENCE {
     certificationPath        [0] CertificationPath    OPTIONAL,
     certificateRevocationList    [1] CertificateList
   OPTIONAL
   } -- at least one of the above shall be present

   CertificationPath ::= SEQUENCE {
     userKeyId      [0]   OCTET STRING
   OPTIONAL,
                            -- identifier for user's public key
     userCertif       [1]   Certificate
   OPTIONAL,
                            -- certificate containing user's public
   key
     verifKeyId       [2]   OCTET STRING
   OPTIONAL,
                            -- identifier for user's public
   verification key


Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 65]


internet-draft                                       November 21, 1995

     userVerifCertif    [3]   Certificate
   OPTIONAL,
                            -- certificate containing user's public
   verification key
     theCACertificates  [4]   SEQUENCE OF CertificatePair
   OPTIONAL
                            -- certification path from target to
   source
   }

   ChannelId ::= OCTET STRING

   Conf_Algs ::= CHOICE {
     SEQUENCE OF AlgorithmIdentifier,
     NULL                     -- used when conf. is not available
   over context
                  }           -- for C-ALG

   Context_Data ::= SEQUENCE {
     channelId      ChannelId,               -- channel bindings
     seq_number   INTEGER OPTIONAL,   -- sequence number
     options        Options,
     conf_alg     Conf_Algs,             -- confidentiality. algs.
     intg_alg     Intg_Algs              -- integrity algorithm
   }

   ENCRYPTED MACRO ::=
   BEGIN
   TYPE NOTATION  ::= type(ToBeEnciphered)
   VALUE NOTATION ::= value(VALUE BIT STRING)
   END     -- of ENCRYPTED

   HASHED MACRO ::=
   BEGIN
     TYPE  NOTATION ::= type    ( ToBeHashed )
     VALUE NOTATION ::= value   ( VALUE OCTET STRING )
   END -- hash used is the one specified for the MANDATORY I-ALG

   Intg_Algs ::= SEQUENCE OF AlgorithmIdentifier  -- for I-ALG

   Key_Estb_Algs ::= SEQUENCE OF AlgorithmIdentifier  -- to allow
   negotiation of K-ALG

   MAC MACRO ::=
   BEGIN
     TYPE  NOTATION ::= type  ( ToBeMACed )
     VALUE NOTATION ::= value ( VALUE
              SEQUENCE  {
                  algId   AlgorithmIdentifier,
                  mac   BIT STRING
                        }

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 66]


internet-draft                                       November 21, 1995

                        )
   END

   Options ::= BIT STRING {
     delegation_state         (0),

     mutual_state           (1),
     replay_det_state         (2),    -- used for replay det. during
   context
     sequence_state         (3),    -- used for sequencing during
   context
     conf_avail             (4),
     integ_avail              (5),
     target_certif_data_required    (6)          -- used to
   request targ's certif. data
                  }

   Random_Integer ::= BIT STRING

   Req_Integrity ::= CHOICE {
     sig_integ    [0] SIGNATURE REQ_TOKEN,
     mac_integ    [1] MAC REQ_TOKEN
                    }

   REQ_TOKEN ::= SEQUENCE {
     tok_id       INTEGER,          -- shall contain 0100 (hex)
     context_id     Random_Integer,
     pvno         BIT STRING,       -- protocol version number
     timestamp      UTCTime                  OPTIONAL,
                                -- mandatory for SPKM-2
     randSrc      Random_Integer,
     targ_name      Name,
     src_name     Name,           -- may be a value indicating
   "anonymous"
     req_data     Context_Data,
     validity     [0] Validity
   OPTIONAL,
                                -- validity interval for key (may be
   used in the
                                -- computation of security context
   lifetime)
     key_estb_set [1] Key_Estb_Algs,         -- specifies set of
   key establishment algorithms
     key_estb_req   BIT STRING                   OPTIONAL,
                      -- key estb. parameter corresponding to first
   K-ALG in set
                      -- (not used if initiator is unable or
   unwilling to
                      -- generate and securely transmit key material
   to target).
                      -- Established key must be sufficiently long

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 67]


internet-draft                                       November 21, 1995

   to be used
                      -- with any of the offered confidentiality
   algorithms.
     key_src_bind   HASHED SEQUENCE {
                  src_name    Name,
                  symm_key    BIT STRING}OPTIONAL
                      -- used to bind the source name to the
   symmetric key
                      -- (i.e., the unprotected version of what is
                      -- transmitted in key_estb_req).
     }

   SIGNATURE MACRO ::=
   BEGIN
   TYPE NOTATION   ::= type (OfSignature)
   VALUE NOTATION  ::= value(VALUE
     SEQUENCE {
        AlgorithmIdentifier,
        ENCRYPTED OCTET STRING
              }
                      )
   END

   SPKM_REQ ::= SEQUENCE {
     requestToken       REQ_TOKEN,
     req_integrity        Req_Integrity,
     certif_data      [2]   CertificationData OPTIONAL,
     auth_data      [3]   AuthorizationData OPTIONAL
      -- see [Kerberos] for a discussion of authorization data
   }

   Validity ::= SEQUENCE {
            notBefore   UTCTime,
            notAfter      UTCTime }

   END

APPENDIX B: ECMA BACKGROUND MATERIAL.

   ECMA's work was based on the OSI Architecture [ISO 7498-2], and
   the series of Security Frameworks developed in ISO/IEC JTC1 [ISO
   10181]. A Technical Report, [ECMA TR/46] published in 1988,
   concentrates on the application layer and describes a security
   framework in terms of application functions necessary to build
   secure open systems. The continuation of this report, [ECMA-138],
   defines the abstract security services for use in a distributed
   system. A parallel standard, [ECMA-206], describes a model for
   establishing secure relationships between applications in a
   distributed system. ECMA has recently completed work to define
   the functionality and the protocols for a distributed security
   service in charge of authenticating and distributing access

Baize, Farrell, Parker    Document Expiration: 21 May 1996   [Page 68]

internet-draft                                       November 21, 1995

   rights to human and application principals, along with supportive
   key distribution functions. The ECMA standard which is the result
   of that work is called ECMA-219 [ECMA-219]. It was approved by
   the ECMA General Assembly in December 1994 and released in
   January 1995.

   ECMA is currently developing a standard parallel to this draft
   which standardises the use of the ECMA security mechanism below
   the GSS-API. This draft is effectively a profile of that work.

APPENDIX C: SESAME IMPLEMENTATION STATUS

   The SESAME project has implemented the above protocols and source
   code for this will be made publicly available for non-commercial
   use at the end of 1995 as SESAME version 4.

   There are however, some minor differences between this
   specification and the SESAME version 4 implementation - mainly
   due to the fact that this specification assumes the use of a
   generic GSS-API negotiation scheme (like [SNEGO]) whereas SESAME
   version 4 implements negotiation within the tokens according to
   the standard ECMA-206 (Association Context Management).