<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<!-- name="GENERATOR" content="github.com/mmarkdown/mmark Mmark Markdown Processor - mmark.miek.nl" -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" ipr="trust200902" docName="draft-nichols-iotops-defined-trust-transport-01" submissionType="IETF" category="info" xml:lang="en" indexInclude="true" consensus="true">
  <front>
    <title abbrev="Defined-Trust Transport (DeftT)">Defined-Trust Transport (DeftT) Protocol for Limited Domains</title>
    <seriesInfo value="draft-nichols-iotops-defined-trust-transport-01" stream="IETF" status="informational" name="Internet-Draft"/>
    <author initials="K." surname="Nichols" fullname="Kathleen Nichols">
      <organization>Pollere LLC</organization>
      <address>
        <postal>
          <street/>
        </postal>
        <email>nichols@pollere.net</email>
      </address>
    </author>
    <author initials="V." surname="Jacobson" fullname="Van Jacobson">
      <organization>UCLA</organization>
      <address>
        <postal>
          <street/>
        </postal>
        <email>vanj@cs.ucla.edu</email>
      </address>
    </author>
    <author initials="R." surname="King" fullname="Randy King">
      <organization>Operant Networks Inc.</organization>
      <address>
        <postal>
          <street/>
        </postal>
        <email>randy.king@operantnetworks.com</email>
      </address>
    </author>
    <date/>
    <area>Transport</area>
    <workgroup/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document describes a broadcast-friendly, many-to-many Defined-trust Transport (DeftT) that makes it simple to express and enforce application and deployment specific integrity, authentication, access control and behavior constraints directly in the protocol stack.
DeftT is part of a Defined-trust Communications framework with an example codebase, not a protocol specification.
Combined with IPv6 multicast and modern hardware-based methods for securing keys and code, it provides an easy to use foundation
for secure and efficient communications in Limited Domains (RFC8799), in particular for Operational Technology (OT) networks.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>Decades of success in providing IP connectivity over any physical media ("IP over everything") has commoditized IP-based communications.
This makes IP an attractive option for Internet of Things (IoT), Industrial Control Systems (ICS) and Operational Technologies (OT) applications
like building automation, embedded systems and transportation control,
that previously required proprietary or analog connectivity.
For the energy sector in particular, the growing use of Distributed Energy Resources (DER) like
residential solar has created interest in low cost commodity networked devices but with added features for security, robustness and low-power operation <xref target="MODOT"/><xref target="OPR"/><xref target="CIDS"/>.
Other emerging uses include connecting controls and sensors in nuclear power plants  and carbon capture monitoring
<xref target="DIGN"/><xref target="IIOT"/>.</t>
      <t>While moving to an IP network layer is a major advance for OT, current Internet transport options are a poor match to its needs.
TCP generalized the Arpanet transport notion of a packet "phone call" between two endpoints into a generic, reliable, bi-directional bytestream working over IP's stateless unidirectional best-effort delivery model.  Just as the voice phone call model spawned a global voice communications infrastructure in the 1900s, TCP/IP's two-party packet sessions are the foundation of today's global data communication infrastructure. But "good for global communication" isn't the same as "good for everything". OT applications tend to be localized and communication-intensive with a primary function of coordination and control and communication patterns that are many-to-many. Implementing many-to-many applications over two-party transport sessions changes the configuration burden and traffic scaling from the native media's O(<em>n</em>) to O(<em>n</em><sup>2</sup>) (see <xref target="transporting-information"/>). Further, as OT devices have specific, highly prescribed roles with strict constraints on "who can say what to which", the opacity of modern encrypted two-party sessions can make it impossible to enforce or audit these constraints.</t>
      <t>This memo describes a new transport protocol, Defined-trust Transport (DeftT) for Limited Domains <xref target="RFC8799"/> in which multipoint communications are enabled through use of a named collection abstraction and secured by an integrated trust management engine.
DeftT employs multicast (e.g., IPv6 link-local <xref target="RFC4291"/>), a distributed set reconciliation PDU transport, a flexible pub/sub API, chain-of-trust membership identities, and secured rules that define the local context and communication constraints of a deployment in a declarative language.
These rules are used by DeftT's runtime trust management engine to enforce adherence to the constraints.
The resulting system is efficient, secure and scalable:
communication, signing and validation costs are constant per-publication,
independent of the richness and complexity of the
deployment's constraints or the number of entites deployed. Like QUIC, DeftT is a user-space transport protocol that sits between an application and a system-provided transport like UDP or UDP multicast (see <xref target="fig0"/>).</t>
      <figure anchor="fig0">
        <name>DeftT's place in an IP stack
</name>
        <artwork type="svg" originalSrc="figs/defttlayer-rfc.svg"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="50%" height="50%" viewBox="0 0 242 147" version="1.1">
            <desc>defttlayer</desc>
            <title>defttlayer</title>
            <g stroke-width="1" fill="none" fill-rule="evenodd">
              <text font-family="sans-serif" font-size="14" font-weight="normal" fill="#000000">
                <tspan x="8.831" y="124">IPv6 Local </tspan>
                <tspan x="12.975" y="140">Multicast</tspan>
              </text>
              <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                <tspan x="44.7806708" y="96">UDP</tspan>
              </text>
              <text font-family="sans-serif" font-size="16" font-weight="bold" fill="#000000">
                <tspan x="99.8573416" y="59">DeftT</tspan>
              </text>
              <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                <tspan x="80.5933416" y="25">Application</tspan>
              </text>
              <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                <tspan x="109.67995" y="133">Unicast IPv4/6</tspan>
              </text>
              <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                <tspan x="133.244" y="97">TCP/QUIC/...</tspan>
              </text>
              <rect stroke="black" x="1" y="109" width="80" height="36" rx="4"/>
              <rect stroke="black" x="1" y="73" width="120" height="36" rx="4"/>
              <rect stroke="black" x="81" y="109" width="160" height="36" rx="4"/>
              <rect stroke="black" x="121" y="73" width="120" height="36" rx="4"/>
              <rect stroke="black" x="1" y="1" width="240" height="36" rx="4"/>
              <rect stroke="black" stroke-width="2" x="1" y="37" width="240" height="36" rx="4"/>
            </g>
          </svg>
        </artwork>
      </figure>
      <t>Device enrollment consists of configuring a device with <em>identity bundles</em> that
contains the trust anchor certificate, a compact and secured copy of the communication rules, and a membership identity (for domain communications) which comprises all the certs in its signing chain (which can be used to confer attributes) terminated at the trust anchor. The secret key corresponding to the leaf certificate of the identity should be securely configured while the security of the identity bundle can be deployment-specific. The identity chains of all communicating members share a common trust anchor and the rules that define legal signing chains, so the bundle suffices for a member to authenticate and
authorize communication from peers and vice-versa.
New members can join and communicate without labor intensive and error-prone device-to-device association configuration.</t>
      <section anchor="environment-and-use">
        <name>Environment and use</name>
        <t>Due to physical deployment constraints and the high cost of wiring, OT networks preferentially use radio as their communication medium. Use of wires is impossible in many installations (untethered Things, adding connected devices to home and infrastructure networks, vehicular uses, etc.). Wiring costs far exceed the cost of current System-on-Chip Wi-Fi IoT devices and the cost differential is increasing <xref target="WSEN"/><xref target="COST"/>. For example, the popular ESP32 is a 32bit/320KB SRAM RISC with 60 analog and digital I/O channels plus complete 802.11b/g/n and bluetooth radios on a 5mm die that consumes 70uW in normal operation. It currently costs <tt>$</tt>0.13 in small quantities while the estimated cost of pulling cable to retrofit nuclear power plants is presently <tt>$</tt>2000/ft <xref target="NPPI"/>.</t>
        <t>OT applications are frequently Limited Domain with communications that are local, have a many-to-many pattern, and use application-specific identifiers ("topics") for rendezvous. This fits the generic Publish/Subscribe communications model ("pub/sub") and, as table 1 in <xref target="PRAG"/> shows, nine of the eleven most widely used IoT protocols use a topic-based pub/sub transport. For example MQTT, an open standard developed in 1999 to monitor oil pipelines over satellite <xref target="MQTT"/><xref target="MHST"/>, is now likely the most widely used IoT protocol (<eref target="https://mqtt.org/use-cases/">https://mqtt.org/use-cases/</eref>).
Microsoft Azure, Amazon AWS,
Google Cloud, and Cloudflare all offer hosted MQTT brokers for collecting and connecting sensor and control data in addition to providing local pub/sub in buildings, factories and homes. Pub/sub protocols communicate by using the same topic but need no knowledge of one another. These protocols are typically <em>implemented</em> as an application layer protocol over a two-party Internet transports like TCP or TLS which require in-advance configuration of peer addresses and credentials at each endpoint and incur unnecessary communications overhead <xref target="transporting-information"/>.</t>
      </section>
      <section anchor="transporting-information">
        <name>Transporting information</name>
        <t>The smart lighting example of <xref target="fig1"/> illustrates a topic-based pub/sub application layer protocol in a wireless broadcast subnet. Each switch is set up to do triple-duty: one click of its on/off paddle controls some particular light(s), two clicks control all the lights in the room, and three clicks control all available lights (five kitchen plus the four den ceiling).
Thus a switch button push may require a message to as many as nine light devices.
On a broadcast physical network each packet sent by the switch is heard by all nine devices.
IPv6 link-level multicast provides a network layer that can take advantage of this but current IP transport protocols cannot.
Instead, each switch needs to establish nine bi-lateral transport associations in order to send the published message for all lights to turn on.
Communicating devices must be configured with each other's IP address and enrolled identity so, for <em>n</em> devices, both the configuration burden and traffic scale as O(<em>n<sup>2</sup></em>).
For example, when an "<em>all</em>" event is triggered, every light's radio will receive nine messages but discard the eight determined to be "not mine."
If a device sleeps, is out-of-range, or has partial connectivity, additional application-level mechanisms have to be implemented to accommodate it.</t>
        <figure anchor="fig1">
          <name>Smart lighting use of Pub/Sub
</name>
          <artwork type="svg" originalSrc="figs/iotDeftt-rfc.svg"><svg xmlns="http://www.w3.org/2000/svg" width="80%" height="80%" viewBox="0 0 967 692">
              <desc>iotDeftt</desc>
              <title>iotDeftt</title>
              <g stroke-width="1" fill="none" fill-rule="evenodd">
                <g transform="translate(8.000000, 6.000000)" fill="#000000">
                  <g transform="translate(377.000000, -0.000000)">
                    <g fill-rule="nonzero">
                      <g>
                        <path d="M40,34 C18,34 0,43.84 0,56 C0,68.16 18,78 40,78 C62,78 80,68.16 80,56 C80,43.84 62,34 40,34 M58,46 C58,47.6 51.6,52.16 40,52.16 C28.4,52.16 22,47.6 22,46 C22,45.64 22.6,44.96 23.6,44.2 C28.24,42.84 33.76,42 40,42 C46.24,42 51.76,42.84 56.4,44.2 C57.4,44.96 58,45.64 58,46 M40,70 C20.48,70 8,61.72 8,56 C8,53.24 10.92,50 16.12,47.16 C17.2,53.32 27.48,58.16 40,58.16 C52.52,58.16 62.8,53.32 63.88,47.16 C69.08,50 72,53.24 72,56 C72,61.72 59.52,70 40,70 Z"/>
                        <path d="M40,30 L46,22 C44.3333333,20.75 42.25,20 40,20 C37.75,20 35.6666667,20.75 34,22 L40,30 M40,0 C33.25,0 27.0166667,2.23333333 22,6 L25,10 C29.1666667,6.86666667 34.3666667,5 40,5 C45.6333333,5 50.8333333,6.86666667 55,10 L58,6 C52.9833333,2.23333333 46.75,0 40,0 M40,10 C35.5,10 31.35,11.4833333 28,14 L31,18 C33.5,16.1166667 36.6166667,15 40,15 C43.3833333,15 46.5,16.1166667 49,18 L52,14 C48.65,11.4833333 44.5,10 40,10 Z"/>
                      </g>
                      <g transform="translate(141.000000, 0.000000)">
                        <path d="M40,34 C18,34 0,43.84 0,56 C0,68.16 18,78 40,78 C62,78 80,68.16 80,56 C80,43.84 62,34 40,34 M58,46 C58,47.6 51.6,52.16 40,52.16 C28.4,52.16 22,47.6 22,46 C22,45.64 22.6,44.96 23.6,44.2 C28.24,42.84 33.76,42 40,42 C46.24,42 51.76,42.84 56.4,44.2 C57.4,44.96 58,45.64 58,46 M40,70 C20.48,70 8,61.72 8,56 C8,53.24 10.92,50 16.12,47.16 C17.2,53.32 27.48,58.16 40,58.16 C52.52,58.16 62.8,53.32 63.88,47.16 C69.08,50 72,53.24 72,56 C72,61.72 59.52,70 40,70 Z"/>
                        <path d="M40,30 L46,22 C44.3333333,20.75 42.25,20 40,20 C37.75,20 35.6666667,20.75 34,22 L40,30 M40,0 C33.25,0 27.0166667,2.23333333 22,6 L25,10 C29.1666667,6.86666667 34.3666667,5 40,5 C45.6333333,5 50.8333333,6.86666667 55,10 L58,6 C52.9833333,2.23333333 46.75,0 40,0 M40,10 C35.5,10 31.35,11.4833333 28,14 L31,18 C33.5,16.1166667 36.6166667,15 40,15 C43.3833333,15 46.5,16.1166667 49,18 L52,14 C48.65,11.4833333 44.5,10 40,10 Z"/>
                      </g>
                      <g transform="translate(0.000000, 87.000000)">
                        <path d="M40,34 C18,34 0,43.84 0,56 C0,68.16 18,78 40,78 C62,78 80,68.16 80,56 C80,43.84 62,34 40,34 M58,46 C58,47.6 51.6,52.16 40,52.16 C28.4,52.16 22,47.6 22,46 C22,45.64 22.6,44.96 23.6,44.2 C28.24,42.84 33.76,42 40,42 C46.24,42 51.76,42.84 56.4,44.2 C57.4,44.96 58,45.64 58,46 M40,70 C20.48,70 8,61.72 8,56 C8,53.24 10.92,50 16.12,47.16 C17.2,53.32 27.48,58.16 40,58.16 C52.52,58.16 62.8,53.32 63.88,47.16 C69.08,50 72,53.24 72,56 C72,61.72 59.52,70 40,70 Z"/>
                        <path d="M40,30 L46,22 C44.3333333,20.75 42.25,20 40,20 C37.75,20 35.6666667,20.75 34,22 L40,30 M40,0 C33.25,0 27.0166667,2.23333333 22,6 L25,10 C29.1666667,6.86666667 34.3666667,5 40,5 C45.6333333,5 50.8333333,6.86666667 55,10 L58,6 C52.9833333,2.23333333 46.75,0 40,0 M40,10 C35.5,10 31.35,11.4833333 28,14 L31,18 C33.5,16.1166667 36.6166667,15 40,15 C43.3833333,15 46.5,16.1166667 49,18 L52,14 C48.65,11.4833333 44.5,10 40,10 Z"/>
                      </g>
                      <g transform="translate(141.000000, 87.000000)">
                        <path d="M40,34 C18,34 0,43.84 0,56 C0,68.16 18,78 40,78 C62,78 80,68.16 80,56 C80,43.84 62,34 40,34 M58,46 C58,47.6 51.6,52.16 40,52.16 C28.4,52.16 22,47.6 22,46 C22,45.64 22.6,44.96 23.6,44.2 C28.24,42.84 33.76,42 40,42 C46.24,42 51.76,42.84 56.4,44.2 C57.4,44.96 58,45.64 58,46 M40,70 C20.48,70 8,61.72 8,56 C8,53.24 10.92,50 16.12,47.16 C17.2,53.32 27.48,58.16 40,58.16 C52.52,58.16 62.8,53.32 63.88,47.16 C69.08,50 72,53.24 72,56 C72,61.72 59.52,70 40,70 Z"/>
                        <path d="M40,30 L46,22 C44.3333333,20.75 42.25,20 40,20 C37.75,20 35.6666667,20.75 34,22 L40,30 M40,0 C33.25,0 27.0166667,2.23333333 22,6 L25,10 C29.1666667,6.86666667 34.3666667,5 40,5 C45.6333333,5 50.8333333,6.86666667 55,10 L58,6 C52.9833333,2.23333333 46.75,0 40,0 M40,10 C35.5,10 31.35,11.4833333 28,14 L31,18 C33.5,16.1166667 36.6166667,15 40,15 C43.3833333,15 46.5,16.1166667 49,18 L52,14 C48.65,11.4833333 44.5,10 40,10 Z"/>
                      </g>
                    </g>
                    <g transform="translate(226.000000, 46.000000)">
                      <text font-family="sans-serif" font-size="18" font-weight="bold">
                        <tspan x="12.6879883" y="17">kitchen ceiling</tspan>
                      </text>
                      <g transform="translate(27.000000, 28.000000)">
                        <text font-family="sans-serif" font-size="14" font-weight="normal">
                          <tspan x="0.113769531" y="33">kitchen ceiling</tspan>
                          <tspan x="24.5932617" y="50">kitchen</tspan>
                          <tspan x="41.5874023" y="67">all</tspan>
                        </text>
                        <text font-family="sans-serif" font-size="12" font-weight="bold">
                          <tspan x="6" y="12">subscriptions</tspan>
                        </text>
                      </g>
                    </g>
                  </g>
                  <g transform="translate(377.000000, 514.000000)">
                    <g fill-rule="nonzero">
                      <g>
                        <path d="M40,34 C18,34 0,43.84 0,56 C0,68.16 18,78 40,78 C62,78 80,68.16 80,56 C80,43.84 62,34 40,34 M58,46 C58,47.6 51.6,52.16 40,52.16 C28.4,52.16 22,47.6 22,46 C22,45.64 22.6,44.96 23.6,44.2 C28.24,42.84 33.76,42 40,42 C46.24,42 51.76,42.84 56.4,44.2 C57.4,44.96 58,45.64 58,46 M40,70 C20.48,70 8,61.72 8,56 C8,53.24 10.92,50 16.12,47.16 C17.2,53.32 27.48,58.16 40,58.16 C52.52,58.16 62.8,53.32 63.88,47.16 C69.08,50 72,53.24 72,56 C72,61.72 59.52,70 40,70 Z"/>
                        <path d="M40,30 L46,22 C44.3333333,20.75 42.25,20 40,20 C37.75,20 35.6666667,20.75 34,22 L40,30 M40,0 C33.25,0 27.0166667,2.23333333 22,6 L25,10 C29.1666667,6.86666667 34.3666667,5 40,5 C45.6333333,5 50.8333333,6.86666667 55,10 L58,6 C52.9833333,2.23333333 46.75,0 40,0 M40,10 C35.5,10 31.35,11.4833333 28,14 L31,18 C33.5,16.1166667 36.6166667,15 40,15 C43.3833333,15 46.5,16.1166667 49,18 L52,14 C48.65,11.4833333 44.5,10 40,10 Z"/>
                      </g>
                      <g transform="translate(141.000000, 0.000000)">
                        <path d="M40,34 C18,34 0,43.84 0,56 C0,68.16 18,78 40,78 C62,78 80,68.16 80,56 C80,43.84 62,34 40,34 M58,46 C58,47.6 51.6,52.16 40,52.16 C28.4,52.16 22,47.6 22,46 C22,45.64 22.6,44.96 23.6,44.2 C28.24,42.84 33.76,42 40,42 C46.24,42 51.76,42.84 56.4,44.2 C57.4,44.96 58,45.64 58,46 M40,70 C20.48,70 8,61.72 8,56 C8,53.24 10.92,50 16.12,47.16 C17.2,53.32 27.48,58.16 40,58.16 C52.52,58.16 62.8,53.32 63.88,47.16 C69.08,50 72,53.24 72,56 C72,61.72 59.52,70 40,70 Z"/>
                        <path d="M40,30 L46,22 C44.3333333,20.75 42.25,20 40,20 C37.75,20 35.6666667,20.75 34,22 L40,30 M40,0 C33.25,0 27.0166667,2.23333333 22,6 L25,10 C29.1666667,6.86666667 34.3666667,5 40,5 C45.6333333,5 50.8333333,6.86666667 55,10 L58,6 C52.9833333,2.23333333 46.75,0 40,0 M40,10 C35.5,10 31.35,11.4833333 28,14 L31,18 C33.5,16.1166667 36.6166667,15 40,15 C43.3833333,15 46.5,16.1166667 49,18 L52,14 C48.65,11.4833333 44.5,10 40,10 Z"/>
                      </g>
                      <g transform="translate(0.000000, 87.000000)">
                        <path d="M40,34 C18,34 0,43.84 0,56 C0,68.16 18,78 40,78 C62,78 80,68.16 80,56 C80,43.84 62,34 40,34 M58,46 C58,47.6 51.6,52.16 40,52.16 C28.4,52.16 22,47.6 22,46 C22,45.64 22.6,44.96 23.6,44.2 C28.24,42.84 33.76,42 40,42 C46.24,42 51.76,42.84 56.4,44.2 C57.4,44.96 58,45.64 58,46 M40,70 C20.48,70 8,61.72 8,56 C8,53.24 10.92,50 16.12,47.16 C17.2,53.32 27.48,58.16 40,58.16 C52.52,58.16 62.8,53.32 63.88,47.16 C69.08,50 72,53.24 72,56 C72,61.72 59.52,70 40,70 Z"/>
                        <path d="M40,30 L46,22 C44.3333333,20.75 42.25,20 40,20 C37.75,20 35.6666667,20.75 34,22 L40,30 M40,0 C33.25,0 27.0166667,2.23333333 22,6 L25,10 C29.1666667,6.86666667 34.3666667,5 40,5 C45.6333333,5 50.8333333,6.86666667 55,10 L58,6 C52.9833333,2.23333333 46.75,0 40,0 M40,10 C35.5,10 31.35,11.4833333 28,14 L31,18 C33.5,16.1166667 36.6166667,15 40,15 C43.3833333,15 46.5,16.1166667 49,18 L52,14 C48.65,11.4833333 44.5,10 40,10 Z"/>
                      </g>
                      <g transform="translate(141.000000, 87.000000)">
                        <path d="M40,34 C18,34 0,43.84 0,56 C0,68.16 18,78 40,78 C62,78 80,68.16 80,56 C80,43.84 62,34 40,34 M58,46 C58,47.6 51.6,52.16 40,52.16 C28.4,52.16 22,47.6 22,46 C22,45.64 22.6,44.96 23.6,44.2 C28.24,42.84 33.76,42 40,42 C46.24,42 51.76,42.84 56.4,44.2 C57.4,44.96 58,45.64 58,46 M40,70 C20.48,70 8,61.72 8,56 C8,53.24 10.92,50 16.12,47.16 C17.2,53.32 27.48,58.16 40,58.16 C52.52,58.16 62.8,53.32 63.88,47.16 C69.08,50 72,53.24 72,56 C72,61.72 59.52,70 40,70 Z"/>
                        <path d="M40,30 L46,22 C44.3333333,20.75 42.25,20 40,20 C37.75,20 35.6666667,20.75 34,22 L40,30 M40,0 C33.25,0 27.0166667,2.23333333 22,6 L25,10 C29.1666667,6.86666667 34.3666667,5 40,5 C45.6333333,5 50.8333333,6.86666667 55,10 L58,6 C52.9833333,2.23333333 46.75,0 40,0 M40,10 C35.5,10 31.35,11.4833333 28,14 L31,18 C33.5,16.1166667 36.6166667,15 40,15 C43.3833333,15 46.5,16.1166667 49,18 L52,14 C48.65,11.4833333 44.5,10 40,10 Z"/>
                      </g>
                    </g>
                    <g transform="translate(221.000000, 45.000000)">
                      <text font-family="sans-serif" font-size="18" font-weight="bold">
                        <tspan x="29.6948242" y="17">den ceiling</tspan>
                      </text>
                      <g transform="translate(38.000000, 28.000000)">
                        <text font-family="sans-serif" font-size="14" font-weight="normal">
                          <tspan x="6.37060547" y="33">den ceiling</tspan>
                          <tspan x="30.8500977" y="50">den</tspan>
                          <tspan x="35.5874023" y="67">all</tspan>
                        </text>
                        <text font-family="sans-serif" font-size="12" font-weight="bold">
                          <tspan x="0" y="12">subscriptions</tspan>
                        </text>
                      </g>
                    </g>
                  </g>
                  <g transform="translate(729.000000, 160.000000)">
                    <path d="M35,34 C54.3299662,34 70,49.6700338 70,69 C70,80.9 64.05,91.35 55,97.7 L55,109 C55,111.761424 52.7614237,114 50,114 L20,114 C17.2385763,114 15,111.761424 15,109 L15,97.7 C5.95,91.35 0,80.9 0,69 C0,49.6700338 15.6700338,34 35,34 M20,129 L20,124 L50,124 L50,129 C50,131.761424 47.7614237,134 45,134 L25,134 C22.2385763,134 20,131.761424 20,129 M35,44 C21.1928813,44 10,55.1928813 10,69 C10,79.25 16.15,88.05 25,91.9 L25,104 L45,104 L45,91.9 C53.85,88.05 60,79.25 60,69 C60,55.1928813 48.8071187,44 35,44 L35,44 Z" fill-rule="nonzero"/>
                    <path d="M35,30 L41,22 C39.3333333,20.75 37.25,20 35,20 C32.75,20 30.6666667,20.75 29,22 L35,30 M35,0 C28.25,0 22.0166667,2.23333333 17,6 L20,10 C24.1666667,6.86666667 29.3666667,5 35,5 C40.6333333,5 45.8333333,6.86666667 50,10 L53,6 C47.9833333,2.23333333 41.75,0 35,0 M35,10 C30.5,10 26.35,11.4833333 23,14 L26,18 C28.5,16.1166667 31.6166667,15 35,15 C38.3833333,15 41.5,16.1166667 44,18 L47,14 C43.65,11.4833333 39.5,10 35,10 Z" fill-rule="nonzero"/>
                    <g transform="translate(72.000000, 34.000000)">
                      <text font-family="sans-serif" font-size="18" font-weight="bold">
                        <tspan x="6.0078125" y="17">kitchen counter</tspan>
                      </text>
                      <g transform="translate(22.000000, 28.000000)">
                        <text font-family="sans-serif" font-size="14" font-weight="normal">
                          <tspan x="0.422363281" y="33">kitchen counter</tspan>
                          <tspan x="28.5932617" y="50">kitchen</tspan>
                          <tspan x="45.5874023" y="67">all</tspan>
                        </text>
                        <text font-family="sans-serif" font-size="12" font-weight="bold">
                          <tspan x="10" y="12">subscriptions</tspan>
                        </text>
                      </g>
                    </g>
                  </g>
                  <g transform="translate(15.000000, 394.000000)">
                    <path d="M212,36.7272727 C210.181818,34.9090909 207.909091,34 205.636364,34 L151.090909,34 C148.818182,34 146.545455,34.9090909 144.727273,36.7272727 C142.909091,38.5454545 142,40.8181818 142,43.0909091 L142,124.909091 C142,127.181818 142.909091,129.454545 144.727273,131.272727 C146.545455,133.090909 148.818182,134 151.090909,134 L205.636364,134 C207.909091,134 210.181818,133.090909 212,131.272727 C213.818182,129.454545 214.727273,127.181818 214.727273,124.909091 L214.727273,43.0909091 C214.727273,40.8181818 213.818182,38.5454545 212,36.7272727 M205.636364,124.909091 L151.090909,124.909091 L151.090909,43.0909091 L205.636364,43.0909091 L205.636364,124.909091 M160.181818,56.7272727 L160.181818,111.272727 L196.545455,111.272727 L196.545455,56.7272727 L160.181818,56.7272727 M192,106.727273 L164.727273,106.727273 L164.727273,61.2727273 L192,61.2727273 L192,106.727273 M169.272727,93.0909091 L187.454545,93.0909091 L187.454545,102.181818 L169.272727,102.181818 L169.272727,93.0909091 Z" fill-rule="nonzero"/>
                    <path d="M178,30 L184,22 C182.333333,20.75 180.25,20 178,20 C175.75,20 173.666667,20.75 172,22 L178,30 M178,0 C171.25,0 165.016667,2.23333333 160,6 L163,10 C167.166667,6.86666667 172.366667,5 178,5 C183.633333,5 188.833333,6.86666667 193,10 L196,6 C190.983333,2.23333333 184.75,0 178,0 M178,10 C173.5,10 169.35,11.4833333 166,14 L169,18 C171.5,16.1166667 174.616667,15 178,15 C181.383333,15 184.5,16.1166667 187,18 L190,14 C186.65,11.4833333 182.5,10 178,10 Z" fill-rule="nonzero"/>
                    <g transform="translate(0.000000, 36.000000)">
                      <text font-family="sans-serif" font-size="18" font-weight="bold">
                        <tspan x="10.7573242" y="17">den switch</tspan>
                      </text>
                      <g transform="translate(6.000000, 28.000000)">
                        <text font-family="sans-serif" font-size="14" font-weight="normal">
                          <tspan x="43" y="33">den ceiling</tspan>
                          <tspan x="43" y="50">den</tspan>
                          <tspan x="43" y="67">all</tspan>
                        </text>
                        <text font-family="sans-serif" font-size="14" font-weight="normal">
                          <tspan x="14" y="33">1:</tspan>
                          <tspan x="14" y="50">2:</tspan>
                          <tspan x="14" y="67">3:</tspan>
                        </text>
                        <text font-family="sans-serif" font-size="12" font-weight="bold">
                          <tspan x="0" y="12">clicks</tspan>
                        </text>
                        <text font-family="sans-serif" font-size="12" font-weight="bold">
                          <tspan x="53" y="12">pub topic</tspan>
                        </text>
                      </g>
                    </g>
                  </g>
                  <g transform="translate(0.000000, 157.000000)">
                    <path d="M227,36.7272727 C225.181818,34.9090909 222.909091,34 220.636364,34 L166.090909,34 C163.818182,34 161.545455,34.9090909 159.727273,36.7272727 C157.909091,38.5454545 157,40.8181818 157,43.0909091 L157,124.909091 C157,127.181818 157.909091,129.454545 159.727273,131.272727 C161.545455,133.090909 163.818182,134 166.090909,134 L220.636364,134 C222.909091,134 225.181818,133.090909 227,131.272727 C228.818182,129.454545 229.727273,127.181818 229.727273,124.909091 L229.727273,43.0909091 C229.727273,40.8181818 228.818182,38.5454545 227,36.7272727 M220.636364,124.909091 L166.090909,124.909091 L166.090909,43.0909091 L220.636364,43.0909091 L220.636364,124.909091 M175.181818,56.7272727 L175.181818,111.272727 L211.545455,111.272727 L211.545455,56.7272727 L175.181818,56.7272727 M207,106.727273 L179.727273,106.727273 L179.727273,61.2727273 L207,61.2727273 L207,106.727273 M184.272727,93.0909091 L202.454545,93.0909091 L202.454545,102.181818 L184.272727,102.181818 L184.272727,93.0909091 Z" fill-rule="nonzero"/>
                    <path d="M193,30 L199,22 C197.333333,20.75 195.25,20 193,20 C190.75,20 188.666667,20.75 187,22 L193,30 M193,0 C186.25,0 180.016667,2.23333333 175,6 L178,10 C182.166667,6.86666667 187.366667,5 193,5 C198.633333,5 203.833333,6.86666667 208,10 L211,6 C205.983333,2.23333333 199.75,0 193,0 M193,10 C188.5,10 184.35,11.4833333 181,14 L184,18 C186.5,16.1166667 189.616667,15 193,15 C196.383333,15 199.5,16.1166667 202,18 L205,14 C201.65,11.4833333 197.5,10 193,10 Z" fill-rule="nonzero"/>
                    <g transform="translate(0.000000, 39.000000)">
                      <text font-family="sans-serif" font-size="18" font-weight="bold">
                        <tspan x="5.75048828" y="17">kitchen switch</tspan>
                      </text>
                      <g transform="translate(0.000000, 28.000000)">
                        <text font-family="sans-serif" font-size="14" font-weight="normal">
                          <tspan x="43" y="33">kitchen counter</tspan>
                          <tspan x="43" y="50">kitchen</tspan>
                          <tspan x="43" y="67">all</tspan>
                        </text>
                        <text font-family="sans-serif" font-size="14" font-weight="normal">
                          <tspan x="14" y="33">1:</tspan>
                          <tspan x="14" y="50">2:</tspan>
                          <tspan x="14" y="67">3:</tspan>
                        </text>
                        <text font-family="sans-serif" font-size="12" font-weight="bold">
                          <tspan x="0" y="12">clicks</tspan>
                        </text>
                        <text font-family="sans-serif" font-size="12" font-weight="bold">
                          <tspan x="53" y="12">pub topic</tspan>
                        </text>
                      </g>
                    </g>
                  </g>
                </g>
              </g>
            </svg>
          </artwork>
        </figure>
        <t>MQTT and other broker-based pub/sub approaches mitigate this by adding a <em>broker</em> where all transport connections terminate (<xref target="fig2"/>).
Each entity makes a single TCP transport connection with the broker and tells the broker the topics to which it subscribes. Thus the kitchen switch uses its single transport session to publish commands to topic <tt>kitchen/counter</tt>, topic <tt>kitchen</tt> or <tt>all</tt>.
The kitchen counter light uses its broker session to subscribe to those same three topics.
The kitchen ceiling lights subscribe to topics <tt>kitchen ceiling</tt>, <tt>kitchen</tt> and <tt>all</tt> while den ceiling lights subscribe to topics <tt>den ceiling</tt>, <tt>den</tt> and <tt>all</tt>.
Use of a broker reduces the configuration burden from O(<em>n</em><sup>2</sup>) to O(<em>n</em>): 18 transport sessions to 11 for this simple example but for realistic deployments the reduction is often greater.
There are other advantages: besides their own IP addresses and identities, devices only need to be configured with those of the broker.
Further, the broker can store messages for temporarily unavailable devices and use the transport session to confirm the reception of messages.
This approach is popular because the pub/sub application layer protocol provides an easy-to-use API and the broker reduces configuration burden while maintaining secure, reliable delivery and providing short-term in-network storage of messages.
Still the broker implementation doubles the per-device configuration burden by adding an entity that exists only to implement transport and traffic still scales as O(<em>n<sup>2</sup></em>), e.g., any switch publishing to <tt>all</tt> lights results in ten (unicast) message transfers over the wifi network. Further, the broker introduces a single point of failure into a network that is richly connected physically.</t>
        <figure anchor="fig2">
          <name>Brokers enable Pub/Sub over connection/session protocols
</name>
          <artwork type="svg" originalSrc="figs/iotMQTT-rfc.svg"><svg xmlns="http://www.w3.org/2000/svg" width="80%" height="80%" viewBox="0 0 967 692">
              <desc>iotMQTT</desc>
              <title>iotMQTT</title>
              <g stroke-width="1" fill="none" fill-rule="evenodd">
                <g transform="translate(8.000000, 6.000000)">
                  <g transform="translate(238.500000, 76.000000)" stroke="black" stroke-linecap="round" stroke-width="3">
                    <line x1="286" y1="253.5" x2="493" y2="187.5" stroke-opacity="0.599928636"/>
                    <line x1="0" y1="350.5" x2="207" y2="284.5" stroke-opacity="0.599928636"/>
                    <line x1="0" y1="253.5" x2="207" y2="187.5" stroke-opacity="0.599928636" transform="translate(103.500000, 220.500000) scale(1, -1) translate(-103.500000, -220.500000) "/>
                    <line x1="238" y1="219.5" x2="212" y2="0.5" stroke-opacity="0.6"/>
                    <line x1="257" y1="220.5" x2="289" y2="0.5" stroke-opacity="0.6"/>
                    <line x1="223" y1="226.5" x2="181" y2="95.5" stroke-opacity="0.596717248"/>
                    <line x1="269" y1="226.5" x2="314" y2="95.5" stroke-opacity="0.6"/>
                  </g>
                  <g transform="translate(417.500000, 391.500000)" stroke="black" stroke-linecap="round" stroke-width="3">
                    <line x1="50" y1="3" x2="34" y2="247" stroke-opacity="0.599928636"/>
                    <line x1="100" y1="0" x2="140" y2="119" stroke-opacity="0.6"/>
                    <line x1="37" y1="0" x2="0" y2="119" stroke-opacity="0.596717248"/>
                    <line x1="84" y1="3" x2="110" y2="247" stroke-opacity="0.6"/>
                  </g>
                  <g transform="translate(414.000000, 308.000000)" fill="#000000">
                    <path d="M95.7777778,8.05555556 L98,5.83333333 C94.1111111,1.94444444 89.1111111,0 84.1111111,0 C79.1111111,0 74.1111111,1.94444444 70.2222222,5.83333333 L72.4444444,8.05555556 C75.7777778,5 79.9444444,3.33333333 84.1111111,3.33333333 C88.2777778,3.33333333 92.4444444,5 95.7777778,8.05555556 M93.2777778,10.2777778 C90.7777778,7.77777778 87.4444444,6.38888889 84.1111111,6.38888889 C80.7777778,6.38888889 77.4444444,7.77777778 74.9444444,10.2777778 L77.1666667,12.5 C79.1111111,10.5555556 81.6111111,9.72222222 84.1111111,9.72222222 C86.6111111,9.72222222 89.1111111,10.5555556 91.0555556,12.5 L93.2777778,10.2777778 M92.4444444,27.7777778 L86.8888889,27.7777778 L86.8888889,16.6666667 L81.3333333,16.6666667 L81.3333333,27.7777778 L53.5555556,27.7777778 C50.4873069,27.7777778 48,30.2650847 48,33.3333333 L48,44.4444444 C48,47.5126931 50.4873069,50 53.5555556,50 L92.4444444,50 C95.5126931,50 98,47.5126931 98,44.4444444 L98,33.3333333 C98,30.2650847 95.5126931,27.7777778 92.4444444,27.7777778 M61.8888889,41.6666667 L56.3333333,41.6666667 L56.3333333,36.1111111 L61.8888889,36.1111111 L61.8888889,41.6666667 M71.6111111,41.6666667 L66.0555556,41.6666667 L66.0555556,36.1111111 L71.6111111,36.1111111 L71.6111111,41.6666667 M81.3333333,41.6666667 L75.7777778,41.6666667 L75.7777778,36.1111111 L81.3333333,36.1111111 L81.3333333,41.6666667 Z" fill-rule="nonzero"/>
                    <text font-family="sans-serif" font-size="18" font-weight="bold">
                      <tspan x="10.6689453" y="77">MQTT broker</tspan>
                    </text>
                  </g>
                  <g transform="translate(377.000000, -0.000000)" fill="#000000">
                    <g fill-rule="nonzero">
                      <g>
                        <path d="M40,34 C18,34 0,43.84 0,56 C0,68.16 18,78 40,78 C62,78 80,68.16 80,56 C80,43.84 62,34 40,34 M58,46 C58,47.6 51.6,52.16 40,52.16 C28.4,52.16 22,47.6 22,46 C22,45.64 22.6,44.96 23.6,44.2 C28.24,42.84 33.76,42 40,42 C46.24,42 51.76,42.84 56.4,44.2 C57.4,44.96 58,45.64 58,46 M40,70 C20.48,70 8,61.72 8,56 C8,53.24 10.92,50 16.12,47.16 C17.2,53.32 27.48,58.16 40,58.16 C52.52,58.16 62.8,53.32 63.88,47.16 C69.08,50 72,53.24 72,56 C72,61.72 59.52,70 40,70 Z"/>
                        <path d="M40,30 L46,22 C44.3333333,20.75 42.25,20 40,20 C37.75,20 35.6666667,20.75 34,22 L40,30 M40,0 C33.25,0 27.0166667,2.23333333 22,6 L25,10 C29.1666667,6.86666667 34.3666667,5 40,5 C45.6333333,5 50.8333333,6.86666667 55,10 L58,6 C52.9833333,2.23333333 46.75,0 40,0 M40,10 C35.5,10 31.35,11.4833333 28,14 L31,18 C33.5,16.1166667 36.6166667,15 40,15 C43.3833333,15 46.5,16.1166667 49,18 L52,14 C48.65,11.4833333 44.5,10 40,10 Z"/>
                      </g>
                      <g transform="translate(141.000000, 0.000000)">
                        <path d="M40,34 C18,34 0,43.84 0,56 C0,68.16 18,78 40,78 C62,78 80,68.16 80,56 C80,43.84 62,34 40,34 M58,46 C58,47.6 51.6,52.16 40,52.16 C28.4,52.16 22,47.6 22,46 C22,45.64 22.6,44.96 23.6,44.2 C28.24,42.84 33.76,42 40,42 C46.24,42 51.76,42.84 56.4,44.2 C57.4,44.96 58,45.64 58,46 M40,70 C20.48,70 8,61.72 8,56 C8,53.24 10.92,50 16.12,47.16 C17.2,53.32 27.48,58.16 40,58.16 C52.52,58.16 62.8,53.32 63.88,47.16 C69.08,50 72,53.24 72,56 C72,61.72 59.52,70 40,70 Z"/>
                        <path d="M40,30 L46,22 C44.3333333,20.75 42.25,20 40,20 C37.75,20 35.6666667,20.75 34,22 L40,30 M40,0 C33.25,0 27.0166667,2.23333333 22,6 L25,10 C29.1666667,6.86666667 34.3666667,5 40,5 C45.6333333,5 50.8333333,6.86666667 55,10 L58,6 C52.9833333,2.23333333 46.75,0 40,0 M40,10 C35.5,10 31.35,11.4833333 28,14 L31,18 C33.5,16.1166667 36.6166667,15 40,15 C43.3833333,15 46.5,16.1166667 49,18 L52,14 C48.65,11.4833333 44.5,10 40,10 Z"/>
                      </g>
                      <g transform="translate(0.000000, 87.000000)">
                        <path d="M40,34 C18,34 0,43.84 0,56 C0,68.16 18,78 40,78 C62,78 80,68.16 80,56 C80,43.84 62,34 40,34 M58,46 C58,47.6 51.6,52.16 40,52.16 C28.4,52.16 22,47.6 22,46 C22,45.64 22.6,44.96 23.6,44.2 C28.24,42.84 33.76,42 40,42 C46.24,42 51.76,42.84 56.4,44.2 C57.4,44.96 58,45.64 58,46 M40,70 C20.48,70 8,61.72 8,56 C8,53.24 10.92,50 16.12,47.16 C17.2,53.32 27.48,58.16 40,58.16 C52.52,58.16 62.8,53.32 63.88,47.16 C69.08,50 72,53.24 72,56 C72,61.72 59.52,70 40,70 Z"/>
                        <path d="M40,30 L46,22 C44.3333333,20.75 42.25,20 40,20 C37.75,20 35.6666667,20.75 34,22 L40,30 M40,0 C33.25,0 27.0166667,2.23333333 22,6 L25,10 C29.1666667,6.86666667 34.3666667,5 40,5 C45.6333333,5 50.8333333,6.86666667 55,10 L58,6 C52.9833333,2.23333333 46.75,0 40,0 M40,10 C35.5,10 31.35,11.4833333 28,14 L31,18 C33.5,16.1166667 36.6166667,15 40,15 C43.3833333,15 46.5,16.1166667 49,18 L52,14 C48.65,11.4833333 44.5,10 40,10 Z"/>
                      </g>
                      <g transform="translate(141.000000, 87.000000)">
                        <path d="M40,34 C18,34 0,43.84 0,56 C0,68.16 18,78 40,78 C62,78 80,68.16 80,56 C80,43.84 62,34 40,34 M58,46 C58,47.6 51.6,52.16 40,52.16 C28.4,52.16 22,47.6 22,46 C22,45.64 22.6,44.96 23.6,44.2 C28.24,42.84 33.76,42 40,42 C46.24,42 51.76,42.84 56.4,44.2 C57.4,44.96 58,45.64 58,46 M40,70 C20.48,70 8,61.72 8,56 C8,53.24 10.92,50 16.12,47.16 C17.2,53.32 27.48,58.16 40,58.16 C52.52,58.16 62.8,53.32 63.88,47.16 C69.08,50 72,53.24 72,56 C72,61.72 59.52,70 40,70 Z"/>
                        <path d="M40,30 L46,22 C44.3333333,20.75 42.25,20 40,20 C37.75,20 35.6666667,20.75 34,22 L40,30 M40,0 C33.25,0 27.0166667,2.23333333 22,6 L25,10 C29.1666667,6.86666667 34.3666667,5 40,5 C45.6333333,5 50.8333333,6.86666667 55,10 L58,6 C52.9833333,2.23333333 46.75,0 40,0 M40,10 C35.5,10 31.35,11.4833333 28,14 L31,18 C33.5,16.1166667 36.6166667,15 40,15 C43.3833333,15 46.5,16.1166667 49,18 L52,14 C48.65,11.4833333 44.5,10 40,10 Z"/>
                      </g>
                    </g>
                    <g transform="translate(226.000000, 46.000000)" font-family="sans-serif" font-size="18" font-weight="bold">
                      <text>
                        <tspan x="12.6879883" y="17">kitchen ceiling</tspan>
                      </text>
                    </g>
                  </g>
                  <g transform="translate(377.000000, 514.000000)" fill="#000000">
                    <g fill-rule="nonzero">
                      <g>
                        <path d="M40,34 C18,34 0,43.84 0,56 C0,68.16 18,78 40,78 C62,78 80,68.16 80,56 C80,43.84 62,34 40,34 M58,46 C58,47.6 51.6,52.16 40,52.16 C28.4,52.16 22,47.6 22,46 C22,45.64 22.6,44.96 23.6,44.2 C28.24,42.84 33.76,42 40,42 C46.24,42 51.76,42.84 56.4,44.2 C57.4,44.96 58,45.64 58,46 M40,70 C20.48,70 8,61.72 8,56 C8,53.24 10.92,50 16.12,47.16 C17.2,53.32 27.48,58.16 40,58.16 C52.52,58.16 62.8,53.32 63.88,47.16 C69.08,50 72,53.24 72,56 C72,61.72 59.52,70 40,70 Z"/>
                        <path d="M40,30 L46,22 C44.3333333,20.75 42.25,20 40,20 C37.75,20 35.6666667,20.75 34,22 L40,30 M40,0 C33.25,0 27.0166667,2.23333333 22,6 L25,10 C29.1666667,6.86666667 34.3666667,5 40,5 C45.6333333,5 50.8333333,6.86666667 55,10 L58,6 C52.9833333,2.23333333 46.75,0 40,0 M40,10 C35.5,10 31.35,11.4833333 28,14 L31,18 C33.5,16.1166667 36.6166667,15 40,15 C43.3833333,15 46.5,16.1166667 49,18 L52,14 C48.65,11.4833333 44.5,10 40,10 Z"/>
                      </g>
                      <g transform="translate(141.000000, 0.000000)">
                        <path d="M40,34 C18,34 0,43.84 0,56 C0,68.16 18,78 40,78 C62,78 80,68.16 80,56 C80,43.84 62,34 40,34 M58,46 C58,47.6 51.6,52.16 40,52.16 C28.4,52.16 22,47.6 22,46 C22,45.64 22.6,44.96 23.6,44.2 C28.24,42.84 33.76,42 40,42 C46.24,42 51.76,42.84 56.4,44.2 C57.4,44.96 58,45.64 58,46 M40,70 C20.48,70 8,61.72 8,56 C8,53.24 10.92,50 16.12,47.16 C17.2,53.32 27.48,58.16 40,58.16 C52.52,58.16 62.8,53.32 63.88,47.16 C69.08,50 72,53.24 72,56 C72,61.72 59.52,70 40,70 Z"/>
                        <path d="M40,30 L46,22 C44.3333333,20.75 42.25,20 40,20 C37.75,20 35.6666667,20.75 34,22 L40,30 M40,0 C33.25,0 27.0166667,2.23333333 22,6 L25,10 C29.1666667,6.86666667 34.3666667,5 40,5 C45.6333333,5 50.8333333,6.86666667 55,10 L58,6 C52.9833333,2.23333333 46.75,0 40,0 M40,10 C35.5,10 31.35,11.4833333 28,14 L31,18 C33.5,16.1166667 36.6166667,15 40,15 C43.3833333,15 46.5,16.1166667 49,18 L52,14 C48.65,11.4833333 44.5,10 40,10 Z"/>
                      </g>
                      <g transform="translate(0.000000, 87.000000)">
                        <path d="M40,34 C18,34 0,43.84 0,56 C0,68.16 18,78 40,78 C62,78 80,68.16 80,56 C80,43.84 62,34 40,34 M58,46 C58,47.6 51.6,52.16 40,52.16 C28.4,52.16 22,47.6 22,46 C22,45.64 22.6,44.96 23.6,44.2 C28.24,42.84 33.76,42 40,42 C46.24,42 51.76,42.84 56.4,44.2 C57.4,44.96 58,45.64 58,46 M40,70 C20.48,70 8,61.72 8,56 C8,53.24 10.92,50 16.12,47.16 C17.2,53.32 27.48,58.16 40,58.16 C52.52,58.16 62.8,53.32 63.88,47.16 C69.08,50 72,53.24 72,56 C72,61.72 59.52,70 40,70 Z"/>
                        <path d="M40,30 L46,22 C44.3333333,20.75 42.25,20 40,20 C37.75,20 35.6666667,20.75 34,22 L40,30 M40,0 C33.25,0 27.0166667,2.23333333 22,6 L25,10 C29.1666667,6.86666667 34.3666667,5 40,5 C45.6333333,5 50.8333333,6.86666667 55,10 L58,6 C52.9833333,2.23333333 46.75,0 40,0 M40,10 C35.5,10 31.35,11.4833333 28,14 L31,18 C33.5,16.1166667 36.6166667,15 40,15 C43.3833333,15 46.5,16.1166667 49,18 L52,14 C48.65,11.4833333 44.5,10 40,10 Z"/>
                      </g>
                      <g transform="translate(141.000000, 87.000000)">
                        <path d="M40,34 C18,34 0,43.84 0,56 C0,68.16 18,78 40,78 C62,78 80,68.16 80,56 C80,43.84 62,34 40,34 M58,46 C58,47.6 51.6,52.16 40,52.16 C28.4,52.16 22,47.6 22,46 C22,45.64 22.6,44.96 23.6,44.2 C28.24,42.84 33.76,42 40,42 C46.24,42 51.76,42.84 56.4,44.2 C57.4,44.96 58,45.64 58,46 M40,70 C20.48,70 8,61.72 8,56 C8,53.24 10.92,50 16.12,47.16 C17.2,53.32 27.48,58.16 40,58.16 C52.52,58.16 62.8,53.32 63.88,47.16 C69.08,50 72,53.24 72,56 C72,61.72 59.52,70 40,70 Z"/>
                        <path d="M40,30 L46,22 C44.3333333,20.75 42.25,20 40,20 C37.75,20 35.6666667,20.75 34,22 L40,30 M40,0 C33.25,0 27.0166667,2.23333333 22,6 L25,10 C29.1666667,6.86666667 34.3666667,5 40,5 C45.6333333,5 50.8333333,6.86666667 55,10 L58,6 C52.9833333,2.23333333 46.75,0 40,0 M40,10 C35.5,10 31.35,11.4833333 28,14 L31,18 C33.5,16.1166667 36.6166667,15 40,15 C43.3833333,15 46.5,16.1166667 49,18 L52,14 C48.65,11.4833333 44.5,10 40,10 Z"/>
                      </g>
                    </g>
                    <g transform="translate(221.000000, 45.000000)" font-family="sans-serif" font-size="18" font-weight="bold">
                      <text>
                        <tspan x="29.6948242" y="17">den ceiling</tspan>
                      </text>
                    </g>
                  </g>
                  <g transform="translate(729.000000, 160.000000)" fill="#000000">
                    <path d="M35,34 C54.3299662,34 70,49.6700338 70,69 C70,80.9 64.05,91.35 55,97.7 L55,109 C55,111.761424 52.7614237,114 50,114 L20,114 C17.2385763,114 15,111.761424 15,109 L15,97.7 C5.95,91.35 0,80.9 0,69 C0,49.6700338 15.6700338,34 35,34 M20,129 L20,124 L50,124 L50,129 C50,131.761424 47.7614237,134 45,134 L25,134 C22.2385763,134 20,131.761424 20,129 M35,44 C21.1928813,44 10,55.1928813 10,69 C10,79.25 16.15,88.05 25,91.9 L25,104 L45,104 L45,91.9 C53.85,88.05 60,79.25 60,69 C60,55.1928813 48.8071187,44 35,44 L35,44 Z" fill-rule="nonzero"/>
                    <path d="M35,30 L41,22 C39.3333333,20.75 37.25,20 35,20 C32.75,20 30.6666667,20.75 29,22 L35,30 M35,0 C28.25,0 22.0166667,2.23333333 17,6 L20,10 C24.1666667,6.86666667 29.3666667,5 35,5 C40.6333333,5 45.8333333,6.86666667 50,10 L53,6 C47.9833333,2.23333333 41.75,0 35,0 M35,10 C30.5,10 26.35,11.4833333 23,14 L26,18 C28.5,16.1166667 31.6166667,15 35,15 C38.3833333,15 41.5,16.1166667 44,18 L47,14 C43.65,11.4833333 39.5,10 35,10 Z" fill-rule="nonzero"/>
                    <g transform="translate(72.000000, 34.000000)" font-family="sans-serif" font-size="18" font-weight="bold">
                      <text>
                        <tspan x="6.0078125" y="17">kitchen counter</tspan>
                      </text>
                    </g>
                  </g>
                  <g transform="translate(15.000000, 394.000000)" fill="#000000">
                    <path d="M212,36.7272727 C210.181818,34.9090909 207.909091,34 205.636364,34 L151.090909,34 C148.818182,34 146.545455,34.9090909 144.727273,36.7272727 C142.909091,38.5454545 142,40.8181818 142,43.0909091 L142,124.909091 C142,127.181818 142.909091,129.454545 144.727273,131.272727 C146.545455,133.090909 148.818182,134 151.090909,134 L205.636364,134 C207.909091,134 210.181818,133.090909 212,131.272727 C213.818182,129.454545 214.727273,127.181818 214.727273,124.909091 L214.727273,43.0909091 C214.727273,40.8181818 213.818182,38.5454545 212,36.7272727 M205.636364,124.909091 L151.090909,124.909091 L151.090909,43.0909091 L205.636364,43.0909091 L205.636364,124.909091 M160.181818,56.7272727 L160.181818,111.272727 L196.545455,111.272727 L196.545455,56.7272727 L160.181818,56.7272727 M192,106.727273 L164.727273,106.727273 L164.727273,61.2727273 L192,61.2727273 L192,106.727273 M169.272727,93.0909091 L187.454545,93.0909091 L187.454545,102.181818 L169.272727,102.181818 L169.272727,93.0909091 Z" fill-rule="nonzero"/>
                    <path d="M178,30 L184,22 C182.333333,20.75 180.25,20 178,20 C175.75,20 173.666667,20.75 172,22 L178,30 M178,0 C171.25,0 165.016667,2.23333333 160,6 L163,10 C167.166667,6.86666667 172.366667,5 178,5 C183.633333,5 188.833333,6.86666667 193,10 L196,6 C190.983333,2.23333333 184.75,0 178,0 M178,10 C173.5,10 169.35,11.4833333 166,14 L169,18 C171.5,16.1166667 174.616667,15 178,15 C181.383333,15 184.5,16.1166667 187,18 L190,14 C186.65,11.4833333 182.5,10 178,10 Z" fill-rule="nonzero"/>
                    <g transform="translate(0.000000, 36.000000)">
                      <text font-family="sans-serif" font-size="18" font-weight="bold">
                        <tspan x="10.7573242" y="17">den switch</tspan>
                      </text>
                      <g transform="translate(6.000000, 28.000000)">
                        <text font-family="sans-serif" font-size="14" font-weight="normal">
                          <tspan x="43" y="33">den ceiling</tspan>
                          <tspan x="43" y="50">den</tspan>
                          <tspan x="43" y="67">all</tspan>
                        </text>
                        <text font-family="sans-serif" font-size="14" font-weight="normal">
                          <tspan x="14" y="33">1:</tspan>
                          <tspan x="14" y="50">2:</tspan>
                          <tspan x="14" y="67">3:</tspan>
                        </text>
                        <text font-family="sans-serif" font-size="12" font-weight="bold">
                          <tspan x="0" y="12">clicks</tspan>
                        </text>
                        <text font-family="sans-serif" font-size="12" font-weight="bold">
                          <tspan x="53" y="12">pub topic</tspan>
                        </text>
                      </g>
                    </g>
                  </g>
                  <g transform="translate(0.000000, 157.000000)" fill="#000000">
                    <path d="M227,36.7272727 C225.181818,34.9090909 222.909091,34 220.636364,34 L166.090909,34 C163.818182,34 161.545455,34.9090909 159.727273,36.7272727 C157.909091,38.5454545 157,40.8181818 157,43.0909091 L157,124.909091 C157,127.181818 157.909091,129.454545 159.727273,131.272727 C161.545455,133.090909 163.818182,134 166.090909,134 L220.636364,134 C222.909091,134 225.181818,133.090909 227,131.272727 C228.818182,129.454545 229.727273,127.181818 229.727273,124.909091 L229.727273,43.0909091 C229.727273,40.8181818 228.818182,38.5454545 227,36.7272727 M220.636364,124.909091 L166.090909,124.909091 L166.090909,43.0909091 L220.636364,43.0909091 L220.636364,124.909091 M175.181818,56.7272727 L175.181818,111.272727 L211.545455,111.272727 L211.545455,56.7272727 L175.181818,56.7272727 M207,106.727273 L179.727273,106.727273 L179.727273,61.2727273 L207,61.2727273 L207,106.727273 M184.272727,93.0909091 L202.454545,93.0909091 L202.454545,102.181818 L184.272727,102.181818 L184.272727,93.0909091 Z" fill-rule="nonzero"/>
                    <path d="M193,30 L199,22 C197.333333,20.75 195.25,20 193,20 C190.75,20 188.666667,20.75 187,22 L193,30 M193,0 C186.25,0 180.016667,2.23333333 175,6 L178,10 C182.166667,6.86666667 187.366667,5 193,5 C198.633333,5 203.833333,6.86666667 208,10 L211,6 C205.983333,2.23333333 199.75,0 193,0 M193,10 C188.5,10 184.35,11.4833333 181,14 L184,18 C186.5,16.1166667 189.616667,15 193,15 C196.383333,15 199.5,16.1166667 202,18 L205,14 C201.65,11.4833333 197.5,10 193,10 Z" fill-rule="nonzero"/>
                    <g transform="translate(0.000000, 39.000000)">
                      <text font-family="sans-serif" font-size="18" font-weight="bold">
                        <tspan x="5.75048828" y="17">kitchen switch</tspan>
                      </text>
                      <g transform="translate(0.000000, 28.000000)">
                        <text font-family="sans-serif" font-size="14" font-weight="normal">
                          <tspan x="43" y="33">kitchen counter</tspan>
                          <tspan x="43" y="50">kitchen</tspan>
                          <tspan x="43" y="67">all</tspan>
                        </text>
                        <text font-family="sans-serif" font-size="14" font-weight="normal">
                          <tspan x="14" y="33">1:</tspan>
                          <tspan x="14" y="50">2:</tspan>
                          <tspan x="14" y="67">3:</tspan>
                        </text>
                        <text font-family="sans-serif" font-size="12" font-weight="bold">
                          <tspan x="0" y="12">clicks</tspan>
                        </text>
                        <text font-family="sans-serif" font-size="12" font-weight="bold">
                          <tspan x="53" y="12">pub topic</tspan>
                        </text>
                      </g>
                    </g>
                  </g>
                </g>
                <text transform="translate(495.493721, 522.401608) rotate(90.000000) translate(-495.493721, -522.401608) " font-family="sans-serif" font-size="14" font-weight="bold" fill="#000000">
                  <tspan x="409.645088" y="527.901608">←sub</tspan>
                  <tspan x="450.031807" y="527.901608" font-family="sans-serif" font-weight="normal">: den ceiling, den, all       </tspan>
                </text>
                <text transform="translate(494.493721, 151.401608) rotate(-90.000000) translate(-494.493721, -151.401608) " font-family="sans-serif" font-size="14" font-weight="bold" fill="#000000">
                  <tspan x="384.617744" y="156.901608">←sub</tspan>
                  <tspan x="425.004463" y="156.901608" font-family="sans-serif" font-weight="normal">: kitchen ceiling, kitchen, all       </tspan>
                </text>
                <text transform="translate(639.777761, 324.322469) rotate(-18.000000) translate(-639.777761, -324.322469) " font-family="sans-serif" font-size="14" font-weight="bold" fill="#000000">
                  <tspan x="553.277761" y="321.322469">←sub</tspan>
                  <tspan x="593.664479" y="321.322469" font-family="sans-serif" font-weight="normal">: kitchen counter,</tspan>
                  <tspan x="553.277761" y="338.322469" font-family="sans-serif" font-weight="normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kitchen, all       </tspan>
                </text>
              </g>
            </svg>
          </artwork>
        </figure>
        <t>Clearly, a transport protocol able to exploit a physical network's broadcast capabilities would better suit this problem.
(Since unicast is just multicast restricted to peer sets of size 2, a multicast transport handles all unicast
use cases but the converse is not true.)
In the distributed systems literature, communication associated with coordinating shared objectives has
long been modeled as <em>distributed set reconciliation</em> <xref target="WegmanC81"/><xref target="Demers87"/>.
In this approach, each domain of discourse is a named set, e.g., <em>myhouse.iot</em>.
Each event or action, e.g., a switch button press, is added as a new element
to the instance of <em>myhouse.iot</em> at its point of origin then
the reconciliation process ensures that every instance of <em>myhouse.iot</em> has this element.
In 2000, <xref target="MINSKY03"/> developed a broadcast-capable set reconciliation algorithm whose
communication cost equaled the set instance <em>differences</em> (which is optimal)
but its polynomial computational cost impeded adoption.
In 2011, <xref target="DIFF"/> used Invertible Bloom Lookup Tables (IBLTs) <xref target="IBLT"/><xref target="MPSR"/>
to create a simple distributed set reconciliation algorithm
providing optimal in both communication and computational cost.
DeftT uses this algorithm
(see <xref target="syncps-a-set-reconciliation-protocol"/>) and takes advantage of IPv6's
self-configuring link local multicast to avoid all manual configuration and external dependencies.
This restores the system design to <xref target="fig1"/> where each device has a single, auto-configured transport that makes use
of the broadcast radio medium without need for a broker or multiple transport associations.
Each button push is broadcast exactly once to be added to the distributed set.</t>
      </section>
      <section anchor="securing-information">
        <name>Securing information</name>
        <t>Conventional session-based transports combine multiple publications with independent topics and purposes under a single session key, providing privacy by encrypting the sessions between endpoints. The credentials of endpoints (e.g., a website) are usually attested by a third party certificate authority (CA) and bound to a DNS name; each secure transport association requires the exchange of these credentials which allows for secure exchange of a nonce symmetric key. In <xref target="fig2"/> each transport session is a separate security association where each device needs to validate the broker's credential and the broker has to validate each device's. This ensures that transport associations are between two enrolled devices (protecting against outsider and some MITM attacks) but, once the transport session has been established there are no constraints whatsoever on what devices can say. Clearly, this does not protect against the insider attacks that currently plague OT, e.g., <xref target="CHPT"/> description of a lightbulb taking over a network. For example, the basic function of a light switch requires that it be allowed to tell a light to turn on or off but it almost certainly shouldn't be allowed to tell the light to overwrite its firmware (fwupd), even though "on/off" and "fwupd" are both standard capabilities of most smart light APIs. Once a TLS session is established, the transport handles "fwupd" publications <em>the same way</em> as "on/off" publications. Such attacks can be prevented using trust management that operates per-publication, using rules that enable the "fwupd" from the light switch to be rejected. Combining per-publication trust decisions with many-to-many communications over broadcast infrastructure requires per-publication signing rather than session-based signing.</t>
        <t>Securing each publication rather than the path it arrives on deals with a wider spectrum of threats while avoiding the quadratic session state and traffic burden. In OT, valid messages conform to rigid standards on syntax and semantics <xref target="IEC61850"/><xref target="ISO9506MMS"/><xref target="ONE"/><xref target="MATR"/><xref target="OSCAL"/><xref target="NMUD"/><xref target="ST"/><xref target="ZCL"/> that can be combined with site-specific requirements on identities and capabilities to create a system's communication rules. These rules can be employed to secure publications in a trust management system such as <xref target="DLOG"/> where each publisher is responsible for supplying all of the "who/what/where/when" information needed for each subscriber to <em>prove</em> the publication complies with system policies.</t>
        <t>Instead of vulnerable third-party CAs <xref target="W509"/>, sites employ a local root of trust and locally created certificates. When the communication rules are expressed in a <em>declarative</em> language <xref target="DLOG"/>, they can be validated for consistency and completeness then converted to a compact runtime form which can be authorized and secured via signing with the system trust anchor. This <em>communication schema</em> can be distributed as a certificate, then validated using on-device trusted enclaves <xref target="TPM"/><xref target="HSE"/><xref target="ATZ"/> as part of the device enrollment process. In DeftT's publication-based transport, the schema is used to both construct and validate publications, guaranteeing that <em>all</em> parts of the system <em>always</em> conform to and enforce the same rules, even as those rules evolve to meet new threats (more in <xref target="communications-schemas"/>). DeftT embeds the trust management mechanism described above directly in the publish and subscribe data paths as shown below:</t>
        <figure anchor="figte">
          <name>Trust management elements of DeftT.
</name>
          <artwork type="svg" originalSrc="figs/trustElements-rfc.svg"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="80%" height="80%" viewBox="0 0 359 278" version="1.1">
              <desc>trustElements</desc>
              <title>trustElements</title>
              <g stroke-width="1" fill="none" fill-rule="evenodd">
                <g transform="translate(12.000000, 183.000000)">
                  <rect stroke="black" x="0" y="0" width="96" height="72" rx="8"/>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                    <tspan x="4.50976562" y="33">Device-specific </tspan>
                    <tspan x="35.1220703" y="48">code</tspan>
                  </text>
                </g>
                <g transform="translate(162.000000, 125.000000)">
                  <g transform="translate(24.500000, 27.000000)" fill="#000000" fill-rule="nonzero">
                    <path d="M82,0 L82,25.591 L85.5642122,19.2548694 L86.4357878,19.7451306 L81.9357878,27.7451306 L81.5,28.5198644 L81.0642122,27.7451306 L76.5642122,19.7451306 L77.4357878,19.2548694 L81,25.591 L81,0 L82,0 Z"/>
                    <path d="M1,0 L1,64.591 L4.56421223,58.2548694 L5.43578777,58.7451306 L0.935787769,66.7451306 L0.5,67.5198644 L0.0642122314,66.7451306 L-4.43578777,58.7451306 L-3.56421223,58.2548694 L0,64.591 L0,0 L1,0 Z"/>
                  </g>
                  <rect stroke="black" fill="white" x="0" y="0" width="129" height="33"/>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                    <tspan x="18.5039062" y="12">Communication </tspan>
                    <tspan x="42.2138672" y="27">Schema</tspan>
                  </text>
                </g>
                <g transform="translate(108.000000, 193.000000)">
                  <rect stroke="black" fill="white" x="0" y="0" width="11" height="52" rx="5.5"/>
                  <text transform="translate(6.000000, 27.000000) rotate(90.000000) translate(-6.000000, -27.000000) " font-family="sans-serif" font-size="10" font-weight="normal" fill="#000000">
                    <tspan x="-5.90917969" y="31">Shim</tspan>
                  </text>
                </g>
                <g transform="translate(119.000000, 189.000000)">
                  <path d="M197.722015,42.904249 L209.738168,49.6254527 L211.289721,50.49331 L209.742348,51.3685988 L197.758569,58.1473563 L196.773869,56.4065616 L205.435,51.506 L197.255949,51.526967 L0.00239807464,51.9999971 L-0.00239807464,50.0000029 L197.251153,49.5269728 L205.431,49.507 L196.745676,44.6497465 L197.722015,42.904249 Z" fill="#000000" fill-rule="nonzero"/>
                  <path d="M13.7414307,4.35264372 L14.7261306,6.09343842 L6.064,10.993 L14.2440513,10.973033 L211.497602,10.5000029 L211.502398,12.4999971 L14.2488474,12.9730272 L6.068,12.992 L14.7543244,17.8502535 L13.7779849,19.595751 L1.76183243,12.8745473 L0.21027916,12.00669 L1.75765222,11.1314012 L13.7414307,4.35264372 Z" fill="#000000" fill-rule="nonzero"/>
                  <text font-family="sans-serif" font-size="9" font-weight="bold" fill="#000000">
                    <tspan x="19.425293" y="9">Subscribe</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="9" font-weight="bold" fill="#000000">
                    <tspan x="2.87670898" y="60">Publish</tspan>
                  </text>
                </g>
                <g transform="translate(195.000000, 183.000000)">
                  <rect stroke="black" fill="white" x="0" y="0" width="96" height="33" rx="8"/>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                    <tspan x="15.9404297" y="13">Publication </tspan>
                    <tspan x="21.8203125" y="28">Validator</tspan>
                  </text>
                </g>
                <g transform="translate(162.000000, 222.000000)">
                  <rect stroke="black" fill="white" x="0" y="0" width="96" height="33" rx="8"/>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                    <tspan x="15.9404297" y="13">Publication </tspan>
                    <tspan x="27.7822266" y="28">Builder</tspan>
                  </text>
                </g>
                <g transform="translate(327.000000, 164.000000)">
                  <g stroke="black">
                    <path d="M3,0 C6.42663109,6.75 6.42663109,8.25 3,15 C-0.426631091,21.75 -0.807367879,23.25 3,30 C6.80736788,36.75 6.80736788,37.5 3,45 C-0.807367879,52.5 -1.18810467,52.5 3,60 C7.18810467,67.5 6.80736788,68.25 3,75 C-0.807367879,81.75 -0.807367879,82.5 3,90 C6.80736788,97.5 7.18810467,97.5 3,105"/>
                    <path d="M6,0 C9.42663109,6.75 9.42663109,8.25 6,15 C2.57336891,21.75 2.19263212,23.25 6,30 C9.80736788,36.75 9.80736788,37.5 6,45 C2.19263212,52.5 1.81189533,52.5 6,60 C10.1881047,67.5 9.80736788,68.25 6,75 C2.19263212,81.75 2.19263212,82.5 6,90 C9.80736788,97.5 10.1881047,97.5 6,105"/>
                    <path d="M9,0 C12.4266311,6.75 12.4266311,8.25 9,15 C5.57336891,21.75 5.19263212,23.25 9,30 C12.8073679,36.75 12.8073679,37.5 9,45 C5.19263212,52.5 4.81189533,52.5 9,60 C13.1881047,67.5 12.8073679,68.25 9,75 C5.19263212,81.75 5.19263212,82.5 9,90 C12.8073679,97.5 13.1881047,97.5 9,105"/>
                    <path d="M12,0 C15.4266311,6.75 15.4266311,8.25 12,15 C8.57336891,21.75 8.19263212,23.25 12,30 C15.8073679,36.75 15.8073679,37.5 12,45 C8.19263212,52.5 7.81189533,52.5 12,60 C16.1881047,67.5 15.8073679,68.25 12,75 C8.19263212,81.75 8.19263212,82.5 12,90 C15.8073679,97.5 16.1881047,97.5 12,105"/>
                  </g>
                  <text transform="translate(23.000000, 54.500000) rotate(90.000000) translate(-23.000000, -54.500000) " font-family="sans-serif" font-size="14" font-weight="bold" fill="#000000">
                    <tspan x="-7.44042969" y="60">Network</tspan>
                  </text>
                </g>
                <path d="M185.431594,27.7475583 L197.147722,47.7783584 L200.22,53.031 L200.09779,45.7625463 L201.097648,45.7456898 L201.252371,54.9231655 L201.267354,55.8119281 L200.500037,55.3632095 L192.576627,50.7296836 L193.081435,49.8664522 L199.356,53.535 L196.284535,48.2832418 L184.568406,28.2524417 L185.431594,27.7475583 Z" fill="#000000" fill-rule="nonzero"/>
                <path d="M249.431594,27.7475583 L261.147722,47.7783584 L264.22,53.031 L264.09779,45.7625463 L265.097648,45.7456898 L265.252371,54.9231655 L265.267354,55.8119281 L264.500037,55.3632095 L256.576627,50.7296836 L257.081435,49.8664522 L263.356,53.535 L260.284535,48.2832418 L248.568406,28.2524417 L249.431594,27.7475583 Z" transform="translate(256.500000, 41.500000) scale(-1, 1) translate(-256.500000, -41.500000) " fill="#000000" fill-rule="nonzero"/>
                <path d="M222.05541,114.193267 L226.008,121.48 L230.182873,114.318305 L231.046804,114.821915 L226.424274,122.751746 L225.97662,123.519685 L225.552802,122.738339 L221.176396,114.670063 L222.05541,114.193267 Z M225.569341,117.488996 L226.569223,117.504378 L226.538457,119.504142 L225.538575,119.488759 L225.569341,117.488996 Z M225.630872,113.489469 L226.630754,113.504852 L226.615092,114.522851 L226.599988,115.504615 L225.600106,115.489232 L225.615211,114.507469 L225.630872,113.489469 Z M225.692403,109.489942 L226.692285,109.505325 L226.661519,111.505088 L225.661638,111.489706 L225.692403,109.489942 Z M225.753934,105.490415 L226.753816,105.505798 L226.723051,107.505562 L225.723169,107.490179 L225.753934,105.490415 Z M225.815466,101.490889 L226.815347,101.506272 L226.784582,103.506035 L225.7847,103.490652 L225.815466,101.490889 Z M225.876997,97.491362 L226.876878,97.5067448 L226.846113,99.5065082 L225.846231,99.4911254 L225.876997,97.491362 Z M225.938528,93.4918353 L226.93841,93.5072181 L226.907644,95.5069815 L225.907762,95.4915987 L225.938528,93.4918353 Z M226.000059,89.4923086 L226.999941,89.5076914 L226.969175,91.5074548 L225.969294,91.492072 L226.000059,89.4923086 Z" fill="#000000" fill-rule="nonzero"/>
                <g transform="translate(177.000000, 57.000000)">
                  <rect stroke="black" fill="white" x="0" y="0" width="99" height="35" rx="8"/>
                  <text font-family="sans-serif" font-size="10" font-weight="normal" fill="#000000">
                    <tspan x="7.77832031" y="14">Schema Compiler</tspan>
                  </text>
                </g>
                <g transform="translate(148.000000, 5.000000)">
                  <ellipse stroke="black" fill="white" cx="37.5" cy="18" rx="37.5" ry="18"/>
                  <text font-family="sans-serif" font-size="10" font-weight="normal" fill="#000000">
                    <tspan x="13.6250977" y="22.2173913">Site Policy</tspan>
                  </text>
                </g>
                <g transform="translate(229.000000, 5.000000)">
                  <ellipse stroke="black" fill="white" cx="37.5" cy="18" rx="37.5" ry="18"/>
                  <text font-family="sans-serif" font-size="10" font-weight="normal" fill="#000000">
                    <tspan x="16.4716797" y="14">Standard </tspan>
                    <tspan x="5.53173828" y="26">Conformance </tspan>
                  </text>
                </g>
                <text font-family="sans-serif" font-size="14" font-weight="normal" fill="#000000">
                  <tspan x="42.9111328" y="26">Requirements:</tspan>
                </text>
                <path d="M13,110 L291,110 C295.418278,110 299,113.581722 299,118 L299,261 C299,265.418278 295.418278,269 291,269 L13,269 C8.581722,269 5,265.418278 5,261 L5,118 C5,113.581722 8.581722,110 13,110 Z" stroke="black" stroke-dasharray="3"/>
                <text font-family="sans-serif" font-size="14" font-weight="bold" fill="#000000">
                  <tspan x="13.0229492" y="127">On-Device App</tspan>
                </text>
                <g transform="translate(281.000000, 146.000000)" fill="#000000" fill-rule="nonzero">
                  <path d="M4,8 C3.445,8 3,7.55 3,7 C3,6.445 3.445,6 4,6 C4.55228475,6 5,6.44771525 5,7 C5,7.55228475 4.55228475,8 4,8 M7,9.5 L7,4.5 L1,4.5 L1,9.5 L7,9.5 M7,3.5 C7.55228475,3.5 8,3.94771525 8,4.5 L8,9.5 C8,10.0522847 7.55228475,10.5 7,10.5 L1,10.5 C0.445,10.5 0,10.05 0,9.5 L0,4.5 C0,3.945 0.445,3.5 1,3.5 L1.5,3.5 L1.5,2.5 C1.5,1.11928813 2.61928813,0 4,0 C4.66304122,0 5.29892601,0.263392101 5.76776695,0.732233047 C6.2366079,1.20107399 6.5,1.83695878 6.5,2.5 L6.5,3.5 L7,3.5 M4,1 C3.17157288,1 2.5,1.67157288 2.5,2.5 L2.5,3.5 L5.5,3.5 L5.5,2.5 C5.5,1.67157288 4.82842712,1 4,1 Z"/>
                </g>
              </g>
            </svg>
          </artwork>
        </figure>
        <t>This approach extends LangSec's <xref target="LANG"/> "be definite in what you accept" principle by using the authenticated common ruleset for belt-and-suspenders enforcement at both publication and subscription functions of the transport.
If an application asks the Publication Builder to publish something and the schema shows it lacks credentials, an error is thrown and nothing is published.
Independently, the Publication Validator ignores publications that:</t>
        <ul spacing="compact">
          <li>don't have a locally validated,
complete signing chain for the credential that signed it</li>
          <li>the schema shows its signing chain isn't appropriate for this publication</li>
          <li>have a publication signature that doesn't validate</li>
        </ul>
        <t>Note that since an application's subscriptions determine which publications it wants, only
certificates from chains that can sign publications matching the subscriptions need to be validated or retained.
Thus a device's communication state burden and computation costs are a function of how many different things
are allowed to talk to it but <em>not</em> how many things it talks to or the total number of devices in the system.
In particular, event driven, publish-only devices like sensors spend no time or space on validation.
Unlike most 'secure' systems, adding additional constraints to schemas to reduce attack surface results in devices doing <em>less</em> work.</t>
      </section>
      <section anchor="defined-trust-communications-domains">
        <name>Defined-trust Communications Domains</name>
        <t>A Defined-trust Communications Limited Domain (or simply, <em>trust domain</em>) is a Limited Domain where all the members communicate via a DeftT <xref target="figtd"/> and are configured with the same trust anchor, schema, a schema-conformant DeftT identity cert chain that terminates at the trust anchor and the secret key corresponding to the identity chain's leaf cert. The particular rules for any deployment are application-specific (e.g., Is it home IoT or a nuclear power plant?) and site-specific (specific form of credential and idiosyncrasies in rules) which DeftT accommodates by being invoked with a ruleset (schema) particular to a deployment. We anticipate that the efforts to create common data models (e.g., <xref target="ONE"/>) for specific sectors will lead to easier and more forms-based configuration of DeftT deployments.</t>
        <t>A trust domain is perimeterless and may operate over one or more subnets, sharing physical media with non-member entities. Member entities throughout the domain publish and subscribe to its topics using Publication Builders and Validators as shown in <xref target="figte"/>. These Publications become the elements of a set, or named collection, that is confined to each subnet. DeftT uses a distributed set reconciliation protocol on <em>each</em> collection and <em>each</em> subnet independently. Every DeftT maintains at least two collections: <strong>pubs</strong> for application Publications and <strong>cert</strong> where identity bundle certs are published. <xref target="figtd"/></t>
        <figure anchor="figtd">
          <name>Trust domain
</name>
          <artwork type="svg" originalSrc="figs/trustdomain-rfc.svg"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="80%" height="80%" viewBox="0 0 467 239" version="1.1">
              <desc>trustdomain</desc>
              <title>trustdomain</title>
              <g stroke-width="1" fill="none" fill-rule="evenodd">
                <path d="M53.6635,132.2127 C-26.5,119 5.4672,7.7711 133.3459,26.75 C145.2102,-10.2459 293.916,-4.2411 292.9438,26.75 C386.1869,-12.888 505.346,66.1494 425.4205,105.7873 C521.327,125.0049 424.2102,228.5463 345.5,211.25 C339.2008,240.0787 198.4906,250.1672 186.1402,211.25 C106.4627,252.8117 -59.6774,188.9083 53.6635,132.2127 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                <path d="M162,101 L388,101 C392.9706,101 397,105.0294 397,110 L397,188.448 C397,193.4186 392.9706,197.448 388,197.448 L162,197.448 C157.0294,197.448 153,193.4186 153,188.448 L153,110 C153,105.0294 157.0294,101 162,101 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="4,4"/>
                <polygon fill="white" stroke="black" stroke-linecap="round" stroke-linejoin="round" points="400.56 26 420.56 26 420.56 46 400.56 46"/>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="403.592" y="41.1361074">M</tspan>
                </text>
                <polygon fill="white" stroke="black" stroke-linecap="round" stroke-linejoin="round" points="1 94.448 21 94.448 21 114.448 1 114.448"/>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="4.032" y="109.584107">M</tspan>
                </text>
                <polygon fill="white" stroke="black" stroke-linecap="round" stroke-linejoin="round" points="312 13 332 13 332 33 312 33"/>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="315.032" y="28.1361074">M</tspan>
                </text>
                <polygon fill="white" stroke="black" stroke-linecap="round" stroke-linejoin="round" points="418 173 438 173 438 193 418 193"/>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="421.032" y="188.136107">M</tspan>
                </text>
                <polygon fill="white" stroke="black" stroke-linecap="round" stroke-linejoin="round" points="91.5 13 111.5 13 111.5 33 91.5 33"/>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="94.532" y="28.1361074">M</tspan>
                </text>
                <polygon fill="white" stroke="black" stroke-linecap="round" stroke-linejoin="round" points="13 33 33 33 33 53 13 53"/>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="16.032" y="48.1361074">M</tspan>
                </text>
                <polygon fill="white" stroke="black" stroke-linecap="round" stroke-linejoin="round" points="6 169 26 169 26 189 6 189"/>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="9.032" y="184.136107">M</tspan>
                </text>
                <path d="M231.2,129.448 L334.8,129.448 C347.0544,129.448 357,136.5049 357,145.2 C357,153.8951 347.0544,160.952 334.8,160.952 L231.2,160.952 C218.9456,160.952 209,153.8951 209,145.2 C209,136.5049 218.9456,129.448 231.2,129.448 Z" fill="#FFFFFF"/>
                <path d="M231.2,129.448 L334.8,129.448 C347.0544,129.448 357,136.5049 357,145.2 C357,153.8951 347.0544,160.952 334.8,160.952 L231.2,160.952 C218.9456,160.952 209,153.8951 209,145.2 C209,136.5049 218.9456,129.448 231.2,129.448 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="225.808" y="149.336107">collection /pubs</tspan>
                </text>
                <path d="M266.2,156.448 L369.8,156.448 C382.0544,156.448 392,163.50489 392,172.2 C392,180.8951 382.0544,187.952 369.8,187.952 L266.2,187.952 C253.9456,187.952 244,180.8951 244,172.2 C244,163.50489 253.9456,156.448 266.2,156.448 Z" fill="#FFFFFF"/>
                <path d="M266.2,156.448 L369.8,156.448 C382.0544,156.448 392,163.5049 392,172.2 C392,180.8951 382.0544,187.952 369.8,187.952 L266.2,187.952 C253.9456,187.952 244,180.8951 244,172.2 C244,163.5049 253.9456,156.448 266.2,156.448 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="260.968" y="177.336107">collection /cert</tspan>
                </text>
                <text transform="translate(89.975920, 166.492658) rotate(-20.000000) translate(-89.975920, -166.492658) " font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                  <tspan x="41.9759195" y="170.492658">publish/subscribe</tspan>
                </text>
                <line x1="39.2486" y1="174.6128" x2="131.1147" y2="139.5318" stroke="black" stroke-linecap="square"/>
                <polygon fill="black" stroke="black" points="138.5883 136.6778 130.0444 136.7292 132.1849 142.3344"/>
                <polygon fill="black" stroke="black" points="31.775 177.4667 40.3188 177.4154 38.1784 171.8102"/>
                <text font-family="sans-serif" font-size="16" font-weight="bold" fill="#000000">
                  <tspan x="164" y="27">Trust Domain</tspan>
                </text>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="161" y="118">subnet set reconciliation</tspan>
                </text>
              </g>
            </svg>
          </artwork>
        </figure>
        <t>Trust domains are extended across physically separated subnets, subnets using different media and/or subdomains on the same subnet (see <xref target="schema-based-information-movement"/>) by using <strong>Relays</strong> that have a DeftT in each subnet and pass Publications between subnets as long as they are valid at the receiving DeftT <xref target="figrtd"/>. Since set reconciliation does not accept duplicates, Relays are powerful elements in creating efficient configuration-free meshes. The subnets of the figure could be different colocated media (e.g. bluetooth, wifi, ethernet) or may be physically distant. The triangle Relay-only subnet can be carried over a unicast link. The set reconciliation protocol ensures that items only transit a subnet once: an item must be specifically requested in order to be transmitted. More Relay discussion is in <xref target="schema-based-information-movement"/> and <xref target="use-cases"/>.</t>
        <figure anchor="figrtd">
          <name>Relayed trust domain
</name>
          <artwork type="svg" originalSrc="figs/relayedtrustdomain-rfc.svg"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="80%" height="80%" viewBox="0 0 999 449" version="1.1">
              <desc>relayedtrustdomain</desc>
              <title>relayedtrustdomain</title>
              <g stroke-width="1" fill="none" fill-rule="evenodd">
                <path d="M86.0248,249.0289 C-68.9688,224 -7.1612,13.2981 240.0882,49.25 C263.0275,-20.83174 550.5453,-9.45668 548.6656,49.25 C728.948,-25.83658 959.338,123.8846 804.805,198.9711 C990.237,235.3751 802.465,431.5145 650.2812,398.75 C638.1019,453.3605 366.0432,472.4712 342.1641,398.75 C188.1104,477.4807 -133.1163,356.4279 86.0248,249.0289 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                <path d="M188,293 L280,293 C284.9706,293 289,296.365857 289,300.517922 L289,352.482078 C289,356.634118 284.9706,360 280,360 L188,360 C183.0294,360 179,356.634118 179,352.482078 L179,300.517922 C179,296.365857 183.0294,293 188,293 Z" stroke="black" fill="none"/>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="214.152" y="347.240307">Relay</tspan>
                </text>
                <polygon stroke="black" fill="#FFFFFF" points="574 102 589 117 574 132 559 117"/>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="567.05" y="122.836107">M</tspan>
                </text>
                <polygon stroke="black" fill="white" points="259 155 279 155 279 135 259 135"/>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="262.032" y="150.136107">M</tspan>
                </text>
                <polygon stroke="black" fill="white" points="203 177 223 177 223 157 203 157"/>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="206.032" y="172.136107">M</tspan>
                </text>
                <polygon stroke="black" fill="white" points="179 117 199 117 199 97 179 97"/>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="182.032" y="112.136107">M</tspan>
                </text>
                <polygon stroke="black" fill="white" points="234 242 254 242 254 222 234 222"/>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="237.032" y="237.136107">M</tspan>
                </text>
                <polygon stroke="black" fill="white" points="118.5 144 138.5 144 138.5 124 118.5 124"/>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="121.532" y="139.136107">M</tspan>
                </text>
                <polygon stroke="black" fill="white" points="138 231 158 231 158 211 138 211"/>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="141.032" y="226.136107">M</tspan>
                </text>
                <polygon stroke="black" fill="white" points="54 313 74 313 74 293 54 293"/>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="57.032" y="308.136107">M</tspan>
                </text>
                <polygon stroke="black" fill="#FFFFFF" points="722 206 737 221 722 236 707 221"/>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="715.05" y="226.836107">M</tspan>
                </text>
                <polygon stroke="black" fill="#FFFFFF" points="531 275 546 290 531 305 516 290"/>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="524.05" y="295.836107">M</tspan>
                </text>
                <polygon stroke="black" fill="#FFFFFF" points="615 320 630 335 615 350 600 335"/>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="608.05" y="340.836107">M</tspan>
                </text>
                <polygon stroke="black" fill="#FFFFFF" points="671 263 686 278 671 293 656 278"/>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="664.05" y="283.836107">M</tspan>
                </text>
                <polygon stroke="black" fill="none" points="522 200 530 200 536 206 536 214 530 220 522 220 516 214 516 206"/>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="519.032" y="215.136107">M</tspan>
                </text>
                <polygon stroke="black" fill="none" points="446 264 454 264 460 270 460 278 454 284 446 284 440 278 440 270"/>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="443.032" y="279.136107">M</tspan>
                </text>
                <polygon stroke="black" fill="none" points="417 320 425 320 431 326 431 334 425 340 417 340 411 334 411 326"/>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="414.032" y="335.136107">M</tspan>
                </text>
                <polygon stroke="black" fill="none" points="360 372 368 372 374 378 374 386 368 392 360 392 354 386 354 378"/>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="357.032" y="387.136107">M</tspan>
                </text>
                <polygon stroke="black" fill="none" points="522 372 530 372 536 378 536 386 530 392 522 392 516 386 516 378"/>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="519.032" y="387.136107">M</tspan>
                </text>
                <polygon stroke="black" fill="none" points="477 159 485 159 491 165 491 173 485 179 477 179 471 173 471 165"/>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="474.032" y="174.136107">M</tspan>
                </text>
                <polygon stroke="black" fill="none" points="193 324 213 324 213 304 193 304"/>
                <polygon stroke="black" fill="none" points="230 304 238 304 244 310 244 318 238 324 230 324 224 318 224 310"/>
                <polygon stroke="black" fill="#000000" points="253 324 265.5 299 278 324"/>
                <polygon stroke="black" fill="none" points="903 195 923 195 923 175 903 175"/>
                <polygon stroke="black" fill="#FFFFFF" points="909 214 917 214 923 220 923 228 917 234 909 234 903 228 903 220"/>
                <polygon stroke="black" fill="#000000" points="900.5 271 913 246 925.5 271"/>
                <path d="M647,86 L739,86 C743.9706,86 748,89.3658586 748,93.5179252 L748,145.482075 C748,149.634141 743.9706,153 739,153 L647,153 C642.0294,153 638,149.634141 638,145.482075 L638,93.5179252 C638,89.3658586 642.0294,86 647,86 Z" stroke="black" fill="none"/>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="673.152" y="141.240307">Relay</tspan>
                </text>
                <polygon stroke="black" fill="none" points="689 100 697 100 703 106 703 114 697 120 689 120 683 114 683 106"/>
                <polygon stroke="black" fill="black" points="712 120 724.5 95 737 120"/>
                <polygon stroke="black" fill="#FFFFFF" points="913 130 928 145 913 160 898 145"/>
                <polygon stroke="black" fill="#FFFFFF" points="660 95 675 110 660 125 645 110"/>
                <text font-family="sans-serif" font-size="18" font-weight="bold" fill="#000000">
                  <tspan x="344" y="40.0301208">Trust Domain</tspan>
                </text>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="936.456" y="147.912107">subnet 1</tspan>
                </text>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="936.456" y="187.636107">subnet 2</tspan>
                </text>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="936.456" y="227.360107">subnet 3</tspan>
                </text>
                <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                  <tspan x="936.456" y="267.084107">subnet 4</tspan>
                </text>
              </g>
            </svg>
          </artwork>
        </figure>
      </section>
      <section anchor="current-status">
        <name>Current status</name>
        <t>An open-source Defined-trust Communications Toolkit <xref target="DCT"/> with an example implementation of DeftT is maintained by the corresponding author's company. <xref target="DCT"/> has examples of using DeftT to implement secure brokerless message-based pub/sub using UDP/IPv6 multicast and unicast UDP/TCP and include extending a Trust Domain via a unicast connection or between two broadcast network segments. Working implementations and performance improvements are occasionally added to the repository.</t>
        <t>Massive build out of the renewable energy sector is driving connectivity needs for both monitoring and control. Author King's company, Operant, is currently developing extensions of DeftT in a  mix of open-source and proprietary software tailored for commercial deployment in support of distributed energy resources (DER). Current small scale use cases have performed well and expanded usage is planned. Pollere is also working on home IoT uses. Our development philosophy is to start from solving useful problems with a well-defined scope and extend from there.
As the needs of our use cases expand, the Defined-trust communications framework will evolve with increased efficiencies.  DeftT's code is open source, as befits any communications protocol, but even more critical for one attempting to offer security. DCT itself makes use of the open source cryptographic library libsodium <xref target="SOD"/> and the project is open to feedback on potential security issues as well as hearing from potential collaborators.</t>
        <t>The well-known issues with 802.11 multicast <xref target="RFC9119"/> can make DeftT less efficient than it should be. Target OT deployments
primarily use smaller packet sizes and DeftT's set reconciliation provides robust delivery that currently mitigates these concerns.
DeftT use may become another force for improved multicast on 802.11, joining the critical network infrastructure
applications of neighbor discovery, address resolution, DHCP, etc.</t>
        <t>Cryptographic signing takes most of the application-to-network time in DeftT. Though not prohibitively costly, increased use
of signing in transports may incentivize creation of more efficient signing algorithms.</t>
      </section>
    </section>
    <section anchor="deftt-and-defined-trust-communications">
      <name>DeftT and Defined-trust Communications</name>
      <t>DeftT synchronizes and secures communications between enrolled members of a Limited Domain <xref target="RFC8799"/>.  DeftT's multi-party synchronized collections of named, schema-conformant Publications contrast with the bilateral session of TCP or QUIC where a source and a destination coordinate with one another to transport undifferentiated streams of information. DeftTs in a trust domain may hold different subsets of the collection at any time (e.g., immediately after entities add elements to the collection) but the synchronization protocol ensures all converge to holding the complete set of elements within a few round-trip-times following the changes.</t>
      <t>Applications use DeftT to add to and access from a collection of Publications. DeftT enforces "who can say what to which" as well as providing required integrity, authenticity and confidentiality.
Transparently to applications, a DeftT both constructs and validates all Publications against its schema's formal, validated rules. The compiled binary communications schema is distributed as a trust-root-signed certificate and that certificate's thumbprint (see <xref target="certificates"/> and <xref target="terms"/>) <em>uniquely</em> identifies each trust domain. Each DeftT is configured with the trust anchor used in the domain, the schema cert, and its own credentials for membership in the domain. To communicate, DeftTs must be in the same domain. Identity credentials comprise a unique private identity key along with a public certificate chain rooted at the domain's trust anchor. Certificates in identity chains are specified in the schema and contain the attributes granted to the identity. Thus, attributes are stored in the identity <strong>not</strong> on an external server.</t>
      <t>Each member publishes its credentials to the certificate collection in order to join the domain. DeftT validates credentials as a certificate chain against the schema and does not accept Publications without a fully validated signer. This unique approach enables fully distributed policy enforcement without a secured-perimeter physical network and/or extensive per-device configuration. DeftT can share an IP network with non-DeftT traffic as well as DeftT traffic of a different omain. Privacy via AEAD encryption is automatically handled within DeftT if selected in the schema.</t>
      <figure anchor="fig4">
        <name>DeftT's interaction in a network stack
</name>
        <artwork type="svg" originalSrc="figs/transportBD0v2-rfc.svg"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="80%" height="80%" viewBox="0 0 408 140" version="1.1">
            <desc>transportBD0</desc>
            <title>transportBD0v2</title>
            <g stroke-width="1" fill="none" fill-rule="evenodd">
              <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="1 46.5 76.556 46.5 76.556 90 1 90"/>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="8.664" y="69.1020806">Application</tspan>
              </text>
              <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="308.708 21.3403 406.708 21.3403 406.708 115.8318 308.708 115.8318"/>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="336.144" y="55.1020806">system-</tspan>
              </text>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="334.146" y="69.4380806">p</tspan>
                <tspan x="341.526" y="69.4380806">r</tspan>
                <tspan x="346.026" y="69.4380806">ovided</tspan>
              </text>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="333.372" y="83.7740806">transport</tspan>
              </text>
              <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="149.296 18 226.424 18 226.424 114.549 149.296 114.549"/>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="173.304" y="67.1265806">DeftT</tspan>
              </text>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="81" y="88.8970806">information</tspan>
              </text>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="85.002" y="101.233081">to convey</tspan>
              </text>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="81" y="40.0200806">information</tspan>
              </text>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="86.558" y="52.3560806">of inte</tspan>
                <tspan x="122.678" y="52.3560806">r</tspan>
                <tspan x="127.178" y="52.3560806">est</tspan>
              </text>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="238.112" y="16.0200806">local adds </tspan>
              </text>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="232.892" y="28.3560806">to collection</tspan>
              </text>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="238.264" y="114.454581">others’ adds</tspan>
              </text>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="239.05" y="126.790581">to collection</tspan>
              </text>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="247.866" y="63.9873806">state of</tspan>
              </text>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="242.202" y="78.3232806">collection</tspan>
              </text>
              <path d="M136.309343,69.8190816 L136.745131,70.0642122 L144.745131,74.5642122 L145.519864,75 L144.745131,75.4357878 L136.745131,79.9357878 L136.309343,80.1809184 L135.819082,79.3093429 L136.254869,79.0642122 L142.591,75.5 L78.5,75.5 L78.5,74.5 L142.591,74.5 L136.254869,70.9357878 L135.819082,70.6906571 L136.309343,69.8190816 Z" fill="#000000" fill-rule="nonzero"/>
              <path d="M297.309343,27.8190816 L297.745131,28.0642122 L305.745131,32.5642122 L306.519864,33 L305.745131,33.4357878 L297.745131,37.9357878 L297.309343,38.1809184 L296.819082,37.3093429 L297.254869,37.0642122 L303.591,33.5 L227.5,33.5 L227.5,32.5 L303.591,32.5 L297.254869,28.9357878 L296.819082,28.6906571 L297.309343,27.8190816 Z" fill="#000000" fill-rule="nonzero"/>
              <path d="M297.309343,62.8190816 L297.745131,63.0642122 L305.745131,67.5642122 L306.519864,68 L305.745131,68.4357878 L297.745131,72.9357878 L297.309343,73.1809184 L296.819082,72.3093429 L297.254869,72.0642122 L303.591,68.5 L231.41,68.5 L237.745131,72.0642122 L238.180918,72.3093429 L237.690657,73.1809184 L237.254869,72.9357878 L229.254869,68.4357878 L228.480136,68 L229.254869,67.5642122 L237.254869,63.0642122 L237.690657,62.8190816 L238.180918,63.6906571 L237.745131,63.9357878 L231.406,67.5 L303.591,67.5 L297.254869,63.9357878 L296.819082,63.6906571 L297.309343,62.8190816 Z" fill="#000000" fill-rule="nonzero"/>
              <path d="M237.690657,98.8190816 L238.180918,99.6906571 L237.745131,99.9357878 L231.406,103.5 L307.5,103.5 L307.5,104.5 L231.41,104.5 L237.745131,108.064212 L238.180918,108.309343 L237.690657,109.180918 L237.254869,108.935788 L229.254869,104.435788 L228.480136,104 L229.254869,103.564212 L237.254869,99.0642122 L237.690657,98.8190816 Z" fill="#000000" fill-rule="nonzero"/>
              <path d="M87.1906571,52.3190816 L87.6809184,53.1906571 L87.2451306,53.4357878 L80.908,57 L146,57 L146,58 L80.908,58 L87.2451306,61.5642122 L87.6809184,61.8093429 L87.1906571,62.6809184 L86.7548694,62.4357878 L78.7548694,57.9357878 L77.9801356,57.5 L78.7548694,57.0642122 L86.7548694,52.5642122 L87.1906571,52.3190816 Z" fill="#000000" fill-rule="nonzero"/>
            </g>
          </svg>
        </artwork>
      </figure>
      <t><xref target="fig4"/> shows the data flow in and out of a DeftT. DeftT uses its schema to package application information into Publications that are added to its local view of the collection. Application information is packaged in Publications which are carried in cAdd PDUs that are used along with cState PDUs to communicate about and synchronize Collections. cStates are used to report the state of the local collection; cAdds carry Publications to other members that need them. These PDUs are broadcast on their subnet (e.g., UDP multicast).</t>
      <section anchor="inside-deftt">
        <name>Inside DeftT</name>
        <t>DeftT's reference implementation <xref target="DCT"/> is organized in functional library modules that interact to prepare application-level information for transport and to extract application-level information from packets, see <xref target="fig13"/>. Extensions and alternate module implementations are possible but the functionality and interfaces must be preserved. Internals of DeftT are completely transparent to an application and the reference implementation is efficient in both lines of code and performance. The schema determines which modules are used. A DeftT participates in two required collections and <em>may</em> participate in others if required by the schema-designated signature managers. One of the required collections, descriptive collection name component <strong>pubs</strong>, contains application Publications  (see <xref target="table2"/>). The other required collection, <strong>cert</strong>, manages the certificates of the trust domain. Specific signature managers <em>may</em> require group key distribution in descriptively named collection <strong>keys</strong>.</t>
        <figure anchor="fig13">
          <name>Run-time library modules
</name>
          <artwork type="svg" originalSrc="figs/DeftTmodules-rfc.svg"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="80%" height="80%" viewBox="0 0 569 344" version="1.1">
              <desc>DeftTmodules</desc>
              <title>DeftTmodules</title>
              <g stroke-width="1" fill="none" fill-rule="evenodd">
                <g transform="translate(2.500000, 4.000000)">
                  <path d="M0,26 L563.5,26 L563.5,313 L0,313 L0,26 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="4,4"/>
                  <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="132.5 143 252.5 143 252.5 198 132.5 198"/>
                  <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="429.5 189 549.5 189 549.5 244 429.5 244"/>
                  <g transform="translate(137.500000, 146.000000)" fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold">
                    <g>
                      <text>
                        <tspan x="32.886" y="13">syncps</tspan>
                        <tspan x="73.41" y="13.0239868" font-family="sans-serif" font-weight="normal">:</tspan>
                        <tspan x="0" y="28.0239868" font-family="sans-serif" font-weight="normal">set synchronization </tspan>
                        <tspan x="6.012" y="43.0239868" font-family="sans-serif" font-weight="normal">pub/sub protocol</tspan>
                      </text>
                      <text>
                        <tspan x="329.886" y="59">syncps</tspan>
                        <tspan x="370.41" y="59.0239868" font-family="sans-serif" font-weight="normal">:</tspan>
                        <tspan x="297" y="74.0239868" font-family="sans-serif" font-weight="normal">set synchronization </tspan>
                        <tspan x="303.012" y="89.0239868" font-family="sans-serif" font-weight="normal">pub/sub protocol</tspan>
                      </text>
                    </g>
                  </g>
                  <path d="M193,-1.01986443 L193.435788,-0.24513062 L197.935788,7.75486938 L198.180918,8.19065715 L197.309343,8.68091839 L197.064212,8.24513062 L193.5,1.908 L193.5,37.091 L197.064212,30.7548694 L197.309343,30.3190816 L198.180918,30.8093429 L197.935788,31.2451306 L193.435788,39.2451306 L193,40.0198644 L192.564212,39.2451306 L188.064212,31.2451306 L187.819082,30.8093429 L188.690657,30.3190816 L188.935788,30.7548694 L192.5,37.091 L192.5,1.908 L188.935788,8.24513062 L188.690657,8.68091839 L187.819082,8.19065715 L188.064212,7.75486938 L192.564212,-0.24513062 L193,-1.01986443 Z" fill="#000000" fill-rule="nonzero"/>
                  <path d="M193,297.980136 L193.435788,298.754869 L197.935788,306.754869 L198.180918,307.190657 L197.309343,307.680918 L197.064212,307.245131 L193.5,300.908 L193.5,336.091 L197.064212,329.754869 L197.309343,329.319082 L198.180918,329.809343 L197.935788,330.245131 L193.435788,338.245131 L193,339.019864 L192.564212,338.245131 L188.064212,330.245131 L187.819082,329.809343 L188.690657,329.319082 L188.935788,329.754869 L192.5,336.091 L192.5,300.908 L188.935788,307.245131 L188.690657,307.680918 L187.819082,307.190657 L188.064212,306.754869 L192.564212,298.754869 L193,297.980136 Z" fill="#000000" fill-rule="nonzero"/>
                  <path d="M193,198.980136 L193.435788,199.754869 L197.935788,207.754869 L198.180918,208.190657 L197.309343,208.680918 L197.064212,208.245131 L193.5,201.908 L193.5,234.091 L197.064212,227.754869 L197.309343,227.319082 L198.180918,227.809343 L197.935788,228.245131 L193.435788,236.245131 L193,237.019864 L192.564212,236.245131 L188.064212,228.245131 L187.819082,227.809343 L188.690657,227.319082 L188.935788,227.754869 L192.5,234.091 L192.5,201.908 L188.935788,208.245131 L188.690657,208.680918 L187.819082,208.190657 L188.064212,207.754869 L192.564212,199.754869 L193,198.980136 Z" fill="#000000" fill-rule="nonzero"/>
                  <path d="M193,106.980136 L193.435788,107.754869 L197.935788,115.754869 L198.180918,116.190657 L197.309343,116.680918 L197.064212,116.245131 L193.5,109.908 L193.5,139.091 L197.064212,132.754869 L197.309343,132.319082 L198.180918,132.809343 L197.935788,133.245131 L193.435788,141.245131 L193,142.019864 L192.564212,141.245131 L188.064212,133.245131 L187.819082,132.809343 L188.690657,132.319082 L188.935788,132.754869 L192.5,139.091 L192.5,109.908 L188.935788,116.245131 L188.690657,116.680918 L187.819082,116.190657 L188.064212,115.754869 L192.564212,107.754869 L193,106.980136 Z" fill="#000000" fill-rule="nonzero"/>
                  <path d="M490,165.980136 L490.435788,166.754869 L494.935788,174.754869 L495.180918,175.190657 L494.309343,175.680918 L494.064212,175.245131 L490.5,168.908 L490.5,185.091 L494.064212,178.754869 L494.309343,178.319082 L495.180918,178.809343 L494.935788,179.245131 L490.435788,187.245131 L490,188.019864 L489.564212,187.245131 L485.064212,179.245131 L484.819082,178.809343 L485.690657,178.319082 L485.935788,178.754869 L489.5,185.091 L489.5,168.908 L485.935788,175.245131 L485.690657,175.680918 L484.819082,175.190657 L485.064212,174.754869 L489.564212,166.754869 L490,165.980136 Z" fill="#000000" fill-rule="nonzero"/>
                  <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="15.5 85.5 117 85.5 117 165.5 15.5 165.5"/>
                  <text font-family="sans-serif" font-size="12" font-weight="bold" fill="#000000">
                    <tspan x="28.734" y="99.8050806">schemaLib</tspan>
                    <tspan x="93.03" y="99.8290674" font-family="sans-serif" font-weight="normal">: </tspan>
                    <tspan x="19.236" y="114.829067" font-family="sans-serif" font-weight="normal">run-time use of </tspan>
                    <tspan x="26.652" y="129.829067" font-family="sans-serif" font-weight="normal">schema cert, </tspan>
                    <tspan x="25.938" y="144.829067" font-family="sans-serif" font-weight="normal">identity certs </tspan>
                    <tspan x="23.346" y="159.829067" font-family="sans-serif" font-weight="normal">and cert store</tspan>
                  </text>
                  <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="129 41.5 256 41.5 256 106.5 129 106.5"/>
                  <text font-family="sans-serif" font-size="12" font-weight="bold" fill="#000000">
                    <tspan x="141.596" y="53.3480806">shim</tspan>
                    <tspan x="170.888" y="53.3480806" font-family="sans-serif" font-weight="normal">: application-</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                    <tspan x="140.162" y="67.6840806">speciﬁcs: up calls, </tspan>
                  </text>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                    <tspan x="133.154" y="82.0200806">timing, lifetimes, API, </tspan>
                  </text>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                    <tspan x="151.274" y="96.3560806">QoS, seg/reas</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                    <tspan x="5" y="46.0200806">DeftT</tspan>
                  </text>
                  <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="91 238 297 238 297 297 91 297"/>
                  <text font-family="sans-serif" font-size="12" font-weight="bold" fill="#000000">
                    <tspan x="178.5" y="256">face</tspan>
                    <tspan x="203.652" y="256" font-family="sans-serif" font-weight="normal">:</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                    <tspan x="118.5" y="270">manage PDU transport via</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                    <tspan x="97.5" y="285">multicast UDP, unicast UDP or TCP</tspan>
                  </text>
                  <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="428.5 100.666 552.5 100.666 552.5 165.666 428.5 165.666"/>
                  <text font-family="sans-serif" font-size="12" font-weight="bold" fill="#000000">
                    <tspan x="456.496" y="115.514081">distributors</tspan>
                    <tspan x="527.56" y="115.514081" font-family="sans-serif" font-weight="normal">:</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                    <tspan x="440.158" y="129.850081">handle all aspects </tspan>
                  </text>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                    <tspan x="436.606" y="144.186081">of distributing certs </tspan>
                  </text>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                    <tspan x="451.714" y="158.522081">and group keys</tspan>
                  </text>
                  <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="280.5 100.666 400.5 100.666 400.5 165.666 280.5 165.666"/>
                  <text font-family="sans-serif" font-size="12" font-weight="bold" fill="#000000">
                    <tspan x="315.882" y="121.514081">sigmgrs</tspan>
                    <tspan x="363.894" y="121.514081" font-family="sans-serif" font-weight="normal">:</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                    <tspan x="298.168" y="135.850081">sign or validate</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                    <tspan x="282.68" y="150.19">both PDUs and pubs</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                    <tspan x="200.75" y="326.356081">cState &amp; cAdd packets</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                    <tspan x="200.75" y="224.356081">cState &amp; cAdd PDUs</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                    <tspan x="347.75" y="264.356081">cState &amp; cAdd PDUs</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                    <tspan x="200.5" y="129">publications</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                    <tspan x="497.5" y="180">certs, keys</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                    <tspan x="200.25" y="20.0160806">application calls and callbacks</tspan>
                  </text>
                  <path d="M491,247 L491,268.5 L302.908,268.5 L309.245131,272.064212 L308.754869,272.935788 L300.754869,268.435788 L299.980136,268 L300.754869,267.564212 L308.754869,263.064212 L309.245131,263.935788 L302.908,267.5 L490,267.5 L490,247 L491,247 Z" fill="#000000" fill-rule="nonzero"/>
                </g>
              </g>
            </svg>
          </artwork>
        </figure>
        <t>A <em>shim</em> serves as the translator between application semantics and the named information objects (Publications) whose format is defined by the schema. The <strong>syncps</strong>&nbsp;module is the set reconciliation protocol used by DeftT (see <xref target="syncps-a-set-reconciliation-protocol"/>). New signature managers, distributors, and face modules may be added to the library to extend features. More detail on each module can be found at <xref target="DCT"/> in both code files and documents.</t>
        <t>The signing and validation modules (<em>signature managers</em>) are used for both Publications and cAdds. Following good security practice, DeftT's Publications are constructed and signed <em>early</em> in their creation, then are validated (or discarded) early in the reception process.The <em>schemaLib</em> module provides certificate store access throughout DeftT along with access to <em>distributors</em> of group keys, Publication building and structural validation, and other functions of the trust management engine. This organization of interacting modules is not possible in a strictly layered implementation.</t>
      </section>
      <section anchor="syncps-a-set-reconciliation-protocol">
        <name>syncps: a set reconciliation protocol</name>
        <t>DeftT requires a method or protocol that keeps collections synchronized, where the collection a set and the Publications are the elements of the set. The <strong>syncps</strong> protocol uses IBLTs <xref target="DIFF"/><xref target="IBLT"/><xref target="MPSR"/> to solve the multi-party set-difference problem efficiently without the use of prior context and with communication proportional to the size of the difference between the sets being compared. Syncps announces its <em>collection state</em> (set of currently known Publications) by sending a cState PDU containing an IBLT. The cState serves as a query for additional data that isn't reflected in its local state. Receipt of a cState performs three simultaneous functions: (1) announces new Publications, (2) notifies of Publications that member(s) are missing and (3) acknowledges Publication receipt. The first may prompt the recipient to share its cState to get the new Publication(s). The second results in sending a cAdd PDU containing all the missing  and locally available Publications that fit. The third may result
in a progress notification sent to other local modules so anything waiting for delivery confirmation can proceed.</t>
        <t>On broadcast media, syncps uses the cStates it hears to suppress sending its own and listens for any cAdds that add to its cState. This means that one-to-many Publications require one cState and one cAdd to be sent, independently of the number of members desiring the Publication (the theoretical minimum possible for reliable delivery).
The digest size of a cState can be controlled by Publication lifetime, dynamically constructing the digest to maximize communication progress <xref target="Graphene"/><xref target="Graphene19"/> and, if necessary for a large network, dynamically adapting topic specificity.</t>
        <t>A cAdd with new Publication(s) responds to a particular cState so a receiving syncps removes that cState as a pending query (it will be replaced with a new cState with the addition of the new items). Any DeftT that is missing a Publication (due to being out-of-range or asleep, etc.) can receive it from any other DeftT. A syncps will continue to send cAdds as long as cStates are received that are missing any of its active Publications. This results in reliability that is subscriber-oriented, not publisher-oriented and is efficient for broadcast media, particularly with protocol features designed to prevent multiple redundant broadcasts.</t>
      </section>
      <section anchor="formats-of-deftt-communications">
        <name>Formats of DeftT Communications</name>
        <t>In DeftT, information containers (i.e., Publications, cAdds, Cstate) hold names, content and signatures in TLVs. Tables 1-3 layout the formats of Publications, cStates, cAdds and certificates, which are a special type of Publication  (where <em>keys</em> are the information carried). Publications and cAdds use a compatible format which allows them to use the same library signing/validation modules (<em>sigmgrs</em>) and the same parser. The cState/cAdd formats and dynamics were originally prototyped using Named Data Networking. Although the NDN code and architecture are not used in DeftT or DCT, a restricted version of the NDNv3 TLV encoding is still used, with TLV types from NDN's TLV Type Registry <xref target="NDNS"/>, as is its IANA assigned port number <xref target="RFC6335"/>.</t>
        <t>In Tables 1-3, the Type in level <em>i</em> is contained within the TLV of the previous level <em>i-1</em> TLV.</t>
        <section anchor="publications">
          <name>Publications</name>
          <t>Publications use a Name TLV to encode the name defined in the schema.
A Publication is <em>valid</em> if it starts with the correct TLV, its Name validates against the schema and it contains the five required Level 1 TLVs in the right order (top-down in <xref target="table1"/>) and nothing else.
MetaInfo contains the ContentType (in DeftT either type Key or Blob).
The Content carries the named information and may be empty.
SignatureInfo indicates the SignatureType used to select the appropriate signature manager (<xref target="fig13"/>).
The SignatureType for a collection's Publications is specified in the schema and each Publication must match it.
(A list of current types can be found in <xref target="DCT"/> file include/dct/sigmgrs/sigmgr.hpp.)
The KeyLocator holds the thumbprint (see <xref target="certificates"/>) of the certificate that signed this Publication. If the Publication is a certificate, KeyLocator will be followed by the ValidityPeriod.
Finally, SignatureValue is determined by the SignatureType and its format is verified by the signature manager.</t>
          <table anchor="table1">
            <name>Publication format</name>
            <thead>
              <tr>
                <th>Level 0</th>
                <th>Level 1</th>
                <th>Level 2</th>
                <th>Comments</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>Type</td>
                <td/>
                <td/>
                <td>the value 6</td>
              </tr>
              <tr>
                <td/>
                <td>Name</td>
                <td/>
                <td>format specified by schema</td>
              </tr>
              <tr>
                <td/>
                <td>MetaInfo</td>
                <td/>
                <td/>
              </tr>
              <tr>
                <td/>
                <td/>
                <td>ContentType</td>
                <td>either type Key or Blob</td>
              </tr>
              <tr>
                <td/>
                <td>Content</td>
                <td/>
                <td>arbitrary byte sequence; may have length 0</td>
              </tr>
              <tr>
                <td/>
                <td>SignatureInfo</td>
                <td/>
                <td/>
              </tr>
              <tr>
                <td/>
                <td/>
                <td>SignatureType</td>
                <td>Value specified by schema</td>
              </tr>
              <tr>
                <td/>
                <td/>
                <td>KeyLocator</td>
                <td>must be a thumbprint</td>
              </tr>
              <tr>
                <td/>
                <td/>
                <td>ValidityPeriod</td>
                <td>Only for Certificates</td>
              </tr>
              <tr>
                <td/>
                <td>SignatureValue</td>
                <td/>
                <td>format determined by SignatureType</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="certificates">
          <name>Certificates</name>
          <t>Certificates (certs) are Publications with the ContentType set to Key and both a KeyLocator and a ValidityPeriod. DCT certs are compatible with the NDN Certificate standard V2 but adhere to a stricter set of conventions to make them resistant to substitution, work factor and DoS attacks. The <em>only</em> KeyLocator type allowed in a DCT cert is a KeyDigest type that must contain the 32 byte SHA256 digest of the <em>entire</em> signing cert (including SignatureValue). A self-signed cert (such as a trust anchor) must set this digest to all zero. This digest, a cert <em>thumbprint</em> <xref target="IOTK"/>, is the only locator allowed in <em>any</em> signed Defined-trust object (e.g., Publications, cAdd, schemas, certs) and must be present in every signed object. A signed object using any other type of locator will be considered unverifiable and silently ignored. Certificate Names use a suffix:</t>
          <artwork>  KEY/&lt;keyID&gt;/dct/&lt;version&gt;
</artwork>
          <t>where the cert's thumbprint is the keyID and its creation time is the version.</t>
          <t>The original publisher of any signed object must ensure that that <em>all</em> certs, schemas, etc., needed to validate the object have been published <em>before</em> the object is published. If a member receives a signed object that is missing any of its signing dependencies, the object should be considered unverifiable and silently ignored. Such objects must not be propagated.</t>
        </section>
        <section anchor="cstate">
          <name>cState</name>
          <t>cState and cAdds are are the PDUs exchanged with the system-level transport in use (e.g., UDP) but are only used by the syncps and face modules <xref target="fig13"/>: syncps creates cState and cAdd PDUs while the face manages the protocol interaction within the trust domain. A cState PDU (see <xref target="table2"/>) is used to report the state of a Collection at its originator. Collections are denoted by structured names which include the identifier of a particular trust domain (thumbprint of its schema cert). in DeftT PDU headers.  A cState serves to inform all subscribing entities of a trust domain about Publications currently in the Collection, both so an entity can obtain Publications it is missing and so an entity can add Publications it has that are not reflected in the received cState.</t>
          <table anchor="table2">
            <name>cState format</name>
            <thead>
              <tr>
                <th>Level 0</th>
                <th>Level 1</th>
                <th>Level 2</th>
                <th>Comments</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>Type</td>
                <td/>
                <td/>
                <td>the value 5</td>
              </tr>
              <tr>
                <td/>
                <td>Name</td>
                <td/>
                <td/>
              </tr>
              <tr>
                <td/>
                <td/>
                <td>Generic</td>
                <td>trust domain id</td>
              </tr>
              <tr>
                <td/>
                <td/>
                <td>Generic</td>
                <td>descriptive collection name</td>
              </tr>
              <tr>
                <td/>
                <td/>
                <td>Generic</td>
                <td>collection state (sender's view)</td>
              </tr>
              <tr>
                <td/>
                <td>Nonce</td>
                <td/>
                <td>uniquely distinguishes this cState</td>
              </tr>
              <tr>
                <td/>
                <td>Lifetime</td>
                <td/>
                <td>expiry time (ms after arrival)</td>
              </tr>
            </tbody>
          </table>
          <t>A cState is <em>valid</em> if it starts with the correct TLV and it contains the three required Level 1 TLVs in the right order (top-down in <xref target="table2"/>) and nothing else. Its Name must start with the trust domain id of the DeftT, then a descriptive Collection name (of at least one component) and finally a representation of the the state of the Collection at the originator. There is no signature for a cState PDU. (The cState format is a restricted subset of an NDNv3 Interest.)</t>
        </section>
        <section anchor="cadd">
          <name>cAdd</name>
          <t>A cAdd PDU is used by <em>syncps</em> to add Publications to a collection and carries Publications as Content. <em>syncps</em> creates a cAdd PDU after receiving a cState and only if the recipient has Publications that are not reflected in the received state. A cAdd is <em>valid</em> if it starts with the correct TLV, contains the five required Level 1 TLVs in the right order (top-down in <xref target="table3"/>) and nothing else. A cAdd name is identical to the cState to which it responds.</t>
          <table anchor="table3">
            <name>cAdd format</name>
            <thead>
              <tr>
                <th>Level 0</th>
                <th>Level 1</th>
                <th>Level 2</th>
                <th>Comments</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>Type</td>
                <td/>
                <td/>
                <td>the value 6</td>
              </tr>
              <tr>
                <td/>
                <td>Name</td>
                <td/>
                <td>must match Name of cState it's adding to</td>
              </tr>
              <tr>
                <td/>
                <td>MetaInfo</td>
                <td/>
                <td/>
              </tr>
              <tr>
                <td/>
                <td/>
                <td>ContentType</td>
                <td>type cAdd</td>
              </tr>
              <tr>
                <td/>
                <td>Content</td>
                <td/>
                <td/>
              </tr>
              <tr>
                <td/>
                <td/>
                <td>Publication(s)</td>
                <td>one or more Publications to add to the Collection</td>
              </tr>
              <tr>
                <td/>
                <td>SignatureInfo</td>
                <td/>
                <td/>
              </tr>
              <tr>
                <td/>
                <td/>
                <td>SignatureType</td>
                <td>Value indicates which signature manager</td>
              </tr>
              <tr>
                <td/>
                <td/>
                <td>KeyLocator</td>
                <td>Presence depends on SignatureType</td>
              </tr>
              <tr>
                <td/>
                <td>SignatureValue</td>
                <td/>
                <td>Value holds the signature for this PDU</td>
              </tr>
            </tbody>
          </table>
          <t>The structure of the cState and cAdd Names means that nothing about Publication Names (which are application-oriented) are exposed if encrypted cAdds are specified in a schema. (The schema itself may be distributed in an encrypted cAdd if desired).</t>
        </section>
      </section>
      <section anchor="interface-between-application-and-network-interface">
        <name>Interface between application and network interface</name>
        <t><xref target="fig4"/> and <xref target="fig13"/> show the blocks and modules application information passes through in DeftT. Its handling of application information can be illustrated using an example of a new Publication at a trust domain member and following its progress into a collection and its reception by other members. For more detail, see the library at <xref target="DCT"/>. DeftT uses <xref target="DCT"/>'s message-based pub/sub (<em>mbps</em>) <strong>shim</strong> which kicks off all the necessary DeftT startup when an mbps object is instantiated by the application. After startup, the <strong>pub</strong> syncps of each member will maintain a cState containing the IBLT of its view of the collection. (In the stable, synchronized state, all IBLTs are the same.)</t>
        <t>Applications use an mbps <em>subscribe</em> method to either subscribe to all messages or to a subset by topic, passing a callback function to handle matching items. These application-level subscriptions are turned into syncps subscriptions via mbps. When the application has new information to communicate, topic items (as parameters) and message are passed to mbps with a <em>publish</em> call. Only these topic components and the message, if any, are passed between the application and mbps. The message may be segmented into multiple Publications by mbps, if the message size exceeds Publication content. For each Publication, mbps-specific components are added to the parameter list and the services of <strong>schemaLib</strong> are invoked in order to build and publish a valid Publication according to the schema (no Publication will be built if the correct attributes are not contained in the member's identity chain). The Publication is signed using the <em>sign</em> method of the appropriate <strong>sigmgr</strong> and passed to <strong>syncps</strong>.</t>
        <t>syncps adds this Publication to its collection and updates its IBLT to contain the new Publication. Since its application just created it, syncps knows this is a new addition to the collection and it is a response to the current cState. Thus the Publication is packaged into a cAdd and signed using the <em>sign</em> method of the designated <strong>sigmgr</strong>  and passed to the face. The updated IBLT is packaged into a new cState that is handed to the face.</t>
        <t>Members of the trust domain specifically respond only to IPv6 cAdds that share their trust domain identifier (<xref target="cstate"/> and <xref target="cadd"/>).  When a new cAdd is received at a member, the face ensures it matches an outstanding cState and, if so, passes it on to matching syncps(es). Syncps validates (both structurally and cryptographically) the cAdd using the appropriate sigmgr's <em>validate</em> and continues, removing Publications, if valid. Each Publication is structurally validated via a sigmgr and valid Publications are added to the local collection and IBLT. syncps passes this updated cState to the local face. If this Publication matches a subscription it is passed to mbps, invoking the sigmgr's decrypt if the Publication is encrypted (Publication decryption is <em>not</em> available at Relays.) mbps receives the Publication and passes any topic components of interest to the application along with the content (if any) to the application via the callback registered when it subscribed. (If the original content was spread across Publications, mbps will wait until all of the content is received. The <em>sCnt</em> component of a mbps Publication Name is used for this.)</t>
      </section>
      <section anchor="schema-based-information-movement">
        <name>Schema-based information movement</name>
        <t>Although the Internet's transport and routing protocols emphasize universal reachability with packet forwarding based on destination, a significant number of applications neither need nor desire to transit the Internet (e.g., see <xref target="RFC8799"/>).
This is true for a wide class of OT application. Further, liberal acceptance of packets while depending on the good sending practices of others leaves critical applications open to misconfiguration and attacks.
DeftT <strong>only</strong> moves its Publications in accordance with fully specified communication rules. This approach differs from Internet forwarding but offers new opportunities to address the specific security requirements of applications in many Limited Domains.</t>
        <t>DeftTs on the same subnet may be in different trust domains and DeftTs in the same trust domain may not be on the same subnet. In some cases, it is useful to define sub-domains whose DeftTs have a compatible, but more limited, version of the trust domain's communications schema. Compatible means there is at least one publication type and associated signer specification in common or one schema may be a subset of the other. In the case of sub-domains, they be deployed on the same subnet or on different subnets. The rules of a sub-domain compiled to a binary schema distributed as a schema cert will have a different thumbprint from that of the full trust domain.</t>
        <t>In the case of DeftTs on the same subnet but in different trust domains or different sub-domains,  the cState and cAdd PDUs of different domains are differentiated by the <em>domain id</em> (thumbprint of the domain's schema certificate as in <xref target="table2"/>) which can be used at the face module to determine whether or not to process a PDU. A particular sync collection is managed on a single subnet: cState and cAdds are not forwarded off that subnet nor between DeftTs with different domain ids on the same subnet. Instead, schema-compliant Relays connect Publications between separate sync collections of the same trust domain. Collections are differentiated by both subnet (the physical media) and domain id (a required field of the cState and cAdd PDUs). Consequently, cStates and cAdds are subnet-sprecific while Publications belong to a trust domain (or sub-domain).</t>
        <t>A Relay is implemented <xref target="DCT"/> as an entity running on a device with a DeftT interface on each subnet (two or more) or with multiple DeftT interfaces to the same subnet <xref target="fig5"/> where each uses a different but compatible version of the others' schema. Each DeftT participates in different sync collections and uses a communication identity valid for the schema used by the DeftT. Only Publications (including certs) are relayed between DeftTs and the Publication must validate against the schema of each DeftT. Consequently cAdd encryption is unique per collection while Publication encryption holds across the domain.</t>
        <t>As Relays do not originate Publications, their DeftT API module (a "shim", see <xref target="inside-deftt"/>) performs <em>pass-through</em> of valid Publications.
The Relay of <xref target="fig5"/>-left is on three separate wireless subnets. If all three DeftTs are using an identical schema, a new validated cert added to the cert store of an incoming DeftT is then passed to the other two, which each validate the cert before adding to their own cert stores (superfluous in this case, but not a lot of overhead for additional security). When a valid Publication is received at one DeftT, it is passed to the other two DeftTs to validate against their schemas and published if it passes.</t>
        <figure anchor="fig5">
          <name>Relays connect subnets
</name>
          <artwork type="svg" originalSrc="figs/relayextend-rfc.svg"><svg xmlns="http://www.w3.org/2000/svg" width="90%" height="90%" viewBox="0 0 922 175">
              <desc>relayextend</desc>
              <title>relayextend</title>
              <defs>
                <polygon points="0 0 128.124185 0 128.124185 78.2304466 0 78.2304466"/>
                <polygon points="0 0 128.124193 0 128.124193 78.2304466 0 78.2304466"/>
                <polygon points="0 0 128.124193 0 128.124193 78.2304466 0 78.2304466"/>
                <polygon points="0 0 98.0130812 0 98.0130812 63.8716934 0 63.8716934"/>
                <polygon points="0 0 98.0130812 0 98.0130812 63.8716934 0 63.8716934"/>
              </defs>
              <g stroke-width="1" fill="none" fill-rule="evenodd">
                <g transform="translate(171.500000, 0.500000)">
                  <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="0 0 118.5 0 118.5 37 0 37"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="39.402" y="20.6361074">Relay</tspan>
                  </text>
                </g>
                <g transform="translate(0.809515, 95.998234)">
                  <g/>
                  <path d="M44.4480741,9.04925909 C21.8938581,4.31748922 9.99024413,16.4555076 11.8697621,26.947693 L12.0216898,27.5204429 C-5.55493599,30.6639839 -0.946984364,52.4581045 7.48422013,52.4581045 L8.31434058,52.4317711 C6.19048524,62.6721441 26.7304845,73.0952045 38.1830141,67.8877888 L38.9191587,67.0401848 C43.0024115,76.2519121 57.5107242,77.790766 71.8577116,78.1742451 C84.2922895,78.5083492 91.5472289,77.4747661 96.8803613,71.7472672 L97.7010841,72.0023713 C117.603613,73.6827668 126.667589,59.2389364 122.316505,48.8668969 L123.38783,48.5492511 C130.17289,46.6647723 130.956023,30.2064423 119.315541,27.7706095 L119.539517,27.1336721 C124.592288,16.4275284 112.674578,6.33034298 96.1348191,8.22634259 L94.9898794,7.59763439 C83.1504823,-3.66644666 49.0748209,-1.82969704 45.1293994,9.31094654 L44.4480741,9.04925909 Z" stroke="black" stroke-width="0.4"/>
                </g>
                <g transform="translate(27.852000, 112.912107)" fill="#000000" font-family="sans-serif" font-size="16" font-weight="normal">
                  <text>
                    <tspan x="1.64" y="15">b</tspan>
                    <tspan x="11.128" y="15">r</tspan>
                    <tspan x="15.88" y="15">oadcast</tspan>
                  </text>
                  <text>
                    <tspan x="0" y="33.448">segment 0</tspan>
                  </text>
                </g>
                <g transform="translate(316.309507, 95.998234)">
                  <g/>
                  <path d="M44.4480815,9.04925909 C21.8938655,4.31748922 9.9902515,16.4555076 11.8697695,26.947693 L12.0216972,27.5204429 C-5.55492863,30.6639839 -0.946976995,52.4581045 7.4842275,52.4581045 L8.31434795,52.4317711 C6.19049261,62.6721441 26.7304918,73.0952045 38.1830215,67.8877888 L38.919166,67.0401848 C43.0024189,76.2519121 57.5107316,77.790766 71.857719,78.1742451 C84.2922968,78.5083492 91.5472363,77.4747661 96.8803686,71.7472672 L97.7010915,72.0023713 C117.603621,73.6827668 126.667596,59.2389364 122.316512,48.8668969 L123.387837,48.5492511 C130.172897,46.6647723 130.95603,30.2064423 119.315548,27.7706095 L119.539524,27.1336721 C124.592295,16.4275284 112.674585,6.33034298 96.1348265,8.22634259 L94.9898868,7.59763439 C83.1504896,-3.66644666 49.0748283,-1.82969704 45.1294068,9.31094654 L44.4480815,9.04925909 Z" stroke="black" stroke-width="0.4"/>
                </g>
                <g transform="translate(343.352000, 112.912107)" fill="#000000" font-family="sans-serif" font-size="16" font-weight="normal">
                  <text>
                    <tspan x="1.64" y="15">b</tspan>
                    <tspan x="11.128" y="15">r</tspan>
                    <tspan x="15.88" y="15">oadcast</tspan>
                  </text>
                  <text>
                    <tspan x="0" y="33.448">segment 2</tspan>
                  </text>
                </g>
                <g transform="translate(154.545507, 95.998234)">
                  <g/>
                  <path d="M44.4480815,9.04925909 C21.8938655,4.31748922 9.9902515,16.4555076 11.8697695,26.947693 L12.0216972,27.5204429 C-5.55492863,30.6639839 -0.946976995,52.4581045 7.4842275,52.4581045 L8.31434795,52.4317711 C6.19049261,62.6721441 26.7304918,73.0952045 38.1830215,67.8877888 L38.919166,67.0401848 C43.0024189,76.2519121 57.5107316,77.790766 71.857719,78.1742451 C84.2922968,78.5083492 91.5472363,77.4747661 96.8803686,71.7472672 L97.7010915,72.0023713 C117.603621,73.6827668 126.667596,59.2389364 122.316512,48.8668969 L123.387837,48.5492511 C130.172897,46.6647723 130.95603,30.2064423 119.315548,27.7706095 L119.539524,27.1336721 C124.592295,16.4275284 112.674585,6.33034298 96.1348265,8.22634259 L94.9898868,7.59763439 C83.1504896,-3.66644666 49.0748283,-1.82969704 45.1294068,9.31094654 L44.4480815,9.04925909 Z" stroke="black" stroke-width="0.4"/>
                </g>
                <g transform="translate(171.500000, 37.500000)">
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="11.728" y="90.4121074">b</tspan>
                    <tspan x="21.216" y="90.4121074">r</tspan>
                    <tspan x="25.968" y="90.4121074">oadcast</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="10.088" y="108.860107">segment 1</tspan>
                  </text>
                  <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="0 0 39.5 0 39.5 27.5 0 27.5"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="6.558" y="15.8861074">ch0</tspan>
                  </text>
                  <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="39.5 0 79 0 79 27.5 39.5 27.5"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="46.058" y="15.8861074">ch1</tspan>
                  </text>
                  <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="79 0 118.5 0 118.5 27.5 79 27.5"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="85.558" y="15.8861074">ch2</tspan>
                  </text>
                </g>
                <g transform="translate(474.512749, 27.906786)">
                  <g/>
                  <path d="M34.0021285,7.38830735 C16.7484949,3.5250261 7.64241053,13.4351824 9.08021333,22.0015886 L9.19643572,22.4692136 C-4.2494168,25.0357761 -0.724403598,42.8297136 5.72534013,42.8297136 L6.3603697,42.8082136 C4.73565254,51.1690261 20.4484408,59.6789949 29.2094525,55.4273699 L29.772592,54.7353386 C32.8962185,62.2563074 43.994858,63.5127136 54.970086,63.8258074 C64.4823497,64.0985886 70.0322685,63.2547136 74.112034,58.5784636 L74.7398745,58.7867449 C89.965008,60.1587136 96.898812,48.3659636 93.5702985,39.8976511 L94.3898461,39.6383074 C99.5803142,38.0997136 100.179399,24.6622136 91.2746067,22.6734636 L91.4459449,22.1534324 C95.3112381,13.4123386 86.1943702,5.16843235 73.5417055,6.71643235 L72.665844,6.20311985 C63.6088845,-2.99350515 37.5415198,-1.49388015 34.523332,7.6019636 L34.0021285,7.38830735 Z" stroke="black" stroke-width="0.4"/>
                </g>
                <g transform="translate(456.132000, 12.000000)">
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="47.356" y="39.9121074">local</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="28.684" y="58.3601074">network 1</tspan>
                  </text>
                  <line x1="1.5" y1="0" x2="1.368" y2="147.5" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                </g>
                <g transform="translate(821.972749, 27.156786)">
                  <g/>
                  <path d="M34.0021285,7.38830735 C16.7484949,3.5250261 7.64241053,13.4351824 9.08021333,22.0015886 L9.19643572,22.4692136 C-4.2494168,25.0357761 -0.724403598,42.8297136 5.72534013,42.8297136 L6.3603697,42.8082136 C4.73565254,51.1690261 20.4484408,59.6789949 29.2094525,55.4273699 L29.772592,54.7353386 C32.8962185,62.2563074 43.994858,63.5127136 54.970086,63.8258074 C64.4823497,64.0985886 70.0322685,63.2547136 74.112034,58.5784636 L74.7398745,58.7867449 C89.965008,60.1587136 96.898812,48.3659636 93.5702985,39.8976511 L94.3898461,39.6383074 C99.5803142,38.0997136 100.179399,24.6622136 91.2746067,22.6734636 L91.4459449,22.1534324 C95.3112381,13.4123386 86.1943702,5.16843235 73.5417055,6.71643235 L72.665844,6.20311985 C63.6088845,-2.99350515 37.5415198,-1.49388015 34.523332,7.6019636 L34.0021285,7.38830735 Z" stroke="black" stroke-width="0.4"/>
                </g>
                <g transform="translate(567.000000, 36.162107)">
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="283.948" y="15">local</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="265.276" y="33.448">network 2</tspan>
                  </text>
                  <polygon stroke="black" fill="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" points="0 5.08789258 66.236 5.08789258 66.236 42.0878926 0 42.0878926"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="13.27" y="25.724">Relay</tspan>
                  </text>
                  <polygon stroke="black" fill="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" points="193.236 4.33789258 259.472 4.33789258 259.472 41.3378926 193.236 41.3378926"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="206.506" y="24.974">Relay</tspan>
                  </text>
                  <line x1="76.5" y1="22.3378926" x2="183.336" y2="22.3378926" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                  <polygon stroke="black" points="191.336 22.3378926 183.336 19.3378926 183.336 25.3378926"/>
                  <polygon stroke="black" points="68.136 22.3378926 76.136 25.3378926 76.136 19.3378926"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="75.932" y="40.198">cell connection,</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="78.732" y="58.646">tcp tunnel, etc.</tspan>
                  </text>
                </g>
              </g>
            </svg>
          </artwork>
        </figure>
        <t>A Relay may have different identities and schemas for each DeftT but <em>must</em> have the same trust anchor and schemas must be identical copies, proper subsets or overlapping subsets of the domain schema.
Publications that are undefined for a particular DeftT will be silently discarded when they do not validate upon relay, just as they are when received from a face.
This means the Relay application of <xref target="fig5"/>-left can remain the same but Publications will only be published to a different subnet if its DeftT has that specification in its schema. Relays may filter Publications at the application level or restrict subscriptions on some of their DeftT interfaces. <xref target="fig5"/>-right shows extending a trust domain geographically by using a unicast connection (e.g., over a cell line or tunnel over the Internet) between two Relays which also interface to local broadcast subnets. Everything on each local subnet shows up on the other. A communications schema subset could be used here to limit the types of Publications sent on the remote link, e.g., logs or alerts. Using this approach in <xref target="fig5"/>-right, local communications for subnet 1 can be kept local while subnet 2 might send commands and/or collect log files from subnet 1.</t>
        <t>More generally, Relays can form a mesh of broadcast subnets with no additional configuration (i.e., Relays on a broadcast network do not need to be configured with others' identities and can join at any time). The mesh is efficient: publications are only added to an individual DeftT's collection once regardless of how it is received. Relays with overlapping broadcast physical media will only add a Publication to any of its DeftTs <strong>once</strong>; syncps ensures there are no duplicates. More on the applicability of DeftT meshes is in <xref target="use-cases"/>.</t>
      </section>
      <section anchor="congestion-control">
        <name>Congestion control</name>
        <t>Each DeftT manages its collection on a single broadcast subnet (since unicast is a proper subset of multicast, a point-to-point connection is viewed as a trivial broadcast subnet) thus only has to deal with that subnet's congestion. As described in the previous section, a device connected to two or more subnets may create DeftTs having the same collection name on each subnet with a <strong>Publication</strong> Relay between them but DeftT never forwards <strong>PDUs</strong> between subnets. It is, of course, possible to run DeftT over an extended broadcast network like a PIM multicast group but the result will generally require more configuration and be less reliable, efficient and secure than DeftT's self-configuring peer-to-peer Relay mesh.</t>
        <t>DeftT sends <em>at most one</em> copy of any Publication over any subnet, <em>independent</em> of the number of publishers and subscribers on the subnet.
Thus the total DeftT traffic on a subnet is strictly upper bounded by the application-level publication rate.
As described in <xref target="syncps-a-set-reconciliation-protocol"/>, DeftTs publish a cState specifying the set elements they currently hold. If a DeftT receives a cState specifying the same elements (Publications) it holds, it doesn't send its cState. Thus the upper bound on cState publication rate is the number of members on the subnet divided by the cState lifetime (typically seconds to minutes) but is typically one per cState lifetime due to the duplicate suppression. Each member can send at most one cAdd in response to a cState. This creates a strict request/response flow balance which upper bounds the cAdd traffic rate to (number of members - 1) times the cState publication rate.  The flow balance ensures an instance can't send a new cState until it's previous one is either obsoleted by a cAdd or times out. Similarly a cAdd can only be sent in response to the cState which it obsoletes. Thus the number of outstanding PDUs per instance is at most one and DeftT cannot cause subnet congestion collapse.</t>
        <t>If a Relay is used to extend a trust domain over a path whose bandwidth delay product is many times larger than typical subnet MTUs (1.5-9KB), the one-outstanding-PDU per member constraint can result in poor performance (1500 bytes per 100ms transcontinental RTT is only 120Kbps). DeftT can run over any lower layer transport and stream-oriented transports like TCP or QUIC allow for a 'virtual MTU' that can be set large enough for DeftT to relay at or above the average publication rate (the default is 64KB which can relay up to 5Mbps of publications into a 100ms RTT). In this case there can be many lower layer packets in flight for each DeftT cAdd PDU but their congestion control is handled by TCP or QUIC.</t>
      </section>
    </section>
    <section anchor="defined-trust-management-engine">
      <name>Defined-trust management engine</name>
      <t>OT applications are distinguished (from general digital communications) by well-defined roles, behaviors and relationships that constrain the information to be communicated (e.g., as noted in <xref target="RFC8520"/>). Structured abstract profiles characterize the capabilities and attributes of Things and can be machine-readable (e.g., <xref target="ONE"/><xref target="RFC8520"/><xref target="ZCL"/>). Energy applications in particular have defined strict role-based access controls <xref target="IEC"/> though proposed enforcement approaches require interaction of a number of mechanisms across the communications stack <xref target="NERC"/>. Structured profiles and rules strictly define permitted behaviors including what types of messages can be issued or acted on; undefined behaviors are not permitted. These rules, along with local configuration, are incorporated directly into the schemas used by DeftT's integrated trust management engine to both prohibit undefined behaviors and to construct compliant Publications. This not only provides a fine-grained security but a highly <em>usable</em> security, an approach that can make an application writer's job easier since applications do not need to contain local configuration and security considerations.</t>
      <t>DCT <xref target="DCT"/> includes a language for expressing the rules of communication, its compiler, and other tools to create the credentials a DeftT needs at run-time. DCT is example code, not currently optimized for performance.</t>
      <section anchor="communications-schemas">
        <name>Communications schemas</name>
        <t>Defined-trust's use of communications schemas has been influenced by <xref target="SNC"/><xref target="SDSI"/> and the field of <em>trust management</em> defined by Blaze et. al. <xref target="DTM"/> as the study of security policies, security credentials, and trust relationships. Li et. al. <xref target="DLOG"/> refined some trust management concepts arguing that the expressive language for the rules should be <em>declarative</em> (as opposed to the original work). Communications schemas also have roots in the <em>trust schemas</em> for Named-Data Networking, described by Yu et al <xref target="STNDN"/> as "an overall trust model of an application, i.e., what is (are) legitimate key(s) for each data packet that the application produces or consumes."  <xref target="STNDN"/> gave a general description of how trust schema rules might be used by an authenticating interpreter finite state machine to validate packets. A new approach to both a trust schema language and its integration with communications was introduced in <xref target="NDNW"/> and extended in <xref target="DNMP"/><xref target="IOTK"/><xref target="DCT"/>. In this approach, a  schema is analogous to the plans for constructing a building. Construction plans serve multiple purposes:</t>
        <ol spacing="compact">
<li>Allow permitting authorities to check that the design meets applicable codes</li>
          <li>Show construction workers what to build</li>
          <li>Let building inspectors validate that as-permitted matches as-built</li>
        </ol>
        <t>Construction plans get this flexibility from being declarative: they describe "what", not "how". As noted in p4 of <xref target="DLOG"/>, a declarative trust management specification based on a formal foundation guarantees all parties to a communication have the same notion of what constitutes compliance. This allows a single schema to provide the same protection as dozens of manually configured, per-node ACL rules. This approach is a critical part of Defined-trust Communications which uses the more descriptive term <em>communication schema</em> as the rules define the communications of a trust domain.</t>
        <t>VerSec, an approach to creating schemas, is included with the Defined-trust Communications Toolkit <xref target="DCT"/>. VerSec includes a declarative schema specification language with a compiler that checks the formal soundness of a specification (case 1 above) then converts it to a signed, compact, binary form. The diagnostic output of the compiler (including a digraph listing) can be used to inspect that the intent for the communications schema has indeed been implemented. The binary form is used by DeftT to build (case 2) or validate (case 3) the Publications (format covered in <xref target="publications"/>). Certificates (<xref target="certificates"/>) are a type of Publication, allowing them to be distributed and validated
using DeftT, but they are subject to many additional constraints that ensure DeftT's security framework is well-founded.</t>
      </section>
      <section anchor="a-schema-language">
        <name>A schema language</name>
        <t>The VerSec language follows LangSec <xref target="LANG"/> principles to minimize misconfiguration and attack surface. Its structure is amenable to a forms-based input or a translator from the structured data profiles often used by standards <xref target="ONE"/><xref target="RFC8520"/><xref target="ZCL"/>. Declarative languages are expressive and strongly typed, so they can express the constructs of these standards in their rules. VerSec continues to evolve and add new features as its application domain is expanded; the latest released version is at <xref target="DCT"/>. Other languages and compilers are possible as long as they supply the features and output needed for DeftT.</t>
        <t>A communication schema expresses the intent for a domain's communications in fine-grained rules: "who can say what." Credentials that define "who" are specified along with complete definitions of "what".  Defined-trust communications has been targeted at OT networking where administrative control is explicit and it is not unreasonable to assume that identities and communication rules can be securely configured at every device. The schema details the meaning and relationship of individual components of the filename-like names (URI syntax <xref target="RFC3986"/>) of Publications and certificates. A simple communications schema (<xref target="fig6"/>) defines a Publication in this domain as  <strong>#pub</strong> with a six component name. The strings between the slashes are the tags used to reference each component in the structured format and in the run-time schema library. An example of this usage is the component constraint following the "&amp;"  where <em>ts</em> is a timestamp (64-bit unix timepoints in microseconds) which will be set with the current time when a Publication is created. The first component gets its value from the variable "domain" and #pubPrefix  is designated as having this value so that the schema contains information on what part of the name is considered common prefix. For the sake of simplicity, the <xref target="fig6"/> schema puts no constraints on other name components (not the usual case for OT applications) but requires that Publications of template #pub are signed by ("&lt;=") a <strong>mbrCert</strong> whose format and signing rule (signed by a netCert) is also defined. The Validator lines specify cryptographic signing and validation algorithms from DCT's run-time library for both the Publication and the cAdd PDU that carries Publications. Here, both use EdDSA signing. This schema has no constraints on the inner four name components (additional constraints could be imposed by the application but they won't be enforced by DeftT). Member identity comes from a <strong>mbrCert</strong> which allows it to create legal communications (using the associated private key in signing). A signing certificate must adhere to the schema; Publications or cAdds with unknown signers are discarded. The timestamp component is used to prevent replay attacks. A DeftT adds its identity certificate chain to the domain certificate collection (see <xref target="identity-bundles"/>) at its startup, thus announcing its identity to all other members. Using the pre-configured trust anchor and schema, any member can verify the identity of any other member. This approach means members are not pre-configured with identities of other members of a trust domain and new entities can join at any time.</t>
        <figure anchor="fig6">
          <name>An example communication schema
</name>
          <artwork> #pub: /_domain/trgt/topic/loc/arg/_ts &amp; { _ts: timestamp() } &lt;= mbrCert
 mbrCert:       _domain/_mbrType/_mbrId/_keyinfo &lt;= netCert
 netCert:        _domain/_keyinfo
 #pubPrefix:     _domain
 #pubValidator:  "EdDSA"
 #cAddValidator: "EdDSA"
 _domain:        "example"
 _keyinfo:       "KEY"/_/"dct"/_
</artwork>
        </figure>
        <t>To keep the communications schema both compact and secure, it is compiled into a binary format that becomes the content of a schema certificate. The <xref target="DCT"/> <em>schemaCompile</em> converts the text version (e.g. <xref target="fig6"/>) of the schema into binary as well as reporting diagnostics (see <xref target="fig7"/>) used to confirm the intent of the rules (and to flag problems).</t>
        <figure anchor="fig7">
          <name>schemaCompile diagnostic output for example of <xref target="fig6"/>
          </name>
          <artwork>Publication #pub:
  parameters: trgt topic loc arg
  tags: /_domain/trgt/topic/loc/arg/_ts
Publication #pubPrefix:
  parameters:
  tags: /_domain
Publication #pubValidator:
  parameters:
  tags: /"EdDSA"
Publication #cAddValidator:
  parameters:
  tags: /"EdDSA"
Certificate templates:
  cert mbrCert: /"example"/_mbrType/_mbrIdId/"KEY"/_/"dct"/_
  cert netCert: /"example"/"KEY"/_/"dct"/_
binary schema is 301 bytes
</artwork>
        </figure>
        <t>Even this simple schema provides useful security, using enrolled identities both to constrain communications actions (via its #<strong>pub</strong> format) and to convey membership. To increase security, more detail can be added to <xref target="fig6"/>. For example, different types of members can be created, e.g., "admin" and "sensor", and communications privacy can added by specifying AEAD Validator to encrypt cAdds or AEADSGN (signed AEAD) to encrypt Publications. To make those member types meaningful, a role-based security policy could be employed by defining Publications such that only admins can issue <em>commands</em> and only sensors can issue <em>status</em>. Specifying the AEAD validator for the cAddValidator means that at least one member of a subnet will need a key maker attribute in its signing chain. If AEADSGN is specified for the pubValidator, at least one member of the trust domain will need key maker capability. In <xref target="fig7"/> key maker capability is added to the signing chain of all sensors. WIth AEAD specified, a key maker is elected during DeftT start up and that key maker creates, publishes, and periodically updates the shared encryption key. (Late joining entities are able to discover that a key maker has already been chosen.) These are the <em>only</em> changes required in order to increase security and add privacy: neither code nor binary needs to change and DeftT handles all aspects of validators. The unique approach to integrating communication rules into the transport makes it easy to produce secure application code.</t>
        <figure anchor="fig8">
          <name>Enhancing security in the example schema
</name>
          <artwork>adminCert:  mbrCert &amp; { _mbrType: "admin" } &lt;= netCert
sensorCert: mbrCert &amp; { _mbrType: "sensor" } &lt;= kmCap
capCert:    _network/"CAP"/_capId/_capArg/_keyinfo &lt;= netCert
kmCap:      capCert &amp; { _capId: "KM" }
#reportPub: #pub &amp; {topic:"status"} &lt;= sensorCert
#commandPub: #pub &amp; {topic:"command"} &lt;= adminCert
#cAddValidator: "EdDSA"
</artwork>
        </figure>
        <t>In DeftT, identities include the member cert and its entire signing chain. By adding attributes via <em>capability certificates</em> in a member cert's signing chain, attribute-based security policies can be implemented without the need for separate servers accessed at run-time (and the attendant security weaknesses). More on certs will be covered in <xref target="certificates-and-identity-bundles"/>.</t>
        <t>Converting desired behavioral structure into a schema is the major task of applying Defined-trust Communications to an application domain. Once completed, all the deployment information is contained in the schema. Although a particular schema cert defines a particular trust domain, the text version of a schema can be re-used for related applications. For example, a home IoT schema could be edited to be specific to a particular home network or a solar rooftop neighborhood and then signed with a chosen trust anchor.</t>
      </section>
    </section>
    <section anchor="certificates-and-identity-bundles">
      <name>Certificates and identity bundles</name>
      <t>Defined-trust's approach is partially based on the seminal SDSI <xref target="SDSI"/> approach to create user-friendly namespaces that establish transitive trust through a certificate (cert) chain that validates locally controlled and managed keys, rather than requiring a global Public Key Infrastructure (PKI). When certificates are created, they have a particular context in which they should be utilized and trusted rather than conferring total authority. This is particularly useful in OT where communicating entities share an administrative control and using a third party to certify identity is both unnecessary and a potential security vulnerability. Well-formed certificates and identity deployment are critical elements of this framework. This section describes certificate requirements and the identity <em>bundles</em> that are securely distributed to trust domain members. (DCT includes utilities to create certs and bundles.)</t>
      <section anchor="obviate-ca-usage">
        <name>Obviate CA usage</name>
        <t>Use of third party certificate authorities (CAs) is often antithetical to OT security needs. Any use of a CA (remote or local) results in a single point of failure that greatly reduces system reliability. An architecture with a single, local, trust root cert (trust anchor) and no CAs simplifies trust management and avoids the well-known CA federation and delegation issues and other weaknesses of the X.509 architecture (summarized at <xref target="W509"/>, original references include <xref target="RSK"/><xref target="NVR"/>). DCT certificates (see <xref target="certificates"/>) can be generated and signed locally (using supplied utilities) so there is no reason to aggregate a plethora of unrelated claims into one cert (avoiding the Aggregation problem <xref target="W509"/>).</t>
        <t>A DCT cert's one and only Subject Name is the Name of the Publication that contains the public key as its content and neither name nor content are allowed to contain any optional information or extensions. Certificates are created with a lifetime; local production means cert lifetimes can be just as long as necessary (as recommended in <xref target="RFC2693"/>) so there's no need for the code burden and increased attack surface associated with certificate revocation lists (CRLs) or use of on-line certificate status protocol (OSCP). Keys that require longer lifetimes, like device keys, get new certs before the current ones expire and may be distributed through DeftT (e.g., using a variant of the group key distributors in DCT). If there is a need to exclude previously authorized identities from a domain, there are a variety of options. The most expedient is via use of an AEAD cAdd or Publication validator by ensuring that the group key maker(s) of a domain exclude that entity from subsequent symmetric key distributions until its identity cert expires (and it is not issued an update). Another option is to publish an identity that supplants that of the excluded member. Though more complex, it is also possible to distribute a new schema and identities (without changing the trust anchor), e.g., using remote attestation via the TPM.</t>
        <t>From <xref target="defined-trust-management-engine"/>, a member cert is granted attributes in the schema via the certs that appear in its member identity chain. Member certs are <em>always</em> accompanied by their full chain-of-trust, both when installed and when the member publishes its identity to the cert collection. Every signing chain in the domain has the same trust anchor at its root and its legal form specified in the schema. Without the entire chain, a signer's right to issue Publications cannot be validated. Cert validation is according to the schema which may specify attributes and capabilities for Publication signing from any certificate in the chain. For this model to be well founded, each cert's <strong>key locator</strong> must <em>uniquely</em> identify the cert that actually signed it. This property ensures that each locator resolves to one and only one signing chain. A cert's key locator is a <strong>thumbprint</strong>, a SHA256 hash of the <em>entire</em> signer's Publication (name, content, key locator, and signature), ensuring that each locator resolves to one and only one cert and signing chain. Use of the thumbprint locator ensures that certs are not open to the substitution attacks of name-based locators like X.509's "Authority Key Identifier" and "Issuer" <xref target="ConfusedDep"/><xref target="CAvuln"/><xref target="TLSvuln"/>.</t>
      </section>
      <section anchor="identity-bundles">
        <name>Identity bundles</name>
        <t>Identity bundles comprise the certificates needed to participate in a trust domain: trust anchor, schema, and the member's identity chain. The private key corresponding to the leaf certificate of the member's identity chain should be installed securely when a device is first commissioned (e.g., out-of-band) for a network. The public certs of the bundle may be placed in a file in a well-known location or may, in addition, have their integrity attested or even be encrypted. Secure device configuration and on-boarding should be carried out using the best practices most applicable to a particular deployment. The process of enrolling a device by provisioning an initial secret and identity in the form of public-private key pair and using this information to securely onboard a device to a network has a long history. Current and emergent industry best practices provide a range of approaches for both secure installation and update of private keys. For example, the private key of the bundle can be secured using the Trusted Platform Module, the best current practice in IoT <xref target="TATT"/><xref target="DMR"/><xref target="IAWS"/><xref target="TPM"/><xref target="OTPM"/><xref target="SIOT"/><xref target="QTPM"/><xref target="SKH"/><xref target="RFC8995"/>, or secure enclave or trusted execution environment (TEE) <xref target="ATZ"/>. In that case, an authorized configurer adding a new device can use TPM tools to secure the private signing key and install the rest of the bundle file in a known location before deploying the device in the network. Where entities have public-private key pair identities of <em>any</em> (e.g., non-DCT) type, these can be leveraged for DeftT identity installation. <xref target="fig9"/> shows the steps involved in configuring entities and their correspondence of the steps to the "building plans" model. (The corresponding tools available in DCT are shown across the bottom and the relationship to the "building plans" model is shown across the top.)</t>
        <figure anchor="fig9">
          <name>Creating and configuring identity bundles
</name>
          <artwork type="svg" originalSrc="figs/tools.config-rfc.svg"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="80%" height="80%" viewBox="0 0 762 146" version="1.1">
              <desc>tools.config</desc>
              <title>tools.config</title>
              <g stroke-width="1" fill="none" fill-rule="evenodd">
                <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="142.923 57.664 195.923 57.664 195.923 96.336 142.923 96.336"/>
                <line x1="89.34" y1="77" x2="132.523" y2="77" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                <polygon stroke="black" fill="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" points="5.84 50.496 98.84 50.496 98.84 103.504 5.84 103.504"/>
                <polygon fill="#000000" points="140.523 77 132.523 74 132.523 80"/>
                <polygon stroke="black" points="140.523 77 132.523 74 132.523 80"/>
                <line x1="196.207" y1="76.5" x2="241.307" y2="76.5" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                <polygon fill="#000000" points="249.307 76.5 241.307 73.5 241.307 79.5"/>
                <polygon stroke="black" points="249.307 76.5 241.307 73.5 241.307 79.5"/>
                <text font-family="sans-serif" font-size="11" font-weight="normal" fill="#000000">
                  <tspan x="106.608" y="86.6840806">text</tspan>
                </text>
                <text font-family="sans-serif" font-size="11" font-weight="normal" fill="#000000">
                  <tspan x="202.847" y="86.6840806">binary</tspan>
                </text>
                <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="251.207 50.328 390.207 50.328 390.207 103.328 251.207 103.328"/>
                <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="417 56.664 541.386 56.664 541.386 95.336 417 95.336"/>
                <text font-family="sans-serif" font-size="11" font-weight="normal" fill="#000000">
                  <tspan x="426.056" y="71">make signed identity </tspan>
                  <tspan x="428.663" y="86">certs for each entity </tspan>
                </text>
                <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="566.79 49.496 733.29 49.496 733.29 102.504 566.79 102.504"/>
                <line x1="391.053" y1="77" x2="407.153" y2="77" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                <polygon fill="#000000" points="415.153 77 407.153 74 407.153 80"/>
                <polygon stroke="black" points="415.153 77 407.153 74 407.153 80"/>
                <line x1="541.79" y1="77" x2="555.89" y2="77" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                <polygon fill="#000000" points="564.89 77 556.89 74 556.89 80"/>
                <polygon stroke="black" points="564.89 77 556.89 74 556.89 80"/>
                <line x1="733.29" y1="77" x2="747.39" y2="77" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                <polygon fill="#000000" points="752.39 77 744.39 74 744.39 80"/>
                <polygon stroke="black" points="752.39 77 744.39 74 744.39 80"/>
                <line x1="402" y1="32.5" x2="753" y2="32.5" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                <line x1="402" y1="33" x2="402" y2="68.1" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                <polygon fill="#000000" points="402 74.1 405 66.1 399 66.1"/>
                <polygon stroke="black" points="402 74.1 405 66.1 399 66.1"/>
                <line x1="753.5" y1="32.5" x2="753.29" y2="76.5" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                <text font-family="sans-serif" font-size="11" font-weight="normal" fill="#000000">
                  <tspan x="406" y="44">r</tspan>
                  <tspan x="410.125" y="44">epeat for all entities</tspan>
                </text>
                <g transform="translate(0.000000, 7.000000)">
                  <path d="M105.398608,14 L104.398608,14 L104.398,10 L1,10 L1,14 L0,14 L0,5 L1,5 L1,9 L104.398,9 L104.398608,5 L105.398608,5 L105.398608,14 Z" fill="#000000" fill-rule="nonzero"/>
                  <rect fill="#FFFFFF" x="10" y="0" width="82" height="18"/>
                </g>
                <text font-family="sans-serif" font-size="11" font-weight="bold" fill="#000000">
                  <tspan x="12.2525" y="19.1959839">draw up plans</tspan>
                </text>
                <g transform="translate(122.000000, 7.000000)">
                  <path d="M97.4035785,14 L96.4035785,14 L96.403,10 L0.596,10 L0.596421471,14 L-0.403578529,14 L-0.403578529,5 L0.596421471,5 L0.596,9 L96.403,9 L96.4035785,5 L97.4035785,5 L97.4035785,14 Z" fill="#000000" fill-rule="nonzero"/>
                  <rect fill="#FFFFFF" x="7" y="0" width="82" height="18"/>
                </g>
                <text font-family="sans-serif" font-size="11" font-weight="bold" fill="#000000">
                  <tspan x="131.6835" y="19.1959839">validate plans</tspan>
                </text>
                <g transform="translate(235.500000, 7.000000)">
                  <path d="M523.5,14 L522.5,14 L522.5,10 L0.5,10 L0.5,14 L-0.5,14 L-0.5,5 L0.5,5 L0.5,9 L522.5,9 L522.5,5 L523.5,5 L523.5,14 Z" fill="#000000" fill-rule="nonzero"/>
                  <rect fill="#FFFFFF" x="157.5" y="0" width="143" height="18"/>
                </g>
                <text fill-rule="nonzero" font-family="sans-serif" font-size="11" font-weight="bold" fill="#000000">
                  <tspan x="395.523" y="19.1959839">authentic copies of plans</tspan>
                </text>
                <text font-family="sans-serif" font-size="11" font-weight="normal" fill="#000000">
                  <tspan x="128.8635" y="136.532181">schemaCompile</tspan>
                </text>
                <text font-family="sans-serif" font-size="11" font-weight="normal" fill="#000000">
                  <tspan x="610.6925" y="136.532181">make_bundle</tspan>
                </text>
                <text font-family="sans-serif" font-size="11" font-weight="normal" fill="#000000">
                  <tspan x="451.8555" y="136.532181">make_cert</tspan>
                </text>
                <text font-family="sans-serif" font-size="11" font-weight="normal" fill="#000000">
                  <tspan x="291.1985" y="136.532181">schema_cert</tspan>
                </text>
                <text font-family="sans-serif" font-size="11" font-weight="bold" fill="#000000">
                  <tspan x="56.6705" y="136.195984">DCT tools:</tspan>
                </text>
                <text fill-rule="nonzero" font-family="sans-serif" font-size="11" font-weight="normal" fill="#000000">
                  <tspan x="260.0735" y="62">wrap binary schema in  </tspan>
                  <tspan x="260.8105" y="77">schema cert signed by </tspan>
                  <tspan x="286.6715" y="92">trust anchor</tspan>
                </text>
                <text font-family="sans-serif" font-size="11" font-weight="normal" fill="#000000">
                  <tspan x="18.956" y="65">create/adapt </tspan>
                  <tspan x="9.0395" y="80">communications </tspan>
                  <tspan x="31.9965" y="95">schema</tspan>
                </text>
                <text font-family="sans-serif" font-size="11" font-weight="normal" fill="#000000">
                  <tspan x="583.235" y="63">make identity bundle with</tspan>
                  <tspan x="584.797" y="78">trust anchor, schema and </tspan>
                  <tspan x="601.5665" y="93">identity chain certs</tspan>
                </text>
                <text font-family="sans-serif" font-size="11" font-weight="normal" fill="#000000">
                  <tspan x="147" y="73">compile </tspan>
                  <tspan x="147" y="88">schema</tspan>
                </text>
              </g>
            </svg>
          </artwork>
        </figure>
        <t>In the examples at <xref target="DCT"/>, an identity bundle is given directly to an application via the command line, useful for development, and the application passes callbacks to utility functions that supply the certs and a signing pair separately.
For deployment, good key hygiene using best current practices must be followed e.g., <xref target="COMIS"/>.
In deployment, a small application manager may be programmed for two specific purposes.
First, it is registered with a supervisor <xref target="SPRV"/> (or similar process control) for its own (re)start to serve as a bootstrap for the application.
Second, it can have access to the TPM functions and the ability to create "short-lived" (~hours to several days) public/private key pair(s) that are signed by the installed (commissioned) private identity key using the TPM. This publication signing key pair is created at (re)start and at the periodicity of the signing cert lifetime.
Since the signing happens via requests to the TPM, the identity key cannot be exfiltrated.</t>
        <t>The DCT examples and library use member identities to create signing certs (with associated secret keys) and the example schemas give the format for these signing cert names. A DeftT will request a new signing cert shortly before expiration of the one in use.</t>
        <t>Upon each signing cert update, only the new cert needs to be published via DeftT's cert distributor.
<xref target="fig10"/> outlines a representative procedure.</t>
        <figure anchor="fig10">
          <name>Representative commissioning and signing key maintenance
</name>
          <artwork type="svg" originalSrc="figs/InstallIdbundle-rfc.svg"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="80%" height="80%" viewBox="0 0 510 207" version="1.1">
              <desc>InstallIdbundle</desc>
              <title>InstallIdbundle</title>
              <g stroke-width="1" fill="none" fill-rule="evenodd">
                <polygon stroke="black" stroke-linecap="round" points="111.5 3.5 506.5 3.5 506.5 204.3481 111.5 204.3481"/>
                <path d="M255,127 L255,165.091 L258.564212,158.754869 L258.809343,158.319082 L259.680918,158.809343 L259.435788,159.245131 L254.935788,167.245131 L254.5,168.019864 L254.064212,167.245131 L249.564212,159.245131 L249.319082,158.809343 L250.190657,158.319082 L250.435788,158.754869 L254,165.091 L254,127 L255,127 Z" fill="#000000" fill-rule="nonzero"/>
                <polygon stroke="black" fill="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" points="183.5 30.984 493.5 30.984 493.5 134.984 183.5 134.984"/>
                <polygon stroke="black" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" points="127.244 62.3481 170.244 62.3481 170.244 86.6841 127.244 86.6841"/>
                <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                  <tspan x="134.942" y="78.3681806">TPM</tspan>
                </text>
                <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="127.244 93.6391 171.5 93.6391 171.5 137.1391 127.244 137.1391"/>
                <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                  <tspan x="128.03" y="107.073181">bundle </tspan>
                  <tspan x="130.694" y="121.073181">public </tspan>
                  <tspan x="133.976" y="135.073181">certs</tspan>
                </text>
                <text font-family="sans-serif" font-size="12" font-weight="bold" fill="#000000">
                  <tspan x="188.828" y="22.0059839">supervisor process</tspan>
                </text>
                <text font-family="sans-serif" font-size="12" font-weight="bold" fill="#000000">
                  <tspan x="188.278" y="166.347884">app</tspan>
                </text>
                <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="183.278 171 492.958 171 492.958 195.336 183.278 195.336"/>
                <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                  <tspan x="188.278" y="186.020081">cert distributor publishes entity's signing chain</tspan>
                </text>
                <text font-family="sans-serif" font-size="11" font-weight="normal" fill="#000000">
                  <tspan x="259.722" y="151.868181">cert bundle and new signing cert</tspan>
                </text>
                <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                  <tspan x="2.658" y="98.3520806">commissioning</tspan>
                </text>
                <path d="M114.435259,79.5458764 L114.930917,79.611627 L124.029989,80.8186466 L124.911159,80.9355365 L124.353684,81.6278842 L118.597128,88.7771547 L118.283549,89.1666003 L117.504658,88.5394412 L117.818237,88.1499956 L122.377,82.487 L116.781181,84.726044 L93.6856953,93.9642383 L93.221457,94.1499337 L92.8500663,93.221457 L93.3143047,93.0357617 L116.409791,83.7975673 L122.007,81.558 L114.799416,80.602943 L114.303758,80.5371924 L114.435259,79.5458764 Z" fill="#000000" fill-rule="nonzero"/>
                <path d="M114.942629,93.9279535 L115.418028,94.0828588 L124.145196,96.9265428 L124.99035,97.2019301 L124.316126,97.7811929 L117.354003,103.762735 L116.974752,104.08857 L116.323081,103.330068 L116.702332,103.004233 L122.216,98.266 L116.29047,99.4518079 L93.5980581,103.99029 L93.1077677,104.088348 L92.9116516,103.107768 L93.4019419,103.00971 L116.094354,98.4712272 L122.021,97.285 L115.108217,95.0336571 L114.632818,94.8787518 L114.942629,93.9279535 Z" transform="translate(108.500000, 100.500000) scale(1, -1) translate(-108.500000, -100.500000) " fill="#000000" fill-rule="nonzero"/>
                <text font-family="sans-serif" font-size="12" font-weight="bold" fill="#000000">
                  <tspan x="118.5" y="17.1959839">Device</tspan>
                </text>
                <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                  <tspan x="188" y="44">1. start app, passing in cert bundle</tspan>
                  <tspan x="188" y="60">2. make pub signing key pair</tspan>
                  <tspan x="188" y="76">3. put public key in signing cert with ~1 day lifetime</tspan>
                  <tspan x="188" y="92">4. request that TPM sign the cert with device key</tspan>
                  <tspan x="188" y="108">5. give signing cert &amp; its secret key to app</tspan>
                  <tspan x="188" y="124">6. before cert's expiry repeat steps 2-5</tspan>
                </text>
              </g>
            </svg>
          </artwork>
        </figure>
        <t>All DCT certs have a validity period. Certs that sign publications are generated locally so they can easily be refreshed as needed.
Trust anchors, schemas, and the member identity chain are higher value and often require generation under hermetic conditions by some authority central to the organization. Their lifetime should be application- and deployment-specific,
but the higher difficulty of cert production and distribution often necessitates liftetimes of weeks to years.</t>
        <t>Updating schemas and other certificates over the deployed network (OTA) is application-domain specific and can either make use of domain best practices or develop custom DeftT-based distribution.
Changing the trust anchor is considered a re-commissioning. The example here is merely illustrative; with pre-established secure identities and well-founded approaches to secure on-line communications, a trust domain could be created OTA using secure identities established through some other system of identity.</t>
      </section>
    </section>
    <section anchor="use-cases">
      <name>Use Cases</name>
      <section anchor="secure-industrial-iot">
        <name>Secure Industrial IoT</name>
        <t>IIoT sensors offer significant advantages in industrial process control including improved accuracy, process optimization, predictive maintenance and analysis, higher efficiency, low-cost remote accessibility and monitoring, reduced downtime, power savings, and reduced costs <xref target="IIOT"/>. The large physical scale of many industrial processes necessitates that expensive cabling costs be avoided through wireless transport and battery power. This is a particular issue in nuclear power plant applications where radioactive shielding walls are very thick concrete and security regulations make any plant modifications to add cabling subject to expensive and time-consuming reviews and permitting. Wireless sensor deployments in an industrial environment can suffer from signal outages due to shielding walls and interference caused by  rotating machinery and electrical generators. Multiple <em>gateway</em> devices can receive sensor information and transmit it to monitor/controllers and servers. These gateway devices can run DeftT Relay applications and be deployed in a robust wireless mesh that is resilient against transmission outages, facilitating reliability. DeftT forms meshes with no additional configuration (beyond DeftT's usual identity bundle and private key) as Publications are sent once and heard by all in-range members while Publications missing from one DeftT's set can be supplied by another within range. Several gateways may typically be within a single sensor's wireless range, reducing the number of lost sensor packets. Other meshed gateways can relay the sensor's Publications either wirelessly or via a wired ethernet backhaul.</t>
        <t>IIoT sensors require tight security. Critical Digital Assets (CDA) are a class of industrial assets such as power plants or chemical factories which must be carefully controlled to avoid loss-of-life accidents. Even when IIoT sensors are not used for direct control of CDA, spoofed sensor readings can lead to destructive behavior. There are real-life examples (such as uranium centrifuges) of nation-state actors changing sensor readings through cyberattacks leading to equipment damage. These risks result in a requirement for stringent security reviews and regulation of CDA sensor networks. Despite the advantages of deploying CDA sensors, adequate security is prerequisite to deploying the CDA sensors. Information conveyed via DeftT has an ensured provenance and may be encrypted in an efficient implementation making it ideal for this use.</t>
        <t>IIoT sensors may be mobile (including drone-based) and different gateways may receive packets from a particular sensor over time. A DeftT mesh captures Publications <em>anywhere</em> within its combined network coverage area and ensures it efficiently reaches all members as long as they are in range of at least one member that has received the information. An out-of-service or out-of-range member can receive all active subscribed publications once it is in range and/or able to communicate. This use of DeftT is illustrated in <xref target="fig11"/> where bluetooth-using devices (BT Dev) are deployed as sensors, switches, cameras, lock openers, etc. A WiFi network includes tablet devices and a monitor/controller computer. Gateway devices each have a Relay using both a Bluetooth interface and a WiFi interface. Gateways are placed so that there is always at least one in range of a BT device and at least one other Gateway (or the Controller) in its WiFi range. WiFi tablets can move around within range of one or more Gateways. All the DeftTs may use the same schema, giving devices on the WiFi network access to all of the BT devices. Applications on any particular device may subscribe to a subset of the information available. If privacy of longer-range data is required, the WiFi DeftTs can use a schema that requires encrypting its cAdds. These configuration choices are made by changes in the schemas alone, the application code is exactly the same. No configuration is needed to make devices recognize one another and syncps will keep communications efficient, ensuring that all DeftTs in the trust domain know what information is available. The face ensures that identical cStates are only sent once (within broadcast range). These features mean that DeftT forms efficient broadcast meshes with no additional configuration beyond identity bundles, an important advantage.</t>
        <figure anchor="fig11">
          <name>IIOT meshed gateways connect a single trust domain
</name>
          <artwork type="svg" originalSrc="figs/meshEx-rfc.svg"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="80%" height="80%" viewBox="0 0 1153 244" version="1.1">
              <desc>relaymesh</desc>
              <title>meshEx</title>
              <g stroke-width="1" fill="none" fill-rule="evenodd">
                <g transform="translate(119.500000, 0.000000)">
                  <rect stroke="black" fill="#000000" x="112.5" y="58" width="17" height="186"/>
                  <rect stroke="black" fill="#000000" x="456.5" y="209" width="17" height="35"/>
                  <rect stroke="black" fill="#000000" x="811.5" y="128" width="17" height="116"/>
                  <rect stroke="black" fill="#000000" x="112.5" y="0" width="17" height="39"/>
                  <rect stroke="black" fill="#000000" x="456.120112" y="0" width="17.7597765" height="190"/>
                  <rect stroke="black" fill="#000000" x="811.5" y="0" width="17" height="122"/>
                  <polygon fill="#FFFFFF" points="941.993 175.79938 920.873 175.7995 922.524 166.368 940.443 166.368"/>
                  <polygon stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" points="941.993 175.7994 920.873 175.7995 922.524 166.368 940.443 166.368"/>
                  <path d="M943.047,177.44158 L919.679,177.4416 C919.472,177.4416 919.303,177.35006 919.303,177.23714 C919.303,177.19805 919.324,177.15978 919.363,177.12686 L920.814,175.89367 C920.883,175.83499 921.002,175.7995 921.131,175.7995 L941.685,175.7995 C941.817,175.7995 941.94,175.83712 942.007,175.89862 L943.369,177.13179 C943.476,177.22857 943.419,177.35418 943.241,177.41236 C943.183,177.43148 943.116,177.44158 943.047,177.44158 Z" fill="#000000"/>
                  <path d="M943.047,177.4416 L919.679,177.4416 C919.472,177.4416 919.303,177.3501 919.303,177.2371 C919.303,177.1981 919.324,177.1598 919.363,177.1269 L920.814,175.8937 C920.883,175.835 921.002,175.7995 921.131,175.7995 L941.685,175.7995 C941.817,175.7995 941.94,175.8371 942.007,175.8986 L943.369,177.1318 C943.476,177.2286 943.419,177.3542 943.241,177.4124 C943.183,177.4315 943.116,177.4416 943.047,177.4416 Z" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
                  <path d="M895.5,111 L968.5,111 C971.261,111 973.5,113.2386 973.5,116 L973.5,161.14653 C973.5,163.90795 971.261,166.14653 968.5,166.14653 L895.5,166.14653 C892.739,166.14653 890.5,163.90795 890.5,161.14653 L890.5,116 C890.5,113.2386 892.739,111 895.5,111 Z" fill="#FFFFFF"/>
                  <path d="M895.5,111 L968.5,111 C971.261,111 973.5,113.2386 973.5,116 L973.5,161.1465 C973.5,163.908 971.261,166.1465 968.5,166.1465 L895.5,166.1465 C892.739,166.1465 890.5,163.908 890.5,161.1465 L890.5,116 C890.5,113.2386 892.739,111 895.5,111 Z" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
                  <path d="M897.452,114.6912 L966.548,114.6912 C968.204,114.6912 969.548,116.0343 969.548,117.6912 L969.548,152.2944 C969.548,153.95126 968.204,155.2944 966.548,155.2944 L897.452,155.2944 C895.796,155.2944 894.452,153.95126 894.452,152.2944 L894.452,117.6912 C894.452,116.0343 895.796,114.6912 897.452,114.6912 Z" fill="#FFFFFF"/>
                  <path d="M897.452,114.6912 L966.548,114.6912 C968.204,114.6912 969.548,116.0343 969.548,117.6912 L969.548,152.2944 C969.548,153.9513 968.204,155.2944 966.548,155.2944 L897.452,155.2944 C895.796,155.2944 894.452,153.9513 894.452,152.2944 L894.452,117.6912 C894.452,116.0343 895.796,114.6912 897.452,114.6912 Z" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="895.948" y="138.584107">Cont</tspan>
                    <tspan x="930.62" y="138.584107">r</tspan>
                    <tspan x="935.372" y="138.584107">oller</tspan>
                  </text>
                  <path d="M9,7.198 L95.5,7.198 C100.4706,7.198 104.5,10.3030619 104.5,14.133414 L104.5,64.262586 C104.5,68.0929381 100.4706,71.198 95.5,71.198 L9,71.198 C4.0294,71.198 0,68.0929381 0,64.262586 L0,14.133414 C0,10.3030619 4.0294,7.198 9,7.198 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                  <path d="M352,159.198 L438.5,159.198 C443.4706,159.198 447.5,162.303062 447.5,166.133414 L447.5,216.262586 C447.5,220.092938 443.4706,223.198 438.5,223.198 L352,223.198 C347.0294,223.198 343,220.092938 343,216.262586 L343,166.133414 C343,162.303062 347.0294,159.198 352,159.198 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                  <path d="M674.143541,86.198 L790.856459,86.198 C797.563202,86.198 803,89.3030619 803,93.133414 L803,143.262586 C803,147.092938 797.563202,150.198 790.856459,150.198 L674.143541,150.198 C667.436798,150.198 662,147.092938 662,143.262586 L662,93.133414 C662,89.3030619 667.436798,86.198 674.143541,86.198 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="11.5" y="22.3601074">GW0 relay</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="354.5" y="174.360107">GW1 relay</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="673.5" y="101.360107">GW2 relay</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="14" font-weight="normal" fill="#000000">
                    <tspan x="967.831" y="190.4663">Da</tspan>
                    <tspan x="985.733084" y="190.4663">t</tspan>
                    <tspan x="989.619933" y="190.4663">a</tspan>
                    <tspan x="997.408866" y="190.4663"> </tspan>
                    <tspan x="1001.29571" y="190.4663">s</tspan>
                    <tspan x="1008.29571" y="190.4663">t</tspan>
                    <tspan x="1012.18256" y="190.4663">o</tspan>
                    <tspan x="1019.9715" y="190.4663">re</tspan>
                  </text>
                </g>
                <g transform="translate(880.520000, 113.532107)">
                  <line x1="19.48" y1="11.4678926" x2="117.48" y2="11.4678926" stroke="black" stroke-width="2" stroke-linecap="square"/>
                  <g transform="translate(91.000000, 1.000000)">
                    <ellipse stroke="black" fill="#FFFFFF" cx="19" cy="11" rx="19" ry="11"/>
                    <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                      <tspan x="4.448" y="17">TCP</tspan>
                    </text>
                  </g>
                  <g>
                    <ellipse stroke="black" fill="#FFFFFF" cx="19" cy="11" rx="19" ry="11"/>
                    <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                      <tspan x="4.448" y="17">TCP</tspan>
                    </text>
                  </g>
                </g>
                <g transform="translate(16.856000, 52.000000)">
                  <rect fill="#000000" fill-rule="nonzero" x="0" y="0" width="44" height="56" rx="8"/>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#FFFFFF">
                    <tspan x="4.444" y="52">device</tspan>
                  </text>
                  <polyline stroke="#FFFFFF" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" points="14 12.9213115 30 29.0262295 22.2885246 38.3639344 22.2885246 5 30 13.9180328 14 29.6032787"/>
                </g>
                <g transform="translate(95.856000, 153.000000)">
                  <rect fill="#000000" fill-rule="nonzero" x="0" y="0" width="44" height="56" rx="8"/>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#FFFFFF">
                    <tspan x="4.444" y="52">device</tspan>
                  </text>
                  <polyline stroke="#FFFFFF" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" points="14 12.9213115 30 29.0262295 22.2885246 38.3639344 22.2885246 5 30 13.9180328 14 29.6032787"/>
                </g>
                <g transform="translate(176.856000, 108.000000)">
                  <rect fill="#000000" fill-rule="nonzero" x="0" y="0" width="44" height="56" rx="8"/>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#FFFFFF">
                    <tspan x="4.444" y="52">device</tspan>
                  </text>
                  <polyline stroke="#FFFFFF" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" points="14 12.9213115 30 29.0262295 22.2885246 38.3639344 22.2885246 5 30 13.9180328 14 29.6032787"/>
                </g>
                <g transform="translate(265.856000, 169.000000)">
                  <rect fill="#000000" fill-rule="nonzero" x="0" y="0" width="44" height="56" rx="8"/>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#FFFFFF">
                    <tspan x="4.444" y="52">device</tspan>
                  </text>
                  <polyline stroke="#FFFFFF" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" points="14 12.9213115 30 29.0262295 22.2885246 38.3639344 22.2885246 5 30 13.9180328 14 29.6032787"/>
                </g>
                <g transform="translate(510.856000, 8.000000)">
                  <rect fill="#000000" fill-rule="nonzero" x="0" y="0" width="44" height="56" rx="8"/>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#FFFFFF">
                    <tspan x="4.444" y="52">device</tspan>
                  </text>
                  <polyline stroke="#FFFFFF" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" points="14 12.9213115 30 29.0262295 22.2885246 38.3639344 22.2885246 5 30 13.9180328 14 29.6032787"/>
                </g>
                <g transform="translate(621.856000, 8.000000)">
                  <rect fill="#000000" fill-rule="nonzero" x="0" y="0" width="44" height="56" rx="8"/>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#FFFFFF">
                    <tspan x="4.444" y="52">device</tspan>
                  </text>
                  <polyline stroke="#FFFFFF" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" points="14 12.9213115 30 29.0262295 22.2885246 38.3639344 22.2885246 5 30 13.9180328 14 29.6032787"/>
                </g>
                <g transform="translate(265.856000, 76.000000)">
                  <rect fill="#000000" fill-rule="nonzero" x="0" y="0" width="44" height="56" rx="8"/>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#FFFFFF">
                    <tspan x="4.444" y="52">device</tspan>
                  </text>
                  <polyline stroke="#FFFFFF" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" points="14 12.9213115 30 29.0262295 22.2885246 38.3639344 22.2885246 5 30 13.9180328 14 29.6032787"/>
                </g>
                <g transform="translate(814.856000, 8.000000)">
                  <rect fill="#000000" fill-rule="nonzero" x="0" y="0" width="44" height="56" rx="8"/>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#FFFFFF">
                    <tspan x="4.444" y="52">device</tspan>
                  </text>
                  <polyline stroke="#FFFFFF" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" points="14 12.9213115 30 29.0262295 22.2885246 38.3639344 22.2885246 5 30 13.9180328 14 29.6032787"/>
                </g>
                <g transform="translate(130.000000, 30.000000)">
                  <rect fill="#000000" fill-rule="nonzero" x="0" y="0" width="22.4" height="32" rx="8"/>
                  <polyline stroke="#FFFFFF" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" points="4.8 8.73704918 17.6 21.6209836 11.4308197 29.0911475 11.4308197 2.4 17.6 9.53442623 4.8 22.082623"/>
                </g>
                <g transform="translate(473.000000, 182.000000)">
                  <rect fill="#000000" fill-rule="nonzero" x="0" y="0" width="22.4" height="32" rx="8"/>
                  <polyline stroke="#FFFFFF" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" points="4.8 8.73704918 17.6 21.6209836 11.4308197 29.0911475 11.4308197 2.4 17.6 9.53442623 4.8 22.082623"/>
                </g>
                <g transform="translate(792.000000, 109.000000)">
                  <rect fill="#000000" fill-rule="nonzero" x="0" y="0" width="22.4" height="32" rx="8"/>
                  <polyline stroke="#FFFFFF" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" points="4.8 8.73704918 17.6 21.6209836 11.4308197 29.0911475 11.4308197 2.4 17.6 9.53442623 4.8 22.082623"/>
                </g>
                <g transform="translate(154.000000, 32.360107)" fill-rule="nonzero">
                  <g>
                    <g transform="translate(31.111111, 14.000000) scale(-1, 1) rotate(-180.000000) translate(-31.111111, -14.000000) " fill="#000000">
                      <path d="M51.7040386,0 C57.4890977,0 62.2222222,4.8605978 62.2222222,10.7882143 L62.2222222,17.2129779 C62.2222222,23.1417866 57.4890977,28 51.7040386,28 L10.5181836,28 C4.73777396,28 -3.23851042e-15,23.1417866 -3.23851042e-15,17.2129779 L-3.23851042e-15,10.7882143 C-3.23851042e-15,4.8605978 4.73777396,0 10.5181836,0"/>
                    </g>
                    <g transform="translate(44.158006, 13.998205) scale(-1, 1) rotate(-180.000000) translate(-44.158006, -13.998205) translate(28.180223, 2.058922)" fill="#FFFFFF">
                      <path d="M4.33792257,8.72690113 L4.33792257,15.1516648 C4.33792257,20.0063016 8.18997922,23.878566 12.8463881,23.878566 L23.5249772,23.878566 C28.1825484,23.878566 31.9555647,20.0063016 31.9555647,15.1516648 L31.9555647,8.72690113 C31.9555647,3.9521417 28.1825484,5.5264435e-15 23.5249772,5.5264435e-15 L-2.98592552e-15,5.5264435e-15 C2.65134014,1.97428255 4.33792257,5.10738312 4.33792257,8.72690113"/>
                    </g>
                    <g transform="translate(13.646672, 13.587496) scale(-1, 1) rotate(-180.000000) translate(-13.646672, -13.587496) translate(5.377072, 6.584515)" fill="#FFFFFF">
                      <path d="M13.3310916,2.76322175e-15 L9.79403419,2.76322175e-15 L9.15473692,3.052031 C8.75372318,5.19083709 8.35038472,7.82679043 8.27018197,8.8139317 C8.18997922,7.82679043 7.78664076,5.19083709 7.31123606,3.052031 L6.666127,2.76322175e-15 L3.21624645,2.76322175e-15 L-2.33110547e-15,14.005961 L3.85554372,14.005961 L4.25423275,11.616793 C4.57504374,9.63774163 4.90050417,7.25453462 5.06207203,5.60333816 C5.22015281,7.25453462 5.62116655,9.63774163 6.1035454,11.616793 L6.58243718,14.005961 L10.0369672,14.005961 L10.5170213,11.616793 C10.9215221,9.63774163 11.3225359,7.25453462 11.4852661,5.60333816 C11.6433468,7.25453462 12.0455229,9.63774163 12.3651716,11.616793 L12.6883073,14.005961 L16.5392016,14.005961"/>
                    </g>
                    <g transform="translate(25.410903, 13.217551) scale(-1, 1) rotate(-180.000000) translate(-25.410903, -13.217551) translate(23.363409, 5.845346)" fill="#FFFFFF">
                      <path d="M2.00739343,11.2858384 C0.882230234,11.2858384 -3.21919566e-15,11.9451248 -3.21919566e-15,13.01572 C-3.21919566e-15,14.0875075 0.882230234,14.7444094 2.00739343,14.7444094 C3.21159702,14.7444094 4.09498961,14.0875075 4.09498961,13.01572 C4.09498961,11.9451248 3.21159702,11.2858384 2.00739343,11.2858384 M0.239445887,10.1317892 L3.77313249,10.1317892 L3.77313249,0 L0.239445887,0 L0.239445887,10.1317892 Z"/>
                    </g>
                    <g transform="translate(43.233931, 13.585106) scale(-1, 1) rotate(-180.000000) translate(-43.233931, -13.585106) translate(37.331474, 6.582125)" fill="#000000">
                      <polyline points="3.77417862 10.7035681 3.77417862 7.58238951 11.0040496 7.58238951 11.0040496 4.28357319 3.77417862 4.28357319 3.77417862 0 -2.33081278e-15 0 -2.33081278e-15 14.005961 11.8049147 14.005961 11.8049147 10.7035681"/>
                    </g>
                    <g transform="translate(53.111656, 13.217551) scale(-1, 1) rotate(-180.000000) translate(-53.111656, -13.217551) translate(51.063580, 5.845346)" fill="#000000">
                      <path d="M2.00739343,11.2858384 C0.879905517,11.2858384 -2.33101724e-15,11.9451248 -2.33101724e-15,13.01572 C-2.33101724e-15,14.0875075 0.879905517,14.7444094 2.00739343,14.7444094 C3.21043466,14.7444094 4.09615197,14.0875075 4.09615197,13.01572 C4.09615197,11.9451248 3.21043466,11.2858384 2.00739343,11.2858384 M0.239445887,10.1317892 L3.76964542,10.1317892 L3.76964542,2.76322175e-15 L0.239445887,2.76322175e-15 L0.239445887,10.1317892 Z"/>
                    </g>
                  </g>
                </g>
                <g transform="translate(497.000000, 184.360107)" fill-rule="nonzero">
                  <g>
                    <g transform="translate(31.111111, 14.000000) scale(-1, 1) rotate(-180.000000) translate(-31.111111, -14.000000) " fill="#000000">
                      <path d="M51.7040386,0 C57.4890977,0 62.2222222,4.8605978 62.2222222,10.7882143 L62.2222222,17.2129779 C62.2222222,23.1417866 57.4890977,28 51.7040386,28 L10.5181836,28 C4.73777396,28 -3.23851042e-15,23.1417866 -3.23851042e-15,17.2129779 L-3.23851042e-15,10.7882143 C-3.23851042e-15,4.8605978 4.73777396,0 10.5181836,0"/>
                    </g>
                    <g transform="translate(44.158006, 13.998205) scale(-1, 1) rotate(-180.000000) translate(-44.158006, -13.998205) translate(28.180223, 2.058922)" fill="#FFFFFF">
                      <path d="M4.33792257,8.72690113 L4.33792257,15.1516648 C4.33792257,20.0063016 8.18997922,23.878566 12.8463881,23.878566 L23.5249772,23.878566 C28.1825484,23.878566 31.9555647,20.0063016 31.9555647,15.1516648 L31.9555647,8.72690113 C31.9555647,3.9521417 28.1825484,5.5264435e-15 23.5249772,5.5264435e-15 L-2.98592552e-15,5.5264435e-15 C2.65134014,1.97428255 4.33792257,5.10738312 4.33792257,8.72690113"/>
                    </g>
                    <g transform="translate(13.646672, 13.587496) scale(-1, 1) rotate(-180.000000) translate(-13.646672, -13.587496) translate(5.377072, 6.584515)" fill="#FFFFFF">
                      <path d="M13.3310916,2.76322175e-15 L9.79403419,2.76322175e-15 L9.15473692,3.052031 C8.75372318,5.19083709 8.35038472,7.82679043 8.27018197,8.8139317 C8.18997922,7.82679043 7.78664076,5.19083709 7.31123606,3.052031 L6.666127,2.76322175e-15 L3.21624645,2.76322175e-15 L-2.33110547e-15,14.005961 L3.85554372,14.005961 L4.25423275,11.616793 C4.57504374,9.63774163 4.90050417,7.25453462 5.06207203,5.60333816 C5.22015281,7.25453462 5.62116655,9.63774163 6.1035454,11.616793 L6.58243718,14.005961 L10.0369672,14.005961 L10.5170213,11.616793 C10.9215221,9.63774163 11.3225359,7.25453462 11.4852661,5.60333816 C11.6433468,7.25453462 12.0455229,9.63774163 12.3651716,11.616793 L12.6883073,14.005961 L16.5392016,14.005961"/>
                    </g>
                    <g transform="translate(25.410903, 13.217551) scale(-1, 1) rotate(-180.000000) translate(-25.410903, -13.217551) translate(23.363409, 5.845346)" fill="#FFFFFF">
                      <path d="M2.00739343,11.2858384 C0.882230234,11.2858384 -3.21919566e-15,11.9451248 -3.21919566e-15,13.01572 C-3.21919566e-15,14.0875075 0.882230234,14.7444094 2.00739343,14.7444094 C3.21159702,14.7444094 4.09498961,14.0875075 4.09498961,13.01572 C4.09498961,11.9451248 3.21159702,11.2858384 2.00739343,11.2858384 M0.239445887,10.1317892 L3.77313249,10.1317892 L3.77313249,0 L0.239445887,0 L0.239445887,10.1317892 Z"/>
                    </g>
                    <g transform="translate(43.233931, 13.585106) scale(-1, 1) rotate(-180.000000) translate(-43.233931, -13.585106) translate(37.331474, 6.582125)" fill="#000000">
                      <polyline points="3.77417862 10.7035681 3.77417862 7.58238951 11.0040496 7.58238951 11.0040496 4.28357319 3.77417862 4.28357319 3.77417862 0 -2.33081278e-15 0 -2.33081278e-15 14.005961 11.8049147 14.005961 11.8049147 10.7035681"/>
                    </g>
                    <g transform="translate(53.111656, 13.217551) scale(-1, 1) rotate(-180.000000) translate(-53.111656, -13.217551) translate(51.063580, 5.845346)" fill="#000000">
                      <path d="M2.00739343,11.2858384 C0.879905517,11.2858384 -2.33101724e-15,11.9451248 -2.33101724e-15,13.01572 C-2.33101724e-15,14.0875075 0.879905517,14.7444094 2.00739343,14.7444094 C3.21043466,14.7444094 4.09615197,14.0875075 4.09615197,13.01572 C4.09615197,11.9451248 3.21043466,11.2858384 2.00739343,11.2858384 M0.239445887,10.1317892 L3.76964542,10.1317892 L3.76964542,2.76322175e-15 L0.239445887,2.76322175e-15 L0.239445887,10.1317892 Z"/>
                    </g>
                  </g>
                </g>
                <g transform="translate(816.000000, 111.360107)" fill-rule="nonzero">
                  <g>
                    <g transform="translate(31.111111, 14.000000) scale(-1, 1) rotate(-180.000000) translate(-31.111111, -14.000000) " fill="#000000">
                      <path d="M51.7040386,0 C57.4890977,0 62.2222222,4.8605978 62.2222222,10.7882143 L62.2222222,17.2129779 C62.2222222,23.1417866 57.4890977,28 51.7040386,28 L10.5181836,28 C4.73777396,28 -3.23851042e-15,23.1417866 -3.23851042e-15,17.2129779 L-3.23851042e-15,10.7882143 C-3.23851042e-15,4.8605978 4.73777396,0 10.5181836,0"/>
                    </g>
                    <g transform="translate(44.158006, 13.998205) scale(-1, 1) rotate(-180.000000) translate(-44.158006, -13.998205) translate(28.180223, 2.058922)" fill="#FFFFFF">
                      <path d="M4.33792257,8.72690113 L4.33792257,15.1516648 C4.33792257,20.0063016 8.18997922,23.878566 12.8463881,23.878566 L23.5249772,23.878566 C28.1825484,23.878566 31.9555647,20.0063016 31.9555647,15.1516648 L31.9555647,8.72690113 C31.9555647,3.9521417 28.1825484,5.5264435e-15 23.5249772,5.5264435e-15 L-2.98592552e-15,5.5264435e-15 C2.65134014,1.97428255 4.33792257,5.10738312 4.33792257,8.72690113"/>
                    </g>
                    <g transform="translate(13.646672, 13.587496) scale(-1, 1) rotate(-180.000000) translate(-13.646672, -13.587496) translate(5.377072, 6.584515)" fill="#FFFFFF">
                      <path d="M13.3310916,2.76322175e-15 L9.79403419,2.76322175e-15 L9.15473692,3.052031 C8.75372318,5.19083709 8.35038472,7.82679043 8.27018197,8.8139317 C8.18997922,7.82679043 7.78664076,5.19083709 7.31123606,3.052031 L6.666127,2.76322175e-15 L3.21624645,2.76322175e-15 L-2.33110547e-15,14.005961 L3.85554372,14.005961 L4.25423275,11.616793 C4.57504374,9.63774163 4.90050417,7.25453462 5.06207203,5.60333816 C5.22015281,7.25453462 5.62116655,9.63774163 6.1035454,11.616793 L6.58243718,14.005961 L10.0369672,14.005961 L10.5170213,11.616793 C10.9215221,9.63774163 11.3225359,7.25453462 11.4852661,5.60333816 C11.6433468,7.25453462 12.0455229,9.63774163 12.3651716,11.616793 L12.6883073,14.005961 L16.5392016,14.005961"/>
                    </g>
                    <g transform="translate(25.410903, 13.217551) scale(-1, 1) rotate(-180.000000) translate(-25.410903, -13.217551) translate(23.363409, 5.845346)" fill="#FFFFFF">
                      <path d="M2.00739343,11.2858384 C0.882230234,11.2858384 -3.21919566e-15,11.9451248 -3.21919566e-15,13.01572 C-3.21919566e-15,14.0875075 0.882230234,14.7444094 2.00739343,14.7444094 C3.21159702,14.7444094 4.09498961,14.0875075 4.09498961,13.01572 C4.09498961,11.9451248 3.21159702,11.2858384 2.00739343,11.2858384 M0.239445887,10.1317892 L3.77313249,10.1317892 L3.77313249,0 L0.239445887,0 L0.239445887,10.1317892 Z"/>
                    </g>
                    <g transform="translate(43.233931, 13.585106) scale(-1, 1) rotate(-180.000000) translate(-43.233931, -13.585106) translate(37.331474, 6.582125)" fill="#000000">
                      <polyline points="3.77417862 10.7035681 3.77417862 7.58238951 11.0040496 7.58238951 11.0040496 4.28357319 3.77417862 4.28357319 3.77417862 0 -2.33081278e-15 0 -2.33081278e-15 14.005961 11.8049147 14.005961 11.8049147 10.7035681"/>
                    </g>
                    <g transform="translate(53.111656, 13.217551) scale(-1, 1) rotate(-180.000000) translate(-53.111656, -13.217551) translate(51.063580, 5.845346)" fill="#000000">
                      <path d="M2.00739343,11.2858384 C0.879905517,11.2858384 -2.33101724e-15,11.9451248 -2.33101724e-15,13.01572 C-2.33101724e-15,14.0875075 0.879905517,14.7444094 2.00739343,14.7444094 C3.21043466,14.7444094 4.09615197,14.0875075 4.09615197,13.01572 C4.09615197,11.9451248 3.21043466,11.2858384 2.00739343,11.2858384 M0.239445887,10.1317892 L3.76964542,10.1317892 L3.76964542,2.76322175e-15 L0.239445887,2.76322175e-15 L0.239445887,10.1317892 Z"/>
                    </g>
                  </g>
                </g>
                <g transform="translate(0.170996, 177.136707)">
                  <rect fill="#000000" fill-rule="nonzero" x="0" y="0" width="58.1818182" height="48" rx="8"/>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#FFFFFF">
                    <tspan x="11.5349091" y="40.3636364">device</tspan>
                  </text>
                  <g transform="translate(-0.000000, 0.000000)" fill-rule="nonzero">
                    <g transform="translate(29.090909, 13.090909) scale(-1, 1) rotate(-180.000000) translate(-29.090909, -13.090909) " fill="#000000">
                      <path d="M48.3466335,0 C53.7560394,0 58.1818182,4.54497457 58.1818182,10.0876809 L58.1818182,16.0952521 C58.1818182,21.6390732 53.7560394,26.1818182 48.3466335,26.1818182 L9.83518471,26.1818182 C4.4301263,26.1818182 -2.8500871e-15,21.6390732 -2.8500871e-15,16.0952521 L-2.8500871e-15,10.0876809 C-2.8500871e-15,4.54497457 4.4301263,0 9.83518471,0"/>
                    </g>
                    <g transform="translate(41.290603, 13.089230) scale(-1, 1) rotate(-180.000000) translate(-41.290603, -13.089230) translate(26.350339, 1.925226)" fill="#FFFFFF">
                      <path d="M4.05623929,8.16021924 L4.05623929,14.1677905 C4.05623929,18.7071911 7.65816239,22.3280097 12.012207,22.3280097 L21.9973813,22.3280097 C26.3525128,22.3280097 29.880528,18.7071911 29.880528,14.1677905 L29.880528,8.16021924 C29.880528,3.69550912 26.3525128,5.16758353e-15 21.9973813,5.16758353e-15 L-2.79203425e-15,5.16758353e-15 C2.47917519,1.84608239 4.05623929,4.77573487 4.05623929,8.16021924"/>
                    </g>
                    <g transform="translate(12.760525, 12.705191) scale(-1, 1) rotate(-180.000000) translate(-12.760525, -12.705191) translate(5.027911, 6.156949)" fill="#FFFFFF">
                      <path d="M12.4654363,2.58379177e-15 L9.15805795,2.58379177e-15 L8.56027349,2.85384717 C8.1852996,4.85376975 7.80815195,7.31855728 7.73315717,8.24159848 C7.65816239,7.31855728 7.28101474,4.85376975 6.83648048,2.85384717 L6.23326161,2.58379177e-15 L3.00739928,2.58379177e-15 L-2.17973498e-15,13.096483 L3.60518374,13.096483 L3.97798387,10.8624558 C4.27796298,9.01191425 4.58228962,6.78346094 4.73336605,5.23948503 C4.88118185,6.78346094 5.25615574,9.01191425 5.70721128,10.8624558 L6.15500619,13.096483 L9.38521604,13.096483 L9.83409783,10.8624558 C10.2123324,9.01191425 10.5873063,6.78346094 10.7394696,5.23948503 C10.8872854,6.78346094 11.2633461,9.01191425 11.5622384,10.8624558 L11.8643912,13.096483 L15.4652275,13.096483"/>
                    </g>
                    <g transform="translate(23.760845, 12.359269) scale(-1, 1) rotate(-180.000000) translate(-23.760845, -12.359269) translate(21.846304, 5.465778)" fill="#FFFFFF">
                      <path d="M1.87704321,10.5529917 C0.824942557,10.5529917 -3.06783091e-15,11.1694673 -3.06783091e-15,12.1705434 C-3.06783091e-15,13.1727342 0.824942557,13.7869803 1.87704321,13.7869803 C3.00305176,13.7869803 3.8290812,13.1727342 3.8290812,12.1705434 C3.8290812,11.1694673 3.00305176,10.5529917 1.87704321,10.5529917 M0.223897453,9.47388076 L3.52812389,9.47388076 L3.52812389,0 L0.223897453,0 L0.223897453,9.47388076 Z"/>
                    </g>
                    <g transform="translate(40.426533, 12.702956) scale(-1, 1) rotate(-180.000000) translate(-40.426533, -12.702956) translate(34.907352, 6.154715)" fill="#000000">
                      <polyline points="3.52910208 10.0085312 3.52910208 7.09002655 10.2895009 7.09002655 10.2895009 4.00541909 3.52910208 4.00541909 3.52910208 0 -2.1794613e-15 0 -2.1794613e-15 13.096483 11.0383618 13.096483 11.0383618 10.0085312"/>
                    </g>
                    <g transform="translate(49.662847, 12.359269) scale(-1, 1) rotate(-180.000000) translate(-49.662847, -12.359269) translate(47.747763, 5.465778)" fill="#000000">
                      <path d="M1.87704321,10.5529917 C0.822768795,10.5529917 -2.17965249e-15,11.1694673 -2.17965249e-15,12.1705434 C-2.17965249e-15,13.1727342 0.822768795,13.7869803 1.87704321,13.7869803 C3.00196488,13.7869803 3.83016808,13.1727342 3.83016808,12.1705434 C3.83016808,11.1694673 3.00196488,10.5529917 1.87704321,10.5529917 M0.223897453,9.47388076 L3.52486325,9.47388076 L3.52486325,2.58379177e-15 L0.223897453,2.58379177e-15 L0.223897453,9.47388076 Z"/>
                    </g>
                  </g>
                </g>
                <g transform="translate(355.170996, 136.136707)">
                  <rect fill="#000000" fill-rule="nonzero" x="0" y="0" width="58.1818182" height="48" rx="8"/>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#FFFFFF">
                    <tspan x="11.5349091" y="40.3636364">device</tspan>
                  </text>
                  <g transform="translate(-0.000000, 0.000000)" fill-rule="nonzero">
                    <g transform="translate(29.090909, 13.090909) scale(-1, 1) rotate(-180.000000) translate(-29.090909, -13.090909) " fill="#000000">
                      <path d="M48.3466335,0 C53.7560394,0 58.1818182,4.54497457 58.1818182,10.0876809 L58.1818182,16.0952521 C58.1818182,21.6390732 53.7560394,26.1818182 48.3466335,26.1818182 L9.83518471,26.1818182 C4.4301263,26.1818182 -2.8500871e-15,21.6390732 -2.8500871e-15,16.0952521 L-2.8500871e-15,10.0876809 C-2.8500871e-15,4.54497457 4.4301263,0 9.83518471,0"/>
                    </g>
                    <g transform="translate(41.290603, 13.089230) scale(-1, 1) rotate(-180.000000) translate(-41.290603, -13.089230) translate(26.350339, 1.925226)" fill="#FFFFFF">
                      <path d="M4.05623929,8.16021924 L4.05623929,14.1677905 C4.05623929,18.7071911 7.65816239,22.3280097 12.012207,22.3280097 L21.9973813,22.3280097 C26.3525128,22.3280097 29.880528,18.7071911 29.880528,14.1677905 L29.880528,8.16021924 C29.880528,3.69550912 26.3525128,5.16758353e-15 21.9973813,5.16758353e-15 L-2.79203425e-15,5.16758353e-15 C2.47917519,1.84608239 4.05623929,4.77573487 4.05623929,8.16021924"/>
                    </g>
                    <g transform="translate(12.760525, 12.705191) scale(-1, 1) rotate(-180.000000) translate(-12.760525, -12.705191) translate(5.027911, 6.156949)" fill="#FFFFFF">
                      <path d="M12.4654363,2.58379177e-15 L9.15805795,2.58379177e-15 L8.56027349,2.85384717 C8.1852996,4.85376975 7.80815195,7.31855728 7.73315717,8.24159848 C7.65816239,7.31855728 7.28101474,4.85376975 6.83648048,2.85384717 L6.23326161,2.58379177e-15 L3.00739928,2.58379177e-15 L-2.17973498e-15,13.096483 L3.60518374,13.096483 L3.97798387,10.8624558 C4.27796298,9.01191425 4.58228962,6.78346094 4.73336605,5.23948503 C4.88118185,6.78346094 5.25615574,9.01191425 5.70721128,10.8624558 L6.15500619,13.096483 L9.38521604,13.096483 L9.83409783,10.8624558 C10.2123324,9.01191425 10.5873063,6.78346094 10.7394696,5.23948503 C10.8872854,6.78346094 11.2633461,9.01191425 11.5622384,10.8624558 L11.8643912,13.096483 L15.4652275,13.096483"/>
                    </g>
                    <g transform="translate(23.760845, 12.359269) scale(-1, 1) rotate(-180.000000) translate(-23.760845, -12.359269) translate(21.846304, 5.465778)" fill="#FFFFFF">
                      <path d="M1.87704321,10.5529917 C0.824942557,10.5529917 -3.06783091e-15,11.1694673 -3.06783091e-15,12.1705434 C-3.06783091e-15,13.1727342 0.824942557,13.7869803 1.87704321,13.7869803 C3.00305176,13.7869803 3.8290812,13.1727342 3.8290812,12.1705434 C3.8290812,11.1694673 3.00305176,10.5529917 1.87704321,10.5529917 M0.223897453,9.47388076 L3.52812389,9.47388076 L3.52812389,0 L0.223897453,0 L0.223897453,9.47388076 Z"/>
                    </g>
                    <g transform="translate(40.426533, 12.702956) scale(-1, 1) rotate(-180.000000) translate(-40.426533, -12.702956) translate(34.907352, 6.154715)" fill="#000000">
                      <polyline points="3.52910208 10.0085312 3.52910208 7.09002655 10.2895009 7.09002655 10.2895009 4.00541909 3.52910208 4.00541909 3.52910208 0 -2.1794613e-15 0 -2.1794613e-15 13.096483 11.0383618 13.096483 11.0383618 10.0085312"/>
                    </g>
                    <g transform="translate(49.662847, 12.359269) scale(-1, 1) rotate(-180.000000) translate(-49.662847, -12.359269) translate(47.747763, 5.465778)" fill="#000000">
                      <path d="M1.87704321,10.5529917 C0.822768795,10.5529917 -2.17965249e-15,11.1694673 -2.17965249e-15,12.1705434 C-2.17965249e-15,13.1727342 0.822768795,13.7869803 1.87704321,13.7869803 C3.00196488,13.7869803 3.83016808,13.1727342 3.83016808,12.1705434 C3.83016808,11.1694673 3.00196488,10.5529917 1.87704321,10.5529917 M0.223897453,9.47388076 L3.52486325,9.47388076 L3.52486325,2.58379177e-15 L0.223897453,2.58379177e-15 L0.223897453,9.47388076 Z"/>
                    </g>
                  </g>
                </g>
                <g transform="translate(652.170996, 82.136707)">
                  <rect fill="#000000" fill-rule="nonzero" x="0" y="0" width="58.1818182" height="48" rx="8"/>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#FFFFFF">
                    <tspan x="11.5349091" y="40.3636364">device</tspan>
                  </text>
                  <g transform="translate(-0.000000, 0.000000)" fill-rule="nonzero">
                    <g transform="translate(29.090909, 13.090909) scale(-1, 1) rotate(-180.000000) translate(-29.090909, -13.090909) " fill="#000000">
                      <path d="M48.3466335,0 C53.7560394,0 58.1818182,4.54497457 58.1818182,10.0876809 L58.1818182,16.0952521 C58.1818182,21.6390732 53.7560394,26.1818182 48.3466335,26.1818182 L9.83518471,26.1818182 C4.4301263,26.1818182 -2.8500871e-15,21.6390732 -2.8500871e-15,16.0952521 L-2.8500871e-15,10.0876809 C-2.8500871e-15,4.54497457 4.4301263,0 9.83518471,0"/>
                    </g>
                    <g transform="translate(41.290603, 13.089230) scale(-1, 1) rotate(-180.000000) translate(-41.290603, -13.089230) translate(26.350339, 1.925226)" fill="#FFFFFF">
                      <path d="M4.05623929,8.16021924 L4.05623929,14.1677905 C4.05623929,18.7071911 7.65816239,22.3280097 12.012207,22.3280097 L21.9973813,22.3280097 C26.3525128,22.3280097 29.880528,18.7071911 29.880528,14.1677905 L29.880528,8.16021924 C29.880528,3.69550912 26.3525128,5.16758353e-15 21.9973813,5.16758353e-15 L-2.79203425e-15,5.16758353e-15 C2.47917519,1.84608239 4.05623929,4.77573487 4.05623929,8.16021924"/>
                    </g>
                    <g transform="translate(12.760525, 12.705191) scale(-1, 1) rotate(-180.000000) translate(-12.760525, -12.705191) translate(5.027911, 6.156949)" fill="#FFFFFF">
                      <path d="M12.4654363,2.58379177e-15 L9.15805795,2.58379177e-15 L8.56027349,2.85384717 C8.1852996,4.85376975 7.80815195,7.31855728 7.73315717,8.24159848 C7.65816239,7.31855728 7.28101474,4.85376975 6.83648048,2.85384717 L6.23326161,2.58379177e-15 L3.00739928,2.58379177e-15 L-2.17973498e-15,13.096483 L3.60518374,13.096483 L3.97798387,10.8624558 C4.27796298,9.01191425 4.58228962,6.78346094 4.73336605,5.23948503 C4.88118185,6.78346094 5.25615574,9.01191425 5.70721128,10.8624558 L6.15500619,13.096483 L9.38521604,13.096483 L9.83409783,10.8624558 C10.2123324,9.01191425 10.5873063,6.78346094 10.7394696,5.23948503 C10.8872854,6.78346094 11.2633461,9.01191425 11.5622384,10.8624558 L11.8643912,13.096483 L15.4652275,13.096483"/>
                    </g>
                    <g transform="translate(23.760845, 12.359269) scale(-1, 1) rotate(-180.000000) translate(-23.760845, -12.359269) translate(21.846304, 5.465778)" fill="#FFFFFF">
                      <path d="M1.87704321,10.5529917 C0.824942557,10.5529917 -3.06783091e-15,11.1694673 -3.06783091e-15,12.1705434 C-3.06783091e-15,13.1727342 0.824942557,13.7869803 1.87704321,13.7869803 C3.00305176,13.7869803 3.8290812,13.1727342 3.8290812,12.1705434 C3.8290812,11.1694673 3.00305176,10.5529917 1.87704321,10.5529917 M0.223897453,9.47388076 L3.52812389,9.47388076 L3.52812389,0 L0.223897453,0 L0.223897453,9.47388076 Z"/>
                    </g>
                    <g transform="translate(40.426533, 12.702956) scale(-1, 1) rotate(-180.000000) translate(-40.426533, -12.702956) translate(34.907352, 6.154715)" fill="#000000">
                      <polyline points="3.52910208 10.0085312 3.52910208 7.09002655 10.2895009 7.09002655 10.2895009 4.00541909 3.52910208 4.00541909 3.52910208 0 -2.1794613e-15 0 -2.1794613e-15 13.096483 11.0383618 13.096483 11.0383618 10.0085312"/>
                    </g>
                    <g transform="translate(49.662847, 12.359269) scale(-1, 1) rotate(-180.000000) translate(-49.662847, -12.359269) translate(47.747763, 5.465778)" fill="#000000">
                      <path d="M1.87704321,10.5529917 C0.822768795,10.5529917 -2.17965249e-15,11.1694673 -2.17965249e-15,12.1705434 C-2.17965249e-15,13.1727342 0.822768795,13.7869803 1.87704321,13.7869803 C3.00196488,13.7869803 3.83016808,13.1727342 3.83016808,12.1705434 C3.83016808,11.1694673 3.00196488,10.5529917 1.87704321,10.5529917 M0.223897453,9.47388076 L3.52486325,9.47388076 L3.52486325,2.58379177e-15 L0.223897453,2.58379177e-15 L0.223897453,9.47388076 Z"/>
                    </g>
                  </g>
                </g>
                <g transform="translate(1100.000000, 147.000000)">
                  <ellipse stroke="black" fill="#FFFFFF" cx="18" cy="23.5" rx="16" ry="5.5"/>
                  <ellipse fill="#FFFFFF" cx="18" cy="20.5" rx="18" ry="5.5"/>
                  <ellipse fill="#FFFFFF" cx="18" cy="17.5" rx="16" ry="5.5"/>
                  <ellipse stroke="black" fill="#FFFFFF" cx="18" cy="14.5" rx="16" ry="5.5"/>
                  <ellipse fill="#FFFFFF" cx="18" cy="11.5" rx="18" ry="5.5"/>
                  <ellipse fill="#FFFFFF" cx="18" cy="8.5" rx="16" ry="5.5"/>
                  <ellipse stroke="black" fill="#FFFFFF" cx="18" cy="5.5" rx="16" ry="5.5"/>
                  <line x1="2" y1="5" x2="2" y2="23.5" stroke="black" stroke-linecap="round"/>
                  <line x1="34" y1="5" x2="34" y2="23.5" stroke="black" stroke-linecap="round"/>
                  <rect stroke="black" x="7" y="22" width="2" height="2"/>
                  <rect stroke="black" x="7" y="13" width="2" height="2"/>
                </g>
              </g>
            </svg>
          </artwork>
        </figure>
        <t>In addition to specifying encryption and signing types, schema rules control which users can access specific sensors. For example, an outside predictive maintenance analysis vendor can be allowed access to the vibration sensor data from critical motors, relayed through the Internet, while only plant Security can see images from on-site cameras.</t>
      </section>
      <section anchor="secure-access-to-distributed-energy-resources-der">
        <name>Secure access to Distributed Energy Resources (DER)</name>
        <t>The electrical power grid is evolving to encompass many smaller generators with complex interconnections. Renewable energy systems such as smaller-scale wind and solar generator sites must be economically accessed by multiple users such as building owners, renewable asset aggregators, utilities, and maintenance personnel with varying levels of access rights. North American Electric Reliability Corporation Critical Infrastructure Protection (NERC CIP) regulations specify requirements for communications security and reliability to guard against grid outages <xref target="DER"/>. Legacy NERC CIP compliant utility communications approaches, using dedicated physically secured links to a few large generators, are no longer practical. DeftT offers multiple advantages over bilateral TLS sessions for this use case:</t>
        <ul spacing="compact">
          <li>Security. Encryption, authentication, and authorization of all information objects. Secure brokerless pub/sub avoids single-point broker vulnerabilities. Large generation assets of hundreds of megawatts to more than 1 gigawatt, particularly nuclear power plants must be controlled securely or risk large-scale loss of life accidents. Hence, they are attractive targets for sophisticated nation-state cyber attackers seeking damage with national security implications. Even small-scale DER generators are susceptible to a coordinated attack which could still bring down the electric grid.</li>
          <li>Scalability. Provisioning, maintaining, and distributing multiple keys with descriptive, institutionalized, hierarchical names. DeftT allows keys to be published and securely updated on-line. Where historically a few hundred large-scale generators could supply all of the energy needs for a wide geographic area, now small-scale DER such as residential solar photovoltaic (PV) systems are located at hundreds of thousands of geographically dispersed sites. Many new systems are added daily and must be accommodated economically to spur wider adoption.</li>
          <li>Resiliency. A mesh network of multiple client users, redundant servers, and end devices adds reliability without sacrificing security. Generation assets must be kept on-line continuously or failures risk causing a grid-wide blackout. Climate change is driving frequent natural disasters including wildfires, hurricanes, and temperature extremes which can impact the communications infrastructure. If the network is not resilient communications breakdowns can disable generators on the grid leading to blackouts.</li>
          <li>Efficiency. Data can be published once from edge gateways over expensive cellular links and be accessed through servers by multiple authorized users, without sacrificing security. For small residential DER systems, economical but reliable connectivity is required to spur adoption of PV compared to purchasing from the grid. However, for analytics, maintenance and grid control purposes, regular updates from the site by multiple users are required. Pub/sub via DeftT allows both goals to be met efficiently.</li>
          <li>Flexible Trust rules: Varying levels of permissions are possible on a user-by-user and site-by-site basis to tightly control user security and privacy at the information object level. In an energy ecosystem with many DER, access requirements are quite complex. For example, a PV and battery storage system can be monitored on a regular basis by a homeowner. Separate equipment vendors for batteries and solar generation assets, including inverters, need to perform firmware updates or to monitor that the equipment is operating correctly for maintenance and warranty purposes. DER aggregators may contract with a utility to supply and control multiple DER systems, while the utility may want to access production data and perform some controls themselves such as during a fire event where the system must be shut down. Different permissions are required for each user. For example, hourly usage data which gives detailed insight into customer behaviors can be seen by the homeowner, but for privacy reasons might only be shared with the aggregator if permission is given. These roles and permissions can be expressed in the communication rules and then secured by DeftT's use of compiled schemas.</li>
        </ul>
        <t>The specificity of the requirements of NERC CIP can be used to create communication schemas that contain site-specifics, allowing applications to be streamlined and generic for their functionality, rather than containing security and site-specifics.</t>
      </section>
    </section>
    <section anchor="using-defined-trust-communications-without-deftt">
      <name>Using Defined-trust Communications without DeftT</name>
      <t>Parts of the defined-trust communications framework could be used without the DeftT protocol. There are two main elements used in DeftT: the integrated trust management engine and the multi-party communications networking layer that makes use of the properties of a broadcast medium. It's possible to make use of either of these without DeftT. For example, a message broker could implement the trust management engine on messages as they arrive at the broker (e.g., via TLS) to ensure the sender has the proper identity to publish such a message. If a credential is required in order to subscribe to certain messages, that could also be checked. Set reconciliation could be used at the heart of a transport protocol without using defined-trust security, though signing, encryption, or integrity hashing could still be employed.</t>
    </section>
    <section anchor="terms">
      <name>Terms</name>
      <ul spacing="compact">
        <li>certificate thumbprint: the 32 byte SHA256 digest of an <em>entire</em> certificate including its signature ensuring that each thumbprint resolves to one and only one cert and signing chain</li>
        <li>collection: a set of elements denoted by a structured name that includes the identifier of a particular communications schema</li>
        <li>communications schema: defined set of rules that cover the communications for a particular application domain. Where it is necessary to distinguish between the human readable version and the compiled binary version, the modifiers "text" or "binary" will be used. The binary version is placed in a certificate signed by the domain trust anchor.</li>
        <li>DCT: Defined-trust Communications Toolkit. Running code, examples and documentation for defined-trust communications tools, a schema language and compiler, a DeftT implementation, and illustrative examples</li>
        <li>face: maintains tables of DeftT's cState PDUs to manage efficient communications with the system transport in use (UDP multicast, TCP, etc.)</li>
        <li>identity: a certificate signing chain with a particular domain's trust anchor at its root and a unique member certificate as the leaf. The public certificates in the chain contain attributes and capabilities for the leaf member cert. The secret key associated with the public key of the member cert should be securely configured for member use.</li>
        <li>identity bundle - entities in a trust domain are commissioned with an identity bundle of trust anchor, signed communication schema cert, and the signing chain associated with a particular identity</li>
        <li>Publication: a named information object exchanged used by DeftT where name structure and the required identity roles and capabilities for Publications are specified by the schema. Publications are the elements of the sets that are reconciled by DeftT's sync protocol. (Capitalization is used to distinguish this specific use from both the action and more generic use of the term.)</li>
        <li>protocol data unit (PDU): a single unit of information transmitted among entities of a network composed of protocol-specific control information and user data. DeftT uses two types: cState: (from "collection state") and cAdd: (from "collection additions")</li>
        <li>sync protocol: a synchronization protocol that implements set reconciliation of Publications on a subnet making use of cState and cAdd PDUs</li>
        <li>Things: as per <xref target="RFC8520"/>, networked digital devices specifically not intended to be used for general purpose computing</li>
        <li>trust anchor: NIST SP 800-57 Part 1 Rev. 5 definition "An authoritative entity for which trust is assumed. In a PKI, a trust anchor is a certification authority, which is represented by a certificate that is used to verify the signature on a certificate issued by that trust-anchor. The security of the validation process depends upon the authenticity and integrity of the trust anchor's certificate. Trust anchor certificates are often distributed as self-signed certificates." In defined-trust communications, a trust anchor is a self-signed certificate which is the ultimate signer of all certificates in use in a trust domain, including the communications schema. From RFC4949: trust anchor definition: An established point of trust (usually based on the authority of some person, office, or organization) which allows the validation of a certification chain.</li>
        <li>trust domain: a shorthand form for <em>Defined-trust Communications Limited Domain</em>, a zero trust domain governed by a single trust anchor and communications schema which is enforced at run-time by a library (e.g., DCT) using a signed binary copy of the schema at each member. Nothing is accepted without validation; non-conforming communications are silently discarded. As the schema cert is signed by the trust anchor, a trust comain is uniquely identified by the schema cert's thumbprint. Where context is clear, just <em>domain</em> may be used.</li>
        <li>trust-based Relay: (or just Relay) a special-purpose entity that connects a trust domain across different subnets</li>
      </ul>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This document presents a transport protocol that secures the information it conveys (COMSEC in the language of <xref target="RFC3552"/>). Security of data in the application space is out-of-scope for this document, but use of a trusted execution environment (TEE), e.g., ARM's TrustZone, is recommended where this is of concern.</t>
      <t>Unauthorized changes to DeftT code could bypass validation of received PDUs or modify the content of outgoing PDUs prior to
signing
(but only valid PDUs are accepted at receiver; invalid PDUs are dropped by uncompromised member). Although securing DeftT's code is out-of-scope for this document, DeftT has been designed to be easily deployed with a TEE. Revisiting <xref target="figte"/>, <xref target="fig12"/> highlights how all of the DeftT code and data can be placed in the secure zone (long-dashed line), reachable <em>only</em> via callgates for the Publish and Subscribe API calls.</t>
      <figure anchor="fig12">
        <name>DeftT secured with a Trusted Execution Environment
</name>
        <artwork type="svg" originalSrc="figs/hwtrust-rfc.svg"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="80%" height="80%" viewBox="0 0 364 218" version="1.1">
            <desc>hwtrust</desc>
            <title>hwtrust-rfc</title>
            <g stroke-width="1" fill="none" fill-rule="evenodd">
              <g transform="translate(5.000000, 37.000000)">
                <path d="M8,0 L286,0 C290.418278,-8.11624501e-16 294,3.581722 294,8 L294,151 C294,155.418278 290.418278,159 286,159 L8,159 C3.581722,159 -6.56434436e-15,155.418278 0,151 L0,8 C-5.41083001e-16,3.581722 3.581722,-7.65539184e-17 8,0 Z" stroke="black" stroke-dasharray="3"/>
                <path d="M144,2 L284,2 C288.418278,2 292,5.581722 292,10 L292,149 C292,153.418278 288.418278,157 284,157 L144,157 C139.581722,157 136,153.418278 136,149 L136,10 C136,5.581722 139.581722,2 144,2 Z" stroke="black" stroke-dasharray="6,3"/>
                <text font-family="sans-serif" font-size="14" font-weight="bold" fill="#000000">
                  <tspan x="8.02294922" y="17">On-Device App</tspan>
                </text>
              </g>
              <g transform="translate(12.000000, 66.000000)">
                <rect stroke="black" stroke-width="3" fill="#FFFFFF" x="0" y="0" width="96" height="116" rx="8"/>
                <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                  <tspan x="29.9072266" y="47">Device</tspan>
                  <tspan x="26.9013672" y="62">Specific</tspan>
                  <tspan x="34.0439453" y="77">Code</tspan>
                </text>
              </g>
              <g transform="translate(162.000000, 52.000000)">
                <g transform="translate(24.500000, 27.000000)" fill="#000000" fill-rule="nonzero">
                  <path d="M82,0 L82,25.591 L85.5642122,19.2548694 L86.4357878,19.7451306 L81.9357878,27.7451306 L81.5,28.5198644 L81.0642122,27.7451306 L76.5642122,19.7451306 L77.4357878,19.2548694 L81,25.591 L81,0 L82,0 Z"/>
                  <path d="M1,0 L1,64.591 L4.56421223,58.2548694 L5.43578777,58.7451306 L0.935787769,66.7451306 L0.5,67.5198644 L0.0642122314,66.7451306 L-4.43578777,58.7451306 L-3.56421223,58.2548694 L0,64.591 L0,0 L1,0 Z"/>
                </g>
                <rect stroke="black" fill="#FFFFFF" x="0" y="0" width="129" height="33"/>
                <text font-family="sans-serif" font-size="14" font-weight="normal" fill="#000000">
                  <tspan x="12.2290039" y="14">Certs, keys and </tspan>
                  <tspan x="38.7011719" y="31">schema</tspan>
                </text>
              </g>
              <g transform="translate(108.000000, 120.000000)">
                <rect stroke="black" fill="#FFFFFF" x="0" y="0" width="11" height="52" rx="5.5"/>
                <text transform="translate(6.000000, 27.000000) rotate(90.000000) translate(-6.000000, -27.000000) " font-family="sans-serif" font-size="10" font-weight="normal" fill="#000000">
                  <tspan x="-5.90917969" y="31">Shim</tspan>
                </text>
              </g>
              <g transform="translate(41.500000, 4.000000)">
                <path d="M106.082461,125.538614 L106.714317,126.163819 L113.238944,132.619765 L112.535588,133.330604 L107.367,128.216 L109.036984,134.059416 L128.980762,203.862639 L128.019238,204.137361 L108.07546,134.334137 L106.406,128.492 L104.719914,135.563654 L103.747188,135.331696 L105.876277,126.403259 L106.082461,125.538614 Z" fill="#000000" fill-rule="nonzero"/>
                <path d="M105.738493,164.684669 L106.503805,165.136799 L114.406513,169.805546 L113.897867,170.666522 L107.637,166.967 L110.689896,172.239161 L128.788,203.5 L140.5,203.5 L140.5,204.5 L128.211724,204.5 L128.067287,204.250518 L109.824469,172.740197 L106.773,167.469 L106.863315,174.739157 L105.863392,174.751563 L105.74952,165.57349 L105.738493,164.684669 Z" fill="#000000" fill-rule="nonzero"/>
                <path d="M275.222015,154.904249 L287.238168,161.625453 L288.789721,162.49331 L287.242348,163.368599 L275.258569,170.147356 L274.273869,168.406562 L282.935,163.506 L274.755949,163.526967 L77.5023981,163.999997 L77.4976019,162.000003 L274.751153,161.526973 L282.931,161.507 L274.245676,156.649746 L275.222015,154.904249 Z" fill="#000000" fill-rule="nonzero"/>
                <path d="M91.2414307,116.352644 L92.2261306,118.093438 L83.564,122.993 L91.7440513,122.973033 L288.997602,122.500003 L289.002398,124.499997 L91.7488474,124.973027 L83.568,124.992 L92.2543244,129.850254 L91.2779849,131.595751 L79.2618324,124.874547 L77.7102792,124.00669 L79.2576522,123.131401 L91.2414307,116.352644 Z" fill="#000000" fill-rule="nonzero"/>
                <text font-family="sans-serif" font-size="7" font-weight="bold" fill="#000000">
                  <tspan x="95.9418945" y="121">Subscribe</tspan>
                </text>
                <text font-family="sans-serif" font-size="7" font-weight="bold" fill="#000000">
                  <tspan x="85.1818848" y="159">Publish</tspan>
                </text>
                <text font-family="sans-serif" font-size="9" font-weight="bold" fill="#000000">
                  <tspan x="143.430664" y="207">call gates</tspan>
                </text>
                <text font-family="sans-serif" font-size="9" font-weight="bold" fill="#000000">
                  <tspan x="7.36816406" y="9">secured code and </tspan>
                  <tspan x="6.67822266" y="20">data in TrustZone</tspan>
                </text>
                <path d="M101.881898,11.5 L101.982382,11.8684413 L109.010138,37.6368801 L110.611,43.509 L112.383126,36.4584132 L113.352987,36.7020728 L111.116489,45.6042117 L110.899903,46.4663102 L110.275625,45.8335384 L103.829248,39.2994562 L104.541116,38.5971432 L109.646,43.772 L108.045374,37.8999975 L101.118,12.5 L92.5,12.5 L92.5,11.5 L101.881898,11.5 Z" fill="#000000" fill-rule="nonzero"/>
              </g>
              <g transform="translate(195.000000, 110.000000)">
                <rect stroke="black" fill="#FFFFFF" x="0" y="0" width="96" height="33" rx="8"/>
                <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                  <tspan x="15.9404297" y="13">Publication </tspan>
                  <tspan x="21.8203125" y="28">Validator</tspan>
                </text>
              </g>
              <g transform="translate(162.000000, 149.000000)">
                <rect stroke="black" fill="#FFFFFF" x="0" y="0" width="96" height="33" rx="8"/>
                <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                  <tspan x="15.9404297" y="13">Publication </tspan>
                  <tspan x="27.7822266" y="28">Builder</tspan>
                </text>
              </g>
              <g transform="translate(327.000000, 91.000000)">
                <g stroke="black">
                  <path d="M3,0 C6.42663109,6.75 6.42663109,8.25 3,15 C-0.426631091,21.75 -0.807367879,23.25 3,30 C6.80736788,36.75 6.80736788,37.5 3,45 C-0.807367879,52.5 -1.18810467,52.5 3,60 C7.18810467,67.5 6.80736788,68.25 3,75 C-0.807367879,81.75 -0.807367879,82.5 3,90 C6.80736788,97.5 7.18810467,97.5 3,105"/>
                  <path d="M6,0 C9.42663109,6.75 9.42663109,8.25 6,15 C2.57336891,21.75 2.19263212,23.25 6,30 C9.80736788,36.75 9.80736788,37.5 6,45 C2.19263212,52.5 1.81189533,52.5 6,60 C10.1881047,67.5 9.80736788,68.25 6,75 C2.19263212,81.75 2.19263212,82.5 6,90 C9.80736788,97.5 10.1881047,97.5 6,105"/>
                  <path d="M9,0 C12.4266311,6.75 12.4266311,8.25 9,15 C5.57336891,21.75 5.19263212,23.25 9,30 C12.8073679,36.75 12.8073679,37.5 9,45 C5.19263212,52.5 4.81189533,52.5 9,60 C13.1881047,67.5 12.8073679,68.25 9,75 C5.19263212,81.75 5.19263212,82.5 9,90 C12.8073679,97.5 13.1881047,97.5 9,105"/>
                  <path d="M12,0 C15.4266311,6.75 15.4266311,8.25 12,15 C8.57336891,21.75 8.19263212,23.25 12,30 C15.8073679,36.75 15.8073679,37.5 12,45 C8.19263212,52.5 7.81189533,52.5 12,60 C16.1881047,67.5 15.8073679,68.25 12,75 C8.19263212,81.75 8.19263212,82.5 12,90 C15.8073679,97.5 16.1881047,97.5 12,105"/>
                </g>
                <text transform="translate(28.000000, 54.500000) rotate(90.000000) translate(-28.000000, -54.500000) " font-family="sans-serif" font-size="14" font-weight="bold" fill="#000000">
                  <tspan x="-2.44042969" y="60">Network</tspan>
                </text>
              </g>
              <g transform="translate(281.000000, 73.000000)" fill="#000000" fill-rule="nonzero">
                <path d="M4,8 C3.445,8 3,7.55 3,7 C3,6.445 3.445,6 4,6 C4.55228475,6 5,6.44771525 5,7 C5,7.55228475 4.55228475,8 4,8 M7,9.5 L7,4.5 L1,4.5 L1,9.5 L7,9.5 M7,3.5 C7.55228475,3.5 8,3.94771525 8,4.5 L8,9.5 C8,10.0522847 7.55228475,10.5 7,10.5 L1,10.5 C0.445,10.5 0,10.05 0,9.5 L0,4.5 C0,3.945 0.445,3.5 1,3.5 L1.5,3.5 L1.5,2.5 C1.5,1.11928813 2.61928813,0 4,0 C4.66304122,0 5.29892601,0.263392101 5.76776695,0.732233047 C6.2366079,1.20107399 6.5,1.83695878 6.5,2.5 L6.5,3.5 L7,3.5 M4,1 C3.17157288,1 2.5,1.67157288 2.5,2.5 L2.5,3.5 L5.5,3.5 L5.5,2.5 C5.5,1.67157288 4.82842712,1 4,1 Z"/>
              </g>
            </g>
          </svg>
        </artwork>
      </figure>
      <t>Providing crypto functions is out-of-scope of this document. The example implementation uses <strong>libsodium</strong>, an open source library maintained by experts in the field <xref target="SOD"/>. Crypto functions used in any alternative implementation should be of similar high quality.</t>
      <t>Enrollment of devices is out of scope. A range of solutions are available and selection of one is dependent on specifics of a deployment. Example approaches include the Open Connectivity Foundation (OCF) onboarding and BRSKI <xref target="RFC8995"/>. NIST NCCOE network layer onboarding might be adapted, treating a communications schema like a MUD URL.</t>
      <t>Protecting private identity and signing keys is out-of-scope for this document. Good key hygiene should be practiced, securing private credentials using best practices for a particular application class, e.g. <xref target="COMIS"/><xref target="OWASP"/>.</t>
      <t>DeftT's unit of information transfer is a Publication.
It is an atomic unit sized to fit in a lower layer transport PDU (if needed, fragmentation and reassembly are done in shim or application).
All Publications must be signed and the signature must be validated.
All Publications start with a Name (<xref target="publications"/>).
Publications are used both for ephemeral communication, like commands and status reports, and long-lived information like certs.
The set reconciliation-based syncps protocol identifies Publications using a hash of the <em>entire</em> Publication, including its
signature. A sync collection can contain at most one instance of any Publication so replays of Publications in
the collection are discarded as duplicates on arrival.
The current DeftT implementation requires weakly synchronized clocks with a known maximum skew.
Publications have a lifetime enforced by their sync collection; their names include a timestamp
used both to enforce that lifetime and prevent replay attacks by keeping a Publication in the local collection
(but not advertising its existence) until its lifetime plus the skew has passed. (Lifetimes in current applications range from days or years for certs to milliseconds for status and command communications). Publications arriving a skew
time before their timestamp or a skew time plus lifetime after their timestamp are discarded.</t>
      <t>An attacker can modify, drop, spoof, or replay any DeftT PDU or Publication but DeftT is designed for this to have minimal effect.</t>
      <ol>
<li>
          <t>modification - all DeftT cAdd PDUs must be either signed or AEAD encrypted with a securely distributed nonce group key. This choice is specified in the schema and each DeftT checks at startup that one of these two properties holds for the schema and throws an error if not.</t>
          <ul>
            <li>
              <t>for signed PDUs each receiving DeftT must already have the complete, fully validated signing chain of the signer or the PDU is dropped.
The signing cert must validate the PDU's signature or the PDU is dropped.</t>
            </li>
            <li>
              <t>for encrypted PDUs (and Publications) the symmetric group key is automatically and securely distributed using signing identities.
Each receiver uses its copy of the current symmetric key to validate the AEAD MAC and decrypt the PDU content.
Invalid or malformed PDUs and Publications are dropped.</t>
            </li>
          </ul>
          <t>cState modification to continually send an older, less complete state in order to generate the sending of cAdds could create a DoS attack but counter measures could be implemented using available DeftT information in order to isolate that entity or remove it from the trust domain.</t>
        </li>
        <li>
          <t>dropped PDUs - DeftT's sync protocol periodically republishes cState messages which results in (re)sending dropped cAdds.
Unlike unicast transports, DeftT can and will obtain any Publications missing from its collection from any member
that has a valid copy.</t>
        </li>
        <li>
          <t>spoofing - DeftT uses a trust management engine that validates the signing. Malformed Publications and PDUs are dropped as early as possible.</t>
        </li>
        <li>
          <t>replay - A cAdd is sent in response to a specific cState, so a replayed cAdd that matches a current cState simply serves a retransmit of the cAdd's Publication which will be filtered for duplicates and obsolescence as described above.
A cAdd that doesn't match a current cState will be dropped on arrival.</t>
        </li>
      </ol>
      <t>Peer member authentication in DeftT comes through the integrated trust management engine.
Every DeftT instance is started with an identity bundle that includes the domain trust anchor, the schema in certificate format signed by this trust anchor, and its own member identity chain with a private identity key and the chain signed at the root by trust anchor.
Members publish their identity chains before any Publications are sent.
The trust management engine unconditionally drops any Publication or PDU that does not have a valid signer or whose signer lacks the role or capabilities required for that particular Publication or PDU.</t>
      <t>DeftT takes a modular approach to signing/validation of its PDUs and Publications, so a number of approaches to integrity, authenticity, and confidentiality are possible (and several are available at <xref target="DCT"/>). Security features that are found to have vulnerabilities will be removed or updated and new features are easily added.</t>
      <t>A compromised member of a trust domain can only build messages that match the role and attributes in its signing chain. Thus, a compromised lightbulb can lie about its state or refuse to turn on, but it can't tell the front door to unlock or send camera footage to a remote location. Multiple PDUs could be generated, resulting in flooding the subnet. There are possible counter-measures that could be taken if some detection code is added to the current DeftT, but this is deferred for specific applications with specific types of threats and desired responses.</t>
      <t>The example encryption modules provide for encryption on both cAdd PDUs and Publications. The latter <em>must</em> be signed by the originator in addition to being encrypted. This is not required for cAdd PDUs, so the specific entity that sent the cAdd cannot be determined but the Publications it carries <em>must</em> be signed, even if not encrypted. In DeftT, any member can resend a Publication from any other member (without modification) so group encryption (in effect, group signing) is no different. Some other encryption approaches are provided whose potential vulnerabilities are described with their implementations and a signed, encrypted approach is also available <xref target="DCT"/>.</t>
      <t>DeftT relies on libsodium and linux random implementations with respect to entropy issues. In general, these are quite application-dependent and should be further addressed for particular deployments.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>Normative References</name>
      <reference anchor="RFC8799" target="https://www.rfc-editor.org/info/rfc8799" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8799.xml">
        <front>
          <title>Limited Domains and Internet Protocols</title>
          <author fullname="B. Carpenter" initials="B." surname="Carpenter"/>
          <author fullname="B. Liu" initials="B." surname="Liu"/>
          <date month="July" year="2020"/>
          <abstract>
            <t>There is a noticeable trend towards network behaviors and semantics that are specific to a particular set of requirements applied within a limited region of the Internet. Policies, default parameters, the options supported, the style of network management, and security requirements may vary between such limited regions. This document reviews examples of such limited domains (also known as controlled environments), notes emerging solutions, and includes a related taxonomy. It then briefly discusses the standardization of protocols for limited domains. Finally, it shows the need for a precise definition of "limited domain membership" and for mechanisms to allow nodes to join a domain securely and to find other members, including boundary nodes.</t>
            <t>This document is the product of the research of the authors. It has been produced through discussions and consultation within the IETF but is not the product of IETF consensus.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8799"/>
        <seriesInfo name="DOI" value="10.17487/RFC8799"/>
      </reference>
      <reference anchor="RFC9119" target="https://www.rfc-editor.org/info/rfc9119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9119.xml">
        <front>
          <title>Multicast Considerations over IEEE 802 Wireless Media</title>
          <author fullname="C. Perkins" initials="C." surname="Perkins"/>
          <author fullname="M. McBride" initials="M." surname="McBride"/>
          <author fullname="D. Stanley" initials="D." surname="Stanley"/>
          <author fullname="W. Kumari" initials="W." surname="Kumari"/>
          <author fullname="JC. Zuñiga" initials="JC." surname="Zuñiga"/>
          <date month="October" year="2021"/>
          <abstract>
            <t>Well-known issues with multicast have prevented the deployment of multicast in 802.11 (Wi-Fi) and other local-area wireless environments.  This document describes the known limitations of wireless (primarily 802.11) Layer 2 multicast.  Also described are certain multicast enhancement features that have been specified by the IETF and by IEEE 802 for wireless media, as well as some operational choices that can be made to improve the performance of the network.  Finally, some recommendations are provided about the usage and combination of these features and operational choices.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9119"/>
        <seriesInfo name="DOI" value="10.17487/RFC9119"/>
      </reference>
    </references>
    <references>
      <name>Informative References</name>
      <reference anchor="ATZ" target="https://doi.org/10.1109/CIC.2016.065">
        <front>
          <title>TrustZone Explained: Architectural Features and Use Cases</title>
          <author fullname="Bernard Ngabonziza" surname="Ngabonziza"/>
          <author fullname="Daniel Martin" surname="Martin"/>
          <author fullname="Anna Bailey" surname="Bailey"/>
          <author fullname="Haehyun Cho" surname="Cho"/>
          <author fullname="Sarah Martin" surname="Martin"/>
          <date year="2016"/>
        </front>
      </reference>
      <reference anchor="CAvuln" target="http://2015.hack.lu/archive/2009/moxie-marlinspike-some_tricks_for_defeating_ssl_in_practice.pdf">
        <front>
          <title>More Tricks for Defeating SSL in Practice</title>
          <author fullname="M. Marlinspike" surname="Marlinspike"/>
          <date year="2009"/>
        </front>
      </reference>
      <reference anchor="CHPT" target="https://www.globenewswire.com/news-release/2020/02/05/1980090/0/en/The-Dark-Side-of-Smart-Lighting-Check-Point-Research-Shows-How-Business-and-Home-Networks-Can-Be-Hacked-from-a-Lightbulb.html">
        <front>
          <title>The Dark Side of Smart Lighting: Check Point Research Shows How Business and Home Networks Can Be Hacked from a Lightbulb</title>
          <author fullname="CheckPoint" surname="CheckPoint"/>
          <date year="2020" month="February"/>
        </front>
      </reference>
      <reference anchor="CIDS" target="https://www.sbir.gov/sbirsearch/detail/2104327">
        <front>
          <title>Cybersecurity Intrusion Detection System for Large-Scale Solar Field Networks</title>
          <author fullname="OperantNetworks" surname="OperantNetworks"/>
          <date year="2021"/>
        </front>
      </reference>
      <reference anchor="COMIS" target="https://www.silabs.com/documents/public/presentations/ew-2019-iot-security-commissioning-methods-for-iot.pdf">
        <front>
          <title>Commissioning Methods for IoT</title>
          <author fullname="Lars Lydersen" surname="Lydersen"/>
          <date year="2019" month="February"/>
        </front>
      </reference>
      <reference anchor="COST" target="https://www.fierceelectronics.com/embedded/wired-vs-wireless-cost-and-reliability">
        <front>
          <title>Wireless Industrial Networking Alliance, Wired vs. Wireless: Cost and Reliability</title>
          <author fullname="Wise Guy" surname="Guy"/>
          <date year="2005" month="October"/>
        </front>
      </reference>
      <reference anchor="ConfusedDep" target="https://cloud.google.com/kms/docs/additional-authenticated-data#confused_deputy_attack_example">
        <front>
          <title>Additional authenticated data guide</title>
          <author fullname="Google Cloud Support" surname="Support"/>
          <date year="2021" month="July"/>
        </front>
      </reference>
      <reference anchor="DCT" target="https://github.com/pollere/DCT">
        <front>
          <title>Defined-trust Communications Toolkit</title>
          <author fullname="Pollere" surname="Pollere"/>
          <date year="2022"/>
        </front>
      </reference>
      <reference anchor="DER" target="https://www.nerc.com/pa/RAPA/ra/Reliability%20Assessments%20DL/Distributed_Energy_Resources_Report.pdf">
        <front>
          <title>North American Electric Reliability Corporation: Distributed Energy Resources: Connection, Modeling, and Reliability Considerations</title>
          <author fullname="NERC" surname="NERC"/>
          <date year="2017" month="February"/>
        </front>
      </reference>
      <reference anchor="DIFF" target="">
        <front>
          <title>What's the difference?: efficient set reconciliation without prior context</title>
          <author fullname="David Eppstein" surname="Eppstein"/>
          <author fullname="Michael T. Goodrich" surname="Goodrich"/>
          <author fullname="Frank Uyeda" surname="Uyeda"/>
          <author fullname="George Varghese" surname="Varghese"/>
          <date year="2011"/>
        </front>
      </reference>
      <reference anchor="DIGN" target="https://www.utilitydive.com/news/as-nuclear-plants-look-to-digitize-controls-and-enhance-performance-cyber/566478/">
        <front>
          <title>As Dominion, others target 80-year nuclear plants, cybersecurity concerns complicate digital upgrades</title>
          <author fullname="M. Bandyk" surname="Bandyk"/>
          <date year="2019" month="November"/>
        </front>
      </reference>
      <reference anchor="DLOG" target="https://doi.org/10.1145/605434.605438">
        <front>
          <title>Delegation logic</title>
          <author fullname="Ninghui Li" surname="Li"/>
          <author fullname="Benjamin Grosof" surname="Grosof"/>
          <author fullname="Joan Feigenbaum" surname="Feigenbaum"/>
          <date year="2003" month="02"/>
        </front>
      </reference>
      <reference anchor="DMR" target="https://www.wwt.com/white-paper/device-management-requirements-to-secure-enterprise-iot-edge-infrastructure/">
        <front>
          <title>Device Management Requirements to Secure Enterprise IoT Edge Infrastructure</title>
          <author fullname="Marcos Carranza et. al." surname="al."/>
          <date year="2021" month="April"/>
        </front>
      </reference>
      <reference anchor="DNMP" target="">
        <front>
          <title>Lessons Learned Building a Secure Network Measurement Framework Using Basic NDN</title>
          <author fullname="K. Nichols" surname="Nichols"/>
          <date year="2019" month="September"/>
        </front>
      </reference>
      <reference anchor="DTM" target="https://doi.org/10.1109/SECPRI.1996.502679">
        <front>
          <title>Decentralized Trust Management</title>
          <author fullname="Matt Blaze" surname="Blaze"/>
          <author fullname="Joan Feigenbaum" surname="Feigenbaum"/>
          <author fullname="Jack Lacy" surname="Lacy"/>
          <date year="1996" month="06"/>
        </front>
      </reference>
      <reference anchor="Demers87" target="https://doi.org/10.1145/41840.41841">
        <front>
          <title>Epidemic Algorithms for Replicated Database Maintenance</title>
          <author fullname="Alan J. Demers" surname="Demers"/>
          <author fullname="Daniel H. Greene" surname="Greene"/>
          <author fullname="Carl Hauser" surname="Hauser"/>
          <author fullname="Wes Irish" surname="Irish"/>
          <author fullname="John Larson" surname="Larson"/>
          <author fullname="Scott Shenker" surname="Shenker"/>
          <author fullname="Howard E. Sturgis" surname="Sturgis"/>
          <author fullname="Daniel C. Swinehart" surname="Swinehart"/>
          <author fullname="Douglas B. Terry" surname="Terry"/>
          <date year="1987"/>
        </front>
      </reference>
      <reference anchor="Graphene" target="https://doi.org/10.1007/978-3-319-67816-0\_24">
        <front>
          <title>Graphene: A New Protocol for Block Propagation Using Set Reconciliation</title>
          <author fullname="A. Pinar Ozisik" surname="Ozisik"/>
          <author fullname="Gavin Andresen" surname="Andresen"/>
          <author fullname="George Bissias" surname="Bissias"/>
          <author fullname="Amir Houmansadr" surname="Houmansadr"/>
          <author fullname="Brian Neil Levine" surname="Levine"/>
          <date year="2017"/>
        </front>
      </reference>
      <reference anchor="Graphene19" target="https://doi.org/10.1145/3341302.3342082">
        <front>
          <title>Graphene: efficient interactive set reconciliation applied to blockchain propagation</title>
          <author fullname="A. Pinar Ozisik" surname="Ozisik"/>
          <author fullname="Gavin Andresen" surname="Andresen"/>
          <author fullname="Brian Neil Levine" surname="Levine"/>
          <author fullname="Darren Tapp" surname="Tapp"/>
          <author fullname="George Bissias" surname="Bissias"/>
          <author fullname="Sunny Katkuri" surname="Katkuri"/>
          <date year="2019"/>
        </front>
      </reference>
      <reference anchor="HSE" target="https://encyclopedia.kaspersky.com/glossary/secure-element/">
        <front>
          <title>Secure Element</title>
          <author fullname="Kapersky" surname="Kapersky"/>
          <date year="2022"/>
        </front>
      </reference>
      <reference anchor="IAWS" target="Using a Trusted Platform Module for endpoint device security in AWS IoT Greengrass">
        <front>
          <title>Using a Trusted Platform Module for endpoint device security in AWS IoT Greengrass</title>
          <author fullname="Krishnan Ganapathy" surname="Ganapathy"/>
          <date year="2019" month="November"/>
        </front>
      </reference>
      <reference anchor="IBLT" target="https://doi.org/10.1109/Allerton.2011.6120248">
        <front>
          <title>Invertible bloom lookup tables</title>
          <author fullname="Michael T. Goodrich" surname="Goodrich"/>
          <author fullname="Michael Mitzenmacher" surname="Mitzenmacher"/>
          <date year="2011"/>
        </front>
      </reference>
      <reference anchor="IEC" target="https://webstore.iec.ch/publication/61822">
        <front>
          <title>Power systems management and associated information exchange - Data and communications security - Part 8: Role-based access control for power system management</title>
          <author fullname="IEC" surname="IEC"/>
          <date year="2022"/>
        </front>
      </reference>
      <reference anchor="IEC61850" target="https://en.wikipedia.org/wiki/IEC_61850">
        <front>
          <title>IEC 61850</title>
          <author fullname="Wikipedia" surname="Wikipedia"/>
          <date year="2021"/>
        </front>
      </reference>
      <reference anchor="IIOT" target="https://www.rfpage.com/applications-of-industrial-internet-of-things/">
        <front>
          <title>Applications of Industrial Internet of Things (IIoT)</title>
          <author fullname="Rajiv" surname="Rajiv"/>
          <date year="2018" month="June"/>
        </front>
      </reference>
      <reference anchor="IOTK" target="https://doi.org/10.1145/3460417.3482972">
        <front>
          <title>Trust schemas and {ICN:} key to secure home IoT</title>
          <author fullname="Kathleen Nichols" surname="Nichols"/>
          <date year="2021"/>
        </front>
      </reference>
      <reference anchor="ISO9506MMS" target="https://www.iso.org/obp/ui/#iso:std:iso:9506:-1:ed-2:v1:en">
        <front>
          <title>Industrial automation systems --- Manufacturing Message Specification --- Part 1: Service definition</title>
          <author fullname="ISO" surname="ISO"/>
          <date year="2003"/>
        </front>
      </reference>
      <reference anchor="LANG" target="http://langsec.org">
        <front>
          <title>LANGSEC: Language-theoretic Security "The View from the Tower of Babel"</title>
          <author fullname="LANGSEC" surname="LANGSEC"/>
          <date year="2021"/>
        </front>
      </reference>
      <reference anchor="MATR" target="https://buildwithmatter.com/">
        <front>
          <title>Matter is the foundation for connected things</title>
          <author fullname="Connectivity Standards Alliance" surname="Alliance"/>
          <date year="2021"/>
        </front>
      </reference>
      <reference anchor="MHST" target="https://en.wikipedia.org/wiki/MQTT">
        <front>
          <title>MQTT</title>
          <author fullname="Wikipedia" surname="Wikipedia"/>
          <date year="2022"/>
        </front>
      </reference>
      <reference anchor="MINSKY03" target="https://doi.org/10.1109/TIT.2003.815784">
        <front>
          <title>Set reconciliation with nearly optimal communication complexity</title>
          <author fullname="Yaron Minsky" surname="Minsky"/>
          <author fullname="Ari Trachtenberg" surname="Trachtenberg"/>
          <author fullname="Richard Zippel" surname="Zippel"/>
          <date year="2003"/>
        </front>
      </reference>
      <reference anchor="MODOT" target="https://www.nrel.gov/docs/fy22osti/79974.pdf">
        <front>
          <title>Modular Security Apparatus for Managing Distributed Cryptography for Command and Control Messages on Operational Technology Networks (Module-OT)</title>
          <author fullname="D. Saleem" surname="Saleem"/>
          <author fullname="S. Granda" surname="Granda"/>
          <author fullname="MD Touhiduzzaman" surname="Touhiduzzaman"/>
          <author fullname="A. Hasandka" surname="Hasandka"/>
          <author fullname="W. Hupp" surname="Hupp"/>
          <author fullname="M. Martin" surname="Martin"/>
          <author fullname="S. Hossain-McKenzie" surname="Hossain-McKenzie"/>
          <author fullname="P. Cordeiro" surname="Cordeiro"/>
          <author fullname="I. Onunkwo" surname="Onunkwo"/>
          <author fullname="D. Jose" surname="Jose"/>
          <date year="2022" month="January"/>
        </front>
      </reference>
      <reference anchor="MPSR" target="">
        <front>
          <title>Simple multi-party set reconciliation</title>
          <author fullname="Michael Mitzenmacher" surname="Mitzenmacher"/>
          <author fullname="Rasmus Pagh" surname="Pagh"/>
          <date year="2018"/>
        </front>
      </reference>
      <reference anchor="MQTT" target="mqtt.org">
        <front>
          <title>MQTT: The Standard for IoT Messaging</title>
          <author fullname="OASIS" surname="OASIS"/>
          <date year="2022"/>
        </front>
      </reference>
      <reference anchor="NDNS" target="https://named-data.net/doc/NDN-packet-spec/current/">
        <front>
          <title>Named Data Networking Packet Format Specification 0.3</title>
          <author fullname="NDN" surname="NDN"/>
          <date year="2022"/>
        </front>
      </reference>
      <reference anchor="NDNW" target="http://ice-ar.named-data.net/meetings/2019-ICE-WEN-Annual/0-ICNWEN-Van-Keynote.pdf">
        <front>
          <title>Watching NDN's Waist: How Simplicity Creates Innovation and Opportunity</title>
          <author fullname="Van Jacobson" surname="Jacobson"/>
          <date year="2019" month="July"/>
        </front>
      </reference>
      <reference anchor="NERC" target="https://www.nerc.com/pa/CI/Documents/roundtable%20-%20IEC%2061850%20slides%20%20(20161115).pdf">
        <front>
          <title>Emerging Technology Roundtable - Substation Automation/IEC 61850</title>
          <author fullname="NERC" surname="NERC"/>
          <date year="2016" month="November"/>
        </front>
      </reference>
      <reference anchor="NMUD" target="https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.1800-15.pdf">
        <front>
          <title>Securing Small-Business and Home Internet of Things (IoT) Devices: Mitigating Network-Based Attacks Using Manufacturer Usage Description (MUD)</title>
          <author fullname="D. Dodson et al" surname="al"/>
          <date year="2021" month="May"/>
        </front>
      </reference>
      <reference anchor="NPPI" target="https://cdn.intechopen.com/pdfs/21051/InTechNuclear_power_plant_instrumentation_and_control.pdf">
        <front>
          <title>Nuclear Power Plant Instrumentation and Control</title>
          <author fullname="H. M. Hashemian" surname="Hashemian"/>
          <date year="2011"/>
        </front>
      </reference>
      <reference anchor="NVR" target="https://www.cs.auckland.ac.nz/~pgut001/pubs/pkitutorial.pdf">
        <front>
          <title>Everything you Never Wanted to Know about PKI but were Forced to Find Out</title>
          <author fullname="Peter Gutmann" surname="Gutmann"/>
          <date year="2002"/>
        </front>
      </reference>
      <reference anchor="ONE" target="https://onedm.org/">
        <front>
          <title>One Data Model</title>
          <author fullname="OneDM" surname="OneDM"/>
          <date year="2022"/>
        </front>
      </reference>
      <reference anchor="OPR" target="https://www.nist.gov/news-events/events/2019/09/ndn-community-meeting">
        <front>
          <title>Commercialization of NDN in Cybersecure Energy System Communications video</title>
          <author fullname="Randall King" surname="King"/>
          <date year="2019"/>
        </front>
      </reference>
      <reference anchor="OSCAL" target="https://pages.nist.gov/OSCAL/">
        <front>
          <title>OSCAL: the Open Security Controls Assessment Language</title>
          <author fullname="NIST" surname="NIST"/>
          <date year="2022"/>
        </front>
      </reference>
      <reference anchor="OTPM" target="https://www.youtube.com/watch?v=YtPsruEqGeY">
        <front>
          <title>Keylime - An Open Source TPM Project for Remote Trust</title>
          <author fullname="Luke Hinds" surname="Hinds"/>
          <date year="2019" month="November"/>
        </front>
      </reference>
      <reference anchor="OWASP" target="https://github.com/OWASP/SideKEK">
        <front>
          <title>SideKEK README</title>
          <author fullname="owasp.org/www-project-sidekek/" surname="owasp.org/www-project-sidekek/"/>
          <date year="2020" month="June"/>
        </front>
      </reference>
      <reference anchor="PRAG" target="https://www.mdpi.com/1424-8220/21/20/6904">
        <front>
          <title>Messaging Protocols for IoT Systems---A Pragmatic Comparison</title>
          <author fullname="Jacek Wytr{\k e}bowicz" surname="Wytr{\k e}bowicz"/>
          <author fullname="Krzysztof Cabaj" surname="Cabaj"/>
          <author fullname="Jerzy Krawiec" surname="Krawiec"/>
          <date year="2021"/>
        </front>
      </reference>
      <reference anchor="QTPM" target="https://link.springer.com/chapter/10.1007/978-1-4302-6584-9_3">
        <front>
          <title>Quick Tutorial on TPM 2.0</title>
          <author fullname="D. Challener W. Arthur" surname="W. Arthur"/>
          <date year="2015" month="January"/>
        </front>
      </reference>
      <reference anchor="RFC2693" target="https://www.rfc-editor.org/info/rfc2693" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2693.xml">
        <front>
          <title>SPKI Certificate Theory</title>
          <author fullname="C. Ellison" initials="C." surname="Ellison"/>
          <author fullname="B. Frantz" initials="B." surname="Frantz"/>
          <author fullname="B. Lampson" initials="B." surname="Lampson"/>
          <author fullname="R. Rivest" initials="R." surname="Rivest"/>
          <author fullname="B. Thomas" initials="B." surname="Thomas"/>
          <author fullname="T. Ylonen" initials="T." surname="Ylonen"/>
          <date month="September" year="1999"/>
          <abstract>
            <t>This document gives the theory behind SPKI certificates and ACLs without going into technical detail about those structures or their uses.  This memo defines an Experimental Protocol for the Internet community.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="2693"/>
        <seriesInfo name="DOI" value="10.17487/RFC2693"/>
      </reference>
      <reference anchor="RFC3552" target="https://www.rfc-editor.org/info/rfc3552" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3552.xml">
        <front>
          <title>Guidelines for Writing RFC Text on Security Considerations</title>
          <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
          <author fullname="B. Korver" initials="B." surname="Korver"/>
          <date month="July" year="2003"/>
          <abstract>
            <t>All RFCs are required to have a Security Considerations section.  Historically, such sections have been relatively weak.  This document provides guidelines to RFC authors on how to write a good Security Considerations section.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="72"/>
        <seriesInfo name="RFC" value="3552"/>
        <seriesInfo name="DOI" value="10.17487/RFC3552"/>
      </reference>
      <reference anchor="RFC3986" target="https://www.rfc-editor.org/info/rfc3986" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3986.xml">
        <front>
          <title>Uniform Resource Identifier (URI): Generic Syntax</title>
          <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
          <author fullname="R. Fielding" initials="R." surname="Fielding"/>
          <author fullname="L. Masinter" initials="L." surname="Masinter"/>
          <date month="January" year="2005"/>
          <abstract>
            <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource.  This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet.  The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier.  This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="STD" value="66"/>
        <seriesInfo name="RFC" value="3986"/>
        <seriesInfo name="DOI" value="10.17487/RFC3986"/>
      </reference>
      <reference anchor="RFC4291" target="https://www.rfc-editor.org/info/rfc4291" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4291.xml">
        <front>
          <title>IP Version 6 Addressing Architecture</title>
          <author fullname="R. Hinden" initials="R." surname="Hinden"/>
          <author fullname="S. Deering" initials="S." surname="Deering"/>
          <date month="February" year="2006"/>
          <abstract>
            <t>This specification defines the addressing architecture of the IP Version 6 (IPv6) protocol. The document includes the IPv6 addressing model, text representations of IPv6 addresses, definition of IPv6 unicast addresses, anycast addresses, and multicast addresses, and an IPv6 node's required addresses.</t>
            <t>This document obsoletes RFC 3513, "IP Version 6 Addressing Architecture". [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="4291"/>
        <seriesInfo name="DOI" value="10.17487/RFC4291"/>
      </reference>
      <reference anchor="RFC6335" target="https://www.rfc-editor.org/info/rfc6335" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6335.xml">
        <front>
          <title>Internet Assigned Numbers Authority (IANA) Procedures for the Management of the Service Name and Transport Protocol Port Number Registry</title>
          <author fullname="M. Cotton" initials="M." surname="Cotton"/>
          <author fullname="L. Eggert" initials="L." surname="Eggert"/>
          <author fullname="J. Touch" initials="J." surname="Touch"/>
          <author fullname="M. Westerlund" initials="M." surname="Westerlund"/>
          <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
          <date month="August" year="2011"/>
          <abstract>
            <t>This document defines the procedures that the Internet Assigned Numbers Authority (IANA) uses when handling assignment and other requests related to the Service Name and Transport Protocol Port Number registry. It also discusses the rationale and principles behind these procedures and how they facilitate the long-term sustainability of the registry.</t>
            <t>This document updates IANA's procedures by obsoleting the previous UDP and TCP port assignment procedures defined in Sections 8 and 9.1 of the IANA Allocation Guidelines, and it updates the IANA service name and port assignment procedures for UDP-Lite, the Datagram Congestion Control Protocol (DCCP), and the Stream Control Transmission Protocol (SCTP). It also updates the DNS SRV specification to clarify what a service name is and how it is registered. This memo documents an Internet Best Current Practice.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="165"/>
        <seriesInfo name="RFC" value="6335"/>
        <seriesInfo name="DOI" value="10.17487/RFC6335"/>
      </reference>
      <reference anchor="RFC8520" target="https://www.rfc-editor.org/info/rfc8520" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8520.xml">
        <front>
          <title>Manufacturer Usage Description Specification</title>
          <author fullname="E. Lear" initials="E." surname="Lear"/>
          <author fullname="R. Droms" initials="R." surname="Droms"/>
          <author fullname="D. Romascanu" initials="D." surname="Romascanu"/>
          <date month="March" year="2019"/>
          <abstract>
            <t>This memo specifies a component-based architecture for Manufacturer Usage Descriptions (MUDs). The goal of MUD is to provide a means for end devices to signal to the network what sort of access and network functionality they require to properly function. The initial focus is on access control. Later work can delve into other aspects.</t>
            <t>This memo specifies two YANG modules, IPv4 and IPv6 DHCP options, a Link Layer Discovery Protocol (LLDP) TLV, a URL, an X.509 certificate extension, and a means to sign and verify the descriptions.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8520"/>
        <seriesInfo name="DOI" value="10.17487/RFC8520"/>
      </reference>
      <reference anchor="RFC8995" target="https://www.rfc-editor.org/info/rfc8995" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8995.xml">
        <front>
          <title>Bootstrapping Remote Secure Key Infrastructure (BRSKI)</title>
          <author fullname="M. Pritikin" initials="M." surname="Pritikin"/>
          <author fullname="M. Richardson" initials="M." surname="Richardson"/>
          <author fullname="T. Eckert" initials="T." surname="Eckert"/>
          <author fullname="M. Behringer" initials="M." surname="Behringer"/>
          <author fullname="K. Watsen" initials="K." surname="Watsen"/>
          <date month="May" year="2021"/>
          <abstract>
            <t>This document specifies automated bootstrapping of an Autonomic Control Plane.  To do this, a Secure Key Infrastructure is bootstrapped.  This is done using manufacturer-installed X.509 certificates, in combination with a manufacturer's authorizing service, both online and offline.  We call this process the Bootstrapping Remote Secure Key Infrastructure (BRSKI) protocol.  Bootstrapping a new device can occur when using a routable address and a cloud service, only link-local connectivity, or limited/disconnected networks.  Support for deployment models with less stringent security requirements is included.  Bootstrapping is complete when the cryptographic identity of the new key infrastructure is successfully deployed to the device.  The established secure connection can be used to deploy a locally issued certificate to the device as well.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8995"/>
        <seriesInfo name="DOI" value="10.17487/RFC8995"/>
      </reference>
      <reference anchor="RSK" target="">
        <front>
          <title>Ten Risks of PKI: What You're Not Being Told About Public Key Infrastructure</title>
          <author fullname="Carl Ellison" surname="Ellison"/>
          <author fullname="Bruce Schneier" surname="Schneier"/>
          <date year="2000"/>
        </front>
      </reference>
      <reference anchor="SDSI" target="">
        <front>
          <title>SDSI - A Simple Distributed Security Infrastructure</title>
          <author fullname="R. L. Rivest" surname="Rivest"/>
          <author fullname="B. W. Lampson" surname="Lampson"/>
          <date year="1996" month="April"/>
        </front>
      </reference>
      <reference anchor="SIOT" target="https://tonytruong.net/how-to-use-the-tpm-to-secure-your-iot-device-data/">
        <front>
          <title>How to Use the TPM to Secure Your IoT/Device Data</title>
          <author fullname="Tony Truong" surname="Truong"/>
          <date year="2017" month="January"/>
        </front>
      </reference>
      <reference anchor="SKH" target="https://lwn.net/Articles/768419/">
        <front>
          <title>Secure key handling using the TPM</title>
          <author fullname="Tom Yates" surname="Yates"/>
          <date year="2018" month="October"/>
        </front>
      </reference>
      <reference anchor="SNC" target="https://named-data.net/wp-content/uploads/securing-network-content-tr.pdf">
        <front>
          <title>Securing Network Content</title>
          <author fullname="Diana K. Smetters" surname="Smetters"/>
          <author fullname="Van Jacobson" surname="Jacobson"/>
          <date year="2009" month="October"/>
        </front>
      </reference>
      <reference anchor="SOD" target="https://doc.libsodium.org/">
        <front>
          <title>libsodium</title>
          <author fullname="Daniel Bernstein" surname="Bernstein"/>
          <author fullname="Tanja Lange" surname="Lange"/>
          <author fullname="Peter Schwabe" surname="Schwabe"/>
          <date year="2022"/>
        </front>
      </reference>
      <reference anchor="SPRV" target="http://supervisord.org/">
        <front>
          <title>Supervisor: A Process Control System</title>
          <author fullname="AgendalessConsulting" surname="AgendalessConsulting"/>
          <date year="2022"/>
        </front>
      </reference>
      <reference anchor="ST" target="https://smartthings.developer.samsung.com/docs/api-ref/st-api.html##operation/listCapabilities">
        <front>
          <title>SmartThings API (v1.0-PREVIEW)</title>
          <author fullname="Samsung" surname="Samsung"/>
          <date year="2020"/>
        </front>
      </reference>
      <reference anchor="STNDN" target="">
        <front>
          <title>Schematizing Trust in Named Data Networking</title>
          <author fullname="Yingdi Yu" surname="Yu"/>
          <author fullname="Alexander Afanasyev" surname="Afanasyev"/>
          <author fullname="David D. Clark" surname="Clark"/>
          <author fullname="kc claffy" surname="claffy"/>
          <author fullname="Van Jacobson" surname="Jacobson"/>
          <author fullname="Lixia Zhang" surname="Zhang"/>
          <date year="2015"/>
        </front>
      </reference>
      <reference anchor="TATT" target="https://docs.microsoft.com/en-us/azure/iot-dps/concepts-tpm-attestation">
        <front>
          <title>TPM attestation</title>
          <author fullname="Microsoft" surname="Microsoft"/>
          <date year="2021" month="June"/>
        </front>
      </reference>
      <reference anchor="TLSvuln" target="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4232952/">
        <front>
          <title>Using Frankencerts for Automated Adversarial Testing of Certificate Validation in SSL/TLS Implementations</title>
          <author fullname="C. Brubaker et al." surname="al."/>
          <date year="2014" month="November"/>
        </front>
      </reference>
      <reference anchor="TPM" target="https://www.globalsign.com/en/resources/white-papers-ebooks/white-paper-tpm-20-and-certificate-based-iot-device-authentication">
        <front>
          <title>TPM 2.0 and Certificate-Based IoT Device Authentication</title>
          <author fullname="Paul Griffiths" surname="Griffiths"/>
          <date year="2020" month="September"/>
        </front>
      </reference>
      <reference anchor="W509" target="https://en.wikipedia.org/wiki/X.509#Security">
        <front>
          <title>X.509: Security</title>
          <author fullname="Wikipedia" surname="Wikipedia"/>
          <date year="2021" month="October"/>
        </front>
      </reference>
      <reference anchor="WSEN" target="https://www.aceee.org/files/proceedings/2002/data/papers/SS02_Panel7_Paper10.pdf">
        <front>
          <title>Wireless Sensors: Technology and Cost-Savings for Commercial Buildings</title>
          <author fullname="M. Kintner-Meyer" surname="Kintner-Meyer"/>
          <author fullname="M Brambley" surname="Brambley"/>
          <author fullname="T. Carlon" surname="Carlon"/>
          <author fullname="N. Bauman" surname="Bauman"/>
          <date year="2002"/>
        </front>
      </reference>
      <reference anchor="WegmanC81" target="https://doi.org/10.1016/0022-0000(81)90033-7">
        <front>
          <title>New Hash Functions and Their Use in Authentication and Set Equality</title>
          <author fullname="Mark N. Wegman" surname="Wegman"/>
          <author fullname="Larry Carter" surname="Carter"/>
          <date year="1981"/>
        </front>
      </reference>
      <reference anchor="ZCL" target="https://zigbeealliance.org/wp-content/uploads/2019/12/07-5123-06-zigbee-cluster-library-specification.pdf">
        <front>
          <title>Zigbee Cluster Library Specification Revision 6</title>
          <author fullname="zigbeealliance" surname="zigbeealliance"/>
          <date year="2019"/>
        </front>
      </reference>
    </references>
    <section anchor="contributors" numbered="false">
      <name>Contributors</name>
      <contact initials="L." surname="Lixia" fullname="Lixia Zhang">
        <organization>UCLA</organization>
        <address>
          <postal>
            <street/>
          </postal>
          <email>lixia@cs.ucla.edu</email>
        </address>
      </contact><contact initials="R." surname="Jungerman" fullname="Roger Jungerman">
        <organization>Operant Networks Inc.</organization>
        <address>
          <postal>
            <street/>
          </postal>
        </address>
      </contact><t>Roger contributed much to <xref target="use-cases"/>.</t>
    </section>
  </back>
</rfc>
