<?xml version="1.0" encoding="US-ASCII"?>

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY rfc2119 PUBLIC "" ".//reference.RFC.2119.xml">
]>

  <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>

  <?rfc toc="yes" ?>
  <?rfc symrefs="yes" ?>
  <?rfc sortrefs="yes"?>
  <?rfc compact="yes" ?>
  <?rfc subcompact="no" ?>
  <?rfc rfcedstyle="yes" ?>

<rfc number="7344" category="info" submissionType="IETF" consensus="yes" ipr="trust200902">

  <front>

    <title abbrev="Delegation Trust Maintenance">Automating
    DNSSEC Delegation Trust Maintenance</title>

    <author fullname="Warren Kumari" initials="W." surname="Kumari">
      <organization>Google</organization>

      <address>
        <postal>
          <street>1600 Amphitheatre Parkway</street>

          <city>Mountain View, CA</city>

          <code>94043</code>

          <country>US</country>
        </postal>

        <email>warren@kumari.net</email>
      </address>
    </author>

    <author fullname="Olafur Gudmundsson" initials="O." surname="Gudmundsson">
      <organization>OGUD Consulting</organization>

      <address>
        <postal>
          <street>3821 Village Park Dr.</street>

          <city>Chevy Chase</city>

          <region>MD</region>

          <code>20815</code>

          <country>US</country>
        </postal>

        <email>ogud@ogud.com</email>
      </address>
    </author>

    <author fullname="George Barwood" initials="G." surname="Barwood">
      <organization></organization>

      <address>
        <postal>
          <street>33 Sandpiper Close</street>

          <city>Gloucester</city>

          <code>GL2 4LZ</code>

          <country>United Kingdom</country>
        </postal>

        <email>george.barwood@blueyonder.co.uk</email>
      </address>
    </author>

    <date month="August" year="2014" />

    <area>ops</area>

    <workgroup>dnsop</workgroup>

 <keyword>key roll</keyword>
 <keyword>trust anchor</keyword>
 <keyword>CDS</keyword>
 <keyword>CDNSKEY</keyword>
 <keyword>security</keyword>

    <abstract>
      <t>This document describes a method to allow DNS Operators to more
      easily update DNSSEC Key Signing Keys using
      the DNS as a communication
      channel. The technique described is aimed at delegations in which it is
      currently hard to move information from the Child to Parent.</t>
    </abstract>
  </front>

  <middle>
    <section title="Introduction">
      <t>The first time a DNS Operator signs a zone, they need to communicate
      the keying material to their Parent through some out-of-band method to
      complete the chain of trust. Depending on the desires of the Parent, the
      Child might send their DNSKEY record, a DS record, or both.</t>

      <t>Each time the Child changes the key that is represented in the
      Parent, the updated and/or deleted key information has to be
      communicated to the Parent and published in the Parent's zone. How this
      information is sent to the Parent depends on the relationship the Child
      has with the Parent. In many cases this is a manual process --  and not an
      easy one. For each key change, there may be up to two interactions with
      the Parent. Any manual process is susceptible to mistakes and/or
      errors. In addition, due to the annoyance factor of the process,
      Operators may avoid changing keys or skip needed steps to publish the
      new DS at the Parent.</t>

      <t>DNSSEC provides data integrity to information published in DNS; thus,
      DNS publication can be used to automate maintenance of delegation
      information. This document describes a method to automate publication of
      subsequent DS records after the initial one has been published.</t>

      <t>Readers are expected to be familiar with DNSSEC, including <xref
      target="RFC4033"></xref>, <xref target="RFC4034"></xref>, <xref
      target="RFC4035"></xref>, <xref target="RFC5011"></xref>, and <xref
      target="RFC6781"></xref>.</t>

      <t>This document outlines a technique in which the Parent periodically
      (or upon request) polls its signed Children and automatically publishes
      new DS records. To a large extent, the procedures this document follows
      are as described in <xref target="RFC6781"></xref>, Section 4.1.2.</t>

      <t>This technique is designed to be friendly both to fully automated
      tools and humans. Fully automated tools can perform all the actions
      needed without human intervention and thus can monitor when it is safe
      to move to the next step.</t>

      <t>The solution described in this document only allows transferring
      information about DNSSEC keys (DS and DNSKEY) from the Child to the
      Parental Agent. It lists exactly what the Parent should publish and
      allows for publication of standby keys. A different protocol, <xref
      target="CPSYNC-DNS"></xref>, can be used to maintain other important
      delegation information, such as NS and glue records. These two protocols have
      been kept as separate solutions because the problems are fundamentally
      different and a combined solution is overly complex.</t>

      <t>This document describes a method for automating maintenance of the
      delegation trust information and proposes a polled/periodic trigger
      for simplicity. Some users may prefer a different trigger, for example, a
      button on a web page, a REST interface, 
      or a DNS NOTIFY. These alternate additional triggers are not discussed in this document.</t>

      <t>This proposal does not include all operations needed for the
      maintenance of DNSSEC key material, specifically the initial
      introduction or complete removal of all keys. Because of this, alternate
      communications mechanisms must always exist, potentially introducing
      more complexity.</t>

      <section title="Terminology">
        <t>The terminology we use is defined in this section. The highlighted
	roles are as follows:<list style="symbols">
            <t>Child: The entity on record that has the delegation of the
            domain from the Parent.</t>

            <t>Parent: The domain in which the Child is registered.</t>

            <t>Child DNS Operator: The entity that maintains and publishes
            the zone information for the Child DNS.</t>

            <t>Parental Agent: The entity that the Child has a relationship
            with to change its delegation information.</t>

            <t>Provisioning System: A system that the Operator of the master
            DNS server operates to maintain the information published in the
            DNS. This includes the systems that sign the DNS data.</t>

	    <t> CDS/CDNSKEY: This notation refers to CDS and/or
	    CDNSKEY, i.e., one or both.</t> 
          </list></t>
      </section>

      <section title="Requirements Notation">
        <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
        <xref target="RFC2119"></xref>.</t>
      </section>
    </section>

    <section title="Background">
      <section title="DNS Delegations">
        <t>DNS operation consists of delegations of authority. For each
        delegation, there are (most of the time) two parties: the Parent and
        the Child.</t>

        <t>The Parent publishes information about the delegations to the
        Child; for the name servers, it publishes an <xref
        target="RFC1035">NS</xref> Resource Record Set (RRset) that lists a hint for name servers
        that are authoritative for the Child. The Child also publishes an NS
        RRset, and this set is the authoritative list of name servers to the
        Child zone.</t>

        <t>The second RRset the Parent sometimes publishes is the <xref
        target="RFC4034">DS</xref> set. The DS RRset provides information
        about the DNSKEY(s) that the Child has told the Parent it will use to
        sign its DNSKEY RRset. In DNSSEC, a trust relationship between zones is
        provided by the following chain:</t>

        <t>Parent DNSKEY --&gt; DS --&gt; Child DNSKEY.</t>

        <t>A prior proposal <xref target="AUTO-CPSYNC"></xref> suggested
        that the Child send an "update" to the Parent via a mechanism similar
        to DNS UPDATE. The main issue became: how does the Child find the
        actual Parental Agent/server to send the update to? While that could
        have been solved via technical means, it failed to reach consensus.
        There is also a similar proposal in <xref
        target="PARENT-ZONES"></xref>.</t>

        <t>As the DS record can only be present at the Parent <xref
        target="RFC4034"></xref>, some other method is needed to automate
        which DNSKEYs are picked to be represented in the Parent zone's DS
        records. One possibility is to use flags in the DNSKEY record. If the
        Secure Entry Point (SEP) bit is set, this indicates that the DNSKEY is intended for use as
        a secure entry point. This DNSKEY signs the DNSKEY RRset, and the
        Parental Agent can calculate DS records based on that. But this fails
        to meet some operating needs, including the Child having no influence on
        what DS digest algorithms are used and DS records that can only be
        published for keys that are in the DNSKEY RRset; thus, this
        technique would not be compatible with Double-DS 
        rollover <xref
        target="RFC6781"></xref>.</t>
      </section>

      <section title="Relationship between Parent and Child DNS Operators">
        <t>In practical application, there are many different relationships
        between the Parent and Child DNS Operators. The type of relationship
        affects how the Child DNS Operator communicates with the Parent. This
        section will highlight some of the different situations but is by no
        means a complete list.</t>

        <t>Different communication paths: <list style="symbols">
            <t>Direct/API: The Child can change the delegation information via
            automated/scripted means. The Extensible Provisioning Protocol (EPP)
	    <xref target="RFC5730"></xref>, used
            by many Top-Level Domains (TLDs), is an example of this. Other examples are web-based
            programmatic interfaces that Registrars make available to their
            Resellers.</t>

            <t>User Interface: The Child uses a web site set up by the
            Parental Agent for updating delegation information.</t>

            <t>Indirect: The communication has to be transmitted via
            an out-of-band mechanism between two parties, such as by email or telephone.
            This is common when the Child DNS Operator is neither the Child
            itself nor the Registrar for the domain, but a third party.</t>

            <t>Multi-step Combinations: The information flows through an
            intermediary. It is possible, but unlikely, that all the steps are
            automated via APIs and there are no humans involved.</t>
          </list></t>

        <t>A domain name holder (Child) may operate its own DNS servers or
        outsource the operation. While we use the word "Parent" as singular,
        a Parent can consist of a single entity or a composite of many discrete
        parts that have rules and roles. We refer to the entity that the Child
        corresponds with as the Parent.</t>

        <t>An organization (such as an enterprise) may delegate parts of its
        name-space to be operated by a group that is not the same as that
        which operates the organization's DNS servers. In some of these cases,
        the flow of information is handled either in an ad hoc manner or via
        some corporate mechanism; this can range from email to a fully automated
        operation.</t>

        <section title="Solution Space">
          <t>This document is aimed at the cases in which there is a
          separation between the Child and Parent.</t>

          <t>A further complication is when the Child DNS Operator is not the
          Child. There are two common cases of this:<list style="format %c)">
              <t>The Parental Agent (e.g., Registrar) handles the DNS
              operation.</t>

              <t>A third party takes care of the DNS operation.</t>
            </list> If the Parental Agent is the DNS Operator, life is much
          easier; the Parental Agent can inject any delegation changes
          directly into the Parent's provisioning system. The techniques
          described below are not needed in the case when the Parental Agent is
          the DNS Operator.</t>

          <t>In the case of a third-party DNS Operator, the Child either needs
          to relay changes in DNS delegation or give the Child DNS Operator
          access to its delegation/registration account.</t>

          <t>Some Parents want the Child to express their DNSKEYs in the form
          of DS records, while others want to receive the DNSKEY records and
          calculate the DS records themselves. There is no consensus on which
          method is better; both have good reasons to exist. This solution is
          DS vs. DNSKEY agnostic and allows operation with either.</t>
        </section>

        <section title="DNSSEC Key Change Process">
          <t>After a Child DNS Operator first signs the zone, there is a need
          to interact with the Parent, for example, via a delegation account
          interface to upload or paste in the zone's DS information. This
          action of logging in through the delegation account user interface
          authenticates that the user is authorized to change delegation
          information for the Child published in the Parent zone. In the case
          where the Child DNS Operator does not have access to the
          registration account, the Child needs to perform the action.</t>

          <t>At a later date, the Child DNS Operator may want to publish a new
          DS record in the Parent, either because they are changing keys or
          because they want to publish a standby key. This involves
          performing the same process as before. Furthermore, when this is a
          manual process with cut and paste, operational mistakes will happen
          -- or worse, the update action will not be performed at all.</t>

          <t>The Child DNS Operator may also introduce new keys and can do so
          when old keys exist and can be used. The Child may also remove old
          keys, but this document does not support removing all keys. This is
          to avoid making signed zones unsigned. The Child may not enroll the
          initial key or introduce a new key when there are no old keys that
          can be used (without some additional out-of-band validation of the
          keys) because there is no way to validate the information.</t>
        </section>
      </section>
    </section>

    <section title="CDS (Child DS) and CDNSKEY (Child DNSKEY) Record Definitions">
      <t>This document specifies two new DNS resource records, CDS and
      CDNSKEY. These records are used to convey, from one zone to its Parent,
      the desired contents of the zone's DS resource record set residing
      in the Parent zone.</t>

<!-- [rfced] Where "/" is used in "CDS/CDNSKEY", may it be changed to
"and" or otherwise? The "/" seems to introduce unnecessary ambiguity.
For example:


[OG]: in this case it can be changed to "and"
OLD: 
The CDS/CDNSKEY Record Definitions
NEW: 
CDS (Child DS) and CDNSKEY (Child DNSKEY) Record Definitions

-->

<t>
   The CDS and CDNSKEY resource records are published in the Child zone
   and give the Child control of what is published for it in the
   parental zone.  The Child can publish these manually, or they can be
   automatically maintained by DNS provisioning tools.  The CDS/CDNSKEY RRset expresses what the Child would like the DS RRset to
   look like after the change; it is a "replace" operation, and it is up
   to the software that consumes the records to translate that into the
   appropriate add/delete operations in the provisioning systems (and in
   the case of CDNSKEY, to generate the DS from the DNSKEY).  If
   neither CDS nor CDNSKEY RRset is present in the Child, this means that no change is
   needed.
    </t>

<!-- [rfced] Please confirm that the correct text has been removed, 
per your note. That is, the text from "Version -04" to 
"was horrid :-)" was removed.
-->
<!-- [OG] 
     right translation of / here is neither .. nor
I applied the following above
 OLD: 
   the case of CDNSKEY, to generate the DS from the DNSKEY).  If no
   CDS/CDNSKEY RRset is present in the Child, this means that no
   change is

NEW: 
   the case of CDNSKEY, to generate the DS from the DNSKEY).  If
   neither CDS nor CDNSKEY RRset is present in the Child, this means
   that no change is 
-->


      <section title="CDS Resource Record Format">
        <t>The wire and presentation format of the Child DS (CDS) resource
        record is identical to the DS record <xref target="RFC4034"></xref>.
        IANA has allocated RR code 59 for the CDS resource record via Expert
        Review <xref target="DNS-TRANSPORT"></xref>. The CDS RR uses the same
        registries as DS for its fields.</t>

        <t>No special processing is performed by authoritative servers or by
        resolvers, when serving or resolving. For all practical purposes, CDS
        is a regular RR type.</t>
      </section>

      <section title="CDNSKEY Resource Record Format">
        <t>The wire and presentation format of the CDNSKEY ("Child DNSKEY")
        resource record is identical to the DNSKEY record. IANA has allocated
        RR code 60 for the CDNSKEY resource record via Expert Review. The
        CDNSKEY RR uses the same registries as DNSKEY for its fields.</t>

        <t>No special processing is performed by authoritative servers or by
        resolvers, when serving or resolving. For all practical purposes,
        CDNSKEY is a regular RR type.</t>
      </section>
    </section>

    <section title="Automating DS Maintenance with CDS/CDNSKEY Records">
      <t>CDS/CDNSKEY resource records are intended to be "consumed" by
      delegation trust maintainers. The use of CDS/CDNSKEY is OPTIONAL.</t>

      <t>If the Child publishes either the CDS or the CDNSKEY resource record,
      it SHOULD publish both. If the Child knows which the Parent consumes, it
      MAY choose to only publish that record type (for example, some Children
      wish the Parent to publish a DS, but they wish to keep the DNSKEY
      "hidden" until needed). If the Child publishes both, the two RRsets MUST
      match in content.</t>

      <section anchor="CDS_rules" title="CDS and CDNSKEY Processing Rules">
        <t>If there is neither CDS nor CDNSKEY RRset in the Child, this signals that
        no change should be made to the current DS set. This means that, once
        the Child and Parent are in sync, the Child DNS Operator MAY remove
        all CDS and CDNSKEY resource records from the zone. The Child DNS
        Operator may choose to do this to decrease the size of the zone or to
        decrease the workload for the Parent (if the Parent receives no
	CDS/CDNSKEY records, it can go back to sleep). If it does receive a CDS or
        CDNSKEY RRset, it needs to check them against what is currently
        published (see Section 5).</t>

        <t>The following acceptance rules are placed on the CDS and CDNSKEY resource
        records as follows: <list style="symbols">
            <t>Location: MUST be at the Child zone apex.</t>

            <t>Signer: MUST be signed with
	    a key that is represented in both
            the current DNSKEY and DS RRsets, unless the Parent uses the
	    CDS or CDNSKEY RRset for initial enrollment; in that case, the Parent
	    validates the CDS/CDNSKEY through some other means (see <xref
            target="Detecting_changed_CDS"></xref> and the Security
            Considerations).</t>

            <t>Continuity: MUST NOT break the
	    current delegation if applied to DS RRset.</t>
          </list> If any these conditions fail, the CDS or CDNSKEY resource
        record MUST be ignored, and this error SHOULD be logged.</t>
      </section>
    </section>


<!-- OG: 
Below I made some textual edits to use RRset(s) consistently 
before this paragraph used RRset/resource record/records/
--> 

    <section title="CDS/CDNSKEY Publication">
      <t>The Child DNS Operator publishes CDS/CDNSKEY RRset(s).
      In order to be valid, the CDS/CDNSKEY RRset(s) MUST be compliant
      with the rules in <xref target="CDS_rules"></xref>. When the Parent DS
      is in sync with the CDS/CDNSKEY RRset(s), the Child DNS
      Operator MAY delete the CDS/CDNSKEY RRset(s); the Child can determine
      if this is the case by querying for DS records in the Parent.</t>

      <t></t>
    </section>

    <section title="Parent-Side CDS/CDNSKEY Consumption">
      <t>The CDS/CDNSKEY RRset(s) SHOULD be used by the Parental Agent to
      update the DS RRset in the Parent zone. The Parental Agent for this uses
      a tool that understands the CDS/CDNSKEY signing rules in <xref
      target="CDS_rules"></xref>, so it might not be able to use a standard
      validator.</t>

      <t>The Parent MUST choose to use either CDNSKEY or CDS resource records
      as its default updating mechanism. The Parent MAY only accept either
      CDNSKEY or CDS, but it MAY also accept both so it can use the other in
      the absence of the default updating mechanism; it MUST NOT expect
      there to be both.</t>

      <section anchor="Detecting_changed_CDS"
               title="Detecting a Changed CDS/CDNSKEY">
        <t>How the Parental Agent gets the CDS/CDNSKEY RRset may differ.
        Below are two examples of how this can take place. <list
            hangIndent="6" style="hanging">
            <t hangText="Polling:">The Parental Agent operates a tool that
            periodically checks each of the Children that has a DS record to
            see if there is a CDS or CDNSKEY RRset.</t>

            <t hangText="Pushing:">The delegation user interface has a button
            {Fetch DS} that, when pushed, performs the CDS/CDNSKEY processing. If
            the Parent zone does not contain DS for this delegation, then the
            "push" SHOULD be ignored. If the Parental Agent displays the
            contents of the CDS/CDNSKEY to the user and gets confirmation
            that this represents their key, the Parental Agent MAY use this
            for initial enrollment (when the Parent zone does not contain the
            DS for this delegation).</t>
          </list>In either case, the Parental Agent MAY apply additional rules
        that defer the acceptance of a CDS/CDNSKEY change. These rules may
        include a condition that the CDS/CDNSKEY remains in place and valid
        for some time period before it is accepted. It may be appropriate in
        the "Pushing" case to assume that the Child is ready and thus accept
        changes without delay.</t>

        <section title="CDS/CDNSKEY Polling">
          <t>This is the only defined use of CDS/CDNSKEY resource records in
          this document. There are limits to the scalability of polling
          techniques; thus, some other mechanism is likely to be specified
          later that addresses CDS/CDNSKEY resource record usage in the
          situation where polling runs into scaling issues. Having said that, polling
          will work in many important cases such as enterprises, universities,
          and smaller TLDs. In many regulatory environments, the Registry is
          prohibited from talking to the Registrant. In most of these cases,
          the Registrant has a business relationship with the Registrar, 
          so the Registrar can offer this as a service.</t>

          <t>If the CDS/CDNSKEY RRset(s) do not exist, the Parental Agent
          MUST take no action. Specifically, it MUST NOT delete or alter the
          existing DS RRset.</t>
        </section>

        <section title="Polling Triggers">
          <t>It is assumed that other mechanisms will be implemented to
          trigger the Parent to look for an updated CDS/CDNSKEY RRset. As
          the CDS/CDNSKEY resource records are validated with DNSSEC, these
          mechanisms can be unauthenticated. As an example, a Child could
          telephone its Parent and request that it process the new CDS or
          CDNSKEY resource records, or an unauthenticated POST could be made to
          a web server (with rate-limiting).</t>

          <t>Other documents can specify the trigger conditions.</t>
        </section>
      </section>

      <section title="Using the New CDS/CDNSKEY Records">
        <t>Regardless of how the Parental Agent detected changes to a
	CDS/CDNSKEY RRset, the Parental Agent SHOULD use a DNSSEC validator to
        obtain a validated CDS/CDNSKEY RRset from the Child zone. A NOT
        RECOMMENDED exception to this is if the Parent performs some
        additional validation on the data to confirm that it is the "correct"
        key.</t>

        <t>The Parental Agent MUST ensure that previous versions of the
	CDS/CDNSKEY RRset do not overwrite more recent versions. This MAY be
        accomplished by checking that the signature inception in the Resource
	Record Signature (RRSIG) for
        CDS/CDNSKEY RRset is later and/or that the serial number on the Child's
        Start of Authority (SOA) is greater. This may require the Parental Agent to maintain some
        state information.</t>

        <t>The Parental Agent MAY take extra security measures. For example,
        to mitigate the possibility that a Child's Key Signing Key (KSK) has been
        compromised, the Parental Agent may inform (by email or
        other methods) the Child DNS Operator of the change. However, the
        precise out-of-band measures that a Parent zone takes are outside the
        scope of this document.</t>

        <t>Once the Parental Agent has obtained a valid CDS/CDNSKEY RRset it
        MUST check the publication rules from Section 4.1. In particular, the
        Parental Agent MUST check the Continuity rule and do its best not to
        invalidate the Child zone. Once checked, if the information in the
        CDS/CDNSKEY and DS differ, it may apply the changes to the Parent
        zone. If the Parent consumes CDNSKEY, the Parent should calculate the
        DS before doing this comparison.</t>

        <section title="Parent Calculates DS">
          <t>There are cases where the Parent wants to calculate the DS record
          due to policy reasons. In this case, the Child publishes CDNSKEY
          records, and the Parent calculates the DS records on behalf of the
          Children.</t>

          <t>When a Parent operates in "calculate DS" mode, it can operate in
          one of two sub-modes:<list style="hanging">
              <t hangText="full:">The Parent only publishes DS records it calculates
              from DNSKEY records.</t>

              <t hangText="augment:">The Parent will make sure there are DS records
              for the digest algorithm(s) it requires(s).</t>
            </list></t>

          <t>In the case where the Parent fetches the CDNSKEY RRset and
          calculates the DS, the resulting DS can differ from the CDS published
          by the Child. It is expected that the differences are only due to the
          different set of digest algorithms used.</t>
        </section>
      </section>
    </section>

    <section anchor="iana_considerations" title="IANA Considerations">
      <t>IANA has assigned RR Type code 59 for the CDS resource record. This
      was done for a draft version whose content was later incorporated into this document <xref
      target="DNS-TRANSPORT"></xref>. This document is the reference
      for CDS RRtype.</t>

      <t>IANA has assigned an RR Type for the CDNSKEY as described below:
      <list style="hanging">
          <t hangText="Type:">CDNSKEY</t>

          <t hangText="Value:">60</t>

<!-- [rfced] This document and the IANA registry do not match for
 the capitalization of 'child'. (It was capitalized per Olafur's reply
 earlier in the editing process.) Should the IANA registry be updated?
 If so, we can send them a request.

This document: DNSKEY(s) the Child wants reflected in DS

IANA registry: DNSKEY(s) the child wants reflected in DS

[OG]: Yes change to Child

-->
          <t hangText="Meaning:">DNSKEY(s) the Child wants reflected in DS</t>

          <t hangText="Reference:">This document</t>
        </list></t>
    </section>

    <section title="Privacy Considerations">
      <t>All of the information handled or transmitted by this protocol is
      public information published in the DNS.</t>
    </section>

    <section anchor="security" title="Security Considerations">
      <t>This work is for the normal case; when things go wrong there is only
      so much that automation can fix.</t>

      <t>If the Child breaks DNSSEC validation by removing all the DNSKEYs that
      are represented in the DS set, its only repair actions are to contact the
      Parent or restore the DNSKEYs in the DS set.</t>

      <t>In the event of a compromise of the server or system generating
      signatures for a zone, an attacker might be able to generate and publish
      new CDS/CDNSKEY resource records. The modified CDS/CDNSKEY records
      will be picked up by this technique and may allow the attacker to
      extend the effective time of his attack. If there is a delay in
      accepting changes to DS, as in <xref target="RFC5011"></xref>, then the
      attacker needs to hope his activity is not detected before the DS in the
      Parent is changed. If this type of change takes place, the Child needs
      to contact the Parent (possibly via a Registrar web interface) and
      remove any compromised DS keys.</t>

      <t>A compromise of the account with the Parent (e.g., Registrar) will not
      be mitigated by this technique, as the "new Registrant" can
      delete or modify the DS records at will.</t>

      <t>While it may be tempting, the techniques specified in this document SHOULD NOT be used for initial
      enrollment of keys since there is no way to ensure that the initial key
      is the correct one. If it is used, strict rules for inclusion of keys -- such
      as hold-down times, challenge data inclusion, or similar -- MUST be used
      along with some kind of challenge mechanism. A Child cannot use this
      mechanism to go from signed to unsigned (publishing an empty CDS/CDNSKEY
      RRset means no change should be made in the Parent).</t>

      <t>The CDS RR type should allow for enhanced security by simplifying the
      process. Since key change is automated, updating a DS RRset by other
      means may be regarded as unusual and subject to extra security
      checks.</t>

      <t>As this introduces a new mechanism to update information in the
      Parent, it MUST be clear who is fetching the records and creating the
      appropriate records in the Parent zone. Specifically, some operations may
      use mechanisms other than what is described here. For example, a
      Registrar may assume that it is maintaining the DNSSEC key information
      in the Registry and may have this cached. If the Registry is fetching
      the CDS/CDNSKEY RRset, then the Registry and Registrar may have
      different views of the DNSSEC key material; the result of such a
      situation is unclear. Therefore, this mechanism SHOULD NOT be used to
      bypass intermediaries that might cache information and, because of that,
      get the wrong state.</t>

      <t>If there is a failure in applying changes in the Child zone to all
      DNS servers listed in either Parent or Child NS set, it is possible that
      the Parental Agent may get confused either because it gets different
      answers on different checks or CDS RR validation fails. 
   In
   the worst case, the Parental Agent performs an action reversing a
   prior action after the Child signing system decides to take the
   next step in the key change process, resulting in a broken
   delegation.
</t>

      <t>DNS is a loosely coherent distributed database with local caching;
      therefore, it is important to allow old information to expire from
      caches before deleting DS or DNSKEY records. Similarly, it is important
      to allow new records to propagate through the DNS before use (see <xref
      target="RFC6781"></xref>).</t>

      <t>It is common practice for users to outsource their DNS hosting to a
      third-party DNS provider. In order for that provider to be able to
      maintain the DNSSEC information, some users give the provider their
      Registrar login credentials (which obviously has negative security
      implications). 
    Deploying the solution described in this document allows                          
    third-party DNS providers to maintain the DNSSEC information without
    Registrants                         
    giving their Registrar credentials, thereby improving security.
</t>

      <t>By automating the maintenance of the DNSSEC key information (and
      removing humans from the process), we expect to decrease the number of
      DNSSEC related outages, which should increase DNSSEC deployment.</t>
    </section>

    <section title="Acknowledgements">
      <t>We would like to thank a large number of folk, including Mark
      Andrews, Joe Abley, Jaap Akkerhuis, Roy Arends, Doug Barton, Brian
      Dickson, Paul Ebersman, Tony Finch, Jim Galvin, Paul Hoffman, Samir
      Hussain, Tatuya Jinmei, Olaf Kolkman, Stephan Lagerholm, Cricket Liu,
      Matt Larson, Marco Sanz, Antoin Verschuren, Suzanne Woolf, Paul Wouters,
      John Dickinson, Timothe Litt, and Edward Lewis.</t>

      <t>Special thanks to Wes Hardaker for contributing significant text and
      creating the complementary (CSYNC) solution, and to Patrik Faltstrom,
      Paul Hoffman, Matthijs Mekking, Mukund Sivaraman, and Jeremy C.&nbsp;Reed for
      text and in-depth review. Brian Carpenter provided a good
      Gen&nbhy;ART review.</t>

      <t>There were a number of other folk with whom we discussed this
      document; 
      apologies for not remembering everyone.</t>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      &rfc2119;

      <?rfc include='reference.RFC.4033'?>

      <?rfc include='reference.RFC.1035'?>

      <?rfc include='reference.RFC.4034'?>

      <?rfc include='reference.RFC.4035'?>

      <?rfc include='reference.RFC.5011'?>

      <?rfc include='reference.RFC.6781'?>
    </references>

    <references title="Informative References">
      <?rfc include='reference.RFC.5730'?>

      <?rfc include='reference.RFC.5910'?>

<!-- draft-barwood-dnsop-ds-publish-02: I-D Expired -->
 
     <reference anchor="DNS-TRANSPORT">
        <front>
          <title>DNS Transport</title>

          <author fullname="G. Barwood" initials="G." surname="Barwood">
            <organization></organization>
          </author>

          <date month="June" year="2011" />
        </front>

        <seriesInfo name="Work in"
                    value="Progress" />
      </reference>

<!-- draft-mekking-dnsop-auto-cpsync-01: I-D Expired-->


      <reference anchor="AUTO-CPSYNC">
        <front>
          <title>Automated (DNSSEC) Child Parent Synchronization using DNS
          UPDATE</title>

          <author fullname="W. Meeking" initials="W." surname="Mekking">
            <organization>NLnet Labs</organization>
          </author>

          <date month="December" year="2010" />
        </front>

        <seriesInfo name="Work in"
                    value="Progress" />
      </reference>

<!--draft-ietf-dnsop-child-syncronization-02: I-D Exists 
Replaces draft-hardaker-dnsop-csync-02-->

<reference anchor='CPSYNC-DNS'>
<front>
<title>Child To Parent Synchronization in DNS</title>

<author initials='W' surname='Hardaker' fullname='Wesley Hardaker'>
    <organization />
</author>

<date month='July' year='2014' />
</front>

<seriesInfo name='Work in' value='Progress' />
</reference>

<!--draft-andrews-dnsop-update-parent-zones-04: I-D Expired-->

      <reference anchor="PARENT-ZONES">
        <front>
          <title>Updating Parent Zones</title>

          <author fullname="M. Andrews" initials="M." surname="Andrews">
            <organization>ISC</organization>
          </author>

          <date month="November" year="2013" />
        </front>

        <seriesInfo name="Work in"
                    value="Progress" />
      </reference>
    </references>

    <section anchor="RRR" title="RRR Background">
      <t>RRR is our shorthand for the Registry/Registrar/Registrant model of
      Parent-Child relationships.</t>

      <t>In the RRR world, the different parties are frequently from different
      organizations. In the single enterprise world, there are also
      organizational, geographical, and cultural separations that affect how
      information flows from a Child to the Parent.</t>

      <t>Due to the complexity of the different roles and interconnections,
      automation of delegation information has not yet occurred. There have
      been proposals to automate this, in order to improve the reliability of
      the DNS. These proposals have not gained enough traction to become
      standards.</t>

      <t>For example, in many of the TLD cases, there is the RRR model
      (Registry/Registrar/Registrant). The Registry operates DNS for the
      TLD, and the Registrars accept registrations and place information into the
      Registry's database. The Registrant only communicates with the
      Registrar; frequently, the Registry is not allowed to communicate with
      the Registrant. In that case, as far as the Registrant is concerned, the
      Registrar is the same entity as the Parent.</t>

      <t>In many RRR cases, the Registrar and Registry communicate via EPP <xref
      target="RFC5730"></xref> and use the EPP DNSSEC extension <xref
      target="RFC5910"></xref>. In a number of Country Code TLDs (ccTLDs), there are other
      mechanisms in use as well as EPP, but in general, there seems to be a
      movement towards EPP usage when DNSSEC is enabled in the TLD.</t>
    </section>

    <section anchor="DS-example" title="CDS Key Rollover Example">
      <t>This section shows an example on how CDS is used when performing a
      KSK rollover. This example will demonstrate the Double-DS rollover
      method from Section 4.1.2 of <xref target="RFC6781"></xref>. Other
      rollovers using CDNSKEY and double KSK are left as an exercise to the
      reader. The table below does not reflect the Zone Signing Keys (ZSKs) as they do not
      matter during KSK rollovers. The wait steps highlight what RRset
      needs to expire from caches before progressing to the next step.</t>

      <texttable anchor="Ex-init" title="States">
        <ttcol align="left">Step</ttcol>

        <ttcol align="left">State</ttcol>

        <ttcol align="center">Parent DS</ttcol>

        <ttcol align="center">Child KSK</ttcol>

        <ttcol align="center">DNSKEY and CDS signer</ttcol>

        <ttcol align="center">Child CDS</ttcol>

        <c></c>

        <c>Beginning</c>
        <c>A</c>
        <c>A</c>
        <c>A</c>
        <c></c>

        <c>1</c>
        <c>Add CDS</c>
        <c>A</c>
        <c>A</c>
        <c>A</c>
        <c>AB</c>

        <c>Wait</c>
        <c>for DS change</c>
        <c>A</c>
        <c>A</c>
        <c>A</c>
        <c>AB</c>
        <c>2</c>

        <c>Updated DS</c>
        <c>AB</c>
        <c>A</c>
        <c>A</c>
        <c>AB</c>

        <c>Wait</c>
        <c>&gt; DS TTL</c>
        <c>AB</c>
        <c>A</c>
        <c>A</c>
        <c>AB</c>

        <c>3</c>
        <c>Actual Rollover</c>
        <c>AB</c>
        <c>B</c>
        <c>B</c>
        <c>AB</c>

        <c>Wait</c>
        <c>&gt; DNSKEY TTL</c>
        <c>AB</c>
        <c>B</c>
        <c>B</c>
        <c>AB</c>

        <c>4</c>
        <c>Child Cleanup</c>
        <c>AB</c>
        <c>B</c>
        <c>B</c>
        <c>B</c>

        <c>5</c>
        <c>Parent cleans</c>
        <c>B</c>
        <c>B</c>
        <c>B</c>
        <c>B</c>

        <c>6</c>
        <c>Optional CDS delete</c>
        <c>B</c>
        <c>B</c>
        <c>B</c>
        <c></c>
      </texttable>
    </section>
  </back>
</rfc>
