rfc-6680

Generic Security Service Application Programming Interface (GSS-API) Naming Extensions

N. Williams, L. Johansson, S. Hartman, S. Josefsson
date2012-08 streamIETF areasec wgkitten statusPROPOSED STANDARD pages18 canonicalhttps://www.rfc-editor.org/rfc/rfc6680 doi10.17487/RFC6680 errataview
The Generic Security Service Application Programming Interface (GSS-API) provides a simple naming architecture that supports name-based authorization. This document introduces new APIs that extend the GSS-API naming model to support name attribute transfer between GSS-API peers.

Extracted elements (24)

design-rationale §7.6

All name attributes are treated as locally critical: the mechanism(s) must understand them. This is required because name attributes necessarily have semantics the mechanism must act upon (including transporting application-specific attributes to peers), even though there is no protocol provision guaranteeing that remote peers understand any given attribute.

security

design-rationale §5

Attributes that have different naming contexts (trust model, encoding, credential issuer role) MUST have different attribute names so applications can distinguish them. This means there is no single attribute name for a concept like 'email address'; multiple attribute names exist for the same basic information depending on context.

security

design-rationale §5

Local attributes are introduced to allow GSS-API implementations to consolidate policy knowledge (e.g., which certification authorities are trusted for PKINIT) and re-encode mechanism-specific attributes into a single canonical form. This trades interoperability for usability by requiring knowledge of the local implementation but reduces per-application policy logic.

security

design-rationale §4

Name attribute values are made available in canonical network encodings (rather than language- or platform-specific types) to facilitate construction of portable Access Control Lists. A separate display function (GSS_Display_name_ext) is provided for applications needing local representations.

security

interoperability-note §7.1

The C-bindings rely on the gss_buffer_set_t type and associated functions (gss_create_empty_buffer_set, gss_add_buffer_set_member, gss_release_buffer_set) from GFD.024, and on const types from RFC 5587. Only the specific sections cited (GFD.024 §2.5/§6 and RFC 5587 §3.4.6 Figure 1) are normatively required; other changes those documents specify to existing GSS-API behavior are not required.

security

normative-requirement §6 MUST

A mechanism MUST always prefix raw name attributes it passes through with a prefix that reflects the context of the attribute, in order to prevent ambiguities that could arise if a mechanism blindly passes through an attribute name it does not understand.

security

normative-requirement §7.1 MUST

Any implementation of SET OF OCTET STRING used by this specification MUST preserve order, as GSS_Get_name_attribute() and GSS_Set_name_attribute() rely on order preservation for multi-valued attributes.

security

normative-requirement §6 MUST

Attribute names MUST support multiple components. If there is more than one component, the more significant components define the semantics of the less significant components.

security

normative-requirement §7.7 MUST NOT

Deletion of negative authenticated attributes from NAME objects MUST NOT be allowed; such attempts must result in GSS_S_UNAUTHORIZED.

security

normative-requirement §7.5.1 MUST

In the C-binding of GSS_Get_name_attribute(), the 'more' parameter MUST be initialized to -1 on the first call. The authenticated and complete flags MUST NOT change between multiple calls iterating over values for the same attribute.

security

normative-requirement §7.5 SHOULD NOT

The 'complete' flag in GSS_Get_name_attribute() and GSS_Set_name_attribute() SHOULD NOT be used in federated cases where several peers may hold some of the attributes about a name, as it may be highly dangerous in that context.

security

normative-requirement §7.6 MUST

When GSS_Set_name_attribute() is called on a non-MN and succeeds even though no mechanisms understand the attribute, subsequent credential acquisition (GSS_Acquire_cred/GSS_Add_cred) MUST fail for mechanisms that do not understand the set attributes.

security

protocol-element §6

Attribute names are represented as OCTET STRING values. If an attribute name contains a space (ASCII 0x20), the first space separates the primary (most significant) component ('prefix') from the remainder. If the primary component contains ':' (ASCII 0x3a), it is treated as a URI; otherwise, the attribute is a local attribute.

security

protocol-element §7.3

GSS_Display_name_ext() displays a given GSS name using a caller-specified name type OID. The function may fail (GSS_S_UNAVAILABLE) if the name cannot be displayed using that syntax, since mappings between name syntaxes may be inexact or lossy.

security

protocol-element §7.8

GSS_Export_name_composite() exports a token that preserves name attribute information (including authenticated/complete flags) and can be re-imported with GSS_Import_name() using GSS_C_NT_COMPOSITE_EXPORT (OID 1.3.6.1.5.6.6). This is intended for inter-process communication.

security

protocol-element §7.5

GSS_Get_name_attribute() returns the values (both network encoding and display form) of a named attribute on a GSS name object, along with 'authenticated' (boolean: sourced from trusted peer credential) and 'complete' (boolean: represents the full set of values) flags.

security

protocol-element §7.4

GSS_Inquire_name() returns the set of attribute names associated with a GSS name object, and indicates whether the name is a Mechanism Name (MN) and, if so, which mechanism it belongs to. The attrs output is a SET OF OCTET STRING (gss_buffer_set_t in C).

security

protocol-element §7.6

GSS_Set_name_attribute() sets one or more values for a named attribute on a GSS name object. In the C-binding, one call per value is required; to replace all values, GSS_Delete_name_attribute() must be called first.

security

registry §8

IANA registered OID value 6 ('gss-composite-export', absolute OID 1.3.6.1.5.6.6) in 'SMI Security for Name System Designators Codes (nametypes)' for the GSS_C_NT_COMPOSITE_EXPORT name type defined by this document.

registry, security

registry §8

This document creates a namespace of GSS-API name attributes identified by URIs. No single allocation authority is required. Future deployment experience may indicate the need for an IANA registry of URNs for IETF-defined attribute names, but no registry is established here.

registry, security

security-consideration §9 MUST NOT

Asserted (non-authenticated) attributes MUST NOT be used for security-sensitive purposes such as authorization decisions, because asserted attributes may be controlled directly by the peer. Only authenticated attributes — those with a secure association to a trusted credential source — are appropriate for such uses.

security

security-consideration §9

'Authenticated' means only that a trusted third party (not the peer itself) asserted the attribute; it does not imply any semantic claim about the attribute's accuracy is true. Additional semantics are always the result of applying local policy. For example, a 'mail' attribute may be authenticated via signed SAML yet still be user-modifiable in some deployments.

security

security-consideration §9

When the underlying security mechanism does not provide a permanent unique identity (e.g., anonymous Kerberos), GSS-API naming extensions may be used to supply a permanent unique identity attribute — globally unique, namespace-unique, or a 'directed' identifier unique per acceptor identity — using constructs such as SAML persistent NameID.

security, privacy

wire-format §7.8 MUST

All tokens produced by GSS_Export_name_composite() MUST start with a two-octet token ID of hex 04 02 in network byte order. The remainder of the token format is implementation-defined (for IPC use only).

security