Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue #860 identifier scoping documentation #941

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
96b9ef5
description updates
Rene2mt May 21, 2021
b1101e2
updated unique identified descriptions
Rene2mt Jun 25, 2021
d2304b5
updates to metadata identifiers
Rene2mt Sep 1, 2021
b1cbba6
updates to catalog identifier descriptions
Rene2mt Sep 2, 2021
d0c5eb7
metadata section updates
Rene2mt Oct 14, 2021
7dc0c86
common control metaschema updates
Rene2mt Oct 19, 2021
f081401
catalog and profile identifier description updates
Rene2mt Oct 20, 2021
bb87db1
implementation layer metaschema updates
Rene2mt Oct 27, 2021
b86418f
assessment layers updates
Rene2mt Oct 28, 2021
7da1c66
revised identifier descriptions
Rene2mt Dec 1, 2021
1e25fc6
added identifier use page
Rene2mt Dec 9, 2021
5ddce63
minor edit on identifier use page
Rene2mt Dec 9, 2021
a2d7f81
metaschema updates
Rene2mt Dec 9, 2021
156fa24
fixed component layer remark links
Rene2mt Jan 6, 2022
a4d1989
metadata section updates
Rene2mt Oct 14, 2021
1e323f4
common control metaschema updates
Rene2mt Oct 19, 2021
896436d
catalog and profile identifier description updates
Rene2mt Oct 20, 2021
9575df5
implementation layer metaschema updates
Rene2mt Oct 27, 2021
c917c38
assessment layers updates
Rene2mt Oct 28, 2021
882a560
revised identifier descriptions
Rene2mt Dec 1, 2021
d37564e
added identifier use page
Rene2mt Dec 9, 2021
ea51575
minor edit on identifier use page
Rene2mt Dec 9, 2021
bfaa855
metaschema updates
Rene2mt Dec 9, 2021
bdf5501
added links to concepts page
Rene2mt Jan 13, 2022
5588161
Update docs/content/concepts/identifier-use/_index.md
Rene2mt Jan 20, 2022
eab9863
Update docs/content/concepts/identifier-use/_index.md
Rene2mt Jan 20, 2022
8acc09c
Update docs/content/concepts/identifier-use/_index.md
Rene2mt Jan 20, 2022
1904a23
Update docs/content/concepts/identifier-use/_index.md
Rene2mt Jan 20, 2022
08225f9
Update docs/content/concepts/identifier-use/_index.md
Rene2mt Jan 20, 2022
057f681
Update docs/content/concepts/identifier-use/_index.md
Rene2mt Jan 20, 2022
7f55851
identifier use page review edits
Rene2mt Jan 20, 2022
673e910
identifier documentation updates
Rene2mt Jan 21, 2022
0973b64
fix bug on identifier use page
Rene2mt Jan 21, 2022
70b1c16
update token datatype reference
Rene2mt Jan 25, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/content/concepts/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ This section of the OSCAL website presents:

- Key [terminology](terminology/) used in OSCAL;
- An overview of the OSCAL [layers and models](layer/), to include who and what processes they apply to;
- An oververview of [identifier use](identifier-use) in OSCAL models;
aj-stein-nist marked this conversation as resolved.
Show resolved Hide resolved
- A [processing specification](processing/) for handling some types of OSCAL content;
- Illustrative [examples](examples/) of how to represent control implementation and risk management data in OSCAL XML, JSON, and YAML formats; and
- A discussion of how OSCAL [relates](relations-to-other/) to and draws inspiration from other documentary standards.
118 changes: 118 additions & 0 deletions docs/content/concepts/identifier-use/_index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
---
title: Identifier Use
description: Provides details on the scope and uniqueness of identifiers used within the OSCAL models.
suppresstopiclist: true
weight: 50
toc:
enabled: true
sidenav:
focusrenderdepth: 2
activerenderdepth: 2
inactiverenderdepth: 2
---

This page reviews important concepts to be aware of when declaring or referencing identifiers in OSCAL models, with in-depth explanations of identifier uniqueness and scope.

