Internet Engineering Task Force (IETF)                        C. Schmidt
Request for Comments: 8412                                     D. Haynes
Category: Standards Track                                      C. Coffin
ISSN: 2070-1721                                    The MITRE Corporation
                                                          D. Waltermire
                         National Institute of Standards and Technology
                                                    J. Fitzgerald-McKay
                                 United States National Security Agency
                                                              July 2018


     Software Inventory Message and Attributes (SWIMA) for PA-TNC

Abstract

  This document extends "PA-TNC: A Posture Attribute (PA) Protocol
  Compatible with Trusted Network Connect (TNC)" (RFC 5792) by
  providing specific attributes and message exchanges to allow
  endpoints to report their installed software inventory information to
  a NEA Server, as defined in "Network Endpoint Assessment (NEA):
  Overview and Requirements" (RFC 5209).

Status of This Memo

  This is an Internet Standards Track document.

  This document is a product of the Internet Engineering Task Force
  (IETF).  It represents the consensus of the IETF community.  It has
  received public review and has been approved for publication by the
  Internet Engineering Steering Group (IESG).  Further information on
  Internet Standards is available in Section 2 of RFC 7841.

  Information about the current status of this document, any errata,
  and how to provide feedback on it may be obtained at
  https://www.rfc-editor.org/info/rfc8412.
















Schmidt, et al.              Standards Track                    [Page 1]

RFC 8412                    SWIMA for PA-TNC                   July 2018


Copyright Notice

  Copyright (c) 2018 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 ....................................................4
     1.1. Network Endpoint Assessment (NEA) ..........................6
     1.2. Conventions Used in This Document ..........................7
     1.3. Definitions ................................................7
  2. Background ......................................................8
     2.1. Supported Use Cases ........................................8
          2.1.1. Use Software Inventory as an Access Control Factor ..8
          2.1.2. Central Stores of Up-to-Date Endpoint
                 Software Inventory Data .............................9
          2.1.3. PA-TNC Use Cases ....................................9
     2.2. Use Cases That Are Not Supported ...........................9
     2.3. SWIMA Requirements ........................................10
     2.4. Non-SWIMA Requirements ....................................11
     2.5. Assumptions ...............................................12
     2.6. Assumptions Not Made ......................................12
  3. System Requirements ............................................12
     3.1. Data Sources ..............................................13
     3.2. Data Models ...............................................14
     3.3. Basic Attribute Exchange ..................................16
     3.4. Core Software-Reporting Information .......................17
          3.4.1. Software Identifiers ...............................17
          3.4.2. Data Model Type ....................................19
          3.4.3. Record Identifiers .................................19
          3.4.4. Software Locators ..................................20
          3.4.5. Source Identifiers .................................21
          3.4.6. Using Software and Record Identifiers in
                 SWIMA Attributes ...................................22
     3.5. Targeted Requests .........................................22
     3.6. Monitoring Changes in an Endpoint's Software
          Inventory Evidence Collection .............................23




Schmidt, et al.              Standards Track                    [Page 2]

RFC 8412                    SWIMA for PA-TNC                   July 2018


     3.7. Reporting Change Events ...................................26
          3.7.1. Event Identifiers ..................................27
          3.7.2. Core Event-Tracking Information ....................28
          3.7.3. Updating Inventory Knowledge Based on Events .......29
          3.7.4. Using Event Records in SWIMA Attributes ............29
          3.7.5. Partial and Complete Lists of Event Records
                 in SWIMA Attributes ................................30
          3.7.6. Synchronizing Event Identifiers and Epochs .........32
     3.8. Subscriptions .............................................33
          3.8.1. Establishing Subscriptions .........................34
          3.8.2. Managing Subscriptions .............................35
          3.8.3. Terminating Subscriptions ..........................36
          3.8.4. Subscription Status ................................36
          3.8.5. Fulfilling Subscriptions ...........................37
                 3.8.5.1. Subscriptions That Report Inventories .....38
                 3.8.5.2. Subscriptions That Report Events ..........38
                 3.8.5.3. Targeted Subscriptions ....................40
                 3.8.5.4. No Subscription Consolidation .............40
                 3.8.5.5. Delayed Subscription Fulfillment ..........41
     3.9. Error Handling ............................................41
  4. Protocol .......................................................43
     4.1. Direct Response to a SWIMA Request ........................44
     4.2. Subscription-Based Response ...............................45
     4.3. Required Exchanges ........................................45
  5. Software Inventory Messages and Attributes .....................46
     5.1. PA Subtype (aka PA-TNC Component Type) ....................46
     5.2. SWIMA Attribute Overview ..................................46
     5.3. Message Diagram Syntax ....................................48
     5.4. Normalization of Text Encoding ............................49
     5.5. Request IDs ...............................................49
     5.6. SWIMA Request .............................................50
     5.7. Software Identifier Inventory .............................54
     5.8. Software Identifier Events ................................58
     5.9. Software Inventory ........................................64
     5.10. Software Events ..........................................67
     5.11. Subscription Status Request ..............................72
     5.12. Subscription Status Response .............................73
     5.13. Source Metadata Request ..................................75
     5.14. Source Metadata Response .................................76
     5.15. PA-TNC Error as Used by SWIMA ............................78
          5.15.1. SWIMA_ERROR, SWIMA_SUBSCRIPTION_DENIED_ERROR, and
                  SWIMA_SUBSCRIPTION_ID_REUSE_ERROR Information .....81
          5.15.2. SWIMA_RESPONSE_TOO_LARGE_ERROR Information ........83
          5.15.3. SWIMA_SUBSCRIPTION_FULFILLMENT_ERROR Information ..85







Schmidt, et al.              Standards Track                    [Page 3]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  6. Supported Data Models ..........................................87
     6.1. ISO 2015 SWID Tags Using XML ..............................87
          6.1.1. Guidance on Normalizing Source Data to ISO 2015
                 SWID Tags Using XML ................................87
          6.1.2. Guidance on Creation of Software Identifiers from
                 ISO 2015 SWID Tags .................................88
     6.2. ISO 2009 SWID Tags Using XML ..............................88
          6.2.1. Guidance on Normalizing Source Data to ISO 2009
                 SWID Tags Using XML ................................88
          6.2.2. Guidance on Creation of Software Identifiers from
                 ISO 2009 SWID Tags .................................89
  7. Relationship to Other Specifications ...........................89
  8. Security Considerations ........................................90
     8.1. Evidentiary Value of Software Inventory Evidence Records ..90
     8.2. Sensitivity of Collected Records ..........................91
     8.3. Integrity of Endpoint Records .............................92
     8.4. SWIMA-PC Access Permissions ...............................92
     8.5. Sanitization of Record Fields .............................93
     8.6. PA-TNC Security Threats ...................................93
  9. Privacy Considerations .........................................93
  10. IANA Considerations ...........................................94
     10.1. Guidance for the Designated Experts ......................94
     10.2. PA Subtypes ..............................................95
     10.3. PA-TNC Attribute Types ...................................96
     10.4. PA-TNC Error Codes .......................................97
     10.5. Software Data Model Types ................................97
  11. References ....................................................98
     11.1. Normative References .....................................98
     11.2. Informative References ...................................99
  Authors' Addresses ...............................................101

1.  Introduction

  Knowing the list of software installed on endpoints is useful to
  understand and maintain the security state of a network.  For
  example, if an enterprise policy requires the presence of certain
  software and prohibits the presence of other software, reported
  software installation information can be used to indicate compliance
  and non-compliance with these requirements.  Endpoint software
  installation inventory lists (hereinafter "software inventories") can
  further be used to determine an endpoint's exposure to attack based
  on comparison of vulnerability or threat alerts against identified
  software's patch-level data.  These are some of the highly useful
  management use cases supported by software inventory data.







Schmidt, et al.              Standards Track                    [Page 4]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  Software Inventory Message and Attributes (SWIMA) for PA-TNC (see
  "PA-TNC: A Posture Attribute (PA) Protocol Compatible with Trusted
  Network Connect (TNC)" [RFC5792]) provides a standardized method for
  exchanging software inventory data that includes a unique Software
  Identifier associated with a specific version of a software product.
  SWIMA can also convey metadata about software products beyond this
  identifier.  SWIMA enables software identification, installation, and
  characterization information to be transported to a central server
  from any endpoint that supports this specification.  Such information
  can come from multiple sources, including tag files (such as ISO
  Software Identification (SWID) tags [SWID15]), reports from
  third-party inventory tools, output from package managers, and other
  sources.  SWIMA does not standardize how software is detected,
  instead relying on a set of "data sources" to provide information
  about installed software.  SWIMA provides a flexible transport
  capable of conveying this information, regardless of how it is
  expressed.

  This specification is designed to only report software that is
  installed on a target endpoint.  In particular, it does not monitor
  or report information about what software is running on the endpoint.
  Likewise, it is not intended to report individual files, libraries,
  installation packages, or similar artifacts.  While all of this
  information has its uses, this information requires different
  metadata and monitoring methods.  As a result, this specification
  focuses solely on software inventory information, leaving the
  reporting of other classes of endpoint information to other
  specifications.

  Note that while this specification focuses on "software inventory",
  the mechanisms it describes could also be used to convey information
  about firmware and operating systems associated with an endpoint.
  The focus on software throughout this document should not be read as
  excluding the use of SWIMA for these other purposes.

  This specification defines a new set of PA-TNC attributes; these
  attributes are used to communicate requests for software inventory
  information and software installation change events.  The exchange of
  these messages allows software inventory information to be sent to a
  Network Endpoint Assessment (NEA) Server, which can make this
  information available to other applications.

  Part of the motivation for the development of SWIMA was to support
  the IETF's Security Automation and Continuous Monitoring (SACM)
  architecture.  More details about SWIMA's role in SACM appear in
  Section 7.  However, SWIMA has no dependencies on any part of SACM
  and is usable wherever the NEA architecture is employed.




Schmidt, et al.              Standards Track                    [Page 5]

RFC 8412                    SWIMA for PA-TNC                   July 2018


1.1.  Network Endpoint Assessment (NEA)

  SWIMA defines extensions to the PA-TNC specification [RFC5792]; these
  extensions are part of the NEA architecture.  The NEA specifications
  define an open solution architecture that enables network operators
  to collect and utilize information about endpoint configuration and
  state.  This information can be used to enforce policies and monitor
  endpoint health, among many other activities.  Information about the
  software present on an endpoint is an important consideration for
  such activities.  The new PA-TNC attributes defined in this document
  are used to communicate software inventory evidence, collected from a
  range of possible sources, from the Posture Collector on the endpoint
  to the Posture Validator on a NEA Server using the PA-TNC interface,
  as shown in Figure 1 below.

      +-------------+                          +--------------+
      |  Posture    |   <--------PA-------->   |   Posture    |
      |  Collectors |                          |   Validators |
      |  (1 .. N)   |                          |   (1 .. N)   |
      +-------------+                          +--------------+
            |                                         |
            |                                         |
            |                                         |
      +-------------+                          +--------------+
      |   Posture   |                          |   Posture    |
      |   Broker    |   <--------PB-------->   |   Broker     |
      |   Client    |                          |   Server     |
      +-------------+                          +--------------+
            |                                         |
            |                                         |
      +-------------+                          +--------------+
      |   Posture   |                          |   Posture    |
      |   Transport |   <--------PT-------->   |   Transport  |
      |   Client    |                          |   Server     |
      |   (1 .. N)  |                          |   (1 .. N)   |
      +-------------+                          +--------------+
         NEA CLIENT                               NEA SERVER

                      Figure 1: NEA Reference Model

  To better understand this specification, the reader should review the
  NEA reference architecture as described in "Network Endpoint
  Assessment (NEA): Overview and Requirements" [RFC5209].  The reader
  should also review the PA-TNC interfaces as defined in RFC 5792
  [RFC5792].






Schmidt, et al.              Standards Track                    [Page 6]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  This document is based on standards published by the Trusted
  Computing Group's Trusted Network Communications (TNC) workgroup (see
  <https://trustedcomputinggroup.org/>).  The TNC and NEA architectures
  are interoperable, and many components are equivalent.

1.2.  Conventions Used in This Document

  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.

1.3.  Definitions

  This section defines terms that have special meaning within this
  document.

  o  SWIMA-PC - A NEA Posture Collector (PC) that interprets SWIMA
     attributes sent by SWIMA-PVs and that conforms to this
     specification.  Note that such a Posture Collector might also
     support other PA-TNC exchanges beyond those defined herein.

  o  SWIMA-PV - A NEA Posture Validator (PV) that interprets SWIMA
     attributes sent by SWIMA-PCs and that conforms to this
     specification.  Note that such a Posture Validator might also
     support other PA-TNC exchanges beyond those defined herein.

  o  SWIMA Attribute - A PA-TNC attribute (as defined in RFC 5792
     [RFC5792]) whose structure and behavior is defined in this
     specification.

  o  Endpoint's Software Inventory Evidence Collection - The set of
     information regarding the set of software installed on an
     endpoint.  An endpoint's Software Inventory Evidence Collection
     might include information created by or derived from multiple
     sources, including but not limited to SWID tag files deposited on
     the filesystem during software installation, information generated
     by software discovery tools, and information dynamically generated
     by a software or package management system on an endpoint.

  o  Software Inventory Evidence Record - Part of the endpoint's
     Software Inventory Evidence Collection (which is composed of
     "records").  Each record corresponds to one installed instance of
     a particular software product as reported by some data source.  It
     is possible for a single installed instance to have multiple





Schmidt, et al.              Standards Track                    [Page 7]

RFC 8412                    SWIMA for PA-TNC                   July 2018


     Software Inventory Evidence Records in an endpoint's Software
     Inventory Evidence Collection -- this can happen if multiple
     sources all report the same software installation instance.

  o  Software Identifier - A string associated with a specific version
     of a specific software product.  These identifiers are derived
     from the records used to describe software products.  SWIMA does
     not limit the formats of these records, nor does it enforce that
     all data sources populate records using the same format.  As such,
     while each Software Identifier uniquely identifies a specific
     software product, the same software product might be associated
     with multiple Software Identifiers reflecting differences between
     different data sources and supported record formats.

2.  Background

2.1.  Supported Use Cases

  This section describes the use cases supported by this specification.
  The primary use of exchanging software inventory information over the
  PA-TNC interface is to enable a challenger (e.g., a NEA Server) to
  obtain inventory evidence about some system in a way that conforms to
  NEA procedures.  Collected software information can support a range
  of security activities, including determining whether an endpoint is
  permitted to connect to the enterprise, determining which endpoints
  contain software that requires patching, and similar activities.

2.1.1.  Use Software Inventory as an Access Control Factor

  Some enterprises might define security policies that require
  connected endpoints to have certain pieces of security software
  installed.  By contrast, some security policies might prevent access
  to resources by endpoints that have certain prohibited pieces of
  software installed, since such applications might pose a security
  risk.  To support such policies, the NEA Server needs to collect
  software inventory evidence from a target endpoint that is seeking to
  initiate or continue connectivity to the enterprise resource.

  Based on this specification, the SWIMA-PC can provide a complete or
  partial inventory to the SWIMA-PV as required to determine policy
  compliance.  The SWIMA-PV can then use this as evidence of compliance
  or non-compliance to make a policy-based access decision.









Schmidt, et al.              Standards Track                    [Page 8]

RFC 8412                    SWIMA for PA-TNC                   July 2018


2.1.2.  Central Stores of Up-to-Date Endpoint Software Inventory Data

  Many tools use information about an endpoint's software inventory to
  monitor and enforce the security of a network.  For example, a
  software-patching tool needs to determine if there is out-of-date
  software installed that needs to be updated.  A vulnerability
  management tool needs to identify endpoints with known vulnerable
  software installed (patched or otherwise) to gauge an endpoint's
  relative exposure to attack.  A license management tool needs to
  verify that all installed software within the enterprise is accounted
  for.  A central repository representing an up-to-date understanding
  of each endpoint's software inventory facilitates these activities.
  Multiple tools can share such a repository, ensuring that software
  inventory information is collected more frequently and efficiently,
  leading to a more complete and consistent understanding of installed
  software state as compared to each tool collecting the same inventory
  information from endpoints individually.

  This specification supports these activities through a number of
  mechanisms.  As noted above, a SWIMA-PC can provide a complete list
  of software present in an endpoint's Software Inventory Evidence
  Collection to the SWIMA-PV, which can then pass this information on
  to a central repository, such as a Configuration Management Database
  (CMDB) or similar application.  In addition, SWIMA-PCs are required
  to be able to monitor for changes to an endpoint's Software Inventory
  Evidence Collection in near real time and can be requested to
  immediately push reports of detected changes to the SWIMA-PV.  Thus,
  any central repository fed by a SWIMA-PV receiving inventory
  information can be updated quickly after a change occurs.  Keeping a
  central repository synchronized with current software inventory
  information in this way allows tools to make efficient decisions
  based on up-to-date, consistent information.

2.1.3.  PA-TNC Use Cases

  SWIMA is intended to operate over the PA-TNC interface and, as such,
  is intended to meet the use cases set out in the PA-TNC
  specification.

2.2.  Use Cases That Are Not Supported

  Some use cases not covered by this specification include:

  o  Addressing how the endpoint's Software Inventory Evidence
     Collection is populated.  In particular, NEA components are not
     expected to perform software discovery activities beyond compiling
     information in an endpoint's Software Inventory Evidence
     Collection.  This collection might come from multiple sources on



Schmidt, et al.              Standards Track                    [Page 9]

RFC 8412                    SWIMA for PA-TNC                   July 2018


     the endpoint (e.g., information generated dynamically by package
     management tools or discovery tools, as well as SWID tag files
     discovered on the filesystem).  While an enterprise might make use
     of software discovery capabilities to identify installed software,
     such capabilities are outside the scope of this specification.

  o  Converting inventory information expressed in a proprietary format
     into formats used in the attributes described in this
     specification.  Instead, this specification focuses exclusively on
     defining interfaces for the transportation of software
     information, expecting that reporting tools will converge around
     some set of standardized formats for this information.

  o  Mechanisms for a Posture Validator to request a specific list of
     software information based on arbitrary software properties.  For
     example, requesting only information about software from a
     particular vendor is not supported.  After the endpoint's Software
     Inventory Evidence Collection has been copied to some central
     location, such as the CMDB, processes there can perform queries
     based on any criteria present in the collected information, but
     this specification does not address using such queries to
     constrain the initial collection of this information from the
     endpoint.

  o  Use of properties of certain sources of software information that
     might facilitate local tests (i.e., on the endpoint) of endpoint
     state.  For example, the optional package_footprint field of an
     ISO SWID tag can contain a list of files and hash values
     associated with the software indicated by the tag.  Tools on the
     endpoint can use the values in this field to test for the presence
     of the indicated files.  Successful evaluation of such tests leads
     to greater assurance that the indicated software is present on the
     endpoint.  Currently, most SWID tag creators do not provide values
     for tag fields that support local testing.  For this reason, the
     added complexity of supporting endpoint testing using these fields
     is out of scope for this specification, but this topic may be
     considered in a future version.

2.3.  SWIMA Requirements

  Below are the requirements that SWIMA must meet in order to
  successfully play its role in the NEA architecture.

  Efficient:  The NEA architecture enables delay of network access
     until the endpoint is determined not to pose a security threat to
     the network, based on its asserted integrity information.  To
     minimize user frustration, SWIMA ought to minimize overhead delays
     and make PA-TNC communications as rapid and efficient as possible.



Schmidt, et al.              Standards Track                   [Page 10]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  Scalable:  SWIMA needs to be usable in enterprises that contain tens
     of thousands of endpoints or more.  As such, it needs to allow
     security tools to make decisions based on up-to-date information
     about an endpoint's software inventory without creating an
     excessive burden on the enterprise's network.

  Support precise and complete historical reporting:  This
     specification outlines capabilities that support real-time
     understanding of the state of endpoints in a network in a way that
     can be used by other tools.  One means of facilitating such an
     outcome is for a CMDB to be able to contain information about all
     endpoints connected to the enterprise for all points in time
     between the endpoint's first connection and the present.  In such
     a scenario, it is necessary that any SWIMA-PC be able to report
     any changes to its Software Inventory Evidence Collection in near
     real time while connected and, upon reconnection to the
     enterprise, be able to update the NEA Server (and, through it, the
     CMDB) with regard to the state of its Software Inventory Evidence
     Collection throughout the entire interval when it was not
     connected.

2.4.  Non-SWIMA Requirements

  There are certain capabilities that users of SWIMA might require but
  that are beyond the scope of SWIMA itself and need to be addressed by
  other standards.

  Confidentiality:  SWIMA does not define a mechanism for
     confidentiality, nor is confidentiality automatically provided by
     using the PA-TNC interface.  In the NEA architecture,
     confidentiality is generally provided by the underlying transport
     protocols, such as the PT binding to TLS [RFC6876] or PT-EAP
     (Posture Transport for Tunneled Extensible Authentication Protocol
     (EAP) Methods) [RFC7171]; see Section 7 for more information on
     related standards.  The information conveyed by SWIMA is often
     sensitive in nature for both security (Section 8) and privacy
     (Section 9) reasons.  Those who implement SWIMA need to ensure
     that appropriate NEA transport mechanisms are employed to meet
     confidentiality requirements.












Schmidt, et al.              Standards Track                   [Page 11]

RFC 8412                    SWIMA for PA-TNC                   July 2018


2.5.  Assumptions

  The Posture Broker Client and Posture Broker Server are assumed to
  provide reliable delivery for PA-TNC messages and attributes sent
  between the SWIMA-PCs and the SWIMA-PVs.  "Reliable delivery" means
  that either a message is delivered or the sender is made aware of the
  delivery failure.  In the event that reliable delivery cannot be
  provided, some SWIMA features, primarily subscriptions, might not
  behave as expected.

2.6.  Assumptions Not Made

  This specification explicitly does not assume that software inventory
  information exchanges reflect the software installation state of the
  endpoint.  This specification does not attempt to detect when the
  endpoint is providing false information, either through malice or
  error, but instead focuses on correctly and reliably providing the
  reported Software Inventory Evidence Collection to the NEA Server.
  Tools that employ the SWIMA standard can include methods to help
  verify the accuracy of reports, but how those tools do so is beyond
  the scope of this specification.

  Similarly, this specification makes no assumption about the
  completeness of the Software Inventory Evidence Collection's coverage
  of the total set of software installed on the endpoint.  It is
  possible, and even likely, that some installed software is not
  represented by a record in an endpoint's Software Inventory Evidence
  Collection.  Instead, SWIMA ensures that what does get reported is
  reported consistently and that the software products that are
  reported can be reliably tracked.

  See Section 8 for more on this security consideration.

3.  System Requirements

  SWIMA facilitates the exchange of software inventory and event
  information.  Specifically, each application supporting SWIMA
  includes a component known as the SWIMA-PC that receives SWIMA
  attributes.  The SWIMA-PC is also responsible for sending appropriate
  SWIMA attributes back to the SWIMA-PV in response.  This section
  outlines what software inventories and events are and the
  requirements on SWIMA-PCs and SWIMA-PVs in order to support the
  stated use cases of this specification.








Schmidt, et al.              Standards Track                   [Page 12]

RFC 8412                    SWIMA for PA-TNC                   July 2018


3.1.  Data Sources

  The records in an endpoint's Software Inventory Evidence Collection
  come from one or more "sources".  A source represents one collection
  of software inventory information about the endpoint.  Examples of
  sources include, but are not limited to, ISO SWID tags deposited on
  the filesystem and collected therefrom, information derived from
  package managers, and the output of software inventory-scanning
  tools.

  There is no expectation that any one source of inventory information
  will have either perfect or complete software inventory information.
  For this reason, this specification supports the simultaneous use of
  multiple sources of software inventory information.  Each source
  might have its own "sphere of expertise" and report the software
  within that sphere.  For example, a package manager would have an
  excellent understanding of the software that it managed but would not
  necessarily have any information about software installed via other
  means.

  A SWIMA-PC is not required to utilize every possible source of
  software information on its endpoint.  Some SWIMA-PCs might be
  explicitly tied only to one or a handful of software inventory
  sources, or a given SWIMA-PC could be designed to dynamically
  accommodate new sources.  For all software inventory evidence sources
  that a particular SWIMA-PC supports, it MUST completely support all
  requirements of this specification with regard to those sources.  A
  potential source that cannot support some set of required
  functionality (e.g., it is unable to monitor the software it reports
  for change events, as discussed in Section 3.6) MUST NOT be used as a
  source of endpoint software inventory information, even if it could
  provide some information.  In other words, a source either supports
  full functionality as described in this specification or cannot be
  used at all.  In the event that a previously used source becomes
  unavailable, this would be treated as a discontinuity in the
  SWIMA-PC's reporting.  Section 3.7.1 describes how to use changes in
  the Event Identifier (EID) Epoch value to indicate a reporting
  discontinuity.

  When sending information about installed software, the SWIMA-PC MUST
  include the complete set of relevant data from all supported sources
  of software inventory evidence.  In other words, sources need to be
  used consistently.  This is because if a particular source is
  included in an initial inventory but excluded from a later inventory,
  the SWIMA-PV receiving this information might reasonably conclude
  that the software reported by that source was no longer installed on
  the endpoint.  As such, it is important that all supported sources be
  used every time the SWIMA-PC provides information to a SWIMA-PV.



Schmidt, et al.              Standards Track                   [Page 13]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  Note that if a SWIMA-PC collects data from multiple sources, it is
  possible that some software products might be "double counted".  This
  can happen if two or more sources of inventory evidence provide a
  record for a single installation of a software product.  When a
  SWIMA-PC reports information or records events from multiple
  inventory evidence sources, it MUST use the information those sources
  provide, rather than attempt to perform some form of reduction.  In
  other words, if multiple sources report records corresponding to a
  single installation of a software product, all such records from each
  source are required to be part of the SWIMA-PC's processing even if
  this might lead to multiple reporting, and the SWIMA-PC is not to
  ignore some records to avoid such multiple reporting.

  All inventory records reported by a SWIMA-PC include a Source
  Identifier linking them to a particular source.  Source Identifiers
  are discussed more in Section 3.4.5.  As discussed in that section,
  Source Identifiers can help consumers of SWIMA data identify cases of
  multiple reporting.

3.2.  Data Models

  SWIMA conveys records about software presence from a SWIMA-PC to a
  SWIMA-PV.  SWIMA does not manage the actual generation or collection
  of such records on the endpoint.  As a result, information available
  to SWIMA-PCs might come in a variety of formats, and a SWIMA-PC could
  have little control over the format of the data made available to it.
  Because of this, SWIMA places no constraints on the format of these
  generated records and supports an open set of record formats by which
  installed software instances can be described.  The following terms
  are used in this document:

  o  Data model - The format used to structure data within a given
     record.  SWIMA does not constrain the data models it conveys.

  o  Record - A populated instance of some data model that describes a
     software product.

  Do not confuse the "data model" described here with the structure of
  the SWIMA messages and attributes used to convey information between
  SWIMA-PVs and SWIMA-PCs.  The SWIMA standard dictates the structure
  of its messages and attributes.  Some attributes, however, have
  specific fields used to convey inventory records, and those fields
  support an extensible list of data models for their values.  In other
  words, SWIMA data models provide an extension point within SWIMA
  attributes that allows the structure of inventory records to evolve.






Schmidt, et al.              Standards Track                   [Page 14]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  The data model used to structure software inventory information has
  very little impact on the behavior of the components defined in this
  specification.  The SWIMA-PV has no dependency on the data model of
  records conveyed in SWIMA messages.  For this reason, it MUST NOT
  reject a message or respond with a PA-TNC Error due to the data model
  used to structure records in attributes it receives.  Similarly, it
  MUST NOT reject a message or respond with a PA-TNC Error if a record
  fails to comply with a stated format, unless that failure prevents
  correct parsing of the attribute itself.  In short, the record bodies
  are effectively treated as "black boxes" by the SWIMA-PV.  (Note that
  the SWIMA-PV might serve as the "front end" of other functionality
  that does have a dependency on the data model used to structure
  software information, but any such dependency is beyond the scope of
  this specification and needs to be addressed outside the behaviors
  specified in this document.  This specification is only concerned
  with the collection and delivery of software inventory information;
  components that consume and use this information are a separate
  concern.)

  The SWIMA-PC does have one functional dependency on the data models
  used in the software records it delivers, but only insofar as it is
  required to deterministically create a Software Identifier (described
  in Section 3.4.1) based on each record it delivers.  The SWIMA-PC
  MUST be able to generate a Software Identifier for each record it
  delivers, and if the SWIMA-PC cannot do so, it cannot deliver the
  record.  All SWIMA-PCs MUST at least be able to generate Software
  Identifiers for the data model types specified in Section 6 of this
  document.  A SWIMA-PC MAY include the ability to generate Software
  Identifiers for other data model types and thus be able to support
  them as well.





















Schmidt, et al.              Standards Track                   [Page 15]

RFC 8412                    SWIMA for PA-TNC                   July 2018


3.3.  Basic Attribute Exchange

  In the most basic exchange supported by this specification, a
  SWIMA-PV sends a request to the SWIMA-PC, requesting some type of
  information about the endpoint's software inventory.  This simple
  exchange is shown in Figure 2.

      +-------------+                          +--------------+
      |  SWIMA-PC   |                          |   SWIMA-PV   |  Time
      +-------------+                          +--------------+   |
            |                                         |           |
            |<------------SWIMA Request---------------|           |
            |                                         |           |
            |-------------SWIMA Response------------->|           |
            |                                         |           V

                Figure 2: Basic SWIMA Attribute Exchange

  Upon receiving such a SWIMA Request from the SWIMA-PV, the SWIMA-PC
  is expected to collect all the relevant software inventory
  information from the endpoint's Software Inventory Evidence
  Collection and place it within its response attribute.

  SWIMA-PVs MUST discard, without error, any SWIMA Response attributes
  that they receive for which they do not know the SWIMA Request
  parameters that led to this SWIMA Response.  This is due to the fact
  that the SWIMA Request includes parameters that control the nature of
  the response (as will be described in the following sections);
  without knowing those parameters, the SWIMA Response cannot be
  reliably interpreted.  Each SWIMA Request includes a Request ID,
  which is echoed in any SWIMA Response to that request and allows
  matching of responses to requests.  See Section 5.5 for more on
  Request IDs.  Receiving an unsolicited SWIMA Response attribute will
  most often happen when a NEA Server has multiple SWIMA-PVs; one
  SWIMA-PV sends a SWIMA Request, but unless exclusive delivery
  [RFC5793] is set by the sender and honored by the recipient, multiple
  SWIMA-PVs will receive copies of the resulting SWIMA Response.  In
  this case, the SWIMA-PV that didn't send the SWIMA Request would lack
  the context necessary to correctly interpret the SWIMA Response it
  received and would simply discard it.  Note, however, that
  proprietary measures might allow a SWIMA-PV to discover the SWIMA
  Request parameters for a SWIMA Response even if that SWIMA-PV did not
  send the given SWIMA Request.  As such, there is no blanket
  requirement for a SWIMA-PV to discard all SWIMA Responses to SWIMA
  Requests that the SWIMA-PV did not generate itself -- only that
  SWIMA-PVs are required to discard SWIMA Responses for which they
  cannot get the necessary context to interpret.




Schmidt, et al.              Standards Track                   [Page 16]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  In the case that it is possible to do so, the SWIMA-PC SHOULD send
  its SWIMA Response attribute to the SWIMA-PV that requested it, using
  exclusive delivery as described in Section 4.5 of "PB-TNC: A Posture
  Broker (PB) Protocol Compatible with Trusted Network Connect (TNC)"
  [RFC5793].  Exclusive delivery requests that only the sender of the
  SWIMA Request be the receiver of the resulting SWIMA Response.  Note,
  however, that PB-TNC does not require the recipient to honor the
  exclusive delivery flag in messages that it receives, so setting the
  flag cannot be guaranteed to prevent a SWIMA-PV from receiving
  unsolicited SWIMA Responses.

  Note that, in the case that a single endpoint hosts multiple
  SWIMA-PCs, a single SWIMA Request could result in multiple SWIMA
  Responses.  SWIMA-PVs need to handle such an occurrence without
  error.

  All numeric values sent in SWIMA messages are sent in network
  (big endian) byte order.

3.4.  Core Software-Reporting Information

  Different parameters in the SWIMA Request can influence what
  information is returned in the SWIMA Response.  However, while each
  SWIMA Response provides different additional information about this
  installed software, the responses all share a common set of fields
  that support reliable software identification on an endpoint.  These
  fields include Software Identifiers, Data Model Type, Record
  Identifiers, Software Locators, and Source Identifiers.  These fields
  are present for each reported piece of software in each type of SWIMA
  Response.  The following sections examine these information types in
  more detail.

3.4.1.  Software Identifiers

  A Software Identifier uniquely identifies a specific version of a
  specific software product.  The SWIMA standard does not dictate the
  structure of a Software Identifier (beyond stating that it is a
  string) or define how it is created.  Instead, each data model
  described in the "Software Data Model Types" registry (Section 10.5)
  includes its own rules for how a Software Identifier is created based
  on a record in the endpoint's Software Inventory Evidence Collection
  expressed in that data model.  Other data models will have their own
  procedures for the creation of associated Software Identifiers.
  Within SWIMA, the Software Identifier is simply an opaque string, and
  there is never any need to unpack any information that might be part
  of that identifier.





Schmidt, et al.              Standards Track                   [Page 17]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  A Software Identifier is a fraction of the size of the inventory
  record from which it is derived.  For this reason, it is often more
  efficient to collect full inventories using Software Identifiers and
  only collect full records when necessary using targeted requests.
  For some combinations of data models and sources, the full record
  might never be necessary, as the identifier can be directly
  correlated to the contents of the full record.  This is possible with
  authoritative SWID tags, since these tags always have the same
  contents and thus a Software Identifier derived from these tags can
  be used as a lookup to a local copy of the full tag.  For other
  combinations of source and data model, a server might not be able to
  determine the specific software product and version associated with
  the identifier without requesting the delivery of the full record.
  However, even in those cases, downstream consumers of this
  information might never need the full record as long as the Software
  Identifiers they receive can be tracked reliably.  A SWIMA-PV can use
  Software Identifiers to track the presence of specific software
  products on an endpoint over time in a bandwidth-efficient manner.

  There are two important limitations of Software Identifiers to keep
  in mind:

  1.  The identifiers do not necessarily change when the associated
      record changes.  In some situations, a record in the endpoint's
      Software Inventory Evidence Collection will change due to new
      information becoming available or in order to correct prior
      errors in that information.  Such changes might or might not
      result in changes to the Software Identifier, depending on the
      nature of the changes and the rules governing how Software
      Identifiers are derived from records of the appropriate data
      model.

  2.  It is possible that a single software product is installed on a
      single endpoint multiple times.  If these multiple installation
      instances are reported by the same source using the same data
      format, then this can result in identical Software Identifiers
      for both installation instances.  In other words, Software
      Identifiers might not uniquely identify installation instances;
      they are just intended to uniquely identify software products
      (which might have more than one installation instance).  Instead,
      to reliably distinguish between multiple instances of a single
      software product, one needs to make use of Record Identifiers as
      described in Section 3.4.3.








Schmidt, et al.              Standards Track                   [Page 18]

RFC 8412                    SWIMA for PA-TNC                   July 2018


3.4.2.  Data Model Type

  The Data Model Type consists of two fields: Data Model Type PEN and
  Data Model Type.  ("PEN" stands for "Private Enterprise Number".)
  The combination of these fields is used to identify the type of data
  model of the associated software inventory record.  The data model is
  significant not only because it informs the recipient of the data
  model of the associated record but also because the process for
  generating the Software Identifier for the record depends on the
  record's data model.  Clearly identifying the type of data model from
  which the Software Identifier was derived thus provides useful
  context for that value.

  The PEN identifies the organization that assigns meaning to the Data
  Model Type field value.  PENs are managed by IANA in the "Private
  Enterprise Numbers" registry.  PENs allow vendors to designate their
  own set of data models for software inventory description.  IANA
  reserves the PEN of 0x000000.  Data Model Types associated with this
  PEN are defined in the "Software Data Model Types" registry; see
  Section 10.5 of this specification.  Note that this IANA table
  reserves all values greater than or equal to 0xC0 (192) for local
  enterprise use.  This means that local enterprises can use custom
  data formats and indicate them with the IANA PEN and a Data Model
  Type value between 0xC0 and 0xFF, inclusive.  Those enterprises are
  responsible for configuring their SWIMA-PCs to correctly report those
  custom data models.

3.4.3.  Record Identifiers

  A Record Identifier is a 4-byte unsigned integer that is generated by
  the SWIMA-PC and is uniquely associated with a specific record within
  the endpoint's Software Inventory Evidence Collection.  The SWIMA-PC
  MUST assign a unique identifier to each record when it is added to
  the endpoint's Software Inventory Evidence Collection.  The Record
  Identifier SHOULD remain unchanged if that record is modified.
  However, it is recognized that, in some circumstances, record
  modification might be hard to distinguish from record deletion
  followed by creation of a new record.  For this reason, retaining a
  constant Record Identifier across a record modification is
  recommended but not required.  Similarly, in the case that the
  software product associated with a record is moved, ideally the
  Record Identifier for the record of the moved software will remain
  unchanged, reflecting that it represents the same software product
  instance, albeit in a new location.  However, this level of tracking
  could prove difficult to achieve and is not required.  The SWIMA-PC
  might wish to assign Record Identifiers sequentially, but any scheme
  is acceptable, provided that no two records receive the same
  identifier.



Schmidt, et al.              Standards Track                   [Page 19]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  Servers can use Record Identifiers to distinguish between multiple
  instances of a single software product installed on an endpoint.
  Since each installation instance of a software product is associated
  with a separate record, servers can use the Record Identifier to
  distinguish between instances.  For example, if an event is reported
  (as described in Section 3.7), the Record Identifier will allow the
  server to discern which instance of a software product is involved.

3.4.4.  Software Locators

  In addition to the need to identify what software products are on an
  endpoint, some processes that use inventory information also need to
  know where software is located on the endpoint.  This information
  might be needed to direct remediation actions or similar processes.
  For this reason, every reported software product also includes a
  Software Locator to identify where the software is installed on the
  endpoint.

  If the location is not provided directly by the data source, the
  SWIMA-PC is responsible for attempting to determine the location of
  the software product.  The "location" of a product SHOULD be the
  directory in which the software product's executables are kept.  The
  SWIMA-PC MUST be consistent in reporting the location of a software
  product.  In other words, assuming that a software product has not
  moved, the SWIMA-PC cannot use one location in one report and a
  different location for the same software product in another.  (If a
  software product has moved, the Software Locator needs to reflect the
  new location.)

  The location is expressed as a URI string.  The string MUST conform
  to URI syntax requirements [RFC3986].  The URI scheme describes the
  context of the described location.  For example, in most cases the
  location of the installed software product will be expressed in terms
  of its path in the filesystem.  For such locations, the location URI
  scheme MUST be "file", and the URI MUST conform to the "file" URI
  scheme standard [RFC8089], including the percent-encoding of
  whitespace and other special characters.  It is possible that other
  schemes could be used to represent other location contexts.  Apart
  from specifying the use of the "file" scheme, this specification does
  not identify other schemes or define their use.  When representing
  software products in other location contexts, tools MUST be
  consistent in their use of schemes, but the exact schemes are not
  normatively defined here.  SWIMA implementations are not limited to
  the IANA list of URI schemes <https://www.iana.org/assignments/
  uri-schemes/> and can define new schemes to support other types of
  application locations.





Schmidt, et al.              Standards Track                   [Page 20]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  It is possible that a SWIMA-PC is unable to determine the location of
  a reported software product.  In this case, the SWIMA-PC MUST provide
  a zero-length Software Locator.

3.4.5.  Source Identifiers

  All SWIMA-PCs MUST track the source of each piece of software
  information they report.  Each time a SWIMA-PC gets information to
  send to a given SWIMA-PV from a new source (from the perspective of
  that SWIMA-PV), the SWIMA-PC MUST assign that source a Source
  Identifier, which is an 8-bit unsigned integer.  Each item reported
  includes the number of the Source Identifier for the source that
  provided that information.  All information that is provided by that
  source MUST be delivered with this same Source Identifier.  This MUST
  be done for each source used.  If the SWIMA-PC is ever unclear as to
  whether a given source is new or not, it MUST assume that this is a
  new source and assign it a new Source Identifier.  Source Identifier
  numbers do not need to be assigned sequentially.  SWIMA does not
  support the presence of more than 256 sources, as the chance that a
  single endpoint will have more than 256 methods of collecting
  inventory information is vanishingly small.  All possible values
  between 0 and 255 are valid; there are no reserved Source Identifier
  numbers.

  Source Identifiers can help with (although will not completely
  eliminate) the challenges posed by multiple reporting of a single
  software instance.  If multiple sources each report the same type of
  software product once, there is most likely a single instance of that
  product installed on the endpoint, which each source has detected
  independently.  On the other hand, if multiple instances are reported
  by a single source, this almost certainly means that there are
  actually multiple instances that are being reported.

  The SWIMA-PC is responsible for tracking associations between Source
  Identifiers and the given data source.  This association MUST remain
  consistent with regard to a given SWIMA-PV while there is an active
  PB-TNC session with that SWIMA-PV.  The SWIMA-PC MAY have a different
  Source Identifier association for different SWIMA-PVs.  Likewise, the
  SWIMA-PC MAY change the Source Identifier association for a given
  SWIMA-PV if the PB-TNC session terminates.  However, implementers of
  SWIMA-PCs will probably find it easier to manage associations by
  maintaining the same association for all SWIMA-PVs and across
  multiple sessions.

  Of special note, event records reported from the SWIMA-PC's event log
  (discussed in Section 3.7) also need to be sent with their associated
  data source.  The Source Identifier reported with events MUST be the
  current (i.e., at the time the event is sent) Source Identifier



Schmidt, et al.              Standards Track                   [Page 21]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  associated with the data source that produced the event, regardless
  of how long ago that event occurred.  Event logs are likely to
  persist far longer than a single PB-TNC session.  SWIMA-PCs MUST
  ensure that each event can be linked to the appropriate data source,
  even if the Source Identifiers used when the event was created have
  since been reassigned.  In other words, when sending an event, it
  needs to be sent with the Source Identifier currently linked to the
  data source that produced it, regardless of whether a different
  Source Identifier would have been associated with the event when the
  event was first created.

  Note that the Source Identifier is primarily used to support
  recognition, rather than identification, of sources.  That is to say,
  a Source Identifier can tell a recipient that two events were
  reported by the same source, but the number will not necessarily help
  that recipient determine which source was used.  Moreover, different
  SWIMA-PCs will not necessarily use the same Source Identifiers for
  the same sources.  SWIMA-PCs MUST track the assignment of Source
  Identifiers to ensure consistent application thereof.  SWIMA-PCs MUST
  also track which Source Identifiers have been used with each SWIMA-PV
  with which they communicate.

3.4.6.  Using Software and Record Identifiers in SWIMA Attributes

  A SWIMA attribute reporting an endpoint's Software Inventory Evidence
  Collection always contains the Software Identifiers associated with
  the identified software products.  A SWIMA attribute might or might
  not also contain copies of Software Inventory Evidence Records.  The
  attribute exchange is identical to the diagram shown in Figure 2,
  regardless of whether Software Inventory Evidence Records are
  included.  The SWIMA Request attribute indicates whether the response
  is required to include Software Inventory Evidence Records.
  Excluding Software Inventory Evidence Records can reduce the
  attribute size of the response by multiple orders of magnitude when
  compared to sending the same inventory with full records.

3.5.  Targeted Requests

  Sometimes a SWIMA-PV does not require information about every piece
  of software on an endpoint but only needs to receive updates about
  certain software instances.  For example, enterprise endpoints might
  be required to have certain software products installed and to keep
  these updated.  Instead of requesting a complete inventory just to
  see if these products are present, the SWIMA-PV can make a "targeted
  request" for the software in question.






Schmidt, et al.              Standards Track                   [Page 22]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  Targeted requests follow the same attribute exchange as the exchange
  described in Figure 2.  The SWIMA-PV targets its request by providing
  one or more Software Identifiers in its SWIMA Request attribute.  The
  SWIMA-PC MUST then limit its response to contain only records that
  match the indicated Software Identifier(s).  This allows the network
  exchange to exclude information that is not relevant to a given
  policy question, thus reducing unnecessary bandwidth consumption.
  The SWIMA-PC's response might or might not include Software Inventory
  Evidence Records, depending on the parameters of the SWIMA Request.

  Note that targeted requests identify the software relevant to the
  request only through Software Identifiers.  This specification does
  not support arbitrary, parameterized querying of records.  For
  example, one cannot request all records from a certain software
  publisher or all records created by a particular data source.
  Targeted requests only allow a requester to request specific software
  (as identified by their Software Identifiers) and receive a response
  that is limited to the named software.

  There is no assumption that a SWIMA-PC will recognize "synonymous
  records" -- that is, records from different sources for the same
  software.  Recall that different sources and data models may use
  different Software Identifier strings for the same software product.
  The SWIMA-PC returns only records that match the Software Identifiers
  in the SWIMA Request, even if there might be other records in the
  endpoint's Software Inventory Evidence Collection for the same
  software product.  This is necessary because SWIMA-PCs might not have
  the ability to determine that two Software Identifiers refer to the
  same product.

  A targeted SWIMA Request attribute does not specify Record
  Identifiers or Software Locators.  The response to a targeted request
  MUST include all records associated with the named Software
  Identifiers, including the case where there are multiple records
  associated with a single Software Identifier.

  SWIMA-PCs MUST accept targeted requests and process them correctly as
  described above.  SWIMA-PVs MUST be capable of making targeted
  requests and processing the responses thereto.

3.6.  Monitoring Changes in an Endpoint's Software Inventory Evidence
     Collection

  The software collection on an endpoint is not static.  As software is
  installed, uninstalled, patched, or updated, the Software Inventory
  Evidence Collection is expected to change to reflect the new software
  state on the endpoint.  Different data sources might update the
  evidence collection at different rates.  For example, a package



Schmidt, et al.              Standards Track                   [Page 23]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  manager might update its records in the Software Inventory Evidence
  Collection immediately whenever it is used to add or remove a
  software product.  By contrast, sources that perform periodic
  examination of the endpoint would likely only update their records in
  the Software Inventory Evidence Collection after each examination.

  All SWIMA-PCs MUST be able to detect changes to the Software
  Inventory Evidence Collection.  Specifically, SWIMA-PCs MUST be able
  to detect:

  o  The creation of records

  o  The deletion of records

  o  The alteration of records

  An "alteration" is anything that modifies the contents of a record
  (or would modify it, if the record is dynamically generated on
  demand) in any way, regardless of whether the change is functionally
  meaningful.

  SWIMA-PCs MUST detect such changes to the endpoint's Software
  Inventory Evidence Collection in close to real time (i.e., within
  seconds) when the SWIMA-PC is operating.  In addition, in the case
  where there is a period during which the SWIMA-PC is not operating,
  the SWIMA-PC MUST be able to determine the net change to the
  endpoint's Software Inventory Evidence Collection over the period it
  was not operational.  Specifically, the "net change" represents the
  difference between (1) the state of the endpoint's Software Inventory
  Evidence Collection when the SWIMA-PC was last operational and
  monitoring its state and (2) the state of the endpoint's Software
  Inventory Evidence Collection when the SWIMA-PC resumed operation.
  Note that a net change might not reflect the total number of change
  events over this interval.  For example, if a record was altered
  three times during a period when the SWIMA-PC was unable to monitor
  for changes, the net change of this interval might only note that
  there was an alteration to the record, but not how many individual
  alteration events occurred.  It is sufficient for a SWIMA-PC's
  determination of a net change to note that there was a difference
  between the earlier and current state, rather than to enumerate all
  the individual events that allowed the current state to be reached.

  The SWIMA-PC MUST assign a time to each detected change in the
  endpoint's Software Inventory Evidence Collection.  These timestamps
  correspond to the SWIMA-PC's best understanding as to when the
  detected change occurred.  For changes to the endpoint's Software
  Inventory Evidence Collection that occur while the SWIMA-PC is
  operating, the SWIMA-PC ought to be able to assign a time to the



Schmidt, et al.              Standards Track                   [Page 24]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  event that is accurate to within a few seconds.  For changes to the
  endpoint's Software Inventory Evidence Collection that occur while
  the SWIMA-PC is not operational, upon becoming operational the
  SWIMA-PC needs to make a best guess as to the time of the relevant
  events (possibly by looking at timestamps on files), but these values
  might be off.  In the case of dynamically generated records, the time
  of change is the time at which the data from which the records are
  generated changes, not the time at which a changed record is
  generated.  For example, if records are dynamically generated based
  on data in an RPM database (<http://rpm.org/>), the time of change
  would be when the RPM database changed.

  With regard to deletions of records, the SWIMA-PC needs to detect the
  deletion of a given record and MUST retain a copy of the full deleted
  record along with the associated Record Identifier and Software
  Locator so that the record and associated information can be provided
  to the SWIMA-PV upon request.  This copy of the record MUST be
  retained for a reasonable amount of time.  Vendors and administrators
  determine what "reasonable" means, but a copy of the record SHOULD be
  retained for as long as the event recording the deletion of the
  record remains in the SWIMA-PC's event log (as described in
  Section 3.7).  This is recommended, because as long as the event is
  in the SWIMA-PC's event log the SWIMA-PC might send a change event
  attribute (described in Section 3.7) that references this record, and
  a copy of the record is needed if the SWIMA-PV wants a full copy of
  the relevant record.  In the case that a SWIMA-PC is called upon to
  report a deletion event that is still in the event log but where the
  record itself is no longer available, the SWIMA-PC will still return
  an entry corresponding to the deletion event, but the field of that
  entry that would normally contain the full copy of the record SHOULD
  be zero-length.

  With regard to alterations to a record, SWIMA-PCs MUST detect any
  alterations to the contents of a record.  Alterations need to be
  detected even if they have no functional impact on the record.  A
  good guideline is that any alteration to a record that might change
  the value of a hash taken on the record's contents needs to be
  detected by the SWIMA-PC.  A SWIMA-PC might be unable to distinguish
  modifications to the contents of a record from modifications to the
  metadata that the filesystem associates with the record.  For
  example, a SWIMA-PC might use the "last modification" timestamp as an
  indication of alteration to a given record, but a record's last
  modification time can change for reasons other than modifications to
  the record's contents.  A SWIMA-PC is still considered compliant with
  this specification if it also reports metadata change events that do
  not change the record itself as alterations to the record.  In other
  words, while SWIMA-PC implementers are encouraged to exclude
  modifications that do not affect the bytes within the record,



Schmidt, et al.              Standards Track                   [Page 25]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  discriminating between modifications to file contents and changes to
  file metadata can be difficult and time consuming on some systems.
  As such, as long as the alterations detected by a SWIMA-PC always
  cover all modifications to the contents of a record, the SWIMA-PC is
  considered compliant even if it also registers alterations that do
  not modify the contents of a record as well.  When recording an
  alteration to a record, the SWIMA-PC is only required to note that an
  alteration occurred.  The SWIMA-PC is not required to note or record
  how the record was altered, nor is it possible to include such
  details in SWIMA attributes reporting the change to a SWIMA-PV.
  There is no need to retain a copy of the original record prior to the
  alteration.

  When a record changes, it SHOULD retain the same Record Identifier.
  The Software Locator might or might not change, depending on whether
  the software changed locations during the changes that led to the
  record change.  A record change MUST retain the same Software
  Identifier.  This means that any action that changes a software
  product (e.g., application of a patch that results in a change to the
  product's version) MUST NOT be reflected by a record change but
  instead MUST result in the deletion of the old record and the
  creation of a new record.  This reflects the requirement that a
  record in the endpoint's Software Inventory Evidence Collection
  correspond directly with an instance of a specific software product.

3.7.  Reporting Change Events

  As noted in Section 3.6, SWIMA-PCs are required to detect changes to
  the endpoint's Software Inventory Evidence Collection (creation,
  deletion, and alteration) in near real time while the SWIMA-PC is
  operational, and a given SWIMA-PC MUST be able to account for any net
  change to the endpoint's Software Inventory Evidence Collection that
  occurs when the SWIMA-PC is not operational.  However, to be of use
  to the enterprise, the NEA Server needs to be able to receive these
  events and be able to understand how new changes relate to earlier
  changes.  In SWIMA, this is facilitated by reporting change events.
  All SWIMA-PCs MUST be capable of receiving requests for change events
  and sending change event attributes.  All SWIMA-PVs MUST be capable
  of requesting and receiving change event attributes.












Schmidt, et al.              Standards Track                   [Page 26]

RFC 8412                    SWIMA for PA-TNC                   July 2018


3.7.1.  Event Identifiers

  To be useful, change events need to be correctly ordered.  The
  ordering of events is facilitated by two pieces of information: an
  Event Identifier (EID) value and an EID Epoch value.

  An EID is a 4-byte unsigned integer that the SWIMA-PC assigns
  sequentially to each observed event (whether detected in real time or
  deduced by looking for net changes over a period of SWIMA-PC
  inactivity).  All EIDs exist within the context of some "EID Epoch",
  which is also represented as a 4-byte unsigned integer.  EID Epochs
  are used to ensure synchronization between the SWIMA-PC and any
  SWIMA-PVs with which it communicates.  EID Epoch values MUST be
  generated in such a way as to minimize the chance that an EID Epoch
  will be reused, even in the case where the SWIMA-PC reverts to an
  earlier state.  For this reason, sequential EID Epochs are
  discouraged, since loss of state could result in value reuse.  There
  are multiple reasons that a SWIMA-PC might need to deliberately reset
  its EID counter, including exhaustion of available EID values, the
  need to purge entries from the event log to recover memory, or
  corruption of the event log.  In all cases where a SWIMA-PC needs to
  reset its EID counter, a new EID Epoch MUST be selected.

  Within an Epoch, EIDs MUST be assigned sequentially, so that if a
  particular event is assigned an EID of N, the next observed event is
  given an EID of N+1.  In some cases, events might occur
  simultaneously, or the SWIMA-PC might not otherwise be able to
  determine an ordering for events.  In these cases, the SWIMA-PC
  creates an arbitrary ordering of the events and assigns EIDs
  according to this ordering.  Two change events MUST NOT ever be
  assigned the same EID within the same EID Epoch.  No meaningful
  comparison can be made between EID values of different Epochs.

  The EID value of 0 is reserved and MUST NOT be associated with any
  event.  Specifically, an EID of 0 in a SWIMA Request attribute
  indicates that a SWIMA-PV wants an inventory response rather than an
  event response, while an EID of 0 in a SWIMA Response is used to
  indicate the initial state of the endpoint's Software Inventory
  Evidence Collection prior to the observation of any events.  Thus,
  the very first recorded event in a SWIMA-PC's records within an EID
  Epoch MUST be assigned a value of 1.  Note that EID and EID Epoch
  values are assigned by the SWIMA-PC without regard to whether events
  are being reported to one or more SWIMA-PVs.  The SWIMA-PC records
  events and assigns EIDs during its operation.  All SWIMA-PVs that
  request event information from the SWIMA-PC will have those requests
  served from the same event records and thus will see the same EIDs
  and EID Epochs for the same events.




Schmidt, et al.              Standards Track                   [Page 27]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  If a SWIMA-PC uses multiple sources, a SWIMA-PC's assignment of EIDs
  MUST reflect the presence and order of all events on the endpoint (at
  least for supported sources), regardless of the source.  This means
  that if source A experiences an event and then source B experiences
  two events, and then source A experiences another two events, the
  SWIMA-PC is required to capture five events with consecutive EID
  values reflecting the order in which the events occurred.

  The SWIMA-PC MUST ensure that there is no coverage gap (i.e., change
  events that are not recorded in the SWIMA-PC's records) in its change
  event records.  This is necessary because a coverage gap might give a
  SWIMA-PV a false impression of the endpoint's state.  For example, if
  a SWIMA-PV saw an event indicating that a particular record had been
  added to the endpoint's Software Inventory Evidence Collection but
  did not see any subsequent events indicating that the record in
  question had been deleted, it might reasonably assume that this
  record was still present and thus that the indicated software was
  still installed (assuming that the Epoch has not changed).  If there
  is a coverage gap in the SWIMA-PC's event records, however, this
  assumption could be false.  For this reason, the SWIMA-PC's event
  records MUST NOT contain gaps.  In the case where there are periods
  where it is possible that changes occurred without the SWIMA-PC
  detecting or recording them, the SWIMA-PC MUST either (1) compute a
  net change and update its event records appropriately or (2) pick a
  new EID Epoch to indicate a discontinuity with previous event
  records.

  Within a given Epoch, once a particular event has been assigned an
  EID, this association MUST NOT be changed.  That is, within an Epoch,
  once an EID is assigned to an event, that EID cannot be reassigned to
  a different event, and the event cannot be assigned a different EID.
  When the SWIMA-PC's Epoch changes, all of these associations between
  EIDs and events are cancelled, and EID values once again become free
  for assignment.

3.7.2.  Core Event-Tracking Information

  Whether reporting events or full inventories, it is important to know
  how the reported information fits into the overall timeline of change
  events.  This is why all SWIMA Response attributes include fields to
  place that response within the sequence of detected events.
  Specifically, all SWIMA Responses include a Last EID field and an EID
  Epoch field.  The EID Epoch field identifies the EID Epoch in which
  the SWIMA Response was sent.  If the SWIMA Response is reporting
  events, all reported events occurred within the named EID Epoch.  The
  Last EID (which is also always from the named EID Epoch) indicates
  the EID of the last recorded change event at the time that the SWIMA




Schmidt, et al.              Standards Track                   [Page 28]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  Response was sent.  These two fields allow any response to be placed
  in the context of the complete set of detected change events within a
  given EID Epoch.

3.7.3.  Updating Inventory Knowledge Based on Events

  Modern endpoints can have hundreds of software products installed,
  most of which are unlikely to change from one day to the next.  As
  such, instead of exchanging a complete list of an endpoint's
  inventory on a regular basis, one might wish to only identify changes
  since some earlier known state of this inventory.  This is readily
  facilitated by the use of EIDs to place change events in a context
  relative to the earlier state.

  As noted above, every SWIMA Response sent by a SWIMA-PC to a SWIMA-PV
  (as described in Sections 3.3 through 3.5) includes the EID Epoch and
  EID of the last event recorded prior to that response being compiled.
  This allows the SWIMA-PV to place all subsequently received event
  records in context relative to this SWIMA Response attribute (since
  the EIDs represent a total ordering of all changes to the endpoint's
  Software Inventory Evidence Collection).  Specifically, a SWIMA-PV
  (or, more likely, a database that collects and records its findings)
  can record an endpoint's full inventory and also the EID and Epoch of
  the most recent event reflected at the time of that inventory.  From
  that point on, if change events are observed, the attribute
  describing these events indicates the nature of the change, the
  affected records, and the order in which these events occurred (as
  indicated by the sequential EIDs).  Using this information, any
  remote record of the endpoint's Software Inventory Evidence
  Collection can be updated appropriately.

3.7.4.  Using Event Records in SWIMA Attributes

  A SWIMA-PV MUST be able to request a list of event records instead of
  an inventory.  The attribute flow in such an exchange looks the same
  as the basic flow shown in Figure 2.  The only difference is that in
  the SWIMA Request attribute the SWIMA-PV provides an EID other than
  0.  (An EID value of 0 in a SWIMA Request represents a request for an
  inventory.)  When the SWIMA-PC receives such a request, instead of
  identifying records from the endpoint's Software Inventory Evidence
  Collection, it consults its list of detected changes.  The SWIMA-PC
  MUST add an event record to the SWIMA Response attribute for each
  recorded change event with an EID greater than or equal to the EID in
  the SWIMA Request attribute (although the targeting of requests, as
  described in the next paragraph, might limit this list).  A list of
  event records MUST only contain events with EIDs that all come from
  the current Epoch.




Schmidt, et al.              Standards Track                   [Page 29]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  SWIMA-PVs can target requests for event records by including one or
  more Software Identifiers, as described in Section 3.5, in the SWIMA
  Request that requests an event record list.  A targeted request for
  event records is used to indicate that only events affecting software
  that matches one of the provided Software Identifiers are to be
  returned.  Specifically, in response to a targeted request for event
  records, the SWIMA-PC MUST exclude any event records that are less
  than the indicated EID (within the current EID Epoch) and exclude any
  event records where the affected software does not match one of the
  provided Software Identifiers.  This might mean that the resulting
  list of event records sent in the response attribute does not provide
  a continuous sequence of EIDs.  Both SWIMA-PCs and SWIMA-PVs MUST
  support targeted requests for event records.

3.7.5.  Partial and Complete Lists of Event Records in SWIMA Attributes

  Over time, a SWIMA-PC might record a large number of change events.
  If a SWIMA-PV requests all change events covering a long period of
  time, the resulting SWIMA Response attribute might be extremely
  large, especially if the SWIMA-PV requests the inclusion of Software
  Inventory Evidence Records in the response.  In the case that the
  resulting attribute is too large to send (because it exceeds either
  (1) the 4 GB attribute size limit imposed by the PA-TNC specification
  or (2) some smaller size limit imposed on the SWIMA-PC), the SWIMA-PC
  MAY send a partial list of event records back to the SWIMA-PV.

  The generation of a partial list of events in a SWIMA Response
  attribute requires the SWIMA-PC to identify a "consulted range" of
  EIDs.  A consulted range is the set of event records that are
  examined for inclusion in the SWIMA Response attribute and that are
  included in that attribute if applicable.  Recall that if a SWIMA
  Request is targeted, only event records that involve the indicated
  software would be applicable.  (See Section 3.5 for more on targeted
  requests.)  If a request is not targeted, all event records in the
  consulted range are applicable and are included in the SWIMA Response
  attribute.

  The lower bound of the consulted range MUST be the EID provided in
  the SWIMA Request.  (Recall that a SWIMA-PV indicates a request for
  event records by providing a non-zero EID value in the SWIMA Request.
  See Section 3.7.4.)  The upper bound of the consulted range is the
  EID of the latest event record (as ordered by EID values) that is
  included in the SWIMA Response attribute if it is applicable to the
  request.  The EID of this last event record is called the "Last
  Consulted EID".  The SWIMA-PC chooses this Last Consulted EID based
  on the size of the event record list it is willing to provide to the
  SWIMA-PV.




Schmidt, et al.              Standards Track                   [Page 30]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  A partial result list MUST include all applicable event records
  within the consulted range.  This means that for any applicable event
  record (i.e., any event record in a non-targeted request or any event
  record associated with software matching a requested Software
  Identifier in a targeted request) whose EID is greater than or equal
  to the EID provided in the SWIMA Request and whose EID is less than
  or equal to the Last Consulted EID, that event record MUST be
  included in the SWIMA Response conveying this partial list of event
  records.  This ensures that every partial list of event records is
  always complete within its indicated range.  Remember that for
  targeted requests, "complete" doesn't mean that all EIDs between the
  range endpoints are present -- only that every matching EID between
  the range endpoints is included.

  In addition to the EID Epoch and Last EID fields that are present in
  all SWIMA Responses, all SWIMA Response attributes that convey event
  records include a Last Consulted EID field.  Note that if responding
  to a targeted SWIMA Request, the SWIMA Response attribute might not
  contain the event record whose EID matches the Last Consulted EID
  value.  For example, that record might have been deemed inapplicable
  because it did not match the specified list of Software Identifiers
  in the SWIMA Request.

  If a SWIMA-PV receives a SWIMA Response attribute where the Last EID
  and Last Consulted EID fields are identical, the SWIMA-PV knows that
  it has received a result list that is complete, given the parameters
  of the request, up to the present time.

  On the other hand, if the Last EID is greater than the Last Consulted
  EID, the SWIMA-PV has received a partial result list.  (The Last
  Consulted EID MUST NOT exceed the Last EID.)  In this case, if the
  SWIMA-PV wishes to try to collect the rest of the partially delivered
  result list, it then sends a new SWIMA Request whose EID is one
  greater than the Last Consulted EID in the preceding response.  Doing
  this causes the SWIMA-PC to generate another SWIMA Response attribute
  containing event records where the earliest reported event record is
  the one immediately after the event record with the Last Consulted
  EID (since EIDs are assigned sequentially).  By repeating this
  process until it receives a SWIMA Response where the Last EID and
  Last Consulted EID are equal, the SWIMA-PV is able to collect all
  event records over a given range, even if the complete set of event
  records would be too large to deliver via a single attribute.

  Implementers need to be aware that a SWIMA Request might specify an
  EID that is greater than the EID of the last event recorded by a
  SWIMA-PC.  In accordance with the behaviors described in
  Section 3.7.4, a SWIMA-PC MUST respond to such a request with a SWIMA
  Response attribute that contains zero event records.  This is because



Schmidt, et al.              Standards Track                   [Page 31]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  the SWIMA-PC has recorded no event records with EIDs greater than or
  equal to the EID in the SWIMA Request.  In such a case, the Last
  Consulted EID field MUST be set to the same value as the Last EID
  field in this SWIMA Response attribute.  This case is called out
  because the consulted range on a SWIMA-PC in such a situation is a
  negative range, where the "first" EID in the range (provided in the
  SWIMA Request) is greater than the "last" EID in the range (this
  being the EID of the last recorded event on the SWIMA-PC).
  Implementers need to ensure that SWIMA-PCs do not experience problems
  in such a circumstance.

  Note that this specification only supports the returning of partial
  results when returning event records.  There is no way to return a
  partial inventory list under this specification.

3.7.6.  Synchronizing Event Identifiers and Epochs

  Since EIDs are sequential within an Epoch, if a SWIMA-PV's list of
  event records contains gaps in the EID values within a single Epoch,
  the SWIMA-PV knows that there are events that it has not accounted
  for.  The SWIMA-PV can request either (1) a new event list to collect
  the missing events or (2) a full inventory to resync its
  understanding of the state of the endpoint's Software Inventory
  Evidence Collection.  In either case, after the SWIMA-PV's record of
  the endpoint's Software Inventory Evidence Collection has been
  updated, the SWIMA-PV can record the new latest EID value and track
  events normally from that point on.

  If the SWIMA-PV receives any attribute from a SWIMA-PC where the EID
  Epoch differs from the EID Epoch that was used previously, then the
  SWIMA-PV or any entity using this information to track the endpoint's
  Software Inventory Evidence Collection knows that there is a
  discontinuity in its understanding of the endpoint's state.  To move
  past this discontinuity and reestablish a current understanding of
  the state of the endpoint's Software Inventory Evidence Collection,
  the SWIMA-PV needs to receive a full inventory from the endpoint.
  The SWIMA-PV cannot be brought in sync with the endpoint's state
  through the collection of any set of event records in this situation.
  This is because it is not possible to account for all events on the
  SWIMA-PC since the previous Epoch was used: there is no way to query
  for EIDs from a previous Epoch.  Once the SWIMA-PV has received a
  full inventory for the new Epoch, the SWIMA-PV records the latest EID
  reported in this new Epoch and can track further events normally.

  A SWIMA-PC MUST NOT report events with EIDs from any Epoch other than
  the current EID Epoch.  The SWIMA-PC MAY choose to purge all event
  records from a previous Epoch from memory after an Epoch change.
  Alternately, the SWIMA-PC MAY choose to retain some event records



Schmidt, et al.              Standards Track                   [Page 32]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  from a previous EID Epoch and assign them new EIDs in the current
  Epoch.  However, in the case where a SWIMA-PC chooses the latter
  option it MUST ensure that the order of events according to their
  EIDs is unchanged and that there is no coverage gap between the first
  retained event recorded during the previous Epoch (now reassigned
  with an EID in the current Epoch) and the first event recorded during
  the current Epoch.  In particular, the SWIMA-PC MUST ensure that all
  change events that occurred after the last recorded event from the
  previous Epoch are known and recorded.  (This might not be possible
  if the Epoch change is due to state corruption on the SWIMA-PC.)  A
  SWIMA-PC might choose to reassign EIDs to records from a preceding
  Epoch to create a "sliding window" of events, where each Epoch change
  represents a shift in the window of available events.

  In the case where a SWIMA-PC suffers a crash and loses track of its
  current EID Epoch or current EID, then it MUST generate a new EID
  Epoch value and begin assigning EIDs within that Epoch.  In this
  case, the SWIMA-PC MUST purge all event records from before the
  crash, as it cannot ensure that there is not a gap between the last
  of those records and the next detected event.  The process for
  generating a new EID Epoch MUST minimize the possibility that the
  newly generated EID Epoch is the same as a previously used EID Epoch.

  The SWIMA-PV will normally never receive an attribute indicating that
  the latest EID is less than the latest EID reported in a previous
  attribute within the same EID Epoch.  If this occurs, the SWIMA-PC
  has suffered an error of some kind, possibly indicative of at least
  partial corruption of its event log.  In this case, the SWIMA-PV MUST
  treat the situation as if there was a change in Epoch and treat any
  local copy of the endpoint's Software Inventory Evidence Collection
  as being out of sync until a full inventory can be reported by the
  SWIMA-PC.  The SWIMA-PV SHOULD log the occurrence so the SWIMA-PC can
  be examined to ensure that it is now operating properly.

3.8.  Subscriptions

  Thus far, all attribute exchanges discussed assume that a SWIMA-PV
  sent a SWIMA Request attribute and the SWIMA-PC is providing a direct
  response to that request.  SWIMA also supports the ability of a
  SWIMA-PC to send a SWIMA Response to the SWIMA-PV in response to
  observed changes in the endpoint's Software Inventory Evidence
  Collection, instead of in direct response to a SWIMA Request.  An
  agreement by a SWIMA-PC to send content when certain changes to the
  endpoint's Software Inventory Evidence Collection are detected is
  referred to in this specification as a "subscription", and the
  SWIMA-PV that receives this content is said to be "subscribed to" the
  given SWIMA-PC.  All SWIMA-PCs and SWIMA-PVs MUST support the use of
  subscriptions.



Schmidt, et al.              Standards Track                   [Page 33]

RFC 8412                    SWIMA for PA-TNC                   July 2018


3.8.1.  Establishing Subscriptions

  A SWIMA-PV establishes a subscription on a particular SWIMA-PC by
  sending a SWIMA Request attribute with the Subscribe flag set.  The
  SWIMA Request attribute is otherwise identical to the SWIMA Requests
  discussed in previous sections.  Specifically, such a SWIMA Request
  might or might not request the inclusion of Software Inventory
  Evidence Records, might or might not be targeted, and might request
  change event records or endpoint inventory.  Assuming that no error
  is encountered, a SWIMA-PC MUST send a SWIMA Response attribute in
  direct response to this SWIMA Request attribute, just as if the
  Subscribe flag was not set.  As such, the attribute exchange that
  establishes a new subscription in a SWIMA-PC has the same flow as the
  flow seen in the previous attribute exchanges, as depicted in
  Figure 2.  If the SWIMA-PV does not receive a PA-TNC Error attribute
  (as described in Sections 3.9 and 5.15) in response to its
  subscription request, the subscription has been successfully
  established on the SWIMA-PC.  The SWIMA Request attribute that
  establishes a new subscription is referred to as the "establishing
  request" for that subscription.

  When a subscription is established, it is assigned a Subscription ID
  value.  The Subscription ID is equal to the value of the Request ID
  of the establishing request.  (For more about Request IDs, see
  Section 5.5.)

  A SWIMA-PC MUST have the ability to record and support at least 8
  simultaneous subscriptions and SHOULD have the ability to support
  more than this.  These subscriptions might all come from a single
  SWIMA-PV, might all be from different SWIMA-PVs (residing on the same
  or different NEA Servers), or might be a mix.  In the case that a
  SWIMA-PC receives a subscription request but is unable to support an
  additional subscription, it MUST respond to the request with a PA-TNC
  Error attribute with error code SWIMA_SUBSCRIPTION_DENIED_ERROR.

  A SWIMA-PV MUST have the ability to record and support at least 256
  simultaneous subscriptions and SHOULD have the ability to support
  more than this.  Any number of these subscriptions might be to the
  same SWIMA-PC, and any number of these subscriptions might be to
  different SWIMA-PCs.  In the latter case, some of these SWIMA-PCs
  might share a single endpoint, while others might be on different
  endpoints.









Schmidt, et al.              Standards Track                   [Page 34]

RFC 8412                    SWIMA for PA-TNC                   July 2018


3.8.2.  Managing Subscriptions

  The SWIMA-PC MUST record each accepted subscription along with the
  identity of the party to whom attributes are to be pushed.  This
  identity includes two parts:

  o  An identifier for the PB-TNC session between the Posture Broker
     Server on a NEA Server and the Posture Broker Client on the
     endpoint.  This identifier is called the "Connection ID"

  o  The Posture Validator Identifier for the SWIMA-PV that made the
     subscription request

  The Posture Validator Identifier is provided in the field of the same
  name in the PB-PA message that encapsulates the subscription request
  attribute (Section 4.5 of [RFC5793]), and this information is passed
  along to NEA Posture Collectors (Section 3.3 of [RFC5792]).  The
  Connection ID is a value local to a particular endpoint's Posture
  Broker Client that identifies an ongoing session between a specific
  Posture Broker Client and a specific Posture Broker Server.  Posture
  Broker Clients and Posture Broker Servers need to be capable of
  supporting multiple simultaneous sessions, so they already need a way
  to locally distinguish each ongoing session.  (See Section 3.1 of
  [RFC5793].)  A Posture Broker Client needs to assign each session at
  a given time its own Connection ID that lasts for the life of that
  session.  Connection IDs only need to be unique among the Connection
  IDs of simultaneously occurring sessions on that endpoint.  This
  Connection ID needs to be exposed to the SWIMA-PC, and the SWIMA-PC
  needs to be informed when the Connection ID is unbound due to the
  closure of that connection.

  Likewise, SWIMA-PVs MUST record each accepted subscription for which
  they are the subscribing party, including the parameters of the
  establishing request, along with the associated Subscription ID and
  the identity of the SWIMA-PC that will be fulfilling the
  subscription.  The SWIMA-PV needs to retain this information in order
  to correctly interpret pushed SWIMA Response attributes sent in
  fulfillment of the subscription.  The identity of the SWIMA-PC is
  given in the Posture Collector Identifier [RFC5793] of the PB-PA
  message header in all messages from that SWIMA-PC.  The SWIMA-PV has
  no need to record the associated connection ID of the subscription as
  the SWIMA-PV is only receiving, not sending, attributes once a
  subscription is established.








Schmidt, et al.              Standards Track                   [Page 35]

RFC 8412                    SWIMA for PA-TNC                   July 2018


3.8.3.  Terminating Subscriptions

  Subscriptions MAY be terminated at any time by the subscribing
  SWIMA-PV by setting the Clear Subscriptions flag in a SWIMA Request.
  (See Section 5.6 for more on using this flag.)  In the case that a
  SWIMA Request with the Clear Subscriptions flag set is received, the
  SWIMA-PC MUST only clear subscriptions that match both the NEA
  Server's Connection ID and the SWIMA-PV's Posture Validator
  Identifier for this SWIMA Request and MUST clear all such
  subscriptions.

  This specification does not give the SWIMA-PV the ability to
  terminate subscriptions individually -- all subscriptions to the
  SWIMA-PV are cleared when the Clear Subscriptions flag is set.

  This specification does not give the SWIMA-PC the ability to
  unilaterally terminate a subscription.  However, if the SWIMA-PC
  experiences a fatal error while fulfilling a subscription, resulting
  in sending a PA-TNC Error attribute with error code
  SWIMA_SUBSCRIPTION_FULFILLMENT_ERROR, then the subscription whose
  fulfillment led to the error MUST be treated as terminated by both
  the SWIMA-PC and the SWIMA-PV.  Only the subscription experiencing
  the error is cancelled; other subscriptions are unaffected.  See
  Section 3.9 for more on this error condition.

  Finally, a subscription is terminated if the connection between the
  SWIMA-PC and SWIMA-PV is closed.  This occurs when the Connection ID
  used in the messages between the SWIMA-PC and the SWIMA-PV becomes
  unbound.  Loss of this Connection ID would prevent the SWIMA-PC from
  sending messages in fulfillment of this subscription.  As such, loss
  of the Connection ID necessarily forces subscription termination
  between the affected parties.

3.8.4.  Subscription Status

  A SWIMA-PV can request that a SWIMA-PC report the list of active
  subscriptions for which the SWIMA-PV is the subscriber.  A SWIMA-PV
  can use this capability to recover lost information about active
  subscriptions.  A SWIMA-PV can also use this capability to verify
  that a SWIMA-PC has not forgotten any of its subscriptions.  The
  latter is especially useful in cases where a SWIMA-PC does not send
  any attributes in fulfillment of a given subscription for a long
  period of time.  The SWIMA-PV can check the list of active
  subscriptions on the SWIMA-PC and verify whether the inactivity is
  due to (1) a lack of reportable events or (2) the SWIMA-PC forgetting
  its obligations to fulfill a given subscription.





Schmidt, et al.              Standards Track                   [Page 36]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  A SWIMA-PV requests a list of its subscriptions on a given SWIMA-PC
  by sending that SWIMA-PC a Subscription Status Request.  The SWIMA-PC
  MUST then respond with a Subscription Status Response (or a PA-TNC
  Error if an error condition is experienced).  The Subscription Status
  Response MUST contain one subscription record for each of the active
  subscriptions for which the SWIMA-PV is the subscribing party.

3.8.5.  Fulfilling Subscriptions

  As noted in Section 3.6, SWIMA-PCs are required to automatically
  detect changes to an endpoint's Software Inventory Evidence
  Collection in near real time.  For every active subscription, the
  SWIMA-PC MUST send an attribute to the subscribed SWIMA-PV whenever a
  change to relevant records is detected within the endpoint's Software
  Inventory Evidence Collection.  Such an attribute is said to be sent
  "in fulfillment of" the given subscription, and any such attribute
  MUST include that subscription's Subscription ID.  If the
  establishing request for that subscription was a targeted request,
  then only records that match the Software Identifiers provided in
  that establishing request are considered relevant.  Otherwise (i.e.,
  for non-targeted requests), any record is considered relevant for
  this purpose.  Figure 3 shows a sample attribute exchange where a
  subscription is established and then attributes are sent from the
  SWIMA-PC in fulfillment of the established subscription.

           +-------------+                    +--------------+
           |  SWIMA-PC   |                    |   SWIMA-PV   |  Time
           +-------------+                    +--------------+   |
                 |                                   |           |
                 |<----------SWIMA Request-----------|           |
                 |                                   |           |
                 |-----------SWIMA Response--------->|           |
                 |                                   |           |
                 .                                   .           .
                 .                                   .           .
                 .                                   .           .
   <Change Event>|                                   |           |
                 |----------SWIMA Response---------->|           |
                 |                                   |           |
                 .                                   .           .
                 .                                   .           .
                 .                                   .           .
   <Change Event>|                                   |           |
                 |----------SWIMA Response---------->|           |
                 |                                   |           V

          Figure 3: Subscription Establishment and Fulfillment




Schmidt, et al.              Standards Track                   [Page 37]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  The contents of an attribute sent in fulfillment of a subscription
  depend on the parameters provided in the establishing request for
  that subscription.  Specifically, the attribute sent in fulfillment
  of a subscription has the same attribute type as would a direct
  response to the establishing request.  For example, if the
  establishing request stipulated a response that contained an event
  record list that included Software Inventory Evidence Records, all
  attributes sent in fulfillment of this subscription will also consist
  of event record lists with Software Inventory Evidence Records.  As
  such, all SWIMA Responses displayed in the exchange depicted in
  Figure 3 are the same attribute type.  A SWIMA Response generated in
  fulfillment of an active subscription MUST be a valid SWIMA Response
  attribute according to all the rules outlined in the preceding
  sections.  In other words, an attribute constructed in fulfillment of
  a subscription will look the same as an attribute sent in direct
  response to an explicit request from a SWIMA-PV that had the same
  request parameters and that arrived immediately after the given
  change event.  There are a few special rules that expand on this
  guideline, as discussed in Sections 3.8.5.1 through 3.8.5.5.

3.8.5.1.  Subscriptions That Report Inventories

  In the case that a SWIMA-PV subscribes to a SWIMA-PC and requests an
  inventory attribute whenever changes are detected (i.e., the EID in
  the establishing request is 0), then the SWIMA-PC MUST send the
  requested inventory whenever a relevant change is detected.  (A
  "relevant change" is any change for non-targeted requests or a change
  to an indicated record in a targeted request.)  Upon detection of a
  relevant change for an active subscription, the SWIMA-PC sends the
  appropriate inventory information as if it had just received the
  establishing request.  Inventory attributes sent in fulfillment of
  this subscription will probably have a large amount of redundancy, as
  the same records are likely to be present in each of these SWIMA
  attributes.  The role of an inventory subscription is not to report
  records just for the items that changed -- that is the role of a
  subscription that reports events (see Section 3.8.5.2).  A SWIMA-PC
  MUST NOT exclude a record from an attribute sent in fulfillment of an
  inventory subscription simply because that record was not involved in
  the triggering event (although a record might be excluded for other
  reasons, such as if the subscription is targeted; see
  Section 3.8.5.3).

3.8.5.2.  Subscriptions That Report Events

  A SWIMA-PV indicates that it wishes to establish a subscription
  requesting event records by providing a non-zero EID in the SWIMA
  Request establishing the subscription (see Section 3.7.1).  However,
  when the SWIMA-PC constructs an attribute in fulfillment of the



Schmidt, et al.              Standards Track                   [Page 38]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  subscription (other than the direct response to the establishing
  request), it MUST only include event records for the detected
  change(s) that precipitated this response attribute.  In other words,
  it MUST NOT send a complete list of all changes starting with the
  establishing request's EID, up through the latest change, every time
  a new event is detected.  In effect, the EID in the establishing
  request is treated as being updated every time an attribute is sent
  in fulfillment of this subscription, such that a single event is not
  reported twice in fulfillment of a single subscription.  As such,
  every SWIMA-PC MUST track the EID of the last event that triggered an
  attribute for the given subscription.  When the next event (or set of
  events) is detected, the SWIMA-PC MUST only report events with EIDs
  after the last reported event.  In the case that the EID Epoch of the
  SWIMA-PC changes, the SWIMA-PC MUST reset this EID tracker to zero
  (if the event log is completely purged) or to the new EID of the last
  reported retained event (if the event log is partially purged to
  create a "sliding window").  Doing this ensures that the SWIMA-PC
  continues to only send events that have not been previously reported.

  Note that while a subscription is active, the subscribing SWIMA-PV
  MAY make other requests for event records that overlap with events
  that are reported in fulfillment of a subscription.  Such requests
  are not affected by the presence of the subscription, nor is the
  subscription affected by such requests.  In other words, a given
  request will get the same results back whether or not there was a
  subscription.  Likewise, an attribute sent in fulfillment of a
  subscription will contain the same information whether or not other
  requests had been received from the SWIMA-PV.

  A SWIMA-PV needs to pay attention to the EID Epoch in these
  attributes, as changes in the Epoch might create discontinuities in
  the SWIMA-PV's understanding of the endpoint's Software Inventory
  Evidence Collection state, as discussed in Section 3.7.6.  In
  particular, once the EID Epoch changes, a SWIMA-PV is unable to have
  confidence that it has a correct understanding of the state of an
  endpoint's Software Inventory Evidence Collection until after the
  SWIMA-PV collects a complete inventory.

  SWIMA-PCs MAY send partial lists of event records in fulfillment of a
  subscription.  (See Section 3.7.5 for more on partial lists of event
  records.)  In the case that a SWIMA-PC sends a partial list of event
  records in fulfillment of a subscription, it MUST immediately send
  the next consecutive partial list and continue doing so until it has
  sent the equivalent of the complete list of event records.  In other
  words, if the SWIMA-PC sends a partial list, it does not wait for
  another change event to send another SWIMA Response; rather, it
  continues sending SWIMA Responses until it has sent all event records
  that would have been included in a complete fulfillment of the



Schmidt, et al.              Standards Track                   [Page 39]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  subscription.  Note that the direct response to the establishing
  request is not considered to be sent in fulfillment of a
  subscription.  However, in this case the SWIMA-PC MUST treat the
  presence of unreported events as a triggering event for pushing
  additional messages in fulfillment of the newly established
  subscription.  As such, the net effect is that if the direct response
  to the establishing request (i.e., the Subscription Fulfillment flag
  is unset) is partial, the SWIMA-PC will immediately follow this with
  additional attributes (with the Subscription Fulfillment flag set)
  until the complete set of events has been sent to the SWIMA-PV.

3.8.5.3.  Targeted Subscriptions

  Subscriptions MAY be targeted to only apply to records that match a
  given set of Software Identifiers.  In the case where changes that
  affect multiple records are detected -- some matching the
  establishing request's Software Identifiers and some not -- the
  attribute sent in fulfillment of the subscription MUST only include
  inventory or events (as appropriate) for records that match the
  establishing request's Software Identifiers.  The SWIMA-PC MUST NOT
  include non-matching records in the attribute, even if those
  non-matching records experienced change events that were simultaneous
  with change events on the matching records.

  In addition, a SWIMA-PC MUST send an attribute in fulfillment of a
  targeted subscription only when changes to the endpoint's Software
  Inventory Evidence Collection impact one or more records matching the
  subscription's establishing request's Software Identifiers.  A
  SWIMA-PC MUST NOT send any attribute in fulfillment of a targeted
  subscription based on detected changes to the endpoint's Software
  Inventory Evidence Collection that did not involve any of the records
  targeted by that subscription.

3.8.5.4.  No Subscription Consolidation

  A SWIMA-PV MAY establish multiple subscriptions to a given SWIMA-PC.
  If this is the case, it is possible that a single change event on the
  endpoint might require fulfillment by multiple subscriptions and that
  the information included in attributes that fulfill each of these
  subscriptions might overlap.  The SWIMA-PC MUST send separate
  attributes for each established subscription that requires a response
  due to the given event.  Each of these attributes MUST contain all
  information required to fulfill that individual subscription, even if
  that information is also sent in other attributes sent in fulfillment
  of other subscriptions at the same time.  In other words, SWIMA-PCs
  MUST NOT attempt to combine information when fulfilling multiple
  subscriptions simultaneously, even if this results in some redundancy
  in the attributes sent to the SWIMA-PV.



Schmidt, et al.              Standards Track                   [Page 40]

RFC 8412                    SWIMA for PA-TNC                   July 2018


3.8.5.5.  Delayed Subscription Fulfillment

  A SWIMA-PC MAY delay the fulfillment of a subscription following a
  change event in the interest of waiting to see if additional change
  events are forthcoming and, if so, conveying the relevant records
  back to the SWIMA-PV in a single SWIMA Response attribute.  This can
  help reduce network bandwidth consumption between the SWIMA-PC and
  the SWIMA-PV.  For example, consider a situation where 10 changes
  occur a tenth of a second apart.  If the SWIMA-PC does not delay in
  assembling and sending SWIMA Response attributes, the SWIMA-PV will
  receive 10 separate SWIMA Response attributes over a period of
  1 second.  However, if the SWIMA-PC waits half a second after the
  initial event before assembling a SWIMA Response, the SWIMA-PV only
  receives two SWIMA Response attributes over the same period of time.

  Note that the ability to consolidate events for a single subscription
  over a given period of time does not contradict the rules in
  Section 3.8.5.4 prohibiting consolidation across multiple
  subscriptions.  When delaying fulfillment of subscriptions, SWIMA-PCs
  are still required to fulfill each individual subscription
  separately.  Moreover, in the case that change events within the
  delay window cancel each other out (e.g., a record is deleted and
  then re-added), the SWIMA-PC MUST still report each change event,
  rather than just report the net effect of changes over the delay
  period.  In other words, delayed fulfillment can decrease the number
  of attributes sent by the SWIMA-PC, but it does not reduce the total
  number of change events reported.

  SWIMA-PCs are not required to support delayed fulfillment of
  subscriptions.  However, in the case that the SWIMA-PC does support
  delayed subscription fulfillment, it MUST be possible to configure
  the SWIMA-PC to disable delayed fulfillment.  In other words, parties
  deploying SWIMA-PCs need to be allowed to disable delayed
  subscription fulfillment in their SWIMA-PCs.  The manner in which
  such configuration occurs is left to the discretion of implementers,
  although implementers MUST protect the configuration procedure from
  unauthorized tampering.  In other words, there needs to be some
  assurance that unauthorized individuals are not able to introduce
  long delays in subscription fulfillment.

3.9.  Error Handling

  In the case where the SWIMA-PC detects an error in a SWIMA Request
  attribute that it receives, it MUST respond with a PA-TNC Error
  attribute with an error code appropriate to the nature of the error.
  (See Section 4.2.8 of PA-TNC [RFC5792] for more details about PA-TNC
  Error attributes and error codes, and see Section 5.15 in this
  specification for error codes specific to SWIMA attributes.)  In the



Schmidt, et al.              Standards Track                   [Page 41]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  case that an error is detected in a SWIMA Request, the SWIMA-PC
  MUST NOT take any action requested by this SWIMA Request, even if
  partial completion of the request is possible.  In other words, a
  SWIMA Request that contains an error will be completely ignored by
  the SWIMA-PC (beyond sending a PA-TNC Error attribute and possibly
  logging the error locally); no attempt at partial completion of the
  request will be made.

  In the case where the SWIMA-PC receives a valid SWIMA Request
  attribute but experiences an error during the process of responding
  to that attribute's instructions where that error prevents the
  SWIMA-PC from properly or completely fulfilling that request, the
  SWIMA-PC MUST send a PA-TNC Error attribute with an error code
  appropriate to the nature of the error.  In the case where a PA-TNC
  Error attribute is sent, the SWIMA-PC MUST NOT take any of the
  actions requested by the SWIMA Request attribute that led to the
  detected error.  This is the case even if some actions could have
  been completed successfully and might even require the SWIMA-PC to
  reverse some successful actions already taken before the error
  condition was detected.  In other words, either (1) all aspects of a
  SWIMA Request complete fully and successfully (in which case the
  SWIMA-PC sends a SWIMA Response attribute) or (2) no aspects of the
  SWIMA Request occur (in which case the SWIMA-PC sends a PA-TNC Error
  attribute).  In the case that a SWIMA-PC sends a PA-TNC Error
  attribute in response to a SWIMA Request, then the SWIMA-PC MUST NOT
  also send any SWIMA Response attribute in response to the same SWIMA
  Request.  For this reason, the sending of a SWIMA Response attribute
  MUST be the last action taken by a SWIMA-PC in response to a SWIMA
  Request, to avoid the possibility of a processing error occurring
  after that SWIMA Response attribute is sent.

  In the case that the SWIMA-PC detects an error that prevents it from
  properly or completely fulfilling its obligations under an active
  subscription, the SWIMA-PC MUST send a PA-TNC Error attribute with
  error code SWIMA_SUBSCRIPTION_FULFILLMENT_ERROR to the SWIMA-PV that
  established this subscription.  This type of PA-TNC Error attribute
  identifies the specific subscription that cannot be adequately
  honored due to the error condition and also identifies an error
  "subtype".  The error subtype indicates the error code of the error
  condition the SWIMA-PC experienced that prevented it from honoring
  the given subscription.  In the case that the error condition cannot
  be identified or does not align with any of the defined error codes,
  the SWIMA_ERROR error code SHOULD be used in the subtype.  In the
  case that a SWIMA_SUBSCRIPTION_FULFILLMENT_ERROR is sent, the
  associated subscription MUST be treated as cancelled by both the
  SWIMA-PC and the SWIMA-PV.





Schmidt, et al.              Standards Track                   [Page 42]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  The SWIMA-PV MUST NOT send any PA-TNC Error attributes to SWIMA-PCs.
  In the case that a SWIMA-PV detects an error condition, it SHOULD log
  this error, but the SWIMA-PV does not inform any SWIMA-PCs of this
  event.  Errors might include, but are not limited to, the detection
  of malformed SWIMA Response attributes sent from a given SWIMA-PC, as
  well as the detection of error conditions when the SWIMA-PV processes
  SWIMA Responses.

  Both SWIMA-PCs and SWIMA-PVs SHOULD log errors so that administrators
  can trace the causes of errors.  Log entries SHOULD include the code
  of the error, the time it was detected, and additional descriptive
  information to aid in understanding the nature and cause of the
  error.  Logs are an important debugging tool, and implementers are
  strongly advised to include comprehensive logging capabilities in
  their products.

4.  Protocol

  The SWIMA protocol supports two different types of message exchanges
  for conveying software inventory information.  These message
  exchanges are described in the following subsections, along with
  implementation requirements for supporting them.

  The SWIMA protocol also supports two simple status exchanges: a
  Subscription Status exchange for conveying information about active
  subscriptions, and a Source Metadata exchange for conveying
  information about a SWIMA-PC's data sources.  In both cases, a
  SWIMA-PV sends a request attribute (Subscription Status Request or
  Source Metadata Request, respectively) and a SWIMA-PC responds with a
  matching response attribute (Subscription Status Response or Source
  Metadata Response, respectively).  As these exchanges are
  straightforward, no additional information on the exchanges is
  provided.


















Schmidt, et al.              Standards Track                   [Page 43]

RFC 8412                    SWIMA for PA-TNC                   July 2018


4.1.  Direct Response to a SWIMA Request

  The first type of software information exchange is used to provide
  the SWIMA-PV with a software inventory or event collection from the
  queried endpoint.

      +-------------+                      +--------------+
      |  SWIMA-PC   |                      |   SWIMA-PV   |  Time
      +-------------+                      +--------------+   |
            |                                     |           |
            |<-----------SWIMA Request------------|           |
            |                                     |           |
            |           SWIMA Response*           |           |
            |-----------------or----------------->|           |
            |             PA-TNC Error            |           |
            |                                     |           V

    *SWIMA Response is one of the following: Software Identifier
     Inventory, Software Identifier Events, Software Inventory,
     or Software Events.

  Figure 4: SWIMA Attribute Exchange (Direct Response to SWIMA Request)

  In this exchange, the SWIMA-PV indicates to the SWIMA-PC, via a SWIMA
  Request, the nature of the information it wishes to receive
  (inventory vs. events, full or targeted) and how it wishes the
  returned inventory to be expressed (with or without Software
  Inventory Evidence Records).  The SWIMA-PC responds with the
  requested information using the appropriate attribute type.  A single
  SWIMA Request MUST only lead to a single SWIMA Response or PA-TNC
  Error that is in direct response to that request.




















Schmidt, et al.              Standards Track                   [Page 44]

RFC 8412                    SWIMA for PA-TNC                   July 2018


4.2.  Subscription-Based Response

  The second type of software information exchange allows change-event-
  based reporting based on a subscription.  If there is an active
  subscription on the endpoint, the SWIMA-PC sends a SWIMA Response to
  the SWIMA-PV following a change event on the endpoint in fulfillment
  of that subscription.  Such an exchange is shown in Figure 5.

           +-------------+                +--------------+
           |  SWIMA-PC   |                |   SWIMA-PV   |  Time
           +-------------+                +--------------+   |
                 |                               |           |
   <Change Event>|                               |           |
                 |------SWIMA Response(s)*------>|           |
                 |                               |           |
                 |                               |           V

    *SWIMA Response is one of the following: Software Identifier
     Inventory, Software Identifier Events, Software Inventory,
     or Software Events.

        Figure 5: SWIMA Attribute Exchange (in Fulfillment of an
                          Active Subscription)

  Note that unlike direct responses to a SWIMA Request, a single change
  event can precipitate multiple SWIMA Responses for a single
  subscription, but only if all but the last of those SWIMA Responses
  convey partial lists of event records.  When providing multiple SWIMA
  Responses in this way, the initial responses contain partial lists of
  event records and the last of those SWIMA Responses conveys the
  remainder of the relevant event records, completing the delivery of
  all relevant events in response to the change event.  A single change
  event MUST NOT otherwise be followed by multiple SWIMA Responses or
  PA-TNC Error attributes in any combination.

4.3.  Required Exchanges

  All SWIMA-PVs and SWIMA-PCs MUST support both types of software
  information exchanges.  In particular, SWIMA-PCs MUST be capable of
  pushing a SWIMA Response to a SWIMA-PV immediately upon detection of
  a change to the endpoint's Software Inventory Evidence Collection in
  fulfillment of established SWIMA-PV subscriptions, as described in
  Section 3.8.

  All SWIMA-PCs MUST support both status exchanges (Subscription Status
  and Source Metadata); SWIMA-PVs are recommended to support these
  status exchanges, but doing so is not required.




Schmidt, et al.              Standards Track                   [Page 45]

RFC 8412                    SWIMA for PA-TNC                   July 2018


5.  Software Inventory Messages and Attributes

  This section describes the format and semantics of the SWIMA
  protocol.  This protocol uses the PA-TNC message header format
  [RFC5792].

5.1.  PA Subtype (aka PA-TNC Component Type)

  The NEA PB-TNC [RFC5793] interface provides a general
  message-batching protocol capable of carrying one or more PA-TNC
  messages between the Posture Broker Client and Posture Broker Server.
  When PB-TNC is carrying a PA-TNC message, the PB-TNC message headers
  contain a 32-bit identifier called the "PA Subtype".  The PA Subtype
  field indicates the type of component associated with all of the
  PA-TNC attributes carried by the PB-TNC message.  The core set of
  PA Subtypes is defined in the PA-TNC specification.  This
  specification defines a new "SWIMA Attributes" PA Subtype, which is
  registered in Section 10.2 of this document and is used as a
  namespace for the collection of SWIMA attributes defined in this
  document.

  For more information on PB-TNC messages and PA-TNC messages, as well
  as their message headers, see the PB-TNC [RFC5793] and PA-TNC
  [RFC5792] specifications, respectively.

5.2.  SWIMA Attribute Overview

  Each PA-TNC attribute described in this specification is intended to
  be sent between the SWIMA-PC and SWIMA-PV and so will be carried in a
  PB-TNC message indicating a PA Subtype of "SWIMA Attributes".  PB-TNC
  messages MUST always include the SWIMA Attributes Subtype defined in
  Section 5.1 when carrying SWIMA attributes over PA-TNC.  The
  attributes defined in this specification appear below, along with a
  short summary of their purposes.

  PA-TNC attribute types are identified in the PA-TNC Attribute Header
  via the PA-TNC Attribute Vendor ID field and the PA-TNC Attribute
  Type field; see Section 4.1 of [RFC5792] for details.  Table 1
  identifies the appropriate values for these fields for each attribute
  type used within the SWIMA protocol.  All attributes have a PEN value
  of 0x000000.  Both the hexadecimal and decimal values are provided in
  the Integer column in the table.  Each attribute is described in
  greater detail in subsequent sections (identified in the table's
  Description column).







Schmidt, et al.              Standards Track                   [Page 46]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  +--------------+-----------------+----------------------------------+
  | Attribute    | Integer         | Description                      |
  | Name         |                 |                                  |
  +--------------+-----------------+----------------------------------+
  | SWIMA        | 0x0000000D (13) | Request sent from a SWIMA-PV to  |
  | Request      |                 | a SWIMA-PC for the SWIMA-PC to   |
  |              |                 | provide a software inventory or  |
  |              |                 | event list.  It might also       |
  |              |                 | establish a subscription.        |
  |              |                 | (Section 5.6)                    |
  |              |                 |                                  |
  | Software     | 0x0000000E (14) | An inventory sent without        |
  | Identifier   |                 | Software Inventory Evidence      |
  | Inventory    |                 | Records sent from a SWIMA-PC.    |
  |              |                 | (Section 5.7)                    |
  |              |                 |                                  |
  | Software     | 0x0000000F (15) | A collection of events impacting |
  | Identifier   |                 | the endpoint's Software          |
  | Events       |                 | Inventory Evidence Collection,   |
  |              |                 | where events do not include      |
  |              |                 | Software Inventory Evidence      |
  |              |                 | Records.  (Section 5.8)          |
  |              |                 |                                  |
  | Software     | 0x00000010 (16) | An inventory including Software  |
  | Inventory    |                 | Inventory Evidence Records sent  |
  |              |                 | from a SWIMA-PC.  (Section 5.9)  |
  |              |                 |                                  |
  | Software     | 0x00000011 (17) | A collection of events impacting |
  | Events       |                 | the endpoint's Software          |
  |              |                 | Inventory Evidence Collection,   |
  |              |                 | where events include Software    |
  |              |                 | Inventory Evidence Records.      |
  |              |                 | (Section 5.10)                   |
  |              |                 |                                  |
  | Subscription | 0x00000012 (18) | A request for a list of a        |
  | Status       |                 | SWIMA-PV's active subscriptions  |
  | Request      |                 | on a SWIMA-PC.  (Section 5.11)   |
  |              |                 |                                  |
  | Subscription | 0x00000013 (19) | A list of a SWIMA-PV's active    |
  | Status       |                 | subscriptions on a SWIMA-PC.     |
  | Response     |                 | (Section 5.12)                   |
  |              |                 |                                  |
  | Source       | 0x00000014 (20) | A request for information about  |
  | Metadata     |                 | a SWIMA-PC's data sources.       |
  | Request      |                 | (Section 5.13)                   |
  |              |                 |                                  |





Schmidt, et al.              Standards Track                   [Page 47]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  | Source       | 0x00000015 (21) | Descriptive metadata about a     |
  | Metadata     |                 | SWIMA-PC's data sources.         |
  | Response     |                 | (Section 5.14)                   |
  |              |                 |                                  |
  | PA-TNC Error | 0x00000008 (8)  | An error attribute as defined in |
  |              |                 | the PA-TNC specification         |
  |              |                 | [RFC5792].                       |
  +--------------+-----------------+----------------------------------+

                  Table 1: SWIMA Attribute Enumeration

  Because one of the Software Identifier Inventory, Software Identifier
  Events, Software Inventory, or Software Events attributes is expected
  to be sent to a SWIMA-PV in direct response to a SWIMA Request
  attribute or in fulfillment of an active subscription, those four
  attribute types are referred to collectively in this document as
  "SWIMA Response attributes".

  All SWIMA-PVs MUST be capable of sending SWIMA Request attributes and
  be capable of receiving and processing all SWIMA Response attributes
  as well as PA-TNC Error attributes.  All SWIMA-PCs MUST be capable of
  receiving and processing SWIMA Request attributes and be capable of
  sending all types of SWIMA Response attributes as well as PA-TNC
  Error attributes.  SWIMA-PVs MUST ignore any SWIMA Request attributes
  that they receive.  SWIMA-PCs MUST ignore any SWIMA Response
  attributes or PA-TNC Error attributes that they receive.

5.3.  Message Diagram Syntax

  This specification uses diagrams to define the syntax of new PA-TNC
  messages and attributes.  Each diagram depicts the format and size of
  each field in bits.  Implementations MUST send the bits depicted in
  each diagram as they are shown from left to right for each 32-bit
  quantity, "traversing" the diagram from top to bottom.  Fields
  representing numeric values MUST be sent in network (big endian) byte
  order.

  Descriptions of bit field (e.g., flag) values refer to the position
  of the bit within the field.  These bit positions are numbered from
  the most significant bit through the least significant bit.  As such,
  an octet with only bit 0 set would have a value of 0x80 (1000 0000),
  an octet with only bit 1 set would have a value of 0x40 (0100 0000),
  and an octet with only bit 7 set would have a value of 0x01
  (0000 0001).







Schmidt, et al.              Standards Track                   [Page 48]

RFC 8412                    SWIMA for PA-TNC                   July 2018


5.4.  Normalization of Text Encoding

  In order to ensure consistency of transmitted attributes, some fields
  require normalization of their format.  When this is necessary, this
  information is indicated in the field's description.  In such cases,
  the field contents MUST be normalized to Network Unicode format as
  defined in RFC 5198 [RFC5198].  Network Unicode format defines a
  refinement of UTF-8 [RFC3629] that ensures a normalized expression of
  characters.  SWIMA-PCs and SWIMA-PVs MUST NOT perform conversion and
  normalization on any field values except those specifically
  identified in the following sections as requiring normalization.
  Note, however, that some data models require additional normalization
  before source information is added to an endpoint's Software
  Inventory Evidence Collection as a record.  The references from the
  "Software Data Model Types" registry (see Section 10.5) will note
  where this is necessary.

5.5.  Request IDs

  All SWIMA Request attributes MUST include a Request ID value.  The
  Request ID field provides a value that identifies a given request
  relative to other requests between a SWIMA-PV and the receiving
  SWIMA-PC.  Specifically, the SWIMA-PV assigns each SWIMA Request
  attribute a Request ID value that is intended to be unique within the
  lifetime of a given network Connection ID.

  In the case that a SWIMA Request requests the establishment of a
  subscription and the receiving SWIMA-PC agrees to that subscription,
  the Request ID of that SWIMA Request (i.e., the establishing request
  of the subscription) becomes that subscription's Subscription ID.
  All attributes sent in fulfillment of this subscription include a
  flag indicating that the attribute fulfills a subscription and the
  subscription's Subscription ID.  A SWIMA-PV MUST NOT reuse a Request
  ID value in communications with a given SWIMA-PC while that Request
  ID is also serving as a Subscription ID for an active subscription
  with that SWIMA-PC.  In the case where a SWIMA-PC receives a SWIMA
  Request from a given SWIMA-PV where that Request ID is also the
  Subscription ID of an active subscription with that SWIMA-PV, the
  SWIMA-PC MUST respond with a PA-TNC Error attribute with an error
  code of SWIMA_SUBSCRIPTION_ID_REUSE_ERROR.  Note that this error does
  not cancel the indicated subscription.

  Subscription Status Requests and Subscription Status Responses do not
  include Request IDs.







Schmidt, et al.              Standards Track                   [Page 49]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  In the case where all possible Request ID values have been exhausted
  within the lifetime of a single network Connection ID, the sender MAY
  reuse previously used Request IDs within the same network connection
  if the ID is not being used as a Subscription ID.  In the case where
  reuse is necessary due to exhaustion of possible ID values, the
  SWIMA-PV SHOULD structure the reuse to maximize the time between
  original and subsequent use.  The Request ID value is included in a
  SWIMA Response attribute directly responding to this SWIMA Request to
  indicate which SWIMA Request was received and caused the response.
  Request IDs can be randomly generated or sequential, as long as
  values are not repeated per the rules in this paragraph.  SWIMA-PCs
  are not required to check for duplicate Request IDs, except insofar
  as is necessary to detect Subscription ID reuse.

5.6.  SWIMA Request

  A SWIMA-PV sends this attribute to a SWIMA-PC to request that the
  SWIMA-PC send software inventory information to the SWIMA-PV.  A
  SWIMA-PC MUST NOT send this attribute.

                       1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |  Flags        |       Software Identifier Count               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                       Request ID                              |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                       Earliest EID                            |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                                                               |
  |    SUB-BLOCK (Repeated "Software Identifier Count" times)     |
  |                                                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                    Figure 6: SWIMA Request Attribute

                       1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |   Software Identifier Length  | Software Identifier (var len) |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

               Figure 7: SWIMA Request Attribute SUB-BLOCK








Schmidt, et al.              Standards Track                   [Page 50]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  +---------------+---------------------------------------------------+
  | Field         | Description                                       |
  +---------------+---------------------------------------------------+
  | Flags: Bit 0  | If set (1), the SWIMA-PC MUST delete all          |
  | - Clear       | subscriptions established by the requesting       |
  | Subscriptions | SWIMA-PV (barring any errors).                    |
  |               |                                                   |
  | Flags: Bit 1  | If set (1), in addition to responding to the      |
  | - Subscribe   | request as described, the SWIMA-PC MUST establish |
  |               | a subscription with parameters matching those in  |
  |               | the SWIMA Request attribute (barring any errors). |
  |               |                                                   |
  | Flags: Bit 2  | If unset (0), the SWIMA-PC's response MUST        |
  | - Result Type | include Software Inventory Evidence Records, and  |
  |               | thus the response MUST be a Software Inventory,   |
  |               | Software Events, or PA-TNC Error attribute.  If   |
  |               | set (1), the response MUST NOT include Software   |
  |               | Inventory Evidence Records, and thus the response |
  |               | MUST be a Software Identifier Inventory, Software |
  |               | Identifier Events, or PA-TNC Error attribute.     |
  |               |                                                   |
  | Flags: Bits   | Reserved for future use.  This field MUST be set  |
  | 3-7 -         | to zero on transmission and ignored upon          |
  | Reserved      | reception.                                        |
  |               |                                                   |
  | Software      | A 3-byte unsigned integer indicating the number   |
  | Identifier    | of Software Identifiers that follow.  If this     |
  | Count         | value is non-zero, this is a targeted request, as |
  |               | described in Section 3.5.  The Software           |
  |               | Identifier Length and Software Identifier fields  |
  |               | are repeated, in order, the number of times       |
  |               | indicated in this field.  In the case where       |
  |               | Software Identifiers are present, the SWIMA-PC    |
  |               | MUST only report software that corresponds to the |
  |               | identifiers the SWIMA-PV provided in this         |
  |               | attribute (or respond with a PA-TNC Error         |
  |               | attribute).  This field value MAY be 0, in which  |
  |               | case there are no instances of the Software       |
  |               | Identifier Length and Software Identifier fields. |
  |               | In this case, the SWIMA-PV is indicating an       |
  |               | interest in all Software Inventory Evidence       |
  |               | Records on the endpoint (i.e., this is not a      |
  |               | targeted request).                                |
  |               |                                                   |
  | Request ID    | A value that uniquely identifies this SWIMA       |
  |               | Request from a particular SWIMA-PV.               |
  |               |                                                   |




Schmidt, et al.              Standards Track                   [Page 51]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  | Earliest EID  | In the case where the SWIMA-PV is requesting      |
  |               | software events, this field contains the EID      |
  |               | value of the earliest event the SWIMA-PV wishes   |
  |               | to have reported.  (Note: The report will be      |
  |               | inclusive of the event with this EID value.)  In  |
  |               | the case where the SWIMA-PV is requesting an      |
  |               | inventory, then this field MUST be 0              |
  |               | (0x00000000).  In the case where this field is    |
  |               | non-zero, the SWIMA-PV is requesting events, and  |
  |               | the SWIMA-PC MUST respond using a Software        |
  |               | Events, Software Identifier Events, or PA-TNC     |
  |               | Error attribute.  In the case where this field is |
  |               | zero, the SWIMA-PV is requesting an inventory,    |
  |               | and the SWIMA-PC MUST respond using a Software    |
  |               | Inventory, Software Identifier Inventory, or      |
  |               | PA-TNC Error attribute.                           |
  |               |                                                   |
  | Software      | A 2-byte unsigned integer indicating the length,  |
  | Identifier    | in bytes, of the Software Identifier field.       |
  | Length        |                                                   |
  |               |                                                   |
  | Software      | A string containing the Software Identifier value |
  | Identifier    | from a Software Inventory Evidence Record.  This  |
  |               | field value MUST be normalized to Network Unicode |
  |               | format, as described in Section 5.4.  This string |
  |               | MUST NOT be null terminated.                      |
  +---------------+---------------------------------------------------+

                 Table 2: SWIMA Request Attribute Fields

  The SWIMA-PV sends the SWIMA Request attribute to a SWIMA-PC to
  request the indicated information.  Note that between the Result Type
  flag and the Earliest EID field, the SWIMA-PC is constrained to a
  single possible SWIMA Response attribute type (or a PA-TNC Error
  attribute) in its response to the request.

  The Subscribe flag and the Clear Subscriptions flag are used to
  manage subscriptions for the requesting SWIMA-PV on the receiving
  SWIMA-PC.  Specifically, an attribute with the Subscribe flag set
  seeks to establish a new subscription by the requesting SWIMA-PV to
  the given SWIMA-PC, while an attribute with the Clear Subscriptions
  flag set seeks to delete all existing subscriptions by the requesting
  SWIMA-PV on the given SWIMA-PC.  Note that in the latter case, only
  the subscriptions associated with the Connection ID and the Posture
  Validator Identifier of the requester are deleted as described in
  Section 3.8.3.  A newly established subscription has the parameters
  outlined in the SWIMA Request attribute.  Specifically, the Result
  Type flag indicates the type of result to send in fulfillment of the



Schmidt, et al.              Standards Track                   [Page 52]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  subscription, the value of the Earliest EID field indicates whether
  the fulfillment attributes list inventories or events, and the fields
  describing Software Identifiers (if present) indicate if and how a
  subscription is targeted.  In the case that the SWIMA-PC is unable or
  unwilling to comply with the SWIMA-PV's request to establish or clear
  subscriptions, the SWIMA-PC MUST respond with a PA-TNC Error
  attribute with the SWIMA_SUBSCRIPTION_DENIED_ERROR error code.  If
  the SWIMA-PV requests that subscriptions be cleared but has no
  existing subscriptions, this is not an error.

  An attribute requesting the establishment of a subscription is
  effectively doing "double duty", as it is a request for an immediate
  response from the SWIMA-PC in addition to setting up the
  subscription.  Assuming that the SWIMA-PC is willing to comply with
  the subscription, it MUST send an appropriate response attribute to a
  request with the Subscribe flag set containing all requested
  information.  The same is true of the Clear Subscriptions flag --
  assuming that there is no error, the SWIMA-PC MUST generate a
  response attribute without regard to the presence of this flag, in
  addition to clearing its subscription list.

  Both the Subscribe flag and the Clear Subscriptions flag MAY be set
  in a single SWIMA Request attribute.  In the case where this request
  is successful, the end result MUST be equivalent to the SWIMA-PC
  clearing its subscription list for the given SWIMA-PV first and then
  creating a new subscription in accordance with the request
  parameters.  In other words, do not first create the new subscription
  and then clear all the subscriptions (including the one that was just
  created).  In the case that the requested actions are successfully
  completed, the SWIMA-PC MUST respond with a SWIMA Response attribute.
  The specific type of SWIMA Response attribute depends on the Result
  Type flag and the Earliest EID field, as described above.  In the
  case where there is a failure that prevents some part of this request
  from completing, the SWIMA-PC MUST NOT add a new subscription,
  MUST NOT clear the old subscriptions, and MUST respond with a PA-TNC
  Error attribute.  In other words, the SWIMA-PC MUST NOT partially
  succeed at implementing such a request; either all actions succeed or
  none succeed.

  The Earliest EID field is used to indicate if the SWIMA-PV is
  requesting an inventory or event list from the SWIMA-PC.  A value of
  0 (0x00000000) represents a request for inventory information.
  Otherwise, the SWIMA-PV is requesting event information.  For
  Earliest EID values other than 0, the SWIMA-PC MUST respond with
  event records, as described in Section 3.7.  Note that the request
  does not identify a particular EID Epoch, since responses can only
  include events in the SWIMA-PC's current EID Epoch.




Schmidt, et al.              Standards Track                   [Page 53]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  The Software Identifier Count indicates the number of Software
  Identifiers in the attribute.  This number might be any value between
  0 and 16,777,216, inclusive.  A single Software Identifier is
  represented by the following fields: Software Identifier Length and
  Software Identifier.  These fields are repeated a number of times
  equal to the Software Identifier Count, which may be 0.  The Software
  Identifier Length field indicates the number of bytes allocated to
  the Software Identifier field.  The Software Identifier field
  contains a Software Identifier as described in Section 3.4.1.  The
  presence of one or more Software Identifiers is used by the SWIMA-PV
  to indicate a targeted request, which seeks only inventories of or
  events affecting software corresponding to the given identifiers.
  The SWIMA-PC MUST only report software that matched the Software
  Identifiers provided in the SWIMA-PV's SWIMA Request attribute.

5.7.  Software Identifier Inventory

  A SWIMA-PC sends this attribute to a SWIMA-PV to convey the inventory
  of the endpoint's Software Inventory Evidence Collection without the
  inclusion of Software Inventory Evidence Records.  This list might
  represent a complete inventory or a targeted list of records,
  depending on the parameters in the SWIMA-PV's request.  A SWIMA-PV
  MUST NOT send this attribute.  The SWIMA-PC sends this attribute
  either (1) in fulfillment of an existing subscription where the
  establishing request has a Result Type of 1 and the Earliest EID is
  zero or (2) in direct response to a SWIMA Request attribute where the
  Result Type is 1 and the Earliest EID is zero.

                       1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |  Flags        |         Software Identifier Count             |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |               Request ID Copy / Subscription ID               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                        EID Epoch                              |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                         Last EID                              |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                                                               |
  |    SUB-BLOCK (Repeated "Software Identifier Count" times)     |
  |                                                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

            Figure 8: Software Identifier Inventory Attribute






Schmidt, et al.              Standards Track                   [Page 54]

RFC 8412                    SWIMA for PA-TNC                   July 2018


                       1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                      Record Identifier                        |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |           Data Model Type PEN                 |Data Model Type|
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  | Source Id Num |  Reserved     |   Software Identifier Length  |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |              Software Identifier (variable length)            |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |   Software Locator Length     |Software Locator (variable len)|
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

       Figure 9: Software Identifier Inventory Attribute SUB-BLOCK

  +----------------+--------------------------------------------------+
  | Field          | Description                                      |
  +----------------+--------------------------------------------------+
  | Flags: Bit 0 - | In the case that this attribute is sent in       |
  | Subscription   | fulfillment of a subscription, this bit MUST be  |
  | Fulfillment    | set (1).  In the case that this attribute is a   |
  |                | direct response to a SWIMA Request, this bit     |
  |                | MUST be unset (0).                               |
  |                |                                                  |
  | Flags: Bits    | Reserved for future use.  This field MUST be set |
  | 1-7 - Reserved | to zero on transmission and ignored upon         |
  |                | reception.                                       |
  |                |                                                  |
  | Software       | The number of Software Identifiers that follow.  |
  | Identifier     | This field is an unsigned integer.  The Record   |
  | Count          | Identifier, Data Model Type PEN, Data Model      |
  |                | Type, Source Identification Number, Reserved,    |
  |                | Software Identifier Length, Software Identifier, |
  |                | Software Locator Length, and Software Locator    |
  |                | fields are repeated, in order, the number of     |
  |                | times indicated in this field.  This field value |
  |                | MAY be 0, in which case there are no instances   |
  |                | of these fields.                                 |
  |                |                                                  |











Schmidt, et al.              Standards Track                   [Page 55]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  | Request ID     | In the case where this attribute is in direct    |
  | Copy /         | response to a SWIMA Request attribute from a     |
  | Subscription   | SWIMA-PV, this field MUST contain an exact copy  |
  | ID             | of the Request ID field from that SWIMA Request. |
  |                | In the case where this attribute is sent in      |
  |                | fulfillment of an active subscription, this      |
  |                | field MUST contain the Subscription ID of the    |
  |                | subscription being fulfilled by this attribute.  |
  |                |                                                  |
  | EID Epoch      | The EID Epoch of the Last EID value.  This field |
  |                | is a 4-byte unsigned integer.                    |
  |                |                                                  |
  | Last EID       | The EID of the last event recorded by the        |
  |                | SWIMA-PC, or 0 if the SWIMA-PC has no recorded   |
  |                | events.  This field is a 4-byte unsigned         |
  |                | integer.                                         |
  |                |                                                  |
  | Record         | A 4-byte unsigned integer containing the Record  |
  | Identifier     | Identifier value from a Software Inventory       |
  |                | Evidence Record.                                 |
  |                |                                                  |
  | Data Model     | A 3-byte unsigned integer containing the Private |
  | Type PEN       | Enterprise Number (PEN) of the organization that |
  |                | assigned the meaning of the Data Model Type      |
  |                | value.                                           |
  |                |                                                  |
  | Data Model     | A 1-byte unsigned integer containing an          |
  | Type           | identifier number that identifies the data model |
  |                | of the reported record.                          |
  |                |                                                  |
  | Source         | The Source Identifier number associated with the |
  | Identification | source from which this software installation     |
  | Number         | inventory instance was reported.                 |
  |                |                                                  |
  | Reserved       | Reserved for future use.  This field MUST be set |
  |                | to zero on transmission and ignored upon         |
  |                | reception.                                       |
  |                |                                                  |
  | Software       | A 2-byte unsigned integer indicating the length, |
  | Identifier     | in bytes, of the Software Identifier field.      |
  | Length         |                                                  |
  |                |                                                  |
  | Software       | A string containing the Software Identifier      |
  | Identifier     | value from a Software Inventory Evidence Record. |
  |                | This field value MUST be normalized to Network   |
  |                | Unicode format, as described in Section 5.4.     |
  |                | This string MUST NOT be null terminated.         |
  |                |                                                  |



Schmidt, et al.              Standards Track                   [Page 56]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  | Software       | A 2-byte unsigned integer indicating the length, |
  | Locator Length | in bytes, of the Software Locator field.         |
  |                |                                                  |
  | Software       | A string containing the Software Locator value.  |
  | Locator        | This field value MUST first be normalized to     |
  |                | Network Unicode format, as described in          |
  |                | Section 5.4, and then encoded as a URI           |
  |                | [RFC3986].  This string MUST NOT be null         |
  |                | terminated.                                      |
  +----------------+--------------------------------------------------+

         Table 3: Software Identifier Inventory Attribute Fields

  In the case that this attribute is sent in fulfillment of a
  subscription, the Subscription Fulfillment bit MUST be set (1).  In
  the case that this attribute is sent in direct response to a SWIMA
  Request, the Subscription Fulfillment bit MUST be unset (0).  Note
  that the SWIMA Response attribute sent in direct response to a SWIMA
  Request that establishes a subscription (i.e., a subscription's
  establishing request) MUST be treated as a direct response to that
  SWIMA Request (and thus the Subscription Fulfillment bit is unset).
  SWIMA Response attributes are only treated as being in fulfillment of
  a subscription (i.e., Subscription Fulfillment bit set) if they are
  sent following a change event, as shown in Figure 3.

  The Software Identifier Count field indicates the number of Software
  Identifiers present in this inventory.  Each Software Identifier is
  represented by the following set of fields: Record Identifier, Data
  Model Type PEN, Data Model Type, Source Identification Number,
  Reserved, Software Identifier Length, Software Identifier, Software
  Locator Length, and Software Locator.  These fields will appear once
  for each reported record.

  When responding directly to a SWIMA Request attribute, the Request ID
  Copy / Subscription ID field MUST contain an exact copy of the
  Request ID field from that SWIMA Request.  When this attribute is
  sent in fulfillment of an existing subscription on this SWIMA-PC,
  this field MUST contain the Subscription ID of the fulfilled
  subscription.

  The EID Epoch field indicates the EID Epoch of the Last EID value.
  The Last EID field MUST contain the EID of the last recorded change
  event (see Section 3.7 for more about EIDs and recorded events) at
  the time this inventory was collected.  In the case where there are
  no recorded change events at the time that this inventory was
  collected, the Last EID field MUST contain 0.  These fields can be





Schmidt, et al.              Standards Track                   [Page 57]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  interpreted to indicate that the provided inventory reflects the
  state of the endpoint after all changes up to and including this last
  event have been accounted for.

  The Data Model Type PEN and Data Model Type fields are used to
  identify the data model associated with the given software record.
  These fields are discussed more in Section 3.4.2.

  The Source Identification Number field is used to identify the source
  that provided the given record, as described in Section 3.1.

5.8.  Software Identifier Events

  A SWIMA-PC sends this attribute to a SWIMA-PV to convey events where
  the affected records are reported without Software Inventory Evidence
  Records.  A SWIMA-PV MUST NOT send this attribute.  The SWIMA-PC
  sends this attribute either (1) in fulfillment of an existing
  subscription where the establishing request has a Result Type of 1
  and the Earliest EID is non-zero or (2) in direct response to a SWIMA
  Request attribute where the Result Type is 1 and the Earliest EID is
  non-zero.

                       1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |  Flags        |                Event Count                    |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |            Request ID Copy / Subscription ID                  |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                       EID Epoch                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                        Last EID                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |               Last Consulted EID                              |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                                                               |
  |            SUB-BLOCK (Repeated "Event Count" times)           |
  |                                                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

             Figure 10: Software Identifier Events Attribute










Schmidt, et al.              Standards Track                   [Page 58]

RFC 8412                    SWIMA for PA-TNC                   July 2018


                       1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                            EID                                |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                                                               |
  +-                                                             -+
  |                                                               |
  +-                                                             -+
  |                         Timestamp                             |
  +-                                                             -+
  |                                                               |
  +-                                                             -+
  |                                                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                   Record Identifier                           |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |           Data Model Type PEN                 |Data Model Type|
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  | Source Id Num |  Action       |   Software Identifier Length  |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |              Software Identifier (variable length)            |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |   Software Locator Length     |Software Locator (variable len)|
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

        Figure 11: Software Identifier Events Attribute SUB-BLOCK
























Schmidt, et al.              Standards Track                   [Page 59]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  +----------------+--------------------------------------------------+
  | Field          | Description                                      |
  +----------------+--------------------------------------------------+
  | Flags: Bit 0 - | In the case that this attribute is sent in       |
  | Subscription   | fulfillment of a subscription, this bit MUST be  |
  | Fulfillment    | set (1).  In the case that this attribute is a   |
  |                | direct response to a SWIMA Request, this bit     |
  |                | MUST be unset (0).                               |
  |                |                                                  |
  | Flags: Bits    | Reserved for future use.  This field MUST be set |
  | 1-7 - Reserved | to zero on transmission and ignored upon         |
  |                | reception.                                       |
  |                |                                                  |
  | Event Count    | The number of events that are reported in this   |
  |                | attribute.  This field is a 3-byte unsigned      |
  |                | integer.  The EID, Timestamp, Record Identifier, |
  |                | Data Model Type PEN, Data Model Type, Source     |
  |                | Identification Number, Action, Software          |
  |                | Identifier Length, Software Identifier, Software |
  |                | Locator Length, and Software Locator fields are  |
  |                | repeated, in order, the number of times          |
  |                | indicated in this field.  This field value MAY   |
  |                | be 0, in which case there are no instances of    |
  |                | these fields.                                    |
  |                |                                                  |
  | Request ID     | In the case where this attribute is in direct    |
  | Copy /         | response to a SWIMA Request attribute from a     |
  | Subscription   | SWIMA-PV, this field MUST contain an exact copy  |
  | ID             | of the Request ID field from that SWIMA Request. |
  |                | In the case where this attribute is sent in      |
  |                | fulfillment of an active subscription, this      |
  |                | field MUST contain the Subscription ID of the    |
  |                | subscription being fulfilled by this attribute.  |
  |                |                                                  |
  | EID Epoch      | The EID Epoch of the Last EID value.  This field |
  |                | is a 4-byte unsigned integer.                    |
  |                |                                                  |
  | Last EID       | The EID of the last event recorded by the        |
  |                | SWIMA-PC, or 0 if the SWIMA-PC has no recorded   |
  |                | events.  This field contains the EID of the      |
  |                | SWIMA-PC's last recorded change event (which     |
  |                | might or might not be included as an event       |
  |                | record in this attribute).                       |
  |                |                                                  |







Schmidt, et al.              Standards Track                   [Page 60]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  | Last Consulted | The EID of the last event record that was        |
  | EID            | consulted when generating the event record list  |
  |                | included in this attribute.  This is different   |
  |                | from the Last EID field value if and only if     |
  |                | this attribute is conveying a partial list of    |
  |                | event records.  See Section 3.7.5 for more on    |
  |                | partial lists of event records.                  |
  |                |                                                  |
  | EID            | The EID of the event in this event record.       |
  |                |                                                  |
  | Timestamp      | The timestamp associated with the event in this  |
  |                | event record.  This timestamp is the SWIMA-PC's  |
  |                | best understanding of when the given event       |
  |                | occurred.  Note that this timestamp might be an  |
  |                | estimate.  The Timestamp date and time MUST be   |
  |                | represented as an ASCII string that is expressed |
  |                | in Coordinated Universal Time (UTC) and is       |
  |                | compliant with RFC 3339 [RFC3339], with the      |
  |                | additional restrictions that the 'T' delimiter   |
  |                | and the 'Z' suffix MUST be capitalized and       |
  |                | fractional seconds (time-secfrac) MUST NOT be    |
  |                | included.  This field conforms to the date-time  |
  |                | ABNF production from Section 5.6 of RFC 3339,    |
  |                | with the above restrictions.  Leap seconds are   |
  |                | permitted, and SWIMA-PVs MUST support them.  The |
  |                | Timestamp string MUST NOT be null terminated or  |
  |                | padded in any way.  The length of this field is  |
  |                | always 20 octets.                                |
  |                |                                                  |
  | Record         | A 4-byte unsigned integer containing the Record  |
  | Identifier     | Identifier value from a Software Inventory       |
  |                | Evidence Record.                                 |
  |                |                                                  |
  | Data Model     | A 3-byte unsigned integer containing the PEN of  |
  | Type PEN       | the organization that assigned the meaning of    |
  |                | the Data Model Type value.                       |
  |                |                                                  |
  | Data Model     | A 1-byte unsigned integer containing an          |
  | Type           | identifier number that identifies the data model |
  |                | of the reported record.                          |
  |                |                                                  |
  | Source         | The Source Identifier number associated with the |
  | Identification | source for the software installation inventory   |
  | Number         | instance that this event record reported.        |
  |                |                                                  |






Schmidt, et al.              Standards Track                   [Page 61]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  | Action         | The type of event that is recorded in this event |
  |                | record.  Possible values are as follows: 1 =     |
  |                | CREATION - the addition of a record to the       |
  |                | endpoint's Software Inventory Evidence           |
  |                | Collection; 2 = DELETION - the removal of a      |
  |                | record from the endpoint's Software Inventory    |
  |                | Evidence Collection; 3 = ALTERATION - an         |
  |                | alteration that was made to a record within the  |
  |                | endpoint's Software Inventory Evidence           |
  |                | Collection.  All other values are reserved for   |
  |                | future use and MUST NOT be used when sending     |
  |                | attributes.  In the case where a SWIMA-PV        |
  |                | receives an event record that uses an action     |
  |                | value other than the ones defined here, it MUST  |
  |                | ignore that event record but SHOULD process      |
  |                | other event records in this attribute as normal. |
  |                |                                                  |
  | Software       | A 2-byte unsigned integer indicating the length, |
  | Identifier     | in bytes, of the Software Identifier field.      |
  | Length         |                                                  |
  |                |                                                  |
  | Software       | A string containing the Software Identifier      |
  | Identifier     | value from a Software Inventory Evidence Record. |
  |                | This field value MUST first be normalized to     |
  |                | Network Unicode format, as described in          |
  |                | Section 5.4.  This string MUST NOT be null       |
  |                | terminated.                                      |
  |                |                                                  |
  | Software       | A 2-byte unsigned integer indicating the length, |
  | Locator Length | in bytes, of the Software Locator field.         |
  |                |                                                  |
  | Software       | A string containing the Software Locator value.  |
  | Locator        | This field value MUST first be normalized to     |
  |                | Network Unicode format, as described in          |
  |                | Section 5.4, and then encoded as a URI           |
  |                | [RFC3986].  This string MUST NOT be null         |
  |                | terminated.                                      |
  +----------------+--------------------------------------------------+

          Table 4: Software Identifier Events Attribute Fields

  The first few fields in the Software Identifier Events attribute
  mirror those in the Software Identifier Inventory attribute.  The
  primary difference is that instead of conveying an inventory the
  attribute conveys zero or more event records, consisting of the EID,
  Timestamp, Record Identifier, Data Model Type PEN, Data Model Type,





Schmidt, et al.              Standards Track                   [Page 62]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  Source Identification Number, Action, Software Identifier Length,
  Software Identifier, Software Locator Length, and Software Locator
  fields of the affected Software Inventory Evidence Record.

  With regard to the Timestamp field, it is important to note that
  clock skew between the SWIMA-PC and SWIMA-PV as well as between
  different SWIMA-PCs within an enterprise might make correlation of
  Timestamp values difficult.  This specification does not attempt to
  resolve clock skew issues, although other mechanisms (which are
  outside the scope of this specification) do exist to reduce the
  impact of clock skew and make the timestamp more useful for such
  correlation.  Instead, SWIMA uses the Timestamp value primarily as a
  means to indicate the amount of time between two events on a single
  endpoint.  For example, by taking the difference of the times for
  when a record was removed and then subsequently re-added, one can get
  an indication as to how long the system was without the given record
  (and thus without the associated software).  Since this will involve
  comparison of Timestamp values all originating on the same system,
  clock skew between the SWIMA-PC and SWIMA-PV is not an issue.
  However, if the SWIMA-PC's clock was adjusted between two recorded
  events, it is possible for such a calculation to lead to
  misunderstandings regarding the temporal distance between events.
  Users of this field need to be aware of the possibility for such
  occurrences.  In the case where the Timestamp values of two events
  appear to contradict the EID ordering of those events (i.e., the
  later EID has an earlier timestamp), the recipient MUST treat the EID
  ordering as correct.

  All events recorded in a Software Identifier Events attribute are
  required to be part of the same EID Epoch.  Specifically, all such
  reported events MUST have an EID that is from the same EID Epoch and
  that is the same as the EID Epoch of the Last EID and Last Consulted
  EID values.  The SWIMA-PC MUST NOT report events with EIDs from
  different EID Epochs.

  The Last Consulted EID field contains the EID of the last event
  record considered for inclusion in this attribute.  If this attribute
  contains a partial event set (as described in Section 3.7.5), this
  field value will be less than the Last EID value; if this attribute
  contains a complete event set, the Last EID and Last Consulted EID
  values are identical.

  If multiple events are sent in a Software Identifier Events
  attribute, the order in which they appear within the attribute is not
  significant.  The EIDs associated with them are used for ordering the
  indicated events appropriately.  Also note that a single software
  record might be reported multiple times in an attribute, such as if
  multiple events involving the associated record were being reported.



Schmidt, et al.              Standards Track                   [Page 63]

RFC 8412                    SWIMA for PA-TNC                   July 2018


5.9.  Software Inventory

  A SWIMA-PC sends this attribute to a SWIMA-PV to convey a list of
  inventory records.  A SWIMA-PV MUST NOT send this attribute.  The
  SWIMA-PC sends this attribute either (1) in fulfillment of an
  existing subscription where the establishing request has a Result
  Type of 0 and the Earliest EID is zero or (2) in direct response to a
  SWIMA Request attribute where the Result Type is 0 and the Earliest
  EID is zero.

                       1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  | Flags         |             Record Count                      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                Request ID Copy / Subscription ID              |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                            EID Epoch                          |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                            Last EID                           |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                                                               |
  |          SUB-BLOCK (Repeated "Record Count" times)            |
  |                                                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                 Figure 12: Software Inventory Attribute

                       1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                        Record Identifier                      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |           Data Model Type PEN                 |Data Model Type|
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  | Source Id Num |  Reserved     |   Software Identifier Length  |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |              Software Identifier (variable length)            |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |   Software Locator Length     |Software Locator (variable len)|
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                          Record Length                        |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                   Record (variable length)                    |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

            Figure 13: Software Inventory Attribute SUB-BLOCK




Schmidt, et al.              Standards Track                   [Page 64]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  +----------------+--------------------------------------------------+
  | Field          | Description                                      |
  +----------------+--------------------------------------------------+
  | Flags: Bit 0 - | In the case that this attribute is sent in       |
  | Subscription   | fulfillment of a subscription, this bit MUST be  |
  | Fulfillment    | set (1).  In the case that this attribute is a   |
  |                | direct response to a SWIMA Request, this bit     |
  |                | MUST be unset (0).                               |
  |                |                                                  |
  | Flags: Bits    | Reserved for future use.  This field MUST be set |
  | 1-7 - Reserved | to zero on transmission and ignored upon         |
  |                | reception.                                       |
  |                |                                                  |
  | Record Count   | The number of records that follow.  This field   |
  |                | is a 3-byte unsigned integer.  The Record        |
  |                | Identifier, Data Model Type PEN, Data Model      |
  |                | Type, Source Identification Number, Reserved,    |
  |                | Software Identifier Length, Software Identifier, |
  |                | Software Locator Length, Software Locator,       |
  |                | Record Length, and Record fields are repeated,   |
  |                | in order, the number of times indicated in this  |
  |                | field.  This field value MAY be 0, in which case |
  |                | there are no instances of these fields.          |
  |                |                                                  |
  | Request ID     | In the case where this attribute is in direct    |
  | Copy /         | response to a SWIMA Request attribute from a     |
  | Subscription   | SWIMA-PV, this field MUST contain an exact copy  |
  | ID             | of the Request ID field from that SWIMA Request. |
  |                | In the case where this attribute is sent in      |
  |                | fulfillment of an active subscription, this      |
  |                | field MUST contain the Subscription ID of the    |
  |                | subscription being fulfilled by this attribute.  |
  |                |                                                  |
  | EID Epoch      | The EID Epoch of the Last EID value.  This field |
  |                | is a 4-byte unsigned integer.                    |
  |                |                                                  |
  | Last EID       | The EID of the last event recorded by the        |
  |                | SWIMA-PC, or 0 if the SWIMA-PC has no recorded   |
  |                | events.  This field is a 4-byte unsigned         |
  |                | integer.                                         |
  |                |                                                  |
  | Record         | A 4-byte unsigned integer containing the Record  |
  | Identifier     | Identifier value from a Software Inventory       |
  |                | Evidence Record.                                 |
  |                |                                                  |






Schmidt, et al.              Standards Track                   [Page 65]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  | Data Model     | A 3-byte unsigned integer containing the PEN of  |
  | Type PEN       | the organization that assigned the meaning of    |
  |                | the Data Model Type value.                       |
  |                |                                                  |
  | Data Model     | A 1-byte unsigned integer containing an          |
  | Type           | identifier number that identifies the data model |
  |                | of the reported record.                          |
  |                |                                                  |
  | Source         | The Source Identifier number associated with the |
  | Identification | source from which this software installation     |
  | Number         | inventory instance was reported.                 |
  |                |                                                  |
  | Reserved       | Reserved for future use.  This field MUST be set |
  |                | to zero on transmission and ignored upon         |
  |                | reception.                                       |
  |                |                                                  |
  | Software       | A 2-byte unsigned integer indicating the length, |
  | Identifier     | in bytes, of the Software Identifier field.      |
  | Length         |                                                  |
  |                |                                                  |
  | Software       | A string containing the Software Identifier      |
  | Identifier     | value from a Software Inventory Evidence Record. |
  |                | This field value MUST first be normalized to     |
  |                | Network Unicode format, as described in          |
  |                | Section 5.4.  This string MUST NOT be null       |
  |                | terminated.                                      |
  |                |                                                  |
  | Software       | A 2-byte unsigned integer indicating the length, |
  | Locator Length | in bytes, of the Software Locator field.         |
  |                |                                                  |
  | Software       | A string containing the Software Locator value.  |
  | Locator        | This field value MUST first be normalized to     |
  |                | Network Unicode format, as described in          |
  |                | Section 5.4, and then encoded as a URI           |
  |                | [RFC3986].  This string MUST NOT be null         |
  |                | terminated.                                      |
  |                |                                                  |
  | Record Length  | A 4-byte unsigned integer indicating the length, |
  |                | in bytes, of the Record field.                   |
  |                |                                                  |
  | Record         | A Software Inventory Evidence Record expressed   |
  |                | as a string.  The record MUST be converted and   |
  |                | normalized to Network Unicode format, as         |
  |                | described in Section 5.4.  This string MUST NOT  |
  |                | be null terminated.                              |
  +----------------+--------------------------------------------------+

              Table 5: Software Inventory Attribute Fields



Schmidt, et al.              Standards Track                   [Page 66]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  The Software Inventory attribute contains some number of Software
  Inventory Evidence Records along with the core response attribute
  fields.  Given that the size of records can vary considerably, the
  length of this attribute is highly variable and, if transmitting a
  complete inventory, can be extremely large.  To avoid unnecessarily
  overburdening the network, enterprises might wish to constrain the
  use of Software Inventory attributes to targeted requests.

  When copying a Software Inventory Evidence Record into the Record
  field, the record MUST be converted and normalized to use Network
  Unicode format prior to its inclusion in the Record field.

5.10.  Software Events

  A SWIMA-PC sends this attribute to a SWIMA-PV to convey a list of
  events that include Software Inventory Evidence Records.  A SWIMA-PV
  MUST NOT send this attribute.  The SWIMA-PC sends this attribute
  either (1) in fulfillment of an existing subscription where the
  establishing request has a Result Type of 0 and the Earliest EID is
  non-zero or (2) in direct response to a SWIMA Request attribute where
  the Result Type is 0 and the Earliest EID is non-zero.

                       1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |   Flags       |                  Event Count                  |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |               Request ID Copy / Subscription ID               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                           EID Epoch                           |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                           Last EID                            |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                       Last Consulted EID                      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                                                               |
  |             SUB-BLOCK (Repeated "Event Count" times)          |
  |                                                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                  Figure 14: Software Events Attribute










Schmidt, et al.              Standards Track                   [Page 67]

RFC 8412                    SWIMA for PA-TNC                   July 2018


                       1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                             EID                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                                                               |
  +-                                                             -+
  |                                                               |
  +-                                                             -+
  |                         Timestamp                             |
  +-                                                             -+
  |                                                               |
  +-                                                             -+
  |                                                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                       Record Identifier                       |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |           Data Model Type PEN                 |Data Model Type|
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  | Source Id Num |  Action       |   Software Identifier Length  |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |              Software Identifier (variable length)            |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |   Software Locator Length     |Software Locator (variable len)|
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                        Record Length                          |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                  Record (variable length)                     |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

             Figure 15: Software Events Attribute SUB-BLOCK




















Schmidt, et al.              Standards Track                   [Page 68]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  +----------------+--------------------------------------------------+
  | Field          | Description                                      |
  +----------------+--------------------------------------------------+
  | Flags: Bit 0 - | In the case that this attribute is sent in       |
  | Subscription   | fulfillment of a subscription, this bit MUST be  |
  | Fulfillment    | set (1).  In the case that this attribute is a   |
  |                | direct response to a SWIMA Request, this bit     |
  |                | MUST be unset (0).                               |
  |                |                                                  |
  | Flags: Bits    | Reserved for future use.  This field MUST be set |
  | 1-7 - Reserved | to zero on transmission and ignored upon         |
  |                | reception.                                       |
  |                |                                                  |
  | Event Count    | The number of events being reported in this      |
  |                | attribute.  This field is a 3-byte unsigned      |
  |                | integer.  The EID, Timestamp, Record Identifier, |
  |                | Data Model Type PEN, Data Model Type, Source     |
  |                | Identification Number, Action, Software          |
  |                | Identifier Length, Software Identifier, Software |
  |                | Locator Length, Software Locator, Record Length, |
  |                | and Record fields are repeated, in order, the    |
  |                | number of times indicated in this field.  This   |
  |                | field value MAY be 0, in which case there are no |
  |                | instances of these fields.                       |
  |                |                                                  |
  | Request ID     | In the case where this attribute is in direct    |
  | Copy /         | response to a SWIMA Request attribute from a     |
  | Subscription   | SWIMA-PV, this field MUST contain an exact copy  |
  | ID             | of the Request ID field from that SWIMA Request. |
  |                | In the case where this attribute is sent in      |
  |                | fulfillment of an active subscription, this      |
  |                | field MUST contain the Subscription ID of the    |
  |                | subscription being fulfilled by this attribute.  |
  |                |                                                  |
  | EID Epoch      | The EID Epoch of the Last EID value.  This field |
  |                | is a 4-byte unsigned integer.                    |
  |                |                                                  |
  | Last EID       | The EID of the last event recorded by the        |
  |                | SWIMA-PC, or 0 if the SWIMA-PC has no recorded   |
  |                | events.  This field contains the EID of the      |
  |                | SWIMA-PC's last recorded change event (which     |
  |                | might or might not be included as an event       |
  |                | record in this attribute).                       |
  |                |                                                  |







Schmidt, et al.              Standards Track                   [Page 69]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  | Last Consulted | The EID of the last event record that was        |
  | EID            | consulted when generating the event record list  |
  |                | included in this attribute.  This is different   |
  |                | from the Last EID field value if and only if     |
  |                | this attribute is conveying a partial list of    |
  |                | event records.  See Section 3.7.5 for more on    |
  |                | partial lists of event records.                  |
  |                |                                                  |
  | EID            | The EID of the event in this event record.       |
  |                |                                                  |
  | Timestamp      | The timestamp associated with the event in this  |
  |                | event record.  This timestamp is the SWIMA-PC's  |
  |                | best understanding of when the given event       |
  |                | occurred.  Note that this timestamp might be an  |
  |                | estimate.  The Timestamp date and time MUST be   |
  |                | represented as an ASCII string that is expressed |
  |                | in Coordinated Universal Time (UTC) and is       |
  |                | compliant with RFC 3339 [RFC3339], with the      |
  |                | additional restrictions that the 'T' delimiter   |
  |                | and the 'Z' suffix MUST be capitalized and       |
  |                | fractional seconds (time-secfrac) MUST NOT be    |
  |                | included.  This field conforms to the date-time  |
  |                | ABNF production from Section 5.6 of RFC 3339,    |
  |                | with the above restrictions.  Leap seconds are   |
  |                | permitted, and SWIMA-PVs MUST support them.  The |
  |                | Timestamp string MUST NOT be null terminated or  |
  |                | padded in any way.  The length of this field is  |
  |                | always 20 octets.                                |
  |                |                                                  |
  | Record         | A 4-byte unsigned integer containing the Record  |
  | Identifier     | Identifier value from a Software Inventory       |
  |                | Evidence Record.                                 |
  |                |                                                  |
  | Data Model     | A 3-byte unsigned integer containing the PEN of  |
  | Type PEN       | the organization that assigned the meaning of    |
  |                | the Data Model Type value.                       |
  |                |                                                  |
  | Data Model     | A 1-byte unsigned integer containing an          |
  | Type           | identifier number that identifies the data model |
  |                | of the reported record.                          |
  |                |                                                  |
  | Source         | The Source Identifier number associated with the |
  | Identification | source for the software installation inventory   |
  | Number         | instance that this event record reported.        |
  |                |                                                  |






Schmidt, et al.              Standards Track                   [Page 70]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  | Action         | The type of event that is recorded in this event |
  |                | record.  Possible values are as follows: 1 =     |
  |                | CREATION - the addition of a record to the       |
  |                | endpoint's Software Inventory Evidence           |
  |                | Collection; 2 = DELETION - the removal of a      |
  |                | record from the endpoint's Software Inventory    |
  |                | Evidence Collection; 3 = ALTERATION - an         |
  |                | alteration that was made to a record within the  |
  |                | endpoint's Software Inventory Evidence           |
  |                | Collection.  All other values are reserved for   |
  |                | future use and MUST NOT be used when sending     |
  |                | attributes.  In the case where a SWIMA-PV        |
  |                | receives an event record that uses an action     |
  |                | value other than the ones defined here, it MUST  |
  |                | ignore that event record but SHOULD process      |
  |                | other event records in this attribute as normal. |
  |                |                                                  |
  | Software       | A 2-byte unsigned integer indicating the length, |
  | Identifier     | in bytes, of the Software Identifier field.      |
  | Length         |                                                  |
  |                |                                                  |
  | Software       | A string containing the Software Identifier      |
  | Identifier     | value from a Software Inventory Evidence Record. |
  |                | This field value MUST first be normalized to     |
  |                | Network Unicode format, as described in          |
  |                | Section 5.4.  This string MUST NOT be null       |
  |                | terminated.                                      |
  |                |                                                  |
  | Software       | A 2-byte unsigned integer indicating the length, |
  | Locator Length | in bytes, of the Software Locator field.         |
  |                |                                                  |
  | Software       | A string containing the Software Locator value.  |
  | Locator        | This field value MUST first be normalized to     |
  |                | Network Unicode format, as described in          |
  |                | Section 5.4, and then encoded as a URI           |
  |                | [RFC3986].  This string MUST NOT be null         |
  |                | terminated.                                      |
  |                |                                                  |













Schmidt, et al.              Standards Track                   [Page 71]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  | Record Length  | A 4-byte unsigned integer indicating the length, |
  |                | in bytes, of the Record field.                   |
  |                |                                                  |
  | Record         | A Software Inventory Evidence Record expressed   |
  |                | as a string.  The record MUST be converted and   |
  |                | normalized to Network Unicode format, as         |
  |                | described in Section 5.4.  This string MUST NOT  |
  |                | be null terminated.                              |
  +----------------+--------------------------------------------------+

                Table 6: Software Events Attribute Fields

  The fields of this attribute are used in the same way as the
  corresponding fields of the previous attributes.  As with the
  Software Inventory attribute, a Software Events attribute can be
  quite large if many events have occurred following the event
  indicated by a request's Earliest EID.  As such, it is recommended
  that the SWIMA Request attributes only request that full records be
  sent (Result Type set to zero) in a targeted request, thus
  constraining the response just to records that match a given set of
  Software Identifiers.

  As with the Software Identifier Events attribute, this attribute MUST
  only contain event records with EIDs coming from the current EID
  Epoch of the SWIMA-PC.

  As with the Software Inventory attribute, the SWIMA-PC MUST perform
  conversion and normalization of the record.

5.11.  Subscription Status Request

  A SWIMA-PV sends this attribute to a SWIMA-PC to request a list of
  active subscriptions for which the requesting SWIMA-PV is the
  subscriber.  A SWIMA-PC MUST NOT send this attribute.

  This attribute has no fields.

  A SWIMA-PC MUST respond to this attribute by sending a Subscription
  Status Response attribute (or a PA-TNC Error attribute if it is
  unable to correctly provide a response).











Schmidt, et al.              Standards Track                   [Page 72]

RFC 8412                    SWIMA for PA-TNC                   July 2018


5.12.  Subscription Status Response

  A SWIMA-PC sends this attribute to a SWIMA-PV to report the list of
  active subscriptions for which the receiving SWIMA-PV is the
  subscriber.  A SWIMA-PV MUST NOT send this attribute.

                       1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  | Status Flags  |            Subscription Record Count          |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                                                               |
  |    SUB-BLOCK (Repeated "Subscription Record Count" times)     |
  |                                                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

            Figure 16: Subscription Status Response Attribute

                       1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  | Flags         |          Software Identifier Count            |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                          Request ID                           |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                         Earliest EID                          |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                                                               |
  |  SUB-SUB-BLOCK (Repeated "Software Identifier Count" times)   |
  |                                                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

       Figure 17: Subscription Status Response Attribute SUB-BLOCK

                       1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |  Software Identifier Length   | Software Identifier (var len) |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

     Figure 18: Subscription Status Response Attribute SUB-SUB-BLOCK










Schmidt, et al.              Standards Track                   [Page 73]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  +--------------+----------------------------------------------------+
  | Field        | Description                                        |
  +--------------+----------------------------------------------------+
  | Status       | Reserved for future use.  This field MUST be set   |
  | Flags: Bits  | to zero on transmission and ignored upon           |
  | 0-7 -        | reception.                                         |
  | Reserved     |                                                    |
  |              |                                                    |
  | Subscription | The number of subscription records that follow.    |
  | Record Count | This field is a 3-byte unsigned integer.  The      |
  |              | Flags, Software Identifier Count, Request ID, and  |
  |              | Earliest EID fields, and zero or more instances of |
  |              | Software Identifier Length and Software            |
  |              | Identifier, are repeated, in order, the number of  |
  |              | times indicated in this field.  (The Software      |
  |              | Identifier Length and Software Identifier fields   |
  |              | within each of these sets of fields are repeated a |
  |              | number of times equal to the preceding Software    |
  |              | Identifier Count value.)  The Subscription Record  |
  |              | Count field value MAY be 0, in which case there    |
  |              | are no instances of these fields.                  |
  |              |                                                    |
  | Flags,       | For each active subscription, these fields contain |
  | Software     | an exact copy of the fields with the corresponding |
  | Identifier   | name provided in the subscription's establishing   |
  | Count,       | request.                                           |
  | Request ID,  |                                                    |
  | Earliest     |                                                    |
  | EID,         |                                                    |
  | Software     |                                                    |
  | Identifier   |                                                    |
  | Length, and  |                                                    |
  | Software     |                                                    |
  | Identifier   |                                                    |
  +--------------+----------------------------------------------------+

              Table 7: Subscription Status Response Fields

  A Subscription Status Response contains zero or more subscription
  records.  Specifically, it MUST contain one subscription record for
  each active subscription associated with the party that sent the
  Subscription Status Request to which this attribute is a response.
  As described in Section 3.8.2, the SWIMA-PC MUST use the requester's
  Connection ID and its Posture Validator Identifier to determine which
  subscriptions are associated with the requester.






Schmidt, et al.              Standards Track                   [Page 74]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  A SWIMA-PC MUST send a Subscription Status Response attribute in
  response to a Subscription Status Request attribute, except in cases
  where the SWIMA-PC experiences an error condition that prevents it
  from correctly populating the Subscription Status Response attribute
  (in which case it MUST respond with a PA-TNC Error attribute
  appropriate to the type of error experienced).  If there are no
  active subscriptions associated with the requesting party, the
  Subscription Status Response attribute will consist only of its
  Status Flags field and a Subscription Record Count field with a value
  of 0, and no additional fields.

  Each subscription record included in a Subscription Status Response
  attribute duplicates the fields of the SWIMA Request attribute that
  was the establishing request of a subscription.  Note that the
  Request ID field in the record captures the Subscription ID
  associated with the given subscription record (since the Subscription
  ID is the same as the Request ID of the establishing request).  Note
  also that if the establishing request is targeted, then its Record
  Count field will be non-zero and, within that subscription record,
  the Software Identifier Length and Software Identifier fields are
  repeated, in order, the number of times indicated in the Record Count
  field.  As such, each subscription record can be different sizes.  If
  the establishing request is not targeted (Record Count field is 0),
  the subscription record has no Software Identifier Length or Software
  Identifier fields.

  When a SWIMA-PV compares the information received in a Subscription
  Status Response to its own records of active subscriptions, it should
  be aware that the SWIMA-PC might be unable to distinguish this
  SWIMA-PV from other SWIMA-PVs on the same NEA Server.  As a result,
  it is possible that the SWIMA-PC will report more subscription
  records than the SWIMA-PV recognizes.  For this reason, SWIMA-PVs
  SHOULD NOT automatically assume that extra subscriptions reported in
  a Subscription Status Response indicate a problem.

5.13.  Source Metadata Request

  A SWIMA-PV sends this attribute to a SWIMA-PC to request metadata
  about sources that the SWIMA-PC is using to collect software
  inventory information.  A SWIMA-PC MUST NOT send this attribute.

  This attribute has no fields.

  A SWIMA-PC MUST respond to this attribute by sending a Source
  Metadata Response attribute (or a PA-TNC Error attribute if it is
  unable to correctly provide a response).





Schmidt, et al.              Standards Track                   [Page 75]

RFC 8412                    SWIMA for PA-TNC                   July 2018


5.14.  Source Metadata Response

  A SWIMA-PC sends this attribute to a SWIMA-PV to provide descriptive
  metadata about the sources of software inventory information used by
  the SWIMA-PC.  A SWIMA-PV MUST NOT send this attribute.

                       1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |           Reserved            | Source Count  |               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+               |
  |                                                               |
  |           SUB-BLOCK (Repeated "Source Count" times)           |
  |                                                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

              Figure 19: Source Metadata Response Attribute

                       1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  | Source Id Num |       Metadata Length         | Metadata (var)|
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

         Figure 20: Source Metadata Response Attribute SUB-BLOCK


























Schmidt, et al.              Standards Track                   [Page 76]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  +----------------+--------------------------------------------------+
  | Field          | Description                                      |
  +----------------+--------------------------------------------------+
  | Reserved       | Reserved for future use.  This field MUST be set |
  |                | to zero on transmission and ignored upon         |
  |                | reception.                                       |
  |                |                                                  |
  | Source Count   | The number of source records that follow.  The   |
  |                | Source Identification Number, Metadata Length,   |
  |                | and Metadata fields are repeated, in order, the  |
  |                | number of times indicated by this field.  This   |
  |                | field MAY be 0, in which case no fields follow   |
  |                | (but this would only be done to indicate that    |
  |                | the SWIMA-PC has no active sources; this would   |
  |                | not be a typical situation).                     |
  |                |                                                  |
  | Source         | The Source Identifier number associated with the |
  | Identification | described source for any communications with the |
  | Number         | recipient SWIMA-PV.                              |
  |                |                                                  |
  | Metadata       | A 2-byte unsigned integer indicating the length, |
  | Length         | in bytes, of the Metadata field.                 |
  |                |                                                  |
  | Metadata       | A string containing descriptive metadata about   |
  |                | the indicated data source.  This string MUST NOT |
  |                | be null terminated.                              |
  +----------------+--------------------------------------------------+

                Table 8: Source Metadata Response Fields

  A Source Metadata Response attribute contains zero or more records,
  each describing one of the data sources the SWIMA-PC uses to collect
  software inventory information.  It SHOULD contain one metadata
  record for each source that the SWIMA-PC uses.  (There might be
  reasons not to inform certain SWIMA-PVs of the presence of certain
  data sources.)  The attribute MUST contain a metadata record for each
  source that has been identified in inventory or event messages to the
  given SWIMA-PV.

  A SWIMA-PC MUST send a Source Metadata Response attribute in response
  to a Source Metadata Request attribute, except in cases where the
  SWIMA-PC experiences an error condition that prevents it from
  correctly populating the Source Metadata Response attribute (in which
  case it MUST respond with a PA-TNC Error attribute appropriate to the
  type of error experienced).






Schmidt, et al.              Standards Track                   [Page 77]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  The Source Count field indicates how many source metadata records are
  included in the attribute.  Each included record consists of a Source
  Identification Number field, a Metadata Length field, and a Metadata
  field.

  The Source Identification Number field in the Source Metadata
  Response attribute corresponds to the Source Identification Number
  field in inventory and event messages.  In the case where (1) the
  Source Identification Number value in this attribute matches a Source
  Identification Number field in an inventory or event record and
  (2) both the Source Metadata Response and the inventory or event
  record were sent to the same SWIMA-PV, the source described in the
  Metadata field MUST be the same source that provided the inventory or
  event record associated with this Source Identifier.  Recall that a
  SWIMA-PC MAY use different Source Identification Number associations
  with different SWIMA-PVs.  As such, the association between a Source
  Identification Number and the conveyed metadata is also only
  meaningful for communications between the sending SWIMA-PC and
  receiving SWIMA-PV.  When sending to a given SWIMA-PV, the SWIMA-PC
  MUST use the recipient SWIMA-PV's Source Identification Number
  associations.

  The Metadata Length field indicates the length, in bytes, of the
  Metadata field.  The Metadata field contains information about the
  indicated data source.  This specification does not dictate a format
  for the contents of the Metadata field.  This field MAY include
  machine-readable information.  For broadest utility, the Metadata
  field SHOULD include human-readable, descriptive information about
  the data source.

5.15.  PA-TNC Error as Used by SWIMA

  The PA-TNC Error attribute is defined in the PA-TNC specification
  [RFC5792], and its use here conforms to that specification.  A PA-TNC
  Error can be sent due to any error in the PA-TNC exchange and might
  also be sent in response to error conditions specific to the SWIMA
  exchange.  The latter case utilizes error codes defined below.

  A PA-TNC Error MUST be sent by a SWIMA-PC in response to a SWIMA
  Request in the case where the SWIMA-PC encounters a fatal error
  (i.e., an error that prevents further processing of an exchange)
  relating to the attribute exchange.  A SWIMA-PV MUST NOT send this
  attribute.  In the case where the SWIMA-PV experiences a fatal error,
  it MUST handle the error without sending a PA-TNC Error attribute.
  The SWIMA-PV MAY take other actions in response to the error, such as
  logging the cause of the error or even taking actions to isolate the
  endpoint.




Schmidt, et al.              Standards Track                   [Page 78]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  A PA-TNC Error attribute is sent instead of a SWIMA Response
  attribute when certain issues prevent the reliable creation of a
  SWIMA Response.  As such, a SWIMA-PC MUST NOT send both a PA-TNC
  Error attribute and a SWIMA Response attribute in response to a
  single SWIMA Request attribute.

  Table 9 lists the error code values for the PA-TNC Error attribute
  that are specific to the SWIMA exchange.  Error codes are shown in
  both hexadecimal and decimal format.  In all of these cases, the
  Error Code Vendor ID field MUST be set to 0x000000, corresponding to
  the IETF SMI PEN.  The error information structures for each error
  code are described in the following subsections.

  Note that a message with a SWIMA attribute might also result in an
  error condition covered by the IETF Standard PA-TNC Error Codes
  defined in Section 4.2.8 of [RFC5792].  For example, a SWIMA
  attribute might have an invalid parameter, leading to an error code
  of "Invalid Parameter".  In this case, the SWIMA-PC MUST use the
  appropriate PA-TNC Error Code value as defined in Section 4.2.8 of
  [RFC5792].































Schmidt, et al.              Standards Track                   [Page 79]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  +----------------+--------------------------------------------------+
  | Error Code     | Description                                      |
  | Value          |                                                  |
  +----------------+--------------------------------------------------+
  | 0x00000004 (4) | SWIMA_ERROR.  This indicates a fatal error       |
  |                | (i.e., an error that precludes the creation of a |
  |                | suitable response attribute) other than the      |
  |                | errors described below but still specific to the |
  |                | processing of SWIMA attributes.  The Description |
  |                | field SHOULD contain additional diagnostic       |
  |                | information.                                     |
  |                |                                                  |
  | 0x00000005 (5) | SWIMA_SUBSCRIPTION_DENIED_ERROR.  This indicates |
  |                | that the SWIMA-PC denied the SWIMA-PV's request  |
  |                | to establish a subscription.  The Description    |
  |                | field SHOULD contain additional diagnostic       |
  |                | information.                                     |
  |                |                                                  |
  | 0x00000006 (6) | SWIMA_RESPONSE_TOO_LARGE_ERROR.  This indicates  |
  |                | that the SWIMA-PC's response to the SWIMA-PV's   |
  |                | request was too large to be serviced.  The error |
  |                | information structure indicates the largest      |
  |                | possible size of a response supported by the     |
  |                | SWIMA-PC (see Section 5.15.2).  The Description  |
  |                | field SHOULD contain additional diagnostic       |
  |                | information.                                     |
  |                |                                                  |
  | 0x00000007 (7) | SWIMA_SUBSCRIPTION_FULFILLMENT_ERROR.  This      |
  |                | indicates that the SWIMA-PC experienced an error |
  |                | while fulfilling a given subscription.  The      |
  |                | error information includes the Subscription ID   |
  |                | of the relevant subscription, as well as a       |
  |                | sub-error that describes the nature of the error |
  |                | the SWIMA-PC experienced.  The SWIMA-PC and      |
  |                | SWIMA-PV MUST treat the identified subscription  |
  |                | as cancelled.                                    |
  |                |                                                  |
  | 0x00000008 (8) | SWIMA_SUBSCRIPTION_ID_REUSE_ERROR.  This         |
  |                | indicates that the SWIMA-PC received a SWIMA     |
  |                | Request from a given SWIMA-PV where the Request  |
  |                | ID of that SWIMA Request is currently used as    |
  |                | the Subscription ID of an active subscription    |
  |                | with that SWIMA-PV.  This error does not cancel  |
  |                | the identified subscription.                     |
  +----------------+--------------------------------------------------+

                  Table 9: PA-TNC Error Codes for SWIMA




Schmidt, et al.              Standards Track                   [Page 80]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  The following subsections describe the structures present in the
  error information fields.  Note that all error structures include a
  variable-length field but do not include any fields indicating the
  length of those fields.  A length field is unnecessary because all
  other fields in the PA-TNC Error attribute are of fixed length, and
  thus the length of the variable-length field can be found by
  subtracting the size of these fixed-length fields from the PA-TNC
  Attribute Length field in the PA-TNC Attribute Header.

5.15.1.  SWIMA_ERROR, SWIMA_SUBSCRIPTION_DENIED_ERROR, and
        SWIMA_SUBSCRIPTION_ID_REUSE_ERROR Information

  The SWIMA_ERROR error code indicates that the sender (the SWIMA-PC)
  has encountered an error that is related to the processing of a SWIMA
  Request attribute but that is not covered by SWIMA error codes that
  are more specific.  The SWIMA_SUBSCRIPTION_DENIED_ERROR is used when
  the SWIMA-PV sends a request to establish a subscription or clear all
  subscriptions from the given SWIMA-PV but the SWIMA-PC is unable or
  unwilling to comply with this request.  The
  SWIMA_SUBSCRIPTION_ID_REUSE_ERROR is used when the SWIMA-PC receives
  a SWIMA Request whose Request ID duplicates a Subscription ID of an
  active subscription with the request's sender.  All of these error
  codes use the following error information structure.

                       1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |            Copy of Request ID / Subscription ID               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                Description (variable length)                  |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

      Figure 21: SWIMA_ERROR, SWIMA_SUBSCRIPTION_DENIED_ERROR, and
              SWIMA_SUBSCRIPTION_ID_REUSE_ERROR Information

















Schmidt, et al.              Standards Track                   [Page 81]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  +--------------+----------------------------------------------------+
  | Field        | Description                                        |
  +--------------+----------------------------------------------------+
  | Copy of      | In the case that this error condition is generated |
  | Request ID / | in direct response to a SWIMA Request attribute,   |
  | Subscription | this field MUST contain an exact copy of the       |
  | ID           | Request ID field in the SWIMA Request attribute    |
  |              | that caused this error.  In the case that the      |
  |              | attribute in question is generated in fulfillment  |
  |              | of an active subscription, this field MUST contain |
  |              | the Subscription ID of the subscription for which  |
  |              | the attribute was generated.  (This is only        |
  |              | possible if the error code is SWIMA_ERROR, as the  |
  |              | other errors are not generated by subscription     |
  |              | fulfillment.)  Note that in the case of failed     |
  |              | subscription fulfillment, the indicated error      |
  |              | appears as a sub-error for a                       |
  |              | SWIMA_SUBSCRIPTION_FULFILLMENT_ERROR, as described |
  |              | in Section 5.15.3.                                 |
  |              |                                                    |
  | Description  | A UTF-8 [RFC3629] string describing the condition  |
  |              | that caused this error.  This field MAY be zero-   |
  |              | length.  However, senders SHOULD include some kind |
  |              | of description in all PA-TNC Error attributes with |
  |              | these error codes.  This field MUST NOT be null    |
  |              | terminated.                                        |
  +--------------+----------------------------------------------------+

       Table 10: SWIMA_ERROR, SWIMA_SUBSCRIPTION_DENIED_ERROR, and
          SWIMA_SUBSCRIPTION_ID_REUSE_ERROR Information Fields

  This error information structure is used with SWIMA_ERROR,
  SWIMA_SUBSCRIPTION_DENIED_ERROR, and
  SWIMA_SUBSCRIPTION_ID_REUSE_ERROR status codes to identify the SWIMA
  Request attribute that precipitated the error condition and to
  describe the error.  The Description field contains text describing
  the error.  The SWIMA-PC MAY encode machine-interpretable information
  in this field but SHOULD also include a human-readable description of
  the error, since the receiving SWIMA-PV might not recognize the
  SWIMA-PC's encoded information.











Schmidt, et al.              Standards Track                   [Page 82]

RFC 8412                    SWIMA for PA-TNC                   July 2018


5.15.2.  SWIMA_RESPONSE_TOO_LARGE_ERROR Information

  The SWIMA_RESPONSE_TOO_LARGE_ERROR error code indicates that a
  SWIMA-PC's response to a SWIMA-PV's SWIMA Request attribute was too
  large to send.

                       1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |              Copy of Request ID / Subscription ID             |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                    Maximum Allowed Size                       |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                  Description (variable length)                |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

          Figure 22: SWIMA_RESPONSE_TOO_LARGE_ERROR Information


































Schmidt, et al.              Standards Track                   [Page 83]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  +--------------+----------------------------------------------------+
  | Field        | Description                                        |
  +--------------+----------------------------------------------------+
  | Copy of      | In the case that the attribute in question is      |
  | Request ID / | generated in direct response to a SWIMA Request,   |
  | Subscription | this field MUST contain an exact copy of the       |
  | ID           | Request ID field in the SWIMA Request attribute    |
  |              | that caused this error.  In the case that the      |
  |              | attribute in question is generated in fulfillment  |
  |              | of an active subscription, this field MUST contain |
  |              | the Subscription ID of the subscription for which  |
  |              | the attribute was generated.  Note that in the     |
  |              | latter case, the SWIMA_RESPONSE_TOO_LARGE_ERROR    |
  |              | appears as a sub-error for a                       |
  |              | SWIMA_SUBSCRIPTION_FULFILLMENT_ERROR, as described |
  |              | in Section 5.15.3.                                 |
  |              |                                                    |
  | Maximum      | This field MUST contain an unsigned integer        |
  | Allowed Size | indicating the largest permissible size, in bytes, |
  |              | of the SWIMA attribute that the SWIMA-PC is        |
  |              | currently willing to send in response to a SWIMA   |
  |              | Request attribute.                                 |
  |              |                                                    |
  | Description  | A UTF-8 [RFC3629] string describing the condition  |
  |              | that caused this error.  This field MAY be zero-   |
  |              | length.  However, senders SHOULD include some kind |
  |              | of description in all PA-TNC Error attributes with |
  |              | this error code.  This field MUST NOT be null      |
  |              | terminated.                                        |
  +--------------+----------------------------------------------------+

       Table 11: SWIMA_RESPONSE_TOO_LARGE_ERROR Information Fields

  This error structure is used with the SWIMA_RESPONSE_TOO_LARGE_ERROR
  status code to identify the SWIMA Request attribute that precipitated
  the error condition and to describe the error.  The Maximum Allowed
  Size field indicates the largest attribute the SWIMA-PC is willing to
  send in response to a SWIMA Request under the current circumstances.
  Note that under other circumstances, the SWIMA-PC might be willing to
  return larger or smaller responses than indicated (such as if the
  endpoint connects to the NEA Server using a different network
  protocol).  The other fields in this error information structure have
  the same meanings as corresponding fields in the SWIMA_ERROR and
  SWIMA_SUBSCRIPTION_DENIED_ERROR information structures.







Schmidt, et al.              Standards Track                   [Page 84]

RFC 8412                    SWIMA for PA-TNC                   July 2018


5.15.3.  SWIMA_SUBSCRIPTION_FULFILLMENT_ERROR Information

  The SWIMA_SUBSCRIPTION_FULFILLMENT_ERROR error code indicates that
  the SWIMA-PC encountered an error while fulfilling a subscription.
  The bytes after the first 4 octets duplicate a PA-TNC Error attribute
  (as described in Section 4.2.8 of PA-TNC [RFC5792]) that is used to
  identify the nature of the encountered error.

                       1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                        Subscription ID                        |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |    Reserved   |           Sub-error Code Vendor ID            |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                             Sub-error Code                    |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |           Sub-error Information (variable length)             |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

       Figure 23: SWIMA_SUBSCRIPTION_FULFILLMENT_ERROR Information






























Schmidt, et al.              Standards Track                   [Page 85]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  +--------------+----------------------------------------------------+
  | Field        | Description                                        |
  +--------------+----------------------------------------------------+
  | Subscription | This field MUST contain the Subscription ID of the |
  | ID           | subscription whose fulfillment caused this error.  |
  |              |                                                    |
  | Reserved     | This field MUST contain the value of the Reserved  |
  |              | field of a PA-TNC Error attribute that describes   |
  |              | the error condition encountered during             |
  |              | subscription processing.                           |
  |              |                                                    |
  | Sub-error    | This field MUST contain the value of the Error     |
  | Code Vendor  | Code Vendor ID field of a PA-TNC Error attribute   |
  | ID           | that describes the error condition encountered     |
  |              | during subscription processing.                    |
  |              |                                                    |
  | Sub-error    | This field MUST contain the value of the Error     |
  | Code         | Code field of a PA-TNC Error attribute that        |
  |              | describes the error condition encountered during   |
  |              | subscription processing.                           |
  |              |                                                    |
  | Sub-error    | This field MUST contain the value of the Error     |
  | Information  | Information field of a PA-TNC Error attribute that |
  |              | describes the error condition encountered during   |
  |              | subscription processing.                           |
  +--------------+----------------------------------------------------+

    Table 12: SWIMA_SUBSCRIPTION_FULFILLMENT_ERROR Information Fields

  This error structure is used with the
  SWIMA_SUBSCRIPTION_FULFILLMENT_ERROR status code.  The first 4 octets
  of this error structure contain the Subscription ID of the
  subscription that was being fulfilled when the error occurred.  The
  remaining fields of this error structure duplicate the fields of a
  PA-TNC Error attribute, referred to as the "sub-error".  The error
  code of the sub-error corresponds to the code of the error that the
  SWIMA-PC encountered while fulfilling the given subscription.  The
  sub-error MUST NOT have an error code of
  SWIMA_SUBSCRIPTION_FULFILLMENT_ERROR.

  The SWIMA-PC sending a PA-TNC Error attribute with this error code,
  and the SWIMA-PV receiving it, MUST treat the subscription identified
  by the Subscription ID field as cancelled.  All other subscriptions
  are unaffected.







Schmidt, et al.              Standards Track                   [Page 86]

RFC 8412                    SWIMA for PA-TNC                   July 2018


6.  Supported Data Models

  SWIMA supports an extensible list of data models for representing and
  transmitting software inventory information.  This list of data
  models appears in the "Software Data Model Types" registry (see
  Section 10.5).  This document provides guidance for an initial set of
  data models.  Other documents might provide guidance on the use of
  new data models by SWIMA and will be referenced by extensions to the
  "Software Data Model Types" registry.

6.1.  ISO 2015 SWID Tags Using XML

  The International Organization for Standardization and the
  International Electrotechnical Commission (ISO/IEC) published the
  specification governing SWID tag construction and use
  (ISO/IEC 19770-2:2009) in 2009 [SWID09], with a revised version of
  the specification (ISO/IEC 19770-2:2015) published in 2015 [SWID15].
  Since that time, a growing number of vendors have integrated SWID
  tags into their software products.  SWID tags significantly simplify
  the task of identifying pieces of software: instead of relying on
  discovery processes that look for clues as to software presence, such
  as the presence of particular files or registry keys, vendors can use
  a readily available list of SWID tags that provides simple and
  immediate evidence as to the presence of the given piece of software.

  SWIMA has no reliance on the presence or management of SWID tags on
  an endpoint as described in the ISO 2015 SWID tag specification.
  However, as presented in the ISO 2015 SWID tag specification, the
  data model for describing software provides a robust and
  comprehensive way of describing software and is adopted here as a
  means of representing and transmitting software information.  It
  should be emphasized that the use of the ISO SWID tag data model
  makes no assumption as to whether (1) the source of the recorded
  information was, in fact, an ISO SWID tag harvested from the endpoint
  or (2) the information was created using some other source and
  normalized to the SWID format.

6.1.1.  Guidance on Normalizing Source Data to ISO 2015 SWID Tags
       Using XML

  Any record associated with this Software Data Model Type MUST conform
  to [SWID15].

  If generating a new ISO 2015 SWID tag, the software generating the
  tag MUST use a Tag Creator RegID that is associated with the
  generating software, unless this is impossible, in which case it MUST
  use the "http://invalid.unavailable" Tag Creator RegID value.  (This
  conforms to conventions for an unknown tag creator in the ISO 2015



Schmidt, et al.              Standards Track                   [Page 87]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  SWID tag specification.)  Do not use a RegID associated with any
  other party.  In particular, it is incorrect to use a Tag Creator
  RegID associated with the software being described by the tag, the
  enterprise that is using the software, or any other entity except
  that of the party that built the tool that is generating the SWID
  tag.  This reflects the requirement that the Tag Creator RegID
  identify the party that created the tag.  Moreover, any generated
  tags SHOULD conform to guidance for tag creators as provided in
  NISTIR 8060 [NIST8060], which provides additional recommendations to
  increase interoperable use of SWID tags.

6.1.2.  Guidance on Creation of Software Identifiers from ISO 2015
       SWID Tags

  A Software Identifier generated from an ISO 2015 SWID tag is
  expressed as a concatenation of the value of the Tag Creator RegID
  field and the Unique ID field.  Specifically, (1) it MUST be of the
  form TAG_CREATOR_REGID "_" "_" UNIQUE_ID and (2) it consists of the
  Tag Creator RegID and the Unique ID from the tag connected with a
  double underscore (_), without any other connecting character or
  whitespace.

6.2.  ISO 2009 SWID Tags Using XML

  As noted above, ISO's SWID tag specification provides a useful data
  model for representation of software information.  As of the writing
  of this specification, while the ISO 2015 specification is considered
  more comprehensive and addresses some issues with the ISO 2009
  specification, 2009-format SWID tags remain far more common in
  deployments.  For this reason, ISO 2009 SWID tags are included in the
  "Software Data Model Types" registry.

