SACM Working Group H. Birkholz
Internet-Draft Fraunhofer SIT
Intended status: Standards Track J. Fitzgerald-McKay
Expires: December 29, 2019 Department of Defense
C. Schmidt
The MITRE Corporation
D. Waltermire
NIST
June 27, 2019

Concise Software Identification Tags
draft-ietf-sacm-coswid-11

Abstract

ISO/IEC 19770-2:2015 Software Identification (SWID) tags provide an extensible XML-based structure to identify and describe individual software components, patches, and installation bundles. SWID tag representations can be too large for devices with network and storage constraints. This document defines a concise representation of SWID tags: Concise SWID (CoSWID) tags. CoSWID supports the same features as SWID tags, as well as additional semantics that allow CoSWIDs to describe additional types of information, all in a more memory efficient format.

Status of This Memo

This Internet-Draft is submitted in full conformance with the 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 and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."

This Internet-Draft will expire on December 29, 2019.

Copyright Notice

Copyright (c) 2019 IETF Trust and the persons identified as the document authors. All rights reserved.

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.


Table of Contents

1. Introduction

SWID tags, as defined in ISO-19770-2:2015 [SWID], provide a standardized XML-based record format that identifies and describes a specific release of software, a patch, or an installation bundle, which are referred to as software components in this document. Different software components, and even different releases of a particular software component, each have a different SWID tag record associated with them. SWID tags are meant to be flexible and able to express a broad set of metadata about a software component.

SWID tags are used to support a number of processes including but not limited to:

While there are very few required fields in SWID tags, there are many optional fields that support different uses. A SWID tag consisting of only required fields might be a few hundred bytes in size; however, a tag containing many of the optional fields can be many orders of magnitude larger. Thus, real-world instances of SWID tags can be fairly large, and the communication of SWID tags in usage scenarios, such as those described earlier, can cause a large amount of data to be transported. This can be larger than acceptable for constrained devices and networks. Concise SWID (CoSWID) tags significantly reduce the amount of data transported as compared to a typical SWID tag. This reduction is enabled through the use of CBOR, which maps the human-readable labels of SWID data items to more concise integer labels (indices). The use of CBOR to express SWID information in CoSWID tags allows both CoSWID and SWID tags to be part of an enterprise security solution for a wider range of endpoints and environments.

1.1. The SWID and CoSWID Tag Lifecycle

In addition to defining the format of a SWID tag record, ISO/IEC 19770-2:2015 defines requirements concerning the SWID tag lifecycle. Specifically, when a software component is installed on an endpoint, that software component’s SWID tag is also installed. Likewise, when the software component is uninstalled or replaced, the SWID tag is deleted or replaced, as appropriate. As a result, ISO/IEC 19770-2:2015 describes a system wherein there is a correspondence between the set of installed software components on an endpoint, and the presence of the corresponding SWID tags for these components on that endpoint. CoSWIDs share the same lifecycle requirements as a SWID tag.

The SWID specification and supporting guidance provided in NIST Internal Report (NISTIR) 8060: Guidelines for the Creation of Interoperable SWID Tags [SWID-GUIDANCE] defines four types of SWID tags: primary, patch, corpus, and supplemental. The following text is paraphrased from these sources.

  1. Primary Tag - A SWID or CoSWID tag that identifies and describes an installed software component on an endpoint. A primary tag is intended to be installed on an endpoint along with the corresponding software component.
  2. Patch Tag - A SWID or CoSWID tag that identifies and describes an installed patch that has made incremental changes to a software component installed on an endpoint. A patch tag is intended to be installed on an endpoint along with the corresponding software component patch.
  3. Corpus Tag - A SWID or CoSWID tag that identifies and describes an installable software component in its pre-installation state. A corpus tag can be used to represent metadata about an installation package or installer for a software component, a software update, or a patch.
  4. Supplemental Tag - A SWID or CoSWID tag that allows additional information to be associated with a referenced SWID tag. This allows tools and users to record their own metadata about a software component without modifying SWID primary or patch tags created by a software provider.

The type of a tag is determined by specific data elements, which are discussed in Section 3.

                                  +------------+
                                  v            |
Software      Software        Software     Software      Software
Deployment -> Installation -> Patching  -> Upgrading  -> Removal

Corpus        Primary         Primary      xPrimary      xPrimary
Supplemental  Supplemental    Supplemental xSupplemental xSuplemental
                              Patch        xPatch
                                           Primary
                                           Supplemental

Figure 1: Use of Tag Types in the Software Lifecycle

As illustrated in the figure, supplemental tags can be associated with any corpus, primary, or patch tag to provide additional metadata about an installer, installed software, or installed patch respectively.

Understanding the use of CoSWIDs in the software lifecycle provides a basis for understanding the information provided in a CoSWID and the associated semantics of this information. Each of the different SWID and CoSWID tag types provide different sets of information. For example, a “corpus tag” is used to describe a software component’s installation image on an installation media, while a “patch tag” is meant to describe a patch that modifies some other software component.

1.2. Concise SWID Format

This document defines the CoSWID tag format, which is based on the Concise Binary Object Representation (CBOR) [RFC7049]. CBOR-based CoSWID tags offer a more concise representation of SWID information as compared to the XML-based SWID tag representation in ISO-19770-2:2015. The structure of a CoSWID is described via the Concise Data Definition Language (CDDL) [RFC8610]. The resulting CoSWID data definition is aligned to the information able to be expressed with the XML schema definition of ISO-19770-2:2015 [SWID]. This alignment allows both SWID and CoSWID tags to represent a common set of software component information and allows CoSWID tags to support the same uses as a SWID tag. To achieve this end, the CDDL representation includes every SWID tag field and attribute.

The vocabulary, i.e., the CDDL names of the types and members used in the CoSWID data definition, are mapped to more concise labels represented as small integer values. The names used in the CDDL data definition and the mapping to the CBOR representation using integer labels is based on the vocabulary of the XML attribute and element names defined in ISO/IEC 19770-2:2015.

1.3. Requirements Notation

The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “NOT RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.

2. Concise SWID Data Definition

The following describes the general rules and processes for encoding data using CDDL representation. Prior familiarity with CBOR and CDDL concepts will be helpful in understanding this CoSWID data definition.

This section describes the rules by which SWID tag XML is represented in the CoSWID CDDL structure. The CamelCase [CamelCase] notation used in the XML schema definition is changed to a hyphen-separated notation [KebabCase] (e.g. ResourceCollection is named resource-collection) in the CoSWID data definition. This deviation from the original notation used in the XML representation reduces ambiguity when referencing certain attributes in corresponding textual descriptions. An attribute referred to by its name in CamelCase notation explicitly relates to XML SWID tags; an attribute referred to by its name in KebabCase notation explicitly relates to CBOR CoSWID tags. This approach simplifies the composition of further work that reference both XML SWID and CBOR CoSWID documents.

Note that sometimes CoSWID CDDL attribute names show greater variation than the described notation change relative to their corresponding SWID XML Schema attributes. This is done when the change improves clarity in the specification. For example the “name” and “version” SWID fields corresponds to the “software-name” and “software-version” CoSWID fields, respectively. As such, it is not always possible to mechanically translate between corresponding attribute names in the two formats.

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 the definition. This allows a more concise integer-based form to be stored or transported, as compared to the less efficient text-based form of the original vocabulary.

In CBOR, an array is encoded using bytes that identify the array, and the array’s length or stop point (see [RFC7049]). To make items that support 1 or more values, the following CDDL notion is used.

_name_ = (_label_: _data_ / [ 2* _data_ ])

The CDDL rule above allows either a single data item or an array of 2 or more data values to be provided. When a singleton data value 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 provided, these values are encoded as an array. This modeling pattern is used frequently in the CoSWID CDDL data definition to allow for more efficient encoding of singleton values.

The following subsections describe the different parts of the CoSWID model.

2.1. Concise SWID Extensions

The CoSWID data definition contains two features that are not included in the SWID data definition on which it is based. These features are:

The following CDDL sockets (extension points) are defined in this document, which allow the addition of new information structures to their respective CDDL groups.

CoSWID CDDL Group Extension Points
Map Name CDDL Socket Defined in
concise-swid-tag $$coswid-extension Section 2.2
entity-entry $$entity-extension Section 2.5
link-entry $$link-extension Section 2.6
software-meta-entry $$meta-extension Section 2.7
file-entry $$file-extension Section 2.8.2
directory-entry $$directory-extension Section 2.8.2
process-entry $$process-extension Section 2.8.2
resource-entry $$resource-extension Section 2.8.2
payload-entry $$payload-extension Section 2.8.3
evidence-entry $$evidence-extension Section 2.8.4

The CoSWID Items Registry defined in Section 5.1 provides a registration mechanism allowing new items, and their associated index values, to be added to the CoSWID model through the use of the CDDL sockets described in the table above. This registration mechanism provides for well-known index values for data items in CoSWID extensions, allowing these index values to be recognized by implementations supporting a given extension.

The following additional CDDL sockets are defined in this document to allow for adding new values to corresponding type-choices (i.e. to represent enumerations) via custom CDDL data definitions.

CoSWID CDDL Enumeration Extension Points
Enumeration Name CDDL Socket Defined in
version-scheme $version-scheme Section 4.1
role $role Section 4.2
ownership $ownership Section 4.3
rel $rel Section 4.4
use $use Section 4.5

A number of SWID/CoSWID value registries are also defined in Section 5.2 that allow new values to be registered with IANA for the enumerations above. This registration mechanism supports the definition of new well-known index values and names for new enumeration values used by both SWID and CoSWID. This registration mechanism allows new standardized enumerated values to be shared between both specifications (and implementations) over time, and references to the IANA registries will be added to the next revision of [SWID].

2.2. The concise-swid-tag Group

The CDDL data definition for the root concise-swid-tag map is as follows and this rule and its constraints MUST be followed when creating or validating a CoSWID tag:

concise-swid-tag = {
  global-attributes,
  tag-id => text,
  tag-version => integer,
  ? corpus => bool,
  ? patch => bool,
  ? supplemental => bool,
  software-name => text,
  ? software-version => text,
  ? version-scheme => $version-scheme,
  ? media => text,
  ? software-meta =>  software-meta-entry / [ 2* software-meta-entry ],
  entity => entity-entry / [ 2* entity-entry ],
  ? link => link-entry / [ 2* link-entry ],
  ? (( payload => payload-entry ) // ( evidence => evidence-entry )),
  * $$coswid-extension 
}

tag-id = 0
software-name = 1
entity = 2
evidence = 3
link = 4
software-meta = 5
payload = 6
corpus = 8
patch = 9
media = 10
supplemental = 11
tag-version = 12
software-version = 13
version-scheme = 14

$version-scheme /= multipartnumeric
$version-scheme /= multipartnumeric-suffix
$version-scheme /= alphanumeric
$version-scheme /= decimal
$version-scheme /= semver
$version-scheme /= uint / text
multipartnumeric = 1
multipartnumeric-suffix = 2
alphanumeric = 3
decimal = 4
semver = 16384

The following describes each member of the concise-swid-tag root map.

An initial set of version-scheme index and text values are defined in Section 4.1, and are based on the version-scheme values defined in [SWID]. These pre-defined version-scheme values are registered with IANA in the “SWID/CoSWID Version Scheme Value” registry Section 5.2.1. The values in this registry will likely be expanded in the future.

The value of an version-scheme item MUST be one of the following:

2.3. concise-swid-tag Co-constraints

The following co-constraints apply to the information provided in the concise-swid-tag group.

2.4. The global-attributes Group

The global-attributes group provides a list of items, including an optional language definition to support the processing of text-string values, and an unbounded set of any-attribute items allowing for additional items to be provided as a general point of extension in the model.

The CDDL for the global-attributes follows:

global-attributes = (
  ? lang,
  * any-attribute,
)

any-attribute = (
  label => text / int / [ 2* text ] / [ 2* int ]
)

label = text / int

The following describes each child item of this group.

2.5. The entity-entry Group

The CDDL for the entity-entry group follows:

entity-entry = {
  global-attributes,
  entity-name => text,
  ? reg-id => any-uri,
  role => $role / [ 2* $role ],
  ? thumbprint => hash-entry,
  * $$entity-extension,
}
entity-name = 31
reg-id = 32
role = 33
thumbprint = 34

$role /= tag-creator
$role /= software-creator
$role /= aggregator
$role /= distributor
$role /= licensor
$role /= uint / text
tag-creator=1
software-creator=2
aggregator=3
distributor=4
licensor=5

The following describes each child item of this group.

2.6. The link-entry Map

The CDDL for the link-entry map follows:

link-entry = {
  global-attributes,
  ? artifact => text,
  href => any-uri,
  ? media => text,
  ? ownership => $ownership,
  rel => $rel,
  ? media-type => text,
  ? use => $use,
  * $$link-extension,
}
media = 10
artifact = 37
href = 38
ownership = 39
rel = 40
media-type = 41
use = 42

$ownership /= shared
$ownership /= private
$ownership /= abandon
$ownership /= uint / text
shared=1
private=2
abandon=3

$rel /= ancestor
$rel /= component
$rel /= feature
$rel /= installationmedia
$rel /= packageinstaller
$rel /= parent
$rel /= patches
$rel /= requires
$rel /= see-also
$rel /= supersedes
$rel /= supplemental
$rel /= uint / text
ancestor=1
component=2
feature=3
installationmedia=4
packageinstaller=5
parent=6
patches=7
requires=8
see-also=9
supersedes=10
supplemental=11

$use /= optional
$use /= required
$use /= recommended
$use /= uint / text
optional=1
required=2
recommended=3

The following describes each member of this map.

2.7. The software-meta-entry Map

The CDDL for the software-meta-entry map follows:

software-meta-entry = {
  global-attributes,
  ? activation-status => text,
  ? channel-type => text,
  ? colloquial-version => text,
  ? description => text,
  ? edition => text,
  ? entitlement-data-required => bool,
  ? entitlement-key => text,
  ? generator => text,
  ? persistent-id => text,
  ? product => text,
  ? product-family => text,
  ? revision => text,
  ? summary => text,
  ? unspsc-code => text,
  ? unspsc-version => text,
  * $$meta-extension,
}
activation-status = 43
channel-type = 44
colloquial-version = 45
description = 46
edition = 47
entitlement-data-required = 48
entitlement-key = 49
generator = 50
persistent-id = 51
product = 52
product-family = 53
revision = 54
summary = 55
unspsc-code = 56
unspsc-version = 57

The following describes each child item of this group.

2.8. The Resource Collection Definition

2.8.1. The hash-entry Array

CoSWID adds explicit support for the representation of hash entries using algorithms that are registered in the IANA “Named Information Hash Algorithm Registry” using the hash-entry member (label 58).

hash-entry = [ hash-alg-id: int, hash-value: bytes ]

The number used as a value for hash-alg-id MUST refer an ID in the “Named Information Hash Algorithm Registry” (see https://www.iana.org/assignments/named-information/named-information.xhtml); other hash algorithms MUST NOT be used. The hash-value MUST represent the raw hash value of the hashed resource generated using the hash algorithm indicated by the hash-alg-id.

2.8.2. The resource-collection Group

A list of items both used in evidence (created by a software discovery process) and payload (installed in an endpoint) content of a CoSWID tag document to structure and differentiate the content of specific CoSWID tag types. Potential content includes directories, files, processes, or resources.

The CDDL for the resource-collection group follows:

resource-collection = (
  ? directory => directory-entry,
  ? file => file-entry,
  ? process => process-entry,
  ? resource => resource-entry,
)

filesystem-item = (
  global-attributes,
  ? key => bool,
  ? location => text,
  fs-name => text,
  ? root => text,
)

path-elements-entry = [ [ * file-entry ],
                        [ * directory-entry ],
                      ]

file-entry = {
  filesystem-item,
  ? size => integer,
  ? file-version => text,
  ? hash => hash-entry,
  * $$file-extension
}

directory-entry = {
  filesystem-item,
  path-elements => path-elements-entry,
  * $$directory-extension
}

process-entry = {
  global-attributes,
  process-name => text,
  ? pid => integer,
  * $$process-extension
}

resource-entry = {
  global-attributes,
  type => text,
  * $$resource-extension
}

directory = 16
file = 17
process = 18
resource = 19
size = 20
file-version = 21
key = 22
location = 23
fs-name = 24
root = 25
path-elements = 26
process-name = 27
pid = 28
type = 29

The following describes each member of the groups and maps illustrated above.

2.8.3. The payload-entry Group

The CDDL for the payload-entry group follows:

payload-entry = {
  global-attributes,
  resource-collection,
  * $$payload-extension
}

The following describes each child item of this group.

2.8.4. The evidence-entry Group

The CDDL for the evidence-entry group follows:

evidence-entry = {
  global-attributes,
  resource-collection,
  ? date => time,
  ? device-id => text,
  * $$evidence-extension
}
date = 35
device-id = 36

The following describes each child item of this group.

2.9. Full CDDL Definition

In order to create a valid CoSWID document the structure of the corresponding CBOR message MUST adhere to the following CDDL data definition.

concise-swid-tag = {
  global-attributes,
  tag-id => text,
  tag-version => integer,
  ? corpus => bool,
  ? patch => bool,
  ? supplemental => bool,
  software-name => text,
  ? software-version => text,
  ? version-scheme => $version-scheme,
  ? media => text,
  ? software-meta =>  software-meta-entry / [ 2* software-meta-entry ],
  entity => entity-entry / [ 2* entity-entry ],
  ? link => link-entry / [ 2* link-entry ],
  ? (( payload => payload-entry ) // ( evidence => evidence-entry )),
  * $$coswid-extension 
}

any-uri = text
label = text / int

$version-scheme /= multipartnumeric
$version-scheme /= multipartnumeric-suffix
$version-scheme /= alphanumeric
$version-scheme /= decimal
$version-scheme /= semver
$version-scheme /= uint / text

any-attribute = (
  label => text / int / [ 2* text ] / [ 2* int ]
)

global-attributes = (
  ? lang => text,
  * any-attribute,
)

hash-entry = [ hash-alg-id: int,
               hash-value: bytes ]

entity-entry = {
  global-attributes,
  entity-name => text,
  ? reg-id => any-uri,
  role => $role / [ 2* $role ],
  ? thumbprint => hash-entry,
  * $$entity-extension,
}

$role /= tag-creator
$role /= software-creator
$role /= aggregator
$role /= distributor
$role /= licensor
$role /= uint / text

link-entry = {
  global-attributes,
  ? artifact => text,
  href => any-uri,
  ? media => text,
  ? ownership => $ownership,
  rel => $rel,
  ? media-type => text,
  ? use => $use,
  * $$link-extension 
}

$ownership /= shared
$ownership /= private
$ownership /= abandon
$ownership /= uint / text

$rel /= ancestor 
$rel /= component
$rel /= feature
$rel /= installationmedia
$rel /= packageinstaller
$rel /= parent
$rel /= patches
$rel /= requires
$rel /= see-also
$rel /= supersedes
$rel /= supplemental
$rel /= uint / text

$use /= optional
$use /= required
$use /= recommended
$use /= uint / text

software-meta-entry = {
  global-attributes,
  ? activation-status => text,
  ? channel-type => text,
  ? colloquial-version => text,
  ? description => text,
  ? edition => text,
  ? entitlement-data-required => bool,
  ? entitlement-key => text,
  ? generator => text,
  ? persistent-id => text,
  ? product => text,
  ? product-family => text,
  ? revision => text,
  ? summary => text,
  ? unspsc-code => text,
  ? unspsc-version => text,
  * $$meta-extension,
}

resource-collection = (
  ? directory => directory-entry,
  ? file => file-entry,
  ? process => process-entry,
  ? resource => resource-entry,
  * $$resource-collection-extension
)

file-entry = {
  filesystem-item,
  ? size => integer,
  ? file-version => text,
  ? hash => hash-entry,
  * $$file-extension
}

path-elements-entry = [ [ * file-entry ],
                        [ * directory-entry ],
                      ]

directory-entry = {
  filesystem-item,
  path-elements => path-elements-entry,
  * $$directory-extension
}

process-entry = {
  global-attributes,
  process-name => text,
  ? pid => integer,
  * $$process-extension
}

resource-entry = {
  global-attributes,
  type => text,
  * $$resource-extension
}

filesystem-item = (
  global-attributes,
  ? key => bool,
  ? location => text,
  fs-name => text,
  ? root => text,
)

payload-entry = {
  global-attributes,
  resource-collection,
  * $$payload-extension 
}

evidence-entry = {
  global-attributes,
  resource-collection,
  ? date => time,
  ? device-id => text,
  * $$evidence-extension 
}

; "global map member" integer indexes
tag-id = 0
software-name = 1
entity = 2
evidence = 3
link = 4
software-meta = 5
payload = 6
hash = 7
corpus = 8
patch = 9
media = 10
supplemental = 11
tag-version = 12
software-version = 13
version-scheme = 14
lang = 15
directory = 16
file = 17
process = 18
resource = 19
size = 20
file-version = 21
key = 22
location = 23
fs-name = 24
root = 25
path-elements = 26
process-name = 27
pid = 28
type = 29
entity-name = 31
reg-id = 32
role = 33
thumbprint = 34
date = 35
device-id = 36
artifact = 37
href = 38
ownership = 39
rel = 40
media-type = 41
use = 42
activation-status = 43
channel-type = 44
colloquial-version = 45
description = 46
edition = 47
entitlement-data-required = 48
entitlement-key = 49
generator = 50
persistent-id = 51
product = 52
product-family = 53
revision = 54
summary = 55
unspsc-code = 56
unspsc-version = 57

; "version-scheme" integer indexes
multipartnumeric = 1
multipartnumeric-suffix = 2
alphanumeric = 3
decimal = 4
semver = 16384

; "role" integer indexes
tag-creator=1
software-creator=2
aggregator=3
distributor=4
licensor=5

; ownership integer indexes
shared=1
private=2
abandon=3

; "rel" integer indexes
ancestor=1
component=2
feature=3
installationmedia=4
packageinstaller=5
parent=6
patches=7
requires=8
see-also=9
supersedes=10
supplemental=11

; "use" integer indexes
optional=1
required=2
recommended=3

3. Determining the Type of CoSWID

The operational model for SWID and CoSWID tags was introduced in Section 1.1, which described four different CoSWID tag types. The following additional rules apply to the use of CoSWID tags to ensure that created tags properly identify the tag type.

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 corpus, patch, and supplemental items are “false”.
  2. Supplemental Tag: A CoSWID tag MUST be considered a supplemental tag if the supplemental item is set to “true”.
  3. Corpus Tag: A CoSWID tag MUST be considered a corpus tag if the corpus item is “true”.
  4. Patch Tag: A CoSWID tag MUST be considered a patch tag if the patch item is “true”.

Note: Multiple of the corpus, patch, and supplemental items can have values set as “true”. The rules above provide a means to determine the tag’s type in such a case. For example, a SWID or CoSWID tag for a patch installer might have both corpus and patch items set to “true”. In such a case, the tag is a “Corpus Tag”. The tag installed 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.1. Version Scheme

The following table contains a set of values for use in the concise-swid-tag group’s version-scheme item. These values match the version schemes defined in the ISO/IEC 19770-2:2015 [SWID] specification. Index value indicates the value to use as the version-scheme item’s value. The Version Scheme Name provides human-readable text for the value. The Definition describes the syntax of allowed values for each entry.

Version Scheme Values
Index Version Scheme Name Definition
1 multipartnumeric Numbers separated by dots, where the numbers are interpreted as integers (e.g.,1.2.3, 1.4.5, 1.2.3.4.5.6.7)
2 multipartnumeric+suffix Numbers separated by dots, where the numbers are interpreted as integers with an additional textual suffix (e.g., 1.2.3a)
3 alphanumeric Strictly a string, sorting is done alphanumerically
4 decimal A floating point number (e.g., 1.25 is less than 1.3)
16384 semver Follows the [SEMVER] specification

The values above are registered in the IANA “SWID/CoSWID Version Scheme Value” registry defined in section Section 5.2.1. Additional values will likely be registered over time in this registry. Additionally, the index values 32768 through 65535 and the name prefix “x_” have been reserved for private use.

4.2. Entity Role Values

The following table indicates the index value to use for the entity-entry group’s role item (see Section 2.5). These values match the entity roles defined in the ISO/IEC 19770-2:2015 [SWID] specification. The “Index” value indicates the value to use as the role item’s value. The “Role Name” provides human-readable text for the value. The “Definition” describes the semantic meaning of each entry.

Entity Role Values
Index Role Name Definition
1 tagCreator The person or organization that created the containing SWID or CoSWID tag
2 softwareCreator The person or organization entity that created the software component.
3 aggregator From [SWID], “An organization or system that encapsulates software from their own and/or other organizations into a different distribution process (as in the case of virtualization), or as a completed system to accomplish a specific task (as in the case of a value added reseller).”
4 distributor From [SWID], “An entity that furthers the marketing, selling and/or distribution of software from the original place of manufacture to the ultimate user without modifying the software, its packaging or its labelling.”
5 licensor From [SAM] as “software licensor”, a “person or organization who owns or holds the rights to issue a software license for a specific software [component]”

The values above are registered in the IANA “SWID/CoSWID Entity Role Value” registry defined in section Section 5.2.2. Additional values will likely be registered over time. Additionally, the index values 128 through 255 and the name prefix “x_” have been reserved for private use.

4.3. Link Ownership Values

The following table indicates the index value to use for the link-entry group’s ownership item (see Section 2.6). These values match the link ownership values defined in the ISO/IEC 19770-2:2015 [SWID] specification. The “Index” value indicates the value to use as the link-entry group ownership item’s value. The “Ownership Type” provides human-readable text for the value. The “Definition” describes the semantic meaning of each entry.

Link Ownership Values
Index Ownership Type Definition
1 abandon If the software component referenced by the CoSWID tag is uninstalled, then the referenced software SHOULD not be uninstalled
2 private If the software component referenced by the CoSWID tag is uninstalled, then the referenced software SHOULD be uninstalled as well.
3 shared If the software component referenced by the CoSWID tag is uninstalled, then the referenced software SHOULD be uninstalled if no other components sharing the software.

The values above are registered in the IANA “SWID/CoSWID Link Ownership Value” registry defined in section Section 5.2.3. Additional values will likely be registered over time. Additionally, the index values 128 through 255 and the name prefix “x_” have been reserved for private use.

4.4. Link Rel Values

The following table indicates the index value to use for the link-entry group’s rel item (see Section 2.6). These values match the link rel values defined in the ISO/IEC 19770-2:2015 [SWID] specification. The “Index” value indicates the value to use as the link-entry group ownership item’s value. The “Relationship Type” provides human-readable text for the value. The “Definition” describes the semantic meaning of each entry.

Link Relationship Values
Index Relationship Type Definition
1 ancestor The link references a SWID/CoSWID tag for a previous release of this software. This can be useful to define an upgrade path.
2 component The link references a SWID/CoSWID tag for a separate component of this software.
3 feature The link references a configurable feature of this software that can be enabled or disabled without changing the installed files.
4 installationmedia The link references the installation package that can be used to install this software.
5 packageinstaller The link references the installation software needed to install this software.
6 parent The link references a SWID/CoSWID tag that is the parent of this SWID/CoSWID tag. This relationship can be used when multiple software components are part of a software bundle, where the “parent” is the SWID/CoSWID tag for the bundle, and each child is a “component”. In such a case, each child component can provide a “parent” link relationship to the bundle’s SWID/CoSWID tag, and the bundle can provide a “component” link relationship to each child software component.
7 patches The link references a SWID/CoSWID tag that this software patches. Typically only used for patch SWID/CoSWID tags (see Section 1.1).
8 requires The link references a prerequisite for installing this software. A patch SWID/CoSWID tag (see Section 1.1) can use this to represent base software or another patch that needs to be installed first.
9 see-also The link references other software that may be of interest that relates to this software.
10 supersedes The link references another software that this software replaces. A patch SWID/CoSWID tag (see Section 1.1) can use this to represent another patch that this patch incorporates or replaces.
11 supplemental The link references a SWID/CoSWID tag that this tag supplements. Used on supplemental SWID/CoSWID tags (see Section 1.1).

The values above are registered in the IANA “SWID/CoSWID Link Relationship Value” registry defined in section Section 5.2.4. Additional values will likely be registered over time. Additionally, the index values 32768 through 65535 and the name prefix “x_” have been reserved for private use.

4.5. Link Use Values

The following table indicates the index value to use for the link-entry group’s use item (see Section 2.6). These values match the link use values defined in the ISO/IEC 19770-2:2015 [SWID] specification. The “Index” value indicates the value to use as the link-entry group use item’s value. The “Use Type” provides human-readable text for the value. The “Definition” describes the semantic meaning of each entry.

Link Use Values
Index Use Type Definition
1 optional From [SWID], “Not absolutely required; the [Link]‘d software is installed only when specified.”
2 required From [SWID], “The [Link]‘d software is absolutely required for an operation software installation.”
3 recommended From [SWID], “Not absolutely required; the [Link]‘d software is installed unless specified otherwise.”

The values above are registered in the IANA “SWID/CoSWID Link Use Value” registry defined in section Section 5.2.5. Additional values will likely be registered over time. Additionally, the index values 128 through 255 and the name prefix “x_” have been reserved for private use.

5. IANA Considerations

This document has a number of IANA considerations, as described in the following subsections.

5.1. CoSWID Items Registry

This document uses integer values as index values in CBOR maps.

This document defines a new a new registry titled “CoSWID Items”. Future registrations for this registry are to be made based on [RFC8126] as follows:

CoSWID Items Registration Proceedures
Range Registration Procedures
0-32767 Standards Action
32768-4294967295 Specification Required

All negative values are reserved for Private Use.

Initial registrations for the “CoSWID Items” registry are provided below. Assignments consist of an integer index value, the item name, and a reference to the defining specification.

CoSWID Items Inital Registrations
Index Item Name Specification
0 tag-id RFC-AAAA
1 software-name RFC-AAAA
2 entity RFC-AAAA
3 evidence RFC-AAAA
4 link RFC-AAAA
5 software-meta RFC-AAAA
6 payload RFC-AAAA
7 hash RFC-AAAA
8 corpus RFC-AAAA
9 patch RFC-AAAA
10 media RFC-AAAA
11 supplemental RFC-AAAA
12 tag-version RFC-AAAA
13 software-version RFC-AAAA
14 version-scheme RFC-AAAA
15 lang RFC-AAAA
16 directory RFC-AAAA
17 file RFC-AAAA
18 process RFC-AAAA
19 resource RFC-AAAA
20 size RFC-AAAA
21 file-version RFC-AAAA
22 key RFC-AAAA
23 location RFC-AAAA
24 fs-name RFC-AAAA
25 root RFC-AAAA
26 path-elements RFC-AAAA
27 process-name RFC-AAAA
28 pid RFC-AAAA
29 type RFC-AAAA
31 entity-name RFC-AAAA
32 reg-id RFC-AAAA
33 role RFC-AAAA
34 thumbprint RFC-AAAA
35 date RFC-AAAA
36 device-id RFC-AAAA
37 artifact RFC-AAAA
38 href RFC-AAAA
39 ownership RFC-AAAA
40 rel RFC-AAAA
41 media-type RFC-AAAA
42 use RFC-AAAA
43 activation-status RFC-AAAA
44 channel-type RFC-AAAA
45 colloquial-version RFC-AAAA
46 description RFC-AAAA
47 edition RFC-AAAA
48 entitlement-data-required RFC-AAAA
49 entitlement-key RFC-AAAA
50 generator RFC-AAAA
51 persistent-id RFC-AAAA
52 product RFC-AAAA
53 product-family RFC-AAAA
54 revision RFC-AAAA
55 summary RFC-AAAA
56 unspsc-code RFC-AAAA
57 unspsc-version RFC-AAAA
58-4294967295 Unassigned

5.2. SWID/CoSWID Value Registries

The following IANA registries provide a mechanism for new values to be added over time to common enumerations used by SWID and CoSWID.

5.2.1. SWID/CoSWID Version Scheme Value Registry

This document uses unsigned 16-bit index values to represent version-scheme item values. The initial set of version-scheme values are derived from the textual version scheme names defined in the ISO/IEC 19770-2:2015 specification [SWID].

This document defines a new a new registry titled “SWID/CoSWID Version Scheme Values”. Future registrations for this registry are to be made based on [RFC8126] as follows:

[TO BE REMOVED: This registration should take place at the following location: https://www.iana.org/assignments/swid]

CoSWID Version Scheme Registration Proceedures
Range Registration Procedures
0-16383 Standards Action
16384-32767 Specification Required
32768-65535 Reserved for Private Use

Initial registrations for the “SWID/CoSWID Version Scheme Value” registry are provided below. Assignments consist of an integer Index value, the Version Scheme Name, and a reference to the defining specification.

CoSWID Version Scheme Inital Registrations
Index Version Scheme Name Specification
0 Reserved
1 multipartnumeric See Section 4.1
2 multipartnumeric+suffix See Section 4.1
3 alphanumeric See Section 4.1
4 decimal See Section 4.1
5-16383 Unassigned
16384 semver [SEMVER]
16385-32767 Unassigned
32768-65535 Reserved for Private Use

Additional syntax requirements for registrations:

5.2.2. SWID/CoSWID Entity Role Value Registry

This document uses unsigned 8-bit index values to represent entity-entry role item values. The initial set of Entity roles are derived from the textual role names defined in the ISO/IEC 19770-2:2015 specification [SWID].

This document defines a new a new registry titled “SWID/CoSWID Entity Role Values”. Future registrations for this registry are to be made based on [RFC8126] as follows:

[TO BE REMOVED: This registration should take place at the following location: https://www.iana.org/assignments/swid]

CoSWID Entity Role Registration Proceedures
Range Registration Procedures
0-31 Standards Action
32-127 Specification Required
128-255 Reserved for Private Use

Initial registrations for the “SWID/CoSWID Entity Role Value” registry are provided below. Assignments consist of an integer Index value, a Role Name, and a reference to the defining specification.

CoSWID Entity Role Inital Registrations
Index Role Name Specification
0 Reserved
1 tagCreator See Section 4.2
2 softwareCreator See Section 4.2
3 aggregator See Section 4.2
4 distributor See Section 4.2
5 licensor See Section 4.2
6-127 Unassigned
128-255 Reserved for Private Use

Additional syntax requirements for registrations:

5.2.3. SWID/CoSWID Link Ownership Value Registry

This document uses unsigned 8-bit index values to represent link-entry ownership item values. The initial set of Link ownership values are derived from the textual ownership names defined in the ISO/IEC 19770-2:2015 specification [SWID].

This document defines a new a new registry titled “SWID/CoSWID Link Ownership Values”. Future registrations for this registry are to be made based on [RFC8126] as follows:

[TO BE REMOVED: This registration should take place at the following location: https://www.iana.org/assignments/swid]

CoSWID Link Ownership Registration Proceedures
Range Registration Procedures
0-31 Standards Action
32-127 Specification Required
128-255 Reserved for Private Use

Initial registrations for the “SWID/CoSWID Link Ownership Value” registry are provided below. Assignments consist of an integer Index value, an Ownership Type Name, and a reference to the defining specification.

CoSWID Link Ownership Inital Registrations
Index Ownership Type Name Definition
0 Reserved
1 abandon See Section 4.3
2 private See Section 4.3
3 shared See Section 4.3
4-16384 Unassigned
16385-32767 Unassigned
32768-65535 Reserved for Private Use

Additional syntax requirements for registrations:

5.2.4. SWID/CoSWID Link Relationship Value Registry

This document uses unsigned 16-bit index values to represent link-entry rel item values. The initial set of rel values are derived from the textual rel names defined in the ISO/IEC 19770-2:2015 specification [SWID].

This document defines a new a new registry titled “SWID/CoSWID Link Relationship Values”. Future registrations for this registry are to be made based on [RFC8126] as follows:

[TO BE REMOVED: This registration should take place at the following location: https://www.iana.org/assignments/swid]

CoSWID Link Relationship Registration Proceedures
Range Registration Procedures
0-16383 Standards Action
16384-32767 Specification Required
32768-65535 Reserved for Private Use

Initial registrations for the “SWID/CoSWID Link Relationship Value” registry are provided below. Assignments consist of an integer Index value, the Relationship Type Name, and a reference to the defining specification.

CoSWID Link Relationship Inital Registrations
Index Relationship Type Name Specification
0 Reserved
1 ancestor See Section 4.4
2 component See Section 4.4
3 feature See Section 4.4
4 installationmedia See Section 4.4
5 packageinstaller See Section 4.4
6 parent See Section 4.4
7 patches See Section 4.4
8 requires See Section 4.4
9 see-also See Section 4.4
10 supersedes See Section 4.4
11 supplemental See Section 4.4
12-16384 Unassigned
16385-32767 Unassigned
32768-65535 Reserved for Private Use

Additional syntax requirements for registrations:

5.2.5. SWID/CoSWID Link Use Value Registry

This document uses unsigned 8-bit index values to represent link-entry use item values. The initial set of Link use values are derived from the textual names defined in the ISO/IEC 19770-2:2015 specification [SWID].

This document defines a new a new registry titled “SWID/CoSWID Link Use Values”. Future registrations for this registry are to be made based on [RFC8126] as follows:

[TO BE REMOVED: This registration should take place at the following location: https://www.iana.org/assignments/swid]

CoSWID Link Use Registration Proceedures
Range Registration Procedures
0-31 Standards Action
32-127 Specification Required
128-255 Reserved for Private Use

Initial registrations for the “SWID/CoSWID Entity Role Value” registry are provided below. Assignments consist of an integer Index value, the Link Use Type Name, and a reference to the defining specification.

CoSWID Link Use Inital Registrations
Index Link Use Type Name Specification
0 Reserved
1 optional See Section 4.5
2 required See Section 4.5
3 recommended See Section 4.5
4-127 Unassigned
128-255 Reserved for Private Use

Additional syntax requirements for registrations:

5.3. swid+cbor Media Type Registration

IANA is requested to add the following to the IANA “Media Types” registry.

Type name: application

Subtype name: swid+cbor

Required parameters: none

Optional parameters: none

Encoding considerations: Must be encoded as using [RFC7049]. See RFC-AAAA for details.

Security considerations: See Section 6 of RFC-AAAA.

Interoperability considerations: Applications MAY ignore any key value pairs that they do not understand. This allows backwards compatible extensions to this specification.

Published specification: RFC-AAAA

Applications that use this media type: The type is used by software asset management systems, vulnerability assessment systems, and in applications that use remote integrity verification.

Fragment identifier considerations: Fragment identification for application/swid+cbor is supported by using fragment identifiers as specified by RFC-7049 section 7.5.

Additional information:

Magic number(s): first five bytes in hex: da 53 57 49 44

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: Henk Birkholz <henk.birkholz@sit.fraunhofer.de>

Intended usage: COMMON

Restrictions on usage: None

Author: Henk Birkholz <henk.birkholz@sit.fraunhofer.de>

Change controller: IESG

5.4. CoAP Content-Format Registration

IANA is requested to assign a CoAP Content-Format ID for the CoSWID media type in the “CoAP Content-Formats” sub-registry, from the “IETF Review or IESG Approval” space (256..999), within the “CoRE Parameters” registry [RFC7252]:

CoAP Content-Format IDs
Media type Encoding ID Reference
application/swid+cbor - TBD1 RFC-AAAA

5.5. CBOR Tag Registration

IANA is requested to allocate a tag in the “CBOR Tags” registry, preferably with the specific value requested:

CoSWID CBOR Tag
Tag Data Item Semantics
1398229316 map Concise Software Identifier (CoSWID) [RFC-AAAA]

6. Security Considerations

SWID and CoSWID tags contain public information about software components and, as such, do not need to be protected against disclosure on an endpoint. Similarly, SWID/CoSWID tags are intended to be easily discoverable by applications and users on an endpoint in order to make it easy to identify and collect all of an endpoint’s SWID tags. As such, any security considerations regarding SWID/CoSWID tags focus on the application of SWID/CoSWID tags to address security challenges, and the possible disclosure of the results of those applications.

A signed SWID/CoSWID tag whose signature has been validated can be relied upon to be unchanged since it was signed. If the SWID/CoSWID tag was created by the software provider, is signed, and the software provider can be authenticated as the originator of the signature, then the tag can be considered authoritative. In this way, an authoritative SWID/CoSWID tag contains information about a software component provided by the maintainer of the software component, who is expected to be an expert in their own software. Thus, authoritative SWID/CoSWID tags can be trusted to represent authoritative information about the software component. Having an authoritative SWID/CoSWID tag can be useful when the information in the tag needs to be trusted, such as when the tag is being used to convey reference integrity measurements for software components. By contrast, the data contained in unsigned tags cannot be trusted to be unmodified.

SWID/CoSWID tags are designed to be easily added and removed from an endpoint along with the installation or removal of software components. On endpoints where addition or removal of software components is tightly controlled, the addition or removal of SWID tags can be similarly controlled. On more open systems, where many users can manage the software inventory, SWID/CoSWID tags can be easier to add or remove. On such systems, it can be possible to add or remove SWID/CoSWID tags in a way that does not reflect the actual presence or absence of corresponding software components. Similarly, not all software products automatically install SWID/CoSWID tags, so products can be present on an endpoint without providing a corresponding SWID tag. As such, any collection of SWID/CoSWID tags cannot automatically be assumed to represent either a complete or fully accurate representation of the software inventory of the endpoint. However, especially on endpoint devices that more strictly control the ability to add or remove applications, SWID/CoSWID tags are an easy way to provide an preliminary understanding of that endpoint’s software inventory.

Any report of an endpoint’s SWID/CoSWID tag collection provides information about the software inventory of that endpoint. If such a report is exposed to an attacker, this can tell them which software products and versions thereof are present on the endpoint. By examining this list, the attacker might learn of the presence of applications that are vulnerable to certain types of attacks. As noted earlier, SWID/CoSWID tags are designed to be easily discoverable by an endpoint, but this does not present a significant risk since an attacker would already need to have access to the endpoint to view that information. However, when the endpoint transmits its software inventory to another party, or that inventory is stored on a server for later analysis, this can potentially expose this information to attackers who do not yet have access to the endpoint. For this reason, it is important to protect the confidentiality of SWID/CoSWID tag information that has been collected from an endpoint, not because those tags individually contain sensitive information, but because the collection of SWID/CoSWID tags and their association with an endpoint reveals information about that endpoint’s attack surface.

Finally, both the ISO-19770-2:2015 XML schema SWID definition and the CoSWID data definition allow for the construction of “infinite” tags with link item loops or tags that contain malicious content with the intent of creating non-deterministic states during validation or processing of those tags. While software providers are unlikely to do this, SWID/CoSWID tags can be created by any party and the SWID/CoSWID tags collected from an endpoint could contain a mixture of vendor and non-vendor created tags. For this reason, tools that consume SWID/CoSWID tags ought to treat the tag contents as potentially malicious and employ input sanitizing and loop detection on the tags they ingest.

7. Acknowledgments

TBD

8. Change Log

Changes from version 03 to version 11:

Changes from version 02 to version 03:

Changes from version 01 to version 02:

Changes from version 00 to version 01:

Changes since adopted as a WG I-D -00:

Changes from version 06 to version 07:

Changes from version 05 to version 06:

Changes from version 04 to version 05:

Changes from version 03 to version 04:

Changes from version 02 to version 03:

Changes from version 01 to version 02:

Changes from version 00 to version 01:

9. Contributors

10. References

10.1. Normative References

[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997.
[RFC5646] Phillips, A. and M. Davis, "Tags for Identifying Languages", BCP 47, RFC 5646, DOI 10.17487/RFC5646, September 2009.
[RFC7049] Bormann, C. and P. Hoffman, "Concise Binary Object Representation (CBOR)", RFC 7049, DOI 10.17487/RFC7049, October 2013.
[RFC7252] Shelby, Z., Hartke, K. and C. Bormann, "The Constrained Application Protocol (CoAP)", RFC 7252, DOI 10.17487/RFC7252, June 2014.
[RFC8126] Cotton, M., Leiba, B. and T. Narten, "Guidelines for Writing an IANA Considerations Section in RFCs", BCP 26, RFC 8126, DOI 10.17487/RFC8126, June 2017.
[RFC8152] Schaad, J., "CBOR Object Signing and Encryption (COSE)", RFC 8152, DOI 10.17487/RFC8152, July 2017.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017.
[RFC8288] Nottingham, M., "Web Linking", RFC 8288, DOI 10.17487/RFC8288, October 2017.
[RFC8610] Birkholz, H., Vigano, C. and C. Bormann, "Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610, June 2019.
[SAM] "Information technology - Software asset management - Part 5: Overview and vocabulary", ISO/IEC 19770-5:2015, November 2013.
[SEMVER] Preston-Werner, T., "Semantic Versioning 2.0.0", n.d..
[SWID] "Information technology - Software asset management - Part 2: Software identification tag", ISO/IEC 19770-2:2015, October 2015.
[W3C.REC-css3-mediaqueries-20120619] Rivoal, F., "Media Queries", World Wide Web Consortium Recommendation REC-css3-mediaqueries-20120619, June 2012.
[W3C.REC-xmlschema-2-20041028] Biron, P. and A. Malhotra, "XML Schema Part 2: Datatypes Second Edition", World Wide Web Consortium Recommendation REC-xmlschema-2-20041028, October 2004.
[W3C.REC-xpath20-20101214] Berglund, A., Boag, S., Chamberlin, D., Fernandez, M., Kay, M., Robie, J. and J. Simeon, "XML Path Language (XPath) 2.0 (Second Edition)", World Wide Web Consortium Recommendation REC-xpath20-20101214, December 2010.
[X.1520] "Recommendation ITU-T X.1520 (2014), Common vulnerabilities and exposures", April 2011.

10.2. Informative References

[CamelCase] "UpperCamelCase", August 2014.
[I-D.birkholz-rats-tuda] Fuchs, A., Birkholz, H., McDonald, I. and C. Bormann, "Time-Based Uni-Directional Attestation", Internet-Draft draft-birkholz-rats-tuda-00, March 2019.
[KebabCase] "KebabCase", December 2014.
[RFC4122] Leach, P., Mealling, M. and R. Salz, "A Universally Unique IDentifier (UUID) URN Namespace", RFC 4122, DOI 10.17487/RFC4122, July 2005.
[RFC8322] Field, J., Banghart, S. and D. Waltermire, "Resource-Oriented Lightweight Information Exchange (ROLIE)", RFC 8322, DOI 10.17487/RFC8322, February 2018.
[RFC8520] Lear, E., Droms, R. and D. Romascanu, "Manufacturer Usage Description Specification", RFC 8520, DOI 10.17487/RFC8520, March 2019.
[SWID-GUIDANCE] Waltermire, D., Cheikes, B., Feldman, L. and G. Witte, "Guidelines for the Creation of Interoperable Software Identification (SWID) Tags", NISTIR 8060, April 2016.

Appendix A. Signed Concise SWID Tags using COSE

SWID tags, as defined in the ISO-19770-2:2015 XML schema, can include cryptographic signatures to protect the integrity of the SWID tag. In general, tags are signed by the tag creator (typically, although not exclusively, the vendor of the software component that the SWID tag identifies). Cryptographic signatures can make any modification of the tag detectable, which is especially important if the integrity of the tag is important, such as when the tag is providing reference integrity measurements for files.

The ISO-19770-2:2015 XML schema uses XML DSIG to support cryptographic signatures. CoSWID tags require a different signature scheme than this. COSE (CBOR Object Signing and Encryption) provides the required mechanism [RFC8152]. Concise SWID can be wrapped in a COSE Single Signer Data Object (COSE_Sign1) that contains a single signature. The following CDDL defines a more restrictive subset of header attributes allowed by COSE tailored to suit the requirements of Concise SWID tags.

<CODE BEGINS>
signed-coswid = #6.18(COSE-Sign1-coswid)

cose-label = int / tstr
cose-values = any

protected-signed-coswid-header = {
    1 => int,                      ; algorithm identifier
    3 => "application/swid+cbor",
    * cose-label => cose-values,
}

unprotected-signed-coswid-header = {
    4 => bstr,                     ; key identifier
    * cose-label => cose-values,
}

COSE-Sign1-coswid = [
    protected: bstr .cbor protected-signed-coswid-header,
    unprotected: unprotected-signed-coswid-header,
    payload: bstr .cbor concise-swid-tag,
    signature: bstr,
]
<CODE ENDS>

Optionally, the COSE_Sign structure that allows for more than one signature to be applied to a CoSWID tag MAY be used. The corresponding usage scenarios are domain-specific and require well-defined application guidance. Representation of the corresponding guidance is out-of-scope of this document.

Additionally, the COSE Header counter signature MAY be used as an attribute in the unprotected header map of the COSE envelope of a CoSWID. The application of counter signing enables second parties to provide a signature on a signature allowing for a proof that a signature existed at a given time (i.e., a timestamp).

Authors' Addresses

Henk Birkholz Fraunhofer SIT Rheinstrasse 75 Darmstadt, 64295 Germany EMail: henk.birkholz@sit.fraunhofer.de
Jessica Fitzgerald-McKay Department of Defense 9800 Savage Road Ft. Meade, Maryland USA EMail: jmfitz2@nsa.gov
Charles Schmidt The MITRE Corporation 202 Burlington Road Bedford, Maryland 01730 USA EMail: cmschmidt@mitre.org
David Waltermire National Institute of Standards and Technology 100 Bureau Drive Gaithersburg, Maryland 20877 USA EMail: david.waltermire@nist.gov