Draft: draft-ietf-sacm-coswid

Commentary: Pulling the -05 revision .
Paragraph (version A):
This document defines a concise representation of ISO/IEC
19770-2:2015 Software Identifiers (SWID tags) that is interoperable
with the XML schema definition of ISO/IEC 19770-2:2015 and augmented
for application in Constrained-Node Networks.  Next to the inherent
capability of SWID tags to express arbitrary context information,
CoSWID support the definition of additional semantics via well-
defined data definitions incorporated by extension points.
Paragraph (version B):
This document defines a concise representation of ISO/IEC
19770-2:2015 Software Identification (SWID) tags that are
interoperable with the XML schema definition of ISO/IEC 19770-2:2015
and augmented for application in Constrained-Node Networks.  Next to
the inherent capability of SWID tags to express arbitrary context
information, Concise SWID (CoSWID) tags support the definition of
additional semantics via well-defined data definitions incorporated
by extension points.
Paragraph (version A):
Vulnerability Assessment, which requires a semantic link between
standardized vulnerability descriptions and IT-assets X.1520.
Paragraph (version A):
SWID tags, as defined in ISO-19770-2:2015 SWID, provide a
standardized format for a record that identifies and describes a
specific release of a software component.  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.
Paragraph (version A):
Real-world instances of SWID tags can be fairly large, and the
communication of SWID tags in use-applications 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.  CoSWID tags significantly reduce the amount of data
transported as compared to a typical SWID tag.  This reduction is
enable through the use of CBOR, which maps human-readable labels of
that content to more concise integer labels (indices).  This allows
SWID tags to be part of an enterprise security solution for a wider
range of endpoints and environments.
Paragraph (version A):
In addition to defining the format of these records, ISO/IEC
19770-2:2015 defines requirements concerning the SWID tag life-cycle.
Specifically, when a software component is installed on an endpoint,
that product's SWID tag is also installed.  Likewise, when the
product 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 products on an endpoint, and the presence on
that endpoint of the SWID tags corresponding to those products.
Paragraph (version B):
Vulnerability Assessment, which requires a semantic link between
standardized vulnerability descriptions and software components
installed on IT-assets X.1520.
Paragraph (version B):
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 a software component.  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.
Paragraph (version B):
While there are very few required fields in SWID tags, there are many
optional fields that support different use scenarios.  While a SWID
tag consisting of only required fields might be a few hundred bytes
in size, 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 use-
applications 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 human-readable labels of that content 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.
Paragraph (version B):
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 product's SWID tag is also installed.  Likewise, when the
product 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 correspondingsponding SWID tags for these components on that
endpoint.  CoSWIDs share the same lifecycle requirements as a SWID
tag.
Paragraph (version A):
Primary Tag - A SWID tag that identifies and describes a
software component is installed on a computing device.
Paragraph (version A):
Patch Tag - A SWID tag that identifies and describes an
installed patch which has made incremental changes to a
software component installed on a computing device.
Paragraph (version A):
Corpus Tag - A SWID 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.
Paragraph (version A):
Supplemental Tag - A SWID tag that allows additional
information to be associated with a referenced SWID tag.  This
helps to ensure that SWID Primary and Patch Tags provided by a
software provider are not modified by software management
tools, while allowing these tools to provide their own software
metadata.
Paragraph (version B):
Primary Tag - A SWID or CoSWID tag that identifies and describes a
software component is installed on a computing device.
Paragraph (version B):
Patch Tag - A SWID or CoSWID tag that identifies and describes an
installed patch which has made incremental changes to a software
component installed on a computing device.
Paragraph (version B):
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.
Paragraph (version B):
Supplemental Tag - A SWID or CoSWID tag that allows additional
information to be associated with a referenced SWID tag.  This
helps to ensure that SWID Primary and Patch Tags provided by a
software provider are not modified by software management tools,
while allowing these tools to provide their own software metadata.
Paragraph (version A):
The figure above illustrates the steps in the software lifecycle
and the relationships among those lifecycle events supported by
the four types of SWID tags, as follows: - Software Deployment.
Before the software component is installed (i.e., pre-
installation), and while the product is being deployed, a corpus
tag provides information about the installation files and
distribution media (e.g., CD/DVD, distribution package).  -
Software Installation.  A primary tag will be installed with the
software component (or subsequently created) to uniquely identify
and describe the software component.  Supplemental tags are
created to augment primary tags with additional site-specific or
extended information.  While not illustrated in the figure, patch
tags may also be installed during software installation to provide
information about software fixes deployed along with the base
software installation.  - Software Patching.  When a new patch is
applied to the software component, a new patch tag is provided,
supplying details about the patch and its dependencies.  While not
illustrated in the figure, a corpus tag can also provide
information about the patch installer, and patching dependencies
that need to be installed before the patch.  - Software Upgrading.
As a software component is upgraded to a new version, new primary
and supplemental tags replace existing tags, enabling timely and
accurate tracking of updates to software inventory.  While not
illustrated in the figure, a corpus tag can also provide
information about the upgrade installer, and dependencies that
need to be installed before the upgrade.  - Software Removal.
Upon removal of the software component, relevant SWID tags are
removed.  This removal event can trigger timely updates to
software inventory reflecting the removal of the product and any
associated patch or supplemental tags.
Paragraph (version A):
Each of the different SWID tag types of SWID tags provide different
types of information.  For example, a "corpus tag" is used to
describe an application's installation image on an installation
media, while a "patch tag" is meant to describe a patch that modifies
some other application.  While there are very few required fields in
SWID tags, there are many optional fields that support different uses
of these different types of tags.  While a SWID tag that consisted
only of required fields could be a few hundred bytes in size, a tag
containing many of the optional fields could be many orders of
magnitude larger.
Paragraph (version A):
This document defines a more concise representation of SWID tags in
the Concise Binary Object Representation (CBOR) RFC7049.  This is
described via the Concise Data Definition Language (CDDL) I-D.ietf-
cbor-cddl.  The resulting Concise SWID data definition is
interoperable with the XML schema definition of ISO-19770-2:2015
SWID.  The vocabulary, i.e., the CDDL names of the types and members
used in the CoSWID data definition, is mapped to more concise labels
represented as small integers.  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.
Paragraph (version A):
This document specifies a standardized equivalent to the ISO-
19770-2:2015 standard.  The corresponding CoSWID data definition
includes two kinds of augmentation.
Paragraph (version A):
the explicit definition of types for attributes that are typically
stored in the "any attribute" of an ISO-19770-2:2015 in XML
representation.  These are covered in the main body of this
document.
Paragraph (version A):
the inclusion of extension points in the CoSWID data definition
that allow for additional uses of CoSWID tags that go beyond the
original scope of ISO-19770-2:2015 tags.  These are covered in
appendices to this document.
Paragraph (version B):
Software Deployment.  Before the software component is
installed (i.e., pre-installation), and while the product is
being deployed, a corpus tag provides information about the
installation files and distribution media (e.g., CD/DVD,
distribution package).
Paragraph (version B):
Software Installation.  A primary tag will be installed with
the software component (or subsequently created) to uniquely
identify and describe the software component.  Supplemental
tags are created to augment primary tags with additional site-
specific or extended information.  While not illustrated in the
figure, patch tags may also be installed during software
installation to provide information about software fixes
deployed along with the base software installation.
Paragraph (version B):
Software Patching.  When a new patch is applied to the software
component, a new patch tag is provided, supplying details about
the patch and its dependencies.  While not illustrated in the
figure, a corpus tag can also provide information about the
patch installer, and patching dependencies that need to be
installed before the patch.
Paragraph (version B):
Software Upgrading.  As a software component is upgraded to a
new version, new primary and supplemental tags replace existing
tags, enabling timely and accurate tracking of updates to
software inventory.  While not illustrated in the figure, a
corpus tag can also provide information about the upgrade
installer, and dependencies that need to be installed before
the upgrade.
Paragraph (version B):
Software Removal.  Upon removal of the software component,
relevant SWID tags are removed.  This removal event can trigger
timely updates to software inventory reflecting the removal of
the product and any associated patch or supplemental tags.
Paragraph (version B):
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.
Paragraph (version B):
This document defines the CoSWID format, a more concise
representation of SWID information in the Concise Binary Object
Representation (CBOR) RFC7049.  This is described via the Concise
Data Definition Language (CDDL) I-D.ietf-cbor-cddl.  The resulting
CoSWID data definition is interoperable with the XML schema
definition of ISO-19770-2:2015 SWID.  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.
Paragraph (version B):
The corresponding CoSWID data definition includes two kinds of
augmentation.
Paragraph (version B):
The explicit definition of types for attributes that are typically
stored in the "any attribute" of an ISO-19770-2:2015 in XML
representation.  These are covered in model-global-attributes and
model-any-element of this document.
Paragraph (version B):
The inclusion of extension points in the CoSWID data definition
that allow for additional uses of CoSWID tags that go beyond the
original scope of ISO-19770-2:2015 tags.  These are covered in
model-payload and model-evidence.
Paragraph (version A):
The following is a CDDL representation of the ISO/IEC 19770-2:2015
SWID XML schema definition of SWID tags.  This representation
includes every SWID tag field and attribute and thus supports all
SWID tag use cases.  The CamelCase notation used in the XML schema
definition is changed to a hyphen-separated notation (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 by its name in CamelCase notation explicitly relates to XML
SWID tags, an attribute referred by its name in hyphen-separated
notation explicitly relates to CoSWID tags.  This approach simplifies
the composition of further work that reference both XML SWID and
CoSWID documents.
Paragraph (version B):
The following is a CDDL representation for a CoSWID tag.  This CDDL
represetation is intended to be parallel to the XML schema definition
in the ISO/IEC 19770-2:2015 SWID specification, allowing both SWID
and CoSWID tags to represent a common set of SWID information and to
support all SWID tag use cases.  To achieve this end, the CDDL
representation includes every SWID tag field and attribute.  The
CamelCase notation used in the XML schema definition is changed to a
hyphen-separated notation (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 by its name in CamelCase
notation explicitly relates to XML SWID tags, an attribute referred
by its name in hyphen-separated notation explicitly relates to CoSWID
tags.  This approach simplifies the composition of further work that
reference both XML SWID and CoSWID documents.
Paragraph (version A):
Concise Software Identifiers are tailored to be used in the domain of
constrained-node networks.  A typical endpoint is capable of storing
the CoSWID tag of installed software, a constrained-node might lack
that capability.  CoSWID address these constraints and the
corresponding specification is augmented to retain their usefulness
in the thing-2-thing domain.  Specific examples include, but are not
limited to limiting the scope of hash algorithms to the IANA Named
Information tables or including firmware attributes addressing
devices that do not necessarily provide a file-system to store a
CoSWID tag in.
Paragraph (version B):
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.
Paragraph (version B):
The CDDL above allows for a more effecient CBOR encoding of the data
when a single value is used by avoiding the need to first encode the
array.  An array is used for two or more values.  This modeling
pattern is used frequently in the CoSWID CDDL data definition in such
cases.
Paragraph (version A):
The items are ordered ensure that tag metadata appears first,
followed by general software metadata, entity information, link
relations, and finally payload or evidence data.  This ordering
attempts to provide the most significant metadata that a parser may
need first, followed by metadata that may support more specific use-
applications.  The following describes each child item of the
concise-software-identity model.
Paragraph (version B):
The following describes each child item of the concise-software-
identity object model.
Paragraph (version A):
tag-id (label 0): An textual identifier uniquely referencing a
(composite) software component.  The tag identifier is intended to
be globally unique.  There are no strict guidelines on how this
identifier is structured, but examples include a 16 byte GUID
(e.g.  class 4 UUID).
Paragraph (version A):
tag-version (label 12): An integer value that indicates if a
specific release of a software component has more than one tag
that can represent that specific release.  A typical use of this
field may be to set an initial value to 0 and to monotonically
increase the value for subsequent tags produced for the specific
release.  A change in the value of this field may be the case if a
CoSWID tag producer creates and releases an incorrect tag that
they subsequently want to fix, but with no underlying changes to
the product the CoSWID tag represents.  This could happen if, for
example, a patch is distributed that has a link reference that
does not cover all the various software releases it can patch.  A
newer CoSWID tag for that patch can be generated and the tag-
version value incremented to indicate that the data is updated.
Paragraph (version A):
corpus (label 8): A boolean value that indicates if the tag
identifies and describes an installable software component in its
pre-installation state.  Installable software includes a
installation package or installer for a software component, a
software update, or a patch.  If the Concise SWID tag represents
installable software, the corpus item MUST be set to "true".  If
not provided the default value MUST be considered "false".
Paragraph (version B):
tag-id (label 0): An textual identifier uniquely referencing a
(composite) software component.  The tag identifier MUST be
globally unique.  There are no strict guidelines on how this
identifier is structured, but examples include a 16 byte GUID
(e.g.  class 4 UUID) RFC4122.
Paragraph (version B):
tag-version (label 12): An integer value that indicates if a
specific release of a software component has more than one tag
that can represent that specific release.  Typically, the initial
value of this field is set to 0, and the value is monotonically
increased for subsequent tags produced for the same software
component release.  This item is used when a CoSWID tag producer
creates and releases an incorrect tag that they subsequently want
to fix, but no underlying changes have been made to the product
the CoSWID tag represents.  This could happen if, for example, a
patch is distributed that has a link reference that does not cover
all the various software releases it can patch.  A newer CoSWID
tag for that patch can be generated and the tag-version value
incremented to indicate that the data is updated.
Paragraph (version B):
corpus (label 8): A boolean value that indicates if the tag
identifies and describes an installable software component in its
pre-installation state.  Installable software includes a
installation package or installer for a software component, a
software update, or a patch.  If the CoSWID tag represents
installable software, the corpus item MUST be set to "true".  If
not provided the default value MUST be considered "false".
Paragraph (version A):
patch (label 9): A boolean value that indicates if the tag
identifies and describes an installed patch which has made
incremental changes to a software component installed on a
computing device.  Typically, an installed patch has made a set of
file modifications to pre-installed software, and does not alter
the version number or the descriptive metadata of an installed
software product.  If a Concise SWID tag is for a patch, it MUST
contain the patch item and its value MUST be set to "true".  If
not provided the default value MUST be considered "false".
Paragraph (version A):
supplemental (label 11): A boolean value that indicates if the tag
is providing additional information to be associated with another
referenced SWID tag.  Tags using this item help to ensure that
primary and patch tags provided by a software provider are not
modified by software management tools, while allowing these tools
to provide their own software metadata for a software component.
If a Concise SWID tag is a supplemntal tag, it MUST contain the
supplemental item and its value MUST be set to "true".  If not
provided the default value MUST be considered "false".
Paragraph (version B):
patch (label 9): A boolean value that indicates if the tag
identifies and describes an installed patch which has made
incremental changes to a software component installed on a
computing device.  Typically, an installed patch has made a set of
file modifications to pre-installed software, and does not alter
the version number or the descriptive metadata of an installed
software component.  If a CoSWID tag is for a patch, it MUST
contain the patch item and its value MUST be set to "true".  If
not provided the default value MUST be considered "false".
Paragraph (version B):
supplemental (label 11): A boolean value that indicates if the tag
is providing additional information to be associated with another
referenced SWID or CoSWID tag.  Tags using this item help to
ensure that primary and patch tags provided by a software provider
are not modified by software management tools, while allowing
these tools to provide their own software metadata for a software
component.  If a CoSWID tag is a supplemntal tag, it MUST contain
the supplemental item and its value MUST be set to "true".  If not
provided the default value MUST be considered "false".
Paragraph (version A):
media (label 10): This text value is a hint to the tag consumer to
understand what this SWID tag applies to.  This item can also be
included in the link item to represent a attributes defined by the
W3C Media Queries Recommendation (see http://www.w3.org/TR/
css3-mediaqueries/).  A hint to the consumer of the link to what
the target item is applicable for.
Paragraph (version A):
software-meta-entry (label 5): An open-ended collection of key/
value data related to this CoSWID.  The attributes included in
this Element are predefined attributes to ensure common usage
across the industry.  The schema allows for any additional
attribute to be included in a CoSWID tag, though it is recommended
that industry norms for new attributes are defined and followed to
the degree possible.  Described in model-software-meta.
Paragraph (version A):
link-entry (label 4): A reference to any another item (can include
details that are related to the CoSWID tag such as details on
where specific resources can be found, e.g.  vulnerability
database associations, ROLIE feeds, MUD files, etc).  This is
modeled directly to match the HTML "link" element; it is critical
for streamlining software discovery scenarios to ensure their
consistency.  Described in model-link.
Paragraph (version B):
media (label 10): This text value is a hint to the tag consumer to
understand what this tag applies to.  This item represents a query
as defined by the W3C Media Queries Recommendation (see
http://www.w3.org/TR/css3-mediaqueries/).  A hint to the consumer
of the link to what the target item is applicable for.
Paragraph (version B):
software-meta-entry (label 5): An open-ended collection of key/
value data related to this CoSWID.  A number of predefined
attributes can be used within this item providing for common usage
and semantics across the industry.  The data definition of this
entry allows for any additional attribute to be included, though
it is recommended that industry norms for new attributes are
defined and followed to the degree possible.  Described in model-
software-meta.
Paragraph (version B):
link-entry (label 4): Provides a means to establish a relationship
arc between the tag and another item.  A link can be used to
establish relationships between tags and to reference other
resources that are related to the CoSWID tag, e.g.  vulnerability
database associations, ROLIE feeds, MUD files, software download
location, etc).  This is modeled after the HTML "link" element.
Described in model-link.
Paragraph (version A):
any-element-entry (label 7): A default map that can contain
arbitrary map members and even nested maps (which would be also
any-elements).  In essence, the any-element allows items not
defined in this CDDL data definition to be included in a Concise
Software Identifier.  Described in model-any-element.
Paragraph (version A):
Patch Tag: A CoSWID tag MUST be considered a patch tag if the
patch item is "true".
Paragraph (version A):
If multiple of the corpus, patch, and supplemental items are "true",
then the containing tag MUST be considered an unsupported tag type.
Paragraph (version A):
If the patch does modify the version number or the descriptive
metadata of the software, then a new tag representing these details
SHOULD be installed, and the old tag SHOULD be removed.
Paragraph (version B):
any-element-entry (label 7): A default map that can contain
arbitrary map members and even nested maps (which would also be
any-elements).  In essence, the any-element allows items not
defined in this CDDL data definition to be included in a Concise
Software Identifier.  Described in model-any-element.
Paragraph (version B):
The operational model for SWID and CoSWID tags introduced in intro-
lifecycle.  The following rules can be used to determine the type of
a CoSWID tag.
Paragraph (version B):
Patch Tag: A CoSWID tag MUST be considered a patch tag if the
patch item is "true" and the corpus item is "false".
Paragraph (version B):
A tag that does not match one of the above rules MUST be considered
an invalid, unsupported tag type.
Paragraph (version B):
If a patch modifies the version number or the descriptive metadata of
the software, then a new tag representing these details SHOULD be
installed, and the old tag SHOULD be removed.
Paragraph (version A):
If the supplemental item is set to "true", the the tag SHOULD
contain at least one link with the rel(ation) item value of
"suplements" and an href item specifying an association with the
software that is supplemented.
Paragraph (version A):
If all of the corpus, patch, and supplemental items are "false",
or if the corpus item is set to "true", then a software-version
item MUST be included with a value set to the version of the
software component.  This ensure that primary and corpus tags have
an identifiable software version.
Paragraph (version B):
If the supplemental item is set to "true", the the tag SHOULD
contain at least one link with the rel(ation) item value of
"supplements" and an href item specifying an association with the
software that is supplemented.
Paragraph (version B):
If all of the corpus, patch, and supplemental items are "false",
or if the corpus item is set to "true", then a software-version
item MUST be included with a value set to the version of the
software component.  This ensures that primary and corpus tags
have an identifiable software version.
Paragraph (version A):
role (index 33): The relationship(s) between this organization and
this tag.  The role of tag creator is required for every CoSWID
tag.  The role of an entity may include any role value, but the
per-defined roles include: "aggregator", "distributor",
"licensor", "software-creator", "tag-creator".  The enumerations
of this will include a request to IANA in order to be reference-
able via an integer index.
Paragraph (version A):
thumbprint (index 34): This value provides a hexadecimal string
that contains a hash (i.e. the thumbprint) of the signing entities
certificate(s). .
Paragraph (version B):
role (index 33): The relationship(s) between this organization and
this tag.  The role of tag creator is required for every CoSWID
tag.  The role of an entity may include any role value, but the
pre-defined roles include: "aggregator", "distributor",
"licensor", "software-creator", and "tag-creator".  These pre-
defined role index and text values are defined in indexed-entity-
role.  Use of index values instead of text for these pre-defined
roles allows a CoSWID to be more concise.
Paragraph (version B):
thumbprint (index 34): The value of the thmbprint item provides an
integer-based hash algorithm identifier (hash-alg-id) and a byte
string string value (hash-value) that contains the corresponding
hash value (i.e. the thumbprint) of the signing entities
certificate(s).  If the hash-alg-id is not known, then the integer
value "0" MUST be used.  This ensures parity between the SWID tag
specification SWID, which does not allow an algorithm to be
identified for this field.  See model-hash-entry for more details
on the use of the hash-entry data structure.
Paragraph (version A):
artifact (index: 37): For installation media (rel="installation-
media") - dictates the canonical name for the file.  Items with
the same artifact name should be considered mirrors of each other
(so download from wherever works).
Paragraph (version A):
an URI with "coswid:" as the scheme, which refers to another
CoSWID by tag-id.  This URI would need to be resolved in the
context of the system by software that can lookup other CoSWID
tags (for example,
Paragraph (version A):
swidpath://SoftwareIdentity[Entity/@regid='http://contoso.com']
would retrieve all CoSWID tags that include an entity where the
regid was "Contoso".
Paragraph (version A):
swidpath://SoftwareIdentity[Meta/@persistentId='b0c55172-38e9-
4e36-be86-92206ad8eddb'] would retrieve CoSWID tags that
matched the persistent-id.
Paragraph (version B):
artifact (index: 37): For installation media (rel="installation-
media"), this item value indicates the path of the installer
executable or script that can be run to launch the referenced
installation.  Items with the same artifact name should be
considered mirrors of each other, allowing the installation media
to be downloaded from any of the described sources.
Paragraph (version B):
If no URI scheme is provided, then the URI is to be interpreted
as being relative to the URI of the CoSWID tag.  For example,
"./folder/supplemental.coswid".
Paragraph (version B):
a URI with "coswid:" as the scheme, which refers to another
CoSWID by tag-id.  This URI would need to be resolved in the
context of the system by software that can lookup other CoSWID
tags.  For example, "coswid:2df9de35-0aff-
4a86-ace6-f7dddd1ade4c" references the tag with the tag-id
value "2df9de35-0aff-4a86-ace6-f7dddd1ade4c".
Paragraph (version B):
swidpath://SoftwareIdentity[Entity/@regid='http://contoso.com']
would retrieve all CoSWID tags that include an entity where the
regid is "Contoso" or swidpath://SoftwareIdentity[Meta/@persist
entId='b0c55172-38e9-4e36-be86-92206ad8eddb'] would match
CoSWID tags with the persistent-id value
"b0c55172-38e9-4e36-be86-92206ad8eddb".
Paragraph (version A):
persistent-id (index 51): A GUID used to represent products
installed where the product are related, but may be different
versions.  For example, an "upgradeCode" (see
http://msdn.microsoft.com/en-us/library/aa372375(v=vs.85).aspx as
an reference for this example).
Paragraph (version B):
persistent-id (index 51): A GUID used to represent products
installed where the products are related, but may be different
versions.
Paragraph (version A):
The number used as a value for hash-alg-id MUST refer the ID in the
Named Information Hash Algorithm table; 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.
Paragraph (version B):
The number used as a value for hash-alg-id MUST refer an ID in the
Named Information Hash Algorithm Registry; 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.
Paragraph (version A):
multipartnumeric (index 0): Numbers separated by dots, where the
numbers are interpreted as integers (e.g.,1.2.3, 1.4.5,
Paragraph (version B):
multipartnumeric (index 1): Numbers separated by dots, where the
numbers are interpreted as integers (e.g.,1.2.3, 1.4.5,
Paragraph (version A):
SWID tags contain public information about software components and,
as such, do not need to be protected against disclosure on an
endpoint.  Similarly, SWID 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 tags focus on the
application of SWID tags to address security challenges, and the
possible disclosure of the results of those applications.
Paragraph (version A):
A signed SWID tag whose signature is intact can be relied upon to be
unchanged since it was signed.  If the SWID tag was created by the
software author, this generally means that it has undergone no change
since the software application with which the tag is associated was
installed.  By implication, this means that the signed tag reflects
the software author's understanding of the details of that software
product.  This can be useful assurance when the information in the
tag needs to be trusted, such as when the tag is being used to convey
golden measurements.  By contrast, the data contained in unsigned
tags cannot be trusted to be unmodified.
Paragraph (version B):
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 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 tags focus
on the application of SWID tags to address security challenges, and
the possible disclosure of the results of those applications.
Paragraph (version B):
A signed SWID tag whose signature has been validated can be relied
upon to be unchanged since it was signed.  If the SWID 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 tag contains information about a software product
provided by the maintainer of the product, who is expected to be an
expert in their own product.  Thus, authoritative SWID tags can be
trusted to represent authoritative information about the software
product.  Having an authoritative SWID 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.
Paragraph (version A):
Finally, both the ISO-19770-2:2015 XML schema definition and the
Concise SWID data definition allow for the construction of "infinite"
SWID tags or SWID tags that contain malicious content with the intend
if creating non-deterministic states during validation or processing
of SWID tags.  While software product vendors are unlikely to do
this, SWID tags can be created by any party and the SWID tags
collected from an endpoint could contain a mixture of vendor and non-
vendor created tags.  For this reason, tools that consume SWID tags
ought to treat the tag contents as potentially malicious and should
employ input sanitizing on the tags they ingest.
Paragraph (version B):
Finally, both the ISO-19770-2:2015 XML schema definition and the
Concise SWID data definition allow for the construction of "infinite"
SWID tags or SWID tags that contain malicious content with the intent
if creating non-deterministic states during validation or processing
of SWID tags.  While software product vendors are unlikely to do
this, SWID tags can be created by any party and the SWID tags
collected from an endpoint could contain a mixture of vendor and non-
vendor created tags.  For this reason, tools that consume SWID tags
ought to treat the tag contents as potentially malicious and should
employ input sanitizing on the tags they ingest.
Paragraph (version B):
Clarified language around SWID and CoSWID to make more consistant
use of these terms.
Paragraph (version B):
Added language describing CBOR optimizations for single vs. arrays
in the model front matter.
Paragraph (version B):
Fixed a number of gramatical, spelling, and wording issues.
Paragraph (version B):
Documented extension points that use CDDL sockets.
Paragraph (version B):
Converted IANA registration tables to markdown tables, reserving
the 0 value for use when a value is not known.
Paragraph (version B):
Updated a number of references to their current versions.