eppext                                                         R. Gieben                                                        H. Ribbers
Internet-Draft                                                    Google                                              M. Groeneweg
Intended status: Standards Track                            M. Groeneweg                                    SIDN
Expires: July 12, November 1, 2015                                        H. Ribbers
                                                               SIDN Labs                                      R. Gieben

                                                           A. Verschuren

                                                         January 8,

                                                          April 30, 2015

       Key Relay Extension Mapping for the Extensible Provisioning Protocol
                     draft-ietf-eppext-keyrelay-01
                     draft-ietf-eppext-keyrelay-02

Abstract

   This document describes a generic an Extensible Provisioning Protocol (EPP) extension
   mapping for the purpose of relaying data between registrars.

   Furthermore, this document describes a specific implementation for
   relaying key relay object that relays DNSSEC key material
   between DNS operators (by means of their
   respective registrars), to EPP clients using the poll queue defined in [RFC5730].

   This key relay mapping will help facilitate changing the change of DNS operator, operator
   of a domain while keeping the DNSSEC chain of trust intact.

   This I-D introduces a new generic command <relay> and an element
   <relayData>.  For the specific implementation of relaying DNSSEC key
   material it introduces an extension of the <relayData> with a
   <keyRelayData> element.

Status of This Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at http://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on July 12, November 1, 2015.

Copyright Notice

   Copyright (c) 2015 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (http://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.

Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   3   2
     1.1.  Conventions Used in This Document . . . . . . . . . . . .   3
     1.2.  Relaying Data  Secure Transfer of DNSSEC Key Material  . . . . . . . . .   3
   2.  Object Attributes . . . . . . . . . . . . .   3
       1.2.1.  Rationale For a New Command . . . . . . . . .   4
     2.1.  DNSSEC Key Material . . . . . . . . . .   4
       1.2.2.  Extending <relayData> per use case . . . . . . . . .   4
     1.3.  Secure Transfer of DNSSEC Key Material
       2.1.1.  <keyRelayData> element  . . . . . . . . . . . .   4
   2.  Object Attributes . . .   4
   3.  EPP Command Mapping . . . . . . . . . . . . . . . . . . . . .   5
     2.1.  DNSSEC Key Material
     3.1.  EPP Query Commands  . . . . . . . . . . . . . . . . . . .   5
   3.
       3.1.1.  EPP <check> Command Mapping . . . . . . . . . . . . . . . . . . . . .   6
     3.1.   5
       3.1.2.  EPP Transient Commands <info> Command  . . . . . . . . . . . . . . . . .   6
       3.1.1.   5
       3.1.3.  EPP <relay> <transfer> Command  . . . . . . . . . . . . . . . . .   6   8
     3.2.  EPP Query Transform Commands  . . . . . . . . . . . . . . . . . . .   7   8
       3.2.1.  EPP <poll> command <create> Command  . . . . . . . . . . . . . . . .   8
       3.2.2.  EPP <delete> Command  .   7
   4.  Formal Syntax . . . . . . . . . . . . . . .  10
       3.2.3.  EPP <renew> Command . . . . . . . . .  10
     4.1.  Formal Syntax <relay> command and POLL response . . . . .  10
     4.2.  Formal Syntax <keyRelayData> data . . .  10
       3.2.4.  EPP <transfer> Command  . . . . . . . . .  11
   5.  IANA Considerations . . . . . .  10
       3.2.5.  EPP <update> Command  . . . . . . . . . . . . . . .  12
   6.  Security Considerations .  10
   4.  Formal Syntax . . . . . . . . . . . . . . . . . . .  12
   7.  References . . . . .  10
   5.  IANA Considerations . . . . . . . . . . . . . . . . . . . .  13
     7.1.  Normative References .  11
     5.1.  XML Namespace . . . . . . . . . . . . . . . . .  13
     7.2.  Informative References . . . . .  12
     5.2.  EPP Extension Registry  . . . . . . . . . . . .  13
   Appendix A.  Changelog . . . . .  12
   6.  Security Considerations . . . . . . . . . . . . . . . .  13
     A.1.  draft-gieben-epp-keyrelay-00 . . .  12
   7.  References  . . . . . . . . . . .  13
     A.2.  draft-gieben-epp-keyrelay-01 . . . . . . . . . . . . . .  13
     A.3.  draft-gieben-epp-keyrelay-02
     7.1.  Normative References  . . . . . . . . . . . . . .  14
     A.4.  draft-gieben-epp-keyrelay-03 . . . .  13
     7.2.  Informative References  . . . . . . . . . . . . . . . . .  13
   Appendix A.  Changelog  . . . . . . . . . . . . . . . . . . . . .  13
     A.1.  draft-gieben-epp-keyrelay-00  . . . . . . . . . . . . . .  13
     A.2.  draft-gieben-epp-keyrelay-01  . . . . . . . . . . . . . .  14
     A.3.  draft-gieben-epp-keyrelay-02  . . . . . . . . . . . . . .  14
     A.4.  draft-gieben-epp-keyrelay-03  . . . . . . . . . . . . . .  14
     A.5.  draft-ietf-eppext-keyrelay-00 . . . . . . . . . . . . . .  14
     A.6.  draft-ietf-eppext-keyrelay-01 . . . . . . . . . . . . . .  14
     A.7.  draft-ietf-eppext-keyrelay-02 . . . . . . . . . . . . . .  15
   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  15

1.  Introduction

   There are certain transactions in the lifecycle of initiated by a domain name,
   that DNS-operator, which
   require interaction an authenticated exchange of information between registrars but need registration
   data from the registry.  Since all registrars involved have a secure DNS-
   operators.  Often, there is no direct channel to the registry for maintaining the delegation, the registry
   can act as relay for such data to transfer securely and authoritative between the registrars involved.

   Currently these transactions aren't supported in the Extensible
   Provisioning Protocol (EPP) [RFC5730]. parties
   or it is non-scalable and insecure.

   One example of such a transaction is the exchange of DNSSEC key material to keep when
   changing the DNS operator for DNSSEC
   chain of trust intact in case of a change of DNS-operator.

   In this document we will define:

   o  A protocol extension signed zones.  We suggest that implements the relaying of data between
      registrars through
   DNS-operators use the existing authenticated EPP channel.  This
      protocol extension introduces a new administrative EPP command called <relay>
      with an element <relayData>.

   o  An extension channel to bootstrap the <relayData> element called <keyRelayData> that
      can be used for the
   delegation by relaying DNSSEC key material using for the <relay>
      command. zone.

   In this document we define an EPP extension to support and automate
   this transaction.

1.1.  Conventions Used in This Document

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in BCP 14, RFC 2119
   [RFC2119].

   XML is case sensitive.  Unless stated otherwise, XML specifications
   and examples provided in this document MUST be interpreted in the
   character case presented in order to develop a conforming
   implementation.

   In examples, "C:" represents lines sent by a protocol client, and
   "S:" represents lines returned by a protocol server.  Indentation and
   white space in examples is provided only to illustrate element
   relationships and is not a mandatory feature of this protocol.

1.2.  Relaying Data

   The <relay> command uses the existing authenticated EPP channel
   between the registrar and the registry.  Registrars can use this
   secure channel for relaying data to other registrars.  The registry
   serves as an intermediary between two registrars (see Figure 1).

                  +-------------+  relayData  +-------------+
                  | registrar X |~~~~~~~~~~~~>| registrar Y |
                  +-------------+             +-------------+
                         |                           ^
                         | EPP relay        EPP poll |
                         v                           |
                        +-----------------------------+
                        |           registry          |
                        +-----------------------------+

   Figure 1: Registry acting as a relay for secure data exchange between
                                registrars.

   The <relay> command uploads data from a registrar X to the registry.
   The uploaded data is then pushed onto the message queue of registrar
   Y by the registry based on the information within the <relayData>
   element of the <relay> command and the registration data maintained
   by the registry.

   The data to be relayed MUST relate to registration data of the
   registry.  The <relay> command is not intended to relay data that has
   no relationship to registration data.  We have e-mail for that.

   If for some reason the registry cannot process the <relay> command,
   an EPP error response MUST be returned.  If the registry does process
   the <relay> command it MUST put all elements of <relayData> on to the
   message queue of registrar Y.

1.2.1.  Rationale For a New Command

   This new <relay> command can be best described as a "transient
   command" as it only facilitates communication of data between two
   registrars without changing the registration data at the registry.
   No existing EPP command can be (re)used for this function.  This
   extension of EPP is in accordance to [RFC3735].

1.2.2.  Extending <relayData> per use case

   One MUST extend the <relayData> element per use case to define the
   data to be relayed.  In the extension, one MUST make provisions for
   the registry how to determine the receiving registrar of the <relay>
   command.

1.3.  Secure Transfer of DNSSEC Key Material

   Exchanging DNSSEC key material in preparation of a domain name
   transfer is one of the phases in the lifecycle of a domain name
   [I-D.koch-dnsop-dnssec-operator-change].

   DNS-operators need to exchange (through the gaining registrar) DNSSEC key material before the
   registration data can be changed.

           +--------------------+  DNSKEY   +---------------------+
           |gaining DNS operator| ~~~~~~~~> | losing DNS operator |
           +--------------------+           +---------------------+
                          |                   ^
                          |                   |
                          V                   |
           +--------------------+         +---------------------+
           |  gaining registrar |         | registrar of record |
           +--------------------+         +---------------------+
                          |                   ^
                EPP relay |                   | EPP poll
                          V                   |
                     +-----------------------------+
                     |           registry          |
                     +-----------------------------+

                Figure 2: Transfer of DNSSEC key material.

   As the <relay> command uses a secure channel, it can be used as a
   method for exchanging this DNSSEC key material securely (see
   Figure 2).

   The gaining and changed to keep the DNSSEC chain of trust
   intact.  This exchange is normally initiated through the gaining
   registrar.

   The gaining and losing DNS operators could talk directly to each
   other (the ~ arrow) to exchange the DNSKEY, but often there is no
   trusted path between the two.  As both can securely interact with the
   registry over the administrative channel through the registrar, the
   registry can act as a relay for the key material exchange.

   This I-D contains an extension

           +--------------------+  DNSKEY   +---------------------+
           |gaining DNS operator| ~~~~~~~~> | losing DNS operator |
           +--------------------+           +---------------------+
                          |                   ^
                          |                   |
                          V                   |
           +--------------------+         +---------------------+
           |  gaining registrar |         | registrar of record |
           +--------------------+         +---------------------+
                          |                   ^
             EPP keyrelay |                   | EPP poll
                          V                   |
                     +-----------------------------+
                     |           registry          |
                     +-----------------------------+

                Figure 1: Transfer of DNSSEC key material.

   There is no clear distinction in the <relayData> element EPP protocol between Registrars
   and DNS-operators.  Therefore the term EPP client will be used for this
   use case.
   the interaction with the registry for relaying DNSSEC key material.

2.  Object Attributes

2.1.  DNSSEC Key Material

   To transfer

   The DNSSEC key material with the <relay> command the generic
   <relayData> is extended with represented in EPP by a <keyRelayData> element
   element.

   It is up to the gaining EPP client to select the keys that contains are needed
   to complete the data for relaying intended transaction successfully.  It is up to the
   receiving EPP client to validate the correctness of the key material.  See Section 1.2.2.

   This <keyRelayData> element REQUIRES
   The server is merely used as a minimum of three child
   elements:

   o  A <name> relay channel.

2.1.1.  <keyRelayData> element which contains the domain name for which we
      upload the key.

   The registry MUST relay the <keyRelayData> to the
      registrar of record of contains the provided domain name. following elements:

   o  One or more REQUIRED <keyData> elements that contains the DNSSEC
      key material as described in [RFC5910], Section 4.2.

   o  An  A REQUIRED <authInfo> element that contains an authorization token
      information associated with the domain object ([RFC5731],
      Section 3.2.1).  This indicates

   o  An OPTIONAL <expiry> element that describes the registrar has
      authorization from the registrant to change the zone data, and a
      possible future transfer is authorized.  The registry MAY check if
      the <authInfo> data is correct and if it does, it MUST return an
      EPP error response if the authorization token is not correct.

   And an OPTIONAL <expiry> child element.

   o  An <expiry> element that describes the expected lifetime of expected lifetime
      of the relayed key(s) in the zone.  The losing DNS operator can
      use this as an indication when to safely remove the inserted key
      material from the zone.  This may be because the transaction that
      needed the insertion is either completed or has been abandoned if
      not completed before this expire time.  The <expiry> element MUST
      contain one of the following child elements:

      *  <absolute/>:  <absolute>: The policy is valid from the current date and time
         until it expires on the specified date and time.

      *  <relative/>:  <relative>: The policy is valid from the current date and time
         until the end of the specified duration.

3.  EPP Command Mapping

   A detailed description of the EPP syntax and semantics can be found
   in the EPP core protocol specification [RFC5730].  The command
   mapping described here is specifically for use in this key relay
   mapping.

3.1.  EPP Transient Query Commands

   EPP provides three commands to retrieve object information: <check>
   to determine if an object is known to the server, <info> to retrieve
   detailed information associated with an object, and <transfer> to
   retrieve object transfer status information.

3.1.1.  EPP <relay> <check> Command

   The

   Check semantics do not apply to key relay objects, so there is no
   mapping defined for the EPP <relay> <check> command is a generic and the EPP <check>
   response.

3.1.2.  EPP <info> Command

   Info command used semantics do not apply to the key relay objects, so
   there is no mapping defined for relaying
   data between registrars.  It contains the data to be relayed and EPP <info> Command.

   The EPP <info> response for key relay objects is used in the EPP poll
   response, as described in [RFC5730].  The key relay object created
   with the <create> command, described in Section 3.2.1 is inserted
   into the receiving client's poll queue.  The receiving client transaction identifier.  It will
   receive the key relay object using the EPP <poll> command, as
   described in [RFC5730].

   When a <poll> command has been designed to be extensible processed successfully for usage in other use-cases. a key relay
   poll message, the EPP <resData> element MUST contain a child
   <keyrelay:infData> element that identifies the keyrelay namespace.
   The <relay> command REQUIRES <keyrelay:infData> element contains the following child elements:

   o  One or more <relayData> A REQUIRED <name> element containing the domain name for which the
   DNSSEC key material is relayed.

   o A REQUIRED <keyRelayData> elements containing data to be relayed. relayed,
   as defined in Section 2.1

   o An OPTIONAL <clTRID> (client transaction identifier) <keyrelay:crDate> element that
      MAY be used to uniquely identify contains the command to the registrar.
      See [RFC5730], Section 2.5.

   Example <relay> command:

 C:<?xml version="1.0" encoding=:UTF-8" standalone="no"?>
 C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
 C:    xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1"
 C:    xmlns:domain="urn:ietf:params:xml:ns:domain-1.0"
 C:    xmlns:r="urn:ietf:params:xml:ns:relay-1.0">
 C:    <extension>
 C:        <r:relay xmlns:r="urn:ietf:params:xml:ns:relay-1.0">
 C:            <r:relayData>
 C:                    <k:keyRelayData
 C:                       xmlns:k="urn:ietf:params:xml:ns:keyrelay-1.0">
 C:                       <k:name>example.org</k:name>
 C:                       <k:keyData>
 C:                            <secDNS:flags>256</secDNS:flags>
 C:                            <secDNS:protocol>3</secDNS:protocol>
 C:                            <secDNS:alg>8</secDNS:alg>
 C:                            <secDNS:pubKey>
 C:                                cmlraXN0aGViZXN0</secDNS:pubKey>
 C:                        </k:keyData>
 C:                        <k:authInfo>
 C:                            <domain:pw>JnSdBAZSxxzJ</domain:pw>
 C:                        </k:authInfo>
 C:                        <k:expiry>
 C:                            <k:relative>P1M13D</k:relative>
 C:                        </k:expiry>
 C:                    </k:keyRelayData>
 C:             </r:relayData>
 C:            <r:clTRID>ABC-12345</r:clTRID>
 C:        </r:relay>
 C:    </extension>
 C:</epp>

3.2.  EPP Query Commands

   This EPP extension does not change any command other than the EPP
   <poll> command response.

3.2.1.  EPP <poll> command

   This extension adds elements to the response to a <poll> command with
   the "op" attribute set to "req".  Specifically, a <panData> element
   is added to the <resData> section of the service message, containing
   the following elements:

   o  A REQUIRED <relayData> element that contains the relayed data.

   o  A REQUIRED <paDate> element that contains the date and time of date and
   time of the submitted <relay> <create> command.

   o  A REQUIRED <reID> An OPTIONAL <keyrelay:reID> element that contains the identifier of
   the
      registrar client that requested the data key relay.

   o  A REQUIRED <acID> An OPTIONAL <keyrelay:acID> element that contains the identifier of
   the
      registrar client that SHOULD act upon the data key relay.

   Example <poll> response:

   S:<?xml version="1.0" encoding=:UTF-8" encoding="UTF-8" standalone="no"?>
   S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
   S:    xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1"     xmlns:keyrelay="urn:ietf:params:xml:ns:keyrelay-1.0"
   S:    xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">     xmlns:s="urn:ietf:params:xml:ns:secDNS-1.1"
   S:   xmlns:d="urn:ietf:params:xml:ns:domain-1.0">
   S:  <response>
   S:    <result code="1301">
   S:      <msg>Command completed successfully; ack to dequeue</msg>
   S:    </result>
   S:    <msgQ count="5" id="12345">
   S:      <qDate>1999-04-04T22:01:00.0Z</qDate>
   S:            <msg>Relay      <msg>Keyrelay action completed successfully.</msg>
   S:    </msgQ>
   S:    <resData>
   S:            <r:panData xmlns:r="urn:ietf:params:xml:ns:relay-1.0">      <keyrelay:infData>
   S:        <keyrelay:name>example.org</keyrelay:name>
   S:                <r:relayData>        <keyrelay:keyRelayData>
   S:                    <k:keyRelayData          <keyrelay:keyData>
   S:                       xmlns:k="urn:ietf:params:xml:ns:keyrelay-1.0">            <s:flags>256</s:flags>
   S:                       <k:name>example.org</k:name>            <s:protocol>3</s:protocol>
   S:                       <k:keyData>            <s:alg>8</s:alg>
   S:                            <secDNS:flags>256</secDNS:flags>            <s:pubKey>cmlraXN0aGViZXN0</s:pubKey>
   S:                            <secDNS:protocol>3</secDNS:protocol>          </keyrelay:keyData>
   S:                            <secDNS:alg>8</secDNS:alg>          <keyrelay:authInfo>
   S:                            <secDNS:pubKey>            <d:pw>JnSdBAZSxxzJ</d:pw>
   S:                                cmlraXN0aGViZXN0</secDNS:pubKey>          </keyrelay:authInfo>
   S:                        </k:keyData>          <keyrelay:expiry>
   S:                        <k:authInfo>            <keyrelay:relative>P1M13D</keyrelay:relative>
   S:                            <domain:pw>JnSdBAZSxxzJ</domain:pw>          </keyrelay:expiry>
   S:                        </k:authInfo>        </keyrelay:keyRelayData>
   S:                        <k:expiry>        <keyrelay:crDate>
   S:                            <k:relative>P1M13D</k:relative>          1999-04-04T22:01:00.0Z
   S:                        </k:expiry>        </keyrelay:crDate>
   S:                    </k:keyRelayData>        <keyrelay:reID>
   S:                </r:relayData>          ClientX
   S:                <r:paDate>1999-04-04T22:01:00.0Z</r:paDate>        </keyrelay:reID>
   S:                <r:reID>ClientX</r:reID>        <keyrelay:acID>
   S:                <r:acID>ClientY</r:acID>          ClientY
   S:            </r:panData>        </keyrelay:acID>
   S:      </keyrelay:infData>
   S:    </resData>
   S:    <trID>
   S:      <clTRID>BCD-23456</clTRID>
   S:      <svTRID>65432-WXY</svTRID>
   S:    </trID>
   S:  </response>
   S:</epp>

4.  Formal Syntax

4.1.  Formal Syntax <relay>

3.1.3.  EPP <transfer> Command

   Transfer semantics do not apply to key relay objects, so there is no
   mapping defined for the EPP <transfer> command.

3.2.  EPP Transform Commands

   EPP provides five commands to transform objects: <create> to create
   an instance of an object, <delete> to delete an instance of an
   object, <renew> to extend the validity period of an object,
   <transfer> to manage object sponsorship changes, and <update> to
   change information associated with an object.

3.2.1.  EPP <create> Command

   The EPP <create> command provides a transform operation that allows a
   client to create a key relay object that includes the domain name and POLL
   DNSSEC key material to be relayed.  When the <create> command is
   validated, the server MUST insert an EPP <poll> message, using the
   key relay info response

   <?xml (See Section 3.1.2), in the receiving
   client's poll queue that belongs to the registrar on record of the
   provided domain name.

   In addition to the standard EPP command elements, the <create>
   command MUST contain a <keyrelay:create> element that identifies the
   keyrelay namespace.  The <keyrelay:create> element contains the
   following child elements:

   o A REQUIRED <keyrelay:name> element containing the domain name for
   which the DNSSEC key material is relayed.

   o A REQUIRED <keyrelay:keyRelayData> elements containing data to be
   relayed, as defined in Section 2.1

   Example <create> command:

   C:<?xml version="1.0" encoding="UTF-8"?>
   <schema targetNamespace="urn:ietf:params:xml:ns:relay-1.0"
       xmlns:r="urn:ietf:params:xml:ns:relay-1.0"
       xmlns:epp="urn:ietf:params:xml:ns:epp-1.0"
       xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0"
       xmlns="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified">

       <annotation>
           <documentation>
               Extensible Provisioning Protocol v1.0 protocol
               extension schema encoding="UTF-8" standalone="no"?>
   C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
   C:     xmlns:keyrelay="urn:ietf:params:xml:ns:keyrelay-1.0"
   C:     xmlns:s="urn:ietf:params:xml:ns:secDNS-1.1"
   C:   xmlns:d="urn:ietf:params:xml:ns:domain-1.0">
   C:  <command>
   C:    <create>
   C:      <keyrelay:create>
   C:        <keyrelay:name>example.org</keyrelay:name>
   C:        <keyrelay:keyRelayData>
   C:          <keyrelay:keyData>
   C:            <s:flags>256</s:flags>
   C:            <s:protocol>3</s:protocol>
   C:            <s:alg>8</s:alg>
   C:            <s:pubKey>cmlraXN0aGViZXN0</s:pubKey>
   C:          </keyrelay:keyData>
   C:          <keyrelay:authInfo>
   C:            <d:pw>JnSdBAZSxxzJ</d:pw>
   C:          </keyrelay:authInfo>
   C:          <keyrelay:expiry>
   C:            <keyrelay:relative>P1M13D</keyrelay:relative>
   C:          </keyrelay:expiry>
   C:        </keyrelay:keyRelayData>
   C:      </keyrelay:create>
   C:    </create>
   C:    <clTRID>123456</clTRID>
   C:  </command>
   C:</epp>

   When a server has succesfully processed the <create> command it MUST
   respond with a standard EPP response.  See [RFC5730], Section 2.6.

   Example <create> response:

   S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
   S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
   S:  <response>
   S:    <result code="1000">
   S:      <msg>Command completed successfully</msg>
   S:    </result>
   S:    <trID>
   S:       <clTRID>ABC-12345</clTRID>
   S:       <svTRID>54321-ZYX</svTRID>
   S:    </trID>
   S:  </response>
   S:</epp>

3.2.2.  EPP <delete> Command

   Delete semantics do not apply to key relay objects, so there is no
   mapping defined for relaying data.
           </documentation>
       </annotation>

       <import namespace="urn:ietf:params:xml:ns:epp-1.0"
           schemaLocation="epp-1.0.xsd" />
       <import namespace="urn:ietf:params:xml:ns:eppcom-1.0"
           schemaLocation="eppcom-1.0.xsd" />

       <element name="relay" type="r:relayDataType" />
       <element name="panData" type="r:relayPanDataType" />

       <complexType name="relayDataType">
           <sequence>
               <element name="relayData" type="epp:extAnyType" />
               <element name="clTRID" type="epp:trIDStringType"
                   minOccurs="0" />
           </sequence>
       </complexType>

       <complexType name="relayPanDataType">
           <sequence>
               <element name="relayData" type="epp:extAnyType" />
               <element name="paDate" type="dateTime" />
               <element name="reID" type="eppcom:clIDType" />
               <element name="acID" type="eppcom:clIDType" />
           </sequence>
       </complexType>
   </schema>

4.2. the EPP <delete> command and the EPP <delete>
   response.

3.2.3.  EPP <renew> Command

   Renew semantics do not apply to key relay objects, so there is no
   mapping defined for the EPP <renew> command and the EPP <renew>
   response.

3.2.4.  EPP <transfer> Command

   Transfer semantics do not apply to key relay objects, so there is no
   mapping defined for the EPP <transfer> command and the EPP <transfer>
   response.

3.2.5.  EPP <update> Command

   Update semantics do not apply to key relay objects, so there is no
   mapping defined for the EPP <update> command and the EPP <update>
   response.

4.  Formal Syntax <keyRelayData> data

<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="urn:ietf:params:xml:ns:keyrelay-1.0"
       xmlns:k="urn:ietf:params:xml:ns:keyrelay-1.0"
  xmlns:keyrelay="urn:ietf:params:xml:ns:keyrelay-1.0"
  xmlns:epp="urn:ietf:params:xml:ns:epp-1.0"
  xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0"
  xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1"
  xmlns:domain="urn:ietf:params:xml:ns:domain-1.0"
  xmlns="http://www.w3.org/2001/XMLSchema"
  elementFormDefault="qualified">

  <annotation>
    <documentation>
      Extensible Provisioning Protocol v1.0 protocol
      extension schema for relaying DNSSEC key data. material.
    </documentation>
  </annotation>

  <import namespace="urn:ietf:params:xml:ns:epp-1.0"
    schemaLocation="epp-1.0.xsd" />
  <import namespace="urn:ietf:params:xml:ns:eppcom-1.0"
    schemaLocation="eppcom-1.0.xsd" />
  <import namespace="urn:ietf:params:xml:ns:secDNS-1.1"
    schemaLocation="secdns-1.1.xsd" />
  <import namespace="urn:ietf:params:xml:ns:domain-1.0"
    schemaLocation="domain-1.0.xsd" />

  <element name="keyRelayData" type="k:keyRelayDataType" type="keyrelay:keyRelayDataType" />
  <element name="infData" type="keyrelay:infDataType" />
  <element name="create" type="keyrelay:createType" />

  <complexType name="keyRelayDataType"> name="createType">
    <sequence>
      <element name="name" type="eppcom:labelType" />
      <element name="keyRelayData" type="keyrelay:keyRelayDataType"
        minOccurs="1" />
    </sequence>
  </complexType>

  <complexType name="infDataType">
    <sequence>
      <element name="name" type="eppcom:labelType" minOccurs="1" />
      <element name="keyRelayData" type="keyrelay:keyRelayDataType"
          minOccurs="1" />
      <element name="crDate" type="dateTime"/>
      <element name="reID" type="eppcom:clIDType" />
      <element name="acID" type="eppcom:clIDType" />
    </sequence>
  </complexType>

  <complexType name="keyRelayDataType">
    <sequence>
      <element name="keyData" type="secDNS:keyDataType" minOccurs="1"
        maxOccurs="unbounded" />
      <element name="authInfo" type="domain:authInfoType" />
      <element name="expiry" type="k:keyRelayExpiryType" type="keyrelay:keyRelayExpiryType" minOccurs="0" />
    </sequence>
  </complexType>
  <complexType name="keyRelayExpiryType">
    <choice>
      <element name="absolute" type="dateTime" />
      <element name="relative" type="duration" />
    </choice>
  </complexType>
</schema>

5.  IANA Considerations
5.1.  XML Namespace

   This document uses URNs to describe XML namespaces and XML schemas
   conforming to a registry mechanism described in RFC3688 [RFC3688].

   Four  The
   following URI assignments must be completed by the IANA.

   Registration request for the extension namespaces: assignment is requested of IANA:

   URI: urn:ietf:params:xml:ns:keyrelay-1.0
   URI: urn:ietf:params:xml:ns:relay-1.0

   Registrant Contact: IESG

   XML: None.  Namespace URIs do not represent an XML specification.

   Registration request for See the extension XML schemas:

   URI: urn:ietf:params:xml:schema:keyrelay-1.0
   URI: urn:ietf:params:xml:schema:relay-1.0

   Registrant Contact: IESG "Author's Address" section of this
   document.

   XML: See the "Formal Syntax" section of this document.

5.2.  EPP Extension Registry

   The EPP extension described in this document should be registered by
   the IANA in the EPP Extension Registry described in [RFC7451].  The
   details of the registration are as follows:

   Name of Extension: "Keyrelay Extension for the Extensible
   Provisioning Protocol"

   Document status: Standards Track

   Reference: (insert reference to RFC version of this document)

   Registrant Name and Email Address: IESG, iesg@ietf.org

   TLDs: Any

   IPR Disclosure: https://datatracker.ietf.org/ipr/2393/

   Status: Active

   Notes: None

6.  Security Considerations

   A registry MUST server SHOULD NOT perform any transformation on registration data under registry server
   management when processing a <relay> <keyrelay:create> command.

   Any registrar EPP client can use this mechanism to put data on the message
   queue of another registrar, EPP client, allowing for the potential of a denial
   of service attack.  However this can, and SHOULD be detected by the
   registry.
   server.  A registry server MAY set a server policy which limits or rejects
   <relay> messages a
   <keyrelay:create> command if it detects the mechanism is being
   abused.

   For the <keyRelayData> <keyrelay:keyRelayData> data a correct <authInfo> <domain:authInfo>
   element SHOULD be used as an indication that putting the key material
   on the
   registrar's message receiving EPP clients poll queue is authorized by the
   _registrant_ of that domain name.  This draft does not specify how this <authInfo> is
   provided to the registrar.  This depends on how the DNS operator is
   authorised  The authorization of EPP clients
   to perform DNS changes on behalf of the registrant through
   the registrar on record.  This authorisation is not covered in this
   I-D. I-D as it depends on
   registry specific policy.

7.  References

7.1.  Normative References

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119, March 1997.

   [RFC3688]  Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
              January 2004.

   [RFC4034]  Arends, R., Austein, R., Larson, M., Massey, D., and S.
              Rose, "Resource Records for the DNS Security Extensions",
              RFC 4034, March 2005.

   [RFC5730]  Hollenbeck, S., "Extensible Provisioning Protocol (EPP)",
              STD 69, RFC 5730, August 2009.

   [RFC5731]  Hollenbeck, S., "Extensible Provisioning Protocol (EPP)
              Domain Name Mapping", STD 69, RFC 5731, August 2009.

   [RFC5910]  Gould, J. and S. Hollenbeck, "Domain Name System (DNS)
              Security Extensions Mapping for the Extensible
              Provisioning Protocol (EPP)", RFC 5910, May 2010.

   [RFC7451]  Hollenbeck, S., "Extension Registry for the Extensible
              Provisioning Protocol", RFC 7451, February 2015.

7.2.  Informative References

   [I-D.koch-dnsop-dnssec-operator-change]
              Koch, P., Sanz, M., and A. Verschuren, "Changing DNS
              Operators for DNSSEC signed Zones", draft-koch-dnsop-
              dnssec-operator-change-06 (work in progress), February
              2014.

   [RFC3735]  Hollenbeck, S., "Guidelines for Extending the Extensible
              Provisioning Protocol (EPP)", RFC 3735, March 2004.

Appendix A.  Changelog

   [This section should be removed by the RFC editor before publishing]

A.1.  draft-gieben-epp-keyrelay-00

   1.  Initial document.

A.2.  draft-gieben-epp-keyrelay-01

   1.  Style and grammar changes;

   2.  Added an expire element as per suggestion by Klaus Malorny;

   3.  Make the authInfo element mandatory and make the registry check
       it as per feedback by Klaus Malorny and James Gould.

A.3.  draft-gieben-epp-keyrelay-02

   1.  Added element to identify the relaying EPP client as suggested by
       Klaus Malorny;

   2.  Corrected XML for missing and excess clTRID as noted by Patrick
       Mevzek;

   3.  Added clarifications for the examples based on feedback by
       Patrick Mevzeck;

   4.  Reviewed the consistency of using DNS operator versus registrar
       after review comments by Patrick Faltstrom and Ed Lewis.

A.4.  draft-gieben-epp-keyrelay-03

   1.  Style and grammar changes

   2.  Corrected acknowledgement section

   3.  Corrected XML for Expire element to not be mandatory but only
       occur once.

A.5.  draft-ietf-eppext-keyrelay-00

   1.  Added feedback from Seth Goldman and put him in the
       acknowledgement section.

   2.  IDnits formatting ajustments

A.6.  draft-ietf-eppext-keyrelay-01

   1.  Introducing the <relay> command, and thus seperating separating the data and
       the command.

   2.  Updated the Introduction, describing the general use of relay vs
       the intended use-case of relaying DNSSEC key data.

   3.  Restructuring the document to make it more inline with exisiting existing
       EPP extensions.

A.7.  draft-ietf-eppext-keyrelay-02

   1.  Updated the XML structure based on WG feedback

   2.  Updated the wording

Authors' Addresses

   Miek Gieben
   Google

   Email: miek@google.com

   Marc Groeneweg

   Rik Ribbers
   SIDN Labs
   Meander 501
   Arnhem  6825 MD
   NL

   Email: marc.groeneweg@sidn.nl rik.ribbers@sidn.nl
   URI:   https://www.sidn.nl/

   Rik Ribbers

   Marc Groeneweg
   SIDN Labs
   Meander 501
   Arnhem  6825 MD
   NL

   Email: rik.ribbers@sidn.nl marc.groeneweg@sidn.nl
   URI:   https://www.sidn.nl/

   Miek Gieben

   Email: miek@miek.nl

   Antoin Verschuren

   Email: ietf@antoin.nl