6.2.1.  Guidance on Normalizing Source Data to ISO 2009 SWID Tags
       Using XML

  Any record associated with this Software Data Model Type MUST conform
  to [SWID09].  Any such tag SHOULD use a UTF-8 encoding [RFC3629] but
  MUST NOT alter the existing encoding if doing so would invalidate
  digital signatures included in the tag.

  If generating a new ISO 2009 SWID tag, the software generating the
  tag MUST use a Tag Creator RegID that is associated with the
  generating software, unless this is impossible, in which case it MUST
  use "unknown", which indicates that the tag creator is unknown.
  (This conforms to conventions for an unknown tag creator in the
  ISO 2009 SWID tag specification.)  Do not use a RegID associated with
  any other party.  In particular, it is incorrect to use a Tag Creator
  RegID associated with the software being described by the tag, the



Schmidt, et al.              Standards Track                   [Page 88]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  enterprise that is using the software, or any other entity except
  that of the party that built the tool that is generating the SWID
  tag.  This reflects the requirement that the Tag Creator RegID
  identify the party that created the tag.

6.2.2.  Guidance on Creation of Software Identifiers from ISO 2009
       SWID Tags

  A Software Identifier generated from an ISO 2009 SWID tag is
  expressed as a concatenation of the value of the Tag Creator RegID
  field and the Unique ID field.  Specifically, (1) it MUST be of the
  form TAG_CREATOR_REGID "_" "_" UNIQUE_ID and (2) it consists of the
  Tag Creator RegID and the Unique ID from the tag connected with a
  double underscore (_), without any other connecting character or
  whitespace.

7.  Relationship to Other Specifications

  This specification is expected to participate in a standard NEA
  architecture.  As such, it is expected to be used in conjunction with
  the other protocols used in a NEA exchange.  In particular, SWIMA
  attributes are conveyed over PB-TNC [RFC5793], which is in turn
  conveyed over some variant of PT (either PT-TLS [RFC6876] or PT-EAP
  [RFC7171]).  These protocols have an especially important role, as
  they are responsible for ensuring that attributes defined under this
  specification are delivered reliably, securely, and to the
  appropriate party.

  It is important to note that the Product Information, Numeric
  Version, and String Version attributes defined in the PA-TNC
  specification [RFC5792] are also meant to convey information about
  installed applications and the versions thereof.  As such, there is
  some conceptual overlap between those attributes and the intent of
  this specification.  However, PA-TNC was designed to respond to very
  specific queries about specific classes of products, while SWIMA is
  able to convey a broader query, resulting in a more comprehensive set
  of information regarding an endpoint's installed software.  As such,
  this specification provides important capabilities not present in the
  PA-TNC specification.

  The NEA architecture is intended to support a broad range of
  activities and, as such, might be employed by other specifications.
  For example, requirement T-001 in the SACM Requirements document
  [RFC8248] notes that NEA can support data collection from endpoints
  within the broader SACM architecture.  (Other parts of the NEA
  architecture, which SWIMA uses, meet the other SACM data transport
  requirements.)  In the SACM architecture, a SWIMA-PV corresponds to a
  "SACM Collector" and a SWIMA-PC corresponds to a "SACM Internal



Schmidt, et al.              Standards Track                   [Page 89]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  Collector".  In the SACM architecture, SWIMA can support activities
  relating to software inventory collection.  Specifically, SWIMA
  supports the SACM "Endpoint Posture Attribute Value Collection" use
  case (Section 2.1.3 in [RFC7632]) by describing a collection
  mechanism that enables event-driven, scheduled, and ad hoc data
  collection of software inventory information.  SWIMA's flexibility
  with regard to the format of inventory data records means that it is
  compatible with virtually any data format that implements SACM's
  "Define, Publish, Query, and Retrieve Security Automation Data" use
  case (Section 2.1.1 in [RFC7632]).  This is just one example of how
  SWIMA can support broader security solution standards.  Note that
  while SWIMA can support these SACM use cases, SWIMA has no
  dependencies on the SACM architecture or any other context in which
  NEA might reasonably be applied.

8.  Security Considerations

  This section discusses some of the security threats facing SWIMA-PCs
  and SWIMA-PVs.  This section primarily notes potential issues for
  implementers to consider, although it does contain a handful of
  normative requirements to address certain security issues.  The
  issues identified below focus on capabilities specific to this
  document.  Implementers are advised to consult other relevant NEA
  specifications, particularly [RFC5209] (the NEA architecture) and
  [RFC5792] (PA-TNC), for security issues that are applicable to such
  components in general.

8.1.  Evidentiary Value of Software Inventory Evidence Records

  The degree to which an endpoint's Software Inventory Evidence
  Collection accurately reflects the endpoint's actual software load
  and any changes made to this software load is dependent on the
  accuracy of the tools used to populate and manage the Software
  Inventory Evidence Records in this collection.  While the SWIMA-PC is
  required to detect changes to an endpoint's Software Inventory
  Evidence Collection in near real time, some tools might not be
  designed to update records in the Software Inventory Evidence
  Collection in real time.  This can result in a collection that is out
  of sync with actual system state.  Moreover, tools might inaccurately
  characterize software or fail to properly record its removal.
  Finally, it is likely that there will be software on the endpoint
  that is not tracked by any source and thus is not reflected in the
  Software Inventory Evidence Collection.  Tools that implement SWIMA
  ought to be aware of these potential issues and minimize them, but
  completely eliminating such issues is likely impossible.  Users of
  collected Software Inventory Evidence Records need to understand that
  the information provided by SWIMA cannot be treated as completely
  accurate.  Nonetheless, having endpoints report this information can



Schmidt, et al.              Standards Track                   [Page 90]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  still provide useful insights into the state of the endpoint's
  software load and can alert administrators and policy tools of
  situations that require remediation.

8.2.  Sensitivity of Collected Records

  Collected software records can be sensitive in nature.  This can
  include both security sensitivities and privacy sensitivities.
  Privacy sensitivities are discussed more in Section 9.  With regard
  to security, inventory records represent a wealth of information
  about the endpoint in question, and for an adversary who does not
  already have access to the endpoint a collection of the endpoint's
  inventory records might provide many details that are useful for
  mounting an attack.  A list of the inventory records associated with
  an endpoint reveals a list of software installed on the endpoint.
  This list can be very detailed, noting specific versions and even
  patch levels; an adversary can use this information to identify
  vulnerable software and design efficacious attacks.

  The following information might also be gleaned from a collection of
  software inventory records:

  o  An inventory record might include information about where the
     product was installed on a given endpoint.  This can reveal
     details about the file organization of that endpoint that an
     attacker can utilize.

  o  An inventory record might include information about how the
     software was provided to the endpoint, who in an organization
     signs off on the package release, and who packaged the product for
     installation.  This information might be used as a starting point
     for the development of supply chain attacks.

  o  Events affecting inventory records are reported with timestamps
     indicating when each given event occurred.  This can give the
     attacker an indication of how quickly an organization distributes
     patches and updates, helping the attacker determine how long an
     attack window might remain open.

  Any consolidated software inventory is a potential risk, because such
  an inventory can provide an adversary an insight into the
  enterprise's configuration and management process.  It is recommended
  that a centralized software inventory record collection be protected
  against unauthorized access.  Mechanisms to accomplish this can
  include encrypting the data at rest, ensuring that access to the data
  is limited only to authorized individuals and processes, and other
  basic security precautions.




Schmidt, et al.              Standards Track                   [Page 91]

RFC 8412                    SWIMA for PA-TNC                   July 2018


8.3.  Integrity of Endpoint Records

  SWIMA-PCs maintain records of detected changes to the endpoint's
  Software Inventory Evidence Collection.  These records are used to
  respond to a SWIMA-PV's request for change events.  The SWIMA-PV
  might use a list of reported events to update its understanding of
  the endpoint's Software Inventory Evidence Collection without needing
  to receive a full inventory report from the SWIMA-PC.  For this
  reason, preserving the integrity of the SWIMA-PC's record of events
  is extremely important.  If an attacker modifies the SWIMA-PC's
  record of changes to the endpoint's Software Inventory Evidence
  Collection, this might cause the SWIMA-PV's understanding of the
  endpoint's Software Inventory Evidence Collection to differ from its
  actual state.  The results of such an attack might include leading
  the SWIMA-PV to believe that (1) absent software was present or,
  conversely, that present software was absent or (2) patches have been
  installed even if this is not the case.  Such an attack could also
  cause the SWIMA-PV to be unaware of other changes to Software
  Inventory Evidence Records.  As such, the SWIMA-PC MUST take steps to
  protect the integrity of its event records.

  In addition, records of established SWIMA-PV subscriptions also
  require protection against manipulation or corruption.  If an
  attacker is able to modify or delete records of a SWIMA-PV's
  established subscription, the SWIMA-PC might fail to correctly
  fulfill this subscription.  The SWIMA-PV would not be aware that its
  subscription was not being correctly fulfilled unless it received
  additional information that indicated a discrepancy.  For example,
  the SWIMA-PV might collect a full inventory and realize from this
  information that certain events had not been correctly reported in
  accordance with an established subscription.  For this reason, the
  SWIMA-PC MUST protect the integrity of subscription records.

8.4.  SWIMA-PC Access Permissions

  A SWIMA-PC requires sufficient permissions to collect Software
  Inventory Evidence Records from all of its supported sources, as well
  as sufficient permissions to interact with the endpoint's Posture
  Broker Client.  With regard to the former, this might require
  permissions to read the contents of directories throughout the
  filesystem.  Depending on the operating environment and other
  activities undertaken by a SWIMA-PC (or software that incorporates a
  SWIMA-PC as one of its capabilities), additional permissions might be
  required by the SWIMA-PC software.  The SWIMA-PC SHOULD NOT be
  granted permissions beyond what it needs to fulfill its duties.






Schmidt, et al.              Standards Track                   [Page 92]

RFC 8412                    SWIMA for PA-TNC                   July 2018


8.5.  Sanitization of Record Fields

  Not all sources of software inventory evidence are necessarily
  tightly controlled.  For example, consider a source that gathers
  .swid files from the endpoint's filesystem.  Any party could create a
  new .swid file that could be collected and turned into a Software
  Inventory Evidence Record.  As a result, it is important that the
  contents of source information not be automatically trusted.  In
  particular, tools that read source information and the Software
  Inventory Evidence Records derived therefrom, including SWIMA-PCs,
  need to be careful to sanitize input to prevent buffer overflow
  attacks, encoding attacks, and other weaknesses that might be
  exploited by an adversary who can control the contents of a record.

8.6.  PA-TNC Security Threats

  In addition to the aforementioned considerations, the SWIMA protocol
  is subject to the same security threats as other PA-TNC transactions;
  see Section 5.2 of PA-TNC [RFC5792].  These include, but are not
  limited to, attribute theft, message fabrication, attribute
  modification, attribute replay, attribute insertion, and denial of
  service.  Implementers are advised to consult the PA-TNC
  specification to better understand these security issues.

9.  Privacy Considerations

  As noted in Section 8.2, if an adversary can gain an understanding of
  the software installed on an endpoint, they can utilize this to
  launch attacks and maintain footholds on this endpoint.  For this
  reason, the NEA Server needs to ensure that adequate safeguards are
  in place to prevent exposure of collected inventory records.  For
  similar reasons, it is advisable that an endpoint only send records
  to a NEA Server that is authorized to receive this information and
  that can be trusted to safeguard this information after collection.

  In addition, software inventory information can lead to insights
  about the endpoint's primary user if that user is able to install
  software.  (Note that users might be "able" to install their own
  software even if they are not "allowed" to do so.)  This is
  especially true on endpoints that support "apps", as individual apps
  can be closely tied to specific groups or activities.  This could
  conceivably allow inferences about things such as a user's hobbies;
  the banks and other financial institutions that they use; and
  information about the user's race, sex, or sexual orientation.







Schmidt, et al.              Standards Track                   [Page 93]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  Organizations that collect software inventory information from
  endpoints ought to make sure the endpoints' users are aware of this
  collection.  In addition, organizations should be aware that a
  software inventory associated with an individual, such as the
  inventory of the individual's primary endpoint, could expose
  sensitive personal information.  For this reason, privacy safeguards
  are necessary for collected inventory information.  Such safeguards
  would require not only protection of the inventory's confidentiality
  but also appropriate access controls so that only those trained in
  relevant privacy requirements are able to view the data.

10.  IANA Considerations

  This section extends multiple existing IANA registries.
  Specifically, it extends the "PA-TNC Attribute Types" and "PA-TNC
  Error Codes" registries defined in the PA-TNC specification [RFC5792]
  and the "PA Subtypes" registry defined in the PB-TNC specification
  [RFC5793] and extended in PA-TNC.  This specification only adds
  values to these registries and does not alter how these registries
  work or are maintained.  Consult the appropriate specifications for
  details on the operations and maintenance of these registries.

  This section also defines a new IANA registry for "Software Data
  Model Types".  The structure and requirements for this registry are
  provided, as well as guidelines for reviewers adjudicating the
  addition of new entries to this registry.

10.1.  Guidance for the Designated Experts

  For the "Software Data Model Types" registry defined by this
  specification, new values are added to the registry using the
  "Specification Required" process defined in RFC 8126 [RFC8126].

  This section provides guidance to designated experts so that they may
  make decisions using a philosophy appropriate for this registry.

  Designated experts should focus on the following requirements.  All
  values in this IANA registry MUST be documented in a specification
  that is permanently and publicly available.  Values MUST also be
  useful, not harmful to the Internet, and defined in a manner that is
  clear and likely to ensure interoperability.

  Designated experts should encourage vendors to avoid defining similar
  but incompatible values and instead agree on a single value allocated
  via IETF standards.  However, it is beneficial to document existing
  practice.





Schmidt, et al.              Standards Track                   [Page 94]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  There are several ways to ensure that a specification is permanently
  and publicly available.  It may be published as an RFC.
  Alternatively, it may be published in another manner that makes it
  freely available to anyone.  However, in this latter case, the vendor
  MUST supply a copy to IANA and authorize IANA to archive this copy
  and make it freely available to all, if at some point the document
  becomes no longer freely available to all through other channels.

  Sections 10.2, 10.3, and 10.4 define a new PA Subtype, new PA-TNC
  Attribute Types, and new PA-TNC Error Codes, respectively.
  Section 10.5 provides guidance to IANA in creating and managing the
  new "Software Data Model Types" registry defined by this
  specification.

10.2.  PA Subtypes

  The following is an extension to the list of PA Subtypes provided in
  Section 7.2 of [RFC5792] and defined in the "PA Subtypes" registry in
  Section 6.3 of [RFC5793].  See <https://www.iana.org/assignments/
  pb-tnc-parameters/>.

      +-----+---------+------------------+------------------------+
      | PEN | Integer | Name             | Defining Specification |
      +-----+---------+------------------+------------------------+
      | 0   | 9       | SWIMA Attributes | RFC 8412               |
      +-----+---------+------------------+------------------------+

























Schmidt, et al.              Standards Track                   [Page 95]

RFC 8412                    SWIMA for PA-TNC                   July 2018


10.3.  PA-TNC Attribute Types

  Section 5.2 of this specification defines several new PA-TNC
  attributes.  The following values have been added to the "PA-TNC
  Attribute Types" registry defined in the PA-TNC specification.  Note
  that Table 1 in Section 5.2 lists these attributes in both
  hexadecimal and decimal format.  The decimal values given in that
  table are identical to those provided here.  Note also that Table 1
  includes an entry for the PA-TNC Error attribute, but the IANA
  information associated with the PA-TNC Error attribute is already
  defined in the PA-TNC specification and is not reproduced here.

  +-----+---------+----------------------------+----------------------+
  | PEN | Integer | Name                       | Defining             |
  |     |         |                            | Specification        |
  +-----+---------+----------------------------+----------------------+
  | 0   | 13      | SWIMA Request              | RFC 8412             |
  |     |         |                            |                      |
  | 0   | 14      | Software Identifier        | RFC 8412             |
  |     |         | Inventory                  |                      |
  |     |         |                            |                      |
  | 0   | 15      | Software Identifier Events | RFC 8412             |
  |     |         |                            |                      |
  | 0   | 16      | Software Inventory         | RFC 8412             |
  |     |         |                            |                      |
  | 0   | 17      | Software Events            | RFC 8412             |
  |     |         |                            |                      |
  | 0   | 18      | Subscription Status        | RFC 8412             |
  |     |         | Request                    |                      |
  |     |         |                            |                      |
  | 0   | 19      | Subscription Status        | RFC 8412             |
  |     |         | Response                   |                      |
  |     |         |                            |                      |
  | 0   | 20      | Source Metadata Request    | RFC 8412             |
  |     |         |                            |                      |
  | 0   | 21      | Source Metadata Response   | RFC 8412             |
  +-----+---------+----------------------------+----------------------+














Schmidt, et al.              Standards Track                   [Page 96]

RFC 8412                    SWIMA for PA-TNC                   July 2018


10.4.  PA-TNC Error Codes

  Section 5.15 of this specification defines several new PA-TNC Error
  Codes.  The following values have been added to the "PA-TNC Error
  Codes" registry defined in the PA-TNC specification.  Note that
  Table 9 in Section 5.15 lists these codes in both hexadecimal and
  decimal format.  The decimal values given in that table are identical
  to those provided here.

+-----+---------+--------------------------------------+---------------+
| PEN | Integer | Name                                 | Defining      |
|     |         |                                      | Specification |
+-----+---------+--------------------------------------+---------------+
| 0   | 4       | SWIMA_ERROR                          | RFC 8412      |
|     |         |                                      |               |
| 0   | 5       | SWIMA_SUBSCRIPTION_DENIED_ERROR      | RFC 8412      |
|     |         |                                      |               |
| 0   | 6       | SWIMA_RESPONSE_TOO_LARGE_ERROR       | RFC 8412      |
|     |         |                                      |               |
| 0   | 7       | SWIMA_SUBSCRIPTION_FULFILLMENT_ERROR | RFC 8412      |
|     |         |                                      |               |
| 0   | 8       | SWIMA_SUBSCRIPTION_ID_REUSE_ERROR    | RFC 8412      |
+-----+---------+--------------------------------------+---------------+

10.5.  Software Data Model Types

  For the "Software Data Model Types" registry
  (<https://www.iana.org/assignments/pa-tnc-parameters/
  #software-data-model-types>, each entry should include a
  human-readable name, an SMI PEN, a decimal integer value between 0
  and 2^8-1 (inclusive), and a reference to the specification where the
  use of this data model is defined.  This referenced specification
  needs to provide both a description of the format used by the data
  model and the procedures by which Software Identifiers are derived
  from a record expressed using this data model.  Note that a
  specification that just defines the data model structure and its use
  is generally not sufficient, as it would likely lack the procedures
  for constructing a Software Identifier.  This is why the table below
  uses the SWIMA standard for ISO SWID tags as the reference for the
  use of ISO SWID tags and does not reference the ISO SWID tag
  specification.










Schmidt, et al.              Standards Track                   [Page 97]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  The following entries for this registry are defined in this document.
  They are the initial entries in the "Software Data Model Types"
  registry.  Additional entries to this registry are added following
  the "Specification Required" policy defined in [RFC8126], following
  the guidelines in Section 10.1.

  +-----+---------+-----------------------------+---------------------+
  | PEN | Integer | Name                        | Defining            |
  |     |         |                             | Specification       |
  +-----+---------+-----------------------------+---------------------+
  | 0   | 0       | ISO 2015 SWID tags using    | RFC 8412            |
  |     |         | XML                         |                     |
  |     |         |                             |                     |
  | 0   | 1       | ISO 2009 SWID tags using    | RFC 8412            |
  |     |         | XML                         |                     |
  |     |         |                             |                     |
  | 0   | 192-255 | Reserved for local          | N/A                 |
  |     |         | enterprise use              |                     |
  +-----+---------+-----------------------------+---------------------+

11.  References

11.1.  Normative References

  [NIST8060]
             Waltermire, D., Cheikes, B., Feldman, L., and G. Witte,
             "Guidelines for the Creation of Interoperable Software
             Identification (SWID) Tags", DOI 10.6028/NIST.IR.8060,
             April 2016, <https://nvlpubs.nist.gov/nistpubs/ir/2016/
             NIST.IR.8060.pdf>.

  [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
             Requirement Levels", BCP 14, RFC 2119,
             DOI 10.17487/RFC2119, March 1997,
             <https://www.rfc-editor.org/info/rfc2119>.

  [RFC3339]  Klyne, G. and C. Newman, "Date and Time on the Internet:
             Timestamps", RFC 3339, DOI 10.17487/RFC3339, July 2002,
             <https://www.rfc-editor.org/info/rfc3339>.

  [RFC3629]  Yergeau, F., "UTF-8, a transformation format of
             ISO 10646", STD 63, RFC 3629, DOI 10.17487/RFC3629,
             November 2003, <https://www.rfc-editor.org/info/rfc3629>.

  [RFC3986]  Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
             Resource Identifier (URI): Generic Syntax", STD 66,
             RFC 3986, DOI 10.17487/RFC3986, January 2005,
             <https://www.rfc-editor.org/info/rfc3986>.



Schmidt, et al.              Standards Track                   [Page 98]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  [RFC5198]  Klensin, J. and M. Padlipsky, "Unicode Format for Network
             Interchange", RFC 5198, DOI 10.17487/RFC5198, March 2008,
             <https://www.rfc-editor.org/info/rfc5198>.

  [RFC5792]  Sangster, P. and K. Narayan, "PA-TNC: A Posture Attribute
             (PA) Protocol Compatible with Trusted Network Connect
             (TNC)", RFC 5792, DOI 10.17487/RFC5792, March 2010,
             <https://www.rfc-editor.org/info/rfc5792>.

  [RFC8089]  Kerwin, M., "The "file" URI Scheme", RFC 8089,
             DOI 10.17487/RFC8089, February 2017,
             <https://www.rfc-editor.org/info/rfc8089>.

  [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,
             <https://www.rfc-editor.org/info/rfc8126>.

  [RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in
             RFC 2119 Key Words", BCP 14, RFC 8174,
             DOI 10.17487/RFC8174, May 2017,
             <https://www.rfc-editor.org/info/rfc8174>.

  [SWID09]   The International Organization for Standardization/
             International Electrotechnical Commission, "Information
             technology - Software asset management - Part 2: Software
             identification tag", ISO/IEC 19770-2:2009, November 2009,
             <https://www.iso.org/standard/53670.html>.

  [SWID15]   The International Organization for Standardization/
             International Electrotechnical Commission, "Information
             technology - Software asset management - Part 2: Software
             identification tag", ISO/IEC 19770-2:2015, October 2015,
             <https://www.iso.org/standard/65666.html>.

11.2.  Informative References

  [RFC5209]  Sangster, P., Khosravi, H., Mani, M., Narayan, K., and J.
             Tardo, "Network Endpoint Assessment (NEA): Overview and
             Requirements", RFC 5209, DOI 10.17487/RFC5209, June 2008,
             <https://www.rfc-editor.org/info/rfc5209>.

  [RFC5793]  Sahita, R., Hanna, S., Hurst, R., and K. Narayan, "PB-TNC:
             A Posture Broker (PB) Protocol Compatible with Trusted
             Network Connect (TNC)", RFC 5793, DOI 10.17487/RFC5793,
             March 2010, <https://www.rfc-editor.org/info/rfc5793>.





Schmidt, et al.              Standards Track                   [Page 99]

RFC 8412                    SWIMA for PA-TNC                   July 2018


  [RFC6876]  Sangster, P., Cam-Winget, N., and J. Salowey, "A Posture
             Transport Protocol over TLS (PT-TLS)", RFC 6876,
             DOI 10.17487/RFC6876, February 2013,
             <https://www.rfc-editor.org/info/rfc6876>.

  [RFC7171]  Cam-Winget, N. and P. Sangster, "PT-EAP: Posture Transport
             (PT) Protocol for Extensible Authentication Protocol (EAP)
             Tunnel Methods", RFC 7171, DOI 10.17487/RFC7171, May 2014,
             <https://www.rfc-editor.org/info/rfc7171>.

  [RFC7632]  Waltermire, D. and D. Harrington, "Endpoint Security
             Posture Assessment: Enterprise Use Cases", RFC 7632,
             DOI 10.17487/RFC7632, September 2015,
             <https://www.rfc-editor.org/info/rfc7632>.

  [RFC8248]  Cam-Winget, N. and L. Lorenzin, "Security Automation and
             Continuous Monitoring (SACM) Requirements", RFC 8248,
             DOI 10.17487/RFC8248, September 2017,
             <https://www.rfc-editor.org/info/rfc8248>.
































Schmidt, et al.              Standards Track                  [Page 100]

RFC 8412                    SWIMA for PA-TNC                   July 2018


Authors' Addresses

  Charles Schmidt
  The MITRE Corporation
  202 Burlington Road
  Bedford, MA  01730
  United States of America

  Email: [email protected]


  Daniel Haynes
  The MITRE Corporation
  202 Burlington Road
  Bedford, MA  01730
  United States of America

  Email: [email protected]


  Chris Coffin
  The MITRE Corporation
  202 Burlington Road
  Bedford, MA  01730
  United States of America

  Email: [email protected]

  David Waltermire
  National Institute of Standards and Technology
  100 Bureau Drive
  Gaithersburg, Maryland
  United States of America

  Email: [email protected]


  Jessica Fitzgerald-McKay
  United States National Security Agency
  9800 Savage Road
  Ft. Meade, Maryland
  United States of America

  Email: [email protected]







Schmidt, et al.              Standards Track                  [Page 101]