Standard ECMA-235 March 1996
Standardizing
Information
and
Communication
Systems
The ECMA GSS-API Mechanism
P h o n e : + 4 1 2 2 8 4 9 . 6 0 . 0 0 - F a x : + 4 1 2 2 8 4 9 . 6 0 . 0 1 - U R L : h t t p : / / www. e c m a . c h - I n t e r n e t : h e l p d e s k @ e c m a . c h
Standard ECMA-235 March 1996
Standardizing
Information
and
Communication
Systems
The ECMA GSS-API Mechanism
P h o n e : + 4 1 2 2 8 4 9 . 6 0 . 0 0 - F a x : + 4 1 2 2 8 4 9 . 6 0 . 0 1 - U R L : h t t p : / / www. e c m a . c h - I n t e r n e t : h e l p d e s k @ e c m a . c h Gino Lauri - ECMA-235.DOC - 20/03/96 11:50
Brief History
ECMA, ISO and ITU-T are working on standards for distributed applications in an open system environment. Security in general and authentication and distributed access control in particular are major concerns in information processing. In July 1988, ECMA TR/46, "Security in Open Systems - A Security Framework", was published. In December 1989, based on the concepts of this framework, ECMA-138, "Security in Open Systems - Data Elements and Service Definitions", was produced. It defines a set of Security Services for use in the Application Layer of the ISO OSI Reference Model. In December 1994, the first edition of Standard ECMA-219 was published. Based on this earlier work, it describes a model for distributed authentication and access control in which a trusted third party, the Authentication and Privilege Attribute Application (APA-Application) and related key distribution functions are used to authenticate human and software entities, provide them with the privileges they need for access control purposes and provide the means of protection of these privileges in interchange. Over this period also, the Internet Engineering Task Force (IETF) and other de facto and de jure standards organisations have been developing a standard general interface through which a security infrastructure such as that described in [ECMA-219] can be exercised by application clients and servers. It has been designed so that callers do not need to know the details of the underlying infrastructure, or even whether it is provided by [ECMA-219] services or other infrastructure designs. This interface is the Generic Security Services Application Programming Interface, or GSS-API ([GSS-API]). This ECMA standard follows on from [ECMA-219], showing how the security services described there can be used underneath the GSS-API by application clients and servers. It describes the interface calls supported, the success and error responses that can be returned, and the format and content of the data tokens exchanged between the client and the server. In order to implement Privilege Attribute based access control features for distributed open applications using the GSS-API, this Standard also defines support functions that have to be used in addition to the standard GSS-API function set. [KRB5GSS] and [SPKM] also define ways of supporting the GSS-API, and some of the data constructs defined there are also used here. The Standard is based on the practical experience of ECMA member Companies. It is oriented towards urgent and well understood needs.
This ECMA Standard has been adopted by the ECMA General Assembly in March 1996.
- i -
Table of contents 1 Introduction
1
1.1 Scope
1
1.2 Field of application
1
1.3 Requirements to be satisfied
1
1.4 Conformance
1
1.5 Overview and document structure
2
2 References
2
2.1 Normative references
2
2.2 Informative references
3
3 Definitions
3
3.1 Imported definitions
3
3.2 New Definitions
3
3.2.1 Security Context
3
3.2.2 Generic Security Mechanism
3
3.2.3 Security Mechanism Options
4
3.2.4 Primary Principal Identifier (PPID)
4
3.3 Acronyms
4
4 Token formats
4
4.1 Token framings
4
4.2 InitialContextToken format
5
4.3 TargetResultToken
8
4.4 ErrorToken
8
4.5 Per Message Tokens
9
4.5.1 MICToken
10
4.5.2 WrapToken
11
4.6 ContextDeleteToken
11
5 Key distribution and PAC protection options
12
5.1 PAC protection options
12
5.2 Key Distribution schemes
12
5.2.1 Basic symmetric key distribution scheme
12
5.2.2 Symmetric key distribution scheme with symmetric KD-Servers
12
5.2.3 Symmetric key distribution scheme with asymmetric KD-Servers
12
5.2.4 Asymmetric initiator / symmetric target key distribution scheme
13
5.2.5 Symmetric initiator / asymmetric target key distribution scheme
13
5.2.6 Full public key distribution scheme
13
5.3 Key distribution data elements
13
5.3.1 KD-Scheme independent data elements
13
5.3.2 Key distribution scheme OBJECT IDENTIFIERs
14
5.3.3 Hybrid inter-domain key distribution scheme data elements
15
- ii -
5.3.4 Key establishment data elements
16
5.3.5 Kerberos Data elements
17
5.3.6 Profiling of KD-schemes
17
5.3.6.1 Profile of Ticket (symmIntradomain and symmInterdomain)
18
5.3.6.2 Profile of PublicTicket (hybridInterdomain)
19
5.3.6.3 Profile of SPKM_REQ (asymmInitToSymmTarget, symmInitToAsymmTarget, asymmetric)
20
5.4 Returned Key Scheme Information
20
6 Algorithm use within ECMA mechanism
21
7 Identifiers for ECMA mechanism choices
23
7.1 Architectural mechanism identifiers
23
8 Errors
24
8.1 Minor Status Codes
24
8.1.1 Non ECMA-specific codes
24
8.1.2 ECMA-specific codes
25
8.2 Quality of protection
27
9 Support functions
27
9.1 Attribute handling support functions
27
9.1.1 GSS_Set_cred_attributes
28
9.1.2 GSS_Get_sec_attributes
29
9.1.3 GSS_Get_received_creds
30
9.2 Control and support functions for context acceptors
30
9.2.1 GSS_Set_cred_controls call
32
9.2.2 GSS_Get_sec_controls
32
9.2.3 GSS_Compound_creds call
33
9.3 Attribute specifications
34
9.3.1 Privilege attributes
34
9.3.1.1 Access Identity
34
9.3.1.2 Group
34
9.3.1.3 Primary group
34
9.3.1.4 Role attribute
34
9.3.2 Attribute set reference
35
9.3.2.1 Role name
35
9.3.3 Miscellaneous attributes
35
9.3.3.1 Audit Identity
35
9.3.3.2 Issuer domain name
35
9.3.3.3 Validity periods
35
9.3.3.4 Optional restrictions
35
9.3.3.5 Mandatory restrictions
35
9.3.4 Qualifier attributes
36
9.3.4.1 Acceptor name
36
9.3.4.2 Application trust group
36
- iii -
9.4 C Bindings
36
9.4.1 Data types and calling conventions
36
9.4.1.1 Identifier
36
9.4.1.2 Identifier set
37
9.4.1.3 Time periods
37
9.4.1.4 time period list
37
9.4.1.5 Security attributes
38
9.4.1.6 Security Attribute Sets
38
9.4.1.7 Credentials List
38
9.4.1.8 Acceptor Control
38
9.4.1.9 Acceptor Control Set
39
9.4.2 gss_set_cred_attributes
39
9.4.3 gss_get_sec_attributes
39
9.4.4 gss_get_received_creds
39
9.4.5 gss_set_cred_controls
39
9.4.6 gss_get_sec_controls
40
9.4.7 gss_compound_cred
40
10 Relationship to other standards
40
Annex A - Formal ASN.1 definitions of data types defined in this standard
43
Annex B - Definitions of [Kerberos] data types
51
Annex C - Definitions of [SPKM] data types
55
Annex D - Mappings of Minor Status Returns onto [ECMA-219] error values
61
Annex E - Imported Types
63
1 1.1
Introduction Scope Standard ECMA-219 defines services, data elements and operations for authentication, Privilege Attribute and key distribution applications (the APA-Application). Following on from [ECMA-219], this Standard ECMA-235defines the syntax of the tokens that enable distributed applications implementing the APA-Application and related data elements specified in Standard ECMA-219 to interwork. The tokens defined in this Standard are : • Tokens for Security Association establishment • An error token for communicating a failure to establish a Security Association • Tokens for message protection • A token for Security Association deletion In order to provide a basic set of implementation options, this Standard also defines some key distribution schemes based on symmetric and asymmetric cryptographic technologies. These include specification of the encryption algorithms and methods to be used. The tokens are intended for use through the Generic Security Service API (GSS-API) as defined in [GSS-API]. This Standard defines minor status returns that are returned by the GSS-API when a GSS-API conformant implementation is used to generate and validate the tokens. In order to implement Privilege Attribute based access control features for distributed open applications using the GSS-API, this Standard also defines support functions that have to be used in addition to the standard GSS-API function set.
1.2
Field of application The field of application of this ECMA Standard is the design, implementation and interworking of security modules that make use of the APA-Application as defined in [ECMA-219]. They define an implementation of the "ECMA GSS-API mechanism".
1.3
Requirements to be satisfied Requirements for secure distributed environments have led to specifications of security services such as [ECMA219], [Kerberos] and [SPKM]. Each of these defines what is known in [GSS-API] as a "security mechanism". The [ECMA-219] mechanism defines security services and data elements required to secure distributed applications. However, in order to achieve interworking between normal application servers using these security services , the syntax of the security tokens to be exchanged between the application servers themselves needs to be defined. [GSS-API] specifies an interface that is independent of the underlying supporting security mechanism, but through which mechanism-specific security tokens can be exchanged. The GSS-API is intended to be used by implementors of distributed secured applications. The GSS-API provides functions to implement identity based access control policies, but it does not provide support functions to handle in a generic way Privilege Attributes for access control purposes. Neither does it provide for the control of delegation. This standard therefore specifies such support functions.
1.4
Conformance There are a number of types of conformance to this Standard as follows : Type 1
Support functions conformance
The implementation shall be conformant to [GSS-API], with the addition of the ECMA mechanism support functions defined in clause 9. Any minor status returns must be from the set defined in clause 8. This type of conformance is in support of application portability, and does not demand that the underlying GSS-API mechanism is the ECMA one. Type 2
Security Association level context token conformance
- 2 -
The implementation shall support at least one mechanism option of the ECMA mechanism Security Association establishment, deletion, and error tokens defined in clause 4.1 to 4.4 and 4.6 Any minor status returns must be from the set defined in clause 8. This type of conformance is in support of interoperability, and does not require support for the GSS-API. Type 3
Message level token conformance
The implementation shall be Type 2 conformant, and also provide an implementation of the ECMA mechanism message protection tokens defined in clause 4.5 Any minor status returns must be from the set defined in clause 8. Type 4
Full ECMA GSS-API mechanism conformance
This is achieved if both Type 1 and Type 3 conformance are achieved
1.5
Overview and document structure The standard described in [ECMA-219] defines specific service interfaces to security services supporting the provision of authentication, key establishment, data integrity, data confidentiality and access control information. Although the scope of that standard does not encompass the specification of how to establish Security Associations with productive application servers, it does assume and describe a model for these exchanges. The combined model and standard is defined as the ECMA mechanism. This document describes how the generic ECMA mechanism is to be exercised through the GSS-API to form the ECMA GSS-API Mechanism. Contents of specific clauses are:
2 2.1
Clauses 2 and 3:
These contain the usual references and definitions respectively.
Clause 4:
Describes the token formats exchanged between GSS-API peers using the ECMA GSS-API mechanism.
Clause 5:
Defines specific key distribution schemes within the framework laid down in [ECMA-219]. It gives detailed syntax and semantics for these schemes.
Clause 6:
Describes the use of cryptographic algorithms in the ECMA GSS-API mechanism.
Clause 7:
Describes the ways in which OBJECT IDENTIFIERS are used to nominate particular specific ECMA GSS-API mechanism types, including the choice of cryptographic algorithms themselves.
Clause 8:
Describes the GSS-API minor status codes that can be returned by the ECMA GSS-API mechanism. See also annex E.
Clause 9:
Defines additional GSS-API support functions needed to enable PAC attribute and control information to be set and exploited by GSS-API callers. It also defines some specific attribute types.
Clause 10:
Explains the relationship between this standard and other standards.
Annex A:
Contains normative formal ASN.1 definitions of ASN.1 defined in this standard.
Annex B:
Contains normative formal ASN.1 definitions of ASN.1 also used in [SPKM].
Annex C:
Contains normative formal ASN.1 definitions of ASN.1 also used in [Kerberos].
Annex D:
Maps the minor status codes given in clause 8 onto the relevant error values defined in [ECMA-219].
Annex E:
Expands the imported ASN.1 constructs (for information purposes).
References Normative 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"
- 3 -
2.2
3
Kerberos
Internet RFC 1510 The Kerberos Network Authentication Service (V5) (J. Kohl and C. Neumann, September 1993)
ISO 10745
ISO 10745, Upper Layers Security Model
ISO/IEC 9594-2
ISO/IEC 9594-2, Information Processing Systems - Open Systems Interconnection - The Directory - Part 2: Information Framework (X.501)
ISO/IEC 9594-8
ISO/IEC 9594-8, Information Processing Systems - Open Systems Interconnection - The Directory - Part 8: Authentication Framework (X.509)
Informative references KERB5GSS
draft-ietf-cat-kerb5gss-03 The Kerberos Version 5 GSS-API Mechanism (J. Linn, September 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)
Definitions
3.1
Imported definitions The following terms are used with the meaning defined in [ECMA-219] : access identity attribute set reference Audit Identity basic key delegate dialogue key External Control Value Privilege Attribute Certificate target Target AEF target key block The following terms are used with the meaning defined in [GSS-API] acceptor initiator channel bindings context acceptor context Initiator credentials GSS-API token mechanism type quality of protection The following terms are used with the meaning defined in [ISO 10745]: Security Association
3.2 3.2.1
New Definitions Security Context Security information that represents, or will represent a Security Association to an initiator or acceptor that has formed, or is attempting to form such an association.
3.2.2
Generic Security Mechanism A generic security mechanism identifies a class of support functions, data structures and protocols from which specific security mechanism options can be derived.
- 4 -
3.2.3
Security Mechanism Options A security mechanism option identifies for a generic security mechanism, a specific choice of support functions, data structures and protocols required to an initiator and an acceptor in order to establish and use security contexts
3.2.4
Primary Principal Identifier (PPID) An arbitrary identifier of the original source of a request for a PAC. It is a specific example of a value used in the "primary principal qualification" protection method. The PPID is used to prevent a PAC from being stolen or delegated. See [ECMA-219] for an explanation of the protection method.
3.3
Acronyms ACI
Access Control Information
AEF
Access Enforcement Function
CA
Certification Authority
DES
Data Encryption Standard
ECV
External Control Value
GSS-API Generic Security Service Application Program Interface
4
KD-
Key Distribution (server)
PAC
Privilege Attribute Certificate
PPID
Primary Principal Identifier
RSA
Rivest Shamir Adleman
SA
Security Association
SPKM
Simple Public Key Mechanism
Token formats This clause describes protocol-visible characteristics of the GSS-API as implemented above the ECMA mechanism. Succeeding sub-clauses define the syntax of tokens exchanged between GSS-API peers for Security Association management.
4.1
Token framings Following [GSS-API], tokens are enclosed within framing as follows: Token ::= [APPLICATION 0] IMPLICIT SEQUENCE { thisMech
MechType, -- the OBJECT IDENTIFIER specified below
innerContextTokenANY DEFINED BY thisMech } The ECMA mechanism type is identified by an OBJECT IDENTIFIER with value: 235{ generic-ecma-mech (y) (z) } Where: generic-ecma-mech ::= { iso(1) identified-organisation(3) icd-ecma(0012) standard(0) ecma-gss-api (235) generic-ecma-mech (4)} See clause 7 for the values of y and z that have been defined in this Standard.
- 5 -
The above GSS-API framing shall be applied to all tokens emitted by the ECMA GSS-API mechanism, including context-establishment tokens, per-message tokens, and context-deletion token. The innerContextToken field of context establishment tokens for the ECMA GSS-API mechanism will consist of an ECMA 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 InitialContext 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 ECMA GSS-API mechanism will consist of an ECMA 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: 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 ECMA GSS-API mechanism will consist of an ECMA token (ContextDeleteToken) containing a tokenId field having the value 03 01 (hex). This is defined to be: ContextDeleteToken
4.2
sent either by the initiator, or the target to release a Security Association. Returned by GSS_Delete_sec_context.
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 -- Imported from [ECMA-219] (see annex E) }
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.
- 6 -
ICTContents ::= SEQUENCE { tokenId
[0]
INTEGER,
-- shall contain X'0100'
SAId
[1]
OCTET STRING,
targetAEFPart
[2]
TargetAEFPart,
targetAEFPartSeal
[3]
Seal, -- Imported from [ECMA-219] (see annex E)
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] -- 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 ECMA 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_ecma_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 profile in the ECMA mechanism option (see clauses 6 and 7). 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.
- 7 -
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 for 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 Microsecond part of the initiator’s time stamp. This field, along with utcTime, is used to specify a precise 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 ECMA 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 ECMA GSS-API implementation. TargetAEFPart ::= SEQUENCE { pacAndCVs
[0] SEQUENCE OF CertandECV OPTIONAL,
targetKeyBlock
[1]
TargetKeyBlock,
dialogueKeyBlock
[2]
DialogueKeyBlock, -- Imported from [ECMA-219] (see annex E)
targetIdentity
[3]
Identifier,
flags
[4]
BIT STRING{
-- see clause 5 for schemes supported -- Imported from [ECMA-219] (see annex E)
delegation
(0)
} } NOTE 1 ECMA validity philosophy is that individual inner certificates 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 ECMA 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 ACI to be used for this Security Association. This field is not present when the association does not require any ACI. This field can contain several PACs in delegation schemes where the Security Association requires not only the initiator PAC to be present, but also delegate PACs. targetKeyBlock The targetKeyBlock carrying the basic key to be used for the Security Association being established.
- 8 -
dialogueKeyBlock A dialogue key block used by the Target AEF 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 Target AEF to validate the PAC. Can also be used by the Target AEF 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.
4.3
TargetResultToken This token is returned by the acceptor if the mutual-req flag is set in the InitialContext Token. It serves to authenticate the acceptor to the initiator, since only the genuine acceptor could derive the integrity dialogue key needed to seal the TargetResultToken. 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 acceptor'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 clause 4.2. 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.
4.4
ErrorToken ErrorToken ::= { tokenType
[0]
OCTET STRING VALUE X'0400',
etContents
[1]
ErrorArgument,
}
- 9 -
etContents Contains the reason for the creation of the error token. The different reasons are given as minor status return values. Clause 8 describes these in more detail, and annex D maps them onto the error returns of [ECMA-219]. ErrorArgument ::= ENUMERATED { gss_ecma_s_sg_server_sec_assoc_open
(1),
gss_ecma_s_sg_ incomp_cert_syntax
(2),
gss_ecma_s_sg_ bad_cert_attributes
(3),
gss_ecma_s_sg_ inval_time_for_attrib
(4),
gss_ecma_s_sg_ pac_restrictions_prob
(5),
gss_ecma_s_sg_ issuer_problem
(6),
gss_ecma_s_sg_ cert_time_too_early
(7),
gss_ecma_s_sg_ cert_time_expired
(8),
gss_ecma_s_sg_ invalid_cert_prot
(9),
gss_ecma_s_sg_ revoked_cert
(10),
gss_ecma_s_sg_ key_constr_not_supp
(11),
gss_ecma_s_sg_ init_kd_server_ unknown
(12),
gss_ecma_s_sg_init_unknown
(13),
gss_ecma_s_sg_alg_problem_in_dialogue_key_block
(14),
gss_ecma_s_sg_no_basic_key_for_dialogue_key_block
(15),
gss_ecma_s_sg_key_distrib_prob
(16),
gss_ecma_s_sg_invalid_user_cert_in_key_block
(17),
gss_ecma_s_sg_unspecified
(18),
gss_ecma_s_sg_invalid_token_format
(19)
}
4.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 }
PMTContents ::= SEQUENCE { tokenId
[0]
INTEGER,
SAId
[1]
OCTET STRING,
seq-number
[2]
INTEGER
userData
[3]
CHOICE {
OPTIONAL,
plaintext
BIT STRING,
ciphertext
OCTET STRING
} directionIndicator [4]
BOOLEAN }
OPTIONAL, OPTIONAL
- 10 -
pmtContents tokenId Identifies the type of per message token. SAId See clause 4.2 for a description of this field. seq-number This field must be present if replay detection or message 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 acceptor 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 Present if seq-number is specified. FALSE indicates that the sender is the context initiator, TRUE that the sender is the target. pmtSeal See specific token type narratives below. 4.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 in clause 4.5. Fields specific to the MICToken are: tokenId Shall contain 01 01 (hex) to identify the token as a MICToken userData Not present for MIC Tokens. pmtSeal Computed over a DER encoding of pmtContents, but as if the data to be protected were present as plaintext in the userData field. The result binds the data to the entire plaintext header, so as to minimize the possibility of malicious splicing.
- 11 -
4.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 in clause 4.5. Fields specific to the WrapToken are: tokenId Shall contain 02 01 (hex) to identify the token as a WrapToken userData Present either in plain text form (the choice is plaintext), or encrypted (choice ciphertext). If the data is encrypted, the encryption 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 DER encoding of the pmtContents field, including the userData. However if the userData field is to be encrypted, the seal value is computed prior to the encryption.
4.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,
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 in clause 4.2.
- 12 -
cdtSeal See clause 4.2 for a general description of the use of this construct.
5
Key distribution and PAC protection options
5.1
PAC protection options [ECMA-219] specifies a framework for key distribution, but does not specify any specific key distribution schemes. It also leaves open the choice of how to protect the PAC for the distribution of privileges. The PAC choices that are relevant in this context are: • Sealed PAC for PACs protected with symmetric cryptographic algorithms • Signed PAC for PACs protected with asymmetric cryptographic algorithms. In clause 7 these are combined with key distribution options to form specific mechanism options that can be specified at the GSS-API.
5.2
Key Distribution schemes The ECMA security mechanism defines a basic set of key distribution schemes and associated data elements as described below. Note that the GetKI and ProcessKI operations identified in these descriptions are fully specified in [ECMA-219]. The TargetKeyBlock construct including its kdSchemeOID field are also specified in [ECMA-219] but are repeated in clause 5.3.1 for ease of reference. The key distribution schemes below depend upon the existence of long term cryptographic keys which can be held by Target AEFs and KD-servers. The ECMA GSS-API allows for these keys to be either symmetric or asymmetric . Long term symmetric keys of Target AEFs are always shared between the AEF and its KD-Server. In the case where the long term keys are asymmetric we speak of the KD-server’s private key, or the Target AEF'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, and it is shared with a KD-Server. NOTE Details of how authentication was performed is out of scope of this standard. However [ECMA-219] describes authentication methods and service interfaces consistent with this standard.
5.2.1
Basic symmetric key distribution scheme For this scheme, the KD-Scheme name is : symmIntradomain In this scheme, the initiator and the Target AEF each share different secret keys with the same KD-Server. To establish a basic key between an initiator and a Target AEF, the initiator KD-Server returns, as a result of a GetKI operation, a targetKeyBlock containing a basic key encrypted under the Target AEF's long term secret key. On receipt of the targetKeyBlock, the Target AEF can extract the basic key directly from it.
5.2.2
Symmetric key distribution scheme with symmetric KD-Servers For this scheme, the KD-Scheme name is : symmInterdomain In this scheme, the initiator shares a key with a KD-Server that is different from the KD-Server with which the Target AEF shares its long term key. In addition, the KD-Servers share another long term secret key with each other. To establish a basic key between an initiator and a Target AEF, the initiator KD-Server returns, as a result of a GetKI operation, a targetKeyBlock containing a basic key encrypted under the long term secret key shared between the two KD-Servers. On receipt of the targetKeyBlock, the Target AEF transmits it to its own KDServer, using ProcessKI, and gets back the basic key re-encrypted under the long term secret key it shares with its KD-Server.
5.2.3
Symmetric key distribution scheme with asymmetric KD-Servers For this scheme, KD-Scheme name is : hybridInterdomain In this scheme, the initiator shares a key with a KD-Server that is different from the KD-Server with which the Target AEF shares its long term key. In addition, each KD-Server possesses a private/public key pair.
- 13 -
To establish a basic key between an initiator and a Target AEF, the initiator KD-Server returns, as a result of a GetKI operation, a targetKeyBlock containing a basic key encrypted under a temporary key and the temporary key encrypted under the Target AEF KD-Server’s public key. The targetKeyBlock is also signed using the initiator KD-Server's private key. On receipt of the targetKeyBlock, the Target AEF transmits it to its KD-Server, using ProcessKI, and gets it back with the basic key re-encrypted under the long term secret key it shares with its KD-Server. 5.2.4
Asymmetric initiator / symmetric target key distribution scheme For this scheme, KD-Scheme name is : asymmInitToSymmTarget In this scheme, the initiator does not use a KD-Server, but possesses a private/public key pair. The Target AEF shares a long term secret key with a KD-Server which possesses a private/public key pair. To establish a basic key between an initiator and a Target AEF, the initiator constructs a targetKeyBlock containing a basic key encrypted with a the Target AEF KD-Server’s public key. The targetKeyBlock is signed using the initiator’s private key. On receipt of the targetKeyBlock, the Target AEF transmits it to its KD-Server, using ProcessKI, and gets it back with the basic key re-encrypted under the long term secret key it shares with its KD-Server.
5.2.5
Symmetric initiator / asymmetric target key distribution scheme For this scheme, KD-Scheme name is : symmInitToAsymmTarget In this scheme, the Target AEF does not use a KD-Server, but possesses a private/public key pair. The initiator uses a KD-Server that has a private/public key pair, and shares a secret key with it. To establish a basic key with a Target AEF, the initiator KD-Server returns, as a result of a GetKI operation, a targetKeyBlock containing a basic key encrypted with the Target AEF’s public key. The targetKeyBlock is signed with the initiator KD-Server’s private key. On receipt of the targetKeyBlock, the Target AEF directly establishes a basic key from it.
5.2.6
Full public key distribution scheme For this scheme, KD-Scheme name is : asymmetric In this scheme, neither the initiator nor the Target AEF uses a KD-Server. Both the initiator and the Target AEF possesses a private/public key pair. To establish a basic key with a Target AEF, the initiator constructs a targetKeyBlock containing a basic key encrypted under the Target AEF’s public key. The targetKeyBlock is signed with the initiator’s private key. On receipt of the targetKeyBlock, the Target AEF directly establishes a basic key from it.
5.3
Key distribution data elements In this clause we define the data elements for each of the key distribution schemes described above. All of the key distribution schemes use the TargetKeyBlock data element defined in [ECMA-219]. The TargetKeyBlock is sent as a part of the initial context token. For clarity the TargetKeyBlock definition is repeated here. Data elements that are the same as those used in [Kerberos] are defined in annex B. Data elements that are the same as those used in [SPKM] are defined in annex C.
5.3.1
KD-Scheme independent data elements
TargetKeyBlock ::= SEQUENCE { initiatorKDSname [0]
identifier
kdSchemeOID
[2]
OBJECT IDENTIFIER,
targetKDSpart
[3]
ANY
OPTIONAL OPTIONAL, -- depending on kdSchemeOID
targetPart
[4]
ANY
OPTIONAL} -- depending on kdSchemeOID
- 14 -
The following table shows the different syntaxes used for targetKDSpart and targetPart for the six defined KDschemes. “Missing” in the tables means that the relevant construct is not supplied.
KD-Scheme name
kdSchemeOID
targetKDSpart
targetPart
symmIntradomain
{kd-schemes 1}
Missing
Ticket
symmInterdomain
{kd-schemes 2}
Ticket
Missing
hybridInterdomain
{kd-schemes 3}
PublicTicket
Missing
asymmInitToSymmTarget
{kd-schemes 4}
SPKM_REQ
Missing
symmInitToAsymmTarget
{kd-schemes 5}
SPKM_REQ
Missing
asymmetric
{kd-schemes 6}
Missing
SPKM_REQ
Table 1 - Key Distribution Scheme OBJECT IDENTIFIERs The syntax of PublicTicket is given in clause 5.3.3, and the syntax of Ticket is given in annex B. The syntax of SPKM_REQ is given in annex C. We now define the new ASN.1 OBJECT IDENTIFIERs and token construct data types required for these KDschemes. Note that the ECMA GSS-API mechanism heavily re-uses existing data structures defined in [SPKM] and [Kerberos] as well as those defined in [ECMA-219]. 5.3.2
Key distribution scheme OBJECT IDENTIFIERs The OBJECT IDENTIFIERs that are for use in the kdSchemeOID field of TargetKeyBlock are formally derived from the kd-schemes OBJECT IDENTIFIER imported from [ECMA-219] as follows:
symmIntradomain
OBJECT IDENTIFIER ::= {kd-schemes 1}
symmInterdomain
OBJECT IDENTIFIER ::= {kd-schemes 2}
hybridInterdomain
OBJECT IDENTIFIER ::= {kd-schemes 3}
asymmInitToSymmTarget
OBJECT IDENTIFIER ::= {kd-schemes 4}
symmInitToAsymmTarget
OBJECT IDENTIFIER ::= {kd-schemes 5}
asymmetric
OBJECT IDENTIFIER ::= {kd-schemes 6}
For ease of reference, the construction of the kd-schemes OBJECT IDENTIFIER is given in annex E The SPKM_REQ construct used in schemes 4, 5 and 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 ECMA mechanism: gss-key-estb-alg AlgorithmIdentifier ::= {kd-schemes, NULL } kd-schemes This OBJECT IDENTIFIER is the top of the arc of key distribution scheme OBJECT IDENTIFIERs defined in this Standard. It is defined in [ECMA-219]. symmIntradomain This OBJECT IDENTIFIER indicates the basic symmetric scheme described in clause 5.2.1. 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 annex B). The profile of the ticket that is supported this scheme can be found in table 2. symmInterdomain This OBJECT IDENTIFIER indicates the symmetric interdomain scheme described in clause 5.2.2. As indicated in the fourth column of table 1, the targetPart of the TargetKeyBlock is not supplied and the targetKDSpart contains a Kerberos Ticket. The profile of the ticket that is supported in this scheme can be found in table 2.
- 15 -
hybridInterdomain This OBJECT IDENTIFIER indicates the hybrid scheme described in clause 5.2.3. The targetKDSpart contains a PublicTicket (defined in clause 5.3.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. asymmInitToSymmTarget This OBJECT IDENTIFIER indicates the scheme described in clause 5.2.4. The targetKDSPart contains an SPKM_REQ (defined in annex C) whilst the targetPart is empty. The profile of SPKM_REQ that is supported in this scheme is given in table 4. symmInitToAsymmTarget This OBJECT IDENTIFIER indicates the scheme described clause 5.2.5. The targetPart contains an SPKM_REQ (defined in annex C) whilst the targetKDSpart is empty. The profile of SPKM_REQ that is supported in this scheme is given in table 4. asymmetric This OBJECT IDENTIFIER indicates the scheme described in clause 5.2.6. The targetKDSpart is not supplied and the targetPart contains an SPKM_REQ. The syntax of SPKM_REQ is given in annex C. The profile of SPKM_REQ that is supported in this scheme is given in table 4. gss-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 ECMA. 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. 5.3.3
Hybrid inter-domain key distribution scheme data elements
PublicTicket ::= SEQUENCE{ krb5Ticket
[0]
Ticket,
-- see annex B
publicKeyBlock
[1]
PublicKeyBlock}
krb5Ticket The Kerberos Ticket which contains the basic key. The encrypted part of this ticket is symmetrically encrypted using the key found within the encryptedPlainKey field of the KeyEstablishmentData in the PublicKeyBlock. 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). PublicKeyBlock ::= SEQUENCE{ signedPKBPart[0] signature
SignedPKBPart, [1]
Signature
OPTIONAL,
-- imported from [ECMA-219], see also annex E certificate
[2]
Certificate
OPTIONAL}
-- imported from [ISO/IEC 9594-8], see also annex E signedPKBPart The part of the publicKeyBlock which is signed. signature • Contains the signature calculated by the issuingKDS on the signedPKBPart field.
- 16 -
certificate • If present, contains the public key certificate of the issuing KD-Server. SignedPKBPart ::= SEQUENCE{ keyEstablishmentData
[0]
KeyEstablishmentData,
encryptionMethod
[1]
AlgorithmIdentifier
issuingKDS
[2]
Identifier,
uniqueNumber
[3]
UniqueNumber,
validityTime
[4]
TimePeriods,
OPTIONAL,
-- UniqueNumber and TimePeriods are -- imported from [ECMA-219], see also annex E creationTime
[5]
UTCTime}
keyEstablishmentData Contains the KeyEstablishementData (defined in clause 5.3.4), i.e. the actual encrypted temporary key. encryptionMethod Indicates the algorithm used to encrypt the encryptedKey. issuingKDS Name of the KD-Server who produced the PublicTicket. uniqueNumber Value 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. 5.3.4
Key establishment data elements The key establishment data structure represents an encrypted symmetric key along with the name of the target for which the key is encrypted. For security reasons, before encryption, the plain key is concatenated with the result of a hash function applied to the plain key itself, along with the issuer KD-Server name.
KeyEstablishmentData ::= SEQUENCE { encryptedPlainKey
[0]
BIT STRING,
-- encrypted PlainKey
targetName
[1]
Identifier
OPTIONAL,
nameHashingAlg
[2]
AlgorithmIdentifier
OPTIONAL}
encryptedPlainKey Contains the encrypted key. The BIT STRING contains the result of encrypting a PlainKey structure. targetName If present, contains the name of the target application. This is necessary for some of the ECMA KD-schemes. nameHashingAlg Specifies the algorithm which is used to calculate the hashedName field of the PlainKey.
- 17 -
PlainKey ::= SEQUENCE { plainKey
[0]
BIT STRING,
hashedName
[1]
BIT STRING}
-- The cleartext key
plainKey Contains the actual bits of the plaintext key which is to be established. hashedName A hash of the name of the encrypting KD-Server calculated using the plainkey and KD-Server name as input (within the HashedNameInput structure). The algorithm identified in nameHashingAlg is used to calculate this value. HashedNameInput ::= SEQUENCE { hniPlainKey
[0]
BIT STRING,
hniIssuingKDS
[1]
Identifier}
-- the same value as plainKey
hniPlainKey hniIssuingKDS Used as input to a hashing algorithm as a general means of preventing ciphertext stealing attacks. 5.3.5
Kerberos Data elements The full ASN.1 for the Kerberos elements used by the ECMA GSS-API mechanism is given in annex B. This clause specifies the specific contents of the Kerberos Ticket's authorization_data field required by the ECMA GSS-API mechanism. Essentially this construct contains the PPID of the context initiator, as formally defined below.
ECMA-AUTHORISATION-DATA-TYPE ::= INTEGER { ECMA-ADATA (65) } ECMA-AUTHORISATION-DATA ::= SEQUENCE { ecma-ad-type
[0] ENUMERATED { ppidType
ecma-ad-value
[1] CHOICE
(0)},
{ ppidValue [0]
SecurityAttribute}}
-- only one choice for now ppidType Indicates the type of the ECMA authorisation data which is included in the Ticket (always zero). ppidValue This value is used in the ppQualification PAC protection method as defined in [ECMA-219] 5.3.6
Profiling of KD-schemes The following tables provide profiling information for the data elements defined above and in annexes B and C. 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.
- 18 -
5.3.6.1
Profile of Ticket (symmIntradomain and symmInterdomain)
Ticket
symmIntradomain
symmInterdomain
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
encrypted with symmetric key shared between KD-Servers
-- flags
only bits 6, 10 and 11 can be meaningful in the context of the ECMA 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-data
contains the PPID corresponding to cname Table 2 - Kerberos ticket fields supported
- 19 -
5.3.6.2
Profile of PublicTicket (hybridInterdomain)
PublicTicket
hybridInterdomain
krb5Ticket - tkt-vno
5
- 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 ECMA 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-data
contains the PPID corresponding to cname
publicKeyBlock - signedPKBPart -- encryptedKey
KeyEstablishmentData structure
-- encryptionMethod
gss-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
- 20 -
5.3.6.3
Profile of SPKM_REQ (asymmInitToSymmTarget, symmInitToAsymmTarget, asymmetric)
SPKM_REQ
asymmInitToSymmTarget
symmInitToAsymmTarget
asymmetric
requestToken not used - fixed value of ‘0’
- tok_id - 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
- timestamp
creation time of SPKM_REQ - required
- randSrc
random bit string
- targ_name
X.500 Name of KDServer of target
X.500 Name of target AEF
X.500 Name of target AEF
- src_name
X.500 Name of initiator
X.500 Name of initiator’s KD-Server
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 only one element supplied containing ecma-gss-key-estb-alg
- key_estb_set - key_estb_req
contains KeyEstablishmentData with targetApplication field supplied
contains KeyEstablishmentData with targetApplication field missing
- key_src_bind
missing
req_integrity
sig_integ mandatory
certif_data
only userCertificate field supported
only userCertificate field supported
only userCertificate field supported
auth_data
missing
missing
missing
Table 4 - SPKM_REQ fields supported
5.4
Returned Key Scheme Information This clause defines the helpful information that may be returned from an acceptor for each specific ECMA key distribution scheme. The information is expected to be sent from the acceptor to the initiator during mechanism negotiation in order to support the scheme used by the mechanism option being selected.
- 21 -
The information is returned in the form of a SEQUENCE OF Directory attributes, so that in cases where the information is missing, it can potentially be retrieved from a Directory. The specific attribute types returned depends on the key distribution scheme that will be used between the actual context initiator and acceptor concerned. The attribute types that are returned for each of the six key distribution schemes are shown below:
6
SCHEME
SYNTAX
SEMANTICS
symmIntradomainInfo
NULL
no information returned
symmInterdomainInfo
NULL
no information returned
hybridInterdomainInfo
SEQUENCE OF Certificate
containing target’s KD-Server Certificate and related Certificates
asymmInitToSymmTargetInfo
SEQUENCE OF Certificate
containing target’s KD-Server Certificate and related Certificates
symmInitToAsymmTargetInfo
SEQUENCE OF Certificate
containing target AEF’s Certificate and related Certificates
asymmetricInfo
SEQUENCE OF Certificate
containing target AEF’s Certificate and related Certificates
Algorithm use within ECMA mechanism Cryptographic and hashing algorithms are used for various purposes within the ECMA GSS-API mechanism. This clause 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. This is done in clause 7. Table 5 summarises the different uses to which algorithms are put within the ECMA GSS-API mechanism.
- 22 -
Use Reference
Description of use
Type of Algorithm
1
PAC protection using seal
OWF + symmetric integrity
2
PAC protection using signature
OWF + asymmetric signature
3
basic key usage
symmetric confidentiality and integrity
4
integrity dialogue key derivation
OWF
5
integrity dialogue key usage
symmetric integrity
6
CA public keys
OWF + asymmetric signature
7
encryption of security data using shared long term symmetric key
symmetric confidentiality.
8
name hash to prevent ciphertext stealing
OWF
9
asymmetric basic key distribution
asymmetric encryption and OWF + signature
10
ECMA key estab. within SPKM_REQ
(fixed value for ECMA)
11
confidentiality dialogue key derivation
OWF
12
confidentiality dialogue key use (on user data)
symmetric 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 1, 3, 5, 7 Class 2: all OWFs: Uses 1, 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: User data confidentiality, symmetric: Use 12 Use 10 is a fixed value for ECMA, and does not contribute to mechanism use options. The fixed value for this has already been defined in clause 5.3.2. 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 64 bit key. Profile 1:
Profile 2:
Profile 3:
Profile 4:
Profile 5:
Full
No user data Confidentiality
Exportable
No Asymm Encryption
Defaulted
Class 1
DES/64
DES/64
RC4/128
DES/64
separately agreed default
Class 2
MD5
MD5
MD5
MD5
separately agreed default
Class 3
RSA
RSA
RSA
Not supported separately agreed default
Classes 4 and 5
RSA
RSA
RSA
DSS/***
separately agreed default
Class 6
DES/64
None
RC4/40
DES/64
separately agreed default
Table 6 - Algorithm profiles
- 23 -
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 designed to be exportable under many countries' legislations,
•
Profile 4 provides security at the same level of quality as Profile 1 but uses the Digital Signature Standard instead of RSA. In this scheme only symmetric key distribution is possible, of the key distribution methods described in clause 5.
•
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.
Clause 7 shows how these algorithm profiles can be used to extend the architectural key distribution schemes to form negotiable ECMA mechanism choices.
7
Identifiers for ECMA mechanism choices Preceding clauses have separately defined the alternatives allowed by the generic ECMA mechanism in terms of PAC protection, key distribution schemes and the use of cryptographic and hash algorithms within the data elements. This clause brings these together by defining the specific ECMA 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 generic GSS-API negotiation scheme.
7.1
Architectural mechanism identifiers The approach is first to combine the PAC protection options (sealed or signed) in a simple way with key distribution schemes to form broad architectural mechanism options, as follows: Architectural Mechanism Number
Description of Architecture Option
PAC prot'n
Key Distribution Scheme(s)
1
Full Symmetric Cryptography
Sealed
symmIntradomain; symmInterdomain
2
Symmetric key distribution
Signed
symmIntradomain; symmInterdomain
3
Symmetric initiator and target; Asymmetric KD-Servers;
Signed
symmIntradomain; hybridInterdomain
4
Asymmetric initiator ; Symmetric target; Asymmetric KD-Server for target;
Signed
asymmInitTo SymmTarget
Signed
symmInitTo AsymmTarget
Signed
asymmetric
5
6
Symmetric Initiator with Asymmetric KD-Server, and Asymmetric Target Asymmetric Initiator and Target
Table 7 - ECMA Architecture Mechanism Options Each of the ECMA architecture mechanism options described above represents a combination of one of these PAC protection options and a key distribution scheme. The six key distribution schemes are defined in clause 5.2.
- 24 -
Generic GSS-API mechanism negotiation will be carried out on the basis of the generic ECMA mechanism OBJECT IDENTIFIER concatenated with an architectural mechanism number from table 7, and an algorithm profile reference number from clause 6. Thus the form of a negotiable ECMA mechanism is:
generic_ecma_mechanism
Y ↑
Architectural Option number
Z ↑
Algorithm Profile number
Thus an ECMA mechanism using a fully symmetric key distribution scheme and an exportable cryptographic algorithm profile would have an OBJECT IDENTIFIER of: { generic_ecma_mech (2) (3) } An ECMA 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-ecma-mech (6) (2) } Not all combinations of key distribution scheme and algorithm profile are meaningful, but meaningful ones are intended to be negotiable using a generic GSS-API negotiation scheme such as [SNEGO].
8
Errors The errors defined here are the minor_status codes that can be returned from the ECMA mechanism. Some values are newly defined in this standard, but the majority have their origin in [ECMA-219]. For the new codes, the mapping to the errors defined in [ECMA-219] is also given.
8.1
Minor Status Codes Different implementations of the ECMA Mechanism can return different minor_status representations for the same error. This section defines (recommends) common symbolic names for the minor status codes identified for the ECMA Mechanism without assigning an actual representation to the values at the API level. These definitions enable independent implementors to enhance portability across different implementations of the ECMA Mechanism (as they do not influence the “logic” behaviour of the caller). The actual conversion of minor_status indicators to text representations is, as normal, done using gss_display_status(). Any implementation must be capable of mapping these symbolic names to and from the actual values (INTEGER or other) used to represent the minor_status codes specified here. In order to give the minor_status code semantics as precisely as possible, annex D gives the mapping between minor_status codes and internal errors from the ECMA Mechanism’s arguments and results where they apply.
8.1.1
Non ECMA-specific codes GSS related codes: GSS_ECMA_S_G_VALIDATE_FAILED Validation error GSS_ECMA_S_G_BUFFER_ALLOC Couldn’t allocate gss_buffer_t data GSS_ECMA_S_G_BAD_MSG_CTX Message Context Invalid GSS_ECMA_S_G_WRONG_SIZE Buffer is wrong size
- 25 -
GSS_ECMA_S_G_BAD_USAGE Credential usage type is unknown GSS_ECMA_S_G_UNAVAIL_QOP Unavailable quality of protection specified Implementation related codes: GSS_ECMA_S_G_MEMORY_ALLOC Couldn’t perform requested memory allocation 8.1.2
ECMA-specific codes Minor_status codes resulting from errors specified in this ECMA Standard: GSS_ECMA_S_SG_SA_INCOMPLETE Attempt to use incomplete Security Association GSS_ECMA_S_SG_INVALID_TOKEN_DATA Data is improperly formatted: cannot encode into token GSS_ECMA_S_SG_INVALID_TOKEN_FORMAT Received token is improperly formatted: cannot decode GSS_ECMA_S_SG_SA_DELETED Security Association deleted at peer’s request GSS_ECMA_S_SG_BAD_DELETE_TOKEN_RECD Invalid delete token received: context not deleted GSS_ECMA_S_SG_INVALID_SAID The SAId between the initiator and acceptor is already in use GSS_ECMA_S_SG_INVALID_TARGET_AEF_PROT The validation of the Seal on the Target AEF part of the token failed GSS_ECMA_S_SG_TOKEN_TIME_NOT_YET_VALID The time given in the Token has not yet been reached by the acceptor GSS_ECMA_S_SG_TOKEN_TOO_OLD The time given in the Token is too old for the acceptor GSS_ECMA_S_SG_BAD_CONTEXT_FLAGS The context flags are not supported by the acceptor GSS_ECMA_S_SG_INVALID_CHANNEL_BINDINGS The channel bindings in the token are not valid GSS_ECMA_S_SG_BAD_KD_SCHEME The KD scheme in the target key block is not supported by the acceptor GSS_ECMA_S_SG_INVALID_TARGET_ID The target ID in the targetAEFpart in the token is not known by the receiving AEF
- 26 -
Minor_status codes resulting from error specified in [ECMA-219]: GSS_ECMA_S_SG_SERVER_SA_ALREADY_ESTABLISHED Security Association to be opened with a security server is already open GSS_ECMA_S_SG_INCOMP_CERT_SYNTAX Invalid Certificate: incompatible syntax version of cert, or cert specific, contents GSS_ECMA_S_SG_BAD_CERT_ATTRIBUTES Invalid Certificate Specific contents: unacceptable security attributes for authentication, access control or protection GSS_ECMA_S_SG_INVAL_TIME_FOR_ATTRIB Invalid Certificate Specific contents: current time outside specified timeperiods in PAC GSS_ECMA_S_SG_PAC_RESTRICTIONS_PROB Invalid Certificate Specific contents: invalid mandatory restriction in PAC GSS_ECMA_S_SG_ISSUER_PROBLEM Invalid Certificate: not issued by a trusted authority GSS_ECMA_S_SG_CERT_TIME_TOO_EARLY Invalid Certificate: not yet reached validity period GSS_ECMA_S_SG_CERT_TIME_EXPIRED Invalid Certificate: validity period expired GSS_ECMA_S_SG_INVALID_CERT_PROT Invalid Certificate: invalid or wrong protection mechanism GSS_ECMA_S_SG_REVOKED_CERT Invalid Certificate: the certificate has been revoked GSS_ECMA_S_SG_KEY_CONSTR_NOT_SUPP No requested key construction data types supported by the KD-Server GSS_ECMA_S_SG_INIT_KD_SERVER_UNKNOWN Unknown initiator KD-Server at the target or target KD-Server GSS_ECMA_S_SG_INIT_UNKNOWN Unknown initiator at the target or target KD-Server GSS_ECMA_S_SG_INSUFF_AUTHORISATION Insufficient authorisation: access control failure for operation GSS_ECMA_S_SG_ALG_PROBLEM_IN_DIALOGUE_KEY_BLOCK Invalid Dialogue Key Block: Algorithm(s) not supported GSS_ECMA_S_SG_NO_BASIC_KEY_FOR_DIALOGUE_KEY_BLOCK Invalid Dialogue Key Block: no Basic Key to derive Dialogue Key Block from GSS_ECMA_S_SG_KEY_DISTRIB_PROB Invalid target key block: bad KD scheme or Key Info for KD-Server or target” GSS_ECMA_S_SG_INVALID_USER_CERT_IN_KEY_BLOCK Invalid Key Block: invalid user certificate
- 27 -
GSS_ECMA_S_SG_OPERATION_NOT_SUPP Operation not supported by initiator or target Security Server GSS_ECMA_S_SG_SEC_ASSOC_ID_FAILURE Unknown Security Association identifier specified for Security Server or target GSS_ECMA_S_SG_UNACCEPTABLE_ACT_REQ Requirements specified for an ACT are unacceptable to PA-Server GSS_ECMA_S_SG_UNSPECIFIED Unknown or not released reason for the error
8.2
Quality of protection The specification of quality of protection on a per message basis is not supported by the ECMA mechanism. Quality of protection is determined by the contents of the DialogueKeyBlock in the TargetAEFPart of the InitialContextToken.
9
Support functions So that its users can gain full benefit from its facilities, the ECMA mechanism requires support functions to make PAC attributes available to the GSS-API application (attribute handling support functions), and to set and get control information relating to the validity and type of acceptor of a security context (acceptor control and support functions). The functions required are defined below.
9.1
Attribute handling support functions Three attribute handling support functions are defined : GSS_Set_cred_attributes: To enable a GSS-API context initiator to specify PAC privilege and miscellaneous attributes to be included in the caller credentials in order to become part of a security context. Miscellaneous attributes include issuer domain name and validity time periods. GSS_Get_sec_attributes: To extract PAC information, either from a GSS-API context, or from a credential handle. Both Privilege Attributes and miscellaneous attributes can be retrieved from the PAC. The function can be invoked either by a context initiator or by a context acceptor. GSS_Get_received_creds: To extract credential handles from a GSS-API context (established with GSS_Accept_sec_context function). This is only applicable when traced or composite delegation is involved (see clause 9.2 for a definition of these forms), and can only be invoked by a context acceptor. A call to GSS_Get_received_creds is an intermediary step for an acceptor, before extracting each delegate's PAC information with a call to GSS_Get_sec_attributes. A security attribute at the extended GSS-API interface is defined as: SecAttribute ::= { attributeType
OBJECT IDENTIFIER,
definingAuthority OCTET STRING securityValue
OPTIONAL,
OCTET STRING }
NOTE This is a simplified form of the full SecurityAttribute syntax defined in [ECMA-219], and repeated in annex E. attributeType Defines the type of the attribute. Attributes of the same type have the same semantics. definingAuthority The authority responsible for the definition of the semantic of the value of the security attribute.
- 28 -
securityValue The value of the security attribute. Its syntax is determined by the attribute type. 9.1.1
GSS_Set_cred_attributes Input : – cred_handle
OCTET STRING,
– required_attributes
SET OF SecAttribute,
– new_cred_req
BOOLEAN
– commit_cred_req
BOOLEAN
Output : – output_cred_handle
OCTET STRING
Return major_status code: – GSS_S_COMPLETE
indicates that the nominated attributes are permitted to the caller and have been set.
– GSS_S_CREDENTIALS_EXPIRED
indicates that the specified credentials have expired.
– GSS_S_DEFECTIVE_CREDENTIAL
indicates that defective credentials have been detected.
– GSS_S_FAILURE
indicates a failure, unspecified at the GSS-API level.
– GSS_S_UNAUTHORIZED
indicates that the function, or an argument of the function was not authorised.
– GSS_S_UNAVAILABLE
indicates that the operation is not supported.
This function enables a caller to request a set of privileges and miscellaneous attributes, optionally replacing existing credentials or creating a new set. The effect of this interface is not cumulative, the requested attributes replace any existing attributes in the credentials claimed. Parameters for GSS_Set_cred_attributes: cred_handle Handle for credentials claimed, cred_handle refers to an authenticated principal. Supply NULL to use default credentials. required_attributes A set of required privilege and miscellaneous attributes. NULL specifies default attributes to be requested. Otherwise, only the privilege and miscellaneous attributes specified will be present. If a specified attribute is provided with a NULL value field, the value allocated to the attribute will be the default for the specified attribute available to the authenticated principal according to the prevailing security policy. Otherwise the value specified will be that present. If a value specified clashes with policy, an error is returned. If a role name is specified as a single attribute required, and policy permits the principal to use it, it will be used as an attribute set reference to select a set of attributes and acceptor controls according to policy. If a role name is specified along with other required attributes, and policy permits the principal to use the role name, the attributes potentially available for the authenticated principal are taken from a set compounded of the principal's authorised attributes, and the attributes associated with the role name. new_cred_req TRUE for a new credentials set, FALSE replaces the original. commit_cred_req TRUE for immediate attribute acquisition, FALSE for deferred attribute acquisition.
- 29 -
output_cred_handle The credentials handle for the changed or new credentials. GSS_Set_cred_attributes produces a modified version of the input credentials (cred_handle). The original credentials are changed if new_cred_req is FALSE, otherwise the output_cred_handle references a new, and different, copy of the original input credentials (which remain untouched). GSS_Release_cred can be used when the caller is finished with any new credentials created by this function. 9.1.2
GSS_Get_sec_attributes Input : – cred_handle
OCTET STRING,
– context_handle
INTEGER,
– attribute_types_required
SET OF OBJECT IDENTIFIER
Output : – priv_attributes
SET OF SecAttribute
– misc_attributes
SET OF SecAttribute
Return major_status code : – GSS_S_COMPLETE
indicates that retrieval of attributes is supported and that all, some, or none of the requested attribute types have been returned.
– GSS_S_CONTEXT_EXPIRED
indicates that the specified security context has expired.
– GSS_S_CREDENTIALS_EXPIRED
indicates that the specified credentials have expired.
– GSS_S_DEFECTIVE_CREDENTIAL
indicates that defective credentials have been detected.
– GSS_S_FAILURE
indicates a failure, unspecified at the GSS-API level.
– GSS_S_UNAVAILABLE
indicates that the operation is not supported.
This function can be used by context initiators and context acceptors to query attributes in credentials or security contexts. If the credentials or security context represents a delegation chain and contains multiple PACs, attributes are retrieved only from the first of them. If the attribute_types_required parameter is not supplied, then all attribute types from the PAC are returned. This option could allow clients of this interface to query all attributes and pass Privilege Attributes to a separate authorisation service to make a decision. To obtain PAC attributes from intermediate PACs in a delegation chain, the caller should first call GSS_Get_delegate_creds (see clause 9.1.3). Parameters for GSS_Get_sec_attributes: cred_handle Handle to credentials, cred_handle refers to an authenticated principal. Supply NULL to use default credentials, or a context handle. Note that NULL, without a context handle, is only used for obtaining the caller's own attributes. context_handle GSS-API security context handle, context_handle refers to a context that is part of an established Security Association. Context_handle is ignored if a non-NULL cred_handle is presented. (Note: it is typically only necessary to use a context_handle parameter rather than cred_handle for the case when a security context is emitted by gss_accept_sec_context, but not with an accompanying set of delegated credentials). attribute_types_required A set of security attribute types. If the default (NULL) is specified, then all miscellaneous and Privilege Attributes are returned.
- 30 -
This standard does not specify which attributes must be supported, but annex B defines some common security attributes that are appropriate. priv_attributes A set of Privilege Attributes. Response is conditional on the "attribute_types_required" input. misc_attributes A set of miscellaneous attributes. Response is conditional on the "attribute_types_required" input. 9.1.3
GSS_Get_received_creds Input : – context_handle
INTEGER,
Output : – received_creds
SEQUENCE OF OCTET STRING
Return major_status code : – GSS_S_COMPLETE
indicates that the requested delegate credentials were retrieved.
– GSS_S_CONTEXT_EXPIRED
indicates that the specified security context has expired.
– GSS_S_FAILURE
indicates a failure, unspecified at the GSS-API level.
– GSS_S_UNAUTHORIZED
indicates that the function, or an argument of the function was not authorised.
– GSS_S_UNAVAILABLE
indicates that the operation is not supported.
This function supports the retrieval of all credentials received by an acceptor. It is intended for context acceptors that require not only the initiator's credentials, but also delegates' credentials, to apply their local security policy. A typical example is the retrieval of delegate credentials to subsequently obtain delegate Privilege Attributes (using GSS_Get_sec_attributes) for use in authorisation decisions. Parameters for GSS_Get_received_creds: context_handle GSS-API security context handle, context_handle refers to a security context that is part of an established association. A default context is assumed if no context_handle is supplied.. received-creds Contains an ordered list of credentials for the original initiator and for each of the intermediate delegates (if any) between the original initiator and this context acceptor, the first of these being the credentials of the original initiator, and the last being of the immediately preceding delegate. It is expected that the normal use for such credentials would merely be inspection via GSS_Get_sec_attributes as most known mechanisms would not permit such delegate credentials to be directly used for initiating further security contexts. Note that it is the caller's responsibility to free any received credentials returned from gss_get_received_creds via gss_release_cred.
9.2
Control and support functions for context acceptors These functions enable a GSS-API context initiator to impose constraints on the security context to be established via GSS_Init_sec_context function, and enable a GSS-API context acceptor to retrieve the control information that applies to a security context established using the GSS_Accept_sec_context function, and build credentials from others.. Three support functions for context acceptor control are defined: GSS_Set_cred_controls function: To enable a GSS-API context initiator to specify delegate/target controls to be included in the caller's credentials in order to be part of a security context. The controls determine the context acceptors with which valid Security Associations can be established using the associated credentials, and whether they can act only as delegates, only as targets or as delegate/targets. Restrictions over the operations that are authorised under the context can also be specified.
- 31 -
GSS_Get_sec_controls function: To enable a GSS-API context initiator or a GSS-API context acceptor to extract acceptor control information either from a credential handle or from a security context. GSS_Compound_creds function: To enable a delegate (which is acting as a GSS-API acceptor for a context initiator, and as a GSS-API context initiator for another acceptor) to build new credentials made from the received credentials and its own credentials. AcceptorControl ::= SEQUENCE { targetOnly
SEQUENCE OF SecAttribute OPTIONAL,
delegateOnly
SEQUENCE OF SecAttribute OPTIONAL,
delegateTarget
SEQUENCE OF SecAttribute OPTIONAL,
delegationMode
DelegationMode
OPTIONAL,
} DelegationMode :=
ENUMERATED { default
(0),
simple
(1),
traced
(2),
composite
(3)
}
targetOnly delegateOnly DelegateTarget Specifies one or several qualifier attributes describing the targets, delegates or delegate/targets for which controls are to apply. • the targetOnly specifies that the qualifier(s) are identifying one or more targets, none of which may use the credentials as a delegate. • the delegateOnly choice specifies that the qualifier(s) are identifying one or more delegates, none of which should use the PAC Privilege Attributes in the credentials when authorising access to their own protected resources, but which may use the received credentials as a delegate. NOTE Only the acceptor system's AEF can prevent an acceptor permitting access based on attributes not intended for it. However it is not in the interests of an acceptor or its AEF to permit access to resources under their control on the basis of attributes that are explicitly stated as not being appropriate. • the delegateTarget choice specifies that the qualifier is identifying one or more delegate/targets any of which can use the received credentials as a delegate and can also use the PAC Privilege Attributes in the credentials when authorising access to its own protected resources. delegationMode Indicates the mode of delegation required. A full description of delegation modes is given in [ECMA-219]. Currently three delegation modes and one default are specified: • default: whatever mode of delegation has been set as default (this may be no delegation) is required. • simple: only the original initiator's credentials are presented to an acceptor. Credentials of intermediate delegates are not used.. • traced: the credentials of the original initiator and of all the intermediate delegates are presented to an acceptor. • composite: only the credentials of the original initiator and the credentials of the immediate caller are presented to an acceptor. • exotic: the credentials to be delegated are randomly selected according to the moon position and the temperature of the room.
- 32 -
9.2.1
GSS_Set_cred_controls call Input : – cred_handle
OCTET STRING,
– required_acceptor_control AcceptorControl, – replace_old_controls
BOOLEAN
– new_cred_req
BOOLEAN
– commit_cred_req
BOOLEAN
Output : – output_cred_handle
OCTET STRING
Return major_status code: – GSS_S_COMPLETE
indicates that the controls have been set.
– GSS_S_CREDENTIALS_EXPIRED
indicates that the specified credentials have expired.
– GSS_S_DEFECTIVE_CREDENTIAL
indicates that defective credentials have been detected.
– GSS_S_FAILURE
indicates a failure, unspecified at the GSS-API level.
– GSS_S_UNAUTHORIZED
indicates that the function, or an argument of the function was not authorised.
– GSS_S_UNAVAILABLE
indicates that the operation is not supported.
This function supports requests to set context acceptor controls, optionally replacing existing credentials controls or creating a new set of credentials with new controls. The effect of this interface is either cumulative or not depending on the value of the replace_old_controls parameter. Parameters for GSS_Set_cred_controls: cred_handle Handle for credentials claimed, it refers to an authenticated principal. Supply NULL to use default credentials. required_acceptor_control The control settings required. replace_old_controls TRUE to replace acceptor controls existing in original credentials. FALSE to specify additional controls. new_cred_req TRUE for a new credentials set, FALSE to modify the original. commit_cred_req TRUE for immediate action, FALSE for deferred action. output_cred_handle GSS_Set_cred_controls produces a modified version of the input credentials (cred_handle). The original credentials are directly changed if duplicate_cred_req is FALSE, otherwise the output_cred_handle references a new, and potentially different, copy of the original input credentials (which remain untouched). gss_release_cred can be used when the caller is finished with any new credentials created by this function. 9.2.2
GSS_Get_sec_controls Input : – cred_handle
OCTET STRING,
– context_handle
INTEGER,
- 33 -
Output : – acceptor_controls
SET OF AcceptorControl,
Return major_status code : – GSS_S_COMPLETE
indicates that the acceptor control information has been returned
– GSS_S_CREDENTIALS_EXPIRED
indicates that the specified credentials have expired.
– GSS_S_DEFECTIVE_CREDENTIAL
indicates that defective credentials have been detected.
– GSS_S_FAILURE
indicates a failure, unspecified at the GSS-API level.
– GSS_S_UNAVAILABLE
indicates that the operation is not supported.
This function enables a caller to enquire the current value of the acceptor controls in the specified credentials or context. This function can be used by context initiators and context acceptors to query acceptor controls in credentials or security contexts.. Parameters for GSS_Get_sec_controls: cred_handle Handle to credentials. It refers to an authenticated principal. Supply NULL to use default credentials, or a context handle. context_handle GSS-API security context handle, context_handle refers to a security context that is part of an established association. Context_handle is ignored if a non-NULL cred_handle is presented. (Note: it is typically only necessary to use a context_handle parameter rather than cred_handle for the case when a security context is emitted by gss_accept_sec_context, but not with an accompanying set of delegated credentials). acceptor_controls A set of acceptor controls. Acceptor controls are described in clause 9.2.1. 9.2.3
GSS_Compound_creds call Input : – delegated_cred_handle
OCTET STRING
– cred_handle
OCTET STRING,
Output : – cred_handle_new
OCTET STRING
Return major_status code : – GSS_S_COMPLETE
indicates that the credentials were successfully compounded
– GSS_S_CREDENTIALS_EXPIRED
indicates that one or more of the specified credentials have expired.
– GSS_S_DEFECTIVE_CREDENTIAL
indicates that defective credentials have been detected.
– GSS_S_FAILURE
indicates a failure, unspecified at the GSS-API level.
– GSS_S_UNAVAILABLE
indicates that the operation is not supported.
Parameters for gss_compound_cred: delegated_cred_handle A handle to the credentials being delegated, it refers to one or several authenticated principals.
- 34 -
cred_handle A handle to claimed credentials of the caller, cred_handle refers to an authenticated principal. cred_handle_new A handle to the compounded set of credentials.
9.3
Attribute specifications For attributes that appear in the PAC with the syntax SecurityAttribute, the syntaxes of their securityValue fields are defined below.
9.3.1
Privilege attributes Privileges are defined under the OBJECT IDENTIFIER:
privilege-attribute
OBJECT IDENTIFIER ::= { iso(1) identified-organisation(3) icd-ecma(012) technical-
report(1) security-in-open-systems(046) privilege-attribute(4) } 9.3.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 { privilege-attribute 2 } Its syntax in the PAC is SecurityAttribute, with a securityValue syntax of Identifier. When it is returned by a GSS_Get_sec_attributes call, or set by a GSS_Set_cred_attributes call, the security_value field of the gss_sec_attr structure in gss_sec_attr_set contains a pointer to the gss_id structure (defined in clause 9.4)
9.3.1.2
Group A group represents a characteristic common to several principals. A security context may contain more than one group for a given principal. The group attribute may therefore contain more than one group. The type of this attribute is { privilege-attribute 4 } Its syntax in the PAC is SecurityAttribute, with a securityValue syntax of SEQUENCE OF Identifier. When it is returned by a GSS_Get_sec_attributes call, or set by a GSS_Set_cred_attributes call, the security_value field of the gss_sec_attr structure in gss_sec_attr_set contains a pointer to the gss_id_set structure (defined in clause 9.4)
9.3.1.3
Primary group The primary group represents a unique group to which a principal belongs. A security context must not contain more than one primary group for a given principal. The type of this attribute is { privilege-attribute 3 } Its syntax in the PAC is SecurityAttribute, with a securityValue syntax of Identifier. When it is returned by a GSS_Get_sec_attributes call, or set by a GSS_Set_cred_attributes call, the security_value field of the gss_sec_attr structure in gss_sec_attr_set contains a pointer to the gss_id structure (defined in clause 9.4.1)
9.3.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 { privilege-attribute 1 } Its syntax in the PAC is SecurityAttribute, with a securityValue syntax of Identifier. When it is returned by a GSS_Get_sec_attributes call, or set by a GSS_Set_cred_attributes call, the security_value field of the gss_sec_attr structure in gss_sec_attr_set contains a pointer to the gss_id structure (defined in clause 9.4)
- 35 -
9.3.2 9.3.2.1
Attribute set reference Role name The role name is an attribute set reference used only as input parameter to a GSS_Set_cred_attributes call to select a set of security attributes for credentials. It does not appear in the PAC. The type of this attribute is { privilege-attribute 17 } For this attribute, the security_value field of the gss_sec_attr structure in gss_sec_attr_set contains a pointer to the gss_id structure (defined in clause 9.4)
9.3.3
Miscellaneous attributes Miscellaneous attributes are defined under the OBJECT IDENTIFIER:
misc-attribute
OBJECT IDENTIFIER ::= { iso(1) identified-organisation(3) icd-ecma(012) technical-report(1)
security-in-open-systems(046) misc-attribute(3) } 9.3.3.1
Audit Identity The access identity represents the principal’s identity to be used for audit purposes. The type of this attribute is { misc-attribute 2 } Its syntax in the PAC is SecurityAttribute, with a securityValue syntax of Identifier. When it is returned by a GSS_Get_sec_attributes call, or set by a GSS_Set_cred_attributes call, the security_value field of the gss_sec_attr structure in gss_sec_attr_set contains a pointer to the gss_id structure (defined in clause 9.4)
9.3.3.2
Issuer domain name The issuer domain name represents the name of the domain which issued the principal PAC. It is carried in the PAC in the issuerDomain field. It cannot be set by a call to GSS_Set_cred_attributes. The type of this attribute is { misc-attribute 10 } When it is returned by a GSS_Get_sec_attributes call, the security_value field of the gss_sec_attr structure in gss_sec_attr_set contains a pointer to the gss_id structure (defined in clause 9.4)
9.3.3.3
Validity periods The validity periods represent the time periods within which the principal PAC is valid. It is carried in the PAC in the validity and timePeriods fields. The type of this attribute is { misc-attribute 11 } When it is returned by a GSS_Get_sec_attributes call, or set by a GSS_Set_cred_attributes call, the security_value field of the gss_sec_attr structure in gss_sec_attr_set contains a pointer to the gss_period_list structure (defined in clause 9.4).
9.3.3.4
Optional restrictions The optional restrictions represent restrictions that apply to the security context. The context may be accepted, even if the application is unable to understand the optional restrictions. Optional restrictions are carried in the PAC in the restrictions field. The type of this attribute is { misc-attribute 12 } When it is returned by a GSS_Get_sec_attributes call, or set by a GSS_Set_cred_attributes call, the security_value field of the gss_sec_attr structure in gss_sec_attr_set contains a pointer to the gss_id structure (defined in clause 9.4).
9.3.3.5
Mandatory restrictions The mandatory restrictions represent restrictions that apply to the security context. The context must not be accepted if the application is unable to understand the mandatory restrictions. Optional restrictions are carried in the PAC in the restrictions field. The type of this attribute is { misc-attribute 13 }
- 36 -
When it is returned by a GSS_Get_sec_attributes call, or set by a GSS_Set_cred_attributes call, the security_value field of the gss_sec_attr structure in gss_sec_attr_set contains a pointer to the gss_id structure (defined in clause 9.4). 9.3.4
Qualifier attributes Qualifier attributes are defined under the OBJECT IDENTIFIER:
qualifier-attribute
OBJECT IDENTIFIER ::= { iso(1) identified-organisation(3) icd-ecma(012) technical-
report(1) security-in-open-systems(046) qualifier-attribute(5) } 9.3.4.1
Acceptor name An acceptor name represents the name of an application that can potentially accept the security context either as a target only, or a delegate target, or delegate only. Acceptor names are carried in the PAC as protection methods. More than one name can be present. The type of this attribute is { qualifier-attribute 1 } When it is returned by a GSS_Get_sec_controls call, or set by a GSS_Set_cred_controls call, the security_value field of the gss_sec_attr structure in gss_control_set contains a pointer to the gss_id_set structure (defined in clause 9.4).
9.3.4.2
Application trust group An application trust group represents a group of acceptors defined by the security administrator that mutually trust each other not to spoof each others’ identity. An application trust group can potentially accept the security context either as a target only, or a delegate target, or delegate only. Application trust groups are carried in the PAC as protection methods. More than one may be present. The type of this attribute is { qualifier-attribute 2 } When it is returned by a GSS_Get_sec_controls call, or set by a GSS_Set_cred_controls call, the security_value field of the gss_sec_attr structure in gss_control_set contains a pointer to the gss_id_set structure (defined in clause 9.4)
9.4
C Bindings This section specifies C language bindings for the GSS-API ECMA mechanism support functions.
9.4.1
Data types and calling conventions The following data types : • OM_uint32, • gss_buffer_t, • gss_OID, • gss_OID_set, • gss_cred_id_t, • gss_ctx_id_t, are defined in [GSS-API], along with the calling conventions.
9.4.1.1
Identifier Identifiers have the following data structure:
typedef struct
{
gss_type_en
id_type
gss_value
id_value;
} gss_id; Where id_type identifies the syntax within the Identifier type:
- 37 -
typedef enum
{
gss_oid_t,
/* for OID */
gss_integer,
/* for Integer */
gss_string,
/* for character string */
gss_uuid,
/* for DCE UUID */
gss_buffer_t;
/* for gss_buffer */
} gss_type_en; And where id_value is the actual value of the data of type Identifier: struct union
{
gss_OID
OID;
OM_uint32*
integer;
char*
string;
uuid_t*
uuid;
gss_buffer_t
buffer;
} gss_value; 9.4.1.2
Identifier set Identifier sets have the following data structure:
typedef struct gss_id_set_desc { OM_uint32
id_count;
gss_id*
ids;
} gss_id_set; The id_count field contains the number of Identifiers in the set. 9.4.1.3
Time periods A time period has the following structure:
typedef struct gss_time_period_desc
{
time_t
start_time;
/* NULL for unconstrained start time */
time_t
end_time;
/* NULL for unconstrained end time */
} gss_time_period; 9.4.1.4
time period list Time period lists have the following data structure:
typedef struct gss_period_list _desc{ OM_uint32
period_count;
gss_time_period*
periods;
} gss_period_list; The period_count field contains the number of time periods in the list.
- 38 -
9.4.1.5
Security attributes Security attributes (see clause 9.1) have the following data structure:
typedef struct gss_sec_attr_desc
{
gss_OID
attribute_type;
gss_buffer_t
defining_authority; /* specify GSS_C_NO_BUFFER when non present */
gss_buffer_t
security_value;
} gss_sec_attr; Correspondence between the security_value field and the actual syntax of the security attribute is defined along with each specific attribute_type. 9.4.1.6
Security Attribute Sets A set of security attributes has the following structure:
typedef struct gss_sec_attr_set_desc{ OM_uint32
attribute_count;
gss_sec_attr*
attributes;
} gss_sec_attr_set; The attribute_count field contains the number of security attributes in the set. 9.4.1.7
Credentials List A list of credentials has the following structure:
typedef struct
{
OM_uint32
cred_count;
gss_cred_id_t*
cred_list;
} gss_cred_list; The cred_count field contains the number of credentials in the list. 9.4.1.8
Acceptor Control Acceptor control has the following structure:
typedef struct gss_acceptor_control_desc { gss_sec_attr
target_only; /* specify GSS_C_NULL_SEC_ATTR when non present */
gss_sec_attr
delegate_only;
gss_sec_attr
delagate_target;
/* specify GSS_C_NULL_SEC_ATTR when non present */ /* specify GSS_C_NULL_SEC_ATTR when non present */ OM_uint32
delegation_mode; /* specify NULL when non present */
} gss_acceptor_control;
- 39 -
9.4.1.9
Acceptor Control Set A set of Acceptor Control has the following structure :
typedef struct gss_control_set_desc{ OM_uint32
control_count;
gss_acceptor_control*
acceptor_controls;
} gss_control_set; The control_count field contains the number of acceptor controls in the set. 9.4.2
gss_set_cred_attributes
/* set attributes values in credentials */ OM_uint32 gss_set_cred _attributes (
9.4.3
gss_cred_id_t
cred_handle,
/* IN */
gss_sec_attr_set
required_attributes,
/* IN */
OM_uint32
new_cred_req,
/* IN*/
OM_uint32
commit_cred_req,
/* IN*/
OM_uint32*
minor_status,
/* OUT*/
gss_cred_id_t*
output_cred_handle);
/* OUT */
gss_get_sec_attributes
/* get attributes associated with credentials or security context */ OM_uint32 gss_get_sec_attributes (
9.4.4
gss_cred_id_t
cred_handle,
/* IN */
gss_ctx_id_t
context_handle,
/* IN */
gss_OID_set
attribute_types_required,
/* IN */
OM_uint32*
minor_status,
/* OUT*/
gss_sec_attr_set**
priv_attributes,
/* OUT*/
gss_sec_attr_set**
misc_attributes);
/* OUT*/
gss_get_received_creds
/* get received credentials associated with a security context */ OM_uint32 gss_get_received_creds (
9.4.5
gss_ctx_id_t
context_handle,
/* IN */
OM_uint32*
minor_status,
/* OUT*/
gss_cred_list**
received_creds);
/* OUT*/
gss_set_cred_controls
/* Set acceptor controls in credentials for context establishmentt */
- 40 -
OM_uint32 gss_set_cred_controls (
9.4.6
gss_cred_id_t
cred_handle,
/* IN */
gss_ control_set
required_control,
/* IN */
OM_uint32
replace_old_controls,
/* IN */
OM_uint32
new_cred_req,
/* IN */
OM_uint32
commit_cred_req,
/* IN */
OM_uint32*
minor_status,
/* OUT*/
gss_cred_id_t*
output_cred_handle);
/* OUT*/
gss_get_sec_controls
/* set context acceptor controls on credentials */ OM_uint32 gss_get_sec_controls (
9.4.7
gss_cred_id_t
cred_handle,
/* IN */
gss_ctx_id_t
context_handle,
/* IN */
OM_uint32*
minor_status,
/* OUT*/
gss_control_set*
acceptor_controls);
/* OUT*/
gss_compound_cred
/* compound credentials for delegation */ OM_uint32 gss_compound_cred (
10
gss_cred_id_t
delegated_cred_handle,
/* IN */
gss_cred_id_t
cred_handle,
/* IN */
OM_uint32*
minor_status,
/* OUT*/
gss_cred_id_t
cred_handle_new);
/* OUT*/
Relationship to other standards This standard further develops the work done in [ECMA-219], defining a security mechanism that supports the GSSAPI [GSS-API]. The relationship to ECMA-219 is: •
development of this Standard has resulted in minor corrections to ECMA-219,
•
the syntax of the PAC and related data (in support of PAC protection mechanisms), is as defined in ECMA-219,
•
the key package syntax is built upon the basic syntax given in ECMA-219, in the manner specified there,
•
the attribute structure returned across the interface by the support functions defined in clause 9 is a simplified profile of the structure of the ECMA-219 Security Attribute. This makes the functions more suitable for use by callers of other GSS-API mechanisms.
Other standards related work on similar mechanisms ([KRB5GSS], [SPKM]) has resulted in definitions of GSS-API tokens for those mechanisms. The token formats specified here, have been designed for best fit with the equivalent definitions from these other specifications. In particular: •
the symmetric key distribution schemes make use of Kerberos Tickets (see [Kerberos] and annex B), to which ECMA PAC control information (specifically the PPID) has been added in the authorisation data,
•
the asymmetric key distribution schemes make use of Simple Public Key Mechanism tickets, see [SPKM],
- 41 -
•
Security Association identifiers and other token protection data have been specified in the same manner as in [SPKM] (called context identifiers there),
The structure of public key certificates, algorithm identifiers and distinguished names used in this Standard conform to [ISO/IEC 9594-8].
- 42 -
- 43 -
Annex A (Normative) Formal ASN.1 definitions of data types defined in this standard This annex contains formal definitions of the ASN.1 data types that are newly defined in this standard. Ecma-gss-api-types
{
iso(1) identified-organisation(3) icdecma(0012) standard(0) ecma-gss-api(235) ecma-gss-api-types (1)
DEFINITIONS ::= BEGIN -- exports everything IMPORTS kd-schemes FROM
UsefulDefinitions { iso(1) identified-organisation(3) icd-ecma(0012) standard(0) apa(219) modules(1) usefulDefinitions(1) }
Identifier, Signature, Seal, SecurityAttribute, UniqueNumber, TimePeriods, CertAndECV, TargetKeyBlock, DialogueKeyBlock FROM
SecurityInformationObjects {iso (1) identified-organisation(3) icd-ecma(0012) standard(0) apa(219) modules(1) securityInformationObjects(3) }
Certificate, CertificateList, AlgorithmIdentifier, Certificates FROM
AuthenticationFramework {joint-iso-ccitt(2) ds(5) module(1) authenticationFramework(7) }
HostAddress, HostAddressList, Ticket FROM
Ecma-kerberos-types { iso(1) identified-organisation(3) icd-ecma(0012) standard(0) ecma-gss-api(235) ecma-kerberos-types (2)
SPKM_REQ FROM
Ecma-spkm-types { iso(1) identified-organisation(3) icdecma(0012) standard(0) ecma-gss-api(235) ecma-spkm-types (3)
NOTE strictly speaking SPKM_REQ does not need to be imported since it is not used explicitly in the syntax given below. However it is one of the possible ANY choices in the TargetKeyBlock construct.
- 44 -
-- OBJECT IDENTIFIERS generic-ecma-mech OBJECT IDENTIFIER ::= { iso(1) identified-organisation(3) icd-ecma(0012) standard(0) ecma_gss_api (235) generic-ecma-mech (4)} misc-attribute
OBJECT IDENTIFIER ::= { iso(1) identified-organisation(3) icd-ecma(012) technical-
report(1) security-in-open-systems(046) misc-attribute(3) } privilege-attribute
OBJECT IDENTIFIER ::= { iso(1) identified-organisation(3) icd-ecma(012) technical-
report(1) security-in-open-systems(046) privilege-attribute(4) } qualifier-attribute
OBJECT IDENTIFIER ::= { iso(1) identified-organisation(3) icd-ecma(012) technical-
report(1) security-in-open-systems(046) qualifier-attribute(5) } -- Key Scheme Object Identifiers symmIntradomain
OBJECT IDENTIFIER ::= {kd-schemes 1}
symmInterdomain
OBJECT IDENTIFIER ::= {kd-schemes 2}
hybridInterdomain
OBJECT IDENTIFIER ::= {kd-schemes 3}
asymmInitToSymmTarget
OBJECT IDENTIFIER ::= {kd-schemes 4}
symmInitToAsymmTarget
OBJECT IDENTIFIER ::= {kd-schemes 5}
asymmetric
OBJECT IDENTIFIER ::= {kd-schemes 6}
-- Object Identifier for insertion in SPKM construct gss-key-estb-alg AlgorithmIdentifier ::= {kd-schemes, NULL } -- privilege attribute Object Identifiers role-type
OBJECT IDENTIFIER ::= {privilege-attribute
1}
access-identity-type
OBJECT IDENTIFIER ::= {privilege-attribute
2}
primary-group-type
OBJECT IDENTIFIER ::= {privilege-attribute
3}
group-type
OBJECT IDENTIFIER ::= {privilege-attribute
4}
role-name-type
OBJECT IDENTIFIER ::= {privilege-attribute
17 }
-- miscellaneous attribute Object Identifiers acceptor-name-type
OBJECT IDENTIFIER ::= {miscellaneous-attribute
1}
audit-identity-type
OBJECT IDENTIFIER ::= {miscellaneous-attribute
2}
issuer-domain-name-type
OBJECT IDENTIFIER ::= {miscellaneous-attribute
10 }
validity-periods-type
OBJECT IDENTIFIER ::= {miscellaneous-attribute
11 }
optional-restrictions-type
OBJECT IDENTIFIER ::= {miscellaneous-attribute
12 }
mandatory-restrictions-type
OBJECT IDENTIFIER ::= {miscellaneous-attribute
13 }
- 45 -
-- qualifier attribute Object Identifiers acceptor-name-type
OBJECT IDENTIFIER ::= {qualifier-attribute
1}
application-trust-group-type
OBJECT IDENTIFIER ::= {qualifier-attribute
2}
-- data types AcceptorControl ::= SEQUENCE { targetOnly
SEQUENCE OF SecAttribute OPTIONAL,
delegateOnly
SEQUENCE OF SecAttribute OPTIONAL,
delegateTarget
SEQUENCE OF SecAttribute OPTIONAL,
delegationMode
DelegationMode
OPTIONAL,
} 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
} ContextDeleteToken ::= SEQUENCE { cdtContents
[0] CDTContents,
cdtSeal
[1] Seal
-- seal over cdtContents, encrypted -- under the Integrity Dialogue Key -- contains only the sealValue field }
DelegationMode :=
ENUMERATED { default
(0),
simple
(1),
traced
(2),
composite
(3)
}
ECMA-AUTHORISATION-DATA-TYPE ::= INTEGER { ECMA-ADATA (65) } ECMA-AUTHORISATION-DATA ::= SEQUENCE { ecma-ad-type
[0] ENUMERATED
{ ppidType
(0)},
ecma-ad-value
[1] CHOICE
{ ppidValue [0] -- only one choice for now
EcmaMechSpecInfo ::= SEQUENCE OF Attribute
SecurityAttribute}}
- 46 -
ErrorArgument ::= ENUMERATED { gss_ecma_s_sg_server_sec_assoc_open
(1),
gss_ecma_s_sg_ incomp_cert_syntax
(2),
gss_ecma_s_sg_ bad_cert_attributes
(3),
gss_ecma_s_sg_ inval_time_for_attrib
(4),
gss_ecma_s_sg_ pac_restrictions_prob
(5),
gss_ecma_s_sg_ issuer_problem
(6),
gss_ecma_s_sg_ cert_time_too_early
(7),
gss_ecma_s_sg_ cert_time_expired
(8),
gss_ecma_s_sg_ invalid_cert_prot
(9),
gss_ecma_s_sg_ revoked_cert
(10),
gss_ecma_s_sg_ key_constr_not_supp
(11),
gss_ecma_s_sg_ init_kd_server_ unknown
(12),
gss_ecma_s_sg_init_unknown
(13),
gss_ecma_s_sg_alg_problem_in_dialogue_key_block
(14),
gss_ecma_s_sg_no_basic_key_for_dialogue_key_block
(15),
gss_ecma_s_sg_key_distrib_prob
(16),
gss_ecma_s_sg_invalid_user_cert_in_key_block
(17),
gss_ecma_s_sg_unspecified
(18),
gss_ecma_s_sg_invalid_token_format
(19)
} ErrorToken ::= { tokenType
[0]
OCTET STRING VALUE X'0400',
etContents
[1]
ErrorArgument,
} HashedNameInput ::= SEQUENCE { hniPlainKey
[0] BIT STRING,
hniIssuingKDS
[1] Identifier}
-- the same value as plainKey
- 47 -
ICTContents ::= SEQUENCE { tokenId
[0]
INTEGER,
-- shall contain X'0100'
SAId
[1]
OCTET STRING,
targetAEFPart
[2]
TargetAEFPart,
targetAEFPartSeal
[3]
Seal, -- Imported from [ECMA-219] (see annex E)
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,
-- imported from [Kerberos]
targetAddress
[9]
HostAddress OPTIONAL
-- imported from [Kerberos] -- used as channel bindings
InitialContextToken ::= SEQUENCE
{
ictContents
[0] ICTContents,
ictSeal
[1] Seal -- Imported from [ECMA-219] (see annex E) }
KeyEstablishmentData ::= SEQUENCE { encryptedPlainKey
[0] BIT STRING,
-- encrypted PlainKey
targetName
[1] Identifier
OPTIONAL,
nameHashingAlg
[2] AlgorithmIdentifier
OPTIONAL}
MICToken ::= PMToken PlainKey ::= SEQUENCE { plainKey
[0] BIT STRING,
hashedName [1] BIT STRING}
-- The cleartext key
}
- 48 -
PMTContents ::= SEQUENCE { tokenId
[0]
INTEGER,
SAId
[1]
OCTET STRING,
seq-number
[2]
INTEGER
userData
[3]
CHOICE {
directionIndicator
[4]
OPTIONAL,
plaintext
BIT STRING,
ciphertext
OCTET STRING
}
OPTIONAL,
BOOLEAN
OPTIONAL
} PMToken ::= SEQUENCE
{
pmtContents
[0] PMTContents,
pmtSeal
[1] Seal }
PublicKeyBlock ::= SEQUENCE{ signedPKBPart[0] signature
SignedPKBPart, [1]
Signature
OPTIONAL,
-- imported from [ECMA-219], see also annex E certificate
[2]
Certificate
OPTIONAL}
-- imported from [ISO/IEC 9594-8], see also annex E PublicTicket ::= SEQUENCE{ krb5Ticket
[0]
Ticket,
-- see annex B
publicKeyBlock
[1]
PublicKeyBlock}
SecAttribute ::= { attributeType
OBJECT IDENTIFIER,
definingAuthority OCTET STRING securityValue
OPTIONAL,
OCTET STRING }
SignedPKBPart ::= SEQUENCE{ keyEstablishmentData
[0]
KeyEstablishmentData,
encryptionMethod
[1]
AlgorithmIdentifier
issuingKDS
[2]
Identifier,
uniqueNumber
[3]
UniqueNumber,
validityTime
[4]
TimePeriods,
OPTIONAL,
-- UniqueNumber and TimePeriods are -- imported from [ECMA-219] creationTime
[5]
UTCTime}
- 49 -
TargetAEFPart ::= SEQUENCE { pacAndCVs
[0] SEQUENCE OF CertandECV OPTIONAL,
targetKeyBlock
[1] TargetKeyBlock,
dialogueKeyBlock
[2] DialogueKeyBlock, -- Imported from [ECMA-219] (see annex E)
targetIdentity
[3] Identifier,
flags
[4] BIT STRING{
-- see clause 5 for schemes supported -- Imported from [ECMA-219] (see annex E)
delegation
(0)
} } TargetKeyBlock ::= SEQUENCE { kdSchemeOID
[2] OBJECT IDENTIFIER,
targetKDSpart
[3] ANY
targetPart
[4] ANY
OPTIONAL, -- depending on kdSchemeOID OPTIONAL} -- depending on kdSchemeOID
TargetResultToken ::= SEQUENCE trtContents
[0] TRTContents,
trtSeal
[1] Seal
{ }
Token ::= [APPLICATION 0] IMPLICIT SEQUENCE { thisMech
MechType, -- the OBJECT IDENTIFIER specified below
innerContextTokenANY DEFINED BY thisMech } TRTContents ::= SEQUENCE { tokenId
[0]
INTEGER,
SAId
[1]
OCTET STRING,
utcTime
[5]
UTCTime OPTIONAL,
usec
[6]
INTEGER OPTIONAL,
seq-number
[7]
INTEGER OPTIONAL
} WrapToken ::= PMToken END -- of Ecma-gss-api-types
-- shall contain X'0200'
- 50 -
- 51 -
Annex B (Normative) Definitions of [Kerberos] data types This annex contains formal normative ASN.1 specifications for data types that are also defined in [Kerberos]. Where any differences might arise, the specifications in this annex take precedence. Ecma-kerberos-types {
iso(1) identified-organisation(3) icd-ecma(0012) standard(0) ecma-gss-api(235) ecma-kerberos-types (2)
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
cipher
[2]
OCTET STRING
EncryptionKey ::= SEQUENCE { keytype
[0]
INTEGER,
keyvalue
[1]
OCTET STRING}
OPTIONAL, —ciphertext}
- 52 -
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,
renew-till
[8]
KerberosTime OPTIONAL,
caddr
[9]
HostAddresses OPTIONAL,
authorization-data
[10]
AuthorizationData OPTIONAL}
-- see clause 5.3.5 for the specific ECMA contents of AuthorizationData 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
- 53 -
TicketFlags ::= BIT STRING { reserved
(0),
-- not supported in the ECMA mechanism
forwardable
(1),
-- not supported in the ECMA mechanism
forwarded
(2),
-- not supported in the ECMA mechanism
proxiable
(3),
-- not supported in the ECMA mechanism
proxy
(4),
-- not supported in the ECMA mechanism
may-postdate
(5),
-- not supported in the ECMA mechanism
postdated
(6),
invalid
(7),
-- not supported in the ECMA mechanism
renewable
(8),
-- not supported in the ECMA mechanism
initial
(9),
-- not supported in the ECMA 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 ECMA mechanism. END -- of Ecma-kerberos-types
- 54 -
- 55 -
Annex C (Normative) Definitions of [SPKM] data types This annex contains formal normative ASN.1 specifications for data types that are also defined in [SPKM]. Where any differences might arise, the specifications in this annex take precedence. Ecma-spkm-types {
iso(1) identified-organisation(3) icdecma(0012) standard(0) ecma-gss-api(235) ecma-spkm-types (3)
DEFINITIONS ::= BEGIN -- exports everything IMPORTS AuthorizationData FROM Ecma-kerberos-types { iso(1) identified-organisation(3) icd-ecma(0012) standard(0) ecma-gss-api(235) ecma-kerberos-types (2) AlgorithmIdentifier, Certificate, CertificateList, CertificatePair 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
- 56 -
CertificationPath ::= SEQUENCE
{
userKeyId
[0]
OCTET STRING
userCertif
[1]
Certificate
OPTIONAL,
-- identifier for user's public key OPTIONAL, -- certificate containing user's public key verifKeyId
[2]
OCTET STRING
OPTIONAL,
-- identifier for user's public verification key 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 }
Context_Data ::= SEQUENCE
-- for C-ALG {
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
VALUE NOTATION ::= value
( ToBeHashed ) ( 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
- 57 -
MAC MACRO ::= BEGIN TYPE NOTATION ::= type ( ToBeMACed ) VALUE NOTATION ::= value
( VALUE
SEQUENCE{ algId
AlgorithmIdentifier,
mac
BIT STRING } )
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 }
- 58 -
REQ_TOKEN ::= SEQUENCE { tok_id
INTEGER,
context_id
Random_Integer,
pvno
BIT STRING,
timestamp
UTCTime
-- shall contain 0100 (hex) -- protocol version number OPTIONAL, -- mandatory for SPKM-2
randSrc
Random_Integer,
targ_name
Name,
src_name
Name,
req_data
Context_Data,
validity
-- may be a value indicating "anonymous"
[0] Validity
OPTIONAL, -- validity interval for key (may be used in the -- computation of security context lifetime)
key_estb_set [1] Key_Estb_Algs, key_estb_req
-- specifies set of key establishment algorithms
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 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
- 59 -
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 -- of Ecma-spkm-types
- 60 -
- 61 -
Annex D (Normative) Mappings of Minor Status Returns onto [ECMA-219] error values This annex contains a table showing how the minor status returns defined in clause 8 correspond to the error values of [ECMA219]. Many of the minor_status codes at the API level cover more than one of the errors from the ECMA Mechanism, since any mechanism specific operation, argument or result has a higher granularity and variety of parameters than the GSS-API.
GSS_API parameter Minor Status code GSS_ECMA_S_SG_SERVER_SA_ ALREADY_ESTABLISHED GSS_ECMA_S_SG_ INCOMP_CERT_SYNTAX
GSS_ECMA_S_SG_ BAD_CERT_ATTRIBUTES
GSS_ECMA_S_SG_ INVAL_TIME_FOR_ATTRIB GSS_ECMA_S_SG_ PAC_RESTRICTIONS_PROB GSS_ECMA_S_SG_ISSUER_PROBLEM GSS_ECMA_S_SG_ CERT_TIME_TOO_EARLY GSS_ECMA_S_SG_ CERT_TIME_EXPIRED GSS_ECMA_S_SG_ INVALID_CERT_PROT
GSS_ECMA_S_SG_ REVOKED_CERT GSS_ECMA_S_SG_ KEY_CONSTR_NOT_SUPP GSS_ECMA_S_SG_ INIT_KD_SERVER_ UNKNOWN GSS_ECMA_S_SG_ INIT_UNKNOWN GSS_ECMA_S_SG_ INSUFF_AUTHORISATION
ABSTRACT-ERROR AssocAlreadyOpen
ECMA-219 Error Parameter NULL
AUCSpecificError
AUCProblem
CertificateError
CertificateProblem
PACSpecificError
PACProblem
AUCSpecificError
AUCProblem
AUCSpecificError AUCSpecificError AUCSpecificError PACSpecificError PACSpecificError PACSpecificError
AUCProblem AUCProblem AUCProblem PACProblem PACProblem PACProblem
PACSpecificError PACSpecificError PACSpecificError AUCSpecificError
PACProblem PACProblem PACProblem AUCProblem
PACSpecificError PACSpecificError
PACProblem PACProblem
CertificateError CertificateError
Name n/a
Val n/a
incompatible SyntaxVersion incompatible SyntaxVersion incompatible SyntaxVersion invalidProtection
1
wrongType authentication Level invalidAttribute historyNot Acceptable invalidMisc Attributes invalidPrivilegeAttribu tes invalidProtection invalidTraceLink wrongType invalidTime
3 4 5 1 3 4
6 8
CertificateProblem CertificateProblem
invalidTime restrictionType NotSupported issueProblem timeProblem
CertificateError
CertificateProblem
certificateExpire
12
CertificateError
CertificateProblem
4
CertificateError
CertificateProblem
CertificateError CertificateError CertificateError
CertificateProblem CertificateProblem CertificateProblem
CertificateError
CertificateProblem
CertificateError CertificateError ConstructTypes NotSupported InitiatorKDS Unknown
CertificateProblem CertificateProblem NULL
invalidCheck ValueType invalidCheck ValueTarget invalidSeal invalidSignature invalidSymmetricAlgId invalidAsymmetricAlgId invalidHash AlgId certificate Revoked n/a
NULL
n/a
n/a
InitiatorUnknown Insufficient Authorisation
NULL NULL
n/a n/a
n/a n/a
1 2 2
5 7 9 6
2 3
5 6 7 8 9 10 11 n/a
- 62 -
GSS_API parameter Minor Status code GSS_ECMA_S_SG_ALG_PROBLEM_ IN_ DIALOGUE_KEY_BLOCK
InvalidDialogueKeyBlock
ECMA-219 Error Parameter useAlgorithm NotSupported useHashAlg NotSupported derivationAlgorithmNotS upported noBasicKey
InvalidKeyBlock
kdScheme NotSupported
InvalidKeyBlock
invalidTargetPart
KDScheme NotSupported KiType NotSupported InvalidKeyBlock
NULL NULL userCertificate Error
Operation NotSupported Security Association Failure UnacceptableAttributeRequirements UnacceptableAttributeRequirements UnacceptableAttributeRequirements Unacceptable-RestrictionRequirements UnacceptableTicketRequirements UnacceptableTicketRequirements UnacceptableTicketRequirements UnacceptableTicketRequirements Unspecified
ABSTRACT-ERROR InvalidDialogueKeyBlock InvalidDialogueKeyBlock InvalidDialogueKeyBlock
GSS_ECMA_S_SG_ NO_BASIC_KEY_FOR_ DIALOGUE_KEY_BLOCK GSS_ECMA_S_SG_ KEY_DISTRIB_PROB
GSS_ECMA_S_SG_INVALID_USER_ CERT_ IN_KEY_BLOCK GSS_ECMA_S_SG_ OPERATION_NOT_SUPP GSS_ECMA_S_SG_ SEC_ASSOC_ID_FAILURE GSS_ECMA_S_SG_ UNACCEPTABLE_ACT_REQ
GSS_ECMA_S_SG_ UNSPECIFIED
Name n/a (ENUMERATED) n/a (ENUMERATED) n/a (ENUMERATED) n/a (ENUMERATED)
Val 1 2 3 4
1
NULL
n/a (ENUMERATED) n/a (ENUMERATED) n/a n/a n/a (ENUMERATED) n/a
NULL
n/a
n/a
unacceptable Refinement
1
unacceptable AttributeValues algId
n/a (ENUMERATED) n/a (ENUMERATED) n/a (ENUMERATED) OBJECT IDENTIFIER
unacceptable CertificateType unacceptable ProtectionType unacceptable TargetInformation unacceptable CertificateControls NULL
n/a (ENUMERATED) n/a (ENUMERATED) n/a (ENUMERATED) n/a (ENUMERATED) n/a
1
unacceptable AttributeSet
Table 8 - Relationship between minor status returns and ECMA-219 errors
2 n/a n/a 3 n/a
2 3 n/a
2 3 4 n/a
- 63 -
Annex E (Informative) Imported Types This annex contains, for completeness, the relevant ASN.1 types imported from other standards.
E.1
Types imported from [ECMA-219] The syntax below has been taken directly from [ECMA-219]. It contains the ECMA syntax elements needed to understand this Standard, and the value of the kd-schemes OBJECT IDENTIFIER. It is provided for information only. The definitive syntax is that in [ECMA-219]. Not all of the internal fields of all of the constructs are expanded here. The constructs are listed in alphabetical order. CertandECV ::=
SEQUENCE {
certificate
[0]
GeneralisedCertificate,
ecv
[1]
ECV,
encryptedBody
[0]
BIT STRING,
normalBody
[1]
SEQUENCE{
OPTIONAL}
CertificateBody ::= CHOICE{
CertificateId ::=SEQUENCE {
commonContents [0]
CommonContents,
specificContents
SpecificContents}}
[1]
issuerDomain [0]
Identifier
issuerIdentity
[1]
Identifier,
serialNumber
[2]
INTEGER}
OPTIONAL,
-- serialNumber is the same as in [ISO/IEC 9594-8] CheckValue ::= CHOICE {
signature
[0]
Signature,
seal
[1]
Seal,
unprotected
[2]
NULL}
CommonContents ::= SEQUENCE{
--
comConSyntaxVersion [0]
INTEGER { version1 (1) }
DEFAULT 1,
issuerDomain
[1]
Identifier
OPTIONAL,
issuerIdentity
[2]
Identifier,
serialNumber
[3]
INTEGER,
creationTime
[4]
UTCTime
validity
[5]
Validity,
algId
[6]
AlgorithmIdentifier,
hashAlgId
[7]
AlgorithmIdentifier
--as structured in [ISO/IEC 9594-8]
AlgorithmIdentifier is imported from [ISO/IEC 9594-8]
CValues ::= SEQUENCE OF SEQUENCE { index
[0]
INTEGER,
value
[1]
BIT STRING}
OPTIONAL,
OPTIONAL}
- 64 -
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 }
crypAlgIdentifier
[0]
AlgorithmIdentifier OPTIONAL,
cValues
[1]
ECV ::= SEQUENCE { -- AlgorithmIdentifier is imported from [ISO/IEC 9594-8] CHOICE { encryptedCvalueList [0]
BIT STRING,
individualCvalues
CValues }
[1]
} GeneralisedCertificate ::= SEQUENCE{ certificateBody
[0]
CertificateBody,
checkValue
[1]
CheckValue}
[0]
OBJECT IDENTIFIER,
Identifier ::= CHOICE { objectId directoryName
[1]
Name,
printableName
[2]
PrintableString,
-- imported from the Directory Standard
octets
[3]
OCTET STRING,
intVal
[4]
INTEGER,
bits
[5]
BIT STRING,
pairedName
[6]
SEQUENCE{ printableName
[0]
PrintableString,
uniqueName
[1]
OCTET STRING}
} KeyConstructionData ::=SEQUENCE{ constructionMethodId
[0]
OBJECT IDENTIFIER
methodParameters
[1]
MethodParameters}
KeyDerivationInfo
::= SEQUENCE {
owfId
[0]
AlgorithmIdentifier,
keySize
[1]
INTEGER }
OPTIONAL,
- 65 -
PACSpecificContents ::= SEQUENCE{ pacSyntaxVersion
[0]
INTEGER{ version1 (1)} DEFAULT 1,
pacHistory
[1]
SEQUENCE OF CertificateId
OPTIONAL,
protectionMethods
[2]
SEQUENCE OF MethodGroup
OPTIONAL,
traceLink
[3]
SEQUENCE OF SecurityAttribute OPTIONAL,
pacType
[4]
ENUMERATED{
primaryPrincipal
(1),
temperedSecPrincipal
(2),
untemperedSecPrincipal
(3)}
DEFAULT 3, privileges
[5]
SEQUENCE OF PrivilegeAttribute,
restrictions
[6]
SEQUENCE OF Restriction
miscellaneousAtts
[7]
SEQUENCE OF SecurityAttribute OPTIONAL,
timePeriods
[8]
TimePeriods
OPTIONAL,
OPTIONAL}
PrivilegeAttribute ::= SecurityAttribute PValue ::= SEQUENCE
{
pv
[0]
BIT STRING,
algorithmIdentifier
[1]
AlgorithmIdentifier
OPTIONAL }
-- AlgorithmIdentifier is Imported from [ISO/IEC 9594-8]; Default is MD5 Seal ::= SEQUENCE{
--
sealValue
[0]
BIT STRING,
symmetricAlgId
[1]
AlgorithmIdentifier
OPTIONAL,
hashAlgId
[2]
AlgorithmIdentifier
OPTIONAL,
targetName
[3]
Identifier
keyId
[4]
INTEGER
OPTIONAL, OPTIONAL}
AlgorithmIdentifier is imported from [ISO/IEC 9594-8]
SecurityAttribute ::= SEQUENCE{ attributeType
Identifier,
attributeValue
SET OF SEQUENCE{ definingAuthority
[0] Identifier
securityValue
[1] SecurityValue} }
OPTIONAL,
-- NOTE: SecurityAttribute is not tagged, for compatibility with the Directory Standard.
- 66 -
SecurityValue ::= CHOICE{ directoryName
[0]
Name,
printableName
[1]
PrintableString,
octets
[2]
OCTET STRING,
intVal
[3]
INTEGER,
bits
[4]
BIT STRING,
any
[5]
ANY}
SeedValue
-- imported from the Directory Standard
-- defined by attributeType
::= SEQUENCE {
timeStamp
[0]
UTCTime
OPTIONAL,
random
[1]
BIT STRING }
signatureValue
[0]
BIT STRING,
asymmetricAlgId
[1]
AlgorithmIdentifier
OPTIONAL,
hashAlgId
[2]
AlgorithmIdentifier
OPTIONAL,
issuerCAName
[3]
Identifier
OPTIONAL,
caCertInformation
[4]
CHOICE {
Signature ::= SEQUENCE{
caCertSerialNumber
[0]
INTEGER,
certificationPath
[1]
CertificationPath} OPTIONAL}
SpecificContents ::= CHOICE{ auc
[0]
AUCSpecificContents,
pac
[1]
PACSpecificContents,
proxyOnlyPAC
[2]
PACSpecificContents,
initiatorOnlyPAC
[3]
PACSpecificContents,
gucType
[4]
GUCSpecificContents,
otherType
[5]
SEQUENCE { typeId
otherSpecificContents
[0] OBJECT IDENTIFIER, [1] ANY} -- defined by typeId
TargetKeyBlock ::= SEQUENCE { initiatorKDSname
[0]
Identifier
OPTIONAL
kdSchemeOID
[2]
OBJECT IDENTIFIER,
targetKDSpart
[3]
ANY
OPTIONAL, -- depending on kdSchemeOID
targetPart
[4]
ANY
OPTIONAL} -- depending on kdSchemeOID
TargetName ::= Identifier TimePeriods ::= SEQUENCE OF SEQUENCE { startTime
[0]
UTCTime
OPTIONAL,
endTime
[1]
UTCTime
OPTIONAL}
- 67 -
UniqueNumber ::= SEQUENCE{ time
UTCTime,
random
INTEGER
OPTIONAL}
Validity ::=SEQUENCE {
E.2
notBefore
UTCTime,
notAfter
UTCTime} -- as in [ISO/IEC 9594-8]
Types imported from ISO Frameworks The data types listed below have been imported from the InformationFramework ([ISO/IEC 9594-2]) and AuthenticationFramework ([ISO/IEC 9594-8]). They are listed in alphabetical order. They are presented here for information only. In the event of a difference from the types identified in ([ISO/IEC 9594-2] or [ISO/IEC 9594-8], the referenced documents take precedence. AlgorithmIdentifier ::= SEQUENCE { algorithm
OBJECT IDENTIFIER,
parameter
ANY DEFINED BY algorithm OPTIONAL }
AttributeType
::= OBJECT IDENTIFIER
AttributeValue
::= ANY
AttributeValueAssertion
::= SEQUENCE {AttributeType,AttributeValue}
Certificate ::= SIGNED SEQUENCE{ version
[0]
Version DEFAULT v1,
serialNumber
[1]
CertificateSerialNumber,
signature
[2]
AlgorithmIdentifier,
issuer
[3]
Name,
validity
[4]
Validity,
subject
[5]
Name,
subjectPublicKeyInfo
[6]
SubjectPublicKeyInfo,
issuerUID
[7]
IMPLICIT UID
OPTIONAL,
subjectUID
[8]
IMPLICIT UID
OPTIONAL
}
- 68 -
CertificateList ::= SIGNED SEQUENCE
{
signature
[0]
AlgorithmIdentifier,
issuer
[1]
Name,
thisUpdate
[2]
UTCTime,
nextUpdate
[3]
UTCTime
revokedCertificates
[4]
SEQUENCE OF SEQUENCE {
OPTIONAL,
userCertificate
CertificateSerialNumber,
revocationDate
UTCTime }
OPTIONAL
} CertificatePair ::= SEQUENCE { forward [0]
Certificate OPTIONAL,
reverse [1]
Certificate OPTIONAL
} -- at least one of the pair shall be present CertificateSerialNumber
::= INTEGER
DistinguishedName
::= RDNSequence
kd-schemes OBJECT IDENTIFIER ::= {
iso(1) identified-organisation(3) icd-ecma (0012) standard (0) apa(219) 5 }
Name
::= CHOICE {
--only one for now
DistinguishedName } RDNSequence
::= SEQUENCE OF RelativeDistinguishedName
RelativeDistinguishedName
::= SET OF AttributeValueAssertion
SIGNED MACRO
::=
BEGIN TYPE NOTATION
::= type (ToBeSigned)
VALUE NOTATION ::= value (VALUE SEQUENCE{ ToBeSigned, AlgorithmIdentifier,
--of the algorithm used to generate the signature
ENCRYPTED OCTET STRING
--where the octet string is the --result of the hashing of the --value of "ToBeSigned"
} ) END
-- of SIGNED
- 69 -
SubjectPublicKeyInfo ::= SEQUENCE { algorithm
AlgorithmIdentifier,
subjectPublicKey
BIT STRING
} UID ::= BIT STRING
Printed copies can be ordered from: ECMA 114 Rue du Rhône CH-1204 Geneva Switzerland Fax: Internet:
+41 22 849.60.01 [email protected]
Files can be downloaded from our FTP site, ftp.ecma.ch, logging in as anonymous and giving your E-mail address as password. This Standard is available from library ECMA-ST as a compacted, self-expanding file in MSWord 6.0 format (file E235-DOC.EXE) as a compacted, self-expanding PostScript file (file E235-PSC.EXE) and as an Acrobat file (file ECMA235.PDF). File E235-EXP.TXT gives a short presentation of the Standard. The ECMA site can be reached also via a modem. The phone number is +41 22 735.33.29, modem settings are 8/n/1. Telnet (at ftp.ecma.ch) can also be used. Our web site, http://www.ecma.ch, gives full information on ECMA, ECMA activities, ECMA Standards and Technical Reports.
ECMA 114 Rue du Rhône CH-1204 Geneva Switzerland This Standard ECMA-235 is available free of charge in printed form and as a file. See inside cover page for instructions