<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.17 (Ruby 2.6.10) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-leon-distributed-multi-signer-00" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="Distributed Multi-Signer Bootstrap">Distributed DNSSEC Multi-Signer Bootstrap</title>

    <author initials="L." surname="Fernandez" fullname="Leon Fernandez">
      <organization>The Swedish Internet Foundation</organization>
      <address>
        <postal>
          <country>Sweden</country>
        </postal>
        <email>leon.fernandez@internetstiftelsen.se</email>
      </address>
    </author>
    <author initials="E." surname="Bergström" fullname="Erik Bergström">
      <organization>The Swedish Internet Foundation</organization>
      <address>
        <postal>
          <country>Sweden</country>
        </postal>
        <email>erik.bergstrom@internetstiftelsen.se</email>
      </address>
    </author>
    <author initials="J." surname="Stenstam" fullname="Johan Stenstam">
      <organization>The Swedish Internet Foundation</organization>
      <address>
        <postal>
          <country>Sweden</country>
        </postal>
        <email>johan.stenstam@internetstiftelsen.se</email>
      </address>
    </author>
    <author initials="S." surname="Crocker" fullname="Steve Crocker">
      <organization>Edgemoor Research Institute</organization>
      <address>
        <postal>
          <country>United States</country>
        </postal>
        <email>steve@shinkuro.com</email>
      </address>
    </author>

    <date />

    <area>Internet</area>
    <workgroup>DNSOP Working Group</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>This document presents an architecture for a distributed DNSSEC
multi-signer model that most closely resembles "model 2" in
<xref target="RFC8901"/>.</t>

<t>It defines two multi-signer specific entities: the "multi-signer
agent" (MSA) that is responsible for the multi-signer process and the
"combiner", which is responsible for "combining" unsigned zone data
from the zone owner with zone data under control of the MSA. It
introduces a new DNS RRtype, HSYNC, that is used by the zone owner to
designate the chosen DNS Providers (signing and/or serving the
zone). Furthermore it describes a mechanism for the MSAs to establish
secure communication with each other, either via “pure DNS”
communication secured by DNS SIG(0) signatures on each message or via
a RESTful API secured by TLS. Finally, the document describes two
models for multi-signer process synchronization: “leader/follower
mode” and “peer mode” and the mechanism by which a set of MSAs decide
which model to use for a given zone.</t>

<t>The scope of the document is only the distributed aspect of DNSSEC
multi-signer up to the point where secure communication and
synchronization method between MSAs has been established. The
“multi-signer algorithms” that deal with the actual synchronization
required for multi-signer operation are described in
<xref target="I-D.draft-ietf-dnsop-dnssec-automation"/>.</t>

<t>TO BE REMOVED: This document is being collaborated on in Github at:
<eref target="https://github.com/johanix/draft-leon-dnsop-distributed-multi-signer">https://github.com/johanix/draft-leon-dnsop-distributed-multi-signer</eref>.
The most recent working version of the document, open issues, etc, should all be
available there.  The authors (gratefully) accept pull requests.</t>



    </abstract>



  </front>

  <middle>


<section anchor="introduction"><name>Introduction</name>

<t>The issue of how to eliminate so-called "single points of failure"
from systems to make them more robust is a recurring theme in systems
design and so also for DNS. In the DNS case redundancy is addressed by
having multiple name servers for the same zone. However, when the zone
is DNSSEC-signed there is traditionally an additional single point of
failure: the so-called "signer" of the zone.</t>

<t>In multi-signer (<xref target="RFC8901"/>) model 2, a process is described by
which it is possible to use more than one signer (each with its own
set of keys), by having the signers (or their agents) communicate and
exchange data that should be signed by the other signer. The most
obvious example is that each signer's Key-Signing Key must sign a
DNSKEY RRset that contains the Zone-Signing Keys for all signers.</t>

<t>To synchronize data between signers two models are possible: either a
"centralized" model where a single "controller" decides what changes
are needed, or a "distributed" model where the signers themselves (or
an agent of each signer) decide what changes are needed.</t>

<t>The first model has been implemented previously, and while it works
from a technical point of view, it is not a good solution from a risk
management point of view. The primary problem is that the signers have
difficulty accepting that an external third party (the controller) has
the ability to modify data (in a customer zone).</t>

<t>This document is an attempt to address the synchronization problem by
proposing a distributed model without a central controller.</t>

<t>The communication between signers has two parts: first it is necessary
to find out what data each signer has for a zone. Once all data has
been collected it is possible to compute what changes are needed to
the zone data at each signer. That triggers the second phase where the
zone data for the individual signers is changed to get them in sync
with each other. All of this is done automatically.</t>

<t>However, from a slightly different perspective, the multi-signer
alternative is the more general case of DNSSEC signing, with the (very
common) case of a single signer being a special case.</t>

<t>From that point of view, this document proposes an architecture for a
completely automated, distributed multi-signer model together with a
seamless transition path from the current single-signer model to the
multi-signer model. From the zone owners point of view, the transition
is done through the addition of a new RRtype, HSYNC, that is used to
designate the chosen DNS Providers, their responsibilities and
information to enable the DNS Providers to locate each other.</t>

<t>Knowledge of DNS NOTIFY <xref target="RFC1996"/> and DNS Dynamic Updates
<xref target="RFC2136"/> and <xref target="RFC3007"/> is assumed. DNS SIG(0) transaction
signatures are documented in <xref target="RFC2931"/>.</t>

<section anchor="requirements-notation"><name>Requirements Notation</name>

<t>The key words "<strong>MUST</strong>", "<strong>MUST NOT</strong>", "<strong>REQUIRED</strong>", "<strong>SHALL</strong>",
"<strong>SHALL NOT</strong>", "<strong>SHOULD</strong>", "<strong>SHOULD NOT</strong>", "<strong>RECOMMENDED</strong>",
"<strong>NOT RECOMMENDED</strong>", "<strong>MAY</strong>", and "<strong>OPTIONAL</strong>" 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>

</section>
</section>
<section anchor="terminology"><name>Terminology</name>

<t>...</t>

</section>
<section anchor="requirements"><name>Requirements</name>

<t>The requirements for an architecture for distributed multi-signer are
defined as follows:</t>

<t><list style="symbols">
  <t>Assuming all zone transfers are correctly set up, a zone owner MUST
be able to signal to the individual multi-signer providers
information sufficient for the providers to identify each other and
establish secure communication.</t>
  <t>The zone owner MUST be able to signal the intent to onboard an
additional multi-signer provider. This MUST automatically initiate
the multi-signer “add signer” process, as described in <xref target="RFC8901"/>.</t>
  <t>The zone owner MUST be able to signal the intent to offboard an
existing multi-signer provider. This MUST automatically initiate
the multi-signer “remove signer” process, as described in <xref target="RFC8901"/>.</t>
  <t>All signalling from zone owner to multi-signer providers SHOULD be
carried out via data in the served zone, to ensure that all
providers get the same configuration information at (almost) the
same time.</t>
  <t>By engaging a set of multi-signer providers (one or more), the zone
owner MUST give up control over the following records:
  <list style="symbols">
      <t>All DNSSEC related records in the zone</t>
      <t>Any CDS and/or CSYNC RRsets</t>
    </list></t>
  <t>It SHOULD be possible but NOT MANDATORY for the zone owner to also
delegate the management of the NS RRset to the set of DNS
Providers.</t>
</list></t>

</section>
<section anchor="multi-signer-use-cases"><name>Multi-Signer Use Cases</name>

<section anchor="primary-use-case"><name>Primary Use Case</name>

<t>The primary use case for the proposed multi-signer architecture is the
following scenario: A zone owner needs to remove the single point of
failure that the DNSSEC signer constitutes. For this reason it
contracts with two or more “multi-signer capable” DNS providers.
Each such DNS provider provides the following service:</t>

<t><list style="symbols">
  <t>Receive the unsigned zone via zone transfer.</t>
  <t>Locate all active DNS Providers via the HSYNC RRset as published by
the zone owner. Establish secure communication with all remote DNS
Providers (via their agents).</t>
  <t>Update the DNSKEY, CDS and CSYNC RRsets as needed, based on
synchronization with the remote signers (or their agents).</t>
  <t>Update the NS RRset if allowed by the zone owner, based on
synchronization with the remote DNS Providers (or their agents).</t>
  <t>Sign the zone, using own DNSKEYs, but with a published DNSKEY RRset
that includes the DNSKEYs of other signers.</t>
  <t>Possibly distribute the signed zone to a set of downstream
authoritative nameservers under own control.</t>
  <t>Possbly distribute the signed zone to non-signing downstream DNS
Providers.</t>
</list></t>

</section>
<section anchor="secondary-use-case"><name>Secondary Use Case</name>

<t>A slightly different use case is where a zone owner has a desire to
replace one DNSSEC-signing DNS provider with another. In the first
step it onboards the new DNS provider by adding a HSYNC RR with HSYNC
State=“ON” thereby identifying the new DNS provider and signalling its
role. This informs both the present DNS providers and the incoming DNS
provider about the addition of the new DNS provider and the onboarding
process is automatically initiated.</t>

<t>Once the onboarding operation is completed the zone owner may trigger
the pending removal of another DNS provider by changing the HSYNC
State flag for the outgoing DNS Provider to “OFF”. This informs all
the present DNS providers about the pending removal and the
offboarding process is automatically initiated.</t>

</section>
<section anchor="tertiary-use-case"><name>Tertiary Use Case</name>

<t>A third use case is where a zone owner wants to migrate from a
single-signer model to a multi-signer model, but as a first step only
wants to transition the existing signer to be designated via a single
HSYNC record. Once that is done the zone owner can continue the
transition to a full multi-signer model at a later time by adding more
HSYNC records.</t>

</section>
</section>
<section anchor="the-distributed-multi-signer-model"><name>The Distributed Multi-Signer Model</name>

<t>The primary difference between monolithic and distributed multi-signer
is that the former has a central “controller” while the latter
doesn’t. But there is still an absolute need for synchronization
between the different participants in the distributed multi-signer
setup.</t>

<t>There are three immediate aspects for the design of a distributed
multi-signer architecture:</t>

<t><list style="symbols">
  <t>The first is “transport”: how to communicate between the
individual instances in a multi-signer system.</t>
  <t>The second is “synchronization”: who decides what changes are
needed where.</t>
  <t>The third is source of truth for different types of zone data. The
zone owner is the source of truth for all unsigned zone data,
except DNSSEC data. The signer is the source of truth for all
DNSSEC data in the zone. Traditionally, the source of truth for the
NS RRset is the zone owner, but with multiple DNS Providers having
the option of moving that responsibility to the DNS Providers would
be an important improvement.</t>
</list></t>

<section anchor="multi-signer-agent-integrated-signer-vs-separate-agent"><name>Multi-Signer Agent: Integrated Signer vs Separate Agent</name>

<t>In a distributed setup there must be a service located with each
multi-signer DNS Provider that manages communication with other DNS
Providers. This is referred to as the multi-signer agent, or MSA. As
not every DNS Provider needs to be signing the zone, the term is not
entirely perfect, but sufficient.</t>

<t>It is possible to implement support for the synchronization and
communication needs directly into each “signer” (i.e. typically an
authoritative nameserver with the ability to do online DNSSEC
signing). In this case the signer implements the MSA functionality.</t>

<t>However, it is also possible to separate the multi-signer
functionality into a separate agent. This agent sits next to the
signer, and is under the same administrative control (the "DNS
Provider"), but is a separate piece of software. When using this
design each signer has an MSA attached next to it. Each MSA is
configured as a “secondary nameserver” to a signer and receives the
(signed) zone from this signer.</t>

<t>The “separate MSA” design has the major advantage of leaving the
signer almost entirely out of the multi-signer complexity. The
requirements are only that the “signer” treats the MSA as a normal
secondary (sends NOTIFY messages and responds to zone transfer
requests) and that the MSA has a mechanism that allows it to make
changes to zones upstream of the “signer” to satisfy the multi-signer
requirements for synchronization of certain RRsets in the apex of the
zone.</t>

<t>In this document the design using a separate MSA is used, while
pointing out that it is possible to integrate this into a future
“signer” that implements both DNSSEC signing and the MSA
functionality.</t>

</section>
<section anchor="source-of-truth"><name>Source of Truth</name>

<t>A common design for DNSSEC signing (regardless of multi-signer) is to
use a separate, bump-on-the-wire signer. This is a signer that
receives the unsigned zone via an incoming zone transfer, signs the
zone, and publishes the signed zone via an outbound zone transfer. In
such a design the source of truth has been split up between the “zone
owner” (source of truth for all non-DNSSEC zone data), and the signer
(source of truth for all DNSSEC data in the zone).</t>

<t>In a distributed multi-signer architecture the source of truth is
further split up into three participants:</t>

<t><list style="symbols">
  <t>The zone owner is the source of truth for all unsigned zone data,
except DNSSEC data and possibly the NS RRset.</t>
  <t>The signer is the source of truth for all data generated via DNSSEC
signing: own DNSKEYs, NSEC/NSEC3 RRs, RRSIGs, etc.</t>
  <t>The MSA is the source of truth for the RRsets that must be kept in
sync across all the signers for the zone. This includes the DNSKEYs
from other signers, CDS and CSYNC RRsets. Possibly also the NS RRset.</t>
</list></t>

<t>The NS RRset is an interesting special case. Traditionally the NS
RRset is maintained by the zone owner, but based on data from the DNS
providers (as authoritative nameservers is a primary service for the
DNS provider). However, in a distributed multi-signer architecture the
NS RRset should preferably be maintained by the MSA. For this reason
the proposed design makes control of the NS RRset explicit and the
responsibility of the zone owner to choose whether to retain control
or delegate to the MSAs. Hence:</t>

<t><list style="symbols">
  <t>The MSA is the source of truth for the NS RRset, subject to the
policy of the zone owner, as described in the HSYNC RRset.</t>
</list></t>

<t>Making the control of the NS RRset explicit is useful regardless of
whether a zone uses multiple signers or single signer.</t>

<t>To be able to keep the signer as simple as possible, the changes to the
NS, DNSKEY, CDS and CSYNC RRsets must be introduced into the unsigned
zone before the zone reaches the signer. Likewise, to keep the zone
owner as simple as possible (i.e. not involved in the details of the
multi-signer automation) these changes must be introduced into the
unsigned zone after the zone leaves the zone owner.</t>

<section anchor="the-combiner"><name>The COMBINER</name>

<t>The consequence of these requirements is that the DNSKEY, CDS and
CSYNC RRsets (and possibly the NS RRset) are maintained via a separate
piece of software inserted between the zone owner and the signer. This
is referred to as the multi-signer COMBINER.</t>

<t>The COMBINER has the following features:</t>

<t><list style="symbols">
  <t>It supports inbound zone transfer of the unsigned zone from the
zone owner.</t>
  <t>It receives updates for the NS, DNSKEY, CDS and CSYNC
RRsets from the MSA. Typically the mechanism used is DNS UPDATE
with a TSIG signature, as this is easy to configure in a local
context. However, other mechanisms, including APIs, are possible.</t>
  <t>It stores all data received from the MSA separate from
the zone data received from the zone owner.</t>
  <t>Whenever it receives a new unsigned zone from the zone owner it
COMBINES zone data from the zone owner (the majority of the zone)
with specific zone data under control of the MSA: three specific
RRsets, all in the apex of the zone: the DNSKEY,CDS and CSYNC
RRsets.</t>
  <t>It is policy free. I.e. the COMBINER is not making any judgement
about what data to include in the zone from the four defined
RRsets.  That judgement is the role of the MSA.</t>
  <t>It does not sign the zone.</t>
  <t>It provides outbound zone transfer of the combined zone to the
signer.</t>
</list></t>

<t>Example setup with two signers showing the logical flow of zone data
between the zone owner, the COMBINER, the signer and the MSA:</t>

<figure><artwork><![CDATA[
                            +--------------+
                            |     owner    |
               xfr          +-+---------+--+    xfr
            /----------------/           \--------------------\
           /                                                   \
    +-----+----+    DNS  +-----+  DNS/API  +-----+  DNS    +----+-----+
    | combiner +<--------+ msa +-----------+ msa +-------->+ combiner |
    +-----+----+  UPDATE +--+--+           +--+--+ UPDATE  +----+-----+
          |                 ^                 ^                 |
          v xfr             |                 |                 v xfr
    +-----+----+     xfr    |                 |   xfr      +----+-----+
    |  signer  +------------+                 +------------+  signer  |
    +-----+----+                                           +----+-----+
          |                                                     |
          v                                                     v
       +--+--+                                               +--+--+
       | NS  |--+                                            | NS  |+
       +-----+  |--+                                         +-----+|-+
          +-----+  |                                            +---+ |
             +-----+                                              +---+
]]></artwork></figure>

</section>
</section>
<section anchor="the-dns-provider"><name>The DNS Provider</name>

<t>A "DNS Provider" is a term that is most commonly used to refer to an
entity that provides authoritative DNS service to one or more zone
owners. In the context of this document it is used to refer to an
entity that provides some subset of the following services:</t>

<t><list style="symbols">
  <t>Signing a zone received from the zone owner.</t>
  <t>Serving the zone via a set of authoritative nameservers.</t>
  <t>Distributing the signed zone to other downstream DNS Providers.</t>
</list></t>

<t>In addition to the above services a DNS Provider MUST also provide:</t>

<t><list style="symbols">
  <t>An MSA for synchronization with other DNS Providers</t>
  <t>A COMBINER for the management of changes to the zone via
the synchronization among MSAs (if it provides a signer)</t>
</list></t>

<t>I.e. in the setup above there are two DNS Providers, both of which are
"complete" in the sense that they provide all three of the above
services.</t>

</section>
</section>
<section anchor="identifying-the-designated-signers"><name>Identifying the Designated Signers</name>

<t>It is the responsibility of the zone owner to choose a set of "DNS
Providers", either internal or external to the zone owners
organization. These DNS Providers MUST be clearly and uniquely
designated via publication in the HSYNC RRset, located at the apex of
the zone and consisting of one HSYNC record for each signer.</t>

<t>The HSYNC RRset MUST be added, by the zone owner, to the, typically
unsigned, zone that the zone owner maintains so that this RRset is
visible to the downstream DNS Providers and their multi-signer agents.</t>

</section>
<section anchor="the-hsync-rrset"><name>The HSYNC RRset</name>

<t>The HSYNC RR has the zone name that publishes the HSYNC RRset as the
owner name (i.e. the HSYNC RRset must be located at the apex of the
zone). The RDATA consists of four fields "State","NSMgmt", "Sign" and
"Identity":</t>

<t>zone.example.    IN HSYNC  State  NSMgmt  Sign  Identity.</t>

<t>State:
    Unsigned 8-bit. Defined values are 1=ON and 2=OFF. The value 0
    is an error.  Values 3-127 are presently undefined. Values 128-255
    are reserved for private use. The presentation format allows
    either as integers (1 or 2) or as tokens (“ON” or “OFF”).</t>

<t>NSMgmt:
    Unsigned 8-bit. Defined values are 1=Zone owner and 2=MSA. The
    value 0 is an error. Values 3-255 are presently undefined (and not
    expected to be defined). The presentation format allows either as
    integers (1 or 2) or as tokens (“OWNER” or “AGENT”).</t>

<t>Sign:
    Unsigned 8-bit. Defined values are 1=YES and 2=NO. The value 0 is an
    error. If Sign=YES for a particular HSYNC record, then the signer
    associated with that Identity is a designated signer for the zone.</t>

<t>Identity:
    Domain name. Used to uniquely identify the Multi-Signer
    Agent for the DNS Provider that the MSA represents.</t>

<t>Example:</t>

<t>zone.example.   IN HSYNC  ON  AGENT  YES  msa.provider.example.</t>

<section anchor="semantics-of-the-hsync-state-field"><name>Semantics of the HSYNC State Field</name>

<t>The HSYNC State field is used to signal to all MSAs what the status of
each MSA is from the point-of-view of the zone owner. The two possible
values are "ON" and "OFF" where "ON" means that the MSA is a currently
designated signer for the zone and "OFF" means that the MSA is
previously designated signer for the zone that is in the process of
being offboarded.</t>

<t>The reason for the "OFF" state is that the offboarding process
involves the remaining signers (hence the signalling) and it is
important to know which signer is being offboarded so that the correct
data may be removed in the correct order during the multi-signer
"remove signer" process (see <xref target="RFC8901"/>).</t>

<t>Once the offboarding process is complete the HSYNC RR for the
offboarded MSA may be removed from the zone at the zone owners
discretion.</t>

</section>
<section anchor="semantics-of-the-hsync-nsmgmt-field"><name>Semantics of the HSYNC NSMgmt Field</name>

<t>The NSMgmt field is used to signal to the MSAs who is responsible for
the contents of the NS RRset for the zone. The two possible values are
"OWNER" and "AGENT".</t>

<t>The value "OWNER" signals that the zone owner is responsible for the NS
RRset and is responsible for updating the NS RRset (either with or
without the unified data from all MSAs). In this case the MSAs MUST NOT
instruct the COMBINER to update the NS RRset.</t>

<t>The value "AGENT" means that the MSAs representing DNS Providers that
sign the zone are responsible for the contents of the NS RRset. In
this case the these MSAs MUST instruct the COMBINER to update the NS
RRset with the unified NS RRset data from all MSAs.</t>

<section anchor="limitation-of-scope-for-ns-management"><name>Limitation of Scope for NS Management</name>

<t>For the purpose of this document the NSMgmt Field only covers the NS
RRset. I.e. it does not include the address records of in-bailiwick
authoritative nameservers. The reasons are:</t>

<t><list style="symbols">
  <t>Limiting the possibility of DNS Providers "polluting" the name space
of the zone.</t>
  <t>Keeping the specification simpler, as the concept of "delegated" NS
management is new.</t>
</list></t>

<t>It is possible to make an argument for delegating management of
address records for in-bailiwick authoritative nameservers, but this
document does not.</t>

</section>
</section>
<section anchor="semantics-of-the-hsync-sign-field"><name>Semantics of the HSYNC Sign Field</name>

<t>The Sign field is used to signal to all MSAs whether the zone owner
requests that the DNS Provider that the MSA represents should sign the
zone or not. The two possible values are "YES" and "NO" where "YES"
means that the MSA represents a currently designated signer for the
zone and "NO" means that the MSA does not.</t>

<t>When Sign=NO the MSA MUST still participate in the communication
between MSAs for the zone, but MUST NOT instruct the COMBINER to
update the NS RRset.</t>

</section>
</section>
<section anchor="communication-between-msas"><name>Communication Between MSAs</name>

<t>For the communication between MSAs there are two choices that need to
be made among the designated MSAs for a zone. The first is what
"transport" to use for the communication. The second is what
"synchronization" model to use when executing future multi-signer
processes.</t>

<t>The two defined transport alternatives are:</t>

<t><list style="symbols">
  <t>DNS-based communication (mandatory to support)</t>
  <t>REST API-based communication</t>
</list></t>

<t>Each has pros and cons and at this point in time it is not clear that
one always is better than the other. To simplify the choice of
transport DNS-based communication is mandatory to support and the REST
API-based communication may only be used if all MSAs support
it. Supported transports are signaled in the Multi-Signer EDNS(0)
Option (see section NNN below).</t>

<t>The two defined synchronization alternatives are:</t>

<t><list style="symbols">
  <t>Leader/Follower synchronization (mandatory to support)</t>
  <t>Peer-to-Peer synchronization</t>
</list></t>

<t>Just as for transport, supported synchronization models are signaled
in the Multi-Signer EDNS(0) Option (see section NNN below).</t>

<t>Regardless of the synchronization model and communication method used,
the MSAs SHOULD exchange all needed information about the zone and the
DNS Provider they represent to enable the multi-signer processes to
execute correctly. This includes notifications about changes to
DNSKEYs, changes to the NS RRset, etc. Depending on synchronization
model it may also include instructions for changes to the zone.</t>

<section anchor="msa-communication-via-dns"><name>MSA Communication via DNS</name>

<t>This transport alternative is based on the observation that all the
communication needs between MSAs can be expressed via DNS
messages. Notifications are sent as DNS NOTIFY messages. Requests for
changes to a zone are sent as DNS UPDATE messages, etc. The sole
remaining communication requirement is for how to communicate
information about the current state between MSAs in an ongoing
multi-signer process. For this reason a dedicated EDNS(0) opcode
specifically for multi-signer synchronization is proposed.</t>

<t>This model is based on <xref target="I-D.draft-berra-dnsop-keystate"/> that solves
a similar problem for delegation synchronization between child and
parent, which has already been implemented and shown to work.</t>

</section>
<section anchor="msa-communication-via-rest-api"><name>MSA Communication via REST API</name>

<t>REST APIs are well-known and a natural fit for many distributed
systems. The challenge is mostly in the initial setup of secure
communication. The certificates need to be validated, preferably
without a requirement on trusting a third party CA. The API endpoints
for each MSA need to be located. Once secure communication has been
established, using a REST API for MSA communication is
straight-forward.</t>

</section>
<section anchor="locating-remote-multi-signer-agents"><name>Locating Remote Multi-Signer Agents</name>

<t>When an MSA receives a zone via zone transfer from the signer it will
analyze the zone to see whether it contains an HSYNC RRset. If there
is no HSYNC RRset the zone MUST be ignored by the MSA from the
point-of-view of multi-signer synchronization.</t>

<t>If, however, the zone does contain an HSYNC RRset then the MSA must
analyze this RRset to identify the other MSAs for the zone via their
target names in each HSYNC record. If any of the other MSAs listed in
the HSYNC RRset is previously unknown to this MSA then secure
communication with this other MSA MUST be established.</t>

<t>Secure communication can be achieved via various transports and it is
up to the MSAs in the zone's HSYNC records to determine amongst
themselves. This document proposes two transports: "DNS" and
"API". "DNS" is designated as as a baseline that MSAs MUST support to
be compliant.</t>

<t>The following two subsections describe the mechanism by which an MSA
SHOULD locate a remote MSA and establish secure DNS-based and
API-based communications, respectively.</t>

<section anchor="locating-a-remote-dns-method-multi-signer-agent"><name>Locating a Remote DNS-Method Multi-Signer Agent</name>

<t>Locating a remote MSA using the DNS mechanism consists of the
following steps:</t>

<t><list style="symbols">
  <t>Lookup and DNSSEC-validate a URI record for the DNS protocol for
the HSYNC identity. This provides the domain name and port to
which DNS messages should be sent.</t>
  <t>Lookup and DNSSEC-validate the SVCB record of the URI record target
to get the IP addresses to use for communication with the remote
MSA. If the returned SVCB record includes a "port=NNN" hint then
this MUST be ignored. I.e. the port to use is defined by the URI
record.</t>
  <t>Lookup and DNSSEC-validate the KEY record of the URI record target
name.  This enables verification of the SIG(0) public key of the
remote MSA once communication starts.</t>
</list></t>

<t>Example: given the following HSYNC record for a remote MSA:</t>

<t>zone.example.     IN HSYNC  ON  AGENT  YES  msa.provider.com.</t>

<t>The local MSA will look up the URI record for msa.provider.com:</t>

<t>_dns._tcp.msa.provider.com.  IN  URI  10 10 “dns://ns.msa.provider.com:5399/”
_dns._tcp.msa.provider.com.  IN  RRSIG URI …</t>

<t>which triggers a lookup for ns.msa.provider.com. SVCB to get the IPv4
and IPv6 addresses as ipv4hints and ipv6hints in the response to the
SVCB query:</t>

<t>ns.msa.provider.com.   IN  SVCB  1 ipv4hint=5.6.7.8 ipv6hint=2001::53
ns.msa.provider.com.   IN  RRSIG SVCB …</t>

<t>and also a look up for the KEY record for ns.msa.provider.com, which
may look like this:</t>

<t>ns.msa.provider.com.  IN  KEY …
ns.msa.provider.com.  IN  RRSIG KEY …</t>

<t>Once all the DNS lookups and DNSSEC-validation of the returned data
has been done, the local MSA is able to initiate communication with
the remote MSA and verify the identity of the responding party via the
validated KEY record for the remote MSAs SIG(0) public key.</t>

</section>
<section anchor="locating-a-remote-api-method-multi-signer-agent"><name>Locating a Remote API-Method Multi-Signer Agent</name>

<t>Locating a remote MSA using the API mechanism consists of the
following steps:</t>

<t><list style="symbols">
  <t>Lookup and DNSSEC-validate the URI record for for the HTTPS protocol
for the HSYNC identity. This provides the base URL that will be used
to construct the individual API endpoints for the REST API. It also
provides the port to use.</t>
  <t>Lookup and DNSSEC-validate the SVCB record for the URI record
target.  This provides the IP-addresses to use for communication
with the MSA. If the returned SVCB record includes a "port=NNN" hint
then this MUST be ignored. I.e. the port to use is defined by the
URI record.</t>
  <t>Lookup and DNSSEC-validate the TLSA record for the port and protocol
specified in the URI record. This will enable verification of the
certificate of the remote MSA once communication starts.</t>
</list></t>

<t>Example: given the following HSYNC record for a remote MSA:</t>

<t>zone.example.     IN HSYNC  ON  AGENT  YES  msa.provider.com.</t>

<t>the local MSA will look up the URI record for msa.provider.com:</t>

<t>_https._tcp.msa.provider.com.  IN  URI  10 10 “https://api.msa.provider.com:443/api/v2/”
_https._tcp.msa.provider.com.  IN  RRSIG URI …</t>

<t>which triggers a lookup for api.msa.provider.com IPv4 and IPv6
addresses as hints in an SVCB RR:</t>

<t>api.msa.provider.com.   IN  SVCB 1 ipv4hint=1.2.3.4 ipv6hint=2001::bad:cafe:443
api.msa.provider.com.   IN  RRSIG SVCB …</t>

<t>Now we know the IP-address and the port as well as the base URL to
use. Finally the TLSA record for _443._tcp.api.msa.provider.com is
looked up, with a response that may look like this:</t>

<t>_443._tcp.api.msa.provider.com.  IN  TLSA 3 1 1 ….
  _443._tcp.api.msa.provider.com.  IN  RRSIG TLSA …</t>

<t>Once all the DNS lookups and DNSSEC-validation of the returned data
has been done, the local MSA is able to initiate communication with
the remote MSA and verify the identity of the responding party via the
TLSA record for the remote MSAs certificate.</t>

<section anchor="fallback-to-dns-based-communication"><name>Fallback to DNS-based Communication</name>

<t>If the API-based communication fails, either because needed DNS
records are missing, the TLSA record fails to validate the remote MSAs
certificate or the remote MSA simply doesn't respond, the local MSA
MUST fall back to DNS-based communication.</t>

</section>
</section>
</section>
<section anchor="the-initial-hello-phase"><name>The Initial HELLO Phase</name>

<t>When two MSAs need to communicate with each other for the first time
(because they are both deisgnated signers for the same zone), they
need to establish secure communication. This is done in a "HELLO"
phase where the MSAs exchange information about their capabilities.</t>

<t>If all the information needed for API-based transport for the remote
party was available, the MSA SHOULD attempt an API-based HELLO. If,
however, this fails for some reason, it should fall back to DNS-based
HELLO.</t>

<section anchor="dns-based-hello-phase"><name>DNS-based HELLO Phase</name>

<t>When using DNS-based communication the HELLO phase is done by sending
a NOTIFY(SOA) for the zone that triggered the need for
communication. The NOTIFY message MUST contain a Multi-Signer EDNS(0)
Option (see section NNN below).</t>

<t>In the Multi-Signer EDNS(0) Option the OPERATION field MUST have the
value "HELLO" (1). Furthermore, the MSA signals its transport and
synchronization capabilities in the TRANSPORT and SYNCHRONIZATION
fields. This message is signed with the SIG(0) key for the local MSA
for which the public key is published as a KEY record for the MSA.</t>

<t>In the response to the NOTIFY, the remote MSA does the same and the
two MSAs can now verify each other's identity and are also aware of
the other MSAs transport and synchronization capabilities.</t>

</section>
<section anchor="api-based-hello-phase"><name>API-based HELLO Phase</name>

<t>When using API-based communication the HELLO phase is done by sending
a REST API POST request to the remote MSA at the "/hello"
endpoint. The request MUST contain a JSON encoded object with the
following fields:</t>

<t><list style="symbols">
  <t>"transport": The transport capabilities of the local MSA.</t>
  <t>"synchronization": The synchronization capabilities of the local MSA.</t>
</list></t>

<t>The response MUST contain a JSON object with the following fields:</t>

<t><list style="symbols">
  <t>"transport": The transport capabilities of the remote MSA.</t>
  <t>"synchronization": The synchronization capabilities of the remote MSA.</t>
</list></t>

</section>
<section anchor="interpretation-of-the-hello-responses"><name>Interpretation of the HELLO Responses</name>

<t>Once an MSA has received HELLO responses from all other MSAs that are
designated signers for the zone, it knows the capabilities of the MSAs
as a group. It can then use this information to determine which
transport to use:</t>

<t><list style="symbols">
  <t>If all MSAs support API-based communication, the MSAs will use
API-based communication for this zone.</t>
  <t>If one or more MSAs only support DNS-based communication, the MSAs
will use DNS-based communication for this zone.</t>
</list></t>

<t>Likewise, each MSA now knows the synchronization capabilities of the
other MSAs and can determine which synchronization model to use:</t>

<t><list style="symbols">
  <t>If all MSAs support the Peer-to-Peer synchronization model, the MSAs
will use the Peer-to-Peer synchronization model for this zone.</t>
  <t>If one or more MSAs only support the Leader/Follower synchronization
model, the MSAs will use the Leader/Follower synchronization model
for this zone.</t>
</list></t>

</section>
</section>
<section anchor="multi-signer-edns0-option-format"><name>Multi-Signer EDNS(0) Option Format</name>

<t>This document uses an Extended Mechanism for DNS (EDNS0) <xref target="RFC6891"/>
option to include Multi-Signer synchronization information in DNS
messages.</t>

<t>This option is structured the same way as the KeyState option
described in <xref target="I-D.draft-berra-dnsop-keystate"/>, which has been
implemented and shown to work for a similar use case. The requirements
for multi-signer synchronization are sufficiently different that it is
not possible to re-use the KeyState OPT also for this purpose and
therefore a new EDNS(0) option is defined here.</t>

<t>The Multi-Signer EDNS(0) option is structured as follows:</t>

<figure><artwork><![CDATA[
                                               1   1   1   1   1   1
       0   1   2   3   4   5   6   7   8   9   0   1   2   3   4   5
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
 0:  |                            OPTION-CODE                        |
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
 2:  |                           OPTION-LENGTH                       |
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
 4:  |           OPERATION           |           TRANSPORT           |
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
 8:  |        SYNCHRONIZATION        |                               /
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
 10: / OPERATION-BODY                                                /
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
]]></artwork></figure>

<t>Field definition details:</t>

<t>OPTION-CODE:
    2 octets / 16 bits (defined in <xref target="RFC6891"/>) contains the value TBD
    for Multi-Signer.</t>

<t>OPTION-LENGTH:
    2 octets / 16 bits (defined in <xref target="RFC6891"/>) contains
    the length of the payload (everything after OPTION-LENGTH) in
    octets and should be 4 plus the length of the OPERATION-BODY field
    (which may be zero octets long).</t>

<t>OPERATION:
    8 bits. Signals the type of operation the message
    performs. This document defines the two operations HELLO and
    HEARTBEAT. For a complete distributed multi-signer specification a
    number of additional operations will need to be allocated to be
    able to describe the states in the different multi-signer
    processes. This allocation must be done either in a revision to
    this document or in a subsequent document.</t>

<t>TRANSPORT:
    8 bits. Encodes the transport capabilities of the MSA. With
    8 bits it is possible to define up to 8 different transports of
    which this document defines two: DNS and API.</t>

<t>SYNCHRONIZATION:
    8 bits. Encodes the synchronization capabilities of
    the MSA. With 8 bits it is possible to define up to 8 different
    synchronization models of which this document defines two:
    Leader/Follower and Peer-to-Peer.</t>

<t>OPERATION-BODY:
    Variable-length. Used to carry operation-specific parameters.</t>

<section anchor="encoding-transport-capabilities-in-the-multi-signer-edns0-option"><name>Encoding Transport Capabilities in the Multi-Signer EDNS(0) Option</name>

<t>An MSA signals the union of its transport capabilities by setting the
corresponding bits to 1.</t>

<t>0: DNS transport supported (baseline, MUST be supported by all MSAs)</t>

<t>1: API transport supported</t>

<t>2: unused</t>

<t>3: unused</t>

<t>4: unused</t>

<t>5: unused</t>

<t>6: unused</t>

<t>7: unused</t>

</section>
<section anchor="encoding-synchronization-capabilities-in-the-multi-signer-edns0-option"><name>Encoding Synchronization Capabilities in the Multi-Signer EDNS(0) Option</name>

<t>An MSA signals its synchronization capabilities by setting the corresponding
bits to 1.</t>

<t>0: Leader/Follower synchronization supported (baseline, MUST be
   supported by all MSAs)</t>

<t>1: Peer-to-Peer synchronization supported</t>

<t>2: unused</t>

<t>3: unused</t>

<t>4: unused</t>

<t>5: unused</t>

<t>6: unused</t>

<t>7: unused</t>

</section>
</section>
</section>
<section anchor="sequence-diagram-example-of-establishing-secure-comms-the-hello-phase"><name>Sequence Diagram Example of Establishing Secure Comms - "The Hello Phase"</name>

<t>The procedure of locating another MSA and establishing a secure
communication, referred to as "The Hello Phase" is examplified in the
sequence diagram below.</t>

<t>The procedure is as follows:</t>

<t><list style="numbers">
  <t>The multisigner agents receive a zone via zone transfer. By
analyzing the HSYNC RRset each MSA become aware of the identities
of the other MSAs for the zone. I.e. each MSA knows which other
MSAs it needs to communicate with.  Communication with each of
these, previously unknown, remote MSAs is referred to as "NEEDED".</t>
  <t>Each MSA starts aquiring the information needed to establish secure
communications with any previously unknown MSAs. Here we only
illustrate the baseline case where DNS-based communications is to
be used in the following phase. Once all needed information has
been collected the communication with this remote MSA is considered
to be "KNOWN".</t>
  <t>Once an MSA has received the required information (URI, SVCB and
KEY records in the baseline case) it sends a NOTIFY message with a
dedicated Multi-Signer OPT code with OPERATION="HELLO". The sender
uses this OPT field to signal its transport and synchronization
capabilities. Similarly, the responder signals its capabilities
using the same field.</t>
  <t>When an MSA either gets a NOERROR response to its NOTIFY OPT(hello)
message or responds with a NOERROR, it transitions out of "The
Hello Phase" with the exchanging party and they transition to the
next phaste where they start sending NOTIFY OPT(heartbeat) signals
instead. The communication with the remote MSA is now considered to
be in the "OPERATIONAL" state.</t>
</list></t>

<t>In the case where one MSA is aware of the need to communicate with
another MSA, but the other is not (eg. the zone transfer was dealyed
for one of them), the slower one SHOULD respond with a RCODE=REFUSED
to any NOTIFY OPT(hello) it receives. Once it is ready, it will send
its own NOTIFY OPT(hello) which should be responded to with a
RCODE=NOERROR.</t>

<figure><artwork><![CDATA[
+----------+                 +----------+                        +----------+
|  Owner   |                 |  MSA A   |                        |  MSA B   |
+----------+                 +----------+                        +----------+
     |                            |                                    |
     |      AXFR(sign-me.se.)     |                                    |
     |--------------------------->|                                    |
     |      AXFR(sign-me.se.)     |                                    |
     |---------------------------------------------------------------->|
     |                            |                                    |
     |                            |                                    |
     |                            |  QUERY _dns._tcp.msa-b.se. URI?    |
     |                            |----------------------------------->|
     |                            |  QUERY ns.msa-b.se. SVCB?          |
     |                            |----------------------------------->|
     |                            |  QUERY ns.msa-b.se. KEY?           |
     |                            |----------------------------------->|
     |                            |                                    |
     |                            |                                    |
     |                            |  NOTIFY sign-me.se. OPT(hello)     |
     |                            |----------------------------------->|
     |                            |  NOERROR sign-me.se. OPT(hello)    |
     |                            |<-----------------------------------|
     |                            |                                    |
     |                            |                                    |
     |                            |  NOTIFY sign-me.se. OPT(heartbeat) |
     |                            |----------------------------------->|
     |                            |                                    |
     |                            |                                    |
     |                            |  NOTIFY sign-me.se. OPT(heartbeat) |
     |                            |<-----------------------------------|
     |                            |                                    |
     |                            |                                    |
     |                            |                                    |

]]></artwork></figure>

</section>
<section anchor="synchronization-of-changes-between-msas"><name>Synchronization of Changes Between MSAs</name>

<t>There are two defined models for synchronization. The first
(Leader/Follower) has the advantage of more clearly mapping to the
original multi-signer model 2, with a single controller. The second
model has the advantage of less total communication between MSAs
(including no elections) but the potential disadvantage of more fine
grained communication during the execution of a multi-signer process.</t>

<t>At this stage it is not clear that one model is superior to the other.</t>

<section anchor="leaderfollower-mode"><name>Leader/Follower Mode</name>

<t>In a leader/follower deployment, a designated multi-signer agent
assumes the role of a leader, directing other agents, or followers,
through the multi-signer process state transitions. In this mode it is
necessary to conduct “elections” where one of the MSAs is chosen as
the Leader before initiating a new multi-signer process. Once the
Leader has been chosen, this model is mostly equivalent to the
original multi-signer “model 2”, with a single controller. The other
MSAs (the followers) essentially become proxies between the controller
(the Leader) and the DNS Provider each MSA represents.</t>

</section>
<section anchor="peer-mode"><name>Peer Mode</name>

<t>In peer mode, the MSAs still need to locate each other, but instead of
relying on trust in each other, each multi-signer agent operates
independently as a peer. I.e. each MSA executes each step in the
multi-signer process on its own. The communication is essentially
reduced to a notification mechanism (“I am now in state N”), although
authenticated to avoid having the contents of this communication
become an attack vector for an adversary.</t>

</section>
<section anchor="multi-signer-state-transitions"><name>Multi-Signer State Transitions</name>

<t>For the multi-signer process semantics to be fulfilled, a new state
transition in a multi-signer process is only possible when all signing
DNS Providers (or their MSAs) have reached the same state.</t>

<t>I.e. regardless of whether each MSA traverse the finite state machine
separately, or only the Leader does, and the Followers report back
when they have suceeded in executing the associated Actions (as
described in <xref target="I-D.draft-ietf-dnsop-dnssec-automation"/>, they must
not be further apart than one transition.</t>

</section>
</section>
<section anchor="responsibilities-of-an-msa"><name>Responsibilities of an MSA</name>

<t>Each MSA has certain responsibilites, depending on supported
transports and synchronization methods.</t>

<section anchor="enabling-remote-msas-to-locate-this-msa"><name>Enabling Remote MSAs to Locate This MSA</name>

<t>For a group of MSAs to be able to communicate securely and synchronize
data for a zone, each MSA must ensure that the DNS records needed for
secure communication with other MSAs are published:</t>

<t><list style="symbols">
  <t>URI, SVCB and KEY records required for DNS-based communication
secured by SIG(0).</t>
  <t>URI, SVCB and TLSA records required for API-based communication
secured by TLS (if supported).</t>
  <t>All of the above MUST be published in a DNSSEC-signed zone under
the domain name that is the identity of the MSA.</t>
</list></t>

</section>
<section anchor="enabling-remote-msas-to-lookup-zone-data-added-by-this-dns-provider"><name>Enabling Remote MSAs to Lookup Zone Data Added By This DNS Provider</name>

<t>When using DNS transport between MSAs, four types of information is
needed to be conveyed from one party to another:</t>

<t><list style="numbers">
  <t>Notifications (sent as DNS NOTIFY).</t>
  <t>Retrieval of existing data (looked up via DNS QUERY).</t>
  <t>Changes to existing data (sent as DNS UPDATE).</t>
  <t>Multi-signer "state" information (sent via the Multi-Signer EDNS(0)
OPT).</t>
</list></t>

<t>The second case, i.e. looking up data for a zone that is particular to
a specific DNS Provider is typically about the DNSKEY RRs added by
that signer or the NS RRs representing the authoritative nameservers
for that DNS Provider. This is looked up under domain names
constructed from the name of the served zone and the identity of the
DNS Provider.</t>

<t>For each zone that is managed, the MSA must ensure that the data
needed for synchronization with other MSAs is published:</t>

<t><list style="symbols">
  <t>The DNSKEY RRset for the zone consisting of the DNSKEYS that the
local signer for this DNS Provider uses to sign the zone.</t>
  <t>The CDS RRset for the zone, representing the KSK that the local
signer uses to sign the zone (when needed).</t>
  <t>The NS RRs for the zone, consisting of the NS records of the
authoritative nameservers that this DNS Provider is responsible
for.</t>
  <t>All of the above MUST be published in a DNSSEC-signed zone under
the domain name that is the concatenation of the zone name and the
identity of the MSA. Example for the zone "zone.example" and the
MSA "msa.provider":</t>
</list></t>

<t>zone.example.msa.provider. IN DNSKEY ...
zone.example.msa.provider. IN RRSIG DNSKEY ...
zone.example.msa.provider. IN NS ...
zone.example.msa.provider. IN RRSIG NS ...</t>

</section>
</section>
<section anchor="migration-from-single-signer-to-multi-signer"><name>Migration from Single-Signer to Multi-Signer</name>

<t>The migration from a single-signer to a multi-signer architecture is
done by adding the HSYNC RRset to the zone. However, this may be done
in several steps.</t>

<section anchor="adding-a-single-hsync-record-to-an-already-signed-zone"><name>Adding a single HSYNC record to an already signed zone</name>

<t>Adding a single HSYNC record to a zone that is already signed by the
DNS provider "provider.com" with NSMGMT=OWNER is a no-op that does not
change anything:</t>

<t>zone.example. IN HSYNC  ON  AGENT  YES  msa.provider.com.</t>

<t>The zone was already signed by the DNS provider "provider.com" and the
provider added any needed DNSSEC records, including DNSKEYs. The zone
NS RRset was managed by the zone owner. All of this is unchanged by
the addition of the HSYNC RRset.</t>

</section>
<section anchor="changing-the-hsync-nsmgmt-field-from-agent-to-owner"><name>Changing the HSYNC NSMGMT Field from AGENT To OWNER</name>

<t>In a multi-signer architecture each MSA publishes the data it
contributes to the zone under the domain name
{zone}.{identity}. I.e. the zone DNSKEYs that the MSA
msa.provider. uses are published as</t>

<t>zone.example.msa.provider. DNSKEY ...
zone.example.msa.provider. DNSKEY ...</t>

<t>Likewise, the NS records for the zone are published as</t>

<t>zone.example.ns.msa.provider. NS ...
zone.example.ns.msa.provider. NS ...</t>

<t>To migrate from "owner maintained" NS RRset to "MSA maintained", the
zone owner must verify that the NS RRset as published by the MSA is
correct and in sync with the NS RRset as published by the zone owner
itself.  After this verification the zone owner changes the HSYNC
NSMGMT field in the existing HSYNC record from NSMGMT=OWNER to
NSMGMT=AGENT.</t>

</section>
<section anchor="migrating-from-a-multi-signer-architecture-back-to-single-signer"><name>Migrating from a Multi-Signer Architecture Back to Single-Signer.</name>

<t>If, for some reason, a zone owner wants to migrate back to a
single-signer architecture, the process is essentially the reverse of
the migration from single-signer to multi-signer:</t>

<t><list style="numbers">
  <t>The zone owner offboards all MSAs but one (the one that will be the
single-signer)</t>
  <t>The zone owner must verify that the NS RRset it publishes (in the
unsigned zone) is correct and in sync with the NS RRset as
published by the remaining MSA.</t>
  <t>The zone owner changes the HSYNC NSMGMT field in the HSYNC record
from NSMGMT=MSA to NSMGMT=OWNER.</t>
</list></t>

<t>The zone is now essentially back to a single-signer architecture.
The remaining HSYNC record may be removed from the zone.</t>

<t>TO BE REMOVED BEFORE PUBLICATION:
# Rationale</t>

</section>
<section anchor="choice-of-the-hsync-mnemonic"><name>Choice of the HSYNC Mnemonic</name>

<t>Initially the mnemonic MSIGNER was used for the HSYNC RRset. However,
as work progressed it became clear that we want also non-signing DNS
Providers to be able to participate. So the RRset is a signalling
mehanism from zone owner to DNS Providers, some of which may or may
not be instructed to sign the zone. Therefore we suggest the mnemonic
HSYNC to indicate that this is a mechanism for "horizontal
synchronization" inside a zone.</t>

<t>But the mnemonic chosen is a very minor point and should a better
suggestion come up it would be great.</t>

</section>
<section anchor="separation-of-msa-and-combiner"><name>Separation of MSA and COMBINER</name>

<t>It is possible to integrate all three multi-signer components (SIGNER,
MSA and COMBINER) into a single piece of software (or two pieces,
depending on the preferred way of slicing the functionality). However,
such a composite module would be a fairly complex piece of software.
This document aims to describe the functional separation of the
different components rather than make a judgement on software design
alternatives.  Hence possible implementation choices are left to the
implementer.</t>

</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>Multi-signer is a complex system with a number of components and a
significant amount of automation. The authors believe that the only
way to make a multi-signer architecture useful in practice is via
automation. However, automation is a double-edged sword. It can both
make the system more robust and more vulnerable.</t>

<t>While all communication between MSAs is authenticated (either via
SIG(0) signatures ore TLS), the signalling from the zone owner to the
MSAs is via the HSYNC RRset in an unsigned zone. This is a potential
attack vector. However, securing zone transfers from zone owner to DNS
providers is a well-known issue with lots of existing solutions (TSIG,
zone transfer via a secure channel, zone transfer-over-TLS,
etc). Employing some of these solutions is strongly recommended.</t>

<t>From a vulnerability point-of-view this architecture introduces
several new components into the zone signing and publication
process. In particular the COMBINER and the MSAs are new components
that need to be secure. The COMBINER has the advantage of not having
to announce its location to the outside world, as it only needs to
communicate with internal components (the zone owner, the signer and
the MSA).</t>

<t>The MSAs are more vulnerable. They need to be discoverable by other
MSAs and hence they are also discoverable by an adversary. On the
other hand, the MSAs are not needed for a new zone to signed and
published, they are only needed when there are changes that require
the MSAs to synchronize, which is an infrequent event. Furthermore,
should an MSA be unable to fulfill its role during the execution of a
multi-signer process, the multi-signer process will simply stop where
it is. Regardless of where the stop (or rather pause) occurs, the zone
will be fully functional and once the MSA is able to resume its role,
the multi-signer process will continue from where it left off.</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations.</name>

<t><strong>Note to the RFC Editor</strong>: In this section, please replace
occurrences of "(This document)" with a proper reference.</t>

<section anchor="hsync-rr-type"><name>HSYNC RR Type</name>

<t>IANA is requested to update the "Resource Record (RR) TYPEs" registry
under the "Domain Name System (DNS) Parameters" registry group as
follows:</t>

<dl>
  <dt>Type</dt>
  <dd>
    <t>HSYNC</t>
  </dd>
  <dt>Value</dt>
  <dd>
    <t>TBD</t>
  </dd>
  <dt>Meaning</dt>
  <dd>
    <t>Zone owner designation of DNS providers enabling mutual discovery</t>
  </dd>
  <dt>Reference</dt>
  <dd>
    <t>(This document)</t>
  </dd>
</dl>

</section>
<section anchor="new-multi-signer-edns-option"><name>New Multi-Signer EDNS Option</name>

<t>This document defines a new EDNS(0) option, entitled "Multi-Signer",
assigned a value of TBD "DNS EDNS0 Option Codes (OPT)" registry</t>

<t>TO BE REMOVED UPON PUBLICATION:
<eref target="foo">https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-11</eref></t>

<figure><artwork><![CDATA[
   +-------+--------------------+----------+----------------------+
   | Value | Name               | Status   | Reference            |
   +-------+--------------------+----------+----------------------+
   | TBD   | Multi-Signer       | Standard | ( This document )    |
   +-------+--------------------+----------+----------------------+
]]></artwork></figure>

</section>
<section anchor="a-new-registry-for-edns-option-multi-signer-operation-codes"><name>A New Registry for EDNS Option Multi-Signer Operation Codes</name>

<t>The Multi-Signer option also defines an 8-bit operation field, for
which IANA is requested to create and mainain a new registry entitled
"Multi-Signer Operations", used by the Multi-Signer option. Initial
values for the "Multi-Signer Operations" registry are given below;
future assignments in in the 3-127 range are to be made through
Specification Required review <xref target="BCP26"/>.</t>

<figure><artwork><![CDATA[
+-----------+---------------------------------------------+-------------------+
| OPERATION | Mnemonic                                    | Reference         |
+-----------+---------------------------------------------+-------------------+
| 0         | forbidden                                   | ( This document ) |
+-----------+---------------------------------------------+-------------------+
| 1         | HELLO                                       | ( This document ) |
+-----------+---------------------------------------------+-------------------+
| 2         | HEARTBEAT                                   | ( This document ) |
+-----------+---------------------------------------------+-------------------+
| 3-127     | Unassigned                                  | ( This document ) |
+-----------+---------------------------------------------+-------------------+
| 128-255   | Private Use                                 | ( This document ) |
+-----------+---------------------------------------------+-------------------+
]]></artwork></figure>

</section>
</section>


  </middle>

  <back>


    <references title='Normative References'>



<reference anchor='RFC8901' target='https://www.rfc-editor.org/info/rfc8901'>
  <front>
    <title>Multi-Signer DNSSEC Models</title>
    <author fullname='S. Huque' initials='S.' surname='Huque'/>
    <author fullname='P. Aras' initials='P.' surname='Aras'/>
    <author fullname='J. Dickinson' initials='J.' surname='Dickinson'/>
    <author fullname='J. Vcelak' initials='J.' surname='Vcelak'/>
    <author fullname='D. Blacka' initials='D.' surname='Blacka'/>
    <date month='September' year='2020'/>
    <abstract>
      <t>Many enterprises today employ the service of multiple DNS providers to distribute their authoritative DNS service. Deploying DNSSEC in such an environment may present some challenges, depending on the configuration and feature set in use. In particular, when each DNS provider independently signs zone data with their own keys, additional key-management mechanisms are necessary. This document presents deployment models that accommodate this scenario and describes these key-management requirements. These models do not require any changes to the behavior of validating resolvers, nor do they impose the new key-management requirements on authoritative servers not involved in multi-signer configurations.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='8901'/>
  <seriesInfo name='DOI' value='10.17487/RFC8901'/>
</reference>

<reference anchor='RFC1996' target='https://www.rfc-editor.org/info/rfc1996'>
  <front>
    <title>A Mechanism for Prompt Notification of Zone Changes (DNS NOTIFY)</title>
    <author fullname='P. Vixie' initials='P.' surname='Vixie'/>
    <date month='August' year='1996'/>
    <abstract>
      <t>This memo describes the NOTIFY opcode for DNS, by which a master server advises a set of slave servers that the master's data has been changed and that a query should be initiated to discover the new data. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='1996'/>
  <seriesInfo name='DOI' value='10.17487/RFC1996'/>
</reference>

<reference anchor='RFC2136' target='https://www.rfc-editor.org/info/rfc2136'>
  <front>
    <title>Dynamic Updates in the Domain Name System (DNS UPDATE)</title>
    <author fullname='P. Vixie' initials='P.' role='editor' surname='Vixie'/>
    <author fullname='S. Thomson' initials='S.' surname='Thomson'/>
    <author fullname='Y. Rekhter' initials='Y.' surname='Rekhter'/>
    <author fullname='J. Bound' initials='J.' surname='Bound'/>
    <date month='April' year='1997'/>
    <abstract>
      <t>Using this specification of the UPDATE opcode, it is possible to add or delete RRs or RRsets from a specified zone. Prerequisites are specified separately from update operations, and can specify a dependency upon either the previous existence or nonexistence of an RRset, or the existence of a single RR. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='2136'/>
  <seriesInfo name='DOI' value='10.17487/RFC2136'/>
</reference>

<reference anchor='RFC3007' target='https://www.rfc-editor.org/info/rfc3007'>
  <front>
    <title>Secure Domain Name System (DNS) Dynamic Update</title>
    <author fullname='B. Wellington' initials='B.' surname='Wellington'/>
    <date month='November' year='2000'/>
    <abstract>
      <t>This document proposes a method for performing secure Domain Name System (DNS) dynamic updates. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='3007'/>
  <seriesInfo name='DOI' value='10.17487/RFC3007'/>
</reference>

<reference anchor='RFC2931' target='https://www.rfc-editor.org/info/rfc2931'>
  <front>
    <title>DNS Request and Transaction Signatures ( SIG(0)s )</title>
    <author fullname='D. Eastlake 3rd' initials='D.' surname='Eastlake 3rd'/>
    <date month='September' year='2000'/>
    <abstract>
      <t>This document describes the minor but non-interoperable changes in Request and Transaction signature resource records ( SIG(0)s ) that implementation experience has deemed necessary. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='2931'/>
  <seriesInfo name='DOI' value='10.17487/RFC2931'/>
</reference>

<reference anchor='RFC2119' target='https://www.rfc-editor.org/info/rfc2119'>
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname='S. Bradner' initials='S.' surname='Bradner'/>
    <date month='March' year='1997'/>
    <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'>
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname='B. Leiba' initials='B.' surname='Leiba'/>
    <date month='May' year='2017'/>
    <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='RFC6891' target='https://www.rfc-editor.org/info/rfc6891'>
  <front>
    <title>Extension Mechanisms for DNS (EDNS(0))</title>
    <author fullname='J. Damas' initials='J.' surname='Damas'/>
    <author fullname='M. Graff' initials='M.' surname='Graff'/>
    <author fullname='P. Vixie' initials='P.' surname='Vixie'/>
    <date month='April' year='2013'/>
    <abstract>
      <t>The Domain Name System's wire protocol includes a number of fixed fields whose range has been or soon will be exhausted and does not allow requestors to advertise their capabilities to responders. This document describes backward-compatible mechanisms for allowing the protocol to grow.</t>
      <t>This document updates the Extension Mechanisms for DNS (EDNS(0)) specification (and obsoletes RFC 2671) based on feedback from deployment experience in several implementations. It also obsoletes RFC 2673 ("Binary Labels in the Domain Name System") and adds considerations on the use of extended labels in the DNS.</t>
    </abstract>
  </front>
  <seriesInfo name='STD' value='75'/>
  <seriesInfo name='RFC' value='6891'/>
  <seriesInfo name='DOI' value='10.17487/RFC6891'/>
</reference>




    </references>

    <references title='Informative References'>




<reference anchor='I-D.draft-ietf-dnsop-dnssec-automation' target='https://datatracker.ietf.org/doc/html/draft-ietf-dnsop-dnssec-automation-03'>
   <front>
      <title>DNSSEC automation</title>
      <author fullname='Ulrich Wisser' initials='U.' surname='Wisser'>
         </author>
      <author fullname='Shumon Huque' initials='S.' surname='Huque'>
         <organization>Salesforce</organization>
      </author>
      <author fullname='Johan Stenstam' initials='J.' surname='Stenstam'>
         <organization>The Swedish Internet Foundation</organization>
      </author>
      <date day='19' month='October' year='2024'/>
      <abstract>
	 <t>   This document describes an algorithm and protocol to automate the
   setup, operations, and decomissioning of Multi-Signer DNSSEC
   [RFC8901] configurations.  It employs Model 2 of the multi-signer
   specification, where each operator has their own distinct KSK and ZSK
   sets (or CSK sets), Managing DS Records from the Parent via CDS/
   CDNSKEY [RFC8078], and Child-to-Parent Synchronization in DNS
   [RFC7477] to accomplish this.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-dnsop-dnssec-automation-03'/>
   
</reference>


<reference anchor='I-D.draft-berra-dnsop-keystate' target='https://datatracker.ietf.org/doc/html/draft-berra-dnsop-keystate-01'>
   <front>
      <title>Signalling Key State Via DNS EDNS(0) OPT</title>
      <author fullname='Erik Bergström' initials='E.' surname='Bergström'>
         <organization>The Swedish Internet Foundation</organization>
      </author>
      <author fullname='Leon Fernandez' initials='L.' surname='Fernandez'>
         <organization>The Swedish Internet Foundation</organization>
      </author>
      <author fullname='Johan Stenstam' initials='J.' surname='Stenstam'>
         <organization>The Swedish Internet Foundation</organization>
      </author>
      <date day='7' month='February' year='2025'/>
      <abstract>
	 <t>   This document introduces the KeyState EDNS(0) option code, to enable
   the exchange of SIG(0) key state information between DNS entities via
   the DNS protocol.  The KeyState option allows DNS clients and servers
   to include key state data in both queries and responses, facilitating
   mutual awareness of SIG(0) key status between child and parent zones.
   This mechanism addresses the challenges of maintaining
   synchronization of SIG(0) keys used for securing DNS UPDATE messages,
   thereby enhancing the efficiency and reliability of DNS operations
   that require coordinated key management.

   This document proposes such a mechanism.

   TO BE REMOVED: This document is being collaborated on in Github at:
   https://github.com/johanix/draft-berra-dnsop-opt-transaction-state
   (https://github.com/johanix/draft-berra-dnsop-transaction-state-00).
   The most recent working version of the document, open issues, etc,
   should all be available there.  The authors (gratefully) accept pull
   requests.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-berra-dnsop-keystate-01'/>
   
</reference>

<referencegroup anchor='BCP26' target='https://www.rfc-editor.org/info/bcp26'>
  <reference anchor='RFC8126' target='https://www.rfc-editor.org/info/rfc8126'>
    <front>
      <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
      <author fullname='M. Cotton' initials='M.' surname='Cotton'/>
      <author fullname='B. Leiba' initials='B.' surname='Leiba'/>
      <author fullname='T. Narten' initials='T.' surname='Narten'/>
      <date month='June' year='2017'/>
      <abstract>
        <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
        <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
        <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
      </abstract>
    </front>
    <seriesInfo name='BCP' value='26'/>
    <seriesInfo name='RFC' value='8126'/>
    <seriesInfo name='DOI' value='10.17487/RFC8126'/>
  </reference>
</referencegroup>




    </references>


<section anchor="change-history-to-be-removed-before-publication"><name>Change History (to be removed before publication)</name>

<t><list style="symbols">
  <t>draft-leon-distributed-multi-signer-00</t>
</list></t>

<ul empty="true"><li>
  <t>Initial public draft.</t>
</li></ul>

</section>


  </back>

<!-- ##markdown-source:
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

-->

</rfc>

