<?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-tsv-defined-trust-transport-00" 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-tsv-defined-trust-transport-00" 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 combined with IPv6 multicast and modern hardware-based methods for securing keys and code 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 IoT (IIoT) 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 data "phone calls" 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 (devices such as sensors only exist to communicate). Since OT's function is coordination and control, communication is many-to-many, not two-party. As <xref target="transporting-information"/> notes, implementing many-many over two-party changes the configuration burden and traffic scaling from the native media's O(<em>n</em>) to O(<em>n</em><sup>2</sup>). Also, OT devices have specific, highly prescribed roles with strict constraints on "who can say what to which". The opacity of modern encrypted two-party connections can make it impossible to enforce or even audit these constraints.</t>
      <t>This memo describes a new, open 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 (specifically IPv6 link-local<xref target="RFC4291"/>), distributed set reconciliation PDU transport, a flexible application-level pub/sub, and a declarative language used to define the local context and communication constraints of a deployment.
The language is compiled into a compact, optimized <em>trust schema</em> used by DeftT's runtime trust management engine to enforce adherence to the constraints.
The resulting system is both efficient and scalable:
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.</t>
      <t>Device enrollment consists of securely configuring a device with one or more <em>identity bundles</em>, each
containing a signing (identity) certificate plus secret key together with all the certs in the identity's signing chain
and the trust schema that governs what the identity can say and hear.
All signing chains share a common trust root so the bundle suffices for the device to authenticate and
authorize communication from peers and vice-versa.
Thus new entities can be added without changes to the existing members
and, since an OT system's "who says what to which" communication patterns are constraints, the trust schema can subsume all the 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 overwhelmingly prefer radio as a communication medium. Use of wires is impossible in many installations (untethered Things, adding smart 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 costs <tt>$</tt>0.13 in small quantities while the estimated cost of pulling cable to retrofit nuclear power plants is <tt>$</tt>2000/ft <xref target="NPPI"/>.</t>
        <t>OT communications are frequently local with a many-to-many communication pattern using application-specific identifiers ("topics") for rendezvous. This fits the generic Publish/Subscribe communications model 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 probably the most widely used IoT protocol (<eref target="https://mqtt.org/use-cases/">https://mqtt.org/use-cases/</eref>).
In addition to providing local pub/sub in buildings, factories and homes, Microsoft Azure, Amazon AWS,
Google Cloud, and Cloudflare all offer hosted MQTT brokers for collecting and connecting sensor and control data.</t>
        <t>Pub/sub protocols are not connection or session oriented but instead organized around publishing and subscribing to topics.  To communicate, publishers and subscribers need to use the same topic but need no knowledge of one another. IoT pub/sub is typically implemented as an application layer protocol over an Internet transport like TCP or TLS. These endpoint-based transport protocols do require in-advance configuration of peer addresses and credentials at each endpoint.</t>
      </section>
      <section anchor="transporting-information">
        <name>Transporting information</name>
        <t>The smart lighting example of <xref target="fig1"/> shows a topic-based publish/subscribe application layer protocol and a wireless broadcast domain. 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 message published by the switch is heard by all nine devices.
IPv6 multicast provides a network layer that can take advantage of this but current IP transport protocols cannot.
Instead, each switch needs to establish nine 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="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>.
The 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.</t>
        <figure anchor="fig2">
          <name>Brokers enable Pub/Sub over connection/session protocols
</name>
          <artwork type="svg" originalSrc="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>A transport protocol not organized around bilateral associations ("connections") would better suit this problem. In the distributed systems literature, communication associated with coordinating shared objectives has long been modeled by the mathematics of distributed set reconciliation. In this approach, the domain of discourse is some named set, e.g., <em>myhouse.iot</em>, the event created by a button press on a switch is added as a new object to the instance of <em>myhouse.iot</em> at its point of origin, then the reconciliation process ensures that every entity holding <em>myhouse.iot</em> has the same set of objects by propagating this new object. Recent progress in distributed set reconciliation via Invertible Bloom Lookup Tables (IBLTs) <xref target="DIFF"/><xref target="IBLT"/><xref target="MPSR"/> enables solution of this problem by a simple, efficient multicast transport. DeftT implements IBLT set reconciliation and takes advantage of IPv6's ability to use link local multicast without requiring manual configuration or a routing agent, yielding <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>In addition to reliability, current transport protocols provide some security via encrypting the sessions between end points.  In the Internet, trust in the credentials of an endpoint (e.g., a website) is usually attested by a third party certificate authority (CA) and is bound to a DNS name. Each secure transport association requires the exchange of these credentials. Instead of third party certificates, OT tends to prefer locally created certificates, configuring them into on-device trusted enclaves <xref target="TPM"/><xref target="HSE"/><xref target="ATZ"/> as part of the device enrollment process. Thus, a transport for OT should work with a local root of trust.  In <xref target="fig2"/> each connection is a separate security association where each device needs to validate the broker's credential and the broker has to validate each device's (the validity check usually involves cryptographic verification of a signature chain terminating on a common trust root). This approach ensures that transport associations are between two enrolled devices (protecting against outsider and some MITM attacks) and allows for secure exchange of a nonce symmetric key that can be used to ensure transport privacy. However, once transport has been established there are no constraints whatsoever on what devices can say. Thus this type of security does not protect against the insider attacks that currently plague OT, e.g., <xref target="CHPT"/> description of a lightbulb taking over a network.  Hardening an OT system against these attacks requires trust management operating at the individual publication level, not the connection or session level. 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 the session is established, its security handles the "fwupd" publications the same way as the "on/off" publications. Per-publication trust decisions can enable the fwupd from the light switch to be rejected.</t>
        <t>The requirement for per-publication trust decisions combined with OT's preponderance of many-to-many communications over broadcast infrastructure suggests that per-publication signing is preferable to session-based signing. 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. This results 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. If, as described in <xref target="DLOG"/>, the system's trust requirements are expressed using a <em>declarative</em> framework, 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, then distributed, validated and updated using the same mechanisms used for identity certificates.  This trust schema can be used both to 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.</t>
        <t>OT communication maps well to pub/sub because it consists of independent messages that, due to interoperability requirements, 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"/>.
Using conventional session-based transports combines these independent publications under a single session key.
Moving to a publication-based transport makes it possible to embed the trust management mechanism described above directly in the publish and subscribe data paths as shown below:</t>
        <figure anchor="fig3">
          <name>Trust management elements of DeftT.
</name>
          <artwork type="svg" originalSrc="trustElements-rfc.svg"><svg xmlns="http://www.w3.org/2000/svg" width="50%" height="50%" viewBox="0 0 364 278">
              <desc>trustElements</desc>
              <title>trustElements-rfc</title>
              <g stroke-width="1" fill="none" fill-rule="evenodd">
                <g transform="translate(12.000000, 139.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, 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="#FFFFFF" x="0" y="0" width="129" height="33"/>
                  <text font-family="sans-serif" font-size="14" font-weight="normal" fill="#000000">
                    <tspan x="18.4633789" y="22">Trust Schema</tspan>
                  </text>
                </g>
                <g transform="translate(108.000000, 193.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(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="#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, 222.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, 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(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>
                <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="#FFFFFF" x="0" y="0" width="99" height="35" rx="8"/>
                  <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                    <tspan x="10.5400391" y="14">Trust Schema </tspan>
                    <tspan x="23.5185547" y="29">Compiler</tspan>
                  </text>
                </g>
                <g transform="translate(148.000000, 5.000000)">
                  <ellipse stroke="black" fill="#FFFFFF" 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="#FFFFFF" 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="2.83886719" y="26">Trust 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 style of trust management extends LangSec's <xref target="LANG"/> "be definite in what you accept" principle by using the authenticated common ruleset for belt-and-suspenders enforcement by both ends of the transport:
If the trust schema shows the publication builder it doesn't have the credentials needed to produce a valid publication, an error is thrown and nothing is published.
Independently, if the publication validator doesn't have a locally validated,
complete signing chain for the credential that signed some pub, the schema shows the
signing chain isn't appropriate to the pub, or the pub's signature doesn't validate, the pub is ignored.
Since an app's subscriptions determine the pubs it will see, only
certs of chains that sign pubs 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 not 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.
And, unlike most 'secure' systems, adding additional trust schema constraints to reduce attack surface results in devices doing <em>less</em> work.</t>
        <t>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 particular for a deployment. We anticipate that the efforts to create common data models for specific sectors will lead to easier and more forms-based configuration of DeftT deployments.</t>
      </section>
      <section anchor="current-status">
        <name>Current status</name>
        <t>An open-source Defined-trust Communications Toolkit <xref target="DCT"/> with a reference implementation of DeftT is maintained by the corresponding author's company, Pollere. Pollere is also working on home IoT uses.  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 and Operant welcome collaborators with problems suitable for DeftT.</t>
        <t><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 domains.
As the needs of our use cases expand, the Defined-trust Communications (DC) architecture will evolve. Working implementations and performance improvements are occasionally added to the repository.
This reflects the development philosophy of DC to start from solving useful problems with a well-defined scope and extend from there.
DeftT's reference implementation 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.</t>
      </section>
    </section>
    <section anchor="terms-and-definitions">
      <name>Terms and Definitions</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here.</t>
      <ul spacing="compact">
        <li>DC: Defined-trust Communications</li>
        <li>Defined-trust transport (DeftT): the transport protocol of DC</li>
        <li>DCT: Defined-trust Communications Toolkit. Running code, examples and documentation for DC tools, a trust schema language and compiler, a DeftT implementation, and illustrative examples</li>
        <li>trust 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 "readable" or "binary" will be used. The binary version is placed in a certificate signed by a trust anchor.</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 DCF, a trust anchor is a self-signed certificate which is the ultimate signer of all certificates in use in a trust domain, including the trust schema. From RFC4949: trust anchor definition: An established point of trust (usually based on the authority of some person, office, or organization) from which a certificate user begins the validation of a certification chain.</li>
        <li>trust domain (TD): a zero trust network governed by a single trust anchor and trust schema which is enforced at run-time by a library using a signed binary copy of the trust schema at each member entity. Nothing is accepted without validation; non-conforming communications are silently discarded. As the trust schema cert is signed by the trust anchor, the trust schema cert's thumbprint uniquely identifies a trust domain.</li>
        <li>signing identity: a unique signing certificate of a particular entity that is the leaf of a certificate chain that terminates in the local root of trust. Certificates in the chain contain role and capability information thus signing identities are distributed with their chain-of-trust</li>
        <li>capabilities: certificates that contain attributes of a signing identity  and are part of the identity's chain-of-trust as defined in a trust schema</li>
        <li>certificate thumbprint: the 32 byte SHA256 digest of the entire signing cert including its signature ensuring that each thumbprint resolves to one and only one cert and signing chain</li>
        <li>identity bundle - entities in a trust zone are commissioned with an identity bundle of trust anchor, signed trust schema, and the signing certs associated with a particular identity</li>
        <li>protocol data unit (PDU): (following the wikiPedia definition) a single unit of information transmitted among peer entities of a computer network composed of protocol-specific control information and user data</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 trust schema. Publications are the elements of 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>sync zone: a trust domain, or subdomain, on a single subnet. A sync zone comprises all the sync collections that DeftTs with a particular trust schema participate in on a single subnet (e.g., pubs, cert, keys)</li>
        <li>sync protocol: a protocol that implements the set reconciliation of Publications making use of cState and cAdd PDUs</li>
        <li>collection: a set of elements denoted by structured names including the identifier of a particular trust
schema</li>
        <li>cState: (from "collection state")</li>
        <li>cAdd: (from "collection additions")</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>trust-based relay: a special-purpose entity that connects a trust domain across different subnets</li>
        <li>Things: as per <xref target="RFC8520"/>, networked digital devices specifically not intended to be used for general purpose computing</li>
      </ul>
    </section>
    <section anchor="deftt-and-defined-trust-communications">
      <name>DeftT and Defined-trust Communications</name>
      <t>DeftT  synchronizes and secures communications between enrolled entities of a Limited Domain <xref target="RFC8799"/>. Like QUIC, DeftT is a user-space transport protocol that sits between an application and a system-provided transport like UDP. DeftT's set reconciliation communication model contrasts with the bilateral communication model of TCP or QUIC where a source and a destination coordinate with one another to transport information. DeftT collections (sets) are denoted by structured names including the identifier of a particular trust schema.
Communicating DeftTs may hold different subsets of the collection at any time (e.g., immediately after entities add elements to the collection) but the protocol ensures they all converge to holding the complete set of elements within a few round-trip-times following the changes.</t>
      <section anchor="deftt-role-in-application-communications">
        <name>DeftT role in application communications</name>
        <t>DeftT's security enforces "who can say what to which" as well as providing required integrity, authenticity and confidentiality.
Applications use DeftT to add to and access from a distributed collection of Publications.
Transparently to applications, a DeftT instance both constructs and validates all Publications against a set of formal, validated rules. Each new DeftT is configured with these rules in certificate form along with a signing chain that includes its private signing identity and has the same root of trust as the certificate of trust rules. A DeftT is identified by its signing identity and the role and capabilities in that identity's signing chain. Each DeftT must add its credentials (signing chain) to a certificate collection prior to adding publications to the collection. DeftT validates credentials as a chain of trust against the shared trust rules and does not accept Publications without a fully validated signer identity.</t>
        <t>Communicating DeftTs must be in the same <em>trust domain</em> (TD), i.e., identities derive from the same root of trust and follow an identical trust schema. Using this shared set of rules, DeftT provides fully distributed policy enforcement for the TD without relying on a secured-perimeter physical network and/or extensive per-device configuration. Trust schemas are distributed as a trust-root-signed certificate and that certificate's thumbprint uniquely identifies a TD in DeftT PDUs. DeftT can share an IP network with non-DeftT traffic as well as DeftT traffic of a different TD.  Privacy via AEAD PDU content encryption is automatically handled within DeftT.</t>
        <figure anchor="fig4">
          <name>DeftT's external interaction in a network stack
</name>
          <artwork type="svg" originalSrc="./transportBD0v2-rfc.svg"><svg xmlns="http://www.w3.org/2000/svg" width="80%" height="80%" viewBox="0 0 408 140">
              <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.262" y="69.4380806">r</tspan>
                  <tspan x="344.826" 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="83" 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="119.894" y="52.3560806">r</tspan>
                  <tspan x="123.458" y="52.3560806">est</tspan>
                </text>
                <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                  <tspan x="238.112" y="17.0200806">local adds </tspan>
                </text>
                <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                  <tspan x="232.892" y="29.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>
                <line x1="144.728" y1="57.5" x2="85.406" y2="57.5933" stroke="black" stroke-linecap="square"/>
                <line x1="144.728" y1="57.5" x2="85.406" y2="57.5933" stroke="#FFFFFF" stroke-width="0.5" stroke-linecap="square"/>
                <polygon fill="#000000" points="77.406 57.60584 85.41071 60.59326 85.40127 54.59327"/>
                <polygon stroke="black" stroke-width="0.25" points="77.406 57.6058 85.4107 60.5933 85.4013 54.5933"/>
                <line x1="138.162" y1="74.8909" x2="78.84" y2="74.9842" stroke="black" stroke-linecap="square"/>
                <line x1="138.162" y1="74.8909" x2="78.84" y2="74.9842" stroke="#FFFFFF" stroke-width="0.5" stroke-linecap="square"/>
                <polygon fill="#000000" points="146.162 74.87834 138.1573 71.89092 138.1667 77.89091"/>
                <polygon stroke="black" stroke-width="0.25" points="146.162 74.8783 138.1573 71.8909 138.1667 77.8909"/>
                <line x1="307.892" y1="104" x2="236.742" y2="104.0953" stroke="black" stroke-linecap="square"/>
                <line x1="307.892" y1="104" x2="236.742" y2="104.0953" stroke="#FFFFFF" stroke-width="0.5" stroke-linecap="square"/>
                <polygon fill="#000000" points="228.742 104.10604 236.746 107.09532 236.738 101.09532"/>
                <polygon stroke="black" stroke-width="0.25" points="228.742 104.106 236.746 107.0953 236.738 101.0953"/>
                <line x1="299.042" y1="33.1839" x2="227.892" y2="33.2792" stroke="black" stroke-linecap="square"/>
                <line x1="299.042" y1="33.1839" x2="227.892" y2="33.2792" stroke="#FFFFFF" stroke-width="0.5" stroke-linecap="square"/>
                <polygon fill="#000000" points="307.042 33.1731 299.038 30.1839 299.046 36.1839"/>
                <polygon stroke="black" stroke-width="0.25" points="307.042 33.1731 299.038 30.1839 299.046 36.1839"/>
                <line x1="299.858" y1="68.0979" x2="237.558" y2="68.1813" stroke="black" stroke-linecap="square"/>
                <line x1="299.858" y1="68.0979" x2="237.558" y2="68.1813" stroke="#FFFFFF" stroke-width="0.5" stroke-linecap="square"/>
                <polygon fill="#000000" points="229.558 68.19204 237.562 71.18132 237.554 65.18132"/>
                <polygon stroke="black" stroke-width="0.25" points="229.558 68.192 237.562 71.1813 237.554 65.1813"/>
                <polygon fill="#000000" points="307.858 68.08714 299.854 65.09786 299.862 71.09785"/>
                <polygon stroke="black" stroke-width="0.25" points="307.858 68.0871 299.854 65.0979 299.862 71.0979"/>
              </g>
            </svg>
          </artwork>
        </figure>
        <t><xref target="fig4"/> shows the data that flows in and out of a DeftT instance. An application-specific format is used for information exchanged with an application. DeftT uses its trust schema to turn this information into Publications that it adds to its set (<em>sync</em> collection). DeftT implements two types of transport PDU, both broadcast on its subnet, that it uses to manage the set. One represents the <em>collection state</em> (cState) of one or more DeftTs by an IBLT that contains all the Publications the DeftT currently has in its collection. The cState serves as a query for additional data that isn't reflected in its local state. The other PDU carries the <em>collection additions</em> (cAdds) that are sent in response to a cState. Reception of a cAdd with new data responds to a particular cState so a receiving DeftT removes that cState as a pending query (it will be replaced with a new cState with the addition of the new items). DeftT requires and implements signing and validation of publications as well as the cAdd PDUs that transport them.  As these dynamics are exactly that of Named-Data Networking's Interest (cState) and Data (cAdd) packets, the DeftT reference implementation uses a restricted subset of that format for its PDUs along with its own broadcast-optimized Face protocol. (DeftT does not utilize a NDN forwarder or implement the full NDN protocol.)</t>
        <t>Any DeftT that is missing a Publication (due to being out-of-range or asleep, etc.) can receive it from any other DeftT. The reconciliation protocol will continue to send cAdds as long as cStates are received that don't contain some of their 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. DeftT's reference implementation includes an efficient multicast-optimized approach.</t>
      </section>
      <section anchor="information-movement-is-based-on-trust-rules">
        <name>Information movement is based on trust rules</name>
        <t>The Internet's transport and routing protocols emphasize universal reachability and packet forwarding is based on destination.
A significant number of uses neither need nor desire to transit the Internet.
For a wide class of OT applications, depending on the good sending practices of others while accepting packets has left critical applications open to misconfiguration and attacks.
DC only moves its Publications if they follow trust rules, an approach that differs from Internet forwarding but offers new opportunities.</t>
        <t>DeftTs on the same subnet may not be in the same trust domain (TD) and DeftTs in the same TD may not be on the same subnet. In the former case, cState and cAdd PDUs of different TDs are differentiated by the trust domain id (thumbprint of the certificate holding the domain's trust rules) which can be used to determine whether or not to process a PDU. A particular sync zone is managed on a single subnet: cState and cAdds are not forwarded off that subnet. Trust-based <em>relays</em> connect separate sync zones while preserving a trust domain for the publications. A relay is an application running on a device with a network interface on each subnet that has two or more DeftT instances. Each DeftT participates in a different sync zone and has a signing identity valid for its sync zone. Each subnet's DeftT uses the same trust rules to validate Publications and those that arrive via one DeftT are added to the collections of all other DeftTs of the relay (after validation). Only Publications are relayed between subnets and the Publication must match a trust rule in the DeftT's trust engine. (Note that cAdd encryption is unique per subnet/sync collection.)</t>
      </section>
      <section anchor="relays-extend-a-trust-domain">
        <name>Relays extend a trust domain</name>
        <t>Relay DeftTs use a special API module (a "shim", see <xref target="shims"/>) that performs "pass-through" of valid Publications rather than creating Publications.
The relay of <xref target="fig5"/>-left has three separate wireless subnets. If all three DeftTs use the same trust schema, a new validated cert added to the cert store of one DeftT is passed to the other two, which will validate it before adding to its own cert store (superfluous in this case, but not a lot of overhead for additional security). When a valid Publication is received by one DeftT, it is passed to the other two DeftTs to validate against their trust schema copies and published if it passes.</t>
        <figure anchor="fig5">
          <name>Relays connect subnets
</name>
          <artwork type="svg" originalSrc="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>Relays can also connect subsets of a TD, either proper subsets or overlapping subsets.
A relay may have different identities and trust schemas for each of its DeftT but must have the same trust anchor. Publications that are undefined for a particular DeftT will not pass its validation and will be silently discarded.
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 format in its ruleset. If the added efficiency of filtering Publications prior to validation checks is desired, a relay can be altered to limit subscriptions (a one-line change) on some DeftT(s) or may add code to filter Publications before passing to other DeftT(s). <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 networks. Everything on each local network shows up on the other. A TD 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 networks with no additional configuration (i.e., relays on a broadcast network do not need to be configured with others' identities). The mesh is efficient: publications are only added to an individual DeftT's collection once regardless of how it is received. More on the applicability of DeftT meshes is in <xref target="use-cases"/>.</t>
      </section>
      <section anchor="deftt-and-congestion-control">
        <name>DeftT and congestion control</name>
        <t>Each DeftT instance 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 DeftT instances having the same collection name on each subnet with an app-level <em>publication</em> relay between them but DeftT never forwards <em>PDUs</em> between subnets. It is, of course, possible to run DeftT over an extended broadcast network like a PIM multicast group (or NDN NFD forwarding mesh?) 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 described in the previous section.</t>
        <t>DeftT will send <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 app-level publication rate.
As described in <xref target="deftt-role-in-application-communications"/>, instances publish a cState specifying the set elements they currently hold. If an instance receives a cState specifying the same elements it holds, it doesn't send its cState. Thus the upper bound on cState publication rate is the number of peers 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 peer 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 peers - 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 TD over a path whose bandwidth delay product is many times larger than typical subnet MTUs (1.5-9KB), the one-outstanding-PDU per peer 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 PDU but their congestion control is handled by TCP or QUIC.</t>
      </section>
      <section anchor="defined-trust-management">
        <name>Defined-trust management</name>
        <t>OT applications are distinguished (from general digital communications) by well-defined roles, behaviors and relationships that constrain the information to be communicated. Structured abstract profiles characterize the capabilities and attributes of Things and can be machine-readable. 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"/>. These structured profiles and rules strictly define permitted behaviors including what types of messages can be issued or acted on; undefined behaviors should not be permitted. DC can incorporate these rules along with local configuration directly into the trust schemas used in DeftT's integrated trust management engine. 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>DeftT's trust engine modules use trust schemas which are compiled into a binary format to become the content of a certificate signed by the trust domain's root of trust. The trust schema contains the defined rules that describe the format of PDUs and the specific roles and credentials that must be in the signing chain of entities that create them. Defined-trust Communications includes the use of trust schemas, a language for expressing the trust schemas, and the use of a compiler and other tools to create the credentials a DeftT needs at run-time to function in a particular TD.</t>
        <section anchor="about-trust-schemas">
          <name>About trust schemas</name>
          <t>Defined-trust communications formalizes the rules governing communications in <em>trust schemas</em>. Trust schemas grew out of early work in CCN <xref target="SNC"/> which in turn was partially based on the seminal SDSI <xref target="SDSI"/> approach to create user-friendly namespaces creating transitive trust through a certificate (cert) chain that validates locally controlled and managed keys, rather than requiring a global Public Key Infrastructure (PKI). Certificates are created that have a particular context in which they should be utilized and trusted rather than conferring total authority. <xref target="CRTMG"/> proposed using locally controlled and administered secure identities that were verifiable at each (routing) process to provide a key management structure for intradomain IP routing. Blaze et. al. <xref target="DTM"/> defined the term <em>trust management</em> for the study of security policies, security credentials, and trust relationships. Li et. al. <xref target="DLOG"/> later refines some trust management concepts arguing that the expressive language for the rules should be declarative (as opposed to the original work). This body of work influences that of trust schemas, which allow for specifying security rules based on application name structures. Trust schemas for Named-Data Networking were 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" and gave a general description of how trust schema rules might be used by an authenticating interpreter finite state machine to apply the rules to packets, only addressing validation.</t>
          <t>A new approach to both the trust schema language and the integration of trust schemas with applications was introduced in <xref target="NDNW"/>, extended in <xref target="DNMP"/><xref target="DCT"/>. In this approach, a trust 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 <xref target="DLOG" sectionFormat="bare" relative="#" section="p.4"/>, 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 and an implementation (VerSec) 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 binary form is used by DeftT to build (case 2) or validate (case 3) the Publications of a sync collection. In the reference implementation <xref target="DCT"/>, these objects are called "publications" and have names, content and signatures (using a restricted subset of NDN Data packets, covered in <xref target="formats"/>). Certificates are a type of publication, allowing them to be distributed and validated
using DeftT, but they are subject to many additional constraints (<xref target="about-dc-certificates"/>,<xref target="certificates"/>)
that ensure DeftT's security framework is well-founded.</t>
        </section>
        <section anchor="a-language-for-deftt-trust-schemas">
          <name>A language for DeftT trust schemas</name>
          <t>The language follows LangSec <xref target="LANG"/> principles to minimize misconfiguration and attack surface. It has a structure amenable to a forms-based input or a translator from structured data descriptions. Declarative languages are expressive and strongly typed, so they can express the constructs in these standards in the trust schema. Versec continues to evolve to add new features as we expand our application domains and 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>Defined-trust Communications makes the rules of trust available to every entity. A trust schema expresses the intent for an application domain's communications in fine-grained rules: who can say what. Credentials that define "who" are specified along with complete definitions of "what". For application domains where the communicating entities share an administrative control, using a third party to certify identity is unnecessary  and can introduce vulnerability. Defined-trust Communications is targeted at OT networking where administrative control is explicit and it is not unreasonable to assume that identities and trust rules are securely configured for every deployed entity.</t>
          <t>A trust schema details the meaning and relationship of individual components of the filename-like names (URI syntax RFC3986) of publications and certificates. A simple trust schema (<xref target="fig6"/>) defines a publication of this trust domain as  #pub with a six component name. The strings between the slashes are the tags used to reference each component in the structure form and in the run-time schema library. An example of this usage is the component constraint following the "&amp;"  where ts 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."  #pubPrefix  is designated as this single component (though multiple components are permitted) so that the trust schema contains information on what part of the name is considered common prefix. The <xref target="fig6"/> trust schema puts no constraints on other name components (not the usual case for OT applications) but does require that Publications of template #pub are signed by ("&lt;=") a roleCert 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. The trust domain defined by 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) but must sign all Publication using the EdDSA algorithm and the Collection synchronization module must sign all cAdds using the EdDSA algorithm. Entity identity comes from a roleCert (including private key) which allows it to create legal communications. The signing certificate MUST adhere to the trust schema and Publications or cAdds with unknown signers are discarded. The timestamp component can be used to prevent replay attacks. DeftT is structured to add its identity (public) certs to a trust domain's certificate collection (see {#certificates)) when instantiated, making its identity available to all other entities in the trust domain. This approach means entities are not configured with identities of other members of a trust domain and new entities can join a trust domain at any time.</t>
          <figure anchor="fig6">
            <name>An example trust schema
</name>
            <artwork>#pub: /_domain/trgt/topic/loc/arg/_ts &amp; { _ts: timestamp() } &lt;= roleCert
roleCert:       _domain/_role/_roleId/_keyinfo &lt;= netCert
netCert:        _domain/_keyinfo
#pubPrefix:     _domain
#pubValidator:  "EdDSA"
#cAddValidator: "EdDSA"
_domain:        "example"
_keyinfo:       "KEY"/_/"dct"/_
</artwork>
          </figure>
          <t>To keep the trust schema both compact and secure, it is compiled into a binary format that is the content of a trust schema certificate. <xref target="DCT"/> contains a compiler (schemaCompile) that converts the text version (e.g. <xref target="fig6"/>) of the trust schema into a binary output file as well as diagnostic output (see <xref target="fig7"/>)  used to confirm the intent of the trust rules (and which will flag problems). Entities are configured with the trust domain's trust anchor, the trust schema and their own identity in the trust domain. From these elements, any other TD member's credentials can be verified, so no entity has apriori knowledge of any other entity. Device configuration should be carried out using appropriate applicable best practices <xref target="TATT"/><xref target="DMR"/><xref target="IAWS"/><xref target="TPM"/><xref target="RFC8995"/>.</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 roleCert: /"example"/_role/_roleId/"KEY"/_/"dct"/_
  cert netCert: /"example"/"KEY"/_/"dct"/_
binary schema  is 301 bytes
</artwork>
          </figure>
          <t>This simple trust schema provides useful security, using identities both to constrain communications actions (via strict format of communications) and to convey membership. To increase security, more detail can be added to the trust schema of <xref target="fig6"/>. For example, different types of roles can be created, here "admin" and "sensor", and communications privacy can added by specifying AEAD Validator to encrypt cAdds. To make those roles meaningful, role-specific publications can be defined such that only admins can issue commands and only sensors can issue status. Specifying the AEAD validator means that at least one entity in the trust domain will need the key maker capability in its signing chain and here that capability is put in the signing chain of all sensors. WIth AEAD specified, a key maker is elected during instantiation of DeftT 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 application code nor binary needs to change and DeftT handles all aspects of validators. The unique approach to integrating the communication rules into the transport makes it easy to produce secure application code.</t>
          <figure anchor="fig8">
            <name>Enhancing security in the example trust schema
</name>
            <artwork>adminCert:  roleCert &amp; { _role: "admin" } &lt;= netCert
sensorCert: roleCert &amp; { _role: "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>Converting desired behavioral structure into a trust schema is the major task of implementing Defined-trust Communications for an application domain. Once completed, all the deployment information is contained in a trust schema, which makes an application writer's job much easier. Although a particular trust schema cert defines a particular trust domain, the text version of a trust schema can be re-used for related applications. For example, a home IoT trust 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="dc-certificates-and-identity-bundles">
        <name>DC certificates and identity bundles</name>
        <t>To participate in a trust domain, an entity needs the domain's trust anchor, signed trust schema cert and an identity signing cert (public key cert that includes private key) complete with its signing chain (public certs only) terminating at the zone's trust anchor. The public signing certs of other entities are obtained and validated (using the common trust schema and anchor) at run-time and as entities join. Well-formed certificates and identity bundle deployment are critical elements of DC. This section describes certificate requirements and the construction and installation of an identity bundle. DCT includes utilities to create certs and bundles.</t>
        <section anchor="about-dc-certificates">
          <name>About DC certificates</name>
          <t>As previously noted, use of third party 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. Employing a SDSI-like architecture with a single, local, trust root cert (trust anchor) simplifies trust management and avoids the well-known certificate authority (CA) federation and delegation issues (there are no CAs; just the local trust anchor) and other weaknesses of the X.509 architecture (summarized at <xref target="W509"/>, original references include <xref target="RSK"/><xref target="NVR"/>). DC certs (see {#certificates)) can be generated and signed locally so there is no reason to aggregate a plethora of unrelated claims into one cert (avoiding the Aggregation problem <xref target="W509"/>). A cert's one and only Subject Name is the name of the Publication that contains the cert as its content and neither name nor content are allowed to contain any optional information or extensions. Signing identities are granted roles and capabilities in a trust schema by the certs that appear in their chain of trust.</t>
          <t>All 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). Key roles that require longer lifetimes, like device keys, get new certs before the current ones expire and may distribute those through DeftT. If there is a need to exclude previously authorized entities from a trust domain, there are a variety of options. The most expedient is via use of the AEAD Validator by ensuring that the group key maker(s) for a trust domain exclude that entity from subsequent symmetric key distributions. It is also possible to distribute a new trust schema and signing identities (without changing the trust anchor) using remote attestation via the TPM.</t>
          <section anchor="identity-bundles">
            <name>Identity bundles</name>
            <t>Identity bundles hold the certificates an entity's DeftT needs to participate in a trust domain: trust anchor, trust schema, and certs in the signing identity chain of trust. Identity bundles are intended to be installed securely when a device is first commissioned (out-of-band) for a network. The public certs can be placed in a file in a well-known location; only the private key of the bundle must be secured. The process of enrolling a device into a network 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 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"/>, or secure enclave <xref target="ATZ"/>. Then 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. <xref target="fig9"/> shows the steps involved in configuring entities and the 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="tools.config-rfc.svg"><svg xmlns="http://www.w3.org/2000/svg" width="80%" height="80%" viewBox="0 0 800 171">
                  <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="6.84 50.496 88.84 50.496 88.84 103.504 6.84 103.504"/>
                    <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 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="198.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="101.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 43.328 421.192 43.328 421.192 110.672 251.207 110.672"/>
                    <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="448 57.664 572.386 57.664 572.386 96.336 448 96.336"/>
                    <text font-family="sans-serif" font-size="11" font-weight="normal" fill="#000000">
                      <tspan x="457.056" y="72">make signed identity </tspan>
                      <tspan x="459.663" y="87">certs for each entity </tspan>
                    </text>
                    <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="597.79 50.496 764.29 50.496 764.29 103.504 597.79 103.504"/>
                    <line x1="422.053" y1="78" x2="438.153" y2="78" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                    <polygon fill="#000000" points="446.153 78 438.153 75 438.153 81"/>
                    <polygon stroke="black" points="446.153 78 438.153 75 438.153 81"/>
                    <line x1="572.79" y1="78" x2="586.89" y2="78" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                    <polygon fill="#000000" points="595.89 78 587.89 75 587.89 81"/>
                    <polygon stroke="black" points="595.89 78 587.89 75 587.89 81"/>
                    <line x1="764.29" y1="78" x2="778.39" y2="78" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                    <polygon fill="#000000" points="783.39 78 775.39 75 775.39 81"/>
                    <polygon stroke="black" points="783.39 78 775.39 75 775.39 81"/>
                    <line x1="433" y1="33.5" x2="784" y2="33.5" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                    <line x1="433" y1="34" x2="433" y2="69.1" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                    <polygon fill="#000000" points="433 75.1 436 67.1 430 67.1"/>
                    <polygon stroke="black" points="433 75.1 436 67.1 430 67.1"/>
                    <line x1="784.5" y1="33.5" x2="784.29" y2="77.5" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                    <text font-family="sans-serif" font-size="11" font-weight="normal" fill="#000000">
                      <tspan x="437" y="45">r</tspan>
                      <tspan x="441.125" y="45">epeat for all entities</tspan>
                    </text>
                    <text font-family="sans-serif" font-size="11" font-weight="bold" fill="#000000">
                      <tspan x="5.044" y="19.1959839">draw up plans</tspan>
                    </text>
                    <text font-family="sans-serif" font-size="11" font-weight="bold" fill="#000000">
                      <tspan x="126.189" y="19.1959839">validate plans</tspan>
                    </text>
                    <text font-family="sans-serif" font-size="11" font-weight="bold" fill="#000000">
                      <tspan x="605.24" y="19.1959839">authentic copies of plans</tspan>
                    </text>
                    <text font-family="sans-serif" font-size="11" font-weight="normal" fill="#000000">
                      <tspan x="125.8635" y="136.532181">schemaCompile</tspan>
                    </text>
                    <text font-family="sans-serif" font-size="11" font-weight="normal" fill="#000000">
                      <tspan x="641.6925" y="136.532181">make_bundle</tspan>
                    </text>
                    <text font-family="sans-serif" font-size="11" font-weight="normal" fill="#000000">
                      <tspan x="482.8555" y="136.532181">make_cert</tspan>
                    </text>
                    <text font-family="sans-serif" font-size="11" font-weight="normal" fill="#000000">
                      <tspan x="265.1985" y="136.532181">make_cert &amp; schema_cert</tspan>
                    </text>
                    <text font-family="sans-serif" font-size="11" font-weight="bold" fill="#000000">
                      <tspan x="370.6705" y="163.195984">DCT tools</tspan>
                    </text>
                    <text fill-rule="nonzero" font-family="sans-serif" font-size="11" font-weight="normal" fill="#000000">
                      <tspan x="264" y="61">- retrieve trust anchor</tspan>
                      <tspan x="264" y="76">- create trust schema cert</tspan>
                      <tspan x="264" y="91">   signed by trust anchor</tspan>
                    </text>
                    <text font-family="sans-serif" font-size="11" font-weight="normal" fill="#000000">
                      <tspan x="14.456" y="73">create/adapt </tspan>
                      <tspan x="13.7905" y="88">trust schema</tspan>
                    </text>
                    <text font-family="sans-serif" font-size="11" font-weight="normal" fill="#000000">
                      <tspan x="605.2865" y="64">make identity bundle w/ trust </tspan>
                      <tspan x="602.9875" y="79">anchor, schema cert &amp; identity </tspan>
                      <tspan x="633.0285" y="94">signing 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 directly via the command line, useful for development.
For deployment, good key hygiene using best current practices must be followed e.g., <xref target="CIOT"/>.
In deployment [maybe point to Use Case?], a small application manager is 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 entity.
Second, it has access to the TPM functions and the ability to create "short-lived" (~hours to several days) public/private key pair(s) that will be signed by the private key of the installed identity cert using the TPM, which will happen at (re)start and at the periodicity of the cert lifetime.
Since the signing happens via requests to the TPM, the key cannot be exfiltrated.
At (re)start, the signing cert is added to the stored bundle file (the entire chain should be rechecked for validity) and passed to the application entity as it is invoked.
For periodic signing cert updates, only the new cert needs to be passed to the already running entity as the rest of the bundle does not change.
The entity's DeftT uses its cert distributor to publish its new certs.
<xref target="fig10"/> outlines the procedures.</t>
            <figure anchor="fig10">
              <name>Representative commissioning and signing key maintenance
</name>
              <artwork type="svg" originalSrc="InstallIdbundle-rfc.svg"><svg xmlns="http://www.w3.org/2000/svg" width="80%" height="80%" viewBox="0 0 500 202">
                  <desc>InstallIdbundle</desc>
                  <title>InstallIdbundle</title>
                  <g stroke-width="1" fill="none" fill-rule="evenodd">
                    <polygon stroke="black" stroke-linecap="round" points="106.5 0.5 499.5 0.5 499.5 201.3481 106.5 201.3481"/>
                    <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="181.5 27.984 491.5 27.984 491.5 131.984 181.5 131.984"/>
                    <polygon stroke="black" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" points="126.244 59.3481 168.244 59.3481 168.244 83.6841 126.244 83.6841"/>
                    <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                      <tspan x="133.942" y="75.3681806">TPM</tspan>
                    </text>
                    <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="126.244 90.6391 168.5 90.6391 168.5 134.1391 126.244 134.1391"/>
                    <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                      <tspan x="129.03" y="106.073181">bundle</tspan>
                    </text>
                    <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                      <tspan x="139.71" y="120.409181">ﬁle</tspan>
                    </text>
                    <text font-family="sans-serif" font-size="12" font-weight="bold" fill="#000000">
                      <tspan x="196.828" y="19.0059839">supervisor process</tspan>
                    </text>
                    <text font-family="sans-serif" font-size="12" font-weight="bold" fill="#000000">
                      <tspan x="181.278" y="163.347884">app</tspan>
                    </text>
                    <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="176.278 168 487.958 168 487.958 192.336 176.278 192.336"/>
                    <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                      <tspan x="181.278" y="183.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="257.722" y="148.868181">start(id bundle) or pass new signing key pair</tspan>
                    </text>
                    <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                      <tspan x="3.658" y="95.3520806">commissioning</tspan>
                    </text>
                    <path d="M112.435259,76.5458764 L112.930917,76.611627 L122.029989,77.8186466 L122.911159,77.9355365 L122.353684,78.6278842 L116.597128,85.7771547 L116.283549,86.1666003 L115.504658,85.5394412 L115.818237,85.1499956 L120.377,79.487 L114.781181,81.726044 L91.6856953,90.9642383 L91.221457,91.1499337 L90.8500663,90.221457 L91.3143047,90.0357617 L114.409791,80.7975673 L120.007,78.558 L112.799416,77.602943 L112.303758,77.5371924 L112.435259,76.5458764 Z" fill="#000000" fill-rule="nonzero"/>
                    <path d="M112.942629,90.9279535 L113.418028,91.0828588 L122.145196,93.9265428 L122.99035,94.2019301 L122.316126,94.7811929 L115.354003,100.762735 L114.974752,101.08857 L114.323081,100.330068 L114.702332,100.004233 L120.216,95.266 L114.29047,96.4518079 L91.5980581,100.99029 L91.1077677,101.088348 L90.9116516,100.107768 L91.4019419,100.00971 L114.094354,95.4712272 L120.021,94.285 L113.108217,92.0336571 L112.632818,91.8787518 L112.942629,90.9279535 Z" transform="translate(106.500000, 97.500000) scale(1, -1) translate(-106.500000, -97.500000) " fill="#000000" fill-rule="nonzero"/>
                    <text font-family="sans-serif" font-size="12" font-weight="bold" fill="#000000">
                      <tspan x="112.5" y="14.1959839">Device</tspan>
                    </text>
                    <path d="M253,124 L253,162.091 L256.564212,155.754869 L256.809343,155.319082 L257.680918,155.809343 L257.435788,156.245131 L252.935788,164.245131 L252.5,165.019864 L252.064212,164.245131 L247.564212,156.245131 L247.319082,155.809343 L248.190657,155.319082 L248.435788,155.754869 L252,162.091 L252,124 L253,124 Z" fill="#000000" fill-rule="nonzero"/>
                    <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                      <tspan x="186" y="40">1. make key pair</tspan>
                      <tspan x="186" y="57">2. make app's signing cert &amp; key (lifetime = 1 day)</tspan>
                      <tspan x="186" y="74">3. request TPM sign cert with device key</tspan>
                      <tspan x="186" y="91">4. add cert and key to app's bundle</tspan>
                      <tspan x="186" y="108">5. start app with this bundle</tspan>
                      <tspan x="186" y="125">6. before cert's expiry repeat 1-3 and pass cert to app</tspan>
                    </text>
                  </g>
                </svg>
              </artwork>
            </figure>
            <t>All DCT certs have a validity period. Certs that sign publications are typically generated locally for the app
that's going to use them thus can easily be refreshed at need.
Trust anchors, trust schema, and the secured signing identity are higher value and often require gereation under hermetic conditions by some central authority. Their lifetime should be application- and deployment-specific,
but the higher difficulty of cert production and distribution often requires liftetimes of weeks to years.
Updating trust schemas and other certificates over the deployed network 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 and not expected to be done over-the-air.</t>
          </section>
        </section>
      </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 particularly an 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. Resiliency through the use of multiple gateway devices, that can receive sensor information and  transmit to monitor/controllers and servers, can be used to create a  robust architecture. Gateways that use DeftT can form a robust wireless mesh that is resilient against transmission outages, facilitating reliability. DeftT forms meshes with no additional configuration as Publications missing from one DeftT's set can be supplied by another within range. Several gateways are typically 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 the wireless broadcast of a particular sensor over time. A DeftT mesh captures Publications anywhere within its combined wireless network coverage area and ensures it efficiently reaches all other subscribing DeftTs as long as they are in range of at least one that has received the information. An out-of-service or out-of-range DeftT can receive all active subscribed publications once it is in range and/or able to communicate. This type of use of DeftT is illustrated in <xref target="fig11"/> where gateway devices are deployed with DeftT relay applications that have a Bluetooth (BT) interface and a WiFi interface. A number of BT devices are deployed as sensors, switches, cameras, lock openers, etc. The WiFi network includes tablet devices and a monitor/controller computer. Gateways are placed so that there is always at least one gateway in range of a BT device and at least one gateway (or the controller) in its WiFi range. WiFi tablets can move around within range of one or more gateways. If all the DeftTs have an identical trust schema, devices on the WiFi network have access to all of the BT devices though applications on any particular device may subscribe to any subset of the information available. The WiFi DeftTs can be given a trust schema that requires encrypting its cAdds so that longer-range data is kept private. These configuration choices are made by changes in the trust schemas alone, the application code is exactly the same. No configuration is needed to make devices recognize one another and the dynamics of syncps will keep communications efficient, ensuring that all DeftTs in the trust domain know what information is available. The Face implementation ensures that requested Publications are only sent once (within a particular range). These features mean that DeftT forms efficient broadcast meshes with no additional configuration, an important advantage.</t>
        <figure anchor="fig11">
          <name>IIOT meshed gateways using DeftT relay applications
</name>
          <artwork type="svg" originalSrc="relaymesh-rfc.svg"><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 1186 287">
              <desc>relaymesh</desc>
              <title>relaymesh</title>
              <g stroke-width="1" fill="none" fill-rule="evenodd">
                <g transform="translate(1.379810, 1.000000)">
                  <path d="M543.62019,226.276 L563.47619,226.276 C568.44679,226.276 572.47619,230.30544 572.47619,235.276 L572.47619,264.171997 C572.47619,269.14256 568.44679,273.171997 563.47619,273.171997 L543.62019,273.171997 C538.64959,273.171997 534.62019,269.14256 534.62019,264.171997 L534.62019,235.276 C534.62019,230.30544 538.64959,226.276 543.62019,226.276 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="543.47619" y="242.636107">BT</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="539.62019" y="261.084106">Dev</tspan>
                  </text>
                  <path d="M686.69219,82 L706.54819,82 C711.51879,82 715.54819,86.0294 715.54819,91 L715.54819,119.896 C715.54819,124.8666 711.51879,128.896 706.54819,128.896 L686.69219,128.896 C681.72159,128.896 677.69219,124.8666 677.69219,119.896 L677.69219,91 C677.69219,86.0294 681.72159,82 686.69219,82 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="686.54819" y="98.3601074">BT</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="682.69219" y="116.808107">Dev</tspan>
                  </text>
                  <path d="M62.62019,227 L82.47619,227 C87.44679,227 91.47619,231.02944 91.47619,236 L91.47619,264.895996 C91.47619,269.866559 87.44679,273.895996 82.47619,273.895996 L62.62019,273.895996 C57.64963,273.895996 53.62019,269.866559 53.62019,264.895996 L53.62019,236 C53.62019,231.02944 57.64963,227 62.62019,227 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="62.47619" y="243.360107">BT</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="58.62019" y="261.808105">Dev</tspan>
                  </text>
                  <path d="M218.62019,61 L238.47619,61 C243.44679,61 247.47619,65.0294 247.47619,70 L247.47619,98.896 C247.47619,103.8666 243.44679,107.896 238.47619,107.896 L218.62019,107.896 C213.64959,107.896 209.62019,103.8666 209.62019,98.896 L209.62019,70 C209.62019,65.0294 213.64959,61 218.62019,61 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="218.47619" y="77.3601074">BT</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="214.62019" y="95.8081074">Dev</tspan>
                  </text>
                  <path d="M378.62019,2 L398.47619,2 C403.44679,2 407.47619,6.0294 407.47619,11 L407.47619,39.896 C407.47619,44.8666 403.44679,48.896 398.47619,48.896 L378.62019,48.896 C373.64959,48.896 369.62019,44.8666 369.62019,39.896 L369.62019,11 C369.62019,6.0294 373.64959,2 378.62019,2 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="378.47619" y="18.3601074">BT</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="374.62019" y="36.8081074">Dev</tspan>
                  </text>
                  <path d="M162.62019,148 L182.47619,148 C187.44679,148 191.47619,152.0294 191.47619,157 L191.47619,185.896 C191.47619,190.86656 187.44679,194.896 182.47619,194.896 L162.62019,194.896 C157.64959,194.896 153.62019,190.86656 153.62019,185.896 L153.62019,157 C153.62019,152.0294 157.64959,148 162.62019,148 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="162.47619" y="164.360107">BT</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="158.62019" y="182.808107">Dev</tspan>
                  </text>
                  <path d="M412.62019,210 L432.47619,210 C437.44679,210 441.47619,214.02944 441.47619,219 L441.47619,247.896 C441.47619,252.86656 437.44679,256.896 432.47619,256.896 L412.62019,256.896 C407.64959,256.896 403.62019,252.86656 403.62019,247.896 L403.62019,219 C403.62019,214.02944 407.64959,210 412.62019,210 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="412.47619" y="226.360107">BT</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="408.62019" y="244.808107">Dev</tspan>
                  </text>
                  <path d="M580.62019,123 L600.47619,123 C605.44679,123 609.47619,127.0294 609.47619,132 L609.47619,160.896 C609.47619,165.8666 605.44679,169.896 600.47619,169.896 L580.62019,169.896 C575.64959,169.896 571.62019,165.8666 571.62019,160.896 L571.62019,132 C571.62019,127.0294 575.64959,123 580.62019,123 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="580.47619" y="139.360107">BT</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="576.62019" y="157.808107">Dev</tspan>
                  </text>
                  <path d="M714.62019,0 L734.47619,0 C739.44679,0 743.47619,4.0294 743.47619,9 L743.47619,37.896 C743.47619,42.8666 739.44679,46.896 734.47619,46.896 L714.62019,46.896 C709.64959,46.896 705.62019,42.8666 705.62019,37.896 L705.62019,9 C705.62019,4.0294 709.64959,0 714.62019,0 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="714.47619" y="16.3601074">BT</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="710.62019" y="34.8081074">Dev</tspan>
                  </text>
                  <path d="M884.12019,218.5 L903.97619,218.5 C908.94679,218.5 912.97619,222.52944 912.97619,227.5 L912.97619,256.396 C912.97619,261.366559 908.94679,265.395996 903.97619,265.395996 L884.12019,265.395996 C879.14959,265.395996 875.12019,261.366559 875.12019,256.396 L875.12019,227.5 C875.12019,222.52944 879.14959,218.5 884.12019,218.5 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="883.97619" y="234.860107">BT</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="880.12019" y="253.308107">Dev</tspan>
                  </text>
                  <path d="M33.12019,148 L52.97619,148 C57.94675,148 61.97619,152.0294 61.97619,157 L61.97619,185.896 C61.97619,190.86656 57.94675,194.896 52.97619,194.896 L33.12019,194.896 C28.14963,194.896 24.12019,190.86656 24.12019,185.896 L24.12019,157 C24.12019,152.0294 28.14963,148 33.12019,148 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="32.97619" y="164.360107">BT</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="29.12019" y="182.808107">Dev</tspan>
                  </text>
                  <path d="M764.12019,169 L816.09639,169 C818.85779,169 821.09639,171.23858 821.09639,174 L821.09639,216.19048 C821.09639,218.9519 818.85779,221.19048 816.09639,221.19048 L764.12019,221.19048 C761.35879,221.19048 759.12019,218.9519 759.12019,216.19048 L759.12019,174 C759.12019,171.23858 761.35879,169 764.12019,169 Z" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
                  <path d="M785.74429,173.3368 C786.12649,173.719 786.12649,174.3386 785.74429,174.7207 C785.36209,175.1029 784.74249,175.1029 784.36039,174.7207 C783.97819,174.3386 783.97819,173.719 784.36039,173.3368 C784.74249,172.9547 785.36209,172.9547 785.74429,173.3368" fill="black"/>
                  <path d="M765.38209,178.7857 L814.83449,178.7857 C816.49129,178.7857 817.83449,180.1289 817.83449,181.7857 L817.83449,214.92857 C817.83449,216.58543 816.49129,217.92857 814.83449,217.92857 L765.38209,217.92857 C763.72529,217.92857 762.38209,216.58543 762.38209,214.92857 L762.38209,181.7857 C762.38209,180.1289 763.72529,178.7857 765.38209,178.7857 Z" fill="#FFFFFF"/>
                  <path d="M765.38209,178.78571 L814.83449,178.78571 C816.49129,178.78571 817.83449,180.12886 817.83449,181.78571 L817.83449,214.92857 C817.83449,216.58543 816.49129,217.92857 814.83449,217.92857 L765.38209,217.92857 C763.72529,217.92857 762.38209,216.58543 762.38209,214.92857 L762.38209,181.78571 C762.38209,180.12886 763.72529,178.78571 765.38209,178.78571 Z" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
                  <path d="M788.09679,173.0502 L794.29439,173.0502 C794.83489,173.0502 795.27299,173.4883 795.27299,174.0288 L795.27299,174.0288 C795.27299,174.5692 794.83489,175.0073 794.29439,175.0073 L788.09679,175.0073 C787.55629,175.0073 787.11819,174.5692 787.11819,174.0288 L787.11819,174.0288 C787.11819,173.4883 787.55629,173.0502 788.09679,173.0502 Z" fill="black"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="774.26029" y="199.360107">WiFI</tspan>
                  </text>
                  <path d="M319.12019,180 L371.09639,180 C373.85779,180 376.09639,182.23858 376.09639,185 L376.09639,227.19048 C376.09639,229.9519 373.85779,232.19048 371.09639,232.19048 L319.12019,232.19048 C316.35879,232.19048 314.12019,229.9519 314.12019,227.19048 L314.12019,185 C314.12019,182.23858 316.35879,180 319.12019,180 Z" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
                  <path d="M340.74429,184.3368 C341.12649,184.719 341.12649,185.3386 340.74429,185.7207 C340.36209,186.10288 339.74249,186.10288 339.36039,185.7207 C338.97819,185.3386 338.97819,184.719 339.36039,184.3368 C339.74249,183.9547 340.36209,183.9547 340.74429,184.3368" fill="black"/>
                  <path d="M320.38209,189.78571 L369.83449,189.78571 C371.49129,189.78571 372.83449,191.12886 372.83449,192.78571 L372.83449,225.92857 C372.83449,227.58543 371.49129,228.92857 369.83449,228.92857 L320.38209,228.92857 C318.72529,228.92857 317.38209,227.58543 317.38209,225.92857 L317.38209,192.78571 C317.38209,191.12886 318.72529,189.78571 320.38209,189.78571 Z" fill="#FFFFFF"/>
                  <path d="M320.38209,189.78571 L369.83449,189.78571 C371.49129,189.78571 372.83449,191.12886 372.83449,192.78571 L372.83449,225.92857 C372.83449,227.58543 371.49129,228.92857 369.83449,228.92857 L320.38209,228.92857 C318.72529,228.92857 317.38209,227.58543 317.38209,225.92857 L317.38209,192.78571 C317.38209,191.12886 318.72529,189.78571 320.38209,189.78571 Z" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
                  <path d="M343.09679,184.0502 L349.29439,184.0502 C349.83489,184.0502 350.27299,184.4883 350.27299,185.0288 L350.27299,185.0288 C350.27299,185.5692 349.83489,186.00734 349.29439,186.00734 L343.09679,186.00734 C342.55629,186.00734 342.11819,185.5692 342.11819,185.0288 L342.11819,185.0288 C342.11819,184.4883 342.55629,184.0502 343.09679,184.0502 Z" fill="black"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="329.26029" y="210.360107">WiFI</tspan>
                  </text>
                  <path d="M5,10 L56.97619,10 C59.73759,10 61.97619,12.2386 61.97619,15 L61.97619,57.1905 C61.97619,59.9519 59.73759,62.1905 56.97619,62.1905 L5,62.1905 C2.23858,62.1905 -1.44328993e-14,59.9519 -1.44328993e-14,57.1905 L-1.44328993e-14,15 C-1.44328993e-14,12.2386 2.23858,10 5,10 Z" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
                  <path d="M26.6241,14.3368 C27.00625,14.719 27.00625,15.3386 26.6241,15.7207 C26.24194,16.1029 25.62234,16.1029 25.24019,15.7207 C24.85803,15.3386 24.85803,14.719 25.24019,14.3368 C25.62234,13.9547 26.24194,13.9547 26.6241,14.3368" fill="black"/>
                  <path d="M6.2619,19.7857 L55.71429,19.7857 C57.37114,19.7857 58.71429,21.1289 58.71429,22.7857 L58.71429,55.9286 C58.71429,57.5854 57.37114,58.9286 55.71429,58.9286 L6.2619,58.9286 C4.60505,58.9286 3.2619,57.5854 3.2619,55.9286 L3.2619,22.7857 C3.2619,21.1289 4.60505,19.7857 6.2619,19.7857 Z" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
                  <path d="M28.97659,14.0502 L35.17421,14.0502 C35.71466,14.0502 36.15278,14.4883 36.15278,15.0288 L36.15278,15.0288 C36.15278,15.5692 35.71466,16.0073 35.17421,16.0073 L28.97659,16.0073 C28.43614,16.0073 27.99802,15.5692 27.99802,15.0288 L27.99802,15.0288 C27.99802,14.4883 28.43614,14.0502 28.97659,14.0502 Z" fill="black"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="15.14009" y="40.3601074">WiFI</tspan>
                  </text>
                  <polygon stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" points="1087.11319 146.7994 1065.99319 146.7995 1067.64419 137.368 1085.56319 137.368"/>
                  <path d="M1088.16719,148.4416 L1064.79919,148.4416 C1064.59219,148.4416 1064.42319,148.3501 1064.42319,148.2371 C1064.42319,148.1981 1064.44419,148.1598 1064.48319,148.1269 L1065.93419,146.8937 C1066.00319,146.835 1066.12219,146.7995 1066.25119,146.7995 L1086.80519,146.7995 C1086.93719,146.7995 1087.06019,146.8371 1087.12719,146.8986 L1088.48919,148.1318 C1088.59619,148.2286 1088.53919,148.3542 1088.36119,148.4124 C1088.30319,148.4315 1088.23619,148.4416 1088.16719,148.4416 Z" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
                  <path d="M1040.62019,82 L1113.62019,82 C1116.38119,82 1118.62019,84.2386 1118.62019,87 L1118.62019,132.1465 C1118.62019,134.908 1116.38119,137.1465 1113.62019,137.1465 L1040.62019,137.1465 C1037.85919,137.1465 1035.62019,134.908 1035.62019,132.1465 L1035.62019,87 C1035.62019,84.2386 1037.85919,82 1040.62019,82 Z" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
                  <path d="M1042.57219,85.6912 L1111.66819,85.6912 C1113.32419,85.6912 1114.66819,87.0343 1114.66819,88.6912 L1114.66819,123.2944 C1114.66819,124.9513 1113.32419,126.2944 1111.66819,126.2944 L1042.57219,126.2944 C1040.91619,126.2944 1039.57219,124.9513 1039.57219,123.2944 L1039.57219,88.6912 C1039.57219,87.0343 1040.91619,85.6912 1042.57219,85.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="1042.54819" y="109.584107">cont</tspan>
                    <tspan x="1074.26019" y="109.584107">r</tspan>
                    <tspan x="1079.01219" y="109.584107">oller</tspan>
                  </text>
                  <path d="M95.97619,37.198 L182.47619,37.198 C187.44679,37.198 191.47619,41.2274 191.47619,46.198 L191.47619,111.25 C191.47619,116.2206 187.44679,120.25 182.47619,120.25 L95.97619,120.25 C91.00559,120.25 86.97619,116.2206 86.97619,111.25 L86.97619,46.198 C86.97619,41.2274 91.00559,37.198 95.97619,37.198 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                  <path d="M92.97619,61.5 L184.97619,61.5 L184.97619,116.448 L92.97619,116.448 L92.97619,61.5 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="4,4"/>
                  <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="97.47619 82.448 132.97619 82.448 132.97619 111.948 97.47619 111.948"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="105.15419" y="99.3341074">BT</tspan>
                  </text>
                  <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="138.97619 82.448 180.08019 82.448 180.08019 111.948 138.97619 111.948"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="143.97619" y="99.3341074">WiFi</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="120.08819" y="73.3601074">r</tspan>
                    <tspan x="124.84019" y="73.3601074">elay</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="98.47619" y="50.3601074">GW0</tspan>
                  </text>
                  <path d="M637.24039,202.021 L723.74039,202.021 C728.71099,202.021 732.74039,206.05043 732.74039,211.021 L732.74039,276.072998 C732.74039,281.04356 728.71099,285.073 723.74039,285.073 L637.24039,285.073 C632.26979,285.073 628.24039,281.04356 628.24039,276.072998 L628.24039,211.021 C628.24039,206.05043 632.26979,202.021 637.24039,202.021 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                  <path d="M634.24039,226.323 L726.24039,226.323 L726.24039,281.271 L634.24039,281.271 L634.24039,226.323 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="4,4"/>
                  <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="638.74039 247.271 674.24039 247.271 674.24039 276.771 638.74039 276.771"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="646.41839" y="264.157105">BT</tspan>
                  </text>
                  <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="680.24039 247.271 721.34439 247.271 721.34439 276.771 680.24039 276.771"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="685.24039" y="264.157105">WiFi</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="661.35239" y="238.183107">r</tspan>
                    <tspan x="666.10439" y="238.183107">elay</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="639.74039" y="215.183107">GW4</tspan>
                  </text>
                  <path d="M510.29819,24.844 L596.79819,24.844 C601.76879,24.844 605.79819,28.8734 605.79819,33.844 L605.79819,98.896 C605.79819,103.8666 601.76879,107.896 596.79819,107.896 L510.29819,107.896 C505.32759,107.896 501.29819,103.8666 501.29819,98.896 L501.29819,33.844 C501.29819,28.8734 505.32759,24.844 510.29819,24.844 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                  <path d="M507.29819,49.146 L599.29819,49.146 L599.29819,104.094 L507.29819,104.094 L507.29819,49.146 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="4,4"/>
                  <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="511.79819 70.094 547.29819 70.094 547.29819 99.594 511.79819 99.594"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="519.47619" y="86.9801074">BT</tspan>
                  </text>
                  <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="553.29819 70.094 594.40219 70.094 594.40219 99.594 553.29819 99.594"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="558.29819" y="86.9801074">WiFi</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="534.41019" y="61.0061074">r</tspan>
                    <tspan x="539.16219" y="61.0061074">elay</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="512.79819" y="38.0061074">GW3</tspan>
                  </text>
                  <path d="M338.29819,79.198 L424.79819,79.198 C429.76879,79.198 433.79819,83.2274 433.79819,88.198 L433.79819,153.25 C433.79819,158.2206 429.76879,162.25 424.79819,162.25 L338.29819,162.25 C333.32759,162.25 329.29819,158.2206 329.29819,153.25 L329.29819,88.198 C329.29819,83.2274 333.32759,79.198 338.29819,79.198 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                  <path d="M335.29819,103.5 L427.29819,103.5 L427.29819,158.448 L335.29819,158.448 L335.29819,103.5 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="4,4"/>
                  <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="339.79819 124.448 375.29819 124.448 375.29819 153.948 339.79819 153.948"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="347.47619" y="141.334107">BT</tspan>
                  </text>
                  <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="381.29819 124.448 422.40219 124.448 422.40219 153.948 381.29819 153.948"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="386.29819" y="141.334107">WiFi</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="362.41019" y="115.360107">r</tspan>
                    <tspan x="367.16219" y="115.360107">elay</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="340.79819" y="92.3601074">GW2</tspan>
                  </text>
                  <path d="M159.54819,202.021 L246.04819,202.021 C251.01879,202.021 255.04819,206.05043 255.04819,211.021 L255.04819,276.072998 C255.04819,281.04356 251.01879,285.073 246.04819,285.073 L159.54819,285.073 C154.57759,285.073 150.54819,281.04356 150.54819,276.072998 L150.54819,211.021 C150.54819,206.05043 154.57759,202.021 159.54819,202.021 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                  <path d="M156.54819,226.323 L248.54819,226.323 L248.54819,281.271 L156.54819,281.271 L156.54819,226.323 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="4,4"/>
                  <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="161.04819 247.271 196.54819 247.271 196.54819 276.771 161.04819 276.771"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="168.72619" y="264.157105">BT</tspan>
                  </text>
                  <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="202.54819 247.271 243.65219 247.271 243.65219 276.771 202.54819 276.771"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="207.54819" y="264.157105">WiFi</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="183.66019" y="238.183107">r</tspan>
                    <tspan x="188.41219" y="238.183107">elay</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="162.04819" y="215.183107">GW1</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="14" font-weight="normal" fill="#000000">
                    <tspan x="1112.95119" y="161.4663">Da</tspan>
                    <tspan x="1130.85327" y="161.4663">t</tspan>
                    <tspan x="1134.74012" y="161.4663">a</tspan>
                    <tspan x="1142.52906" y="161.4663"> </tspan>
                    <tspan x="1146.4159" y="161.4663">s</tspan>
                    <tspan x="1153.4159" y="161.4663">t</tspan>
                    <tspan x="1157.30275" y="161.4663">o</tspan>
                    <tspan x="1165.09169" y="161.4663">re</tspan>
                  </text>
                </g>
                <g transform="translate(802.214000, 49.360107)">
                  <path d="M9,2.83789258 L140.5,2.83789258 C145.4706,2.83789258 149.5,6.86729258 149.5,11.8378926 L149.5,76.8898926 C149.5,81.8604926 145.4706,85.8898926 140.5,85.8898926 L9,85.8898926 C4.0294,85.8898926 -1.13686838e-13,81.8604926 -1.13686838e-13,76.8898926 L-1.13686838e-13,11.8378926 C-1.13686838e-13,6.86729258 4.0294,2.83789258 9,2.83789258 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round"/>
                  <path d="M6.4593,26.1398926 L145,26.1398926 L145,81.0878926 L6.4593,81.0878926 L6.4593,26.1398926 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="4,4"/>
                  <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="11.3038 47.0878926 49.5215 47.0878926 49.5215 76.5878926 11.3038 76.5878926"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="20.3407" y="63.974">BT</tspan>
                  </text>
                  <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="52.5 47.0878926 96.7507 47.0878926 96.7507 76.5878926 52.5 76.5878926"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="59.0734" y="63.974">WiFi</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="36.9398" y="38">r</tspan>
                    <tspan x="41.6918" y="38">elay</tspan>
                  </text>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="13.7529" y="15">GW5</tspan>
                  </text>
                  <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="99.5 47.0878926 139 47.0878926 139 76.5878926 99.5 76.5878926"/>
                  <text font-family="sans-serif" font-size="16" font-weight="normal" fill="#000000">
                    <tspan x="103.698" y="63.974">TCP</tspan>
                  </text>
                  <line x1="139.4999" y1="61.4807926" x2="236.714" y2="59.7664926" stroke="black" stroke-width="2" stroke-linecap="square"/>
                </g>
              </g>
            </svg>
          </artwork>
        </figure>
        <t>In addition to specifying encryption and signing types, trust 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 which is relayed through the internet, while only plant Security can see images from the site cameras due to privacy concerns.</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 point-point TLS connections for this use case:</t>
        <ul spacing="compact">
          <li>Security. Encryption, authentication, and authorization of all information objects. Secure broker-less 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 DefT 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 trust rules and then secured by DeftT's use of compiled trust schemas.</li>
        </ul>
        <t>The specificity of the requirements of NERC CIP can be used to create trust 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="security-considerations">
      <name>Security Considerations</name>
      <t>Security of data in the application space is out-of-scope for this document.
This document covers a transport protocol that secures the information it conveys (COMSEC in the language of <xref target="RFC3552"/>).</t>
      <t>Security of DeftT's code is out-of-scope for this document.
Changes to DeftT code could bypass validation of received PDUs or modify the content of outgoing PDUs prior to
signing
(but valid PDUs would still have to be sent or else they will be dropped by uncompromised entities).
In the event that modifications of a device's software/firmware by unauthorized usage is of concern,
a trusted execution environment such as ARM's TrustZone should be employed.
As show in {#fig3}, DeftT has been designed to accomodate this: all of the DeftT code and data is on the right
side of the diagram and reachable <em>only</em> via two narrow API calls, Publish and Subscribe. The code and data could
easily be put in a secure zone reachable only via callgates for each API call.</t>
      <t>Providing crypto functions is out-of-scope of this document. The reference implementation uses libsodium, an open source library maintained by experts in the field <xref target="SOD"/>. Crypto functions used in any alternative implementation should be high quality.</t>
      <t>Enrollment of devices is out of scope. There are a range of solutions available and selection of one can be application-dependent. Example approaches include the Open Connectivity Foundation (OCF) onboarding and BRSKI <xref target="RFC8995"/>.</t>
      <t>Protecting private 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 (fragmentation and reassembly are done above DeftT if necessary).
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 sync protocol identifies Publications using a hash of the entire 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.
Ephemeral Publications have a lifetime enforced by their sync collection and 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. 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 trust schema and the per-app startup checks that one of these two properties holds for the trust 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 PDUs signature or the PDU is dropped.</t>
            </li>
            <li>
              <t>for encrypted PDUs 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 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 cAdds.
Unlike unicast transports, DeftT can and will obtain any Publications missing from its collection from any peer
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 entity authentication in DeftT comes through the integrated trust management engine.
Every DeftT instance is started with an identity bundle that includes the public root of trust, a certificate of the trust schema signed by the trust root, and its own signing identity chain with a private signing key and the chain signed at top by trust root.
This is published 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 available. Certificates are distributed using integrity signing only since they are validated via chain of trust. 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 capabilities 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 reference encryption modules use encryption only on cAdd PDUs (so the specific entity that sent the cAdd cannot be determined) but the Publications it carries MUST be signed and will be validated. In DeftT, any entity can resend a Publication from any other entity (without modification) so group encryption (in effect, group signing) is no different. Some other encryption approaches are provided whose potential vulnerabilities are described in the code headers and a signed, encrypted approach is also available.</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="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author initials="S." surname="Bradner" fullname="S. Bradner">
            <organization/>
          </author>
          <date year="1997" month="March"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  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="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author initials="B." surname="Leiba" fullname="B. Leiba">
            <organization/>
          </author>
          <date year="2017" month="May"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
      <reference anchor="RFC8799" target="https://www.rfc-editor.org/info/rfc8799" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8799.xml">
        <front>
          <title>Limited Domains and Internet Protocols</title>
          <author initials="B." surname="Carpenter" fullname="B. Carpenter">
            <organization/>
          </author>
          <author initials="B." surname="Liu" fullname="B. Liu">
            <organization/>
          </author>
          <date year="2020" month="July"/>
          <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>
    </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="CBIS" target="https://doi.org/10.1109/MCOM.2012.6231277">
        <front>
          <title>Custodian-based information sharing</title>
          <author fullname="Van Jacobson" surname="Jacobson"/>
          <author fullname="Rebecca Braynard" surname="Braynard"/>
          <author fullname="Tim Diebert" surname="Diebert"/>
          <author fullname="Priya Mahadevan" surname="Mahadevan"/>
          <author fullname="Marc Mosko" surname="Mosko"/>
          <author fullname="Nicholas H. Briggs" surname="Briggs"/>
          <author fullname="Simon Barber" surname="Barber"/>
          <author fullname="Michael F. Plass" surname="Plass"/>
          <author fullname="Ignacio Solis" surname="Solis"/>
          <author fullname="Ersin Uzun" surname="Uzun"/>
          <author fullname="Byoung{-}Joon Lee" surname="Lee"/>
          <author fullname="Myeong{-}Wuk Jang" surname="Jang"/>
          <author fullname="Dojun Byun" surname="Byun"/>
          <author fullname="Diana K. Smetters" surname="Smetters"/>
          <author fullname="James D. Thornton" surname="Thornton"/>
          <date year="2012"/>
        </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="CIOT" 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="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="CRTMG" target="http://pollere.net/Pdfdocs/1021103-technical_only.pdf">
        <front>
          <title>Certificate-managed Secure Identity, proposal to Department of Homeland Security for topic H-SB010.2.003</title>
          <author fullname="K. Nichols" surname="Nichols"/>
          <date year="2010" month="June"/>
        </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="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="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://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2693.xml">
        <front>
          <title>SPKI Certificate Theory</title>
          <author initials="C." surname="Ellison" fullname="C. Ellison">
            <organization/>
          </author>
          <author initials="B." surname="Frantz" fullname="B. Frantz">
            <organization/>
          </author>
          <author initials="B." surname="Lampson" fullname="B. Lampson">
            <organization/>
          </author>
          <author initials="R." surname="Rivest" fullname="R. Rivest">
            <organization/>
          </author>
          <author initials="B." surname="Thomas" fullname="B. Thomas">
            <organization/>
          </author>
          <author initials="T." surname="Ylonen" fullname="T. Ylonen">
            <organization/>
          </author>
          <date year="1999" month="September"/>
          <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://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3552.xml">
        <front>
          <title>Guidelines for Writing RFC Text on Security Considerations</title>
          <author initials="E." surname="Rescorla" fullname="E. Rescorla">
            <organization/>
          </author>
          <author initials="B." surname="Korver" fullname="B. Korver">
            <organization/>
          </author>
          <date year="2003" month="July"/>
          <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="RFC4291" target="https://www.rfc-editor.org/info/rfc4291" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4291.xml">
        <front>
          <title>IP Version 6 Addressing Architecture</title>
          <author initials="R." surname="Hinden" fullname="R. Hinden">
            <organization/>
          </author>
          <author initials="S." surname="Deering" fullname="S. Deering">
            <organization/>
          </author>
          <date year="2006" month="February"/>
          <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="RFC8520" target="https://www.rfc-editor.org/info/rfc8520" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8520.xml">
        <front>
          <title>Manufacturer Usage Description Specification</title>
          <author initials="E." surname="Lear" fullname="E. Lear">
            <organization/>
          </author>
          <author initials="R." surname="Droms" fullname="R. Droms">
            <organization/>
          </author>
          <author initials="D." surname="Romascanu" fullname="D. Romascanu">
            <organization/>
          </author>
          <date year="2019" month="March"/>
          <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://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8995.xml">
        <front>
          <title>Bootstrapping Remote Secure Key Infrastructure (BRSKI)</title>
          <author initials="M." surname="Pritikin" fullname="M. Pritikin">
            <organization/>
          </author>
          <author initials="M." surname="Richardson" fullname="M. Richardson">
            <organization/>
          </author>
          <author initials="T." surname="Eckert" fullname="T. Eckert">
            <organization/>
          </author>
          <author initials="M." surname="Behringer" fullname="M. Behringer">
            <organization/>
          </author>
          <author initials="K." surname="Watsen" fullname="K. Watsen">
            <organization/>
          </author>
          <date year="2021" month="May"/>
          <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="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="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="deftt-run-time-modules">
      <name>DeftT run-time modules</name>
      <t>DeftT's required functionality is broken into modules that have been implemented in libraries in the reference implementation [DCT]. Extensions and alternate module implementations are possible but the functionality and interfaces must be preserved. DeftT is organized in functional modules that may provide services to other modules in the course of preparing application-level information for transport and for extracting application-level information from packets. In particular, following good security practice, DeftT's Publications are constructed and signed early in their creation, then are validated (or discarded) early in the reception process. The signing and validation modules (<em>signature managers</em>) are used for both Publications and cAdds.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 would not be possible in a strictly layered implementation.</t>
      <t><xref target="fig12"/> shows the DC modules which are organized in libraries in the DCT reference implementation. The component descriptions and interactions can appear complex but the internals of DeftT are completely transparent to an application and the reference implementation is efficient in both lines of code and performance. Where there are alternatives, a DeftT's trust schema completely determines which modules are used. A DeftT participates in two required Collections and MAY participate in others if required by the schema-designated signature managers. One of the required Collections handles the Publications that carry out application communications and uses "pubs" for the descriptive collection name component (see <xref target="table2"/>). The other required Collection manages the certificates of the trust domain and uses "cert" for the descriptive collection name component. Specific signature managers MAY require group key distribution in descriptive-named Collection "keys."</t>
      <figure anchor="fig12">
        <name>Run-time modules
</name>
        <artwork type="svg" originalSrc="DeftTmodules-rfc.svg"><svg xmlns="http://www.w3.org/2000/svg" width="80%" height="80%" viewBox="0 0 569 344">
            <desc>DeftTmodules</desc>
            <title>DefTmodules</title>
            <g stroke-width="1" fill="none" fill-rule="evenodd">
              <path d="M2.5,29 L566,29 L566,316 L2.5,316 L2.5,29 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="4,4"/>
              <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="135 146 255 146 255 209 135 209"/>
              <g transform="translate(147.220000, 155.016081)" fill="#000000" font-family="sans-serif" font-size="12" font-weight="normal">
                <g>
                  <text>
                    <tspan x="26" y="11">syncps:</tspan>
                  </text>
                  <text>
                    <tspan x="0" y="25">set reconciliation </tspan>
                  </text>
                  <text>
                    <tspan x="1" y="40">pub/sub p</tspan>
                    <tspan x="56.14" y="40">r</tspan>
                    <tspan x="59.704" y="40">otocol</tspan>
                  </text>
                </g>
              </g>
              <path d="M195.5,1.98013557 L195.935788,2.75486938 L200.435788,10.7548694 L200.680918,11.1906571 L199.809343,11.6809184 L199.564212,11.2451306 L196,4.908 L196,40.091 L199.564212,33.7548694 L199.809343,33.3190816 L200.680918,33.8093429 L200.435788,34.2451306 L195.935788,42.2451306 L195.5,43.0198644 L195.064212,42.2451306 L190.564212,34.2451306 L190.319082,33.8093429 L191.190657,33.3190816 L191.435788,33.7548694 L195,40.091 L195,4.908 L191.435788,11.2451306 L191.190657,11.6809184 L190.319082,11.1906571 L190.564212,10.7548694 L195.064212,2.75486938 L195.5,1.98013557 Z" fill="#000000" fill-rule="nonzero"/>
              <path d="M195.5,300.980136 L195.935788,301.754869 L200.435788,309.754869 L200.680918,310.190657 L199.809343,310.680918 L199.564212,310.245131 L196,303.908 L196,339.091 L199.564212,332.754869 L199.809343,332.319082 L200.680918,332.809343 L200.435788,333.245131 L195.935788,341.245131 L195.5,342.019864 L195.064212,341.245131 L190.564212,333.245131 L190.319082,332.809343 L191.190657,332.319082 L191.435788,332.754869 L195,339.091 L195,303.908 L191.435788,310.245131 L191.190657,310.680918 L190.319082,310.190657 L190.564212,309.754869 L195.064212,301.754869 L195.5,300.980136 Z" fill="#000000" fill-rule="nonzero"/>
              <path d="M195.5,208.980136 L195.935788,209.754869 L200.435788,217.754869 L200.680918,218.190657 L199.809343,218.680918 L199.564212,218.245131 L196,211.908 L196,237.091 L199.564212,230.754869 L199.809343,230.319082 L200.680918,230.809343 L200.435788,231.245131 L195.935788,239.245131 L195.5,240.019864 L195.064212,239.245131 L190.564212,231.245131 L190.319082,230.809343 L191.190657,230.319082 L191.435788,230.754869 L195,237.091 L195,211.908 L191.435788,218.245131 L191.190657,218.680918 L190.319082,218.190657 L190.564212,217.754869 L195.064212,209.754869 L195.5,208.980136 Z" fill="#000000" fill-rule="nonzero"/>
              <path d="M195.5,109.980136 L195.935788,110.754869 L200.435788,118.754869 L200.680918,119.190657 L199.809343,119.680918 L199.564212,119.245131 L196,112.908 L196,142.091 L199.564212,135.754869 L199.809343,135.319082 L200.680918,135.809343 L200.435788,136.245131 L195.935788,144.245131 L195.5,145.019864 L195.064212,144.245131 L190.564212,136.245131 L190.319082,135.809343 L191.190657,135.319082 L191.435788,135.754869 L195,142.091 L195,112.908 L191.435788,119.245131 L191.190657,119.680918 L190.319082,119.190657 L190.564212,118.754869 L195.064212,110.754869 L195.5,109.980136 Z" fill="#000000" fill-rule="nonzero"/>
              <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="18 88.5 119.5 88.5 119.5 168.5 18 168.5"/>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="37.736" y="103.805081">schemaLib:</tspan>
              </text>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="28.07" y="118.141081">run-time use of </tspan>
              </text>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="33.848" y="132.477081">trust schema </tspan>
              </text>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="25.406" y="146.813081">and identity cert </tspan>
              </text>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="55.304" y="161.149081">sto</tspan>
                <tspan x="71.972" y="161.149081">r</tspan>
                <tspan x="75.536" y="161.149081">e</tspan>
              </text>
              <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="131.5 44.5 258.5 44.5 258.5 109.5 131.5 109.5"/>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="147.096" y="56.3480806">shim: application-</tspan>
              </text>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="145.662" y="70.6840806">speciﬁcs: up calls, </tspan>
              </text>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="138.654" y="85.0200806">timing, lifetimes, API, </tspan>
              </text>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="156.774" y="99.3560806">QoS, seg/</tspan>
                <tspan x="210.558" y="99.3560806">r</tspan>
                <tspan x="214.122" y="99.3560806">eas</tspan>
              </text>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="7.5" y="49.0200806">DefTT</tspan>
              </text>
              <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="73.5 241 328 241 328 300 73.5 300"/>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="185.972" y="257.016081">Face:</tspan>
              </text>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="138.068" y="271.352081">maintains cState tables</tspan>
              </text>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="80.918" y="285.688081">types for multicast UD</tspan>
                <tspan x="200.498" y="285.688081">P</tspan>
                <tspan x="203.978" y="285.688081">, unicast UDP or TCP</tspan>
              </text>
              <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="431 103.666 551 103.666 551 168.666 431 168.666"/>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="458.996" y="118.514081">distributors:</tspan>
              </text>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="442.658" y="132.850081">handle all aspects </tspan>
              </text>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="439.106" y="147.186081">of distributing certs </tspan>
              </text>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="454.214" y="161.522081">or g</tspan>
                <tspan x="475.322" y="161.522081">r</tspan>
                <tspan x="478.886" y="161.522081">oup keys</tspan>
              </text>
              <polygon stroke="black" stroke-linecap="round" stroke-linejoin="round" points="283 103.666 403 103.666 403 168.666 283 168.666"/>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="319.996" y="118.514081">sigmgrs:</tspan>
              </text>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="302.332" y="132.850081">sign or validate</tspan>
              </text>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="290.548" y="147.186081">r</tspan>
                <tspan x="294.112" y="147.186081">etu</tspan>
                <tspan x="311.008" y="147.186081">r</tspan>
                <tspan x="315.436" y="147.186081">ns signed PDU </tspan>
              </text>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="310.894" y="161.522081">or true/false </tspan>
              </text>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="203.25" y="329.356081">cState &amp; cAdd packets</tspan>
              </text>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="203.25" y="227.356081">cState &amp; cAdd PDUs</tspan>
              </text>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="203" y="132">publications</tspan>
              </text>
              <text font-family="sans-serif" font-size="12" font-weight="normal" fill="#000000">
                <tspan x="197.75" y="23.0160806">application calls</tspan>
              </text>
            </g>
          </svg>
        </artwork>
      </figure>
      <t>A shim serves as the translator between application semantics and the named information objects (Publications) whose format is defined by the trust schema. Besides the shim, DeftT components are not application-specific although new signature managers, distributors, and Face modules may be added to the library to extend features.</t>
      <section anchor="syncps-set-reconciliation">
        <name>Syncps set reconciliation</name>
        <t>Syncps has roots in the sync protocols developed for Information-Centric Networking, e.g., <xref target="CBIS"/>, over the past decade. A DC sync protocol MUST provide mechanisms that are end-point agnostic, be broadcast-friendly, and have an efficient implementation. Syncps has been in development to meet these needs for some time, starting with the first version (covered in [DNMP]).  It currently appears that syncps is the only sync protocol DC needs so discussion of the sync protocol module is explicitly syncps. Future uses and research developments may lead to new sync protocols suitable for DC but they must fulfill the same role and provide the same interfaces as syncps.</t>
        <t>The sync module performs set reconciliation over the Publications of a Collection, providing the enabling protocol for any-to-any communications. A single syncps instance manages a single collection. Each syncps announces the Publications it currently has in its Collection by sending a cState containing an IBLT [IBLT]. IBLTs 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  manages both active and inactive Publications to know when and if to communicate them to peers (though Face) and subscribers (via upcalls), but it knows nothing about the format or semantics of Publications. Upcalls from syncps to other modules provide validation and expiration information for Publications as well as validation and signing of cAdds. If a cAdd fails to validate, it is silently discarded. Syncps can confirm that Publications have reached their collection if an optional callback handler is provided. This feature piggybacks on normal syncps dynamics, reporting when that Publication appears in the state summary of some other entity. As such, it should not be used as a measure of the transmission time of a Publication.</t>
        <t>Syncps keeps its DeftT instance synchronized with the sync zone at the attached Face. It adds new DeftT-local Publications to the collection and transfers validated, subscribed Publications to a shim (or distributor). Syncps creates two PDUs to manage collections: a cState, which summarizes the current state of its Collection and a cAdd, used to respond to received cStates with any applicable Publications (i.e., cAdd carry Publications). Syncps subscribes to everything in a collection. The Publications that initiate upcalls can be limited by the shim in setting up subscriptions with syncps.</t>
      </section>
      <section anchor="schemalib-trust-management">
        <name>SchemaLib trust management</name>
        <t>SchemaLib implements the trust management engine of DeftT. It validates certificates, uses the trust schema, and instantiates the distributors required by the trust schema.</t>
        <t>When a DeftT is instantiated, it is handed its identity bundle which contains the trust anchor for the trust domain, the particular (compiled) trust schema for the domain and the signing identity chain for the DeftT. This component performs validation of these certificates and they are stored locally. Templates for all the legal (according the the trust schema and the signing identity) Publications are created and saved to use whenever a new Publication is constructed, ensuring its structural validity.</t>
        <t>The DeftT's certificate distributor publishes all the public certs in its chain in order to connect to the collections used by this DeftT. A DeftT is not connected until a delivery indication has been received for its identity certificate chain. If information privacy is required in the trust schema, the distributors for the required keys are instantiated.</t>
        <t>Signing identities published by others are received, validated, stored and used to create templates for structural validation of Publications that originate with those signing identities.</t>
      </section>
      <section anchor="signature-managers">
        <name>Signature managers</name>
        <t>Signature Managers (sigmgrs) implement the signing and validation of Data (which may include encryption/decryption) selected by the trust schema for Publications and their cAdd as well as by the particular signing and validation required by distributors. Use of an encryption sigmgr requires a group key distributor (see A.5). Integrity signing and null signing is not available in trust schemas (i.e., not used to specify Publications or their cAdd) and are only used in certificate and key distribution.</t>
        <t>Six sigmgrs are currently implemented in DCT, supplying the following signing and validation algorithms:</t>
        <t>EdDSA using the DCT identity cert associated with the particular DeftT</t>
        <t>RFC7693 and SHA256: integrity (not available to trust schemas)</t>
        <t>AEAD encryption/decryption for an entire sync zone where the key is created, distributed and updated by the group key distributor. The key distributor encrypts the group key individually for each valid signing identity that has been published in the cert Collection (validated and stored locally). Members are added to the group as their validated signing identities become known; no members are added apriori.</t>
        <t>PPAEAD is a version of AEAD encryption/decryption where the encryption key is unique to a particular publisher and the group of authorized subscribers. Authorized subscribers must have the required capability in their signing chain and the subscriber group key pair is distributed by a subscriber group key distributor which creates (and updates) a key pair for the subscriber group, putting the public key in the clear and encrypting the secret key for each subscriber group member. Data can only be decrypted by authorized subscribers (subscriber group members).</t>
        <t>PPsigned adds EdDSA signing and validation to PPAEAD. Its use is indicated if there is a need to protect against authorized members of the subscriber group forging packets from Collection publishers. The encrypted packet is also signed by the publisher. Uses the same subscriber group key distributor as PPAEAD.</t>
      </section>
      <section anchor="distributors">
        <name>Distributors</name>
        <t>Distributors manage certificate and key Collections transparently to applications through their own syncps.  A certificate distributor MUST be provided in order to manage the signing certificate collection for any application. Its Publications are signing chain certificates and when a DeftT is first instantiated it is used to publish the certs of its own signing chain. The cert distributor must confirm their delivery to the cert Collection (i.e., shows up in an IBLT summary originated by a different DeftT) before the DeftT upcalls to the application that it can start communications. The cert distributor passes subscribed certs to schemaLib where validated certificates are stored; invalid certificates are silently discarded.</t>
        <t>The use of other distributors is dependent on the signature manager selected. AEAD, PPAEAD, and PPsigned require group key distributors to manage a key Collection. DCT contains a group key distributor for AEAD as well as a group key distributor for publisher privacy. These use the capabilities contained in signing identities to determine eligibility to be a group's key maker and eligibility to subscribe (decrypt) Publications in a publisher privacy collection. Key maker election, key creation (and re-creation), and key distribution are all handled by the distributors and transparent to the application.</t>
      </section>
      <section anchor="faces">
        <name>Faces</name>
        <t>Faces translate between the cAdd and cStates of the sync protocol and the system packet transport used for a particular DeftT instance. Any packet transport can be used as long as it provides:</t>
        <ul spacing="compact">
          <li>send packet and register callback for received packet</li>
          <li>connect registration callback invoked when packets can be sent or received</li>
          <li>information callback - MTU is returned</li>
        </ul>
        <t>DCT currently implements a broadcast Face that is used with UDP multicast over IPv6 and a unicast face over UDP or TCP. The DCT Face derives that of NDN, where cState are Interests and cAdds are Data, but its structure has been optimized for use on broadcast media and to interact directly with a sync module, not a forwarder node. The Face keeps:</t>
        <ul spacing="compact">
          <li>Pending Interest Table (PIT): similar to its use in CCN and NDN, this is a table of unsatisfied Interests. Interests are removed when a corresponding Data arrives ("satisfies the Interest") or the Interest times out (when its lifetime has been exceeded).</li>
          <li>Registered Interest Table (RIT) : this is used to hold the Interest type that this DeftT can respond to</li>
          <li>Duplicate Interest Table (DIT): is used to keep Interests from looping (without the need for a spanning tree) and tracks the Interest plus its nonce. (A cAdd is never sent to the Interface on which it arrived.)</li>
        </ul>
      </section>
      <section anchor="shims">
        <name>Shims</name>
        <t>A shim is application-class-specific, converting between application-meaningful messages and DeftT's Publications. A shim is passed the salient information about a particular communication and its application level data unit and uses these to create trust schema compliant Publications, using knowledge about this application class and calls to schemaLib modules. A shim parses received Publications for call back(s) to the application. A shim can be customized to a particular application (the approach taken in the now-obsolete [DNMP]) or can provide more general communication models, such as pub/sub, streaming, request/response.</t>
        <t>This latter approach has been used to create a DCT library shim, a message-based publish/subscribe (MBPS) API whose semantics resemble MQTT but the protocol is brokerless and collection-secure, unlike MQTT. MBPS handles breaking application-level messages into trust schema specified Publications and provides an option for delivery confirmation to be passed to the application. MBPS has been used for multiple applications: two examples are in DCT and Operant has used for other applications. MBPS provides a simple API that hides network layer and security details and offers two levels of message QoS: a default unacknowledged delivery and a confirmation that the publication has reached at least one other member of the collection. Applications can use the following MBPS methods:</t>
        <t>connect(successCB, &lt;opt&gt;failureCB): Performs set up (if any) necessary to allow communications to start.  (e.g., signing key distribution is carried out). Invokes appropriate callback, success or failure.publish(msg, args, &lt;opt&gt;confCB): Publishes the given message content and returns a unique message ID. If a confirmation callback is included, mbps invokes confCB with an indicator of success or failure of the message.</t>
        <t>subscribe(handler): subscribes to all the topics in the pubs Collection. A received message's underlying publication(s) is validated before the handler is invoked.
subscribe(topic, handler): distinguishes application-level subscriptions further by topic (component(s) of name that mbps will append to the pubPrefix of the trust schema) and passes a handler to use for a particular topic.</t>
        <t>run(): once application set up is finished, this turns over control to the transport.</t>
        <t>The API simplicity is shown in this application snippet:</t>
        <sourcecode type="c++">void msgPubr(mbps &amp;cm, const auto&amp; toSnd) {
    //... lines of code to prepare arguments
    cm.publish(toSnd, a); //load arguments in a
}
static void msgRecv(mbps &amp;cm, const auto&amp; msg, const msgArgs&amp; a) {
    //... do something with msg
}
int main(int argc, char∗ argv[]) {
    mbps cm(argv[optind]); // make shim using identity bundle
    cm.subscribe(msgRecv);
    cm.connect([&amp;cm]() {
        ... // prepare toSnd
        msgPubr(cm, toSnd);
    });
    cm.run();
}
</sourcecode>
      </section>
    </section>
    <section anchor="formats">
      <name>Formats</name>
      <t>Application information is packaged in Publications which are carried in cAdds that are used along with cState PDUs to communicate about and synchronize Collections.
This section documents the format of Publications, cStates, and cAdds along with certificates, which are a special case of Publication (where keys are the information carried).
A restricted version of the NDNv3 TLV encoding is used, with TLV types from NDN's TLV Type Registry <xref target="NDNS"/>. Publications and cAdds use a compatible format which allows them to use the same library signing/validation modules (<em>sigmgrs</em>).</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 are used throughout DeftT's modules.
A Name TLV is used to encode the name defined in the trust schema.
A Publication is valid if it starts with the correct TLV, its Name validates against the trust 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="signature-managers"/>).
The SignatureType for a collection's Publications is specified in the trust 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 associated with the SignatureType follows then the ValidityPeriod (if the Publication is a Certificate).
Finally, SignatureValue is determined by the SignatureType and its format is verified by the signature manager.
.</t>
        <table anchor="table1">
          <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>MUST be Data</td>
            </tr>
            <tr>
              <td/>
              <td>Name</td>
              <td/>
              <td/>
            </tr>
            <tr>
              <td/>
              <td/>
              <td>Generic (or other)</td>
              <td>trust schema sets number of and constraints on these</td>
            </tr>
            <tr>
              <td/>
              <td>MetaInfo</td>
              <td/>
              <td/>
            </tr>
            <tr>
              <td/>
              <td/>
              <td>ContentType</td>
              <td>MUST be type Key or Blob</td>
            </tr>
            <tr>
              <td/>
              <td>Content</td>
              <td/>
              <td>arbitrary sequence of bytes including embedded TLVs; MAY have length 0</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>Absent for integrity-only signature types</td>
            </tr>
            <tr>
              <td/>
              <td/>
              <td>ValidityPeriod</td>
              <td>Only for Certificates</td>
            </tr>
            <tr>
              <td/>
              <td>SignatureValue</td>
              <td/>
              <td>Packet signature (format determined by SignatureType)</td>
            </tr>
            <tr>
              <td colspan="4">Table: Publication format</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 only 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 DC 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 an entity receives a signed object but is missing any of its signing dependencies, the object should be considered unverifiable and silently ignored. Such objects MUST NOT be propagated to other entities.</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 Sync (sec A.1) and Face (sec A.5) modules. Sync 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.  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">
          <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>MUST be Interest</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>
            <tr>
              <td colspan="4">Table: cState format</td>
            </tr>
          </tbody>
        </table>
        <t>A cState is valid 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 to add Publications to a Collection and carries Publications as Content. A cAdd PDU is created after a cState is received and only if the recipient has Publications that are not reflected in the recipient's local state. A cAdd is valid 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 MUST be identical to the cState to which it responds.</t>
        <table anchor="table3">
          <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>MUST be Data</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 (from cState) to which the Content's Publications are to be added</td>
            </tr>
            <tr>
              <td/>
              <td>MetaInfo</td>
              <td/>
              <td/>
            </tr>
            <tr>
              <td/>
              <td/>
              <td>ContentType</td>
              <td>MUST be 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>
            <tr>
              <td colspan="4">Table: cAdd format</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="contributors">
      <name>Contributors</name>
      <contact initials="R." surname="Jungerman" fullname="Roger Jungerman">
        <organization>Operant Networks Inc.</organization>
        <address>
          <postal>
            <street/>
          </postal>
        </address>
      </contact><contact initials="L." surname="Lixia" fullname="Lixia Zhang">
        <organization>UCLA</organization>
        <address>
          <postal>
            <street/>
          </postal>
          <email>lixia@cs.ucla.edu</email>
        </address>
      </contact><t>Roger contributed much of <xref target="use-cases"/>.</t>
    </section>
  </back>
</rfc>