### **Identifier Type**
By design, OSCAL supports [*machine-oriented*](#machine-oriented) and [*human-oriented*](#human-oriented) identifiers. The OSCAL models dictate which are used for different data items.

#### Machine-Oriented

[*Machine-oriented*](#machine-oriented) identifiers provide a persistent identity for an entity within the OSCAL models, which can be used in other locations within related OSCAL models to reference the associated entity.

These identifiers are intended to be auto-generated by tools when the entity is initially created. In OSCAL, a machine-oriented identifier is implemented using a Universally Unique Identifier (UUID) as defined by [RFC 4122](https://tools.ietf.org/html/rfc4122). A UUID is represented in OSCAL using the [UUID datatype](/reference/datatypes/#uuid).
UUIDs were chosen because:
- Programming interfaces exist in most programming environments to generate a UUID
- UUIDs can be issued without a central authority
- UUIDs are represented in 128 bits, providing for a large address space with low risk of identifier collisions for randomly generated values

The opaque nature of UUIDs, which consist of a series of hexadecimal characters, makes them less than ideal for wildcard matching scenarios. Thus, their use in OSCAL is intended for identification only where an exact match is required. Where wildcard matching is needed, the other data elements associated with the entity should be evaluated for a match instead.

aj-stein-nist marked this conversation as resolved.
Show resolved Hide resolved
{{<callout>}}The opaque nature of UUIDs, which consist of a series of hexadecimal characters, makes them less than ideal for wildcard matching scenarios. Thus, their use in OSCAL is intended for identification only where an exact match is required. Where wildcard matching is needed, the other data elements associated with the entity should be evaluated for a match instead. {{</callout>}}

The [OSCAL XML Reference Index](/reference/latest/complete/xml-index/#/@uuid) and [OSCAL JSON Reference Index](/reference/latest/complete/json-index/#/uuid) provide a listing of UUIDs in the core OSCAL models. References to these identifiers typically follow a naming convention of the object type followed by “-uuid”. For example, see the XML reference index for [location-uuid](/reference/latest/complete/xml-index/#/location-uuid) (or [location-uuids](/reference/latest/complete/json-index/#/uuid) in the JSON reference index).

#### Human-Oriented

A [*human-oriented*](#human-oriented) identifier incorporates semantic that support readability and processing by humans. OSCAL implements [*human-oriented*](#human-oriented) identifiers as [token](/reference/datatypes/#token) data types, which are non-colonized names. For example, control identifiers in a catalog may use a nomenclature that is familiar to the intended audience, allowing them to quickly determine what security control is being referred to, simply by its identifier value.

The [OSCAL XML Reference Index](/reference/latest/complete/xml-index/#/@id) and [OSCAL JSON Reference Index](/reference/latest/complete/json-index/#/id) provide a comprehensive listing of the [*human-oriented*](#human-oriented) IDs in the core OSCAL models. References to these IDs are typically named according to the referenced object type (e.g., control) followed by “-id”, as seen here in the [XML Reference Index](/reference/latest/complete/xml-index/#/@control-id) (and likewise [JSON Reference Index](/reference/latest/complete/json-index/#/control-id) in the JSON reference index).

### **Uniqueness**
OSCAL identifier uniqueness is categorized as <em id="locally-unique">*locally-unique*</em> or <em id="globally-unique">*globally-unique*</em>. As implied by the category name, [*locally-unique*](#locally-unique) identifiers must be unique within the current document, whereas [*globally-unique*](#globally-unique) identifiers are guaranteed to be unique across all other identifiers. OSCAL’s [*machine-oriented*](#machine-oriented) UUID identifiers are always [*globally-unique*](#globally-unique). [*Human-oriented*](#human-oriented) identifiers must be defined and managed organizationally and are more susceptible to identifier duplication or collisions. Thus, [*human-oriented*](#human-oriented) identifiers are less likely or cannot be guaranteed to be [*globally-unique*](#globally-unique).

### **Scope**

Identifiers that are only intended for use within the same OSCAL instance are categorized as <em id="instance">*instance*</em> scope. However, since OSCAL supports composition relationships, there are many cases where identifiers in a source OSCAL instance need to be referenced from other OSCAL instances. These are considered <em id="cross-instance">*cross-instance*</em> scoped identifier references. The figure below illustrates how the core OSCAL models relationships are established through import and link mechanisms, enabling [*cross-instance*](#cross-instance) references.

![A diagram depicting the relationships between OSCAL models. The solid black arrows depict relationships implemented via the import mechanism (e.g., import, import-profile, import-component-definition, import-ssp, and import-ap), whereas the dashed red line arrows illustrate relationships established through links.](oscal-model-relationships.svg)

The following import types are supported:
- import - see [XML index](/reference/latest/complete/xml-index/#/import) or [JSON index](/reference/latest/complete/json-index/#/imports)
- import-component-definition - see [XML index](/reference/latest/complete/xml-index/#/import-component-definition) or [JSON index](/reference/latest/complete/json-index/#/import-component-definitions)
- import-profile - see [XML index](/reference/latest/complete/xml-index/#/import-profile) or [JSON index](/reference/latest/complete/json-index/#/import-profile)
- import-ssp - see [XML index](/reference/latest/complete/xml-index/#/import-ssp) or [JSON index](/reference/latest/complete/json-index/#/import-ssp)
- import-ap - see [XML index](/reference/latest/complete/xml-index/#/import-ap) or [JSON index](/reference/latest/complete/json-index/#/import-ap)

When implementing [*cross-instance*](#cross-instance) references, identifier must be referenced in the context of the containing resource. The appropriate import attribute should be used (similar to a namespacing) to deconflict identifiers with the same values in the associated OSCAL instances. This is particularly important for [*human-oriented*](#human-oriented) identifiers that may not be globally unique but still require [*cross-instance*](#cross-instance) scoping. For example, this technique allows for the same control IDs to be used and referenced in a profile and its imported catalog(s) without conflict.

The next section describes the identifier scoping per defining model.

#### **Catalog Identifiers**
Identifiers defined in a catalog may be referenced locally or from an importing profile ([see the diagram in the Scope section](#scope)). Additionally, identifiers defined in a catalog may be referenced in other upstream OSCAL instances in a hierarchical set of associated OSCAL documents (e.g., SSPs, assessment plans, assessment results, and POA&Ms). The table below provides a listing of the core OSCAL catalog model identifiers.

|**Defining Model**|**Identifier Type**|**Identifiers**|
|:------|:-------|:-----:|
|Catalog|Machine-Oriented|[XML Index](/reference/latest/catalog/xml-index/#/@uuid) &#124; [JSON Index](/reference/latest/catalog/json-index/#/uuid)|
|Catalog|Human-Oriented|[XML Index](/reference/latest/catalog/xml-index/#/@id) &#124; [JSON Index](/reference/latest/catalog/json-index/#/id)|

#### **Profile Identifiers**
Identifiers defined in a profile may be referenced locally or from an importing profile or SSP ([see the diagram in the Scope section](#scope)). Component definitions can reference these identifiers through its [control-implementation - source](/reference/latest/component-definition/xml-reference/#/component-definition/component/control-implementation/@source) reference to the profile. Other upstream OSCAL models, including assessment plans, assessment results, and POA&Ms can also reference these profile identifiers via the hierarchical set of associated OSCAL documents. The table below provides a listing of the core OSCAL profile model identifiers.

|**Defining Model**|**Identifier Type**|**Identifiers**|
|:------|:-------|:-----:|
|Profile|Machine-Oriented|[XML Index](/reference/latest/profile/xml-index/#/@uuid) &#124; [JSON Index](/reference/latest/profile/json-index/#/uuid)|
|Profile|Human-Oriented|[XML Index](/reference/latest/profile/xml-index/#/@id) &#124; [JSON Index](/reference/latest/profile/json-index/#/id)|

#### **Component Definition Identifiers**
Identifiers defined in a component definition may be referenced locally or from an importing component definition instance ([see the diagram in the Scope section](#scope)). SSPs may also reference identifiers from a component definitions through its implementation of links for a given component.Other upstream OSCAL models, including assessment plans, assessment results, and POA&Ms can also reference these component definition indirectly (e.g., via reference to an SSP component that has a a link to a component definition). The table below provides a listing of the core OSCAL component definition model identifiers.

|**Defining Model**|**Identifier Type**|**Identifiers**|
|:------|:-------|:-----:|
|Component Definition|Machine-Oriented|[XML Index](/reference/latest/component-definition/xml-index/#/@uuid) &#124; [JSON Index](/reference/latest/component-definition/json-index/#/uuid)|
|Component Definition|Human-Oriented|[XML Index](/reference/latest/component-definition/xml-index/#/@id) &#124; [JSON Index](/reference/latest/component-definition/json-index/#/id)|

#### **SSP Identifiers**
Identifiers defined in an SSP may be referenced locally or from an importing AP or POA&M ([see the diagram in the Scope section](#scope)). SSP identifiers can also be referenced from the AR through its hierarchical relationship with AP. The table below provides a listing of the core OSCAL SSP model identifiers.

|**Defining Model**|**Identifier Type**|**Identifiers**|
|:------|:-------|:-----:|
|SSP|Machine-Oriented|[XML Index](/reference/latest/system-security-plan/xml-index/#/@uuid) &#124; [JSON Index](/reference/latest/system-security-plan/json-index/#/uuid)|
|SSP|Human-Oriented|[XML Index](/reference/latest/system-security-plan/xml-index/#/@id) &#124; [JSON Index](/reference/latest/system-security-plan/json-index/#/id)|

#### **AP Identifiers**
Identifiers defined in an AP may be referenced locally or from an importing AR ([see the diagram in the Scope section](#scope)). The table below provides a listing of the core OSCAL AP model identifiers.

|**Defining Model**|**Identifier Type**|**Identifiers**|
|:------|:-------|:-----:|
|AP|Machine-Oriented|[XML Index](/reference/latest/assessment-plan/xml-index/#/@uuid) &#124; [JSON Index](/reference/latest/assessment-plan/json-index/#/uuid)|
|AP|Human-Oriented|[XML Index](/reference/latest/assessment-plan/xml-index/#/@id) &#124; [JSON Index](/reference/latest/assessment-plan/json-index/#/id)|

#### **AR Identifiers**
Identifiers defined in an AR may be referenced locally ([see the diagram in the Scope section](#scope)). However, observations, risks, and findings may also be referenced implicitly in the POA&M. The table below provides a listing of the core OSCAL AR model identifiers.

|**Defining Model**|**Identifier Type**|**Identifiers**|
|:------|:-------|:-----:|
|AR|Machine-Oriented|[XML Index](/reference/latest/assessment-results/xml-index/#/@uuid) &#124; [JSON Index](/reference/latest/assessment-results/json-index/#/uuid)|
|AR|Human-Oriented|[XML Index](/reference/latest/assessment-results/xml-index/#/@id) &#124; [JSON Index](/reference/latest/assessment-results/json-index/#/id)|

#### **POA&M Identifiers**
Identifiers defined in a POA&M are only referenced locally ([see the diagram in the Scope section](#scope)). The table below provides a listing of the core OSCAL POA&M model identifiers.

|**Defining Model**|**Identifier Type**|**Identifiers**|
|:------|:-------|:-----:|
|POA&M|Machine-Oriented|[XML Index](/reference/latest/plan-of-action-and-milestones/xml-index/#/@uuid) &#124; [JSON Index](/reference/latest/plan-of-action-and-milestones/json-index/#/uuid)|
|POA&M|Human-Oriented|[XML Index](/reference/latest/plan-of-action-and-milestones/xml-index/#/@id) &#124; [JSON Index](/reference/latest/plan-of-action-and-milestones/json-index/#/id)|

### **Consistency**
Identifier (value) must be managed across revisions of the same document. In general, [OSCAL identifiers](/concepts/layer/overview/#identifier-use) have *per-subject* consistency. They should only be changed if the underlying identified subject has changed in a significant way that no longer represents the same identified subject.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading