rfc9393.original | rfc9393.txt | |||
---|---|---|---|---|
SACM Working Group H. Birkholz | Internet Engineering Task Force (IETF) H. Birkholz | |||
Internet-Draft Fraunhofer SIT | Request for Comments: 9393 Fraunhofer SIT | |||
Intended status: Standards Track J. Fitzgerald-McKay | Category: Standards Track J. Fitzgerald-McKay | |||
Expires: 20 January 2023 National Security Agency | ISSN: 2070-1721 National Security Agency | |||
C. Schmidt | C. Schmidt | |||
The MITRE Corporation | The MITRE Corporation | |||
D. Waltermire | D. Waltermire | |||
NIST | NIST | |||
19 July 2022 | June 2023 | |||
Concise Software Identification Tags | Concise Software Identification Tags | |||
draft-ietf-sacm-coswid-22 | ||||
Abstract | Abstract | |||
ISO/IEC 19770-2:2015 Software Identification (SWID) tags provide an | ISO/IEC 19770-2:2015 Software Identification (SWID) tags provide an | |||
extensible XML-based structure to identify and describe individual | extensible XML-based structure to identify and describe individual | |||
software components, patches, and installation bundles. SWID tag | software components, patches, and installation bundles. SWID tag | |||
representations can be too large for devices with network and storage | representations can be too large for devices with network and storage | |||
constraints. This document defines a concise representation of SWID | constraints. This document defines a concise representation of SWID | |||
tags: Concise SWID (CoSWID) tags. CoSWID supports a similar set of | tags: Concise SWID (CoSWID) tags. CoSWID supports a set of semantics | |||
semantics and features as SWID tags, as well as new semantics that | and features that are similar to those for SWID tags, as well as new | |||
allow CoSWIDs to describe additional types of information, all in a | semantics that allow CoSWIDs to describe additional types of | |||
more memory efficient format. | information, all in a more memory-efficient format. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on 20 January 2023. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9393. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2022 IETF Trust and the persons identified as the | Copyright (c) 2023 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
1.1. The SWID and CoSWID Tag Lifecycle . . . . . . . . . . . . 4 | 1.1. The SWID and CoSWID Tag Lifecycle | |||
1.2. Concise SWID Format . . . . . . . . . . . . . . . . . . . 8 | 1.2. Concise SWID Format | |||
1.3. Requirements Notation . . . . . . . . . . . . . . . . . . 8 | 1.3. Requirements Notation | |||
2. Concise SWID Data Definition . . . . . . . . . . . . . . . . 8 | 2. Concise SWID Data Definition | |||
2.1. Character Encoding . . . . . . . . . . . . . . . . . . . 10 | 2.1. Character Encoding | |||
2.2. Concise SWID Extensions . . . . . . . . . . . . . . . . . 10 | 2.2. Concise SWID Extensions | |||
2.3. The concise-swid-tag Map . . . . . . . . . . . . . . . . 13 | 2.3. The concise-swid-tag Map | |||
2.4. concise-swid-tag Co-Constraints . . . . . . . . . . . . . 17 | 2.4. concise-swid-tag Co-constraints | |||
2.5. The global-attributes Group . . . . . . . . . . . . . . . 18 | 2.5. The global-attributes Group | |||
2.6. The entity-entry Map . . . . . . . . . . . . . . . . . . 19 | 2.6. The entity-entry Map | |||
2.7. The link-entry Map . . . . . . . . . . . . . . . . . . . 20 | 2.7. The link-entry Map | |||
2.8. The software-meta-entry Map . . . . . . . . . . . . . . . 25 | 2.8. The software-meta-entry Map | |||
2.9. The Resource Collection Definition . . . . . . . . . . . 28 | 2.9. The Resource Collection Definition | |||
2.9.1. The hash-entry Array . . . . . . . . . . . . . . . . 28 | 2.9.1. The hash-entry Array | |||
2.9.2. The resource-collection Group . . . . . . . . . . . . 28 | 2.9.2. The resource-collection Group | |||
2.9.3. The payload-entry Map . . . . . . . . . . . . . . . . 32 | 2.9.3. The payload-entry Map | |||
2.9.4. The evidence-entry Map . . . . . . . . . . . . . . . 32 | 2.9.4. The evidence-entry Map | |||
2.10. Full CDDL Specification . . . . . . . . . . . . . . . . . 33 | 2.10. Full CDDL Specification | |||
3. Determining the Type of CoSWID . . . . . . . . . . . . . . . 39 | 3. Determining the Type of CoSWID | |||
4. CoSWID Indexed Label Values . . . . . . . . . . . . . . . . . 40 | 4. CoSWID Indexed Label Values | |||
4.1. Version Scheme . . . . . . . . . . . . . . . . . . . . . 40 | 4.1. Version Scheme | |||
4.2. Entity Role Values . . . . . . . . . . . . . . . . . . . 42 | 4.2. Entity Role Values | |||
4.3. Link Ownership Values . . . . . . . . . . . . . . . . . . 44 | 4.3. Link Ownership Values | |||
4.4. Link Rel Values . . . . . . . . . . . . . . . . . . . . . 44 | 4.4. Link Rel Values | |||
4.5. Link Use Values . . . . . . . . . . . . . . . . . . . . . 46 | 4.5. Link Use Values | |||
5. URI Schemes . . . . . . . . . . . . . . . . . . . . . . . . . 47 | 5. "swid" and "swidpath" Expressions | |||
5.1. "swid" URI Scheme . . . . . . . . . . . . . . . . . . . . 47 | 5.1. "swid" Expressions | |||
5.2. "swidpath" URI Scheme . . . . . . . . . . . . . . . . . . 48 | 5.2. "swidpath" Expressions | |||
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 49 | 6. IANA Considerations | |||
6.1. CoSWID Items Registry . . . . . . . . . . . . . . . . . . 49 | 6.1. CoSWID Items Registry | |||
6.2. Software ID Values Registries . . . . . . . . . . . . . . 52 | 6.2. Registries for Software ID Values | |||
6.2.1. Registration Procedures . . . . . . . . . . . . . . . 52 | 6.2.1. Registration Procedures | |||
6.2.2. Private Use of Index and Name Values . . . . . . . . 52 | 6.2.2. Private Use of Index and Name Values | |||
6.2.3. Expert Review Criteria . . . . . . . . . . . . . . . 53 | 6.2.3. Expert Review Criteria | |||
6.2.4. Software ID Version Scheme Values Registry . . . . . 53 | 6.2.4. Software ID Version Scheme Values Registry | |||
6.2.5. Software ID Entity Role Values Registry . . . . . . . 55 | 6.2.5. Software ID Entity Role Values Registry | |||
6.2.6. Software ID Link Ownership Values Registry . . . . . 56 | 6.2.6. Software ID Link Ownership Values Registry | |||
6.2.7. Software ID Link Relationship Values Registry . . . . 57 | 6.2.7. Software ID Link Relationship Values Registry | |||
6.2.8. Software ID Link Use Values Registry . . . . . . . . 60 | 6.2.8. Software ID Link Use Values Registry | |||
6.3. swid+cbor Media Type Registration . . . . . . . . . . . . 61 | 6.3. swid+cbor Media Type Registration | |||
6.4. CoAP Content-Format Registration . . . . . . . . . . . . 62 | 6.4. CoAP Content-Format Registration | |||
6.5. CBOR Tag Registration . . . . . . . . . . . . . . . . . . 62 | 6.5. CBOR Tag Registration | |||
6.6. URI Scheme Registrations . . . . . . . . . . . . . . . . 62 | 6.6. URI Scheme Registrations | |||
6.6.1. URI-scheme swid . . . . . . . . . . . . . . . . . . . 63 | 6.6.1. URI Scheme "swid" | |||
6.6.2. URI-scheme swidpath . . . . . . . . . . . . . . . . . 63 | 6.6.2. URI Scheme "swidpath" | |||
6.7. CoSWID Model for use in SWIMA Registration . . . . . . . 64 | 6.7. CoSWID Model for Use in SWIMA Registration | |||
7. Signed CoSWID Tags . . . . . . . . . . . . . . . . . . . . . 64 | 7. Signed CoSWID Tags | |||
8. CBOR-Tagged CoSWID Tags . . . . . . . . . . . . . . . . . . . 67 | 8. CBOR-Tagged CoSWID Tags | |||
9. Security Considerations . . . . . . . . . . . . . . . . . . . 67 | 9. Security Considerations | |||
10. Privacy Consideration . . . . . . . . . . . . . . . . . . . . 71 | 10. Privacy Considerations | |||
11. Change Log . . . . . . . . . . . . . . . . . . . . . . . . . 72 | 11. References | |||
12. References . . . . . . . . . . . . . . . . . . . . . . . . . 77 | 11.1. Normative References | |||
12.1. Normative References . . . . . . . . . . . . . . . . . . 77 | 11.2. Informative References | |||
12.2. Informative References . . . . . . . . . . . . . . . . . 80 | Acknowledgments | |||
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 81 | Contributors | |||
Contributors . . . . . . . . . . . . . . . . . . . . . . . . . . 81 | Authors' Addresses | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 82 | ||||
1. Introduction | 1. Introduction | |||
SWID tags, as defined in ISO-19770-2:2015 [SWID], provide a | SWID tags, as defined in ISO-19770-2:2015 [SWID], provide a | |||
standardized XML-based record format that identifies and describes a | standardized XML-based record format that identifies and describes a | |||
specific release of software, a patch, or an installation bundle, | specific release of software, a patch, or an installation bundle, | |||
which are referred to as software components in this document. | which are referred to as software components in this document. | |||
Different software components, and even different releases of a | Different software components, and even different releases of a | |||
particular software component, each have a different SWID tag record | particular software component, each have a different SWID tag record | |||
associated with them. SWID tags are meant to be flexible and able to | associated with them. SWID tags are meant to be flexible and able to | |||
express a broad set of metadata about a software component. | express a broad set of metadata about a software component. | |||
SWID tags are used to support a number of processes including but not | SWID tags are used to support a number of processes, including but | |||
limited to: | not limited to: | |||
* Software Inventory Management, a part of a Software Asset | * Software Inventory Management, representing a part of a Software | |||
Management [SAM] process, which requires an accurate list of | Asset Management process [SAM], which requires an accurate list of | |||
discernible deployed software components. | discernible deployed software components. | |||
* Vulnerability Assessment, which requires a semantic link between | * Vulnerability Assessment, which requires a semantic link between | |||
standardized vulnerability descriptions and software components | standardized vulnerability descriptions and software components | |||
installed on IT-assets [X.1520]. | installed on IT assets [X.1520]. | |||
* Remote Attestation, which requires a link between reference | * Remote Attestation, which requires a link between Reference | |||
integrity measurements (RIM) and Attester-produced event logs that | Integrity Manifests (RIMs) and Attester-produced event logs that | |||
complement attestation evidence [I-D.ietf-rats-architecture]. | complement attestation evidence [RFC9334]. | |||
While there are very few required fields in SWID tags, there are many | While there are very few required fields in SWID tags, there are many | |||
optional fields that support different uses. A SWID tag consisting | optional fields that support different uses. A SWID tag consisting | |||
of only required fields might be a few hundred bytes in size; | of only required fields might be a few hundred bytes in size; | |||
however, a tag containing many of the optional fields can be many | however, a tag containing many of the optional fields can be many | |||
orders of magnitude larger. Thus, real-world instances of SWID tags | orders of magnitude larger. Thus, real-world instances of SWID tags | |||
can be fairly large, and the communication of SWID tags in usage | can be fairly large, and the communication of SWID tags in usage | |||
scenarios, such as those described earlier, can cause a large amount | scenarios, such as those described earlier, can cause a large amount | |||
of data to be transported. This can be larger than acceptable for | of data to be transported. This can be larger than acceptable for | |||
constrained devices and networks. Concise SWID (CoSWID) tags | constrained devices and networks. Concise SWID (CoSWID) tags | |||
skipping to change at page 4, line 34 ¶ | skipping to change at line 170 ¶ | |||
visible in representation sizes, which in early experiments benefited | visible in representation sizes, which in early experiments benefited | |||
from a 50 percent to 85 percent reduction in generic usage scenarios. | from a 50 percent to 85 percent reduction in generic usage scenarios. | |||
Additional size reduction is enabled with respect to the memory | Additional size reduction is enabled with respect to the memory | |||
footprint of XML parsing/validation. | footprint of XML parsing/validation. | |||
In a CoSWID, the human-readable labels of SWID data items are | In a CoSWID, the human-readable labels of SWID data items are | |||
replaced with more concise integer labels (indices). This approach | replaced with more concise integer labels (indices). This approach | |||
allows SWID and CoSWID to share a common implicit information model, | allows SWID and CoSWID to share a common implicit information model, | |||
with CoSWID providing an alternate data model [RFC3444]. While SWID | with CoSWID providing an alternate data model [RFC3444]. While SWID | |||
and CoSWID are intended to share the same implicit information model, | and CoSWID are intended to share the same implicit information model, | |||
this specification does not define this information model, or a | this specification does not define this information model or a | |||
mapping between the two data formats. While an attempt to align SWID | mapping between the two data formats. While an attempt to align SWID | |||
and CoSWID tags has been made here, future revisions of ISO/IEC | and CoSWID tags has been made here, future revisions of ISO/IEC | |||
19770-2:2015 or this specification might cause this implicit | 19770-2:2015 or this specification might cause this implicit | |||
information model to diverge, since these specifications are | information model to diverge, since these specifications are | |||
maintained by different standards groups. | maintained by different standards groups. | |||
The use of CBOR to express SWID information in CoSWID tags allows | The use of CBOR to express SWID information in CoSWID tags allows | |||
both CoSWID and SWID tags to be part of an enterprise security | both CoSWID and SWID tags to be part of an enterprise security | |||
solution for a wider range of endpoints and environments. | solution for a wider range of endpoints and environments. | |||
1.1. The SWID and CoSWID Tag Lifecycle | 1.1. The SWID and CoSWID Tag Lifecycle | |||
In addition to defining the format of a SWID tag record, ISO/IEC | In addition to defining the format of a SWID tag record, ISO/IEC | |||
19770-2:2015 defines requirements concerning the SWID tag lifecycle. | 19770-2:2015 defines requirements concerning the SWID tag lifecycle. | |||
Specifically, when a software component is installed on an endpoint, | Specifically, when a software component is installed on an endpoint, | |||
that software component's SWID tag is also installed. Likewise, when | that software component's SWID tag is also installed. Likewise, when | |||
the software component is uninstalled or replaced, the SWID tag is | the software component is uninstalled or replaced, the SWID tag is | |||
deleted or replaced, as appropriate. As a result, ISO/IEC | deleted or replaced, as appropriate. As a result, ISO/IEC | |||
19770-2:2015 describes a system wherein there is a correspondence | 19770-2:2015 describes a system wherein there is a correspondence | |||
between the set of installed software components on an endpoint, and | between the set of installed software components on an endpoint and | |||
the presence of the corresponding SWID tags for these components on | the presence of the corresponding SWID tags for these components on | |||
that endpoint. CoSWIDs share the same lifecycle requirements as a | that endpoint. CoSWIDs share the same lifecycle requirements as a | |||
SWID tag. | SWID tag. | |||
The SWID specification and supporting guidance provided in NIST | The SWID specification and supporting guidance provided in NIST | |||
Internal Report (NISTIR) 8060: Guidelines for the Creation of | Internal Report (NISTIR) 8060 ("Guidelines for the Creation of | |||
Interoperable SWID Tags [SWID-GUIDANCE] defines four types of SWID | Interoperable Software Identification (SWID) Tags") [SWID-GUIDANCE] | |||
tags: primary, patch, corpus, and supplemental. The following text | define four types of SWID tags: primary, patch, corpus, and | |||
is paraphrased from these sources. | supplemental. The following text is paraphrased from these sources. | |||
1. Primary Tag - A SWID or CoSWID tag that identifies and describes | Primary Tag: A SWID or CoSWID tag that identifies and describes an | |||
an installed software component on an endpoint. A primary tag is | installed software component on an endpoint. A primary tag is | |||
intended to be installed on an endpoint along with the | intended to be installed on an endpoint along with the | |||
corresponding software component. | corresponding software component. | |||
2. Patch Tag - A SWID or CoSWID tag that identifies and describes an | Patch Tag: A SWID or CoSWID tag that identifies and describes an | |||
installed patch that has made incremental changes to a software | installed patch that has made incremental changes to a software | |||
component installed on an endpoint. A patch tag is intended to | component installed on an endpoint. A patch tag is intended to be | |||
be installed on an endpoint along with the corresponding software | installed on an endpoint along with the corresponding software | |||
component patch. | component patch. | |||
3. Corpus Tag - A SWID or CoSWID tag that identifies and describes | Corpus Tag: A SWID or CoSWID tag that identifies and describes an | |||
an installable software component in its pre-installation state. | installable software component in its pre-installation state. A | |||
A corpus tag can be used to represent metadata about an | corpus tag can be used to represent metadata about an installation | |||
installation package or installer for a software component, a | package or installer for a software component, a software update, | |||
software update, or a patch. | or a patch. | |||
4. Supplemental Tag - A SWID or CoSWID tag that allows additional | Supplemental Tag: A SWID or CoSWID tag that allows additional | |||
information to be associated with a referenced SWID tag. This | information to be associated with a referenced SWID tag. This | |||
allows tools and users to record their own metadata about a | allows tools and users to record their own metadata about a | |||
software component without modifying CoSWID primary or patch tags | software component without modifying CoSWID primary or patch tags | |||
created by a software provider. | created by a software provider. | |||
The type of a tag is determined by specific data elements, which are | The type of a tag is determined by specific data elements, which are | |||
discussed in Section 3, which also provides normative language for | discussed in Section 3. Section 3 also provides normative language | |||
CoSWID semantics that implement this lifecycle. The following | for CoSWID semantics that implement this lifecycle. The following | |||
information helps to explain how these semantics apply to use of a | information helps to explain how these semantics apply to the use of | |||
CoSWID tag. | a CoSWID tag. | |||
Corpus, primary, and patch tags have similar functions in that | ||||
they describe the existence and/or presence of different types of | ||||
software components (e.g., software installers, software | ||||
installations, software patches), and, potentially, different | ||||
states of these software components. Supplemental tags have the | ||||
same structure as other tags, but are used to provide information | ||||
not contained in the referenced corpus, primary, and patch tags. | ||||
All four tag types come into play at various points in the | Corpus, primary, and patch tags have similar functions in that they | |||
software lifecycle and support software management processes that | describe the existence and/or presence of different types of software | |||
depend on the ability to accurately determine where each software | components (e.g., software installers, software installations, | |||
component is in its lifecycle. | software patches) and, potentially, different states of these | |||
software components. Supplemental tags have the same structure as | ||||
other tags but are used to provide information not contained in the | ||||
referenced corpus, primary, and patch tags. All four tag types come | ||||
into play at various points in the software lifecycle and support | ||||
software management processes that depend on the ability to | ||||
accurately determine where each software component is in its | ||||
lifecycle. | ||||
+------------+ | +------------+ | |||
v | | v | | |||
Software Software Software Software Software | Software Software Software Software Software | |||
Deployment -> Installation -> Patching -> Upgrading -> Removal | Deployment -> Installation -> Patching -> Upgrading -> Removal | |||
Corpus Primary Primary xPrimary xPrimary | Corpus Primary Primary xPrimary xPrimary | |||
Supplemental Supplemental Supplemental xSupplemental xSupplemental | Supplemental Supplemental Supplemental xSupplemental xSupplemental | |||
Patch xPatch | Patch xPatch | |||
Primary | Primary | |||
Supplemental | Supplemental | |||
Figure 1: Use of Tag Types in the Software Lifecycle | Figure 1: Use of Tag Types in the Software Lifecycle | |||
Figure 1 illustrates the steps in the software lifecycle and the | Figure 1 illustrates the steps in the software lifecycle and the | |||
relationships among those lifecycle events supported by the four | relationships among those lifecycle events supported by the four | |||
types of SWID and CoSWID tags. A detailed description of the four | types of SWID and CoSWID tags. A detailed description of the four | |||
tags types is provided in Section 2.3. The figure identifies the | tag types is provided in Section 2.3. The figure identifies the | |||
types of tags that are used in each lifecycle event. | types of tags that are used in each lifecycle event. | |||
There are many ways in which software tags might be managed for the | There are many ways in which software tags might be managed for the | |||
host the software is installed on. For example, software tags could | host the software is installed on. For example, software tags could | |||
be made available on the host or to an external software manager when | be made available on the host or to an external software manager when | |||
storage is limited on the host. | storage is limited on the host. | |||
In these cases the host or external software manager is responsible | In these cases, the host or external software manager is responsible | |||
for management of the tags, including deployment and removal of the | for management of the tags, including deployment and removal of the | |||
tags as indicated by the above lifecycle. Tags are deployed and | tags as indicated by the above lifecycle. Tags are deployed, and | |||
previously deployed tags that are typically removed (indicated by an | previously deployed tags are typically removed (indicated by an "x" | |||
"x" prefix) at each lifecycle stage, as follows: | prefix) at each lifecycle stage as follows: | |||
- Software Deployment. Before the software component is | Software Deployment: Before the software component is installed | |||
installed (i.e., pre-installation), and while the product is | (i.e., pre-installation), and while the product is being | |||
being deployed, a corpus tag provides information about the | deployed, a corpus tag provides information about the | |||
installation files and distribution media (e.g., CD/DVD, | installation files and distribution media (e.g., CD/DVD, | |||
distribution package). | distribution package). | |||
Corpus tags are not actually deployed on the target system but are | Corpus tags are not actually deployed on the target system but are | |||
intended to support deployment procedures and their dependencies at | intended to support deployment procedures and their dependencies at | |||
install-time, such as to verify the installation media. | install time, such as to verify the installation media. | |||
- Software Installation. A primary tag will be installed with | Software Installation: A primary tag will be installed with the | |||
the software component (or subsequently created) to uniquely | software component (or subsequently created) to uniquely | |||
identify and describe the software component. Supplemental | identify and describe the software component. Supplemental | |||
tags are created to augment primary tags with additional site- | tags are created to augment primary tags with additional site- | |||
specific or extended information. While not illustrated in the | specific or extended information. While not illustrated in the | |||
figure, patch tags can also be installed during software | figure, patch tags can also be installed during software | |||
installation to provide information about software fixes | installation to provide information about software fixes | |||
deployed along with the base software installation. | deployed along with the base software installation. | |||
- Software Patching. A new patch tag is provided, when a patch | Software Patching: When a patch is applied to the software | |||
is applied to the software component, supplying details about | component, a new patch tag is provided, supplying details about | |||
the patch and its dependencies. While not illustrated in the | the patch and its dependencies. While not illustrated in the | |||
figure, a corpus tag can also provide information about the | figure, a corpus tag can also provide information about the | |||
patch installer and patching dependencies that need to be | patch installer and patching dependencies that need to be | |||
installed before the patch. | installed before the patch. | |||
- Software Upgrading. As a software component is upgraded to a | Software Upgrading: As a software component is upgraded to a new | |||
new version, new primary and supplemental tags replace existing | version, new primary and supplemental tags replace existing | |||
tags, enabling timely and accurate tracking of updates to | tags, enabling timely and accurate tracking of updates to | |||
software inventory. While not illustrated in the figure, a | software inventory. While not illustrated in the figure, a | |||
corpus tag can also provide information about the upgrade | corpus tag can also provide information about the upgrade | |||
installer and dependencies that need to be installed before the | installer and dependencies that need to be installed before the | |||
upgrade. | upgrade. | |||
Note: In the context of software tagging software patching and | | Note: In the context of software tagging, software | |||
updating differ in an important way. When installing a patch, a set | | patching and updating differ in an important way. When | |||
of file modifications are made to pre-installed software which do not | | installing a patch, a set of file modifications are made | |||
alter the version number or the descriptive metadata of an installed | | to pre-installed software; these modifications do not | |||
software component. An update can also make a set of file | | alter the version number or the descriptive metadata of | |||
modifications, but the version number or the descriptive metadata of | | an installed software component. An update can also make | |||
an installed software component are changed. | | a set of file modifications; in that case, the version | |||
| number or the descriptive metadata of an installed | ||||
| software component is changed. | ||||
- Software Removal. Upon removal of the software component, | Software Removal: Upon removal of the software component, | |||
relevant SWID tags are removed. This removal event can trigger | relevant SWID tags are removed. This removal event can trigger | |||
timely updates to software inventory reflecting the removal of | timely updates to software inventory reflecting the removal of | |||
the product and any associated patch or supplemental tags. | the product and any associated patch or supplemental tags. | |||
As illustrated in the figure, supplemental tags can be associated | As illustrated in the figure, supplemental tags can be associated | |||
with any corpus, primary, or patch tag to provide additional metadata | with any corpus, primary, or patch tag to provide additional metadata | |||
about an installer, installed software, or installed patch | about an installer, installed software, or installed patch, | |||
respectively. | respectively. | |||
Understanding the use of CoSWIDs in the software lifecycle provides a | Understanding the use of CoSWIDs in the software lifecycle provides a | |||
basis for understanding the information provided in a CoSWID and the | basis for understanding the information provided in a CoSWID and the | |||
associated semantics of this information. Each of the different SWID | associated semantics of this information. Each different SWID and | |||
and CoSWID tag types provide different sets of information. For | CoSWID tag type provides different sets of information. For example, | |||
example, a "corpus tag" is used to describe a software component's | a "corpus tag" is used to describe a software component's | |||
installation image on an installation media, while a "patch tag" is | installation image on an installation medium, while a "patch tag" is | |||
meant to describe a patch that modifies some other software | meant to describe a patch that modifies some other software | |||
component. | component. | |||
1.2. Concise SWID Format | 1.2. Concise SWID Format | |||
This document defines the CoSWID tag format, which is based on CBOR. | This document defines the CoSWID tag format, which is based on CBOR. | |||
CBOR-based CoSWID tags offer a more concise representation of SWID | CBOR-based CoSWID tags offer a more concise representation of SWID | |||
information as compared to the XML-based SWID tag representation in | information as compared to the XML-based SWID tag representation in | |||
ISO-19770-2:2015. The structure of a CoSWID is described via the | ISO-19770-2:2015. The structure of a CoSWID is described via the | |||
Concise Data Definition Language (CDDL) [RFC8610]. The resulting | Concise Data Definition Language (CDDL) [RFC8610]. The resulting | |||
CoSWID data definition is aligned to the information able to be | CoSWID data definition is aligned with the information able to be | |||
expressed with the XML schema definition of ISO-19770-2:2015 [SWID]. | expressed with the XML Schema definition of ISO-19770-2:2015 [SWID]. | |||
This alignment allows both SWID and CoSWID tags to represent a common | This alignment allows both SWID and CoSWID tags to represent a common | |||
set of software component information and allows CoSWID tags to | set of software component information and allows CoSWID tags to | |||
support the same uses as a SWID tag. | support the same uses as a SWID tag. | |||
The vocabulary, i.e., the CDDL names of the types and members used in | The vocabulary (i.e., the CDDL names of the types and members used in | |||
the CoSWID CDDL specification, are mapped to more concise labels | the CoSWID CDDL specification) is mapped to more concise labels | |||
represented as small integer values (indices). The names used in the | represented as small integer values (indices). The names used in the | |||
CDDL specification and the mapping to the CBOR representation using | CDDL specification and the mapping to the CBOR representation using | |||
integer indices is based on the vocabulary of the XML attribute and | integer indices are based on the vocabulary of the XML attribute and | |||
element names defined in ISO/IEC 19770-2:2015. | element names defined in ISO/IEC 19770-2:2015. | |||
1.3. Requirements Notation | 1.3. Requirements Notation | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
2. Concise SWID Data Definition | 2. Concise SWID Data Definition | |||
The following describes the general rules and processes for encoding | The following describes the general rules and processes for encoding | |||
data using CDDL representation. Prior familiarity with CBOR and CDDL | data using CDDL representation. Prior familiarity with CBOR and CDDL | |||
concepts will be helpful in understanding this CoSWID specification. | concepts will be helpful in understanding this CoSWID specification. | |||
This section describes the conventions by which a CoSWID is | This section describes the conventions by which a CoSWID is | |||
represented in the CDDL structure. The CamelCase [CamelCase] | represented in the CDDL structure. The CamelCase notation | |||
notation used in the XML schema definition is changed to a hyphen- | [CamelCase] used in the XML Schema definition is changed to a hyphen- | |||
separated notation [KebabCase] (e.g., ResourceCollection is named | separated notation [KebabCase] (e.g., "ResourceCollection" is named | |||
resource-collection) in the CoSWID CDDL specification. This | "resource-collection") in the CoSWID CDDL specification. This | |||
deviation from the original notation used in the XML representation | deviation from the original notation used in the XML representation | |||
reduces ambiguity when referencing certain attributes in | reduces ambiguity when referencing certain attributes in | |||
corresponding textual descriptions. An attribute referred to by its | corresponding textual descriptions. An attribute referred to by its | |||
name in CamelCase notation explicitly relates to XML SWID tags; an | name in CamelCase notation explicitly relates to XML SWID tags; an | |||
attribute referred to by its name in KebabCase notation explicitly | attribute referred to by its name in KebabCase notation explicitly | |||
relates to CBOR CoSWID tags. This approach simplifies the | relates to CBOR CoSWID tags. This approach simplifies the | |||
composition of further work that reference both XML SWID and CBOR | composition of further work that will reference both XML SWID and | |||
CoSWID documents. | CBOR CoSWID documents. | |||
In most cases, mapping attribute names between SWID and CoSWID can be | In most cases, mapping attribute names between SWID and CoSWID can be | |||
done automatically by converting between CamelCase and KebabCase | done automatically by converting between CamelCase and KebabCase | |||
attribute names. However, some CoSWID CDDL attribute names show | attribute names. However, some CoSWID CDDL attribute names show | |||
greater variation relative to their corresponding SWID XML Schema | greater variation relative to their corresponding SWID XML Schema | |||
attributes. This is done when the change improves clarity in the | attributes. This is done when the change improves clarity in the | |||
CoSWID specification. For example, the "name" and "version" SWID | CoSWID specification. For example, the "name" and "version" SWID | |||
fields corresponds to the "software-name" and "software-version" | fields correspond to the "software-name" and "software-version" | |||
CoSWID fields, respectively. As such, it is not always possible to | CoSWID fields, respectively. As such, it is not always possible to | |||
mechanically translate between corresponding attribute names in the | mechanically translate between corresponding attribute names in the | |||
two formats. In such cases, a manual mapping will need to be used. | two formats. In such cases, a manual mapping will need to be used. | |||
XPath expressions [W3C.REC-xpath20-20101214] need to use SWID names, | XPath expressions [W3C.REC-xpath20-20101214] need to use SWID names; | |||
see Section 5.2. | see Section 5.2. | |||
The 57 human-readable text labels of the CDDL-based CoSWID vocabulary | The 57 human-readable text labels of the CDDL-based CoSWID vocabulary | |||
are mapped to integer indices via a block of rules at the bottom of | are mapped to integer indices via a block of rules at the bottom of | |||
the definition. This allows a more concise integer-based form to be | the definition. This allows a more concise integer-based form to be | |||
stored or transported, as compared to the less efficient text-based | stored or transported, as compared to the less efficient text-based | |||
form of the original vocabulary. | form of the original vocabulary. | |||
Through use of CDDL-based integer labels, CoSWID allows for future | Through the use of CDDL-based integer labels, CoSWID allows for | |||
expansion in subsequent revisions of this specification and through | future expansion in subsequent revisions of this specification and | |||
extensions (see Section 2.2). New constructs can be associated with | through extensions (see Section 2.2). New constructs can be | |||
a new integer index. A deprecated construct can be replaced by a new | associated with a new integer index. A deprecated construct can be | |||
construct with a new integer index. An implementation can use these | replaced by a new construct with a new integer index. An | |||
integer indexes to identify the construct to parse. The CoSWID Items | implementation can use these integer indices to identify the | |||
registry, defined in Section 6.1, is used to ensure that new | construct to parse. The "CoSWID Items" registry, defined in | |||
constructs are assigned a unique index value. This approach avoids | Section 6.1, is used to ensure that new constructs are assigned a | |||
the need to have an explicit CoSWID version. | unique index value. This approach avoids the need to have an | |||
explicit CoSWID version. | ||||
In a number of places, the value encoding admits both integer values | In a number of places, the value encoding admits both integer values | |||
and text strings. The integer values are defined in a registry | and text strings. The integer values are defined in a registry | |||
specific to the kind of value; the text values are not intended for | specific to the kind of value; the text values are not intended for | |||
interchange and exclusively meant for private use as defined in | interchange and are exclusively meant for private use as defined in | |||
Section 6.2.2. Encoders SHOULD NOT use string values based on the | Section 6.2.2. Encoders SHOULD NOT use string values based on the | |||
names registered in the registry, as these values are less concise | names registered in the registry, as these values are less concise | |||
than their index value equivalent; a decoder MUST however be prepared | than their index value equivalent; a decoder MUST, however, be | |||
to accept text strings that are not specified in this document (and | prepared to accept text strings that are not specified in this | |||
ignore the construct if that string is unknown). In the rest of the | document (and ignore the construct if a string is unknown). In the | |||
document, we call this an "integer label with text escape". | rest of this document, we call this an "integer label with text | |||
escape". | ||||
The root of the CDDL specification provided by this document is the | The root of the CDDL specification provided by this document is the | |||
rule coswid (as defined in Section 8): | rule coswid (as defined in Section 8): | |||
start = coswid | start = coswid | |||
In CBOR, an array is encoded using bytes that identify the array, and | In CBOR, an array is encoded using bytes that identify the array, and | |||
the array's length or stop point (see [RFC8949]). To make items that | the array's length or stop point (see [RFC8949]). To make items that | |||
support 1 or more values, the following CDDL notation is used. | support one or more values, the following CDDL notation is used. | |||
_name_ = (_label_ => _data_ / [ 2* _data_ ]) | _name_ = (_label_ => _data_ / [ 2* _data_ ]) | |||
The CDDL rule above allows either a single data item or an array of 2 | The CDDL rule above allows either a single data item or an array of | |||
or more data values to be provided. When a singleton data value is | two or more data values to be provided. When a singleton data value | |||
provided, the CBOR markers for the array, array length, and stop | is provided, the CBOR markers for the array, array length, and stop | |||
point are not needed, saving bytes. When two or more data values are | point are not needed, saving bytes. When two or more data values are | |||
provided, these values are encoded as an array. This modeling | provided, these values are encoded as an array. This modeling | |||
pattern is used frequently in the CoSWID CDDL specification to allow | pattern is used frequently in the CoSWID CDDL specification to allow | |||
for more efficient encoding of singleton values. | for more efficient encoding of singleton values. | |||
Usage of this construct can be simplified using | Usage of this construct can be simplified using | |||
one-or-more<T> = T / [ 2* T ] | one-or-more<T> = T / [ 2* T ] | |||
simplifying the above example to | simplifying the above example to | |||
_name_ = (_label_ => one-or-more<_data_>) | _name_ = (_label_ => one-or-more<_data_>) | |||
The following subsections describe the different parts of the CoSWID | The following subsections describe the different parts of the CoSWID | |||
model. | model. | |||
2.1. Character Encoding | 2.1. Character Encoding | |||
The CDDL "text" type is represented in CBOR as a major type 3, which | The CDDL "text" type is represented in CBOR as a major type 3, which | |||
represents "a string of Unicode characters that [are] encoded as | represents a string of Unicode characters that are encoded as UTF-8 | |||
UTF-8 [RFC3629]" (see Section 3.1 of [RFC8949]). Thus both SWID and | [RFC3629] (see Section 3.1 of [RFC8949]). Thus, both SWID and CoSWID | |||
CoSWID use UTF-8 for the encoding of characters in text strings. | use UTF-8 for the encoding of characters in text strings. | |||
To ensure that UTF-8 character strings are able to be encoded/decoded | To ensure that UTF-8 character strings are able to be encoded/decoded | |||
and exchanged interoperably, text strings in CoSWID MUST be encoded | and exchanged interoperably, text strings in CoSWID MUST be encoded | |||
consistent with the Net-Unicode definition defined in [RFC5198]. | in a way that is consistent with the Net-Unicode definition provided | |||
in [RFC5198]. | ||||
All names registered with IANA according to requirements in | All names registered with IANA according to the requirements in | |||
Section 6.2 also MUST be valid according to the XML Schema NMTOKEN | Section 6.2 also MUST be valid according to the XML Schema NMTOKEN | |||
data type (see [W3C.REC-xmlschema-2-20041028], Section 3.3.4) to | data type (see [W3C.REC-xmlschema-2-20041028], Section 3.3.4) to | |||
ensure compatibility with the SWID specification where these names | ensure compatibility with the SWID specification where these names | |||
are used. | are used. | |||
2.2. Concise SWID Extensions | 2.2. Concise SWID Extensions | |||
The CoSWID specification contains two features that are not included | The CoSWID specification contains two features that are not included | |||
in the SWID specification on which it is based. These features are: | in the SWID specification on which it is based. These features are: | |||
* The explicit definition of types for some attributes in the ISO- | * The explicit definition of types for some attributes in the ISO- | |||
19770-2:2015 XML representation that are typically represented by | 19770-2:2015 XML representation that are typically represented by | |||
the "any attribute" in the SWID model. These are covered in | the any-attribute item in the SWID model. These are covered in | |||
Section 2.5. | Section 2.5. | |||
* The inclusion of extension points in the CoSWID specification | * The inclusion of extension points in the CoSWID specification | |||
using CDDL sockets (see Section 3.9 of [RFC8610]). The use of | using CDDL sockets (see Section 3.9 of [RFC8610]). The use of | |||
CDDL sockets allow for well-formed extensions to be defined in | CDDL sockets allows for well-formed extensions to be defined in | |||
supplementary CDDL descriptions that support additional uses of | supplementary CDDL descriptions that support additional uses of | |||
CoSWID tags that go beyond the original scope of ISO-19770-2:2015 | CoSWID tags that go beyond the original scope of ISO-19770-2:2015 | |||
tags. | tags. | |||
The following CDDL sockets (extension points) are defined in this | The following CDDL sockets (extension points) are defined in this | |||
document, which allow the addition of new information structures to | document; they allow the addition of new information structures to | |||
their respective CDDL groups. | their respective CDDL groups. | |||
+=====================+=================================+=========+ | +=====================+=================================+=========+ | |||
| Map Name | CDDL Socket | Defined | | | Map Name | CDDL Socket | Defined | | |||
| | | in | | | | | in | | |||
+=====================+=================================+=========+ | +=====================+=================================+=========+ | |||
| concise-swid-tag | $$coswid-extension | Section | | | concise-swid-tag | $$coswid-extension | Section | | |||
| | | 2.3 | | | | | 2.3 | | |||
+---------------------+---------------------------------+---------+ | +---------------------+---------------------------------+---------+ | |||
| entity-entry | $$entity-extension | Section | | | entity-entry | $$entity-extension | Section | | |||
skipping to change at page 12, line 45 ¶ | skipping to change at line 534 ¶ | |||
+---------------------+---------------------------------+---------+ | +---------------------+---------------------------------+---------+ | |||
| payload-entry | $$payload-extension | Section | | | payload-entry | $$payload-extension | Section | | |||
| | | 2.9.3 | | | | | 2.9.3 | | |||
+---------------------+---------------------------------+---------+ | +---------------------+---------------------------------+---------+ | |||
| evidence-entry | $$evidence-extension | Section | | | evidence-entry | $$evidence-extension | Section | | |||
| | | 2.9.4 | | | | | 2.9.4 | | |||
+---------------------+---------------------------------+---------+ | +---------------------+---------------------------------+---------+ | |||
Table 1: CoSWID CDDL Group Extension Points | Table 1: CoSWID CDDL Group Extension Points | |||
The CoSWID Items Registry defined in Section 6.1 provides a | The "CoSWID Items" registry, defined in Section 6.1, provides a | |||
registration mechanism allowing new items, and their associated index | registration mechanism allowing new items, and their associated index | |||
values, to be added to the CoSWID model through the use of the CDDL | values, to be added to the CoSWID model through the use of the CDDL | |||
sockets described in the table above. This registration mechanism | sockets described in the table above. This registration mechanism | |||
provides for well-known index values for data items in CoSWID | provides for well-known index values for data items in CoSWID | |||
extensions, allowing these index values to be recognized by | extensions, allowing these index values to be recognized by | |||
implementations supporting a given extension. | implementations supporting a given extension. | |||
The following additional CDDL sockets are defined in this document to | The following additional CDDL sockets are defined in this document to | |||
allow for adding new values to corresponding type-choices (i.e. to | allow for adding new values to corresponding type choices (i.e., to | |||
represent enumerations) via custom CDDL specifications. | represent enumerations) via custom CDDL specifications. | |||
+==================+=================+=============+ | +==================+=================+=============+ | |||
| Enumeration Name | CDDL Socket | Defined in | | | Enumeration Name | CDDL Socket | Defined in | | |||
+==================+=================+=============+ | +==================+=================+=============+ | |||
| version-scheme | $version-scheme | Section 4.1 | | | version-scheme | $version-scheme | Section 4.1 | | |||
+------------------+-----------------+-------------+ | +------------------+-----------------+-------------+ | |||
| role | $role | Section 4.2 | | | role | $role | Section 4.2 | | |||
+------------------+-----------------+-------------+ | +------------------+-----------------+-------------+ | |||
| ownership | $ownership | Section 4.3 | | | ownership | $ownership | Section 4.3 | | |||
+------------------+-----------------+-------------+ | +------------------+-----------------+-------------+ | |||
| rel | $rel | Section 4.4 | | | rel | $rel | Section 4.4 | | |||
+------------------+-----------------+-------------+ | +------------------+-----------------+-------------+ | |||
| use | $use | Section 4.5 | | | use | $use | Section 4.5 | | |||
+------------------+-----------------+-------------+ | +------------------+-----------------+-------------+ | |||
Table 2: CoSWID CDDL Enumeration Extension Points | Table 2: CoSWID CDDL Enumeration Extension Points | |||
A number of CoSWID value registries are also defined in Section 6.2 | A number of IANA registries for CoSWID values are also defined in | |||
that allow new values to be registered with IANA for the enumerations | Section 6.2; these registries allow new values to be registered with | |||
above. This registration mechanism supports the definition of new | IANA for the enumerations above. This registration mechanism | |||
well-known index values and names for new enumeration values used by | supports the definition of new well-known index values and names for | |||
CoSWID, which can also be used by other software tagging | new enumeration values used by CoSWID, which can also be used by | |||
specifications. This registration mechanism allows new standardized | other software tagging specifications. This registration mechanism | |||
enumerated values to be shared between multiple tagging | allows new standardized enumerated values to be shared between | |||
specifications (and associated implementations) over time. | multiple tagging specifications (and associated implementations) over | |||
time. | ||||
2.3. The concise-swid-tag Map | 2.3. The concise-swid-tag Map | |||
The CDDL specification for the root concise-swid-tag map is as | The CDDL specification for the root concise-swid-tag map is as | |||
follows and this rule and its constraints MUST be followed when | follows. This rule and its constraints MUST be followed when | |||
creating or validating a CoSWID tag: | creating or validating a CoSWID tag: | |||
concise-swid-tag = { | concise-swid-tag = { | |||
tag-id => text / bstr .size 16, | tag-id => text / bstr .size 16, | |||
tag-version => integer, | tag-version => integer, | |||
? corpus => bool, | ? corpus => bool, | |||
? patch => bool, | ? patch => bool, | |||
? supplemental => bool, | ? supplemental => bool, | |||
software-name => text, | software-name => text, | |||
? software-version => text, | ? software-version => text, | |||
skipping to change at page 15, line 4 ¶ | skipping to change at line 625 ¶ | |||
$version-scheme /= multipartnumeric-suffix | $version-scheme /= multipartnumeric-suffix | |||
$version-scheme /= alphanumeric | $version-scheme /= alphanumeric | |||
$version-scheme /= decimal | $version-scheme /= decimal | |||
$version-scheme /= semver | $version-scheme /= semver | |||
$version-scheme /= int / text | $version-scheme /= int / text | |||
multipartnumeric = 1 | multipartnumeric = 1 | |||
multipartnumeric-suffix = 2 | multipartnumeric-suffix = 2 | |||
alphanumeric = 3 | alphanumeric = 3 | |||
decimal = 4 | decimal = 4 | |||
semver = 16384 | semver = 16384 | |||
The following describes each member of the concise-swid-tag root map. | ||||
* global-attributes: A list of items including an optional language | The following list describes each member of the concise-swid-tag root | |||
map. | ||||
global-attributes: A list of items, including an optional language | ||||
definition to support the processing of text-string values and an | definition to support the processing of text-string values and an | |||
unbounded set of any-attribute items. Described in Section 2.5. | unbounded set of any-attribute items. Described in Section 2.5. | |||
* tag-id (index 0): A 16-byte binary string, or a textual | tag-id (index 0): A 16-byte binary string, or a textual identifier, | |||
identifier, uniquely referencing a software component. The tag | uniquely referencing a software component. The tag identifier | |||
identifier MUST be globally unique. Failure to ensure global | MUST be globally unique. Failure to ensure global uniqueness can | |||
uniqueness can create ambiguity in tag use since the tag-id serves | create ambiguity in tag use, since the tag-id serves as the global | |||
as the global key for matching and lookups. If represented as a | key for matching and lookups. If represented as a 16-byte binary | |||
16-byte binary string, the identifier MUST be a valid universally | string, the identifier MUST be a valid Universally Unique | |||
unique identifier as defined by [RFC4122]. There are no strict | Identifier (UUID) as defined by [RFC4122]. There are no strict | |||
guidelines on how the identifier is structured, but examples | guidelines on how the identifier is structured, but examples | |||
include a 16-byte GUID (e.g., class 4 UUID) [RFC4122], or a DNS | include a 16-byte Globally Unique Identifier (GUID) (e.g., class 4 | |||
domain name followed by a "/" and a text string, where the domain | UUID) [RFC4122], or a DNS domain name followed by a "/" and a text | |||
name serves to ensure uniqueness across organizations. A textual | string, where the domain name serves to ensure uniqueness across | |||
tag-id MUST NOT contain a sequence of two underscores ("__", see | organizations. A textual tag-id value MUST NOT contain a sequence | |||
Section 6.7). | of two underscores ("__"). This is because a sequence of two | |||
underscores is used to separate the TAG_CREATOR_REGID value and | ||||
UNIQUE_ID value in a Software Identifier and a sequence of two | ||||
underscores in a tag-id value could create ambiguity when parsing | ||||
this identifier. See Section 6.7. | ||||
* tag-version (index 12): An integer value that indicate the | software-name (index 1): A textual item that provides the software | |||
specific release revision of the tag. Typically, the initial | component's name. This name is likely the same name that would | |||
value of this field is set to 0 and the value is increased for | appear in a package management tool. This item maps to | |||
subsequent tags produced for the same software component release. | '/SoftwareIdentity/@name' in [SWID]. | |||
This value allows a CoSWID tag producer to correct an incorrect | ||||
tag previously released without indicating a change to the | ||||
underlying software component the tag represents. For example, | ||||
the tag version could be changed to add new metadata, to correct a | ||||
broken link, to add a missing payload entry, etc. When producing | ||||
a revised tag, the new tag-version value MUST be greater than the | ||||
old tag-version value. | ||||
* corpus (index 8): A boolean value that indicates if the tag | entity (index 2): Provides information about one or more | |||
organizations responsible for producing the CoSWID tag, and | ||||
producing or releasing the software component referenced by this | ||||
CoSWID tag. Described in Section 2.6. | ||||
evidence (index 3): Can be used to record the results of a software | ||||
discovery process used to identify untagged software on an | ||||
endpoint or to represent indicators for why software is believed | ||||
to be installed on the endpoint. In either case, a CoSWID tag can | ||||
be created by the tool performing an analysis of the software | ||||
components installed on the endpoint. This item is mutually | ||||
exclusive to payload, as evidence is always generated on the | ||||
target device ad hoc. Described in Section 2.9.4. | ||||
link (index 4): Provides a means to establish relationship arcs | ||||
between the tag and another item. A given link can be used to | ||||
establish the relationship between tags or to reference another | ||||
resource that is related to the CoSWID tag, e.g., vulnerability | ||||
database association, Resource-Oriented Lightweight Information | ||||
Exchange (ROLIE) Feed [RFC8322], Manufacturer Usage Description | ||||
(MUD) resource [RFC8520], software download location, etc.). This | ||||
is modeled after the HTML "link" element. Described in | ||||
Section 2.7. | ||||
software-meta (index 5): An open-ended map of key/value data pairs. | ||||
A number of predefined keys can be used within this item providing | ||||
for common usage and semantics across the industry. The use of | ||||
this map allows any additional attribute to be included in the | ||||
tag. It is expected that industry groups will use a common set of | ||||
attribute names to allow for interoperability within their | ||||
communities. Described in Section 2.8. This item maps to | ||||
'/SoftwareIdentity/Meta' in [SWID]. | ||||
payload (index 6): Represents a collection of software artifacts | ||||
(described by child items) that compose the target software. For | ||||
example, these artifacts could be the files included with an | ||||
installer for a corpus tag or installed on an endpoint when the | ||||
software component is installed for a primary or patch tag. The | ||||
artifacts listed in a payload may be a superset of the software | ||||
artifacts that are actually installed. Based on user selections | ||||
at install time, an installation might not include every artifact | ||||
that could be created or executed on the endpoint when the | ||||
software component is installed or run. This item is mutually | ||||
exclusive to evidence, as payload can only be provided by an | ||||
external entity. Described in Section 2.9.3. | ||||
corpus (index 8): A boolean value that indicates if the tag | ||||
identifies and describes an installable software component in its | identifies and describes an installable software component in its | |||
pre-installation state. Installable software includes an | pre-installation state. Installable software includes an | |||
installation package or installer for a software component, a | installation package or installer for a software component, a | |||
software update, or a patch. If the CoSWID tag represents | software update, or a patch. If the CoSWID tag represents | |||
installable software, the corpus item MUST be set to "true". If | installable software, the corpus item MUST be set to "true". If | |||
not provided, the default value MUST be considered "false". | not provided, the default value MUST be considered "false". | |||
* patch (index 9): A boolean value that indicates if the tag | patch (index 9): A boolean value that indicates if the tag | |||
identifies and describes an installed patch that has made | identifies and describes an installed patch that has made | |||
incremental changes to a software component installed on an | incremental changes to a software component installed on an | |||
endpoint. If a CoSWID tag is for a patch, the patch item MUST be | endpoint. If a CoSWID tag is for a patch, the patch item MUST be | |||
set to "true". If not provided, the default value MUST be | set to "true". If not provided, the default value MUST be | |||
considered "false". A patch item's value MUST NOT be set to | considered "false". A patch item's value MUST NOT be set to | |||
"true" if the installation of the associated software package | "true" if the installation of the associated software package | |||
changes the version of a software component. | changes the version of a software component. | |||
* supplemental (index 11): A boolean value that indicates if the tag | media (index 10): A text value that provides a hint to the tag | |||
consumer to understand what target platform this tag applies to. | ||||
This item MUST be formatted as a query as defined by the W3C | ||||
"Media Queries Level 3" Recommendation (see | ||||
[W3C.REC-mediaqueries-3-20220405]). Support for media queries is | ||||
included here for interoperability with [SWID], which does not | ||||
provide any further requirements for media query use. Thus, this | ||||
specification does not clarify how a media query is to be used for | ||||
a CoSWID. | ||||
supplemental (index 11): A boolean value that indicates if the tag | ||||
is providing additional information to be associated with another | is providing additional information to be associated with another | |||
referenced SWID or CoSWID tag. This allows tools and users to | referenced SWID or CoSWID tag. This allows tools and users to | |||
record their own metadata about a software component without | record their own metadata about a software component without | |||
modifying SWID primary or patch tags created by a software | modifying SWID primary or patch tags created by a software | |||
provider. If a CoSWID tag is a supplemental tag, the supplemental | provider. If a CoSWID tag is a supplemental tag, the supplemental | |||
item MUST be set to "true". If not provided, the default value | item MUST be set to "true". If not provided, the default value | |||
MUST be considered "false". | MUST be considered "false". | |||
* software-name (index 1): This textual item provides the software | tag-version (index 12): An integer value that indicates the specific | |||
component's name. This name is likely the same name that would | release revision of the tag. Typically, the initial value of this | |||
appear in a package management tool. This item maps to | field is set to 0 and the value is increased for subsequent tags | |||
'/SoftwareIdentity/@name' in [SWID]. | produced for the same software component release. This value | |||
allows a CoSWID tag producer to correct an incorrect tag | ||||
previously released without indicating a change to the underlying | ||||
software component the tag represents. For example, the tag- | ||||
version could be changed to add new metadata, to correct a broken | ||||
link, to add a missing payload entry, etc. When producing a | ||||
revised tag, the new tag-version value MUST be greater than the | ||||
old tag-version value. | ||||
* software-version (index 13): A textual value representing the | software-version (index 13): A textual value representing the | |||
specific release or development version of the software component. | specific release or development version of the software component. | |||
This item maps to '/SoftwareIdentity/@version' in [SWID]. | This item maps to '/SoftwareIdentity/@version' in [SWID]. | |||
* version-scheme (index 14): An integer or textual value | version-scheme (index 14): An integer or textual value representing | |||
representing the versioning scheme used for the software-version | the versioning scheme used for the software-version item, as an | |||
item, as an integer label with text escape (Section 2, for the | integer label with text escape. For the "Version Scheme" values, | |||
"Version Scheme" registry Section 4.1). If an integer value is | see Section 4.1. If an integer value is used, it MUST be an index | |||
used it MUST be an index value in the range -256 to 65535. | value in the range -256 to 65535. Integer values in the range | |||
Integer values in the range -256 to -1 are reserved for testing | -256 to -1 are reserved for testing and use in closed environments | |||
and use in closed environments (see Section 6.2.2). Integer | (see Section 6.2.2). Integer values in the range 0 to 65535 | |||
values in the range 0 to 65535 correspond to registered entries in | correspond to registered entries in the IANA "Software ID Version | |||
the IANA "Software ID Version Scheme Values" registry (see | Scheme Values" registry (see Section 6.2.4). | |||
Section 6.2.4). | ||||
* media (index 10): This text value is a hint to the tag consumer to | ||||
understand what target platform this tag applies to. This item | ||||
MUST be formatted as a query as defined by the W3C Media Queries | ||||
Recommendation (see [W3C.REC-css3-mediaqueries-20120619]). | ||||
Support for media queries are included here for interoperability | ||||
with [SWID], which does not provide any further requirements for | ||||
media query use. Thus, this specification does not clarify how a | ||||
media query is to be used for a CoSWID. | ||||
* software-meta (index 5): An open-ended map of key/value data | ||||
pairs. A number of predefined keys can be used within this item | ||||
providing for common usage and semantics across the industry. Use | ||||
of this map allows any additional attribute to be included in the | ||||
tag. It is expected that industry groups will use a common set of | ||||
attribute names to allow for interoperability within their | ||||
communities. Described in Section 2.8. This item maps to | ||||
'/SoftwareIdentity/Meta' in [SWID]. | ||||
* entity (index 2): Provides information about one or more | ||||
organizations responsible for producing the CoSWID tag, and | ||||
producing or releasing the software component referenced by this | ||||
CoSWID tag. Described in Section 2.6. | ||||
* link (index 4): Provides a means to establish relationship arcs | ||||
between the tag and another items. A given link can be used to | ||||
establish the relationship between tags or to reference another | ||||
resource that is related to the CoSWID tag, e.g., vulnerability | ||||
database association, ROLIE feed [RFC8322], MUD resource | ||||
[RFC8520], software download location, etc). This is modeled | ||||
after the HTML "link" element. Described in Section 2.7. | ||||
* payload (index 6): This item represents a collection of software | ||||
artifacts (described by child items) that compose the target | ||||
software. For example, these artifacts could be the files | ||||
included with an installer for a corpus tag or installed on an | ||||
endpoint when the software component is installed for a primary or | ||||
patch tag. The artifacts listed in a payload may be a superset of | ||||
the software artifacts that are actually installed. Based on user | ||||
selections at install time, an installation might not include | ||||
every artifact that could be created or executed on the endpoint | ||||
when the software component is installed or run. This item is | ||||
mutually exclusive to evidence, as payload can only be provided by | ||||
an external entity. Described in Section 2.9.3. | ||||
* evidence (index 3): This item can be used to record the results of | ||||
a software discovery process used to identify untagged software on | ||||
an endpoint or to represent indicators for why software is | ||||
believed to be installed on the endpoint. In either case, a | ||||
CoSWID tag can be created by the tool performing an analysis of | ||||
the software components installed on the endpoint. This item is | ||||
mutually exclusive to payload, as evidence is always generated on | ||||
the target device ad-hoc. Described in Section 2.9.4. | ||||
* $$coswid-extension: This CDDL socket is used to add new | $$coswid-extension: A CDDL socket that is used to add new | |||
information structures to the concise-swid-tag root map. See | information structures to the concise-swid-tag root map. See | |||
Section 2.2. | Section 2.2. | |||
2.4. concise-swid-tag Co-Constraints | 2.4. concise-swid-tag Co-constraints | |||
The following co-constraints apply to the information provided in the | The following co-constraints apply to the information provided in the | |||
concise-swid-tag group. | concise-swid-tag group. | |||
* The patch and supplemental items MUST NOT both be set to "true". | * The patch and supplemental items MUST NOT both be set to "true". | |||
* If the patch item is set to "true", the tag MUST contain at least | * If the patch item is set to "true", the tag MUST contain at least | |||
one link item (see Section 2.7) with both the rel item value of | one link item (see Section 2.7) with both the rel item value of | |||
"patches" and an href item specifying an association with the | "patches" and an href item specifying an association with the | |||
software that was patched. Without at least one link item the | software that was patched. Without at least one link item, the | |||
target of the patch cannot be identified and the patch tag cannot | target of the patch cannot be identified and the patch tag cannot | |||
be applied without external context. | be applied without external context. | |||
* If all of the corpus, patch, and supplemental items are "false", | * If all of the corpus, patch, and supplemental items are "false" or | |||
or if the corpus item is set to "true", then a software-version | if the corpus item is set to "true", then a software-version item | |||
item MUST be included with a value set to the version of the | MUST be included with a value set to the version of the software | |||
software component. This ensures that primary and corpus tags | component. | |||
have an identifiable software version. | ||||
2.5. The global-attributes Group | 2.5. The global-attributes Group | |||
The global-attributes group provides a list of items, including an | The global-attributes group provides a list of items, including an | |||
optional language definition to support the processing of text-string | optional language definition to support the processing of text-string | |||
values, and an unbounded set of any-attribute items allowing for | values, and an unbounded set of any-attribute items allowing for | |||
additional items to be provided as a general point of extension in | additional items to be provided as a general point of extension in | |||
the model. | the model. | |||
The CDDL for the global-attributes follows: | The CDDL for the global-attributes group follows: | |||
global-attributes = ( | global-attributes = ( | |||
? lang => text, | ? lang => text, | |||
* any-attribute, | * any-attribute, | |||
) | ) | |||
any-attribute = ( | any-attribute = ( | |||
label => one-or-more<text> / one-or-more<int> | label => one-or-more<text> / one-or-more<int> | |||
) | ) | |||
label = text / int | label = text / int | |||
The following describes each child item of this group. | The following list describes each child item of this group. | |||
* lang (index 15): A textual language tag that conforms with IANA | lang (index 15): A textual language tag that conforms with the IANA | |||
"Language Subtag Registry" [RFC5646]. The context of the | "Language Subtag Registry" [RFC5646]. The context of the | |||
specified language applies to all sibling and descendant textual | specified language applies to all sibling and descendant textual | |||
values, unless a descendant object has defined a different | values, unless a descendant object has defined a different | |||
language tag. Thus, a new context is established when a | language tag. Thus, a new context is established when a | |||
descendant object redefines a new language tag. All textual | descendant object redefines a new language tag. All textual | |||
values within a given context MUST be considered expressed in the | values within a given context MUST be considered expressed in the | |||
specified language. | specified language. | |||
* any-attribute: This sub-group provides a means to include | any-attribute: A sub-group that provides a means to include | |||
arbitrary information via label/index ("key") value pairs. Labels | arbitrary information via label/index ("key") value pairs. Labels | |||
can be either a single integer or text string. Values can be a | can be either a single integer or text string. Values can be a | |||
single integer, a text string, or an array of integers or text | single integer, a text string, or an array of integers or text | |||
strings. | strings. | |||
2.6. The entity-entry Map | 2.6. The entity-entry Map | |||
The CDDL for the entity-entry map follows: | The CDDL for the entity-entry map follows: | |||
entity-entry = { | entity-entry = { | |||
skipping to change at page 19, line 43 ¶ | skipping to change at line 857 ¶ | |||
$role /= licensor | $role /= licensor | |||
$role /= maintainer | $role /= maintainer | |||
$role /= int / text | $role /= int / text | |||
tag-creator=1 | tag-creator=1 | |||
software-creator=2 | software-creator=2 | |||
aggregator=3 | aggregator=3 | |||
distributor=4 | distributor=4 | |||
licensor=5 | licensor=5 | |||
maintainer=6 | maintainer=6 | |||
The following describes each child item of this group. | The following list describes each child item of this group. | |||
* global-attributes: The global-attributes group described in | global-attributes: The global-attributes group as described in | |||
Section 2.5. | Section 2.5. | |||
* entity-name (index 31): The textual name of the organizational | entity-name (index 31): The textual name of the organizational | |||
entity claiming the roles specified by the role item for the | entity claiming the roles specified by the role item for the | |||
CoSWID tag. This item maps to '/SoftwareIdentity/Entity/@name' in | CoSWID tag. This item maps to '/SoftwareIdentity/Entity/@name' in | |||
[SWID]. | [SWID]. | |||
* reg-id (index 32): The registration id value is intended to | reg-id (index 32): Registration ID. This value is intended to | |||
uniquely identify a naming authority in a given scope (e.g., | uniquely identify a naming authority in a given scope (e.g., | |||
global, organization, vendor, customer, administrative domain, | global, organization, vendor, customer, administrative domain, | |||
etc.) for the referenced entity. The value of a registration ID | etc.) for the referenced entity. The value of a registration ID | |||
MUST be a RFC 3986 URI; it is not intended to be dereferenced. | MUST be a URI as defined in [RFC3986]; it is not intended to be | |||
The scope will usually be the scope of an organization. | dereferenced. The scope will usually be the scope of an | |||
organization. | ||||
* role (index 33): An integer or textual value (integer label with | role (index 33): An integer or textual value (integer label with | |||
text escape, see Section 2) representing the relationship(s) | text escape; see Section 2) representing the relationship(s) | |||
between the entity, and this tag or the referenced software | between the entity and this tag or the referenced software | |||
component. If an integer value is used it MUST be an index value | component. If an integer value is used, it MUST be an index value | |||
in the range -256 to 255. Integer values in the range -256 to -1 | in the range -256 to 255. Integer values in the range -256 to -1 | |||
are reserved for testing and use in closed environments (see | are reserved for testing and use in closed environments (see | |||
Section 6.2.2). Integer values in the range 0 to 255 correspond | Section 6.2.2). Integer values in the range 0 to 255 correspond | |||
to registered entries in the IANA "Software ID Entity Role Values" | to registered entries in the IANA "Software ID Entity Role Values" | |||
registry (see Section 6.2.5). | registry (see Section 6.2.5). | |||
The following additional requirements exist for the use of the | The following additional requirements exist for the use of the | |||
"role" item: | role item: | |||
- An entity item MUST be provided with the role of "tag-creator" | * An entity item MUST be provided with the role of "tag-creator" | |||
for every CoSWID tag. This indicates the organization that | for every CoSWID tag. This indicates the organization that | |||
created the CoSWID tag. | created the CoSWID tag. | |||
- An entity item SHOULD be provided with the role of "software- | * An entity item SHOULD be provided with the role of "software- | |||
creator" for every CoSWID tag, if this information is known to | creator" for every CoSWID tag, if this information is known to | |||
the tag creator. This indicates the organization that created | the tag creator. This indicates the organization that created | |||
the referenced software component. | the referenced software component. | |||
* thumbprint (index 34): The value of the thumbprint item provides a | thumbprint (index 34): Value that provides a hash (i.e., the | |||
hash (i.e. the thumbprint) of the signing entity's public key | thumbprint) of the signing entity's public key certificate. This | |||
certificate. This provides an indicator of which entity signed | item provides an indicator of which entity signed the CoSWID tag, | |||
the CoSWID tag, which will typically be the tag creator. See | which will typically be the tag creator. See Section 2.9.1 for | |||
Section 2.9.1 for more details on the use of the hash-entry data | more details on the use of the hash-entry data structure. | |||
structure. | ||||
* $$entity-extension: This CDDL socket can be used to extend the | $$entity-extension: A CDDL socket that can be used to extend the | |||
entity-entry group model. See Section 2.2. | entity-entry group model. See Section 2.2. | |||
2.7. The link-entry Map | 2.7. The link-entry Map | |||
The CDDL for the link-entry map follows: | The CDDL for the link-entry map follows: | |||
link-entry = { | link-entry = { | |||
? artifact => text, | ? artifact => text, | |||
href => any-uri, | href => any-uri, | |||
? media => text, | ? media => text, | |||
skipping to change at page 21, line 44 ¶ | skipping to change at line 949 ¶ | |||
$rel /= component | $rel /= component | |||
$rel /= feature | $rel /= feature | |||
$rel /= installationmedia | $rel /= installationmedia | |||
$rel /= packageinstaller | $rel /= packageinstaller | |||
$rel /= parent | $rel /= parent | |||
$rel /= patches | $rel /= patches | |||
$rel /= requires | $rel /= requires | |||
$rel /= see-also | $rel /= see-also | |||
$rel /= supersedes | $rel /= supersedes | |||
$rel /= supplemental | $rel /= supplemental | |||
$rel /= -356..65536 / text | $rel /= -256..65536 / text | |||
ancestor=1 | ancestor=1 | |||
component=2 | component=2 | |||
feature=3 | feature=3 | |||
installationmedia=4 | installationmedia=4 | |||
packageinstaller=5 | packageinstaller=5 | |||
parent=6 | parent=6 | |||
patches=7 | patches=7 | |||
requires=8 | requires=8 | |||
see-also=9 | see-also=9 | |||
supersedes=10 | supersedes=10 | |||
supplemental=11 | supplemental=11 | |||
$use /= optional | $use /= optional | |||
$use /= required | $use /= required | |||
$use /= recommended | $use /= recommended | |||
$use /= int / text | $use /= int / text | |||
optional=1 | optional=1 | |||
required=2 | required=2 | |||
recommended=3 | recommended=3 | |||
The following describes each member of this map. | The following list describes each member of this map. | |||
* global-attributes: The global-attributes group described in | global-attributes: The global-attributes group as described in | |||
Section 2.5. | Section 2.5. | |||
* artifact (index 37): To be used with rel="installationmedia", this | media (index 10): A value that provides a hint to the consumer of | |||
the link so that the consumer understands what target platform the | ||||
link is applicable to. This item represents a query as defined by | ||||
the W3C "Media Queries Level 3" Recommendation (see | ||||
[W3C.REC-mediaqueries-3-20220405]). As highlighted in the | ||||
definition of the media item provided in Section 2.3, support for | ||||
media queries is included here for interoperability with [SWID], | ||||
which does not provide any further requirements for media query | ||||
use. Thus, this specification does not clarify how a media query | ||||
is to be used for a CoSWID. | ||||
artifact (index 37): To be used with rel="installationmedia". This | ||||
item's value provides the absolute filesystem path to the | item's value provides the absolute filesystem path to the | |||
installer executable or script that can be run to launch the | installer executable or script that can be run to launch the | |||
referenced installation. Links with the same artifact name MUST | referenced installation. Links with the same artifact name MUST | |||
be considered mirrors of each other, allowing the installation | be considered mirrors of each other, allowing the installation | |||
media to be acquired from any of the described sources. | media to be acquired from any of the described sources. | |||
* href (index 38): A URI-reference [RFC3986] for the referenced | href (index 38): A URI-reference [RFC3986] for the referenced | |||
resource. The "href" item's value can be, but is not limited to, | resource. The href item's value can be, but is not limited to, | |||
the following (which is a slightly modified excerpt from [SWID]): | the following (which is a slightly modified excerpt from [SWID]): | |||
- If no URI scheme is provided, then the URI-reference is a | * If no URI scheme is provided, then the URI-reference is a | |||
relative reference relative to the base URI of the CoSWID tag, | relative reference to the base URI of the CoSWID tag, i.e., the | |||
i.e., the URI under which the CoSWID tag was provided. For | URI under which the CoSWID tag was provided -- for example, | |||
example, "./folder/supplemental.coswid". | "./folder/supplemental.coswid". | |||
- a physical resource location with any acceptable URI scheme | ||||
(e.g., file:// http:// https:// ftp://) | ||||
- a URI with "swid:" as the scheme refers to another SWID or | * This item can be a physical resource location with any | |||
CoSWID by the referenced tag's tag-id. This URI needs to be | acceptable URI scheme (e.g., <file://>, <http://>, <https://>, | |||
resolved in the context of the endpoint by software that can | <ftp://>). | |||
lookup other SWID or CoSWID tags. For example, "swid:2df9de35- | ||||
0aff-4a86-ace6-f7dddd1ade4c" references the tag with the tag-id | ||||
value "2df9de35-0aff-4a86-ace6-f7dddd1ade4c". | ||||
- a URI with "swidpath:" as the scheme, which refers to another | * A URI-like expression with "swid:" as the scheme refers to | |||
software tag via an XPATH query [W3C.REC-xpath20-20101214] that | another SWID or CoSWID by the referenced tag's tag-id. This | |||
matches items in that tag (Section 5.2). This scheme is | expression needs to be resolved in the context of the endpoint | |||
provided for compatibility with [SWID]. This specification | by software that can look up other SWID or CoSWID tags. For | |||
does not define how to resolve an XPATH query in the context of | example, "swid:2df9de35-0aff-4a86-ace6-f7dddd1ade4c" references | |||
CBOR, see Section 5.2. | the tag with the tag-id value "2df9de35-0aff- | |||
4a86-ace6-f7dddd1ade4c". See Section 5.1 for guidance on the | ||||
"swid" expressions. | ||||
* media (index 10): A hint to the consumer of the link to what | * This item can be a URI-like expression with "swidpath:" as the | |||
target platform the link is applicable to. This item represents a | scheme, which refers to another software tag via an XPath query | |||
query as defined by the W3C Media Queries Recommendation (see | [W3C.REC-xpath20-20101214] that matches items in that tag | |||
[W3C.REC-css3-mediaqueries-20120619]). As highlighted in media | (Section 5.2). This scheme is provided for compatibility with | |||
defined in Section 2.3, support for media queries are included | [SWID]. This specification does not define how to resolve an | |||
here for interoperability with [SWID], which does not provide any | XPath query in the context of CBOR. See Section 5.2 for | |||
further requirements for media query use. Thus, this | guidance on the "swidpath" expressions. | |||
specification does not clarify how a media query is to be used for | ||||
a CoSWID. | ||||
* ownership (index 39): An integer or textual value (integer label | ownership (index 39): An integer or textual value (integer label | |||
with text escape, see Section 2, for the "Software ID Link | with text escape; see Section 2). See Section 4.3 for the list of | |||
Ownership Values" registry Section 4.3) used when the "href" item | values available for this item. This item is used when the href | |||
references another software component to indicate the degree of | item references another software component to indicate the degree | |||
ownership between the software component referenced by the CoSWID | of ownership between the software component referenced by the | |||
tag and the software component referenced by the link. If an | CoSWID tag and the software component referenced by the link. If | |||
integer value is used it MUST be an index value in the range -256 | an integer value is used, it MUST be an index value in the range | |||
to 255. Integer values in the range -256 to -1 are reserved for | -256 to 255. Integer values in the range -256 to -1 are reserved | |||
testing and use in closed environments (see Section 6.2.2). | for testing and use in closed environments (see Section 6.2.2). | |||
Integer values in the range 0 to 255 correspond to registered | Integer values in the range 0 to 255 correspond to registered | |||
entries in the "Software ID Link Ownership Values" registry. | entries in the "Software ID Link Ownership Values" registry. | |||
* rel (index 40): An integer or textual value that (integer label | rel (index 40): An integer or textual value (integer label with text | |||
with text escape, see Section 2, for the "Software ID Link Link | escape; see Section 2). See Section 4.4 for the list of values | |||
Relationship Values" registry Section 4.3) identifies the | available for this item. This item identifies the relationship | |||
relationship between this CoSWID and the target resource | between this CoSWID and the target resource identified by the href | |||
identified by the "href" item. If an integer value is used it | item. If an integer value is used, it MUST be an index value in | |||
MUST be an index value in the range -256 to 65535. Integer values | the range -256 to 65535. Integer values in the range -256 to -1 | |||
in the range -256 to -1 are reserved for testing and use in closed | are reserved for testing and use in closed environments (see | |||
environments (see Section 6.2.2). Integer values in the range 0 | Section 6.2.2). Integer values in the range 0 to 65535 correspond | |||
to 65535 correspond to registered entries in the IANA "Software ID | to registered entries in the IANA "Software ID Link Relationship | |||
Link Relationship Values" registry (see Section 6.2.7). If a | Values" registry (see Section 6.2.7). If a string value is used, | |||
string value is used it MUST be either a private use name as | it MUST be either a private use name as defined in Section 6.2.2 | |||
defined in Section 6.2.2 or a "Relation Name" from the IANA "Link | or a "Relation Name" from the IANA "Link Relation Types" registry | |||
Relation Types" registry: https://www.iana.org/assignments/link- | (see <https://www.iana.org/assignments/link-relations/>) as | |||
relations/link-relations.xhtml as defined by [RFC8288]. When a | defined by [RFC8288]. When a string value defined in the IANA | |||
string value defined in the IANA "Software ID Link Relationship | "Software ID Link Relationship Values" registry matches a Relation | |||
Values" registry matches a Relation Name defined in the IANA "Link | Name defined in the IANA "Link Relation Types" registry, the index | |||
Relation Types" registry, the index value in the IANA "Software ID | value in the IANA "Software ID Link Relationship Values" registry | |||
Link Relationship Values" registry MUST be used instead, as this | MUST be used instead, as this relationship has a specialized | |||
relationship has a specialized meaning in the context of a CoSWID | meaning in the context of a CoSWID tag. String values correspond | |||
tag. String values correspond to registered entries in the | to registered entries in the "Software ID Link Relationship | |||
"Software ID Link Relationship Values" registry. | Values" registry. | |||
* media-type (index 41): A link can point to arbitrary resources on | media-type (index 41): Supplies the resource consumer with a hint | |||
the endpoint, local network, or Internet using the href item. Use | regarding what type of resource to expect. A link can point to | |||
of this item supplies the resource consumer with a hint of what | arbitrary resources on the endpoint, local network, or Internet | |||
type of resource to expect. (This is a _hint_: There is no | using the href item. (This is a _hint_: there is no obligation | |||
obligation for the server hosting the target of the URI to use the | for the server hosting the target of the URI to use the indicated | |||
indicated media type when the URI is dereferenced.) Media types | media type when the URI is dereferenced.) Media types are | |||
are identified by referencing a "Name" from the IANA "Media Types" | identified by referencing a "Name" from the IANA "Media Types" | |||
registry: http://www.iana.org/assignments/media-types/media- | registry (see <https://www.iana.org/assignments/media-types/>). | |||
types.xhtml. This item maps to '/SoftwareIdentity/Link/@type' in | This item maps to '/SoftwareIdentity/Link/@type' in [SWID]. | |||
[SWID]. | ||||
* use (index 42): An integer or textual value (integer label with | use (index 42): An integer or textual value (integer label with text | |||
text escape, see Section 2, for the "Software ID Link Link | escape; see Section 2). See Section 4.5 for the list of values | |||
Relationship Values" registry Section 4.3) used to determine if | available for this item. This item is used to determine if the | |||
the referenced software component has to be installed before | referenced software component has to be installed before | |||
installing the software component identified by the COSWID tag. | installing the software component identified by the CoSWID tag. | |||
If an integer value is used it MUST be an index value in the range | If an integer value is used, it MUST be an index value in the | |||
-256 to 255. Integer values in the range -256 to -1 are reserved | range -256 to 255. Integer values in the range -256 to -1 are | |||
for testing and use in closed environments (see Section 6.2.2). | reserved for testing and use in closed environments (see | |||
Integer values in the range 0 to 255 correspond to registered | Section 6.2.2). Integer values in the range 0 to 255 correspond | |||
entries in the IANA "Link Use Values" registry (see | to registered entries in the IANA "Software ID Link Use Values" | |||
Section 6.2.8). If a string value is used it MUST be a private | registry (see Section 6.2.8). If a string value is used, it MUST | |||
use name as defined in Section 6.2.2. String values correspond to | be a private use name as defined in Section 6.2.2. String values | |||
registered entries in the "Software ID Link Use Values" registry. | correspond to registered entries in the "Software ID Link Use | |||
Values" registry. | ||||
* $$link-extension: This CDDL socket can be used to extend the link- | $$link-extension: A CDDL socket that can be used to extend the link- | |||
entry map model. See Section 2.2. | entry map model. See Section 2.2. | |||
2.8. The software-meta-entry Map | 2.8. The software-meta-entry Map | |||
The CDDL for the software-meta-entry map follows: | The CDDL for the software-meta-entry map follows: | |||
software-meta-entry = { | software-meta-entry = { | |||
? activation-status => text, | ? activation-status => text, | |||
? channel-type => text, | ? channel-type => text, | |||
? colloquial-version => text, | ? colloquial-version => text, | |||
? description => text, | ? description => text, | |||
? edition => text, | ? edition => text, | |||
? entitlement-data-required => bool, | ? entitlement-data-required => bool, | |||
? entitlement-key => text, | ? entitlement-key => text, | |||
? generator => text / bstr .size 16, | ? generator => text / bstr .size 16, | |||
? persistent-id => text, | ? persistent-id => text, | |||
? product => text, | ? product => text, | |||
? product-family => text, | ? product-family => text, | |||
? revision => text, | ? revision => text, | |||
? summary => text, | ? summary => text, | |||
? unspsc-code => text, | ? unspsc-code => text, | |||
? unspsc-version => text, | ? unspsc-version => text, | |||
* $$software-meta-extension, | * $$software-meta-extension, | |||
global-attributes, | global-attributes, | |||
} | } | |||
skipping to change at page 25, line 48 ¶ | skipping to change at line 1125 ¶ | |||
entitlement-key = 49 | entitlement-key = 49 | |||
generator = 50 | generator = 50 | |||
persistent-id = 51 | persistent-id = 51 | |||
product = 52 | product = 52 | |||
product-family = 53 | product-family = 53 | |||
revision = 54 | revision = 54 | |||
summary = 55 | summary = 55 | |||
unspsc-code = 56 | unspsc-code = 56 | |||
unspsc-version = 57 | unspsc-version = 57 | |||
The following describes each child item of this group. | The following list describes each child item of this group. | |||
* global-attributes: The global-attributes group described in | global-attributes: The global-attributes group as described in | |||
Section 2.5. | Section 2.5. | |||
* activation-status (index 43): A textual value that identifies how | activation-status (index 43): A textual value that identifies how | |||
the software component has been activated, which might relate to | the software component has been activated, which might relate to | |||
specific terms and conditions for its use (e.g., Trial, | specific terms and conditions for its use (e.g., trial, | |||
Serialized, Licensed, Unlicensed, etc) and relate to an | serialized, licensed, unlicensed, etc.) and relate to an | |||
entitlement. This attribute is typically used in supplemental | entitlement. This attribute is typically used in supplemental | |||
tags as it contains information that might be selected during a | tags, as it contains information that might be selected during a | |||
specific install. | specific install. | |||
* channel-type (index 44): A textual value that identifies which | channel-type (index 44): A textual value that identifies which | |||
sales, licensing, or marketing channel the software component has | sales, licensing, or marketing channel the software component has | |||
been targeted for (e.g., Volume, Retail, OEM, Academic, etc). | been targeted for (e.g., volume, retail, original equipment | |||
This attribute is typically used in supplemental tags as it | manufacturer (OEM), academic, etc.). This attribute is typically | |||
contains information that might be selected during a specific | used in supplemental tags, as it contains information that might | |||
install. | be selected during a specific install. | |||
* colloquial-version (index 45): A textual value for the software | colloquial-version (index 45): A textual value for the software | |||
component's informal or colloquial version. Examples may include | component's informal or colloquial version. Examples may include | |||
a year value, a major version number, or similar value that are | a year value, a major version number, or a similar value used to | |||
used to identify a group of specific software component releases | identify a group of specific software component releases that are | |||
that are part of the same release/support cycle. This version can | part of the same release/support cycle. This version can be the | |||
be the same through multiple releases of a software component, | same through multiple releases of a software component, while the | |||
while the software-version specified in the concise-swid-tag group | software-version specified in the concise-swid-tag group is much | |||
is much more specific and will change for each software component | more specific and will change for each software component release. | |||
release. This version is intended to be used for string | This version is intended to be used for string comparison (byte by | |||
comparison (byte-by-byte) only and is not intended to be used to | byte) only and is not intended to be used to determine if a | |||
determine if a specific value is earlier or later in a sequence. | specific value is earlier or later in a sequence. | |||
* description (index 46): A textual value that provides a detailed | description (index 46): A textual value that provides a detailed | |||
description of the software component. This value MAY be multiple | description of the software component. This value MAY be multiple | |||
paragraphs separated by CR LF characters as described by | paragraphs separated by CR LF characters as described by | |||
[RFC5198]. | [RFC5198]. | |||
* edition (index 47): A textual value indicating that the software | edition (index 47): A textual value indicating that the software | |||
component represents a functional variation of the code base used | component represents a functional variation of the code base used | |||
to support multiple software components. For example, this item | to support multiple software components. For example, this item | |||
can be used to differentiate enterprise, standard, or professional | can be used to differentiate enterprise, standard, or professional | |||
variants of a software component. | variants of a software component. | |||
* entitlement-data-required (index 48): A boolean value that can be | entitlement-data-required (index 48): A boolean value that can be | |||
used to determine if accompanying proof of entitlement is needed | used to determine if accompanying proof of entitlement is needed | |||
when a software license reconciliation process is performed. | when a software license reconciliation process is performed. | |||
* entitlement-key (index 49): A vendor-specific textual key that can | entitlement-key (index 49): A vendor-specific textual key that can | |||
be used to identify and establish a relationship to an | be used to identify and establish a relationship to an | |||
entitlement. Examples of an entitlement-key might include a | entitlement. Examples of an entitlement-key might include a | |||
serial number, product key, or license key. For values that | serial number, product key, or license key. For values that | |||
relate to a given software component install (i.e., license key), | relate to a given software component install (e.g., license key), | |||
a supplemental tag will typically contain this information. In | a supplemental tag will typically contain this information. In | |||
other cases, where a general-purpose key can be provided that | other cases, where a general-purpose key can be provided that | |||
applies to all possible installs of the software component on | applies to all possible installs of the software component on | |||
different endpoints, a primary tag will typically contain this | different endpoints, a primary tag will typically contain this | |||
information. Since CoSWID tags are not intended to contain | information. Since CoSWID tags are not intended to contain | |||
confidential information, tag authors are advised not to record | confidential information, tag authors are advised not to record | |||
unprotected, private software license keys in this field. | unprotected, private software license keys in this field. | |||
* generator (index 50): The name (or tag-id) of the software | generator (index 50): The name (or tag-id) of the software component | |||
component that created the CoSWID tag. If the generating software | that created the CoSWID tag. If the generating software component | |||
component has a SWID or CoSWID tag, then the tag-id for the | has a SWID or CoSWID tag, then the tag-id for the generating | |||
generating software component SHOULD be provided. | software component SHOULD be provided. | |||
* persistent-id (index 51): A globally unique identifier used to | persistent-id (index 51): A globally unique identifier used to | |||
identify a set of software components that are related. Software | identify a set of software components that are related. Software | |||
components sharing the same persistent-id can be different | components sharing the same persistent-id can be different | |||
versions. This item can be used to relate software components, | versions. This item can be used to relate software components, | |||
released at different points in time or through different release | released at different points in time or through different release | |||
channels, that may not be able to be related through use of the | channels, that may not be able to be related through the use of | |||
link item. | the link item. | |||
* product (index 52): A basic name for the software component that | product (index 52): A basic name for the software component that can | |||
can be common across multiple tagged software components (e.g., | be common across multiple tagged software components (e.g., Apache | |||
Apache HTTPD). | HTTP daemon (HTTPD)). | |||
* product-family (index 53): A textual value indicating the software | product-family (index 53): A textual value indicating the software | |||
components overall product family. This should be used when | components' overall product family. This should be used when | |||
multiple related software components form a larger capability that | multiple related software components form a larger capability that | |||
is installed on multiple different endpoints. For example, some | is installed on multiple different endpoints. For example, some | |||
software families may consist of server, client, and shared | software families may consist of a server, a client, and shared | |||
service components that are part of a larger capability. Email | service components that are part of a larger capability. Email | |||
systems, enterprise applications, backup services, web | systems, enterprise applications, backup services, web | |||
conferencing, and similar capabilities are examples of families. | conferencing, and similar capabilities are examples of families. | |||
Use of this item is not intended to represent groups of software | The use of this item is not intended to represent groups of | |||
that are bundled or installed together. The persistent-id or link | software that are bundled or installed together. The persistent- | |||
items SHOULD be used to relate bundled software components. | id or link items SHOULD be used to relate bundled software | |||
components. | ||||
* revision (index 54): A string value indicating an informal or | revision (index 54): A string value indicating an informal or | |||
colloquial release version of the software. This value can | colloquial release version of the software. This value can | |||
provide a different version value as compared to the software- | provide a different version value as compared to the software- | |||
version specified in the concise-swid-tag group. This is useful | version specified in the concise-swid-tag group. This is useful | |||
when one or more releases need to have an informal version label | when one or more releases need to have an informal version label | |||
that differs from the specific exact version value specified by | that differs from the specific exact version value specified by | |||
software-version. Examples can include SP1, RC1, Beta, etc. | software-version. Examples can include SP1, RC1, Beta, etc. | |||
* summary (index 55): A short description of the software component. | summary (index 55): A short description of the software component. | |||
This MUST be a single sentence suitable for display in a user | This MUST be a single sentence suitable for display in a user | |||
interface. | interface. | |||
* unspsc-code (index 56): An 8 digit UNSPSC classification code for | unspsc-code (index 56): An 8-digit United Nations Standard Products | |||
the software component as defined by the United Nations Standard | and Services Code (UNSPSC) classification code for the software | |||
Products and Services Code (UNSPSC, [UNSPSC]). | component as defined by the UNSPSC [UNSPSC]. | |||
* unspsc-version (index 57): The version of UNSPSC used to define | unspsc-version (index 57): The UNSPSC version used to define the | |||
the unspsc-code value. | unspsc-code value. | |||
* $$meta-extension: This CDDL socket can be used to extend the | $$software-meta-extension: A CDDL socket that can be used to extend | |||
software-meta-entry group model. See Section 2.2. | the software-meta-entry group model. See Section 2.2. | |||
2.9. The Resource Collection Definition | 2.9. The Resource Collection Definition | |||
2.9.1. The hash-entry Array | 2.9.1. The hash-entry Array | |||
CoSWID adds explicit support for the representation of hash entries | CoSWID adds explicit support for the representation of hash entries | |||
using algorithms that are registered in the IANA "Named Information | using algorithms that are registered in the IANA "Named Information | |||
Hash Algorithm Registry" [IANA.named-information] using the hash | Hash Algorithm Registry" [IANA.named-information]. This array is | |||
member (index 7) and the corresponding hash-entry type. This is the | used by both the hash (index 7) and thumbprint (index 34) values. | |||
equivalent of the namespace qualified "hash" attribute in [SWID]. | This is the equivalent of the namespace qualified "hash" attribute in | |||
[SWID]. | ||||
hash-entry = [ | hash-entry = [ | |||
hash-alg-id: int, | hash-alg-id: int, | |||
hash-value: bytes, | hash-value: bytes, | |||
] | ] | |||
The number used as a value for hash-alg-id is an integer-based hash | The number used as a value for hash-alg-id is an integer-based hash | |||
algorithm identifier who's value MUST refer to an ID in the IANA | algorithm identifier whose value MUST refer to an ID in the IANA | |||
"Named Information Hash Algorithm Registry" [IANA.named-information] | "Named Information Hash Algorithm Registry" [IANA.named-information] | |||
with a Status of "current" (at the time the generator software was | with a Status of "current" (at the time the generator software was | |||
built or later); other hash algorithms MUST NOT be used. If the | built or later); other hash algorithms MUST NOT be used. If the | |||
hash-alg-id is not known, then the integer value "0" MUST be used. | hash-alg-id is not known, then the integer value "0" MUST be used. | |||
This allows for conversion from ISO SWID tags [SWID], which do not | This allows for conversion from ISO SWID tags [SWID], which do not | |||
allow an algorithm to be identified for this field. | allow an algorithm to be identified for this field. | |||
The hash-value MUST represent the raw hash value as a byte string (as | The hash-value MUST represent the raw hash value as a byte string (as | |||
opposed to, e.g., base64 encoded) generated from the representation | opposed to, for example, base64 encoded) generated from the | |||
of the resource using the hash algorithm indicated by hash-alg-id. | representation of the resource using the hash algorithm indicated by | |||
hash-alg-id. | ||||
2.9.2. The resource-collection Group | 2.9.2. The resource-collection Group | |||
A list of items both used in evidence (created by a software | The resource-collection group provides a list of items used in both | |||
discovery process) and payload (installed in an endpoint) content of | evidence (created by a software discovery process) and payload | |||
a CoSWID tag document to structure and differentiate the content of | (installed in an endpoint) content of a CoSWID tag document to | |||
specific CoSWID tag types. Potential content includes directories, | structure and differentiate the content of specific CoSWID tag types. | |||
files, processes, or resources. | Potential content includes directories, files, processes, or | |||
resources. | ||||
The CDDL for the resource-collection group follows: | The CDDL for the resource-collection group follows: | |||
path-elements-group = ( ? directory => one-or-more<directory-entry>, | path-elements-group = ( ? directory => one-or-more<directory-entry>, | |||
? file => one-or-more<file-entry>, | ? file => one-or-more<file-entry>, | |||
) | ) | |||
resource-collection = ( | resource-collection = ( | |||
path-elements-group, | path-elements-group, | |||
? process => one-or-more<process-entry>, | ? process => one-or-more<process-entry>, | |||
skipping to change at page 29, line 52 ¶ | skipping to change at line 1325 ¶ | |||
* $$process-extension, | * $$process-extension, | |||
global-attributes, | global-attributes, | |||
} | } | |||
resource-entry = { | resource-entry = { | |||
type => text, | type => text, | |||
* $$resource-extension, | * $$resource-extension, | |||
global-attributes, | global-attributes, | |||
} | } | |||
hash = 7 | ||||
directory = 16 | directory = 16 | |||
file = 17 | file = 17 | |||
process = 18 | process = 18 | |||
resource = 19 | resource = 19 | |||
size = 20 | size = 20 | |||
file-version = 21 | file-version = 21 | |||
key = 22 | key = 22 | |||
location = 23 | location = 23 | |||
fs-name = 24 | fs-name = 24 | |||
root = 25 | root = 25 | |||
path-elements = 26 | path-elements = 26 | |||
process-name = 27 | process-name = 27 | |||
pid = 28 | pid = 28 | |||
type = 29 | type = 29 | |||
The following describes each member of the groups and maps | The following list describes each member of the groups and maps | |||
illustrated above. | illustrated above. | |||
* filesystem-item: A list of common items used for representing the | filesystem-item: A list of common items used for representing the | |||
filesystem root, relative location, name, and significance of a | filesystem root, relative location, name, and significance of a | |||
file or directory item. | file or directory item. | |||
* global-attributes: The global-attributes group described in | global-attributes: The global-attributes group as described in | |||
Section 2.5. | Section 2.5. | |||
* directory (index 16): A directory item allows child directory and | hash (index 7): Value that provides a hash of a file. This item | |||
file items to be defined within a directory hierarchy for the | provides an integrity measurement with respect to a specific file. | |||
software component. | See Section 2.9.1 for more details on the use of the hash-entry | |||
data structure. | ||||
* file (index 17): A file item allows details about a file to be | directory (index 16): Item that allows child directory and file | |||
items to be defined within a directory hierarchy for the software | ||||
component. | ||||
file (index 17): Item that allows details about a file to be | ||||
provided for the software component. | provided for the software component. | |||
* process (index 18): A process item allows details to be provided | process (index 18): Item that allows details to be provided about | |||
about the runtime behavior of the software component, such as | the runtime behavior of the software component, such as | |||
information that will appear in a process listing on an endpoint. | information that will appear in a process listing on an endpoint. | |||
* resource (index 19): A resource item can be used to provide | resource (index 19): Item that can be used to provide details about | |||
details about an artifact or capability expected to be found on an | an artifact or capability expected to be found on an endpoint or | |||
endpoint or evidence collected related to the software component. | evidence collected related to the software component. This can be | |||
This can be used to represent concepts not addressed directly by | used to represent concepts not addressed directly by the | |||
the directory, file, or process items. Examples include: registry | directory, file, or process items. Examples include registry | |||
keys, bound ports, etc. The equivalent construct in [SWID] is | keys, bound ports, etc. The equivalent construct in [SWID] is | |||
currently under specified. As a result, this item might be | currently underspecified. As a result, this item might be further | |||
further defined through extension in the future. | defined through extensions in the future. | |||
* size (index 20): The file's size in bytes. | size (index 20): The file's size in bytes. | |||
* file-version (index 21): The file's version as reported by | file-version (index 21): The file's version as reported by querying | |||
querying information on the file from the operating system (if | information on the file from the operating system (if available). | |||
available). This item maps to | This item maps to | |||
'/SoftwareIdentity/(Payload|Evidence)/File/@version' in [SWID]. | '/SoftwareIdentity/(Payload|Evidence)/File/@version' in [SWID]. | |||
* hash (index 7): A hash of the file as described in Section 2.9.1. | key (index 22): A boolean value indicating if a file or directory is | |||
significant or required for the software component to execute or | ||||
* key (index 22): A boolean value indicating if a file or directory | function properly. These are files or directories that can be | |||
is significant or required for the software component to execute | ||||
or function properly. These are files or directories that can be | ||||
used to affirmatively determine if the software component is | used to affirmatively determine if the software component is | |||
installed on an endpoint. | installed on an endpoint. | |||
* location (index 23): The filesystem path where a file is expected | location (index 23): The filesystem path where a file is expected to | |||
to be located when installed or copied. The location MUST be | be located when installed or copied. The location MUST be either | |||
either relative to the location of the parent directory item | an absolute path, a path relative to the path value included in | |||
(preferred), or relative to the location of the CoSWID tag (as | the parent directory item (preferred), or a path relative to the | |||
indicated in the location value in the evidence entry map) if no | location of the CoSWID tag if no parent is defined. The location | |||
parent is defined. The location MUST NOT include a file's name, | MUST NOT include a file's name, which is provided by the fs-name | |||
which is provided by the fs-name item. | item. | |||
* fs-name (index 24): The name of the directory or file without any | fs-name (index 24): The name of the directory or file without any | |||
path information. This aligns with a file "name" in [SWID]. This | path information. This aligns with a file "name" in [SWID]. This | |||
item maps to | item maps to | |||
'/SoftwareIdentity/(Payload|Evidence)/(File|Directory)/@name' in | '/SoftwareIdentity/(Payload|Evidence)/(File|Directory)/@name' in | |||
[SWID]. | [SWID]. | |||
* root (index 25): A host-specific name for the root of the | root (index 25): A host-specific name for the root of the | |||
filesystem. The location item is considered relative to this | filesystem. The location item is considered relative to this | |||
location if specified. If not provided, the value provided by the | location if specified. If not provided, the value provided by the | |||
location item is expected to be relative to its parent or the | location item is expected to be relative to its parent or the | |||
location of the CoSWID tag if no parent is provided. | location of the CoSWID tag if no parent is provided. | |||
* path-elements (index 26): This group allows a hierarchy of | path-elements (index 26): Group that allows a hierarchy of directory | |||
directory and file items to be defined in payload or evidence | and file items to be defined in payload or evidence items. This | |||
items. This is a construction within the CDDL definition of | is a construction within the CDDL definition of CoSWID to support | |||
CoSWID to support shared syntax and does not appear in [SWID]. | shared syntax and does not appear in [SWID]. | |||
* process-name (index 27): The software component's process name as | process-name (index 27): The software component's process name as it | |||
it will appear in an endpoint's process list. This aligns with a | will appear in an endpoint's process list. This aligns with a | |||
process "name" in [SWID]. This item maps to | process "name" in [SWID]. This item maps to | |||
'/SoftwareIdentity/(Payload|Evidence)/Process/@name' in [SWID]. | '/SoftwareIdentity/(Payload|Evidence)/Process/@name' in [SWID]. | |||
* pid (index 28): The process ID identified for a running instance | pid (index 28): The process ID identified for a running instance of | |||
of the software component in the endpoint's process list. This is | the software component in the endpoint's process list. This is | |||
used as part of the evidence item. | used as part of the evidence item. | |||
* type (index 29): A human-readable string indicating the type of | type (index 29): A human-readable string indicating the type of | |||
resource. | resource. | |||
* $$resource-collection-extension: This CDDL socket can be used to | $$resource-collection-extension: A CDDL socket that can be used to | |||
extend the resource-collection group model. This can be used to | extend the resource-collection group model. This can be used to | |||
add new specialized types of resources. See Section 2.2. | add new specialized types of resources. See Section 2.2. | |||
* $$file-extension: This CDDL socket can be used to extend the file- | $$file-extension: A CDDL socket that can be used to extend the file- | |||
entry group model. See Section 2.2. | entry group model. See Section 2.2. | |||
* $$directory-extension: This CDDL socket can be used to extend the | $$directory-extension: A CDDL socket that can be used to extend the | |||
directory-entry group model. See Section 2.2. | directory-entry group model. See Section 2.2. | |||
* $$process-extension: This CDDL socket can be used to extend the | $$process-extension: A CDDL socket that can be used to extend the | |||
process-entry group model. See Section 2.2. | process-entry group model. See Section 2.2. | |||
* $$resource-extension: This CDDL socket can be used to extend the | $$resource-extension: A CDDL socket that can be used to extend the | |||
resource-entry group model. See Section 2.2. | resource-entry group model. See Section 2.2. | |||
2.9.3. The payload-entry Map | 2.9.3. The payload-entry Map | |||
The CDDL for the payload-entry map follows: | The CDDL for the payload-entry map follows: | |||
payload-entry = { | payload-entry = { | |||
resource-collection, | resource-collection, | |||
* $$payload-extension, | * $$payload-extension, | |||
global-attributes, | global-attributes, | |||
} | } | |||
The following describes each child item of this group. | The following list describes each child item of this group. | |||
* global-attributes: The global-attributes group described in | global-attributes: The global-attributes group as described in | |||
Section 2.5. | Section 2.5. | |||
* resource-collection: The resource-collection group described in | resource-collection: The resource-collection group as described in | |||
Section 2.9.2. | Section 2.9.2. | |||
* $$payload-extension: This CDDL socket can be used to extend the | $$payload-extension: A CDDL socket that can be used to extend the | |||
payload-entry group model. See Section 2.2. | payload-entry group model. See Section 2.2. | |||
2.9.4. The evidence-entry Map | 2.9.4. The evidence-entry Map | |||
The CDDL for the evidence-entry map follows: | The CDDL for the evidence-entry map follows: | |||
evidence-entry = { | evidence-entry = { | |||
resource-collection, | resource-collection, | |||
? date => integer-time, | ? date => integer-time, | |||
? device-id => text, | ? device-id => text, | |||
? location => text, | ? location => text, | |||
* $$evidence-extension, | * $$evidence-extension, | |||
global-attributes, | global-attributes, | |||
} | } | |||
date = 35 | date = 35 | |||
device-id = 36 | device-id = 36 | |||
The following describes each child item of this group. | The following list describes each child item of this group. | |||
* global-attributes: The global-attributes group described in | global-attributes: The global-attributes group as described in | |||
Section 2.5. | Section 2.5. | |||
* resource-collection: The resource-collection group described in | resource-collection: The resource-collection group as described in | |||
Section 2.9.2. | Section 2.9.2. | |||
* date (index 35): The date and time the information was collected | location (index 23): The filesystem path of the location of the | |||
pertaining to the evidence item in Epoch-Based Date/Time format as | CoSWID tag generated as evidence. This path is always an absolute | |||
file path (unlike the value of a location item found within a | ||||
filesystem-item as described in Section 2.9.2, which can be either | ||||
a relative path or an absolute path). | ||||
date (index 35): The date and time the information was collected | ||||
pertaining to the evidence item in epoch-based date/time format as | ||||
specified in Section 3.4.2 of [RFC8949]. | specified in Section 3.4.2 of [RFC8949]. | |||
* device-id (index 36): The endpoint's string identifier from which | device-id (index 36): The endpoint's string identifier from which | |||
the evidence was collected. | the evidence was collected. | |||
* location (index 23): The absolute filepath of the location of the | $$evidence-extension: A CDDL socket that can be used to extend the | |||
CoSWID tag generated as evidence. (Location values in filesystem- | ||||
items in the payload can be expressed relative to this location.) | ||||
* $$evidence-extension: This CDDL socket can be used to extend the | ||||
evidence-entry group model. See Section 2.2. | evidence-entry group model. See Section 2.2. | |||
2.10. Full CDDL Specification | 2.10. Full CDDL Specification | |||
In order to create a valid CoSWID document the structure of the | In order to create a valid CoSWID document, the structure of the | |||
corresponding CBOR message MUST adhere to the following CDDL | corresponding CBOR message MUST adhere to the following CDDL | |||
specification. | specification. | |||
<CODE BEGINS> | <CODE BEGINS> file "concise-swid-tag.cddl" | |||
concise-swid-tag = { | concise-swid-tag = { | |||
tag-id => text / bstr .size 16, | tag-id => text / bstr .size 16, | |||
tag-version => integer, | tag-version => integer, | |||
? corpus => bool, | ? corpus => bool, | |||
? patch => bool, | ? patch => bool, | |||
? supplemental => bool, | ? supplemental => bool, | |||
software-name => text, | software-name => text, | |||
? software-version => text, | ? software-version => text, | |||
? version-scheme => $version-scheme, | ? version-scheme => $version-scheme, | |||
? media => text, | ? media => text, | |||
skipping to change at page 35, line 40 ¶ | skipping to change at line 1602 ¶ | |||
$rel /= component | $rel /= component | |||
$rel /= feature | $rel /= feature | |||
$rel /= installationmedia | $rel /= installationmedia | |||
$rel /= packageinstaller | $rel /= packageinstaller | |||
$rel /= parent | $rel /= parent | |||
$rel /= patches | $rel /= patches | |||
$rel /= requires | $rel /= requires | |||
$rel /= see-also | $rel /= see-also | |||
$rel /= supersedes | $rel /= supersedes | |||
$rel /= supplemental | $rel /= supplemental | |||
$rel /= -256..64436 / text | $rel /= -256..65536 / text | |||
$use /= optional | $use /= optional | |||
$use /= required | $use /= required | |||
$use /= recommended | $use /= recommended | |||
$use /= int / text | $use /= int / text | |||
software-meta-entry = { | software-meta-entry = { | |||
? activation-status => text, | ? activation-status => text, | |||
? channel-type => text, | ? channel-type => text, | |||
? colloquial-version => text, | ? colloquial-version => text, | |||
? description => text, | ? description => text, | |||
? edition => text, | ? edition => text, | |||
? entitlement-data-required => bool, | ? entitlement-data-required => bool, | |||
? entitlement-key => text, | ? entitlement-key => text, | |||
? generator => text / bstr .size 16, | ? generator => text / bstr .size 16, | |||
? persistent-id => text, | ? persistent-id => text, | |||
? product => text, | ? product => text, | |||
? product-family => text, | ? product-family => text, | |||
? revision => text, | ? revision => text, | |||
? summary => text, | ? summary => text, | |||
? unspsc-code => text, | ? unspsc-code => text, | |||
? unspsc-version => text, | ? unspsc-version => text, | |||
* $$software-meta-extension, | * $$software-meta-extension, | |||
global-attributes, | global-attributes, | |||
} | } | |||
skipping to change at page 37, line 34 ¶ | skipping to change at line 1693 ¶ | |||
resource-collection, | resource-collection, | |||
? date => integer-time, | ? date => integer-time, | |||
? device-id => text, | ? device-id => text, | |||
? location => text, | ? location => text, | |||
* $$evidence-extension, | * $$evidence-extension, | |||
global-attributes, | global-attributes, | |||
} | } | |||
integer-time = #6.1(int) | integer-time = #6.1(int) | |||
; "global map member" integer indexes | ; "global map member" integer indices | |||
tag-id = 0 | tag-id = 0 | |||
software-name = 1 | software-name = 1 | |||
entity = 2 | entity = 2 | |||
evidence = 3 | evidence = 3 | |||
link = 4 | link = 4 | |||
software-meta = 5 | software-meta = 5 | |||
payload = 6 | payload = 6 | |||
hash = 7 | hash = 7 | |||
corpus = 8 | corpus = 8 | |||
patch = 9 | patch = 9 | |||
skipping to change at page 38, line 45 ¶ | skipping to change at line 1752 ¶ | |||
entitlement-key = 49 | entitlement-key = 49 | |||
generator = 50 | generator = 50 | |||
persistent-id = 51 | persistent-id = 51 | |||
product = 52 | product = 52 | |||
product-family = 53 | product-family = 53 | |||
revision = 54 | revision = 54 | |||
summary = 55 | summary = 55 | |||
unspsc-code = 56 | unspsc-code = 56 | |||
unspsc-version = 57 | unspsc-version = 57 | |||
; "version-scheme" integer indexes | ; "version-scheme" integer indices | |||
multipartnumeric = 1 | multipartnumeric = 1 | |||
multipartnumeric-suffix = 2 | multipartnumeric-suffix = 2 | |||
alphanumeric = 3 | alphanumeric = 3 | |||
decimal = 4 | decimal = 4 | |||
semver = 16384 | semver = 16384 | |||
; "role" integer indexes | ||||
; "role" integer indices | ||||
tag-creator=1 | tag-creator=1 | |||
software-creator=2 | software-creator=2 | |||
aggregator=3 | aggregator=3 | |||
distributor=4 | distributor=4 | |||
licensor=5 | licensor=5 | |||
maintainer=6 | maintainer=6 | |||
; "ownership" integer indexes | ; "ownership" integer indices | |||
abandon=1 | abandon=1 | |||
private=2 | private=2 | |||
shared=3 | shared=3 | |||
; "rel" integer indexes | ; "rel" integer indices | |||
ancestor=1 | ancestor=1 | |||
component=2 | component=2 | |||
feature=3 | feature=3 | |||
installationmedia=4 | installationmedia=4 | |||
packageinstaller=5 | packageinstaller=5 | |||
parent=6 | parent=6 | |||
patches=7 | patches=7 | |||
requires=8 | requires=8 | |||
see-also=9 | see-also=9 | |||
supersedes=10 | supersedes=10 | |||
; supplemental=11 ; this is already defined earlier | ; supplemental=11 ; already defined | |||
; "use" integer indexes | ; "use" integer indices | |||
optional=1 | optional=1 | |||
required=2 | required=2 | |||
recommended=3 | recommended=3 | |||
<CODE ENDS> | <CODE ENDS> | |||
3. Determining the Type of CoSWID | 3. Determining the Type of CoSWID | |||
The operational model for SWID and CoSWID tags was introduced in | The operational model for SWID and CoSWID tags was introduced in | |||
Section 1.1, which described four different CoSWID tag types. The | Section 1.1, which described four different CoSWID tag types. The | |||
following additional rules apply to the use of CoSWID tags to ensure | following additional rules apply to the use of CoSWID tags to ensure | |||
that created tags properly identify the tag type. | that created tags properly identify the tag type. | |||
The first matching rule MUST determine the type of the CoSWID tag. | The first matching rule MUST determine the type of the CoSWID tag. | |||
1. Primary Tag: A CoSWID tag MUST be considered a primary tag if the | Primary Tag: A CoSWID tag MUST be considered a primary tag if the | |||
corpus, patch, and supplemental items are "false". | corpus, patch, and supplemental items are "false". | |||
2. Supplemental Tag: A CoSWID tag MUST be considered a supplemental | Supplemental Tag: A CoSWID tag MUST be considered a supplemental tag | |||
tag if the supplemental item is set to "true". | if the supplemental item is set to "true". | |||
3. Corpus Tag: A CoSWID tag MUST be considered a corpus tag if the | Corpus Tag: A CoSWID tag MUST be considered a corpus tag if the | |||
corpus item is "true". | corpus item is "true". | |||
4. Patch Tag: A CoSWID tag MUST be considered a patch tag if the | Patch Tag: A CoSWID tag MUST be considered a patch tag if the patch | |||
patch item is "true". | item is "true". | |||
Note: Multiple of the corpus, patch, and supplemental items can have | | Note: It is possible for some or all of the corpus, patch, and | |||
values set as "true". The rules above provide a means to determine | | supplemental items to simultaneously have values set as "true". | |||
the tag's type in such a case. For example, a SWID or CoSWID tag for | | The rules above provide a means to determine the tag's type in | |||
a patch installer might have both corpus and patch items set to | | such a case. For example, a SWID or CoSWID tag for a patch | |||
"true". In such a case, the tag is a "Corpus Tag". The tag | | installer might have both corpus and patch items set to "true". | |||
installed by this installer would have only the patch item set to | | In such a case, the tag is a "corpus tag". The tag installed | |||
"true", making the installed tag type a "Patch Tag". | | by this installer would have only the patch item set to "true", | |||
| making the installed tag type a "patch tag". | ||||
4. CoSWID Indexed Label Values | 4. CoSWID Indexed Label Values | |||
This section defines a number of kinds of indexed label values that | This section defines multiple kinds of indexed label values that are | |||
are maintained in a registry each (Section 6). These values are | maintained in several IANA registries. See Section 6 for details. | |||
represented as positive integers. In each registry, the value 0 is | These values are represented as positive integers. In each registry, | |||
marked as Reserved. | the value 0 is marked as Reserved. | |||
4.1. Version Scheme | 4.1. Version Scheme | |||
The following table contains a set of values for use in the concise- | The following table contains a set of values for use in the concise- | |||
swid-tag group's version-scheme item. Version Scheme Name strings | swid-tag group's version-scheme item. The "Index" value indicates | |||
match the version schemes defined in the ISO/IEC 19770-2:2015 [SWID] | the value to use as the version-scheme item's value. Strings in the | |||
specification. Index value indicates the value to use as the | "Version Scheme Name" column provide human-readable text for the | |||
version-scheme item's value. The Version Scheme Name provides human- | value and match the version schemes defined in the ISO/IEC | |||
readable text for the value. The Definition describes the syntax of | 19770-2:2015 specification [SWID]. The "Definition" column describes | |||
allowed values for each entry. | the syntax of allowed values for each entry. | |||
+=======+=========================+===============================+ | +=======+=========================+===============================+ | |||
| Index | Version Scheme Name | Definition | | | Index | Version Scheme Name | Definition | | |||
+=======+=========================+===============================+ | +=======+=========================+===============================+ | |||
| 1 | multipartnumeric | Numbers separated by dots, | | | 1 | multipartnumeric | Numbers separated by dots, | | |||
| | | where the numbers are | | | | | where the numbers are | | |||
| | | interpreted as decimal | | | | | interpreted as decimal | | |||
| | | integers (e.g., 1.2.3, | | | | | integers (e.g., 1.2.3, | | |||
| | | 1.2.3.4.5.6.7, 1.4.5, 1.21) | | | | | 1.2.3.4.5.6.7, 1.4.5, 1.21) | | |||
+-------+-------------------------+-------------------------------+ | +-------+-------------------------+-------------------------------+ | |||
| 2 | multipartnumeric+suffix | Numbers separated by dots, | | | 2 | multipartnumeric+suffix | Numbers separated by dots, | | |||
| | | where the numbers are | | | | | where the numbers are | | |||
| | | interpreted as decimal | | | | | interpreted as decimal | | |||
| | | integers with an additional | | | | | integers with an additional | | |||
| | | textual suffix (e.g., 1.2.3a) | | | | | textual suffix (e.g., 1.2.3a) | | |||
+-------+-------------------------+-------------------------------+ | +-------+-------------------------+-------------------------------+ | |||
| 3 | alphanumeric | Strictly a string, no | | | 3 | alphanumeric | Strictly a string, no | | |||
| | | interpretation as number | | | | | interpretation as number | | |||
+-------+-------------------------+-------------------------------+ | +-------+-------------------------+-------------------------------+ | |||
| 4 | decimal | A single decimal floating | | | 4 | decimal | A single decimal floating- | | |||
| | | point number | | | | | point number | | |||
+-------+-------------------------+-------------------------------+ | +-------+-------------------------+-------------------------------+ | |||
| 16384 | semver | A semantic version as defined | | | 16384 | semver | A semantic version as defined | | |||
| | | by [SWID]. Also see the | | | | | by [SWID]. Also see the | | |||
| | | [SEMVER] specification for | | | | | [SEMVER] specification for | | |||
| | | more information | | | | | more information | | |||
+-------+-------------------------+-------------------------------+ | +-------+-------------------------+-------------------------------+ | |||
Table 3: Version Scheme Values | Table 3: Version Scheme Values | |||
multipartnumeric and the numbers part of multipartnumeric+suffix are | "multipartnumeric" and the numbers part of "multipartnumeric+suffix" | |||
interpreted as a sequence of numbers and are sorted in | are interpreted as a sequence of numbers and are sorted in | |||
lexicographical order by these numbers (i.e., not by the digits in | lexicographical order by these numbers (i.e., not by the digits in | |||
the numbers) and then the textual suffix (for | the numbers) and then the textual suffix (for | |||
multipartnumeric+suffix). Alphanumeric strings are sorted | "multipartnumeric+suffix"). "alphanumeric" strings are sorted | |||
lexicographically as character strings. Decimal version numbers are | lexicographically as character strings. "decimal" version numbers | |||
interpreted as a single floating point number (e.g., 1.25 is less | are interpreted as single floating-point numbers (e.g., 1.25 is less | |||
than 1.3). | than 1.3). | |||
The values above are registered in the IANA "Software ID Version | The values above are registered in the IANA "Software ID Version | |||
Scheme Values" registry defined in Section 6.2.4. Additional entries | Scheme Values" registry, defined in Section 6.2.4. Additional | |||
will likely be registered over time in this registry. | entries will likely be registered over time in this registry. | |||
A CoSWID producer that is aware of the version scheme that has been | A CoSWID producer that is aware of the version scheme that has been | |||
used to select the version value, SHOULD include the optional | used to select the version value SHOULD include the optional version- | |||
version-scheme item to avoid semantic ambiguity. If the CoSWID | scheme item to avoid semantic ambiguity. If the CoSWID producer does | |||
producer does not have this information, it SHOULD omit the version- | not have this information, it SHOULD omit the version-scheme item. | |||
scheme item. The following heuristics can be used by a CoSWID | The following heuristics can be used by a CoSWID consumer, based on | |||
consumer, based on the version schemes' partially overlapping value | the version schemes' partially overlapping value spaces: | |||
spaces: | ||||
* "decimal" and "multipartnumeric" partially overlap in their value | * "decimal" and "multipartnumeric" partially overlap in their value | |||
space when a value matches a decimal number. When a corresponding | space when a value matches a decimal number. When a corresponding | |||
software-version item's value falls within this overlapping value | software-version item's value falls within this overlapping value | |||
space, it is expected that the "decimal" version scheme is used. | space, it is expected that the "decimal" version scheme is used. | |||
* "multipartnumeric" and "semver" partially overlap in their value | * "multipartnumeric" and "semver" partially overlap in their value | |||
space when a "multipartnumeric" value matches the semantic | space when a "multipartnumeric" value matches the semantic | |||
versioning syntax. When a corresponding software-version item's | versioning syntax. When a corresponding software-version item's | |||
value falls within this overlapping value space, it is expected | value falls within this overlapping value space, it is expected | |||
skipping to change at page 42, line 37 ¶ | skipping to change at line 1911 ¶ | |||
other version scheme is used and "alphanumeric" is not used. | other version scheme is used and "alphanumeric" is not used. | |||
Note that these heuristics are imperfect and can guess wrong, which | Note that these heuristics are imperfect and can guess wrong, which | |||
is the reason the version-scheme item SHOULD be included by the | is the reason the version-scheme item SHOULD be included by the | |||
producer. | producer. | |||
4.2. Entity Role Values | 4.2. Entity Role Values | |||
The following table indicates the index value to use for the entity- | The following table indicates the index value to use for the entity- | |||
entry group's role item (see Section 2.6). These values match the | entry group's role item (see Section 2.6). These values match the | |||
entity roles defined in the ISO/IEC 19770-2:2015 [SWID] | entity roles defined in the ISO/IEC 19770-2:2015 specification | |||
specification. The "Index" value indicates the value to use as the | [SWID]. The "Index" value indicates the value to use as the role | |||
role item's value. The "Role Name" provides human-readable text for | item's value. Items in the "Role Name" column provide human-readable | |||
the value. The "Definition" describes the semantic meaning of each | text for the value. The "Definition" column describes the semantic | |||
entry. | meaning of each entry. | |||
+=======+=================+========================================+ | +=======+=================+========================================+ | |||
| Index | Role Name | Definition | | | Index | Role Name | Definition | | |||
+=======+=================+========================================+ | +=======+=================+========================================+ | |||
| 1 | tagCreator | The person or organization that | | | 1 | tagCreator | The person or organization that | | |||
| | | created the containing SWID or CoSWID | | | | | created the containing SWID or CoSWID | | |||
| | | tag | | | | | tag. | | |||
+-------+-----------------+----------------------------------------+ | +-------+-----------------+----------------------------------------+ | |||
| 2 | softwareCreator | The person or organization entity that | | | 2 | softwareCreator | The person or organization entity that | | |||
| | | created the software component. | | | | | created the software component. | | |||
+-------+-----------------+----------------------------------------+ | +-------+-----------------+----------------------------------------+ | |||
| 3 | aggregator | From [SWID], "An organization or | | | 3 | aggregator | From [SWID], "An organization or | | |||
| | | system that encapsulates software from | | | | | system that encapsulates software from | | |||
| | | their own and/or other organizations | | | | | their own and/or other organizations | | |||
| | | into a different distribution process | | | | | into a different distribution process | | |||
| | | (as in the case of virtualization), or | | | | | (as in the case of virtualization), or | | |||
| | | as a completed system to accomplish a | | | | | as a completed system to accomplish a | | |||
skipping to change at page 43, line 32 ¶ | skipping to change at line 1944 ¶ | |||
| | | value added reseller)." | | | | | value added reseller)." | | |||
+-------+-----------------+----------------------------------------+ | +-------+-----------------+----------------------------------------+ | |||
| 4 | distributor | From [SWID], "An entity that furthers | | | 4 | distributor | From [SWID], "An entity that furthers | | |||
| | | the marketing, selling and/or | | | | | the marketing, selling and/or | | |||
| | | distribution of software from the | | | | | distribution of software from the | | |||
| | | original place of manufacture to the | | | | | original place of manufacture to the | | |||
| | | ultimate user without modifying the | | | | | ultimate user without modifying the | | |||
| | | software, its packaging or its | | | | | software, its packaging or its | | |||
| | | labelling." | | | | | labelling." | | |||
+-------+-----------------+----------------------------------------+ | +-------+-----------------+----------------------------------------+ | |||
| 5 | licensor | From [SAM] as "software licensor", a | | | 5 | licensor | From [SAM], as a "software licensor", | | |||
| | | "person or organization who owns or | | | | | a "person or organization who owns or | | |||
| | | holds the rights to issue a software | | | | | holds the rights to issue a software | | |||
| | | license for a specific software | | | | | license for a specific software | | |||
| | | [component]" | | | | | [component]." | | |||
+-------+-----------------+----------------------------------------+ | +-------+-----------------+----------------------------------------+ | |||
| 6 | maintainer | The person or organization that is | | | 6 | maintainer | The person or organization that is | | |||
| | | responsible for coordinating and | | | | | responsible for coordinating and | | |||
| | | making updates to the source code for | | | | | making updates to the source code for | | |||
| | | the software component. This SHOULD | | | | | the software component. This SHOULD | | |||
| | | be used when the "maintainer" is a | | | | | be used when the "maintainer" is a | | |||
| | | different person or organization than | | | | | different person or organization than | | |||
| | | the original "softwareCreator". | | | | | the original "softwareCreator". | | |||
+-------+-----------------+----------------------------------------+ | +-------+-----------------+----------------------------------------+ | |||
Table 4: Entity Role Values | Table 4: Entity Role Values | |||
The values above are registered in the IANA "Software ID Entity Role | The values above are registered in the IANA "Software ID Entity Role | |||
Values" registry defined in Section 6.2.5. Additional values will | Values" registry, defined in Section 6.2.5. Additional values will | |||
likely be registered over time. | likely be registered over time. | |||
4.3. Link Ownership Values | 4.3. Link Ownership Values | |||
The following table indicates the index value to use for the link- | The following table indicates the index value to use for the link- | |||
entry group's ownership item (see Section 2.7). These values match | entry group's ownership item (see Section 2.7). These values match | |||
the link ownership values defined in the ISO/IEC 19770-2:2015 [SWID] | the link ownership values defined in the ISO/IEC 19770-2:2015 | |||
specification. The "Index" value indicates the value to use as the | specification [SWID]. The "Index" value indicates the value to use | |||
link-entry group ownership item's value. The "Ownership Type" | as the link-entry group ownership item's value. Items in the | |||
provides human-readable text for the value. The "Definition" | "Ownership Type" column provide human-readable text for the value. | |||
describes the semantic meaning of each entry. | The "Definition" column describes the semantic meaning of each entry. | |||
+=======+===========+===============================================+ | +=======+===========+===============================================+ | |||
| Index | Ownership | Definition | | | Index | Ownership | Definition | | |||
| | Type | | | | | Type | | | |||
+=======+===========+===============================================+ | +=======+===========+===============================================+ | |||
| 1 | abandon | If the software component referenced by the | | | 1 | abandon | If the software component referenced | | |||
| | | CoSWID tag is uninstalled, then the | | | | | by the CoSWID tag is uninstalled, | | |||
| | | referenced software SHOULD NOT be | | | | | then the referenced software SHOULD | | |||
| | | uninstalled | | | | | NOT be uninstalled. | | |||
+-------+-----------+-----------------------------------------------+ | +-------+-----------+-----------------------------------------------+ | |||
| 2 | private | If the software component referenced by the | | | 2 | private | If the software component referenced | | |||
| | | CoSWID tag is uninstalled, then the | | | | | by the CoSWID tag is uninstalled, | | |||
| | | referenced software SHOULD be uninstalled as | | | | | then the referenced software SHOULD | | |||
| | | well. | | | | | be uninstalled as well. | | |||
+-------+-----------+-----------------------------------------------+ | +-------+-----------+-----------------------------------------------+ | |||
| 3 | shared | If the software component referenced by the | | | 3 | shared | If the software component referenced | | |||
| | | CoSWID tag is uninstalled, then the | | | | | by the CoSWID tag is uninstalled, | | |||
| | | referenced software SHOULD be uninstalled if | | | | | then the referenced software SHOULD | | |||
| | | no other components sharing the software. | | | | | be uninstalled if no other | | |||
| | | components are sharing the software. | | ||||
+-------+-----------+-----------------------------------------------+ | +-------+-----------+-----------------------------------------------+ | |||
Table 5: Link Ownership Values | Table 5: Link Ownership Values | |||
The values above are registered in the IANA "Software ID Link | The values above are registered in the IANA "Software ID Link | |||
Ownership Values" registry defined in Section 6.2.6. Additional | Ownership Values" registry, defined in Section 6.2.6. Additional | |||
values will likely be registered over time. | values will likely be registered over time. | |||
4.4. Link Rel Values | 4.4. Link Rel Values | |||
The following table indicates the index value to use for the link- | The following table indicates the index value to use for the link- | |||
entry group's rel item (see Section 2.7). These values match the | entry group's rel item (see Section 2.7). These values match the | |||
link rel values defined in the ISO/IEC 19770-2:2015 [SWID] | link rel values defined in the ISO/IEC 19770-2:2015 specification | |||
specification. The "Index" value indicates the value to use as the | [SWID]. The "Index" value indicates the value to use as the link- | |||
link-entry group ownership item's value. The "Relationship Type" | entry group ownership item's value. Items in the "Relationship Type" | |||
provides human-readable text for the value. The "Definition" | column provide human-readable text for the value. The "Definition" | |||
describes the semantic meaning of each entry. | column describes the semantic meaning of each entry. | |||
+=======+===================+=======================================+ | +=======+===================+======================================+ | |||
| Index | Relationship Type | Definition | | | Index | Relationship Type | Definition | | |||
+=======+===================+=======================================+ | +=======+===================+======================================+ | |||
| 1 | ancestor | The link references a software | | | 1 | ancestor | The link references a software tag | | |||
| | | tag for a previous release of | | | | | for a previous release of this | | |||
| | | this software. This can be | | | | | software. This can be useful to | | |||
| | | useful to define an upgrade path. | | | | | define an upgrade path. | | |||
+-------+-------------------+---------------------------------------+ | +-------+-------------------+--------------------------------------+ | |||
| 2 | component | The link references a software | | | 2 | component | The link references a software tag | | |||
| | | tag for a separate component of | | | | | for a separate component of this | | |||
| | | this software. | | | | | software. | | |||
+-------+-------------------+---------------------------------------+ | +-------+-------------------+--------------------------------------+ | |||
| 3 | feature | The link references a | | | 3 | feature | The link references a configurable | | |||
| | | configurable feature of this | | | | | feature of this software that can be | | |||
| | | software that can be enabled or | | | | | enabled or disabled without changing | | |||
| | | disabled without changing the | | | | | the installed files. | | |||
| | | installed files. | | +-------+-------------------+--------------------------------------+ | |||
+-------+-------------------+---------------------------------------+ | | 4 | installationmedia | The link references the installation | | |||
| 4 | installationmedia | The link references the | | | | | package that can be used to install | | |||
| | | installation package that can be | | | | | this software. | | |||
| | | used to install this software. | | +-------+-------------------+--------------------------------------+ | |||
+-------+-------------------+---------------------------------------+ | | 5 | packageinstaller | The link references the installation | | |||
| 5 | packageinstaller | The link references the | | | | | software needed to install this | | |||
| | | installation software needed to | | | | | software. | | |||
| | | install this software. | | +-------+-------------------+--------------------------------------+ | |||
+-------+-------------------+---------------------------------------+ | | 6 | parent | The link references a software tag | | |||
| 6 | parent | The link references a software | | | | | that is the parent of the | | |||
| | | tag that is the parent of the | | | | | referencing tag. This relationship | | |||
| | | referencing tag. This | | | | | can be used when multiple software | | |||
| | | relationship can be used when | | | | | components are part of a software | | |||
| | | multiple software components are | | | | | bundle, where the "parent" is the | | |||
| | | part of a software bundle, where | | | | | software tag for the bundle and each | | |||
| | | the "parent" is the software tag | | | | | child is a "component". In such a | | |||
| | | for the bundle, and each child is | | | | | case, each child component can | | |||
| | | a "component". In such a case, | | | | | provide a "parent" link relationship | | |||
| | | each child component can provide | | | | | to the bundle's software tag, and | | |||
| | | a "parent" link relationship to | | | | | the bundle can provide a "component" | | |||
| | | the bundle's software tag, and | | | | | link relationship to each child | | |||
| | | the bundle can provide a | | | | | software component. | | |||
| | | "component" link relationship to | | +-------+-------------------+--------------------------------------+ | |||
| | | each child software component. | | | 7 | patches | The link references a software tag | | |||
+-------+-------------------+---------------------------------------+ | | | | that the referencing software | | |||
| 7 | patches | The link references a software | | | | | patches. Typically only used for | | |||
| | | tag that the referencing software | | | | | patch tags (see Section 1.1). | | |||
| | | patches. Typically only used for | | +-------+-------------------+--------------------------------------+ | |||
| | | patch tags (see Section 1.1). | | | 8 | requires | The link references a prerequisite | | |||
+-------+-------------------+---------------------------------------+ | | | | for installing this software. A | | |||
| 8 | requires | The link references a | | | | | patch tag (see Section 1.1) can use | | |||
| | | prerequisite for installing this | | | | | this to represent base software or | | |||
| | | software. A patch tag (see | | | | | another patch that needs to be | | |||
| | | Section 1.1) can use this to | | | | | installed first. | | |||
| | | represent base software or | | +-------+-------------------+--------------------------------------+ | |||
| | | another patch that needs to be | | | 9 | see-also | The link references other software | | |||
| | | installed first. | | | | | that may be of interest that relates | | |||
+-------+-------------------+---------------------------------------+ | | | | to this software. | | |||
| 9 | see-also | The link references other | | +-------+-------------------+--------------------------------------+ | |||
| | | software that may be of interest | | | 10 | supersedes | The link references other software | | |||
| | | that relates to this software. | | | | | (e.g., an older software version) | | |||
+-------+-------------------+---------------------------------------+ | | | | that this software replaces. A | | |||
| 10 | supersedes | The link references another | | | | | patch tag (see Section 1.1) can use | | |||
| | | software that this software | | | | | this to represent another patch that | | |||
| | | replaces. A patch tag (see | | | | | this patch incorporates or replaces. | | |||
| | | Section 1.1) can use this to | | +-------+-------------------+--------------------------------------+ | |||
| | | represent another patch that this | | | 11 | supplemental | The link references a software tag | | |||
| | | patch incorporates or replaces. | | | | | that the referencing tag | | |||
+-------+-------------------+---------------------------------------+ | | | | supplements. Used on supplemental | | |||
| 11 | supplemental | The link references a software | | | | | tags (see Section 1.1). | | |||
| | | tag that the referencing tag | | +-------+-------------------+--------------------------------------+ | |||
| | | supplements. Used on | | ||||
| | | supplemental tags (see | | ||||
| | | Section 1.1). | | ||||
+-------+-------------------+---------------------------------------+ | ||||
Table 6: Link Relationship Values | Table 6: Link Relationship Values | |||
The values above are registered in the IANA "Software ID Link | The values above are registered in the IANA "Software ID Link | |||
Relationship Values" registry defined in Section 6.2.7. Additional | Relationship Values" registry, defined in Section 6.2.7. Additional | |||
values will likely be registered over time. | values will likely be registered over time. | |||
4.5. Link Use Values | 4.5. Link Use Values | |||
The following table indicates the index value to use for the link- | The following table indicates the index value to use for the link- | |||
entry group's use item (see Section 2.7). These values match the | entry group's use item (see Section 2.7). These values match the | |||
link use values defined in the ISO/IEC 19770-2:2015 [SWID] | link use values defined in the ISO/IEC 19770-2:2015 specification | |||
specification. The "Index" value indicates the value to use as the | [SWID]. The "Index" value indicates the value to use as the link- | |||
link-entry group use item's value. The "Use Type" provides human- | entry group use item's value. Items in the "Use Type" column provide | |||
readable text for the value. The "Definition" describes the semantic | human-readable text for the value. The "Definition" column describes | |||
meaning of each entry. | the semantic meaning of each entry. | |||
+=======+=============+========================================+ | +=======+=============+========================================+ | |||
| Index | Use Type | Definition | | | Index | Use Type | Definition | | |||
+=======+=============+========================================+ | +=======+=============+========================================+ | |||
| 1 | optional | From [SWID], "Not absolutely required; | | | 1 | optional | From [SWID], "Not absolutely required; | | |||
| | | the [Link]'d software is installed | | | | | the [Link]'d software is installed | | |||
| | | only when specified." | | | | | only when specified." | | |||
+-------+-------------+----------------------------------------+ | +-------+-------------+----------------------------------------+ | |||
| 2 | required | From [SWID], "The [Link]'d software is | | | 2 | required | From [SWID], "The [Link]'d software is | | |||
| | | absolutely required for an operation | | | | | absolutely required for an operation | | |||
| | | software installation." | | | | | software installation." | | |||
+-------+-------------+----------------------------------------+ | +-------+-------------+----------------------------------------+ | |||
| 3 | recommended | From [SWID], "Not absolutely required; | | | 3 | recommended | From [SWID], "Not absolutely required; | | |||
| | | the [Link]'d software is installed | | | | | the [Link]'d software is installed | | |||
| | | unless specified otherwise." | | | | | unless specified otherwise." | | |||
+-------+-------------+----------------------------------------+ | +-------+-------------+----------------------------------------+ | |||
Table 7: Link Use Values | Table 7: Link Use Values | |||
The values above are registered in the IANA "Software ID Link Use | The values above are registered in the IANA "Software ID Link Use | |||
Values" registry defined in Section 6.2.8. Additional values will | Values" registry, defined in Section 6.2.8. Additional values will | |||
likely be registered over time. | likely be registered over time. | |||
5. URI Schemes | 5. "swid" and "swidpath" Expressions | |||
This specification defines the following URI schemes for use in | ||||
CoSWID and to provide interoperability with schemes used in [SWID]. | ||||
Note: These URI schemes are used in [SWID] without an IANA | ||||
registration. The present specification ensures that these URI | ||||
schemes are properly defined going forward. | ||||
// RFC Ed.: throughout this section, please replace RFC-AAAA with the | This specification defines the following scheme names for use in | |||
// RFC number of this specification and remove this note. | CoSWID and to provide interoperability with scheme names used in | |||
[SWID]. Because both the "swid" and "swidpath" scheme names are to | ||||
be interpreted within a local (rather than a global) context, neither | ||||
of these are technically URI scheme names as defined in [RFC3986]. | ||||
For this reason, the "swid" and "swidpath" scheme names are | ||||
registered with IANA as provisional, rather than permanent, scheme | ||||
names. However, registering these scheme names as provisional | ||||
ensures that the scheme names are reserved and that they are properly | ||||
defined going forward. | ||||
5.1. "swid" URI Scheme | The swid and swidpath expressions conform to all rules for URI | |||
syntax. All uses of these expressions encountered within a CoSWID | ||||
are to be interpreted as described in this section. | ||||
There is a need for a scheme name that can be used in URIs that point | 5.1. "swid" Expressions | |||
to a specific software tag by that tag's tag-id, such as the use of | ||||
the link entry as described in Section 2.7. Since this scheme is | ||||
used both in a standards track document and an ISO standard, this | ||||
scheme needs to be used without fear of conflicts with current or | ||||
future actual schemes. In Section 6.6.1, the scheme "swid" is | ||||
registered as a 'permanent' scheme for that purpose. | ||||
URIs specifying the "swid" scheme are used to reference a software | Expressions specifying the "swid" scheme are used to reference a | |||
tag by its tag-id. A tag-id referenced in this way can be used to | software tag by its tag-id. A tag-id referenced in this way can be | |||
identify the tag resource in the context of where it is referenced | used to identify the tag resource in the context of where it is | |||
from. For example, when a tag is installed on a given device, that | referenced from. For example, when a tag is installed on a given | |||
tag can reference related tags on the same device using URIs with | device, that tag can reference related tags on the same device using | |||
this scheme. | expressions with this scheme. | |||
For URIs that use the "swid" scheme, the scheme specific part MUST | For expressions that use the "swid" scheme, the scheme-specific part | |||
consist of a referenced software tag's tag-id. This tag-id MUST be | MUST consist of a referenced software tag's tag-id. This tag-id MUST | |||
URI encoded according to Section 2.1 of [RFC3986]. | be URI encoded according to Section 2.1 of [RFC3986]. | |||
The following expression is a valid example: | The following expression is a valid example: | |||
swid:2df9de35-0aff-4a86-ace6-f7dddd1ade4c | swid:2df9de35-0aff-4a86-ace6-f7dddd1ade4c | |||
5.2. "swidpath" URI Scheme | 5.2. "swidpath" Expressions | |||
There is a need for a scheme name that can be used in URIs to | ||||
identify a collection of specific software tags with data elements | ||||
that match an XPath expression, such as the use of the link entry as | ||||
described in Section 2.7. The scheme named "swidpath" is used for | ||||
this purpose in [SWID], but not registered. To enable usage without | ||||
fear of conflicts with current or future actual schemes, the present | ||||
document registers it as a 'permanent' scheme for that purpose (see | ||||
Section 6.6.2). | ||||
URIs specifying the "swidpath" scheme are used to filter tags out of | Expressions specifying the "swidpath" scheme are used to filter tags | |||
a base collection, so that matching tags are included in the | out of a base collection, so that matching tags are included in the | |||
identified tag collection. The XPath expression | identified tag collection. The XPath expression | |||
[W3C.REC-xpath20-20101214] references the data that must be found in | [W3C.REC-xpath20-20101214] references the data that must be found in | |||
a given software tag out of base collection for that tag to be | a given software tag out of the base collection for that tag to be | |||
considered a matching tag. Tags to be evaluated (the base | considered a matching tag. Tags to be evaluated (the base | |||
collection) include all tags in the context of where the "swidpath | collection) include all tags in the context of where the "swidpath" | |||
URI" is referenced from. For example, when a tag is installed on a | expression is referenced from. For example, when a tag is installed | |||
given device, that tag can reference related tags on the same device | on a given device, that tag can reference related tags on the same | |||
using a URI with this scheme. | device using an expression with this scheme. | |||
For URIs that use the "swidpath" scheme, the following requirements | For URIs that use the "swidpath" scheme, the following requirements | |||
apply: | apply: | |||
* The scheme specific part MUST be an XPath expression as defined by | * The scheme-specific part MUST be an XPath expression as defined by | |||
[W3C.REC-xpath20-20101214]. The included XPath expression will be | [W3C.REC-xpath20-20101214]. The included XPath expression will be | |||
URI encoded according to Section 2.1 of [RFC3986]. | URI encoded according to Section 2.1 of [RFC3986]. | |||
* This XPath is evaluated over SWID tags, or COSWID tags transformed | * This XPath is evaluated over SWID tags, or CoSWID tags transformed | |||
into SWID tags, found on a system. A given tag MUST be considered | into SWID tags, found on a system. A given tag MUST be considered | |||
a match if the XPath evaluation result value has an effective | a match if the XPath evaluation result value has an effective | |||
boolean value of "true" according to [W3C.REC-xpath20-20101214], | boolean value of "true" according to [W3C.REC-xpath20-20101214], | |||
Section 2.4.3. | Section 2.4.3. | |||
6. IANA Considerations | 6. IANA Considerations | |||
This document has a number of IANA considerations, as described in | This document has a number of IANA considerations, as described in | |||
the following subsections. In summary, 6 new registries are | the following subsections. In summary, six new registries are | |||
established with this request, with initial entries provided for each | established by this document, with initial entries provided for each | |||
registry. New values for 5 other registries are also requested. | registry. New values for five other registries are also defined. | |||
6.1. CoSWID Items Registry | 6.1. CoSWID Items Registry | |||
This registry uses integer values as index values in CBOR maps. | This document defines a new registry titled "CoSWID Items". This | |||
registry uses integer values as index values in CBOR maps. Future | ||||
This document defines a new registry titled "CoSWID Items". Future | ||||
registrations for this registry are to be made based on [BCP26] as | registrations for this registry are to be made based on [BCP26] as | |||
follows: | follows: | |||
+==================+=====================================+ | +==================+=====================================+ | |||
| Range | Registration Procedures | | | Range | Registration Procedures | | |||
+==================+=====================================+ | +==================+=====================================+ | |||
| 0-32767 | Standards Action with Expert Review | | | 0-32767 | Standards Action with Expert Review | | |||
+------------------+-------------------------------------+ | +------------------+-------------------------------------+ | |||
| 32768-4294967295 | Specification Required | | | 32768-4294967295 | Specification Required | | |||
+------------------+-------------------------------------+ | +------------------+-------------------------------------+ | |||
Table 8: CoSWID Items Registration Procedures | Table 8: CoSWID Items Registration Procedures | |||
All negative values are reserved for Private Use. | All negative values are reserved for private use. | |||
Initial registrations for the "CoSWID Items" registry are provided | Initial registrations for the "CoSWID Items" registry are provided | |||
below. Assignments consist of an integer index value, the item name, | below. Assignments consist of an integer index value, the item name, | |||
and a reference to the defining specification. | and a reference to the defining specification. | |||
+===============+===========================+===============+ | +===============+===========================+===========+ | |||
| Index | Item Name | Specification | | | Index | Item Name | Reference | | |||
+===============+===========================+===============+ | +===============+===========================+===========+ | |||
| 0 | tag-id | RFC-AAAA | | | 0 | tag-id | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 1 | software-name | RFC-AAAA | | | 1 | software-name | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 2 | entity | RFC-AAAA | | | 2 | entity | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 3 | evidence | RFC-AAAA | | | 3 | evidence | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 4 | link | RFC-AAAA | | | 4 | link | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 5 | software-meta | RFC-AAAA | | | 5 | software-meta | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 6 | payload | RFC-AAAA | | | 6 | payload | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 7 | hash | RFC-AAAA | | | 7 | hash | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 8 | corpus | RFC-AAAA | | | 8 | corpus | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 9 | patch | RFC-AAAA | | | 9 | patch | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 10 | media | RFC-AAAA | | | 10 | media | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 11 | supplemental | RFC-AAAA | | | 11 | supplemental | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 12 | tag-version | RFC-AAAA | | | 12 | tag-version | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 13 | software-version | RFC-AAAA | | | 13 | software-version | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 14 | version-scheme | RFC-AAAA | | | 14 | version-scheme | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 15 | lang | RFC-AAAA | | | 15 | lang | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 16 | directory | RFC-AAAA | | | 16 | directory | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 17 | file | RFC-AAAA | | | 17 | file | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 18 | process | RFC-AAAA | | | 18 | process | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 19 | resource | RFC-AAAA | | | 19 | resource | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 20 | size | RFC-AAAA | | | 20 | size | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 21 | file-version | RFC-AAAA | | | 21 | file-version | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 22 | key | RFC-AAAA | | | 22 | key | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 23 | location | RFC-AAAA | | | 23 | location | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 24 | fs-name | RFC-AAAA | | | 24 | fs-name | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 25 | root | RFC-AAAA | | | 25 | root | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 26 | path-elements | RFC-AAAA | | | 26 | path-elements | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 27 | process-name | RFC-AAAA | | | 27 | process-name | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 28 | pid | RFC-AAAA | | | 28 | pid | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 29 | type | RFC-AAAA | | | 29 | type | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 30 | Unassigned | | | | 30 | Unassigned | | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 31 | entity-name | RFC-AAAA | | | 31 | entity-name | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 32 | reg-id | RFC-AAAA | | | 32 | reg-id | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 33 | role | RFC-AAAA | | | 33 | role | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 34 | thumbprint | RFC-AAAA | | | 34 | thumbprint | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 35 | date | RFC-AAAA | | | 35 | date | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 36 | device-id | RFC-AAAA | | | 36 | device-id | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 37 | artifact | RFC-AAAA | | | 37 | artifact | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 38 | href | RFC-AAAA | | | 38 | href | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 39 | ownership | RFC-AAAA | | | 39 | ownership | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 40 | rel | RFC-AAAA | | | 40 | rel | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 41 | media-type | RFC-AAAA | | | 41 | media-type | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 42 | use | RFC-AAAA | | | 42 | use | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 43 | activation-status | RFC-AAAA | | | 43 | activation-status | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 44 | channel-type | RFC-AAAA | | | 44 | channel-type | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 45 | colloquial-version | RFC-AAAA | | | 45 | colloquial-version | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 46 | description | RFC-AAAA | | | 46 | description | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 47 | edition | RFC-AAAA | | | 47 | edition | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 48 | entitlement-data-required | RFC-AAAA | | | 48 | entitlement-data-required | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 49 | entitlement-key | RFC-AAAA | | | 49 | entitlement-key | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 50 | generator | RFC-AAAA | | | 50 | generator | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 51 | persistent-id | RFC-AAAA | | | 51 | persistent-id | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 52 | product | RFC-AAAA | | | 52 | product | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 53 | product-family | RFC-AAAA | | | 53 | product-family | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 54 | revision | RFC-AAAA | | | 54 | revision | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 55 | summary | RFC-AAAA | | | 55 | summary | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 56 | unspsc-code | RFC-AAAA | | | 56 | unspsc-code | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 57 | unspsc-version | RFC-AAAA | | | 57 | unspsc-version | RFC 9393 | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
| 58-4294967295 | Unassigned | | | | 58-4294967295 | Unassigned | | | |||
+---------------+---------------------------+---------------+ | +---------------+---------------------------+-----------+ | |||
Table 9: CoSWID Items Initial Registrations | Table 9: CoSWID Items Initial Registrations | |||
6.2. Software ID Values Registries | 6.2. Registries for Software ID Values | |||
The following IANA registries provide a mechanism for new values to | The following IANA registries provide a mechanism for new values to | |||
be added over time to common enumerations used by SWID and CoSWID. | be added over time to common enumerations used by SWID and CoSWID. | |||
While neither the CoSWID nor SWID specification is subordinate to the | While neither the CoSWID specification nor the SWID specification is | |||
other and will evolve as their respective standards group chooses, | subordinate to the other and will evolve as their respective | |||
there is value in supporting alignment between the two standards. | standards group chooses, there is value in supporting alignment | |||
Shared use of common code points, as spelled out in these registries, | between the two standards. Shared use of common code points, as | |||
will facilitate this alignment, hence the intent for shared use of | spelled out in these registries, will facilitate this alignment -- | |||
these registries and the decision to use "swidsoftware-id" (rather | hence the intent for shared use of these registries and the decision | |||
than "swid" or "coswid") in registry names. | to use "swidsoftware-id" (rather than "swid" or "coswid") in registry | |||
names. | ||||
6.2.1. Registration Procedures | 6.2.1. Registration Procedures | |||
The following registries allow for the registration of index values | The following registries allow for the registration of index values | |||
and names. New registrations will be permitted through either a | and names. New registrations will be permitted through either a | |||
Standards Action with Expert Review policy or a Specification | Standards Action with Expert Review policy or a Specification | |||
Required policy [BCP26]. | Required policy [BCP26]. | |||
The following registries also reserve the integer-based index values | The following registries also reserve the integer-based index values | |||
in the range of -1 to -256 for private use as defined by Section 4.1 | in the range of -1 to -256 for private use as defined by Section 4.1 | |||
of [BCP26]. This allows values -1 to -24 to be expressed as a single | of [BCP26]. This allows values -1 to -24 to be expressed as a single | |||
uint_8t in CBOR, and values -25 to -256 to be expressed using an | uint8_t in CBOR and values -25 to -256 to be expressed using an | |||
additional uint_8t in CBOR. | additional uint8_t in CBOR. | |||
6.2.2. Private Use of Index and Name Values | 6.2.2. Private Use of Index and Name Values | |||
The integer-based index values in the private use range (-1 to -256) | The integer-based index values in the private use range (-1 to -256) | |||
are intended for testing purposes and closed environments; values in | are intended for testing purposes and closed environments; values in | |||
other ranges SHOULD NOT be assigned for testing. | other ranges SHOULD NOT be assigned for testing. | |||
For names that correspond to private use index values, an | For names that correspond to private use index values, an | |||
Internationalized Domain Name prefix MUST be used to prevent name | Internationalized Domain Name prefix MUST be used to prevent name | |||
conflicts using the form: | conflicts using the form | |||
domainprefix/name | domainprefix/name | |||
Where both "domainprefix" and "name" MUST each be either an NR-LDH | ||||
label or a U-label as defined by [RFC5890], and "name" also MUST be a | where both "domainprefix" and "name" MUST each be either a Non- | |||
unique name within the namespace defined by the "domainprefix". Use | Reserved LDH (NR-LDH) label or a U-label as defined by [RFC5890], and | |||
of a prefix in this way allows for a name to be used in the private | "name" also MUST be a unique name within the namespace defined by the | |||
use range. This is consistent with the guidance in [BCP178]. | "domainprefix". ("LDH" is an abbreviation for "letters, digits, | |||
hyphen".) Using a prefix in this way allows for a name to be used in | ||||
the private use range. This is consistent with the guidance in | ||||
[BCP178]. | ||||
6.2.3. Expert Review Criteria | 6.2.3. Expert Review Criteria | |||
Designated experts MUST ensure that new registration requests meet | Designated experts MUST ensure that new registration requests meet | |||
the following additional criteria: | the following additional criteria: | |||
* The requesting specification MUST provide a clear semantic | * The requesting specification MUST provide a clear semantic | |||
definition for the new entry. This definition MUST clearly | definition for the new entry. This definition MUST clearly | |||
differentiate the requested entry from other previously registered | differentiate the requested entry from other previously registered | |||
entries. | entries. | |||
* The requesting specification MUST describe the intended use of the | * The requesting specification MUST describe the intended use of the | |||
entry, including any co-constraints that exist between the use of | entry, including any co-constraints that exist between (1) the use | |||
the entry's index value or name, and other values defined within | of the entry's index value or name and (2) other values defined | |||
the SWID/CoSWID model. | within the SWID/CoSWID model. | |||
* Index values and names outside the private use space MUST NOT be | * Index values and names outside the private use space MUST NOT be | |||
used without registration. This is considered squatting and MUST | used without registration. This is considered "squatting" and | |||
be avoided. Designated experts MUST ensure that reviewed | MUST be avoided. Designated experts MUST ensure that reviewed | |||
specifications register all appropriate index values and names. | specifications register all appropriate index values and names. | |||
* Standards track documents MAY include entries registered in the | * Standards Track documents MAY include entries registered in the | |||
range reserved for entries under the Specification Required | range reserved for entries under the Specification Required | |||
policy. This can occur when a standards track document provides | policy. This can occur when a Standards Track document provides | |||
further guidance on the use of index values and names that are in | further guidance on the use of index values and names that are in | |||
common use, but were not registered with IANA. This situation | common use but were not registered with IANA. This situation | |||
SHOULD be avoided. | SHOULD be avoided. | |||
* All registered names MUST be valid according to the XML Schema | * All registered names MUST be valid according to the XML Schema | |||
NMTOKEN data type (see [W3C.REC-xmlschema-2-20041028], | NMTOKEN data type (see [W3C.REC-xmlschema-2-20041028], | |||
Section 3.3.4). This ensures that registered names are compatible | Section 3.3.4). This ensures that registered names are compatible | |||
with the SWID format [SWID] where they are used. | with the SWID format [SWID] where they are used. | |||
* Registration of vanity names SHOULD be discouraged. The | * Registration of vanity names SHOULD be discouraged. The | |||
requesting specification MUST provide a description of how a | requesting specification MUST provide a description of how a | |||
requested name will allow for use by multiple stakeholders. | requested name will allow for use by multiple stakeholders. | |||
6.2.4. Software ID Version Scheme Values Registry | 6.2.4. Software ID Version Scheme Values Registry | |||
This document establishes a new registry titled "Software ID Version | This document establishes a new registry titled "Software ID Version | |||
Scheme Values". This registry provides index values for use as | Scheme Values". This registry provides index values for use as | |||
version-scheme item values in this document and version scheme names | version-scheme item values in this document and Version Scheme Names | |||
for use in [SWID]. | for use in [SWID]. | |||
[TO BE REMOVED: This registration should take place at the following | ||||
location: https://www.iana.org/assignments/software-id] | ||||
This registry uses the registration procedures defined in | This registry uses the registration procedures defined in | |||
Section 6.2.1 with the following associated ranges: | Section 6.2.1, with the following associated ranges: | |||
+=============+=====================================+ | +=============+=====================================+ | |||
| Range | Registration Procedures | | | Range | Registration Procedures | | |||
+=============+=====================================+ | +=============+=====================================+ | |||
| 0-16383 | Standards Action with Expert Review | | | 0-16383 | Standards Action with Expert Review | | |||
+-------------+-------------------------------------+ | +-------------+-------------------------------------+ | |||
| 16384-65535 | Specification Required | | | 16384-65535 | Specification Required | | |||
+-------------+-------------------------------------+ | +-------------+-------------------------------------+ | |||
Table 10: Software ID Version Scheme Registration | Table 10: Software ID Version Scheme Registration | |||
Procedures | Procedures | |||
Assignments MUST consist of an integer Index value, the Version | Assignments MUST consist of an integer index value, the Version | |||
Scheme Name, and a reference to the defining specification. | Scheme Name, and a reference to the defining specification. | |||
Initial registrations for the "Software ID Version Scheme Values" | Initial registrations for the "Software ID Version Scheme Values" | |||
registry are provided below, which are derived from the textual | registry are provided below and are derived from the textual Version | |||
version scheme names defined in [SWID]. | Scheme Names defined in [SWID]. | |||
+=============+=========================+=================+ | +=============+=========================+=======================+ | |||
| Index | Version Scheme Name | Specification | | | Index | Version Scheme Name | Reference | | |||
+=============+=========================+=================+ | +=============+=========================+=======================+ | |||
| 0 | Reserved | | | | 0 | Reserved | | | |||
+-------------+-------------------------+-----------------+ | +-------------+-------------------------+-----------------------+ | |||
| 1 | multipartnumeric | See Section 4.1 | | | 1 | multipartnumeric | RFC 9393, Section 4.1 | | |||
+-------------+-------------------------+-----------------+ | +-------------+-------------------------+-----------------------+ | |||
| 2 | multipartnumeric+suffix | See Section 4.1 | | | 2 | multipartnumeric+suffix | RFC 9393, Section 4.1 | | |||
+-------------+-------------------------+-----------------+ | +-------------+-------------------------+-----------------------+ | |||
| 3 | alphanumeric | See Section 4.1 | | | 3 | alphanumeric | RFC 9393, Section 4.1 | | |||
+-------------+-------------------------+-----------------+ | +-------------+-------------------------+-----------------------+ | |||
| 4 | decimal | See Section 4.1 | | | 4 | decimal | RFC 9393, Section 4.1 | | |||
+-------------+-------------------------+-----------------+ | +-------------+-------------------------+-----------------------+ | |||
| 5-16383 | Unassigned | | | | 5-16383 | Unassigned | | | |||
+-------------+-------------------------+-----------------+ | +-------------+-------------------------+-----------------------+ | |||
| 16384 | semver | See Section 4.1 | | | 16384 | semver | RFC 9393, Section 4.1 | | |||
+-------------+-------------------------+-----------------+ | +-------------+-------------------------+-----------------------+ | |||
| 16385-65535 | Unassigned | | | | 16385-65535 | Unassigned | | | |||
+-------------+-------------------------+-----------------+ | +-------------+-------------------------+-----------------------+ | |||
Table 11: Software ID Version Scheme Initial Registrations | Table 11: Software ID Version Scheme Initial Registrations | |||
Registrations MUST conform to the expert review criteria defined in | Registrations MUST conform to the expert review criteria defined in | |||
Section 6.2.3. | Section 6.2.3. | |||
Designated experts MUST also ensure that newly requested entries | Designated experts MUST also ensure that newly requested entries | |||
define a value space for the corresponding version item that is | define a value space for the corresponding software-version item that | |||
unique from other previously registered entries. Note: The initial | is unique from other previously registered entries. | |||
registrations violate this requirement, but are included for | ||||
backwards compatibility with [SWID]. See also Section 4.1. | | Note: The initial registrations violate this requirement but | |||
| are included for backwards compatibility with [SWID]. See also | ||||
| Section 4.1. | ||||
6.2.5. Software ID Entity Role Values Registry | 6.2.5. Software ID Entity Role Values Registry | |||
This document establishes a new registry titled "Software ID Entity | This document establishes a new registry titled "Software ID Entity | |||
Role Values". This registry provides index values for use as entity- | Role Values". This registry provides index values for use as entity- | |||
entry role item values in this document and entity role names for use | entry role item values in this document and entity role names for use | |||
in [SWID]. | in [SWID]. | |||
[TO BE REMOVED: This registration should take place at the following | ||||
location: https://www.iana.org/assignments/software-id] | ||||
This registry uses the registration procedures defined in | This registry uses the registration procedures defined in | |||
Section 6.2.1 with the following associated ranges: | Section 6.2.1, with the following associated ranges: | |||
+=========+=====================================+ | +=========+=====================================+ | |||
| Range | Registration Procedures | | | Range | Registration Procedures | | |||
+=========+=====================================+ | +=========+=====================================+ | |||
| 0-127 | Standards Action with Expert Review | | | 0-127 | Standards Action with Expert Review | | |||
+---------+-------------------------------------+ | +---------+-------------------------------------+ | |||
| 128-255 | Specification Required | | | 128-255 | Specification Required | | |||
+---------+-------------------------------------+ | +---------+-------------------------------------+ | |||
Table 12: Software ID Entity Role | Table 12: Software ID Entity Role | |||
Registration Procedures | Registration Procedures | |||
Assignments consist of an integer Index value, a Role Name, and a | Assignments consist of an integer index value, a role name, and a | |||
reference to the defining specification. | reference to the defining specification. | |||
Initial registrations for the "Software ID Entity Role Values" | Initial registrations for the "Software ID Entity Role Values" | |||
registry are provided below, which are derived from the textual | registry are provided below and are derived from the textual entity | |||
entity role names defined in [SWID]. | role names defined in [SWID]. | |||
+=======+=================+=================+ | +=======+=================+=======================+ | |||
| Index | Role Name | Specification | | | Index | Role Name | Reference | | |||
+=======+=================+=================+ | +=======+=================+=======================+ | |||
| 0 | Reserved | | | | 0 | Reserved | | | |||
+-------+-----------------+-----------------+ | +-------+-----------------+-----------------------+ | |||
| 1 | tagCreator | See Section 4.2 | | | 1 | tagCreator | RFC 9393, Section 4.2 | | |||
+-------+-----------------+-----------------+ | +-------+-----------------+-----------------------+ | |||
| 2 | softwareCreator | See Section 4.2 | | | 2 | softwareCreator | RFC 9393, Section 4.2 | | |||
+-------+-----------------+-----------------+ | +-------+-----------------+-----------------------+ | |||
| 3 | aggregator | See Section 4.2 | | | 3 | aggregator | RFC 9393, Section 4.2 | | |||
+-------+-----------------+-----------------+ | +-------+-----------------+-----------------------+ | |||
| 4 | distributor | See Section 4.2 | | | 4 | distributor | RFC 9393, Section 4.2 | | |||
+-------+-----------------+-----------------+ | +-------+-----------------+-----------------------+ | |||
| 5 | licensor | See Section 4.2 | | | 5 | licensor | RFC 9393, Section 4.2 | | |||
+-------+-----------------+-----------------+ | +-------+-----------------+-----------------------+ | |||
| 6 | maintainer | See Section 4.2 | | | 6 | maintainer | RFC 9393, Section 4.2 | | |||
+-------+-----------------+-----------------+ | +-------+-----------------+-----------------------+ | |||
| 7-255 | Unassigned | | | | 7-255 | Unassigned | | | |||
+-------+-----------------+-----------------+ | +-------+-----------------+-----------------------+ | |||
Table 13: Software ID Entity Role Initial | Table 13: Software ID Entity Role Initial | |||
Registrations | Registrations | |||
Registrations MUST conform to the expert review criteria defined in | Registrations MUST conform to the expert review criteria defined in | |||
Section 6.2.3. | Section 6.2.3. | |||
6.2.6. Software ID Link Ownership Values Registry | 6.2.6. Software ID Link Ownership Values Registry | |||
This document establishes a new registry titled "Software ID Link | This document establishes a new registry titled "Software ID Link | |||
Ownership Values". This registry provides index values for use as | Ownership Values". This registry provides index values for use as | |||
link-entry ownership item values in this document and link ownership | link-entry ownership item values in this document and link ownership | |||
names for use in [SWID]. | names for use in [SWID]. | |||
[TO BE REMOVED: This registration should take place at the following | ||||
location: https://www.iana.org/assignments/software-id] | ||||
This registry uses the registration procedures defined in | This registry uses the registration procedures defined in | |||
Section 6.2.1 with the following associated ranges: | Section 6.2.1, with the following associated ranges: | |||
+=========+=====================================+ | +=========+=====================================+ | |||
| Range | Registration Procedures | | | Range | Registration Procedures | | |||
+=========+=====================================+ | +=========+=====================================+ | |||
| 0-127 | Standards Action with Expert Review | | | 0-127 | Standards Action with Expert Review | | |||
+---------+-------------------------------------+ | +---------+-------------------------------------+ | |||
| 128-255 | Specification Required | | | 128-255 | Specification Required | | |||
+---------+-------------------------------------+ | +---------+-------------------------------------+ | |||
Table 14: Software ID Link Ownership | Table 14: Software ID Link Ownership | |||
Registration Procedures | Registration Procedures | |||
Assignments consist of an integer Index value, an Ownership Type | Assignments consist of an integer index value, an ownership type | |||
Name, and a reference to the defining specification. | name, and a reference to the defining specification. | |||
Initial registrations for the "Software ID Link Ownership Values" | Initial registrations for the "Software ID Link Ownership Values" | |||
registry are provided below, which are derived from the textual | registry are provided below and are derived from the textual entity | |||
entity role names defined in [SWID]. | role names defined in [SWID]. | |||
+=======+=====================+=================+ | +=======+=====================+=======================+ | |||
| Index | Ownership Type Name | Definition | | | Index | Ownership Type Name | Reference | | |||
+=======+=====================+=================+ | +=======+=====================+=======================+ | |||
| 0 | Reserved | | | | 0 | Reserved | | | |||
+-------+---------------------+-----------------+ | +-------+---------------------+-----------------------+ | |||
| 1 | abandon | See Section 4.3 | | | 1 | abandon | RFC 9393, Section 4.3 | | |||
+-------+---------------------+-----------------+ | +-------+---------------------+-----------------------+ | |||
| 2 | private | See Section 4.3 | | | 2 | private | RFC 9393, Section 4.3 | | |||
+-------+---------------------+-----------------+ | +-------+---------------------+-----------------------+ | |||
| 3 | shared | See Section 4.3 | | | 3 | shared | RFC 9393, Section 4.3 | | |||
+-------+---------------------+-----------------+ | +-------+---------------------+-----------------------+ | |||
| 4-255 | Unassigned | | | | 4-255 | Unassigned | | | |||
+-------+---------------------+-----------------+ | +-------+---------------------+-----------------------+ | |||
Table 15: Software ID Link Ownership Inital | Table 15: Software ID Link Ownership Initial | |||
Registrations | Registrations | |||
Registrations MUST conform to the expert review criteria defined in | Registrations MUST conform to the expert review criteria defined in | |||
Section 6.2.3. | Section 6.2.3. | |||
6.2.7. Software ID Link Relationship Values Registry | 6.2.7. Software ID Link Relationship Values Registry | |||
This document establishes a new registry titled "Software ID Link | This document establishes a new registry titled "Software ID Link | |||
Relationship Values". This registry provides index values for use as | Relationship Values". This registry provides index values for use as | |||
link-entry rel item values in this document and link ownership names | link-entry rel item values in this document and link ownership names | |||
for use in [SWID]. | for use in [SWID]. | |||
[TO BE REMOVED: This registration should take place at the following | ||||
location: https://www.iana.org/assignments/software-id] | ||||
This registry uses the registration procedures defined in | This registry uses the registration procedures defined in | |||
Section 6.2.1 with the following associated ranges: | Section 6.2.1, with the following associated ranges: | |||
+=============+=====================================+ | +=============+=====================================+ | |||
| Range | Registration Procedures | | | Range | Registration Procedures | | |||
+=============+=====================================+ | +=============+=====================================+ | |||
| 0-32767 | Standards Action with Expert Review | | | 0-32767 | Standards Action with Expert Review | | |||
+-------------+-------------------------------------+ | +-------------+-------------------------------------+ | |||
| 32768-65535 | Specification Required | | | 32768-65535 | Specification Required | | |||
+-------------+-------------------------------------+ | +-------------+-------------------------------------+ | |||
Table 16: Software ID Link Relationship | Table 16: Software ID Link Relationship | |||
Registration Procedures | Registration Procedures | |||
Assignments consist of an integer Index value, the Relationship Type | Assignments consist of an integer index value, the relationship type | |||
Name, and a reference to the defining specification. | name, and a reference to the defining specification. | |||
Initial registrations for the "Software ID Link Relationship Values" | Initial registrations for the "Software ID Link Relationship Values" | |||
registry are provided below, which are derived from the link | registry are provided below and are derived from the link | |||
relationship values defined in [SWID]. | relationship values defined in [SWID]. | |||
+==========+========================+=================+ | +==========+========================+=======================+ | |||
| Index | Relationship Type Name | Specification | | | Index | Relationship Type Name | Reference | | |||
+==========+========================+=================+ | +==========+========================+=======================+ | |||
| 0 | Reserved | | | | 0 | Reserved | | | |||
+----------+------------------------+-----------------+ | +----------+------------------------+-----------------------+ | |||
| 1 | ancestor | See Section 4.4 | | | 1 | ancestor | RFC 9393, Section 4.4 | | |||
+----------+------------------------+-----------------+ | +----------+------------------------+-----------------------+ | |||
| 2 | component | See Section 4.4 | | | 2 | component | RFC 9393, Section 4.4 | | |||
+----------+------------------------+-----------------+ | +----------+------------------------+-----------------------+ | |||
| 3 | feature | See Section 4.4 | | | 3 | feature | RFC 9393, Section 4.4 | | |||
+----------+------------------------+-----------------+ | +----------+------------------------+-----------------------+ | |||
| 4 | installationmedia | See Section 4.4 | | | 4 | installationmedia | RFC 9393, Section 4.4 | | |||
+----------+------------------------+-----------------+ | +----------+------------------------+-----------------------+ | |||
| 5 | packageinstaller | See Section 4.4 | | | 5 | packageinstaller | RFC 9393, Section 4.4 | | |||
+----------+------------------------+-----------------+ | +----------+------------------------+-----------------------+ | |||
| 6 | parent | See Section 4.4 | | | 6 | parent | RFC 9393, Section 4.4 | | |||
+----------+------------------------+-----------------+ | +----------+------------------------+-----------------------+ | |||
| 7 | patches | See Section 4.4 | | | 7 | patches | RFC 9393, Section 4.4 | | |||
+----------+------------------------+-----------------+ | +----------+------------------------+-----------------------+ | |||
| 8 | requires | See Section 4.4 | | | 8 | requires | RFC 9393, Section 4.4 | | |||
+----------+------------------------+-----------------+ | +----------+------------------------+-----------------------+ | |||
| 9 | see-also | See Section 4.4 | | | 9 | see-also | RFC 9393, Section 4.4 | | |||
+----------+------------------------+-----------------+ | +----------+------------------------+-----------------------+ | |||
| 10 | supersedes | See Section 4.4 | | | 10 | supersedes | RFC 9393, Section 4.4 | | |||
+----------+------------------------+-----------------+ | +----------+------------------------+-----------------------+ | |||
| 11 | supplemental | See Section 4.4 | | | 11 | supplemental | RFC 9393, Section 4.4 | | |||
+----------+------------------------+-----------------+ | +----------+------------------------+-----------------------+ | |||
| 12-65535 | Unassigned | | | | 12-65535 | Unassigned | | | |||
+----------+------------------------+-----------------+ | +----------+------------------------+-----------------------+ | |||
Table 17: Software ID Link Relationship Initial | Table 17: Software ID Link Relationship Initial Registrations | |||
Registrations | ||||
Registrations MUST conform to the expert review criteria defined in | Registrations MUST conform to the expert review criteria defined in | |||
Section 6.2.3. | Section 6.2.3. | |||
Designated experts MUST also ensure that a newly requested entry | Designated experts MUST also ensure that a newly requested entry | |||
documents the URI schemes allowed to be used in an href associated | documents the URI schemes allowed to be used in an href associated | |||
with the link relationship and the expected resolution behavior of | with the link relationship and the expected resolution behavior of | |||
these URI schemes. This will help to ensure that applications | these URI schemes. This will help to ensure that applications | |||
processing software tags are able to interoperate when resolving | processing software tags are able to interoperate when resolving | |||
resources referenced by a link of a given type. | resources referenced by a link of a given type. | |||
6.2.8. Software ID Link Use Values Registry | 6.2.8. Software ID Link Use Values Registry | |||
This document establishes a new registry titled "Software ID Link Use | This document establishes a new registry titled "Software ID Link Use | |||
Values". This registry provides index values for use as link-entry | Values". This registry provides index values for use as link-entry | |||
use item values in this document and link use names for use in | use item values in this document and link use names for use in | |||
[SWID]. | [SWID]. | |||
[TO BE REMOVED: This registration should take place at the following | ||||
location: https://www.iana.org/assignments/software-id] | ||||
This registry uses the registration procedures defined in | This registry uses the registration procedures defined in | |||
Section 6.2.1 with the following associated ranges: | Section 6.2.1, with the following associated ranges: | |||
+=========+=====================================+ | +=========+=====================================+ | |||
| Range | Registration Procedures | | | Range | Registration Procedures | | |||
+=========+=====================================+ | +=========+=====================================+ | |||
| 0-127 | Standards Action with Expert Review | | | 0-127 | Standards Action with Expert Review | | |||
+---------+-------------------------------------+ | +---------+-------------------------------------+ | |||
| 128-255 | Specification Required | | | 128-255 | Specification Required | | |||
+---------+-------------------------------------+ | +---------+-------------------------------------+ | |||
Table 18: Software ID Link Use Registration | Table 18: Software ID Link Use Registration | |||
Procedures | Procedures | |||
Assignments consist of an integer Index value, the Link Use Type | Assignments consist of an integer index value, the link use type | |||
Name, and a reference to the defining specification. | name, and a reference to the defining specification. | |||
Initial registrations for the "Software ID Link Use Values" registry | Initial registrations for the "Software ID Link Use Values" registry | |||
are provided below, which are derived from the link relationship | are provided below and are derived from the link relationship values | |||
values defined in [SWID]. | defined in [SWID]. | |||
+=======+====================+=================+ | +=======+====================+=======================+ | |||
| Index | Link Use Type Name | Specification | | | Index | Link Use Type Name | Reference | | |||
+=======+====================+=================+ | +=======+====================+=======================+ | |||
| 0 | Reserved | | | | 0 | Reserved | | | |||
+-------+--------------------+-----------------+ | +-------+--------------------+-----------------------+ | |||
| 1 | optional | See Section 4.5 | | | 1 | optional | RFC 9393, Section 4.5 | | |||
+-------+--------------------+-----------------+ | +-------+--------------------+-----------------------+ | |||
| 2 | required | See Section 4.5 | | | 2 | required | RFC 9393, Section 4.5 | | |||
+-------+--------------------+-----------------+ | +-------+--------------------+-----------------------+ | |||
| 3 | recommended | See Section 4.5 | | | 3 | recommended | RFC 9393, Section 4.5 | | |||
+-------+--------------------+-----------------+ | +-------+--------------------+-----------------------+ | |||
| 4-255 | Unassigned | | | | 4-255 | Unassigned | | | |||
+-------+--------------------+-----------------+ | +-------+--------------------+-----------------------+ | |||
Table 19: Software ID Link Use Initial | Table 19: Software ID Link Use Initial Registrations | |||
Registrations | ||||
Registrations MUST conform to the expert review criteria defined in | Registrations MUST conform to the expert review criteria defined in | |||
Section 6.2.3. | Section 6.2.3. | |||
6.3. swid+cbor Media Type Registration | 6.3. swid+cbor Media Type Registration | |||
IANA is requested to add the following to the IANA "Media Types" | IANA has added the following to the "Media Types" registry | |||
registry [IANA.media-types]. | [IANA.media-types]. | |||
Type name: application | Type name: application | |||
Subtype name: swid+cbor | Subtype name: swid+cbor | |||
Required parameters: none | Required parameters: none | |||
Optional parameters: none | Optional parameters: none | |||
Encoding considerations: Binary (encoded as CBOR [RFC8949]). See | Encoding considerations: Binary (encoded as CBOR [RFC8949]). See | |||
RFC-AAAA for details. | RFC 9393 for details. | |||
Security considerations: See Section 9 of RFC-AAAA. | Security considerations: See Section 9 of RFC 9393. | |||
Interoperability considerations: Applications MAY ignore any key | Interoperability considerations: Applications MAY ignore any key | |||
value pairs that they do not understand. This allows backwards | value pairs that they do not understand. This allows backwards- | |||
compatible extensions to this specification. | compatible extensions to this specification. | |||
Published specification: RFC-AAAA | Published specification: RFC 9393 | |||
Applications that use this media type: The type is used by software | Applications that use this media type: The type is used by software | |||
asset management systems, vulnerability assessment systems, and in | asset management systems and vulnerability assessment systems and | |||
applications that use remote integrity verification. | is used in applications that use remote integrity verification. | |||
Fragment Identifier Considerations: The syntax and semantics of | Fragment Identifier Considerations: The syntax and semantics of | |||
fragment identifiers specified for "application/swid+cbor" are as | fragment identifiers specified for "application/swid+cbor" are as | |||
specified for "application/cbor". (At publication of RFC-AAAA, there | specified for "application/cbor". (At publication of RFC 9393, | |||
is no fragment identification syntax defined for "application/cbor".) | there is no fragment identification syntax defined for | |||
"application/cbor".) | ||||
Additional information: | Additional information: | |||
Magic number(s): If tagged, the first five bytes in hex: da 53 57 | ||||
49 44 (see Section 8 of RFC 9393). | ||||
File extension(s): coswid | ||||
Macintosh file type code(s): none | ||||
Macintosh Universal Type Identifier code: org.ietf.coswid | ||||
conforms to public.data. | ||||
Magic number(s): if tagged, first five bytes in hex: da 53 57 49 44 | Person & email address to contact for further information: | |||
(see Section 8 in RFC-AAAA) | IESG <iesg@ietf.org> | |||
File extension(s): coswid | ||||
Macintosh file type code(s): none | ||||
Macintosh Universal Type Identifier code: org.ietf.coswid conforms to | ||||
public.data | ||||
Person & email address to contact for further information: IESG | ||||
<iesg@ietf.org> | ||||
Intended usage: COMMON | Intended usage: COMMON | |||
Restrictions on usage: None | Restrictions on usage: none | |||
Author: Henk Birkholz <henk.birkholz@sit.fraunhofer.de> | Author: Henk Birkholz <henk.birkholz@sit.fraunhofer.de> | |||
Change controller: IESG | Change controller: IESG | |||
6.4. CoAP Content-Format Registration | 6.4. CoAP Content-Format Registration | |||
IANA is requested to assign a CoAP Content-Format ID for the CoSWID | IANA has assigned a CoAP Content-Format ID for the CoSWID media type | |||
media type in the "CoAP Content-Formats" sub-registry, from the "IETF | in the "CoAP Content-Formats" subregistry, from the "IETF Review or | |||
Review or IESG Approval" space (256..999), within the "CoRE | IESG Approval" space (256..999), within the "CoRE Parameters" | |||
Parameters" registry [RFC7252] [IANA.core-parameters]: | registry [RFC7252] [IANA.core-parameters]: | |||
+=======================+==========+======+===========+ | +=======================+================+=====+===========+ | |||
| Media type | Encoding | ID | Reference | | | Content Type | Content Coding | ID | Reference | | |||
+=======================+==========+======+===========+ | +=======================+================+=====+===========+ | |||
| application/swid+cbor | - | TBD1 | RFC-AAAA | | | application/swid+cbor | - | 258 | RFC 9393 | | |||
+-----------------------+----------+------+-----------+ | +-----------------------+----------------+-----+-----------+ | |||
Table 20: CoAP Content-Format IDs | Table 20: CoAP Content-Format IDs | |||
6.5. CBOR Tag Registration | 6.5. CBOR Tag Registration | |||
IANA is requested to allocate a tag in the "CBOR Tags" registry | IANA has allocated a tag in the "CBOR Tags" registry | |||
[IANA.cbor-tags], preferably with the specific value requested: | [IANA.cbor-tags]: | |||
+============+===========+=============================+ | +============+===========+=====================+===========+ | |||
| Tag | Data Item | Semantics | | | Tag | Data Item | Semantics | Reference | | |||
+============+===========+=============================+ | +============+===========+=====================+===========+ | |||
| 1398229316 | map | Concise Software Identifier | | | 1398229316 | map | Concise Software | RFC 9393 | | |||
| | | (CoSWID) [RFC-AAAA] | | | | | Identifier (CoSWID) | | | |||
+------------+-----------+-----------------------------+ | +------------+-----------+---------------------+-----------+ | |||
Table 21: CoSWID CBOR Tag | Table 21: CoSWID CBOR Tag | |||
6.6. URI Scheme Registrations | 6.6. URI Scheme Registrations | |||
The ISO 19770-2:2015 SWID specification describes use of the "swid" | The ISO 19770-2:2015 SWID specification [SWID] describes the use of | |||
and "swidpath" URI schemes, which are currently in use in | the "swid" and "swidpath" URI schemes, which are currently in use in | |||
implementations. This document continues this use for CoSWID. The | implementations. This document continues this use for CoSWID. The | |||
following subsections provide registrations for these schemes in to | following subsections provide registrations for these schemes to | |||
ensure that a permanent registration exists for these schemes that is | ensure that a registration for these schemes exists that is suitable | |||
suitable for use in the SWID and CoSWID specifications. | for use in the SWID and CoSWID specifications. | |||
URI schemes are registered within the "Uniform Resource Identifier | URI schemes are registered within the "Uniform Resource Identifier | |||
(URI) Schemes" registry maintained at [IANA.uri-schemes]. | (URI) Schemes" registry maintained at [IANA.uri-schemes]. | |||
6.6.1. URI-scheme swid | 6.6.1. URI Scheme "swid" | |||
IANA is requested to register the URI scheme "swid". This | IANA has registered the URI scheme "swid". This registration | |||
registration request complies with [RFC7595]. | complies with [RFC7595]. | |||
Scheme name: | Scheme name: swid | |||
swid | ||||
Status: | Status: Provisional | |||
Permanent | ||||
Applications/protocols that use this scheme name: | Applications/protocols that use this scheme name: Applications that | |||
Applications that require Software-IDs (SWIDs) or Concise | require Software IDs (SWIDs) or Concise Software IDs (CoSWIDs); | |||
Software-IDs (CoSWIDs); see Section 5.1 of RFC-AAAA. | see Section 5.1 of RFC 9393. | |||
Contact: | Contact: IETF Chair <chair@ietf.org> | |||
IETF Chair <chair@ietf.org> | ||||
Change controller: | Change controller: IESG <iesg@ietf.org> | |||
IESG <iesg@ietf.org> | ||||
Reference: | Reference: Section 5.1 of RFC 9393 | |||
Section 5.1 in RFC-AAAA | ||||
6.6.2. URI-scheme swidpath | | Note: This scheme has been documented by an IETF working group | |||
| and is mentioned in an IETF Standard specification. However, | ||||
| as it describes a locally scoped, limited-purpose form of | ||||
| identification, it does not fully meet the requirements for | ||||
| permanent registration. | ||||
| | ||||
| As long as this specification (or any successors that describe | ||||
| this scheme) is a current IETF specification, this scheme | ||||
| should be considered to be "in use" and not considered for | ||||
| removal from the registry. | ||||
IANA is requested to register the URI scheme "swidpath". This | 6.6.2. URI Scheme "swidpath" | |||
registration request complies with [RFC7595]. | ||||
Scheme name: | IANA has registered the URI scheme "swidpath". This registration | |||
swidpath | complies with [RFC7595]. | |||
Status: | Scheme name: swidpath | |||
Permanent | ||||
Applications/protocols that use this scheme name: | Status: Provisional | |||
Applications that require Software-IDs (SWIDs) or Concise | ||||
Software-IDs (CoSWIDs); see Section 5.2 of RFC-AAAA. | ||||
Contact: | Applications/protocols that use this scheme name: Applications that | |||
IETF Chair <chair@ietf.org> | require Software IDs (SWIDs) or Concise Software IDs (CoSWIDs); | |||
see Section 5.2 of RFC 9393. | ||||
Change controller: | Contact: IETF Chair <chair@ietf.org> | |||
IESG <iesg@ietf.org> | ||||
Reference: | Change controller: IESG <iesg@ietf.org> | |||
Section 5.2 in RFC-AAAA | ||||
6.7. CoSWID Model for use in SWIMA Registration | Reference: Section 5.2 of RFC 9393 | |||
The Software Inventory Message and Attributes (SWIMA) for PA-TNC | | Note: This scheme has been documented by an IETF working group | |||
specification [RFC8412] defines a standardized method for collecting | | and is mentioned in an IETF Standard specification. However, | |||
an endpoint device's software inventory. A CoSWID can provide | | as it describes a locally scoped, limited-purpose form of | |||
evidence of software installation which can then be used and | | identification, it does not fully meet the requirements for | |||
exchanged with SWIMA. This registration adds a new entry to the IANA | | permanent registration. | |||
"Software Data Model Types" registry defined by [RFC8412] | | | |||
[IANA.pa-tnc-parameters] to support CoSWID use in SWIMA as follows: | | As long as this specification (or any successors that describe | |||
| this scheme) is a current IETF specification, this scheme | ||||
| should be considered to be "in use" and not considered for | ||||
| removal from the registry. | ||||
Pen: 0 | 6.7. CoSWID Model for Use in SWIMA Registration | |||
Integer: TBD2 | "Software Inventory Message and Attributes (SWIMA) for PA-TNC" | |||
[RFC8412] defines a standardized method for collecting an endpoint | ||||
device's software inventory. A CoSWID can provide evidence of | ||||
software installation that can then be used and exchanged with SWIMA. | ||||
This registration adds a new entry to the IANA "Software Data Model | ||||
Types" registry defined by [RFC8412] and [IANA.pa-tnc-parameters] to | ||||
support CoSWID use in SWIMA as follows: | ||||
Name: Concise Software Identifier (CoSWID) | Pen: 0 | |||
Reference: RFC-AAAA | Integer: 2 | |||
Deriving Software Identifiers: | Name: Concise Software Identifier (CoSWID) | |||
A Software Identifier generated from a CoSWID tag is expressed as a | Reference: RFC 9393 | |||
concatenation of the form in [RFC5234] as follows: | ||||
TAG_CREATOR_REGID "_" "_" UNIQUE_ID | Deriving Software Identifiers: A Software Identifier generated from | |||
a CoSWID tag is expressed as a concatenation of the form used in | ||||
[RFC5234] as follows -- | ||||
Where TAG_CREATOR_REGID is the reg-id item value of the tag's entity | TAG_CREATOR_REGID "_" "_" UNIQUE_ID | |||
item having the role value of 1 (corresponding to "tag creator"), and | ||||
the UNIQUE_ID is the same tag's tag-id item. If the tag-id item's | ||||
value is expressed as a 16-byte binary string, the UNIQUE_ID MUST be | ||||
represented using the UUID string representation defined in [RFC4122] | ||||
including the "urn:uuid:" prefix. | ||||
The TAG_CREATOR_REGID and the UNIQUE_ID are connected with a double | where TAG_CREATOR_REGID is the reg-id item value of the tag's | |||
underscore (_), without any other connecting character or whitespace. | entity item having the role value of 1 (corresponding to "tag- | |||
creator"), and the UNIQUE_ID is the same tag's tag-id item. If | ||||
the tag-id item's value is expressed as a 16-byte binary string, | ||||
the UNIQUE_ID MUST be represented using the UUID string | ||||
representation defined in [RFC4122], including the "urn:uuid:" | ||||
prefix. | ||||
The TAG_CREATOR_REGID and the UNIQUE_ID are connected with a | ||||
double underscore (_), without any other connecting character or | ||||
whitespace. | ||||
7. Signed CoSWID Tags | 7. Signed CoSWID Tags | |||
SWID tags, as defined in the ISO-19770-2:2015 XML schema, can include | SWID tags, as defined in the ISO-19770-2:2015 XML Schema, can include | |||
cryptographic signatures to protect the integrity of the SWID tag. | cryptographic signatures to protect the integrity of the SWID tag. | |||
In general, tags are signed by the tag creator (typically, although | In general, tags are signed by the tag creator (typically, although | |||
not exclusively, the vendor of the software component that the SWID | not exclusively, the vendor of the software component that the SWID | |||
tag identifies). Cryptographic signatures can make any modification | tag identifies). Cryptographic signatures can make any modification | |||
of the tag detectable, which is especially important if the integrity | of the tag detectable, which is especially important if the integrity | |||
of the tag is important, such as when the tag is providing reference | of the tag is important, such as when the tag is providing RIMs for | |||
integrity measurements for files. The ISO-19770-2:2015 XML schema | files. The ISO-19770-2:2015 XML Schema uses XML Digital Signatures | |||
uses XML DSIG to support cryptographic signatures. | (XMLDSIG) to support cryptographic signatures. | |||
Signing CoSWID tags follows the procedures defined in CBOR Object | Signing CoSWID tags follows the procedures defined in CBOR Object | |||
Signing and Encryption [I-D.ietf-cose-rfc8152bis-struct]. A CoSWID | Signing and Encryption (COSE) [RFC9052]. A CoSWID tag MUST be | |||
tag MUST be wrapped in a COSE Signature structure, either COSE_Sign1 | wrapped in a COSE Signature structure, either COSE_Sign1 or | |||
or COSE_Sign. In the first case, a Single Signer Data Object | COSE_Sign. In the first case, a Single Signer Data Object | |||
(COSE_Sign1) contains a single signature and MUST be signed by the | (COSE_Sign1) contains a single signature and MUST be signed by the | |||
tag creator. The following CDDL specification defines a restrictive | tag creator. The following CDDL specification defines a restrictive | |||
subset of COSE header parameters that MUST be used in the protected | subset of COSE header parameters that MUST be used in the protected | |||
header in this case. | header in this case. | |||
<CODE BEGINS> | <CODE BEGINS> file "sign1.cddl" | |||
COSE-Sign1-coswid<payload> = [ | COSE_Sign1-coswid<payload> = [ | |||
protected: bstr .cbor protected-signed-coswid-header, | protected: bstr .cbor protected-signed-coswid-header, | |||
unprotected: unprotected-signed-coswid-header, | unprotected: unprotected-signed-coswid-header, | |||
payload: bstr .cbor payload, | payload: bstr .cbor payload, | |||
signature: bstr, | signature: bstr, | |||
] | ] | |||
cose-label = int / tstr | cose-label = int / tstr | |||
cose-values = any | cose-values = any | |||
protected-signed-coswid-header = { | protected-signed-coswid-header = { | |||
skipping to change at page 65, line 39 ¶ | skipping to change at line 2930 ¶ | |||
* cose-label => cose-values, | * cose-label => cose-values, | |||
} | } | |||
unprotected-signed-coswid-header = { | unprotected-signed-coswid-header = { | |||
* cose-label => cose-values, | * cose-label => cose-values, | |||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
The COSE_Sign structure allows for more than one signature, one of | The COSE_Sign structure allows for more than one signature, one of | |||
which MUST be issued by the tag creator, to be applied to a CoSWID | which MUST be issued by the tag creator, to be applied to a CoSWID | |||
tag and MAY be used. The corresponding usage scenarios are domain- | tag and MAY be used. The corresponding usage scenarios are domain | |||
specific and require well-specified application guidance. | specific and require well-specified application guidance. | |||
<CODE BEGINS> | <CODE BEGINS> file "sign.cddl" | |||
COSE-Sign-coswid<payload> = [ | COSE_Sign-coswid<payload> = [ | |||
protected: bstr .cbor protected-signed-coswid-header1, | protected: bstr .cbor protected-signed-coswid-header1, | |||
unprotected: unprotected-signed-coswid-header, | unprotected: unprotected-signed-coswid-header, | |||
payload: bstr .cbor payload, | payload: bstr .cbor payload, | |||
signature: [ * COSE_Signature ], | signature: [ * COSE_Signature ], | |||
] | ] | |||
protected-signed-coswid-header1 = { | protected-signed-coswid-header1 = { | |||
3 => "application/swid+cbor", | 3 => "application/swid+cbor", | |||
* cose-label => cose-values, | * cose-label => cose-values, | |||
} | } | |||
protected-signature-coswid-header = { | protected-signature-coswid-header = { | |||
1 => int, ; algorithm identifier | 1 => int, ; algorithm identifier | |||
* cose-label => cose-values, | * cose-label => cose-values, | |||
} | } | |||
unprotected-sign-coswid-header = { | unprotected-signed-coswid-header = { | |||
* cose-label => cose-values, | * cose-label => cose-values, | |||
} | } | |||
COSE_Signature = [ | COSE_Signature = [ | |||
protected: bstr .cbor protected-signature-coswid-header, | protected: bstr .cbor protected-signature-coswid-header, | |||
unprotected: unprotected-sign-coswid-header, | unprotected: unprotected-signed-coswid-header, | |||
signature : bstr | signature: bstr | |||
] | ] | |||
<CODE ENDS> | <CODE ENDS> | |||
Additionally, the COSE Header counter signature MAY be used as an | Additionally, the COSE header countersignature MAY be used as an | |||
attribute in the unprotected header map of the COSE envelope of a | attribute in the unprotected header map of the COSE envelope of a | |||
CoSWID [I-D.ietf-cose-countersign]. The application of counter | CoSWID [RFC9338]. The application of countersigning enables second | |||
signing enables second parties to provide a signature on a signature | parties to provide a signature on a signature allowing for proof that | |||
allowing for a proof that a signature existed at a given time (i.e., | a signature existed at a given time (i.e., a timestamp). | |||
a timestamp). | ||||
A CoSWID MUST be signed, using the above mechanism, to protect the | A CoSWID MUST be signed, using the above mechanism, to protect the | |||
integrity of the CoSWID tag. See the security considerations (in | integrity of the CoSWID tag. See Section 9 ("Security | |||
Section 9) for more information on why a signed CoSWID is valuable in | Considerations") for more information on why a signed CoSWID is | |||
most cases. | valuable in most cases. | |||
8. CBOR-Tagged CoSWID Tags | 8. CBOR-Tagged CoSWID Tags | |||
This specification allows for tagged and untagged CBOR data items | This specification allows for tagged and untagged CBOR data items | |||
that are CoSWID tags. Consecutively, the CBOR tag for CoSWID tags | that are CoSWID tags. Consequently, the CBOR tag defined by this | |||
defined in Table 21 SHOULD be used in conjunction with CBOR data | document (Table 21) for CoSWID tags SHOULD be used in conjunction | |||
items that are a CoSWID tags. Other CBOR tags MUST NOT be used with | with CBOR data items that are CoSWID tags. Other CBOR tags MUST NOT | |||
a CBOR data item that is a CoSWID tag. If tagged, both signed and | be used with a CBOR data item that is a CoSWID tag. If tagged, both | |||
unsigned CoSWID tags MUST use the CoSWID CBOR tag. In case a signed | signed and unsigned CoSWID tags MUST use the CoSWID CBOR tag. If a | |||
CoSWID is tagged, a CoSWID CBOR tag MUST be appended before the COSE | signed CoSWID is tagged, a CoSWID CBOR tag MUST be appended before | |||
envelope whether it is a COSE_Untagged_Message or a | the COSE envelope, whether it is a COSE_Untagged_Message or a | |||
COSE_Tagged_Message. In case an unsigned CoSWID is tagged, a CoSWID | COSE_Tagged_Message. If an unsigned CoSWID is tagged, a CoSWID CBOR | |||
CBOR tag MUST be appended before the CBOR data item that is the | tag MUST be appended before the CBOR data item that is the CoSWID | |||
CoSWID tag. | tag. | |||
<CODE BEGINS> | <CODE BEGINS> file "tags.cddl" | |||
coswid = unsigned-coswid / signed-coswid | coswid = unsigned-coswid / signed-coswid | |||
unsigned-coswid = concise-swid-tag / tagged-coswid<concise-swid-tag> | unsigned-coswid = concise-swid-tag / tagged-coswid<concise-swid-tag> | |||
signed-coswid1 = signed-coswid-for<unsigned-coswid> | signed-coswid1 = signed-coswid-for<unsigned-coswid> | |||
signed-coswid = signed-coswid1 / tagged-coswid<signed-coswid1> | signed-coswid = signed-coswid1 / tagged-coswid<signed-coswid1> | |||
tagged-coswid<T> = #6.1398229316(T) | tagged-coswid<T> = #6.1398229316(T) | |||
signed-coswid-for<payload> = #6.18(COSE-Sign1-coswid<payload>) | signed-coswid-for<payload> = #6.18(COSE_Sign1-coswid<payload>) | |||
/ #6.98(COSE-Sign-coswid<payload>) | / #6.98(COSE_Sign-coswid<payload>) | |||
<CODE ENDS> | <CODE ENDS> | |||
This specification allows for a tagged CoSWID tag to reside in a COSE | This specification allows for a CBOR-tagged CoSWID tag to reside in a | |||
envelope that is also tagged with a CoSWID CBOR tag. In cases where | COSE envelope that is also tagged with a CoSWID CBOR tag. In cases | |||
a tag creator is not a signer (e.g., hand-offs between entities in a | where a tag creator is not a signer (e.g., hand-offs between entities | |||
trusted portion of a supply-chain), retaining CBOR tags attached to | in a trusted portion of a supply chain), retaining CBOR tags attached | |||
unsigned CoSWID tags can be of great use. Nevertheless, redundant | to unsigned CoSWID tags can be of great use. Nevertheless, redundant | |||
use of tags SHOULD be avoided when possible. | use of tags SHOULD be avoided when possible. | |||
9. Security Considerations | 9. Security Considerations | |||
The following security considerations for use of CoSWID tags focus | The following security considerations for the use of CoSWID tags | |||
on: | focus on: | |||
* ensuring the integrity and authenticity of a CoSWID tag | * ensuring the integrity and authenticity of a CoSWID tag | |||
* the application of CoSWID tags to address security challenges | * the application of CoSWID tags to address security challenges | |||
related to unmanaged or unpatched software | related to unmanaged or unpatched software | |||
* reducing the potential for unintended disclosure of a device's | * reducing the potential for unintended disclosure of a device's | |||
software load | software load | |||
A tag is considered "authoritative" if the CoSWID tag was created by | A tag is considered "authoritative" if the CoSWID tag was created by | |||
the software provider. An authoritative CoSWID tag contains | the software provider. An authoritative CoSWID tag contains | |||
information about a software component provided by the supplier of | information about a software component provided by the supplier of | |||
the software component, who is expected to be an expert in their own | the software component, who is expected to be an expert in their own | |||
software. Thus, authoritative CoSWID tags can represent | software. Thus, authoritative CoSWID tags can represent | |||
authoritative information about the software component. The degree | authoritative information about the software component. The degree | |||
to which this information can be trusted depends on the tag's chain | to which this information can be trusted depends on the tag's chain | |||
of custody and the ability to verify a signature provided by the | of custody and the ability to verify a signature provided by the | |||
supplier if present in the CoSWID tag. The provisioning and | supplier if present in the CoSWID tag. The provisioning and | |||
validation of CoSWID tags are handled by local policy and is outside | validation of CoSWID tags are handled by local policy and are outside | |||
the scope of this document. | the scope of this document. | |||
A signed CoSWID tag (see Section 7) whose signature has been | A signed CoSWID tag (see Section 7) whose signature has been | |||
validated can be relied upon to be unchanged since it was signed. By | validated can be relied upon to be unchanged since the time at which | |||
contrast, the data contained in unsigned tags can be altered by any | it was signed. By contrast, the data contained in unsigned tags can | |||
user or process with write-access to the tag. To support signature | be altered by any user or process with write access to the tag. To | |||
validation, there is the need to associate the right key with the | support signature validation, there is a need to associate the right | |||
software provider or party originating the signature in a secure way. | key with the software provider or party originating the signature in | |||
This operation is application specific and needs to be addressed by | a secure way. This operation is application specific and needs to be | |||
the application or a user of the application; a specific approach for | addressed by the application or a user of the application; a specific | |||
which is out-of-scope for this document. | approach for this topic is out of scope for this document. | |||
When an authoritative tag is signed, the originator of the signature | When an authoritative tag is signed, the originator of the signature | |||
can be verified. A trustworthy association between the signature and | can be verified. A trustworthy association between the signature and | |||
the originator of the signature can be established via trust anchors. | the originator of the signature can be established via trust anchors. | |||
A certification path between a trust anchor and a certificate | A certification path between a trust anchor and a certificate, | |||
including a public key enabling the validation of a tag signature can | including a public key enabling the validation of a tag signature, | |||
realize the assessment of trustworthiness of an authoritative tag. | can realize the assessment of trustworthiness of an authoritative | |||
Verifying that the software provider is the signer is a different | tag. Verifying that the software provider is the signer is a | |||
matter. This requires an association between the signature and the | different matter. This requires verifying that the party that signed | |||
tag's entity item associated corresponding to the software provider. | the tag is the same party given in the software-creator role of the | |||
No mechanism is defined in this draft to make this association; | tag's entity item. No mechanism is defined in this document to make | |||
therefore, this association will need to be handled by local policy. | this association; therefore, this association will need to be handled | |||
As always, the validity of a signature does not imply veracity of the | by local policy. As always, the validity of a signature does not | |||
signed statements: anyone can sign assertions such that the software | imply the veracity of the signed statements: anyone can sign | |||
is from a specific software-creator or that a specific persistent-id | assertions such that the software is from a specific software-creator | |||
applies; policy needs to be applied to evaluate these statements and | or that a specific persistent-id applies; policy needs to be applied | |||
to determine their suitability for a specific use. | to evaluate these statements and to determine their suitability for a | |||
specific use. | ||||
Loss of control of signing credentials used to sign CoSWID tags would | Loss of control of signing credentials used to sign CoSWID tags would | |||
create doubt about the authenticity and integrity of any CoSWID tags | cast doubt on the authenticity and integrity of any CoSWID tags | |||
signed using the compromised keys. In such cases, the legitimate tag | signed using the compromised keys. In such cases, the legitimate tag | |||
signer (namely, the software provider for an authoritative CoSWID | signer (namely, the software provider for an authoritative CoSWID | |||
tag) can employ uncompromised signing credentials to create a new | tag) can employ uncompromised signing credentials to create a new | |||
signature on the original tag. The tag version number would not be | signature on the original tag. The tag's version number would not be | |||
incremented since the tag itself was not modified. Consumers of | incremented, since the tag itself was not modified. Consumers of | |||
CoSWID tags would need to validate the tag using the new credentials | CoSWID tags would need to validate the tag using the new credentials | |||
and would also need to make use of revocation information available | and would also need to make use of revocation information available | |||
for the compromised credentials to avoid validating tags signed with | for the compromised credentials to avoid validating tags signed with | |||
them. The process for doing this is beyond the scope of this | them. The process for doing this is beyond the scope of this | |||
specification. | specification. | |||
The CoSWID format allows the use of hash values without an | The CoSWID format allows the use of hash values without an | |||
accompanying hash algorithm identifier. This exposes the tags to | accompanying hash algorithm identifier. This exposes the tags to | |||
some risk of cross-algorithm attacks. We believe that this can | some risk of cross-algorithm attacks. We believe that this can | |||
become a practical problem only if some implementations allow the use | become a practical problem only if some implementations allow the use | |||
of insecure hash algorithms. Since it may not become known | of insecure hash algorithms. Since it may not become known | |||
immediately when an algorithm becomes insecure, this leads to a | immediately when an algorithm becomes insecure, this leads to a | |||
strong recommendation to only include support for hash algorithms | strong recommendation to only include support for hash algorithms | |||
that are generally considered secure, and not just marginally so. | that are generally considered secure, and not just marginally so. | |||
CoSWID tags are intended to contain public information about software | CoSWID tags are intended to contain public information about software | |||
components and, as such, the contents of a CoSWID tag (as opposed to | components and, as such, the contents of a CoSWID tag (as opposed to | |||
the set of tags that apply to the endpoint, see below) does not need | the set of tags that apply to the endpoint; see below) do not need to | |||
to be protected against unintended disclosure on an endpoint. | be protected against unintended disclosure on an endpoint. | |||
Conversely, generators of CoSWID tags need to ensure that only public | Conversely, generators of CoSWID tags need to ensure that only public | |||
information is disclosed. Entitlement Keys are an example for | information is disclosed. The entitlement-key item is an example of | |||
information where particular care is required; tag authors are | information for which particular care is required; tag authors are | |||
advised not to record unprotected, private software license keys in | advised not to record unprotected, private software license keys in | |||
this field. | this field. | |||
CoSWID tags are intended to be easily discoverable by authorized | CoSWID tags are intended to be easily discoverable by authorized | |||
applications and users on an endpoint in order to make it easy to | applications and users on an endpoint in order to make it easy to | |||
determine the tagged software load. Access to the collection of an | determine the tagged software load. Access to the collection of an | |||
endpoint's CoSWID tags needs to be appropriately controlled to | endpoint's CoSWID tags needs to be limited to authorized applications | |||
authorized applications and users using an appropriate access control | and users using an appropriate access control mechanism. | |||
mechanism. | ||||
Since the tag-id of a CoSWID tag can be used as a global index value, | Since the tag-id of a CoSWID tag can be used as a global index value, | |||
failure to ensure the tag-id's uniqueness can cause collisions or | failure to ensure the tag-id's uniqueness can cause collisions or | |||
ambiguity in CoSWID tags that are retrieved or processed using this | ambiguity in CoSWID tags that are retrieved or processed using this | |||
identifier. CoSWID is designed to not require a registry of | identifier. CoSWID is designed to not require a registry of | |||
identifiers. As a result, CoSWID requires the tag creator to employ | identifiers. As a result, CoSWID requires the tag creator to employ | |||
a method of generating a unique tag identifier. Specific methods of | a method of generating a unique tag identifier. Specific methods of | |||
generating a unique identifier are beyond the scope of this | generating a unique identifier are beyond the scope of this | |||
specification. A collision in tag-ids may result in false positives/ | specification. A collision in tag-ids may result in false positives/ | |||
negatives in software integrity checks or mis-identification of | negatives in software integrity checks or misidentification of | |||
installed software, undermining CoSWID use cases such as | installed software, undermining CoSWID use cases such as | |||
vulnerability identification, software inventory, etc. If such a | vulnerability identification, software inventory, etc. If such a | |||
collision is detected, then the tag consumer may want to contact the | collision is detected, then the tag consumer may want to contact the | |||
maintainer of the CoSWID to have them issue a correction addressing | maintainer of the CoSWID to have them issue a correction addressing | |||
the collision; however, this also discloses to the maintainer that | the collision; however, this also discloses to the maintainer that | |||
the consumer has the other tag with the given tag-id in their | the consumer has the other tag with the given tag-id in their | |||
database. More generally speaking, a tag consumer needs to be robust | database. More generally speaking, a tag consumer needs to be robust | |||
against such collisions lest the collision become a viable attack | against such collisions lest the collision become a viable attack | |||
vector. | vector. | |||
CoSWID tags are designed to be easily added and removed from an | CoSWID tags are designed to be easily added and removed from an | |||
endpoint along with the installation or removal of software | endpoint along with the installation or removal of software | |||
components. On endpoints where addition or removal of software | components. On endpoints where the addition or removal of software | |||
components is tightly controlled, the addition or removal of CoSWID | components is tightly controlled, the addition or removal of CoSWID | |||
tags can be similarly controlled. On more open systems, where many | tags can be similarly controlled. On more open systems, where many | |||
users can manage the software inventory, CoSWID tags can be easier to | users can manage the software inventory, CoSWID tags can be easier to | |||
add or remove. On such systems, it can be possible to add or remove | add or remove. On such systems, it can be possible to add or remove | |||
CoSWID tags in a way that does not reflect the actual presence or | CoSWID tags in a way that does not reflect the actual presence or | |||
absence of corresponding software components. Similarly, not all | absence of corresponding software components. Similarly, not all | |||
software products automatically install CoSWID tags, so products can | software products automatically install CoSWID tags, so products can | |||
be present on an endpoint without providing a corresponding CoSWID | be present on an endpoint without providing a corresponding CoSWID | |||
tag. As such, any collection of CoSWID tags cannot automatically be | tag. As such, any collection of CoSWID tags cannot automatically be | |||
assumed to represent either a complete or fully accurate | assumed to represent either a complete or fully accurate | |||
skipping to change at page 70, line 30 ¶ | skipping to change at line 3141 ¶ | |||
to add or remove applications, CoSWID tags are an easy way to provide | to add or remove applications, CoSWID tags are an easy way to provide | |||
a preliminary understanding of that endpoint's software inventory. | a preliminary understanding of that endpoint's software inventory. | |||
As CoSWID tags do not expire, inhibiting new CoSWID tags from | As CoSWID tags do not expire, inhibiting new CoSWID tags from | |||
reaching an intended consumer would render that consumer stuck with | reaching an intended consumer would render that consumer stuck with | |||
outdated information, potentially leaving associated vulnerabilities | outdated information, potentially leaving associated vulnerabilities | |||
or weaknesses unmitigated. Therefore, a CoSWID tag consumer should | or weaknesses unmitigated. Therefore, a CoSWID tag consumer should | |||
actively check for updated tag-versions via more than one means. | actively check for updated tag-versions via more than one means. | |||
This specification makes use of relative paths (e.g., filesystem | This specification makes use of relative paths (e.g., filesystem | |||
paths) in several places. A signed COSWID tag cannot make use of | paths) in several places. A signed CoSWID tag cannot make use of | |||
these to derive information that is considered to be covered under | these to derive information that is considered to be covered under | |||
the signature. Typically, relative file system paths will be used to | the signature. Typically, relative filesystem paths will be used to | |||
identify targets for an installation, not sources of tag information. | identify targets for an installation, not sources of tag information. | |||
Any report of an endpoint's CoSWID tag collection provides | Any report of an endpoint's CoSWID tag collection provides | |||
information about the software inventory of that endpoint. If such a | information about the software inventory of that endpoint. If such a | |||
report is exposed to an attacker, this can tell them which software | report is exposed to an attacker, this can tell them which software | |||
products and versions thereof are present on the endpoint. By | products and versions thereof are present on the endpoint. By | |||
examining this list, the attacker might learn of the presence of | examining this list, the attacker might learn of the presence of | |||
applications that are vulnerable to certain types of attacks. As | applications that are vulnerable to certain types of attacks. As | |||
noted earlier, CoSWID tags are designed to be easily discoverable by | noted earlier, CoSWID tags are designed to be easily discoverable by | |||
authorized applications and users on an endpoint, but this does not | authorized applications and users on an endpoint, but this does not | |||
present a significant risk since an attacker would already need to | present a significant risk, since an attacker would already need to | |||
have access to the endpoint to view that information. However, when | have access to the endpoint to view that information. However, when | |||
the endpoint transmits its software inventory to another party, or | the endpoint transmits its software inventory to another party or | |||
that inventory is stored on a server for later analysis, this can | that inventory is stored on a server for later analysis, this can | |||
potentially expose this information to attackers who do not yet have | potentially expose this information to attackers who do not yet have | |||
access to the endpoint. For this reason, it is important to protect | access to the endpoint. For this reason, it is important to protect | |||
the confidentiality of CoSWID tag information that has been collected | the confidentiality of CoSWID tag information that has been collected | |||
from an endpoint in transit and at rest, not because those tags | from an endpoint in transit and at rest, not because those tags | |||
individually contain sensitive information, but because the | individually contain sensitive information but because the collection | |||
collection of CoSWID tags and their association with an endpoint | of CoSWID tags and their association with an endpoint reveals | |||
reveals information about that endpoint's attack surface. | information about that endpoint's attack surface. | |||
Finally, both the ISO-19770-2:2015 XML schema SWID definition and the | Finally, both the ISO-19770-2:2015 XML Schema SWID definition and the | |||
CoSWID CDDL specification allow for the construction of "infinite" | CoSWID CDDL specification allow for the construction of "infinite" | |||
tags with link item loops or tags that contain malicious content with | tags with link item loops or tags that contain malicious content with | |||
the intent of creating non-deterministic states during validation or | the intent of creating non-deterministic states during validation or | |||
processing of those tags. While software providers are unlikely to | processing of those tags. While software providers are unlikely to | |||
do this, CoSWID tags can be created by any party and the CoSWID tags | do this, CoSWID tags can be created by any party and the CoSWID tags | |||
collected from an endpoint could contain a mixture of vendor and non- | collected from an endpoint could contain a mixture of tags created by | |||
vendor created tags. For this reason, a CoSWID tag might contain | vendors and tags not created by vendors. For this reason, a CoSWID | |||
potentially malicious content. Input sanitization, loop detection, | tag might contain potentially malicious content. Input sanitization, | |||
and signature verification are ways that implementations can address | loop detection, and signature verification are ways that | |||
this concern. | implementations can address this concern. | |||
More generally speaking, the security considerations of [RFC8949], | More generally speaking, the Security Considerations sections of | |||
[I-D.ietf-cose-rfc8152bis-struct], and [I-D.ietf-cose-countersign] | [RFC8949], [RFC9052], and [RFC9338] apply. | |||
apply. | ||||
10. Privacy Consideration | 10. Privacy Considerations | |||
As noted in Section 9, collected information about an endpoint's | As noted in Section 9, collected information about an endpoint's | |||
software load, such as what might be represented by an endpoint's | software load, such as what might be represented by an endpoint's | |||
CoSWID tag collection, could be used to identify vulnerable software | CoSWID tag collection, could be used by attackers to identify | |||
for attack. Collections of endpoint software information also can | vulnerable software. Collections of endpoint software information | |||
have privacy implications for users. The set of application a user | also can have privacy implications for users. The set of | |||
installs can give clues to personal matters such as political | applications a user installs can provide clues regarding personal | |||
affiliation, banking and investments, gender, sexual orientation, | matters such as political affiliation, banking and investments, | |||
medical concerns, etc. While the collection of CoSWID tags on an | gender, sexual orientation, medical concerns, etc. While the | |||
endpoint wouldn't increase the privacy risk (since a party able to | collection of CoSWID tags on an endpoint wouldn't increase privacy | |||
view those tags could also view the applications themselves), if | risks (since a party able to view those tags could also view the | |||
those CoSWID tags are gathered and stored in a repository somewhere, | applications themselves), if those CoSWID tags are gathered and | |||
visibility into the repository now also gives visibility into a | stored in a repository somewhere, visibility into the repository now | |||
user's application collection. For this reason, repositories of | also provides visibility into a user's application collection. For | |||
collected CoSWID tags not only need to be protected against | this reason, not only do repositories of collected CoSWID tags need | |||
collection by malicious parties, but even authorized parties will | to be protected against collection by malicious parties but even | |||
need to be vetted and made aware of privacy responsibilities | authorized parties will need to be vetted and made aware of privacy | |||
associated with having access to this information. Likewise, users | responsibilities associated with having access to this information. | |||
should be made aware that their software inventories are being | Likewise, users should be made aware that their software inventories | |||
collected from endpoints. Furthermore, when collected and stored by | are being collected from endpoints. Furthermore, when collected and | |||
authorized parties or systems, the inventory data needs to be | stored by authorized parties or systems, the inventory data needs to | |||
protected as both security and privacy-sensitive information. | be protected as both security and privacy-sensitive information. | |||
11. Change Log | ||||
This section is to be removed before publishing as an RFC. | ||||
[THIS SECTION TO BE REMOVED BY THE RFC EDITOR.] | ||||
Changes from version 12 to version 14: | ||||
* Moved key identifier to protected COSE header | ||||
* Fixed index reference for hash | ||||
* Removed indirection of CDDL type definition for filesystem-item | ||||
* Fixed quantity of resource and process | ||||
* Updated resource-collection | ||||
* Renamed socket name in software-meta to be consistent in naming | ||||
* Aligned excerpt examples in I-D text with full CDDL | ||||
* Fixed titles where title was referring to group instead of map | ||||
* Added missing date in SEMVER | ||||
* Fixed root cardinality for file and directory, etc. | ||||
* Transformed path-elements-entry from map to group for re-usability | ||||
* Scrubbed IANA Section | ||||
* Removed redundant supplemental rule | ||||
* Aligned discrepancy with ISO spec. | ||||
* Addressed comments on typos. | ||||
* Fixed kramdown nits and BCP reference. | ||||
* Addressed comments from WGLC reviewers. | ||||
Changes in version 12: | ||||
* Addressed a bunch of minor editorial issues based on WGLC | ||||
feedback. | ||||
* Added text about the use of UTF-8 in CoSWID. | ||||
* Adjusted tag-id to allow for a UUID to be provided as a bstr. | ||||
* Cleaned up descriptions of index ranges throughout the document, | ||||
removing discussion of 8 bit, 16 bit, etc. | ||||
* Adjusted discussion of private use ranges to use negative integer | ||||
values and to be more clear throughout the document. | ||||
* Added discussion around resolving overlapping value spaces for | ||||
version schemes. | ||||
* Added a set of expert review criteria for new IANA registries | ||||
created by this document. | ||||
* Added new registrations for the "swid" and "swidpath" URI schemes, | ||||
and for using CoSWID with SWIMA. | ||||
Changes from version 03 to version 11: | ||||
* Reduced representation complexity of the media-entry type and | ||||
removed the Section describing the older data structure. | ||||
* Added more signature schemes from COSE | ||||
* Included a minimal required set of normative language | ||||
* Reordering of attribute name to integer label by priority | ||||
according to semantics. | ||||
* Added an IANA registry for CoSWID items supporting future | ||||
extension. | ||||
* Cleaned up IANA registrations, fixing some inconsistencies in the | ||||
table labels. | ||||
* Added additional CDDL sockets for resource collection entries | ||||
providing for additional extension points to address future SWID/ | ||||
CoSWID extensions. | ||||
* Updated Section on extension points to address new CDDL sockets | ||||
and to reference the new IANA registry for items. | ||||
* Removed unused references and added new references to address | ||||
placeholder comments. | ||||
* Added table with semantics for the link ownership item. | ||||
* Clarified language, made term use more consistent, fixed | ||||
references, and replacing lowercase RFC2119 keywords. | ||||
Changes from version 02 to version 03: | ||||
* Updated core CDDL including the CDDL design pattern according to | ||||
RFC 8428. | ||||
Changes from version 01 to version 02: | ||||
* Enforced a more strict separation between the core CoSWID | ||||
definition and additional usage by moving content to corresponding | ||||
appendices. | ||||
* Removed artifacts inherited from the reference schema provided by | ||||
ISO (e.g., NMTOKEN(S)) | ||||
* Simplified the core data definition by removing group and type | ||||
choices where possible | ||||
* Minor reordering of map members | ||||
* Added a first extension point to address requested flexibility for | ||||
extensions beyond the any-element | ||||
Changes from version 00 to version 01: | ||||
* Ambiguity between evidence and payload eliminated by introducing | ||||
explicit members (while still | ||||
* allowing for "empty" SWID tags) | ||||
* Added a relatively restrictive COSE envelope using cose_sign1 to | ||||
define signed CoSWID (single signer only, at the moment) | ||||
* Added a definition how to encode hashes that can be stored in the | ||||
any-member using existing IANA tables to reference hash-algorithms | ||||
Changes since adopted as a WG I-D -00: | ||||
* Removed redundant any-attributes originating from the ISO- | ||||
19770-2:2015 XML schema definition | ||||
* Fixed broken multi-map members | ||||
* Introduced a more restrictive item (any-element-map) to represent | ||||
custom maps, increased restriction on types for the any-attribute, | ||||
accordingly | ||||
* Fixed X.1520 reference | ||||
* Minor type changes of some attributes (e.g., NMTOKENS) | ||||
* Added semantic differentiation of various name types (e,g. fs- | ||||
name) | ||||
Changes from version 06 to version 07: | ||||
* Added type choices/enumerations based on textual definitions in | ||||
19770-2:2015 | ||||
* Added value registry request | ||||
* Added media type registration request | ||||
* Added content format registration request | ||||
* Added CBOR tag registration request | ||||
* Removed RIM appendix to be addressed in complementary draft | ||||
* Removed CWT appendix | ||||
* Flagged firmware resource collection appendix for revision | ||||
* Made use of terminology more consistent | ||||
* Better defined use of extension points in the CDDL | ||||
* Added definitions for indexed values | ||||
* Added IANA registry for Link use indexed values | ||||
Changes from version 05 to version 06: | ||||
* Improved quantities | ||||
* Included proposals for implicit enumerations that were NMTOKENS | ||||
* Added extension points | ||||
* Improved exemplary firmware-resource extension | ||||
Changes from version 04 to version 05: | ||||
* Clarified language around SWID and CoSWID to make more consistent | ||||
use of these terms. | ||||
* Added language describing CBOR optimizations for single vs. arrays | ||||
in the model front matter. | ||||
* Fixed a number of grammatical, spelling, and wording issues. | ||||
* Documented extension points that use CDDL sockets. | ||||
* Converted IANA registration tables to markdown tables, reserving | ||||
the 0 value for use when a value is not known. | ||||
* Updated a number of references to their current versions. | ||||
Changes from version 03 to version 04: | ||||
* Re-index label values in the CDDL. | ||||
* Added a Section describing the CoSWID model in detail. | ||||
* Created IANA registries for entity-role and version-scheme | ||||
Changes from version 02 to version 03: | ||||
* Updated CDDL to allow for a choice between a payload or evidence | ||||
* Re-index label values in the CDDL. | ||||
* Added item definitions | ||||
* Updated references for COSE, CBOR Web Token, and CDDL. | ||||
Changes from version 01 to version 02: | ||||
* Added extensions for Firmware and CoSWID use as Reference | ||||
Integrity Measurements (CoSWID RIM) | ||||
* Changes meta handling in CDDL from use of an explicit use of items | ||||
to a more flexible unconstrained collection of items. | ||||
* Added Sections discussing use of COSE Signatures and CBOR Web | ||||
Tokens | ||||
Changes from version 00 to version 01: | ||||
* Added CWT usage for absolute SWID paths on a device | ||||
* Fixed cardinality of type-choices including arrays | ||||
* Included first iteration of firmware resource-collection | ||||
12. References | 11. References | |||
12.1. Normative References | 11.1. Normative References | |||
[BCP178] Saint-Andre, P., Crocker, D., and M. Nottingham, | [BCP178] Saint-Andre, P., Crocker, D., and M. Nottingham, | |||
"Deprecating the "X-" Prefix and Similar Constructs in | "Deprecating the "X-" Prefix and Similar Constructs in | |||
Application Protocols", BCP 178, RFC 6648, | Application Protocols", BCP 178, RFC 6648, June 2012. | |||
DOI 10.17487/RFC6648, June 2012, | ||||
<https://www.rfc-editor.org/info/rfc6648>. | <https://www.rfc-editor.org/info/bcp178> | |||
[BCP26] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | [BCP26] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | |||
Writing an IANA Considerations Section in RFCs", BCP 26, | Writing an IANA Considerations Section in RFCs", BCP 26, | |||
RFC 8126, DOI 10.17487/RFC8126, June 2017, | RFC 8126, June 2017. | |||
<https://www.rfc-editor.org/info/rfc8126>. | ||||
[I-D.ietf-cose-countersign] | ||||
Schaad, J. and R. Housley, "CBOR Object Signing and | ||||
Encryption (COSE): Countersignatures", Work in Progress, | ||||
Internet-Draft, draft-ietf-cose-countersign-05, 23 June | ||||
2021, <https://www.ietf.org/archive/id/draft-ietf-cose- | ||||
countersign-05.txt>. | ||||
[I-D.ietf-cose-rfc8152bis-struct] | <https://www.rfc-editor.org/info/bcp26> | |||
Schaad, J., "CBOR Object Signing and Encryption (COSE): | ||||
Structures and Process", Work in Progress, Internet-Draft, | ||||
draft-ietf-cose-rfc8152bis-struct-15, 1 February 2021, | ||||
<https://www.ietf.org/archive/id/draft-ietf-cose- | ||||
rfc8152bis-struct-15.txt>. | ||||
[IANA.cbor-tags] | [IANA.cbor-tags] | |||
IANA, "Concise Binary Object Representation (CBOR) Tags", | IANA, "Concise Binary Object Representation (CBOR) Tags", | |||
19 September 2013, | ||||
<https://www.iana.org/assignments/cbor-tags>. | <https://www.iana.org/assignments/cbor-tags>. | |||
[IANA.core-parameters] | [IANA.core-parameters] | |||
IANA, "Constrained RESTful Environments (CoRE) | IANA, "Constrained RESTful Environments (CoRE) | |||
Parameters", 8 June 2012, | Parameters", | |||
<https://www.iana.org/assignments/core-parameters>. | <https://www.iana.org/assignments/core-parameters>. | |||
[IANA.media-types] | [IANA.media-types] | |||
IANA, "Media Types", 13 July 2022, | IANA, "Media Types", | |||
<https://www.iana.org/assignments/media-types>. | <https://www.iana.org/assignments/media-types>. | |||
[IANA.named-information] | [IANA.named-information] | |||
IANA, "Named Information", 14 August 2012, | IANA, "Named Information", | |||
<https://www.iana.org/assignments/named-information>. | <https://www.iana.org/assignments/named-information>. | |||
[IANA.pa-tnc-parameters] | [IANA.pa-tnc-parameters] | |||
IANA, "Posture Attribute (PA) Protocol Compatible with | IANA, "Posture Attribute (PA) Protocol Compatible with | |||
Trusted Network Connect (TNC) Parameters", 13 November | Trusted Network Connect (TNC) Parameters", | |||
2009, | ||||
<https://www.iana.org/assignments/pa-tnc-parameters>. | <https://www.iana.org/assignments/pa-tnc-parameters>. | |||
[IANA.uri-schemes] | [IANA.uri-schemes] | |||
IANA, "Uniform Resource Identifier (URI) Schemes", 6 July | IANA, "Uniform Resource Identifier (URI) Schemes", | |||
2022, <https://www.iana.org/assignments/uri-schemes>. | <https://www.iana.org/assignments/uri-schemes>. | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO | [RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO | |||
10646", STD 63, RFC 3629, DOI 10.17487/RFC3629, November | 10646", STD 63, RFC 3629, DOI 10.17487/RFC3629, November | |||
2003, <https://www.rfc-editor.org/info/rfc3629>. | 2003, <https://www.rfc-editor.org/info/rfc3629>. | |||
skipping to change at page 79, line 49 ¶ | skipping to change at line 3309 ¶ | |||
Definition Language (CDDL): A Notational Convention to | Definition Language (CDDL): A Notational Convention to | |||
Express Concise Binary Object Representation (CBOR) and | Express Concise Binary Object Representation (CBOR) and | |||
JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610, | JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610, | |||
June 2019, <https://www.rfc-editor.org/info/rfc8610>. | June 2019, <https://www.rfc-editor.org/info/rfc8610>. | |||
[RFC8949] Bormann, C. and P. Hoffman, "Concise Binary Object | [RFC8949] Bormann, C. and P. Hoffman, "Concise Binary Object | |||
Representation (CBOR)", STD 94, RFC 8949, | Representation (CBOR)", STD 94, RFC 8949, | |||
DOI 10.17487/RFC8949, December 2020, | DOI 10.17487/RFC8949, December 2020, | |||
<https://www.rfc-editor.org/info/rfc8949>. | <https://www.rfc-editor.org/info/rfc8949>. | |||
[SAM] "Information technology - Software asset management - Part | [RFC9052] Schaad, J., "CBOR Object Signing and Encryption (COSE): | |||
5: Overview and vocabulary", ISO/IEC 19770-5:2015, 15 | Structures and Process", STD 96, RFC 9052, | |||
November 2013. | DOI 10.17487/RFC9052, August 2022, | |||
<https://www.rfc-editor.org/info/rfc9052>. | ||||
[SWID] "Information technology - Software asset management - Part | [RFC9338] Schaad, J., "CBOR Object Signing and Encryption (COSE): | |||
2: Software identification tag", ISO/IEC 19770-2:2015, 1 | Countersignatures", STD 96, RFC 9338, | |||
October 2015. | DOI 10.17487/RFC9338, December 2022, | |||
<https://www.rfc-editor.org/info/rfc9338>. | ||||
[UNSPSC] "United Nations Standard Products and Services Code", 26 | [SAM] "Information technology - IT asset management - Part 5: | |||
October 2020, <https://www.unspsc.org/>. | Overview and vocabulary", ISO/IEC 19770-5:2015, August | |||
2015, <https://www.iso.org/standard/68291.html>. | ||||
[W3C.REC-css3-mediaqueries-20120619] | [SWID] "Information technology - IT asset management - Part 2: | |||
Rivoal, F., Ed., "Media Queries", W3C REC REC-css3- | Software identification tag", ISO/IEC 19770-2:2015, | |||
mediaqueries-20120619, W3C REC-css3-mediaqueries-20120619, | October 2015, <https://www.iso.org/standard/65666.html>. | |||
19 June 2012, <https://www.w3.org/TR/2012/REC-css3- | ||||
mediaqueries-20120619/>. | [UNSPSC] "United Nations Standard Products and Services Code", | |||
2022, <https://www.unspsc.org/>. | ||||
[W3C.REC-mediaqueries-3-20220405] | ||||
Rivoal, F., Ed., "Media Queries Level 3", W3C | ||||
Recommendation REC-mediaqueries-3-20220405, 5 April 2022, | ||||
<https://www.w3.org/TR/mediaqueries-3/>. | ||||
[W3C.REC-xmlschema-2-20041028] | [W3C.REC-xmlschema-2-20041028] | |||
Malhotra, A., Ed. and P. V. Biron, Ed., "XML Schema Part | Biron, P. V., Ed. and A. Malhotra, Ed., "XML Schema Part | |||
2: Datatypes Second Edition", W3C REC REC-xmlschema- | 2: Datatypes Second Edition", W3C Recommendation REC- | |||
2-20041028, W3C REC-xmlschema-2-20041028, 28 October 2004, | xmlschema-2-20041028, 28 October 2004, | |||
<https://www.w3.org/TR/2004/REC-xmlschema-2-20041028/>. | <https://www.w3.org/TR/2004/REC-xmlschema-2-20041028/>. | |||
[W3C.REC-xpath20-20101214] | [W3C.REC-xpath20-20101214] | |||
Berglund, A., Ed., Chamberlin, D., Ed., Simeon, J., Ed., | Berglund, A., Ed., Boag, S., Ed., Chamberlin, D., Ed., | |||
Robie, J., Ed., Fernandez, M., Ed., Kay, M., Ed., and S. | Fernández, M. F., Ed., Kay, M., Ed., Robie, J., Ed., and | |||
Boag, Ed., "XML Path Language (XPath) 2.0 (Second | J. Siméon, Ed., "XML Path Language (XPath) 2.0 (Second | |||
Edition)", W3C REC-xpath20-20101214, W3C REC REC- | Edition)", W3C Recommendation REC-xpath20-20101214, 14 | |||
xpath20-20101214, 14 December 2010, | December 2010, | |||
<https://www.w3.org/TR/2010/REC-xpath20-20101214/>. | <https://www.w3.org/TR/2010/REC-xpath20-20101214/>. | |||
12.2. Informative References | 11.2. Informative References | |||
[CamelCase] | [CamelCase] | |||
"UpperCamelCase", 29 August 2014, | "Camel Case (upper camel case)", 18 December 2014, | |||
<http://wiki.c2.com/?CamelCase>. | <http://wiki.c2.com/?CamelCase>. | |||
[I-D.ietf-rats-architecture] | ||||
Birkholz, H., Thaler, D., Richardson, M., Smith, N., and | ||||
W. Pan, "Remote Attestation Procedures Architecture", Work | ||||
in Progress, Internet-Draft, draft-ietf-rats-architecture- | ||||
18, 14 June 2022, <https://www.ietf.org/archive/id/draft- | ||||
ietf-rats-architecture-18.txt>. | ||||
[KebabCase] | [KebabCase] | |||
"KebabCase", 18 December 2014, | "Kebab Case", 29 August 2014, | |||
<http://wiki.c2.com/?KebabCase>. | <http://wiki.c2.com/?KebabCase>. | |||
[RFC3444] Pras, A. and J. Schoenwaelder, "On the Difference between | [RFC3444] Pras, A. and J. Schoenwaelder, "On the Difference between | |||
Information Models and Data Models", RFC 3444, | Information Models and Data Models", RFC 3444, | |||
DOI 10.17487/RFC3444, January 2003, | DOI 10.17487/RFC3444, January 2003, | |||
<https://www.rfc-editor.org/info/rfc3444>. | <https://www.rfc-editor.org/info/rfc3444>. | |||
[RFC4122] Leach, P., Mealling, M., and R. Salz, "A Universally | [RFC4122] Leach, P., Mealling, M., and R. Salz, "A Universally | |||
Unique IDentifier (UUID) URN Namespace", RFC 4122, | Unique IDentifier (UUID) URN Namespace", RFC 4122, | |||
DOI 10.17487/RFC4122, July 2005, | DOI 10.17487/RFC4122, July 2005, | |||
skipping to change at page 81, line 25 ¶ | skipping to change at line 3384 ¶ | |||
[RFC8322] Field, J., Banghart, S., and D. Waltermire, "Resource- | [RFC8322] Field, J., Banghart, S., and D. Waltermire, "Resource- | |||
Oriented Lightweight Information Exchange (ROLIE)", | Oriented Lightweight Information Exchange (ROLIE)", | |||
RFC 8322, DOI 10.17487/RFC8322, February 2018, | RFC 8322, DOI 10.17487/RFC8322, February 2018, | |||
<https://www.rfc-editor.org/info/rfc8322>. | <https://www.rfc-editor.org/info/rfc8322>. | |||
[RFC8520] Lear, E., Droms, R., and D. Romascanu, "Manufacturer Usage | [RFC8520] Lear, E., Droms, R., and D. Romascanu, "Manufacturer Usage | |||
Description Specification", RFC 8520, | Description Specification", RFC 8520, | |||
DOI 10.17487/RFC8520, March 2019, | DOI 10.17487/RFC8520, March 2019, | |||
<https://www.rfc-editor.org/info/rfc8520>. | <https://www.rfc-editor.org/info/rfc8520>. | |||
[RFC9334] Birkholz, H., Thaler, D., Richardson, M., Smith, N., and | ||||
W. Pan, "Remote ATtestation procedureS (RATS) | ||||
Architecture", RFC 9334, DOI 10.17487/RFC9334, January | ||||
2023, <https://www.rfc-editor.org/info/rfc9334>. | ||||
[SEMVER] Preston-Werner, T., "Semantic Versioning 2.0.0", | [SEMVER] Preston-Werner, T., "Semantic Versioning 2.0.0", | |||
<https://semver.org/spec/v2.0.0.html>. | <https://semver.org/spec/v2.0.0.html>. | |||
[SWID-GUIDANCE] | [SWID-GUIDANCE] | |||
Waltermire, D., Cheikes, B. A., Feldman, L., and G. Witte, | Waltermire, D., Cheikes, B. A., Feldman, L., and G. Witte, | |||
"Guidelines for the Creation of Interoperable Software | "Guidelines for the Creation of Interoperable Software | |||
Identification (SWID) Tags", NISTIR 8060, April 2016, | Identification (SWID) Tags", NISTIR 8060, April 2016, | |||
<https://doi.org/10.6028/NIST.IR.8060>. | <https://doi.org/10.6028/NIST.IR.8060>. | |||
[X.1520] "Recommendation ITU-T X.1520 (2014), Common | [X.1520] ITU-T, "Common vulnerabilities and exposures", ITU-T | |||
vulnerabilities and exposures", 20 April 2011. | Recommendation X.1520, January 2014, | |||
<https://www.itu.int/rec/T-REC-X.1520>. | ||||
Acknowledgments | Acknowledgments | |||
This document draws heavily on the concepts defined in the ISO/IEC | This document draws heavily on the concepts defined in the ISO/IEC | |||
19770-2:2015 specification. The authors of this document are | 19770-2:2015 specification. The authors of this document are | |||
grateful for the prior work of the 19770-2 contributors. | grateful for the prior work of the 19770-2 contributors. | |||
We are also grateful for the careful reviews provided by the IESG | We are also grateful for the careful reviews provided by the IESG | |||
reviewers. Special thanks go to Benjamin Kaduk. | reviewers. Special thanks go to Benjamin Kaduk. | |||
skipping to change at page 82, line 22 ¶ | skipping to change at line 3436 ¶ | |||
Henk Birkholz | Henk Birkholz | |||
Fraunhofer SIT | Fraunhofer SIT | |||
Rheinstrasse 75 | Rheinstrasse 75 | |||
64295 Darmstadt | 64295 Darmstadt | |||
Germany | Germany | |||
Email: henk.birkholz@sit.fraunhofer.de | Email: henk.birkholz@sit.fraunhofer.de | |||
Jessica Fitzgerald-McKay | Jessica Fitzgerald-McKay | |||
National Security Agency | National Security Agency | |||
9800 Savage Road | 9800 Savage Road | |||
Ft. Meade, Maryland | Ft. Meade, Maryland 20755 | |||
United States of America | United States of America | |||
Email: jmfitz2@cyber.nsa.gov | Email: jmfitz2@cyber.nsa.gov | |||
Charles Schmidt | Charles Schmidt | |||
The MITRE Corporation | The MITRE Corporation | |||
202 Burlington Road | 202 Burlington Road | |||
Bedford, Massachusetts 01730 | Bedford, Massachusetts 01730 | |||
United States of America | United States of America | |||
Email: cmschmidt@mitre.org | Email: cmschmidt@mitre.org | |||
End of changes. 372 change blocks. | ||||
1592 lines changed or deleted | 1350 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |