rfc9154.original | rfc9154.txt | |||
---|---|---|---|---|
Network Working Group J. Gould | Internet Engineering Task Force (IETF) J. Gould | |||
Internet-Draft R. Wilhelm | Request for Comments: 9154 R. Wilhelm | |||
Intended status: Standards Track VeriSign, Inc. | Category: Standards Track Verisign, Inc. | |||
Expires: 30 December 2021 28 June 2021 | ISSN: 2070-1721 December 2021 | |||
Extensible Provisioning Protocol (EPP) Secure Authorization Information | Extensible Provisioning Protocol (EPP) Secure Authorization Information | |||
for Transfer | for Transfer | |||
draft-ietf-regext-secure-authinfo-transfer-07 | ||||
Abstract | Abstract | |||
The Extensible Provisioning Protocol (EPP), in RFC 5730, defines the | The Extensible Provisioning Protocol (EPP) (RFC 5730) defines the use | |||
use of authorization information to authorize a transfer of an EPP | of authorization information to authorize a transfer of an EPP | |||
object, such as a domain name, between clients that are referred to | object, such as a domain name, between clients that are referred to | |||
as registrars. Object-specific, password-based authorization | as "registrars". Object-specific, password-based authorization | |||
information (see RFC 5731 and RFC 5733) is commonly used, but raises | information (see RFCs 5731 and 5733) is commonly used but raises | |||
issues related to the security, complexity, storage, and lifetime of | issues related to the security, complexity, storage, and lifetime of | |||
authentication information. This document defines an operational | authentication information. This document defines an operational | |||
practice, using the EPP RFCs, that leverages the use of strong random | practice, using the EPP RFCs, that leverages the use of strong random | |||
authorization information values that are short-lived, not stored by | authorization information values that are short lived, not stored by | |||
the client, and stored by the server using a cryptographic hash that | the client, and stored by the server using a cryptographic hash that | |||
provides for secure authorization information that can safely be used | provides for secure authorization information that can safely be used | |||
for object transfers. | for object transfers. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
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 https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on 30 December 2021. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9154. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2021 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Simplified BSD License text | to this document. Code Components extracted from this document must | |||
as described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Simplified BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
1.1. Conventions Used in This Document . . . . . . . . . . . . 4 | 1.1. Conventions Used in This Document | |||
2. Registrant, Registrar, Registry . . . . . . . . . . . . . . . 5 | 2. Registrant, Registrar, Registry | |||
3. Signaling Client and Server Support . . . . . . . . . . . . . 6 | 3. Signaling Client and Server Support | |||
4. Secure Authorization Information . . . . . . . . . . . . . . 7 | 4. Secure Authorization Information | |||
4.1. Secure Random Authorization Information . . . . . . . . . 7 | 4.1. Secure Random Authorization Information | |||
4.2. Authorization Information Time-To-Live (TTL) . . . . . . 8 | 4.2. Authorization Information Time To Live (TTL) | |||
4.3. Authorization Information Storage and Transport . . . . . 8 | 4.3. Authorization Information Storage and Transport | |||
4.4. Authorization Information Matching . . . . . . . . . . . 9 | 4.4. Authorization Information Matching | |||
5. Create, Transfer, and Secure Authorization Information . . . 10 | 5. Create, Transfer, and Secure Authorization Information | |||
5.1. Create Command . . . . . . . . . . . . . . . . . . . . . 10 | 5.1. <Create> Command | |||
5.2. Update Command . . . . . . . . . . . . . . . . . . . . . 12 | 5.2. <Update> Command | |||
5.3. Info Command and Response . . . . . . . . . . . . . . . . 15 | 5.3. <Info> Command and Response | |||
5.4. Transfer Request Command . . . . . . . . . . . . . . . . 17 | 5.4. <Transfer> Request Command | |||
6. Transition Considerations . . . . . . . . . . . . . . . . . . 18 | 6. Transition Considerations | |||
6.1. Transition Phase 1 - Features . . . . . . . . . . . . . . 20 | 6.1. Transition Phase 1 - Features | |||
6.2. Transition Phase 2 - Storage . . . . . . . . . . . . . . 21 | 6.2. Transition Phase 2 - Storage | |||
6.3. Transition Phase 3 - Enforcement . . . . . . . . . . . . 21 | 6.3. Transition Phase 3 - Enforcement | |||
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 21 | 7. IANA Considerations | |||
7.1. XML Namespace . . . . . . . . . . . . . . . . . . . . . . 21 | 7.1. XML Namespace | |||
7.2. EPP Extension Registry . . . . . . . . . . . . . . . . . 22 | 7.2. EPP Extension Registry | |||
8. Implementation Status . . . . . . . . . . . . . . . . . . . . 22 | 8. Security Considerations | |||
8.1. Verisign EPP SDK . . . . . . . . . . . . . . . . . . . . 23 | 9. References | |||
8.2. RegistryEngine EPP Service . . . . . . . . . . . . . . . 23 | 9.1. Normative References | |||
9. Security Considerations . . . . . . . . . . . . . . . . . . . 24 | 9.2. Informative References | |||
10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 24 | Acknowledgements | |||
11. References . . . . . . . . . . . . . . . . . . . . . . . . . 24 | Authors' Addresses | |||
11.1. Normative References . . . . . . . . . . . . . . . . . . 24 | ||||
11.2. Informative References . . . . . . . . . . . . . . . . . 25 | ||||
Appendix A. Change History . . . . . . . . . . . . . . . . . . . 26 | ||||
A.1. Change from 00 to 01 . . . . . . . . . . . . . . . . . . 26 | ||||
A.2. Change from 01 to 02 . . . . . . . . . . . . . . . . . . 26 | ||||
A.3. Change from 02 to 03 . . . . . . . . . . . . . . . . . . 26 | ||||
A.4. Change from 03 to REGEXT 00 . . . . . . . . . . . . . . . 28 | ||||
A.5. Change from REGEXT 00 to REGEXT 01 . . . . . . . . . . . 28 | ||||
A.6. Change from REGEXT 01 to REGEXT 02 . . . . . . . . . . . 28 | ||||
A.7. Change from REGEXT 02 to REGEXT 03 . . . . . . . . . . . 28 | ||||
A.8. Change from REGEXT 03 to REGEXT 04 . . . . . . . . . . . 28 | ||||
A.9. Change from REGEXT 04 to REGEXT 05 . . . . . . . . . . . 28 | ||||
A.10. Change from REGEXT 05 to REGEXT 06 . . . . . . . . . . . 29 | ||||
A.11. Change from REGEXT 06 to REGEXT 07 . . . . . . . . . . . 29 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 31 | ||||
1. Introduction | 1. Introduction | |||
The Extensible Provisioning Protocol (EPP), in [RFC5730], defines the | The Extensible Provisioning Protocol (EPP) [RFC5730] defines the use | |||
use of authorization information to authorize a transfer of an EPP | of authorization information to authorize a transfer of an EPP | |||
object, such as a domain name, between clients that are referred to | object, such as a domain name, between clients that are referred to | |||
as registrars. The authorization information is object-specific and | as "registrars". The authorization information is object specific | |||
has been defined in the EPP Domain Name Mapping, in [RFC5731], and | and has been defined in "Extensible Provisioning Protocol (EPP) | |||
the EPP Contact Mapping, in [RFC5733], as password-based | Domain Name Mapping" [RFC5731] and "Extensible Provisioning Protocol | |||
authorization information. Other authorization mechanisms can be | (EPP) Contact Mapping" [RFC5733] as password-based authorization | |||
used, but in practice the password-based authorization information | information. Other authorization mechanisms can be used, but in | |||
has been used at the time of object create, managed with the object | practice the password-based authorization information has been used | |||
update, and used to authorize an object transfer request. What has | at the time of object creation, managed with the object update, and | |||
not been considered is the security of the authorization information | used to authorize an object transfer request. What has not been | |||
that includes the complexity of the authorization information, the | considered is the security of the authorization information, which | |||
time-to-live (TTL) of the authorization information, and where and | includes the complexity of the authorization information, the Time To | |||
how the authorization information is stored. | Live (TTL) of the authorization information, and where and how the | |||
authorization information is stored. | ||||
The current/original lifecycle for authorization information involves | The current/original lifecycle for authorization information involves | |||
long-term storage of encrypted (not hashed) passwords, which presents | long-term storage of encrypted (not hashed) passwords, which presents | |||
a significant latent risk of password compromise and is not | a significant latent risk of password compromise and is not | |||
consistent with current best practices. The mechanisms in this | consistent with current best practices. The mechanisms in this | |||
document provide a way to avoid long-term password storage entirely, | document provide a way to avoid long-term password storage entirely | |||
and to only require the storage of hashed (not retrievable) passwords | and to only require the storage of hashed (not retrievable) passwords | |||
instead of encrypted passwords. | instead of encrypted passwords. | |||
This document defines an operational practice, using the EPP RFCs, | This document defines an operational practice, using the EPP RFCs, | |||
that leverages the use of strong, random authorization information | that leverages the use of strong, random authorization information | |||
values that are short-lived, that are not stored by the client, and | values that are short lived, not stored by the client, and stored by | |||
that are stored by the server using a cryptographic hash to provide | the server using a cryptographic hash to provide secure authorization | |||
secure authorization information used for transfers. This | information used for transfers. This operational practice can be | |||
operational practice can be used to support transfers of any EPP | used to support transfers of any EPP object, where the domain name | |||
object, where the domain name object defined in [RFC5731] is used in | object as defined in [RFC5731] is used in this document for | |||
this document for illustration purposes. Elements of the practice | illustration purposes. Elements of the practice may be used to | |||
may be used to support the secure use of the authorization | support the secure use of the authorization information for purposes | |||
information for purposes other than transfer, but any other purposes | other than transfer, but any other purposes and the applicable | |||
and the applicable elements are out-of-scope for this document. | elements are out of scope for this document. | |||
The overall goal is to have strong, random authorization information | The overall goal is to have strong, random authorization information | |||
values, that are short-lived, and that are either not stored or | values that are short lived and are either not stored or stored as | |||
stored as a cryptographic hash values by the non-responsible parties. | cryptographic hash values by the non-responsible parties. In a | |||
In a registrant, registrar, and registry model, the registrant | registrant, registrar, and registry model, the registrant registers | |||
registers the object through the registrar to the registry. The | the object through the registrar to the registry. The registrant is | |||
registrant is the responsible party and the registrar and the | the responsible party, and the registrar and the registry are the | |||
registry are the non-responsible parties. EPP is a protocol between | non-responsible parties. EPP is a protocol between the registrar and | |||
the registrar and the registry, where the registrar is referred to as | the registry, where the registrar is referred to as the "client" and | |||
the client and the registry is referred to as the server. The | the registry is referred to as the "server". The following are the | |||
following are the elements of the operational practice and how the | elements of the operational practice and how the existing features of | |||
existing features of the EPP RFCs can be leveraged to satisfy them: | the EPP RFCs can be leveraged to satisfy them: | |||
"Strong Random Authorization Information": The EPP RFCs define the | Strong Random Authorization Information: The EPP RFCs define the | |||
password-based authorization information value using an XML | password-based authorization information value using an XML | |||
schema "normalizedString" type, so they don't restrict what can | schema "normalizedString" type, so they don't restrict what can | |||
be used in any substantial way. This operational practice | be used in any substantial way. This operational practice | |||
defines the recommended mechanism for creating a strong random | defines the recommended mechanism for creating a strong random | |||
authorization value, that would be generated by the client. | authorization value that would be generated by the client. | |||
"Short-Lived Authorization Information": The EPP RFCs don't | ||||
explicitly support short-lived authorization information or a | Short-Lived Authorization Information: The EPP RFCs don't explicitly | |||
time-to-live (TTL) for authorization information, but there are | support short-lived authorization information or a TTL for | |||
EPP RFC features that can be leveraged to support short-lived | authorization information, but there are EPP RFC features that | |||
authorization information. All of these features are compatible | can be leveraged to support short-lived authorization | |||
with the EPP RFCs, though not mandatory to implement. In section | information. All of these features are compatible with the EPP | |||
2.6 of [RFC5731] it states that authorization information is | RFCs, though not mandatory to implement. As stated in | |||
assigned when a domain object is created, which results in long- | Section 2.6 of [RFC5731], authorization information is assigned | |||
lived authorization information. This specification changes the | when a domain object is created, which results in long-lived | |||
nature of the authorization information to be short-lived. If | authorization information. This specification changes the nature | |||
authorization information is set only when there is a transfer in | of the authorization information from long lived to short lived. | |||
If authorization information is set only when a transfer is in | ||||
process, the server needs to support an empty authorization | process, the server needs to support an empty authorization | |||
information value on create, support setting and unsetting | information value on create, support setting and unsetting | |||
authorization information, and support automatically unsetting | authorization information, and support automatically unsetting | |||
the authorization information upon a successful transfer. All of | the authorization information upon a successful transfer. All of | |||
these features can be supported by the EPP RFCs. | these features can be supported by the EPP RFCs. | |||
"Storing Authorization Information Securely": The EPP RFCs don't | ||||
Storing Authorization Information Securely: The EPP RFCs don't | ||||
specify where and how the authorization information is stored in | specify where and how the authorization information is stored in | |||
the client or the server, so there are no restrictions to define | the client or the server, so there are no restrictions on | |||
an operational practice for storing the authorization information | defining an operational practice for storing the authorization | |||
securely. The operational practice will require the client to | information securely. The operational practice will require the | |||
not store the authorization information and will require the | client to not store the authorization information and will | |||
server to store the authorization information using a | require the server to store the authorization information using a | |||
cryptographic hash, with at least a 256-bit hash function, such | cryptographic hash with at least a 256-bit hash function, such as | |||
as SHA-256 [FIPS-180-4], and with a per-authorization information | SHA-256 [FIPS-180-4], and with a per-authorization information | |||
random salt, with at least 128 bits. Returning the authorization | random salt with at least 128 bits. Returning the authorization | |||
information set in an EPP info response will not be supported. | information set in an EPP info response will not be supported. | |||
1.1. Conventions Used in This Document | 1.1. Conventions Used in This Document | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
XML is case sensitive. Unless stated otherwise, XML specifications | XML [W3C.REC-xml-20081126] is case sensitive. Unless stated | |||
and examples provided in this document MUST be interpreted in the | otherwise, XML specifications and examples provided in this document | |||
character case presented in order to develop a conforming | MUST be interpreted in the character case presented in order to | |||
implementation. | develop a conforming implementation. | |||
In examples, "C:" represents lines sent by a protocol client and "S:" | In examples, "C:" represents lines sent by a protocol client and "S:" | |||
represents lines returned by a protocol server. Indentation and | represents lines returned by a protocol server. Indentation and | |||
white space in examples are provided only to illustrate element | empty space in examples are provided only to illustrate element | |||
relationships and are not a required feature of this protocol. | relationships and are not a required feature of this protocol. | |||
The examples reference XML namespace prefixes that are used for the | The examples reference XML namespace prefixes that are used for the | |||
associated XML namespaces. Implementations MUST NOT depend on the | associated XML namespaces. Implementations MUST NOT depend on the | |||
example XML namespaces and instead employ a proper namespace-aware | example XML namespaces and instead employ a proper namespace-aware | |||
XML parser and serializer to interpret and output the XML documents. | XML parser and serializer to interpret and output the XML documents. | |||
The example namespace prefixes used and their associated XML | The example namespace prefixes used and their associated XML | |||
namespaces include: | namespaces include the following: | |||
"domain": urn:ietf:params:xml:ns:domain-1.0 | domain: urn:ietf:params:xml:ns:domain-1.0 | |||
"contact": urn:ietf:params:xml:ns:contact-1.0 | ||||
contact: urn:ietf:params:xml:ns:contact-1.0 | ||||
2. Registrant, Registrar, Registry | 2. Registrant, Registrar, Registry | |||
The EPP RFCs refer to client and server, but when it comes to | The EPP RFCs refer to "client" and "server", but when it comes to | |||
transfers, there are three types of actors that are involved. This | transfers, there are three types of actors that are involved. This | |||
document will refer to the actors as registrant, registrar, and | document will refer to these actors as "registrant", "registrar", and | |||
registry. [RFC8499] defines these terms formally for the Domain Name | "registry". [RFC8499] defines these terms formally for the Domain | |||
System (DNS). The terms are further described below to cover their | Name System (DNS). The terms are further described below to cover | |||
roles as actors of using the authorization information in the | their roles as actors using the authorization information in the | |||
transfer process of any object in the registry, such as a domain name | transfer process of any object in the registry, such as a domain name | |||
or a contact: | or a contact: | |||
"registrant": [RFC8499] defines the registrant as "an individual or | Registrant: [RFC8499] defines the registrant as "an individual or | |||
organization on whose behalf a name in a zone is registered by | organization on whose behalf a name in a zone is registered by | |||
the registry". The registrant can be the owner of any object in | the registry." The registrant can be the owner of any object in | |||
the registry, such as a domain name or a contact. The registrant | the registry, such as a domain name or a contact. The registrant | |||
interfaces with the registrar for provisioning the objects. A | interfaces with the registrar for provisioning the objects. A | |||
transfer is coordinated by the registrant to transfer the | transfer is coordinated by the registrant to transfer the | |||
sponsorship of the object from one registrar to another. The | sponsorship of the object from one registrar to another. The | |||
authorization information is meant to authenticate the registrant | authorization information is meant to authenticate the registrant | |||
as the owner of the object to the non-sponsoring registrar and to | as the owner of the object to the non-sponsoring registrar and to | |||
authorize the transfer. | authorize the transfer. | |||
"registrar": [RFC8499] defines the registrar as "a service provider | ||||
that acts as a go-between for registrants and registries". The | Registrar: [RFC8499] defines the registrar as "a service provider | |||
that acts as a go-between for registrants and registries." The | ||||
registrar interfaces with the registrant for the provisioning of | registrar interfaces with the registrant for the provisioning of | |||
objects, such as domain names and contacts, and with the | objects, such as domain names and contacts, and with the | |||
registries to satisfy the registrant's provisioning requests. A | registries to satisfy the registrant's provisioning requests. A | |||
registrar may directly interface with the registrant or may | registrar may (1) directly interface with the registrant or | |||
indirectly interface with the registrant, typically through one | (2) indirectly interface with the registrant, typically through | |||
or more resellers. Implementing a transfer using secure | one or more resellers. Implementing a transfer using secure | |||
authorization information extends through the registrar's | authorization information extends through the registrar's | |||
reseller channel up to the direct interface with the registrant. | reseller channel up to the direct interface with the registrant. | |||
The registrar's interface with the registries uses EPP. The | The registrar's interface with the registries uses EPP. The | |||
registrar's interface with its reseller channel or the registrant | registrar's interface with its reseller channel or the registrant | |||
is registrar-specific. In the EPP RFCs, the registrar is | is registrar specific. In the EPP RFCs, the registrar is | |||
referred to as the "client", since EPP is the protocol used | referred to as the "client", since EPP is the protocol used | |||
between the registrar and the registry. The sponsoring registrar | between the registrar and the registry. The sponsoring registrar | |||
is the authorized registrar to manage objects on behalf of the | is the authorized registrar to manage objects on behalf of the | |||
registrant. A non-sponsoring registrar is not authorized to | registrant. A non-sponsoring registrar is not authorized to | |||
manage objects on behalf of the registrant. A transfer of an | manage objects on behalf of the registrant. A transfer of an | |||
object's sponsorship is from one registrar, referred to as the | object's sponsorship is from one registrar, referred to as the | |||
losing registrar, to another registrar, referred to as the | "losing registrar", to another registrar, referred to as the | |||
gaining registrar. | "gaining registrar". | |||
"registry": [RFC8499] defines the registry as "the administrative | ||||
operation of a zone that allows registration of names within the | Registry: [RFC8499] defines the registry as "the administrative | |||
zone". The registry typically interfaces with the registrars | operation of a zone that allows registration of names within that | |||
zone." The registry typically interfaces with the registrars | ||||
over EPP and generally does not interact directly with the | over EPP and generally does not interact directly with the | |||
registrant. In the EPP RFCs, the registry is referred to as the | registrant. In the EPP RFCs, the registry is referred to as the | |||
"server", since EPP is the protocol used between the registrar | "server", since EPP is the protocol used between the registrar | |||
and the registry. The registry has a record of the sponsoring | and the registry. The registry has a record of the sponsoring | |||
registrar for each object and provides the mechanism (over EPP) | registrar for each object and provides the mechanism (over EPP) | |||
to coordinate a transfer of an object's sponsorship between | to coordinate a transfer of an object's sponsorship between | |||
registrars. | registrars. | |||
3. Signaling Client and Server Support | 3. Signaling Client and Server Support | |||
This document does not define new protocol but an operational | This document does not define a new protocol; rather, it defines an | |||
practice using the existing EPP protocol, where the client and the | operational practice using existing EPP features, where the client | |||
server can signal support for the operational practice using a | and the server can signal support for the operational practice using | |||
namespace URI in the login and greeting extension services. The | a namespace URI in the login and greeting extension services. The | |||
namespace URI "urn:ietf:params:xml:ns:epp:secure-authinfo-transfer- | namespace URI "urn:ietf:params:xml:ns:epp:secure-authinfo-transfer- | |||
1.0" is used to signal support for the operational practice. The | 1.0" is used to signal support for the operational practice. The | |||
client includes the namespace URI in an <svcExtension> <extURI> | client includes the namespace URI in an <svcExtension> <extURI> | |||
element of the [RFC5730] <login> Command. The server includes the | element of the <login> command [RFC5730]. The server includes the | |||
namespace URI in an <svcExtension> <extURI> element of the [RFC5730] | namespace URI in an <svcExtension> <extURI> element of the greeting | |||
Greeting. | [RFC5730]. | |||
A client that receives the namespace URI in the server's Greeting | A client that receives the namespace URI in the server's greeting | |||
extension services can expect the following supported behavior by the | extension services can expect the following supported behavior by the | |||
server: | server: | |||
1. Support an empty authorization information value with a create | 1. Support for an empty authorization information value with a | |||
command. | <create> command. | |||
2. Support unsetting authorization information with an update | ||||
2. Support for unsetting authorization information with an <update> | ||||
command. | command. | |||
3. Support validating authorization information with an info | ||||
3. Support for validating authorization information with an <info> | ||||
command. | command. | |||
4. Support not returning an indication whether the authorization | 4. Support for not returning an indication of whether the | |||
information is set or unset to the non-sponsoring registrar. | authorization information is set or unset to the non-sponsoring | |||
5. Support returning an empty authorization information value to the | registrar. | |||
sponsoring registrar when the authorization information is set in | ||||
an info response. | 5. Support for returning an empty authorization information value to | |||
6. Support allowing for the passing of a matching non-empty | the sponsoring registrar when the authorization information is | |||
set in an info response. | ||||
6. Support for allowing the passing of a matching non-empty | ||||
authorization information value to authorize a transfer. | authorization information value to authorize a transfer. | |||
7. Support automatically unsetting the authorization information | ||||
upon a successful completion of transfer. | 7. Support for automatically unsetting the authorization information | |||
upon successful completion of a transfer. | ||||
A server that receives the namespace URI in the client's <login> | A server that receives the namespace URI in the client's <login> | |||
Command extension services, can expect the following supported | command extension services can expect the following supported | |||
behavior by the client: | behavior by the client: | |||
1. Support generation of authorization information using a secure | 1. Support for the generation of authorization information using a | |||
random value. | secure random value. | |||
2. Support only setting the authorization information when there is | ||||
a transfer in process. | 2. Support for only setting the authorization information when a | |||
transfer is in process. | ||||
4. Secure Authorization Information | 4. Secure Authorization Information | |||
The authorization information in the EPP RFCs ([RFC5731] and | The EPP RFCs ([RFC5731] and [RFC5733]) use password-based | |||
[RFC5733]) that support transfer use password-based authorization | authorization information to support transfer with the <domain:pw> | |||
information ([RFC5731] with the <domain:pw> element and [RFC5733] | element [RFC5731] and with the <contact:pw> element [RFC5733]. Other | |||
with the <contact:pw> element). Other EPP objects that support | EPP objects that support password-based authorization information for | |||
password-based authorization information for transfer can use the | transfer can use secure authorization information as defined in this | |||
Secure Authorization Information defined in this document. For the | document. For authorization information to be secure, it must be | |||
authorization information to be secure, it must be generated using a | generated using a strong random value and have a short TTL. The | |||
strong random value and have a short time-to-live (TTL). The | ||||
security of the authorization information is defined in the following | security of the authorization information is defined in the following | |||
sections. | sections. | |||
4.1. Secure Random Authorization Information | 4.1. Secure Random Authorization Information | |||
For authorization information to be secure, it MUST be generated | For authorization information to be secure, it MUST be generated | |||
using a secure random value. The authorization information is | using a secure random value. The authorization information is | |||
treated as a password, and the required length L of a password, | treated as a password, and the required length L of a password, | |||
rounded up to the largest whole number, is based on the size N of the | rounded up to the largest whole number, is based on the size N of the | |||
set of characters and the desired entropy H, in the equation L = | set of characters and the desired entropy H, in the equation L = | |||
ROUNDUP(H / log2 N). Given a target entropy, the required length can | ROUNDUP(H / log_2 N). Given a target entropy, the required length | |||
be calculated after deciding on the set of characters that will be | can be calculated after deciding on the set of characters that will | |||
randomized. In accordance with current best practices and noting | be randomized. In accordance with current best practices and noting | |||
that the authorization information is a machine-generated value, the | that the authorization information is a machine-generated value, the | |||
implementation SHOULD use at least 128 bits of entropy as the value | implementation SHOULD use at least 128 bits of entropy as the value | |||
of H. The lengths below are calculated using that value. | of H. The lengths below are calculated using that value. | |||
Calculation of the required length with 128 bits of entropy and with | Calculation of the required length with 128 bits of entropy and with | |||
the set of all printable ASCII characters except space (0x20), which | the set of all printable ASCII characters except space (0x20), which | |||
consists of the 94 characters 0x21-0x7E. | consists of the 94 characters 0x21-0x7E: | |||
ROUNDUP(128 / log2 94) =~ ROUNDUP(128 / 6.55) =~ ROUNDUP(19.54) = 20 | ROUNDUP(128 / log_2 94) =~ ROUNDUP(128 / 6.55) =~ ROUNDUP(19.54) = 20 | |||
Calculation of the required length with 128 bits of entropy and with | Calculation of the required length with 128 bits of entropy and with | |||
the set of case insensitive alphanumeric characters, which consists | the set of case-insensitive alphanumeric characters, which consists | |||
of 36 characters (a-z A-Z 0-9). | of 36 characters (a-z A-Z 0-9): | |||
ROUNDUP(128 / log2 36) =~ ROUNDUP(128 / 5.17) =~ ROUNDUP(24.76) = 25 | ROUNDUP(128 / log_2 36) =~ ROUNDUP(128 / 5.17) =~ ROUNDUP(24.76) = 25 | |||
The strength of the random authorization information is dependent on | The strength of the random authorization information is dependent on | |||
the random number generator. Suitably strong random number | the random number generator. Suitably strong random number | |||
generators are available in a wide variety of implementation | generators are available in a wide variety of implementation | |||
environments, including the interfaces listed in Sections 7.1.2 and | environments, including the interfaces listed in Sections 7.1.2 and | |||
7.1.3 of [RFC4086]. In environments that do not provide interfaces | 7.1.3 of [RFC4086]. In environments that do not provide interfaces | |||
to strong random number generators, the practices defined in | to strong random number generators, the practices defined in | |||
[RFC4086] and section 4.7.1 of the NIST Federal Information | [RFC4086] and Section 4.7.1 of the NIST Federal Information | |||
Processing Standards (FIPS) Publication 140-2 [FIPS-140-2] can be | Processing Standards (FIPS) Publication 140-2 [FIPS-140-2] can be | |||
followed to produce random values that will be resistant to attack. | followed to produce random values that will be resistant to attack. | |||
(Note: FIPS 140-2 has been superseded by FIPS 140-3, but FIPS 140-3 | ||||
does not contain information regarding random number generators.) | ||||
4.2. Authorization Information Time-To-Live (TTL) | 4.2. Authorization Information Time To Live (TTL) | |||
The authorization information SHOULD only be set when there is a | The authorization information SHOULD only be set when a transfer is | |||
transfer in process. This implies that the authorization information | in process. This implies that the authorization information has a | |||
has a Time-To-Live (TTL) by which the authorization information is | TTL by which the authorization information is cleared when the TTL | |||
cleared when the TTL expires. The EPP RFCs have no definition of | expires. The EPP RFCs do not provide definitions for TTL, but since | |||
TTL, but since the server supports the setting and unsetting of the | the server supports the setting and unsetting of the authorization | |||
authorization information by the sponsoring registrar, the sponsoring | information by the sponsoring registrar, the sponsoring registrar can | |||
registrar can apply a TTL based on client policy. The TTL client | apply a TTL based on client policy. The TTL client policy may be | |||
policy may be based on proprietary registrar-specific criteria, which | based on proprietary registrar-specific criteria, which provides for | |||
provides for a transfer-specific TTL tuned for the particular | a transfer-specific TTL tuned for the particular circumstances of the | |||
circumstances of the transaction. The sponsoring registrar will be | transaction. The sponsoring registrar will be aware of the TTL, and | |||
aware of the TTL and the sponsoring registrar MUST inform the | the sponsoring registrar MUST inform the registrant of the TTL when | |||
registrant of the TTL when the authorization information is provided | the authorization information is provided to the registrant. | |||
to the registrant. | ||||
4.3. Authorization Information Storage and Transport | 4.3. Authorization Information Storage and Transport | |||
To protect the disclosure of the authorization information, the | To protect the disclosure of the authorization information, the | |||
following requirements apply: | following requirements apply: | |||
1. The authorization information MUST be stored by the registry | 1. The authorization information MUST be stored by the registry | |||
using a strong one-way cryptographic hash, with at least a | using a strong one-way cryptographic hash with at least a 256-bit | |||
256-bit hash function, such as SHA-256 [FIPS-180-4], and with a | hash function, such as SHA-256 [FIPS-180-4], and with a per- | |||
per-authorization information random salt, with at least 128 | authorization information random salt with at least 128 bits. | |||
bits. | ||||
2. An empty authorization information value MUST be stored as an | ||||
undefined value that is referred to as a "NULL" value. The | ||||
representation of a NULL (undefined) value is dependent on the | ||||
type of database used. | ||||
2. Empty authorization information MUST be stored as an undefined | ||||
value that is referred to as a NULL value. The representation of | ||||
a NULL (undefined) value is dependent on the type of database | ||||
used. | ||||
3. The authorization information MUST NOT be stored by the losing | 3. The authorization information MUST NOT be stored by the losing | |||
registrar. | registrar. | |||
4. The authorization information MUST only be stored by the gaining | 4. The authorization information MUST only be stored by the gaining | |||
registrar as a "transient" value in support of the transfer | registrar as a "transient" value in support of the transfer | |||
process. | process. | |||
5. The plain text version of the authorization information MUST NOT | ||||
5. The plain-text version of the authorization information MUST NOT | ||||
be written to any logs by a registrar or the registry, nor | be written to any logs by a registrar or the registry, nor | |||
otherwise recorded where it will persist beyond the transfer | otherwise recorded where it will persist beyond the transfer | |||
process. | process. | |||
6. All communication that includes the authorization information | 6. All communication that includes the authorization information | |||
MUST be over an encrypted channel, such as defined in [RFC5734] | MUST be over an encrypted channel (for example, see [RFC5734]) | |||
for EPP. | for EPP. | |||
7. The registrar's interface for communicating the authorization | 7. The registrar's interface for communicating the authorization | |||
information with the registrant MUST be over an authenticated and | information with the registrant MUST be over an authenticated and | |||
encrypted channel. | encrypted channel. | |||
4.4. Authorization Information Matching | 4.4. Authorization Information Matching | |||
To support the authorization information TTL, as defined in | To support the authorization information TTL, as described in | |||
Section 4.2, the authorization information must have either a set or | Section 4.2, the authorization information must have either a set or | |||
unset state. Authorization information that is unset is stored with | unset state. Authorization information that is unset is stored with | |||
a NULL (undefined) value. Based on the requirement to store the | a NULL (undefined) value. Based on the requirement to store the | |||
authorization information using a strong one-way cryptographic hash, | authorization information using a strong one-way cryptographic hash, | |||
as defined in Section 4.3, authorization information that is set is | as described in Section 4.3, authorization information that is set is | |||
stored with a non-NULL hashed value. The empty authorization | stored with a non-NULL hashed value. The empty authorization | |||
information is used as input in both the create command (Section 5.1) | information value is used as input in both the <create> command | |||
and the update command (Section 5.2) to define the unset state. The | (Section 5.1) and the <update> command (Section 5.2) to define the | |||
matching of the authorization information in the info command | unset state. The matching of the authorization information in the | |||
(Section 5.3) and the transfer request command (Section 5.4) is based | <info> command (Section 5.3) and the <transfer> request command | |||
on the following rules: | (Section 5.4) is based on the following rules: | |||
1. Any input authorization information value MUST NOT match an unset | 1. Any input authorization information value MUST NOT match an unset | |||
authorization information value. This includes empty | authorization information value. For example, in [RFC5731] the | |||
authorization information, such as <domain:null/> or <domain:pw/> | input <domain:pw>2fooBAR</domain:pw> must not match an unset | |||
in [RFC5731], and non-empty authorization information, such as | authorization information value that used <domain:null/> or | |||
<domain:pw>2fooBAR</domain:pw> in [RFC5731]. | <domain:pw/>. | |||
2. An empty input authorization information value MUST NOT match any | 2. An empty input authorization information value MUST NOT match any | |||
set authorization information value. | set authorization information value. | |||
3. A non-empty input authorization information value MUST be hashed | 3. A non-empty input authorization information value MUST be hashed | |||
and matched against the set authorization information value, | and matched against the set authorization information value, | |||
which is stored using the same hash algorithm. | which is stored using the same hash algorithm. | |||
5. Create, Transfer, and Secure Authorization Information | 5. Create, Transfer, and Secure Authorization Information | |||
To secure the transfer process using secure authorization | To secure the transfer process using secure authorization information | |||
information, as defined in Section 4, the client and server need to | as described in Section 4, the client and server need to implement | |||
implement steps where the authorization information is set only when | steps where the authorization information is set only when a transfer | |||
a transfer is actively in process and ensure that the authorization | is actively in process and ensure that the authorization information | |||
information is stored securely and transported only over secure | is stored securely and transported only over secure channels. The | |||
channels. The steps in management of the authorization information | steps for management of the authorization information for transfers | |||
for transfers include: | include the following: | |||
1. Registrant requests to register the object with the registrar. | 1. The registrant requests to register the object with the | |||
Registrar sends the create command, with an empty authorization | registrar. The registrar sends the <create> command with an | |||
information value, to the registry, as defined in Section 5.1. | empty authorization information value to the registry, as | |||
2. Registrant requests from the losing registrar the authorization | described in Section 5.1. | |||
information to provide to the gaining registrar. | ||||
3. Losing registrar generates a secure random authorization | 2. The registrant requests from the losing registrar the | |||
information value, sends it to the registry as defined in | authorization information to provide to the gaining registrar. | |||
Section 5.2, and provides it to the registrant. | ||||
4. Registrant provides the authorization information value to the | 3. The losing registrar generates a secure random authorization | |||
gaining registrar. | information value and sends it to the registry, as described in | |||
5. Gaining registrar optionally verifies the authorization | Section 5.2, and then provides it to the registrant. | |||
information with the info command to the registry, as defined in | ||||
Section 5.3. | 4. The registrant provides the authorization information value to | |||
6. Gaining registrar sends the transfer request with the | the gaining registrar. | |||
authorization information to the registry, as defined in | ||||
5. The gaining registrar optionally verifies the authorization | ||||
information with the <info> command to the registry, as described | ||||
in Section 5.3. | ||||
6. The gaining registrar sends the transfer request with the | ||||
authorization information to the registry, as described in | ||||
Section 5.4. | Section 5.4. | |||
7. If the transfer successfully completes, the registry | ||||
automatically unsets the authorization information; otherwise the | 7. If the transfer completes successfully, the registry | |||
losing registrar unsets the authorization information when the | automatically unsets the authorization information; otherwise, | |||
TTL expires, as defined in Section 5.2. | the losing registrar unsets the authorization information when | |||
the TTL expires; see Section 5.2. | ||||
The following sections outline the practices of the EPP commands and | The following sections outline the practices of the EPP commands and | |||
responses between the registrar and the registry that supports secure | responses between the registrar and the registry that supports secure | |||
authorization information for transfer. | authorization information for transfer. | |||
5.1. Create Command | 5.1. <Create> Command | |||
For a create command, the registry MUST allow for the passing of an | For a <create> command, the registry MUST allow the passing of an | |||
empty authorization information value and MAY disallow for the | empty authorization information value and MAY disallow the passing of | |||
passing of a non-empty authorization information value. By having an | a non-empty authorization information value. By having an empty | |||
empty authorization information value on create, the object is | authorization information value on create, the object is initially | |||
initially not in the transfer process. Any EPP object extension that | not involved in the transfer process. Any EPP object extension that | |||
supports setting the authorization information with a | supports setting the authorization information with an | |||
"eppcom:pwAuthInfoType" element can have an empty authorization | "eppcom:pwAuthInfoType" element can pass an empty authorization | |||
information value passed. Examples of such extensions are [RFC5731] | information value. Examples of such extensions are found in | |||
and [RFC5733]. | [RFC5731] and [RFC5733]. | |||
Example of passing an empty authorization information value in an | Example of passing an empty authorization information value in a | |||
[RFC5731] domain name create command: | domain name <create> command [RFC5731]: | |||
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?> | C:<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"> | C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"> | |||
C: <command> | C: <command> | |||
C: <create> | C: <create> | |||
C: <domain:create | C: <domain:create | |||
C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0"> | C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0"> | |||
C: <domain:name>example.com</domain:name> | C: <domain:name>example.com</domain:name> | |||
C: <domain:authInfo> | C: <domain:authInfo> | |||
C: <domain:pw/> | C: <domain:pw/> | |||
C: </domain:authInfo> | C: </domain:authInfo> | |||
C: </domain:create> | C: </domain:create> | |||
C: </create> | C: </create> | |||
C: <clTRID>ABC-12345</clTRID> | C: <clTRID>ABC-12345</clTRID> | |||
C: </command> | C: </command> | |||
C:</epp> | C:</epp> | |||
Example of passing an empty authorization information value in an | Example of passing an empty authorization information value in a | |||
[RFC5733] contact create command: | contact <create> command [RFC5733]: | |||
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?> | C:<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"> | C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"> | |||
C: <command> | C: <command> | |||
C: <create> | C: <create> | |||
C: <contact:create | C: <contact:create | |||
C: xmlns:contact="urn:ietf:params:xml:ns:contact-1.0"> | C: xmlns:contact="urn:ietf:params:xml:ns:contact-1.0"> | |||
C: <contact:id>sh8013</contact:id> | C: <contact:id>sh8013</contact:id> | |||
C: <contact:postalInfo type="int"> | C: <contact:postalInfo type="int"> | |||
C: <contact:name>John Doe</contact:name> | C: <contact:name>John Doe</contact:name> | |||
skipping to change at page 12, line 5 ¶ | skipping to change at line 532 ¶ | |||
C: <contact:email>jdoe@example.com</contact:email> | C: <contact:email>jdoe@example.com</contact:email> | |||
C: <contact:authInfo> | C: <contact:authInfo> | |||
C: <contact:pw/> | C: <contact:pw/> | |||
C: </contact:authInfo> | C: </contact:authInfo> | |||
C: </contact:create> | C: </contact:create> | |||
C: </create> | C: </create> | |||
C: <clTRID>ABC-12345</clTRID> | C: <clTRID>ABC-12345</clTRID> | |||
C: </command> | C: </command> | |||
C:</epp> | C:</epp> | |||
5.2. Update Command | 5.2. <Update> Command | |||
For an update command, the registry MUST allow for the setting and | For an <update> command, the registry MUST allow the setting and | |||
unsetting of the authorization information. The registrar sets the | unsetting of the authorization information. The registrar sets the | |||
authorization information by first generating a strong, random | authorization information by first generating a strong, random | |||
authorization information value, based on Section 4.1, and setting it | authorization information value, based on the information provided in | |||
in the registry in the update command. The importance of generating | Section 4.1, and setting it in the registry in the <update> command. | |||
strong authorization information values cannot be overstated: secure | The importance of generating strong authorization information values | |||
transfers are very important to the Internet to mitigate damage in | cannot be overstated: secure transfers are very important to the | |||
the form of theft, fraud, and other abuse. It is critical that | Internet to mitigate damage in the form of theft, fraud, and other | |||
registrars only use strong, randomly generated authorization | abuse. It is critical that registrars only use strong, randomly | |||
information values. | generated authorization information values. | |||
Because of this, registries may validate the randomness of the | Because of this, registries may validate the randomness of the | |||
authorization information based on the length and character set | authorization information based on the length and character set | |||
required by the registry. For example, validating an authorization | required by the registry -- for example, validating that an | |||
value contains a combination of upper-case, lower-case, and non- | authorization value contains a combination of uppercase, lowercase, | |||
alphanumeric characters, in an attempt to assess the strength of the | and non-alphanumeric characters in an attempt to assess the strength | |||
value, and return an EPP error result of 2202 if the check fails. | of the value and returning an EPP error result of 2202 ("Invalid | |||
authorization information") [RFC5730] if the check fails. | ||||
Such checks are, by their nature, heuristic and imperfect, and may | Such checks are, by their nature, heuristic and imperfect, and may | |||
identify well-chosen authorization information values as being not | identify well-chosen authorization information values as being not | |||
sufficiently strong. Registrars, therefore, must be prepared for an | sufficiently strong. Registrars, therefore, must be prepared for an | |||
error response of 2202, "Invalid authorization information", and | error response of 2202 and respond by generating a new value and | |||
respond by generating a new value and trying again, possibly more | trying again, possibly more than once. | |||
than once. | ||||
Often, the registrar has the "clientTransferProhibited" status set, | Often, the registrar has the "clientTransferProhibited" status set, | |||
so to start the transfer process, the "clientTransferProhibited" | so to start the transfer process, the "clientTransferProhibited" | |||
status needs to be removed, and the strong, random authorization | status needs to be removed, and the strong, random authorization | |||
information value needs to be set. The registrar MUST define a time- | information value needs to be set. The registrar MUST define a TTL, | |||
to-live (TTL), as defined in Section 4.2, where if the TTL expires | as described in Section 4.2, and if the TTL expires, the registrar | |||
the registrar will unset the authorization information. | will unset the authorization information. | |||
Example of removing the "clientTransferProhibited" status and setting | Example of removing the "clientTransferProhibited" status and setting | |||
the authorization information in an [RFC5731] domain name update | the authorization information in a domain name <update> command | |||
command: | [RFC5731]: | |||
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?> | C:<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"> | C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"> | |||
C: <command> | C: <command> | |||
C: <update> | C: <update> | |||
C: <domain:update | C: <domain:update | |||
C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0"> | C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0"> | |||
C: <domain:name>example.com</domain:name> | C: <domain:name>example.com</domain:name> | |||
C: <domain:rem> | C: <domain:rem> | |||
C: <domain:status s="clientTransferProhibited"/> | C: <domain:status s="clientTransferProhibited"/> | |||
skipping to change at page 13, line 30 ¶ | skipping to change at line 595 ¶ | |||
C: </domain:chg> | C: </domain:chg> | |||
C: </domain:update> | C: </domain:update> | |||
C: </update> | C: </update> | |||
C: <clTRID>ABC-12345-XYZ</clTRID> | C: <clTRID>ABC-12345-XYZ</clTRID> | |||
C: </command> | C: </command> | |||
C:</epp> | C:</epp> | |||
When the registrar-defined TTL expires, the sponsoring registrar MUST | When the registrar-defined TTL expires, the sponsoring registrar MUST | |||
cancel the transfer process by unsetting the authorization | cancel the transfer process by unsetting the authorization | |||
information value and MAY add back statuses like the | information value and MAY add back statuses like the | |||
"clientTransferProbited" status. Any EPP object extension that | "clientTransferProhibited" status. Any EPP object extension that | |||
supports setting the authorization information with a | supports setting the authorization information with an | |||
"eppcom:pwAuthInfoType" element, can have an empty authorization | "eppcom:pwAuthInfoType" element can pass an empty authorization | |||
information value passed. Examples of such extensions are [RFC5731] | information value. Examples of such extensions are found in | |||
and [RFC5733]. Setting an empty authorization information value | [RFC5731] and [RFC5733]. Setting an empty authorization information | |||
unsets the authorization information. [RFC5731] supports an explicit | value unsets the authorization information. [RFC5731] supports an | |||
mechanism of unsetting the authorization information, by passing the | explicit mechanism of unsetting the authorization information, by | |||
<domain:null> authorization information value. The registry MUST | passing the <domain:null> authorization information value. The | |||
support unsetting the authorization information by accepting an empty | registry MUST support unsetting the authorization information by | |||
authorization information value and accepting an explicit unset | accepting an empty authorization information value and accepting an | |||
element if it is supported by the object extension. | explicit unset element if it is supported by the object extension. | |||
Example of adding the "clientTransferProhibited" status and unsetting | Example of adding the "clientTransferProhibited" status and unsetting | |||
the authorization information explicitly in an [RFC5731] domain name | the authorization information explicitly in a domain name <update> | |||
update command: | command [RFC5731]: | |||
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?> | C:<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"> | C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"> | |||
C: <command> | C: <command> | |||
C: <update> | C: <update> | |||
C: <domain:update | C: <domain:update | |||
C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0"> | C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0"> | |||
C: <domain:name>example.com</domain:name> | C: <domain:name>example.com</domain:name> | |||
C: <domain:add> | C: <domain:add> | |||
C: <domain:status s="clientTransferProhibited"/> | C: <domain:status s="clientTransferProhibited"/> | |||
skipping to change at page 14, line 27 ¶ | skipping to change at line 633 ¶ | |||
C: <domain:null/> | C: <domain:null/> | |||
C: </domain:authInfo> | C: </domain:authInfo> | |||
C: </domain:chg> | C: </domain:chg> | |||
C: </domain:update> | C: </domain:update> | |||
C: </update> | C: </update> | |||
C: <clTRID>ABC-12345-XYZ</clTRID> | C: <clTRID>ABC-12345-XYZ</clTRID> | |||
C: </command> | C: </command> | |||
C:</epp> | C:</epp> | |||
Example of unsetting the authorization information with an empty | Example of unsetting the authorization information with an empty | |||
authorization information value in an [RFC5731] domain name update | authorization information value in a domain name <update> command | |||
command: | [RFC5731]: | |||
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?> | C:<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"> | C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"> | |||
C: <command> | C: <command> | |||
C: <update> | C: <update> | |||
C: <domain:update | C: <domain:update | |||
C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0"> | C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0"> | |||
C: <domain:name>example.com</domain:name> | C: <domain:name>example.com</domain:name> | |||
C: <domain:add> | C: <domain:add> | |||
C: <domain:status s="clientTransferProhibited"/> | C: <domain:status s="clientTransferProhibited"/> | |||
skipping to change at page 15, line 4 ¶ | skipping to change at line 656 ¶ | |||
C: <domain:chg> | C: <domain:chg> | |||
C: <domain:authInfo> | C: <domain:authInfo> | |||
C: <domain:pw/> | C: <domain:pw/> | |||
C: </domain:authInfo> | C: </domain:authInfo> | |||
C: </domain:chg> | C: </domain:chg> | |||
C: </domain:update> | C: </domain:update> | |||
C: </update> | C: </update> | |||
C: <clTRID>ABC-12345-XYZ</clTRID> | C: <clTRID>ABC-12345-XYZ</clTRID> | |||
C: </command> | C: </command> | |||
C:</epp> | C:</epp> | |||
Example of unsetting the authorization information with an empty | Example of unsetting the authorization information with an empty | |||
authorization information value in an [RFC5733] contact update | authorization information value in a contact <update> command | |||
command: | [RFC5733]: | |||
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?> | C:<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"> | C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"> | |||
C: <command> | C: <command> | |||
C: <update> | C: <update> | |||
C: <contact:update | C: <contact:update | |||
C: xmlns:contact="urn:ietf:params:xml:ns:contact-1.0"> | C: xmlns:contact="urn:ietf:params:xml:ns:contact-1.0"> | |||
C: <contact:id>sh8013</contact:id> | C: <contact:id>sh8013</contact:id> | |||
C: <contact:chg> | C: <contact:chg> | |||
C: <contact:authInfo> | C: <contact:authInfo> | |||
C: <contact:pw/> | C: <contact:pw/> | |||
C: </contact:authInfo> | C: </contact:authInfo> | |||
C: </contact:chg> | C: </contact:chg> | |||
C: </contact:update> | C: </contact:update> | |||
C: </update> | C: </update> | |||
C: <clTRID>ABC-12345-XYZ</clTRID> | C: <clTRID>ABC-12345-XYZ</clTRID> | |||
C: </command> | C: </command> | |||
C:</epp> | C:</epp> | |||
5.3. Info Command and Response | 5.3. <Info> Command and Response | |||
For an info command, the registry MUST allow for the passing of a | For an <info> command, the registry MUST allow the passing of a non- | |||
non-empty authorization information value for verification. The | empty authorization information value for verification. The gaining | |||
gaining registrar can pre-verify the authorization information | registrar can pre-verify the authorization information provided by | |||
provided by the registrant prior to submitting the transfer request | the registrant prior to submitting the transfer request with the use | |||
with the use of the info command. The registry compares the hash of | of the <info> command. The registry compares the hash of the passed | |||
the passed authorization information with the hashed authorization | authorization information with the hashed authorization information | |||
information value stored for the object. When the authorization | value stored for the object. When the authorization information is | |||
information is not set or the passed authorization information does | not set or the passed authorization information does not match the | |||
not match the previously set value, the registry MUST return an EPP | previously set value, the registry MUST return an EPP error result | |||
error result code of 2202 [RFC5730]. | code of 2202 [RFC5730]. | |||
Example of passing a non-empty authorization information value in an | Example of passing a non-empty authorization information value in a | |||
[RFC5731] domain name info command to verify the authorization | domain name <info> command [RFC5731] to verify the authorization | |||
information value: | information value: | |||
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?> | C:<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"> | C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"> | |||
C: <command> | C: <command> | |||
C: <info> | C: <info> | |||
C: <domain:info | C: <domain:info | |||
C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0"> | C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0"> | |||
C: <domain:name>example.com</domain:name> | C: <domain:name>example.com</domain:name> | |||
C: <domain:authInfo> | C: <domain:authInfo> | |||
C: <domain:pw>LuQ7Bu@w9?%+_HK3cayg$55$LSft3MPP | C: <domain:pw>LuQ7Bu@w9?%+_HK3cayg$55$LSft3MPP | |||
C: </domain:pw> | C: </domain:pw> | |||
C: </domain:authInfo> | C: </domain:authInfo> | |||
C: </domain:info> | C: </domain:info> | |||
C: </info> | C: </info> | |||
C: <clTRID>ABC-12345</clTRID> | C: <clTRID>ABC-12345</clTRID> | |||
C: </command> | C: </command> | |||
C:</epp> | C:</epp> | |||
The info response in object extensions, such as [RFC5731] and | The info response in object extensions, such as those defined in | |||
[RFC5733], MUST NOT include the optional authorization information | [RFC5731] and [RFC5733], MUST NOT include the optional authorization | |||
element with a non-empty authorization value. The authorization | information element with a non-empty authorization value. The | |||
information is stored as a hash in the registry, so returning the | authorization information is stored as a hash in the registry, so | |||
plain text authorization information is not possible, unless a valid | returning the plain-text authorization information is not possible, | |||
plain text authorization information is passed in the info command. | unless valid plain-text authorization information is passed in the | |||
The registry MUST NOT return any indication of whether the | <info> command. The registry MUST NOT return any indication of | |||
authorization information is set or unset to the non-sponsoring | whether the authorization information is set or unset to the non- | |||
registrar by not returning the authorization information element in | sponsoring registrar by not returning the authorization information | |||
the response. The registry MAY return an indication to the | element in the response. The registry MAY return an indication to | |||
sponsoring registrar that the authorization information is set by | the sponsoring registrar that the authorization information is set by | |||
using an empty authorization information value. The registry MAY | using an empty authorization information value. The registry MAY | |||
return an indication to the sponsoring registrar that the | return an indication to the sponsoring registrar that the | |||
authorization information is unset by not returning the authorization | authorization information is unset by not returning the authorization | |||
information element. | information element. | |||
Example of returning an empty authorization information value in an | Example of returning an empty authorization information value in a | |||
[RFC5731] domain name info response to indicate to the sponsoring | domain name info response [RFC5731] to indicate to the sponsoring | |||
registrar that the authorization information is set: | registrar that the authorization information is set: | |||
S:<?xml version="1.0" encoding="UTF-8" standalone="no"?> | S:<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"> | S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"> | |||
S: <response> | S: <response> | |||
S: <result code="1000"> | S: <result code="1000"> | |||
S: <msg>Command completed successfully</msg> | S: <msg>Command completed successfully</msg> | |||
S: </result> | S: </result> | |||
S: <resData> | S: <resData> | |||
S: <domain:infData | S: <domain:infData | |||
skipping to change at page 17, line 30 ¶ | skipping to change at line 758 ¶ | |||
S: </domain:authInfo> | S: </domain:authInfo> | |||
S: </domain:infData> | S: </domain:infData> | |||
S: </resData> | S: </resData> | |||
S: <trID> | S: <trID> | |||
S: <clTRID>ABC-12345</clTRID> | S: <clTRID>ABC-12345</clTRID> | |||
S: <svTRID>54322-XYZ</svTRID> | S: <svTRID>54322-XYZ</svTRID> | |||
S: </trID> | S: </trID> | |||
S: </response> | S: </response> | |||
S:</epp> | S:</epp> | |||
5.4. Transfer Request Command | 5.4. <Transfer> Request Command | |||
For a Transfer Request Command, the registry MUST allow for the | For a <transfer> request command, the registry MUST allow the passing | |||
passing of a non-empty authorization information value to authorize a | of a non-empty authorization information value to authorize a | |||
transfer. The registry compares the hash of the passed authorization | transfer. The registry compares the hash of the passed authorization | |||
information with the hashed authorization information value stored | information with the hashed authorization information value stored | |||
for the object. When the authorization information is not set or the | for the object. When the authorization information is not set or the | |||
passed authorization information does not match the previously set | passed authorization information does not match the previously set | |||
value, the registry MUST return an EPP error result code of 2202 | value, the registry MUST return an EPP error result code of 2202 | |||
[RFC5730]. Whether the transfer occurs immediately or is pending is | [RFC5730]. Whether the transfer occurs immediately or is pending is | |||
up to server policy. When the transfer occurs immediately, the | up to server policy. When the transfer occurs immediately, the | |||
registry MUST return the EPP success result code of 1000 and when the | registry MUST return the EPP success result code of 1000 ("Command | |||
transfer is pending, the registry MUST return the EPP success result | completed successfully") [RFC5730], and when the transfer is pending, | |||
code of 1001. The losing registrar MUST be informed of a successful | the registry MUST return the EPP success result code of 1001 | |||
transfer request using an EPP poll message. | ("Command completed successfully; action pending"). The losing | |||
registrar MUST be informed of a successful transfer request using an | ||||
EPP <poll> message. | ||||
Example of passing a non-empty authorization information value in an | Example of passing a non-empty authorization information value in a | |||
[RFC5731] domain name transfer request command to authorize the | domain name <transfer> request command [RFC5731] to authorize the | |||
transfer: | transfer: | |||
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?> | C:<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"> | C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"> | |||
C: <command> | C: <command> | |||
C: <transfer op="request"> | C: <transfer op="request"> | |||
C: <domain:transfer | C: <domain:transfer | |||
C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0"> | C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0"> | |||
C: <domain:name>example1.com</domain:name> | C: <domain:name>example1.com</domain:name> | |||
C: <domain:authInfo> | C: <domain:authInfo> | |||
skipping to change at page 18, line 24 ¶ | skipping to change at line 799 ¶ | |||
C: </domain:pw> | C: </domain:pw> | |||
C: </domain:authInfo> | C: </domain:authInfo> | |||
C: </domain:transfer> | C: </domain:transfer> | |||
C: </transfer> | C: </transfer> | |||
C: <clTRID>ABC-12345</clTRID> | C: <clTRID>ABC-12345</clTRID> | |||
C: </command> | C: </command> | |||
C:</epp> | C:</epp> | |||
Upon successful completion of the transfer, the registry MUST | Upon successful completion of the transfer, the registry MUST | |||
automatically unset the authorization information. If the transfer | automatically unset the authorization information. If the transfer | |||
request is not submitted within the time-to-live (TTL) (Section 4.2) | request is not submitted within the TTL (Section 4.2) or the transfer | |||
or the transfer is cancelled or rejected, the registrar MUST unset | is canceled or rejected, the registrar MUST unset the authorization | |||
the authorization information as defined in Section 5.2. | information, as described in Section 5.2. | |||
6. Transition Considerations | 6. Transition Considerations | |||
The goal of the transition considerations to the practice defined in | The goal of the transition considerations is to minimize the impact | |||
this document, referred to as the Secure Authorization Information | to the registrars in supporting the Secure Authorization Information | |||
Model, is to minimize the impact to the registrars by supporting | Model defined in this document by supporting incremental transition | |||
incremental steps of adoption. The transition steps are dependent on | steps. The transition steps are dependent on the starting point of | |||
the starting point of the registry. Registries may have different | the registry. Registries may have different starting points, since | |||
starting points, since some of the elements of the Secure | some of the elements of the Secure Authorization Information Model | |||
Authorization Information Model may have already been implemented. | may have already been implemented. The considerations assume a | |||
The considerations assume a starting point, referred to as the | starting point, referred to as the "Classic Authorization Information | |||
Classic Authorization Information Model, that have the following | Model", which incorporates the following steps for management of the | |||
steps in the management of the authorization information for | authorization information for transfers: | |||
transfers: | ||||
1. Registrant requests to register the object with the registrar. | 1. The registrant requests to register the object with the | |||
Registrar sends the create command, with a non-empty | registrar. The registrar sends the <create> command, with a non- | |||
authorization information value, to the registry. The registry | empty authorization information value, to the registry. The | |||
stores the authorization information as an encrypted value and | registry stores the authorization information as an encrypted | |||
requires a non-empty authorization information value for the life | value and requires a non-empty authorization information value | |||
of the object. The registrar may store the long-lived | for the life of the object. The registrar may store the long- | |||
authorization information. | lived authorization information. | |||
2. At the time of transfer, Registrant requests from the losing | ||||
2. At the time of transfer, the registrant requests from the losing | ||||
registrar the authorization information to provide to the gaining | registrar the authorization information to provide to the gaining | |||
registrar. | registrar. | |||
3. Losing registrar retrieves the locally stored authorization | 3. The losing registrar retrieves the locally stored authorization | |||
information or queries the registry for authorization information | information or queries the registry for authorization information | |||
using the info command, and provides it to the registrant. If | using the <info> command, and provides it to the registrant. If | |||
the registry is queried, the authorization information is | the registry is queried, the authorization information is | |||
decrypted and the plain text authorization information is | decrypted and the plain-text authorization information is | |||
returned in the info response to the registrar. | returned in the info response to the registrar. | |||
4. Registrant provides the authorization information value to the | ||||
gaining registrar. | 4. The registrant provides the authorization information value to | |||
5. Gaining registrar optionally verifies the authorization | the gaining registrar. | |||
information with the info command to the registry, by passing the | ||||
authorization information in the info command to the registry. | 5. The gaining registrar optionally verifies the authorization | |||
6. Gaining registrar sends the transfer request with the | information with the <info> command to the registry, by passing | |||
the authorization information in the <info> command to the | ||||
registry. | ||||
6. The gaining registrar sends the transfer request with the | ||||
authorization information to the registry. The registry will | authorization information to the registry. The registry will | |||
decrypt the stored authorization information to compare to the | decrypt the stored authorization information to compare to the | |||
passed authorization information. | passed authorization information. | |||
7. If the transfer successfully completes, the authorization | ||||
7. If the transfer completes successfully, the authorization | ||||
information is not touched by the registry and may be updated by | information is not touched by the registry and may be updated by | |||
the gaining registrar using the update command. If the transfer | the gaining registrar using the <update> command. If the | |||
is cancelled or rejected, the losing registrar may reset the | transfer is canceled or rejected, the losing registrar may reset | |||
authorization information using the update command. | the authorization information using the <update> command. | |||
The gaps between the Classic Authorization Information Model and the | The gaps between the Classic Authorization Information Model and the | |||
Secure Authorization Information Model include: | Secure Authorization Information Model include the following: | |||
1. Registry requirement for a non-empty authorization information | 1. Registry requirement for a non-empty authorization information | |||
value on create and for the life of the object versus the | value on create and for the life of the object versus the | |||
authorization information not being set on create and only being | authorization information not being set on create and only being | |||
set when a transfer is in process. | set when a transfer is in process. | |||
2. Registry not allowing the authorization information to be unset | 2. Registry not allowing the authorization information to be unset | |||
versus supporting the authorization to be unset in the update | versus providing support for unsetting the authorization | |||
command. | information in the <update> command. | |||
3. Registry storing the authorization information as an encrypted | 3. Registry storing the authorization information as an encrypted | |||
value versus as a hashed value. | value versus a hashed value. | |||
4. Registry support for returning the authorization information | 4. Registry support for returning the authorization information | |||
versus not returning the authorization information in the info | versus not returning the authorization information in the info | |||
response. | response. | |||
5. Registry not touching the authorization information versus the | 5. Registry not touching the authorization information versus the | |||
registry automatically unsetting the authorization information | registry automatically unsetting the authorization information | |||
upon a successful transfer. | upon a successful transfer. | |||
6. Registry may validate a shorter authorization information value | ||||
using password complexity rules versus validating the randomness | ||||
of a longer authorization information value that meets the | ||||
required bits of entropy. | ||||
The transition can be handled in the three phases defined in the sub- | 6. Registry possibly validating a shorter authorization information | |||
sections Section 6.1, Section 6.2, Section 6.3. | value using password complexity rules versus validating the | |||
randomness of a longer authorization information value that meets | ||||
the required bits of entropy. | ||||
The transition can be handled in the three phases defined in | ||||
Sections 6.1, 6.2, and 6.3. | ||||
6.1. Transition Phase 1 - Features | 6.1. Transition Phase 1 - Features | |||
The goal of the "Transition Phase 1 - Features" is to implement the | The goal of "Transition Phase 1 - Features" is to implement the | |||
needed features in EPP so that the registrar can optionally implement | needed features in EPP so that the registrar can optionally implement | |||
the Secure Authorization Information Model. The features to | the Secure Authorization Information Model. The features to | |||
implement are broken out by the command and responses below: | implement are broken out by the commands and responses below: | |||
Create Command: Change the create command to make the authorization | <Create> Command: Change the <create> command to make the | |||
information optional, by allowing both a non-empty value and an | authorization information optional, by allowing both a non-empty | |||
empty value. This enables a registrar to optionally create | value and an empty value. This enables a registrar to optionally | |||
objects without an authorization information value, as defined in | create objects without an authorization information value, as | |||
Section 5.1. | described in Section 5.1. | |||
Update Command: Change the update command to allow unsetting the | ||||
authorization information, as defined in Section 5.2. This | <Update> Command: Change the <update> command to allow unsetting the | |||
authorization information, as described in Section 5.2. This | ||||
enables the registrar to optionally unset the authorization | enables the registrar to optionally unset the authorization | |||
information when the TTL expires or when the transfer is cancelled | information when the TTL expires or when the transfer is canceled | |||
or rejected. | or rejected. | |||
Transfer Approve Command and Transfer Auto-Approve: Change the | Transfer Approve Command and Transfer Auto-Approve: Change the | |||
transfer approve command and the transfer auto-approve to | transfer approve command and the transfer auto-approve to | |||
automatically unset the authorization information. This sets the | automatically unset the authorization information. This sets the | |||
default state of the object to not have the authorization | default state of the object to not have the authorization | |||
information set. The registrar implementing the Secure | information set. The registrar implementing the Secure | |||
Authorization Information Model will not set the authorization | Authorization Information Model will not set the authorization | |||
information for an inbound transfer and the registrar implementing | information for an inbound transfer, and the registrar | |||
the Classic Authorization Information Model will set the new | implementing the Classic Authorization Information Model will set | |||
authorization information upon the successful transfer. | the new authorization information upon a successful transfer. | |||
Info Response: Change the info command to not return the | ||||
authorization information in the info response, as defined in | Info Response: Change the <info> command to not return the | |||
authorization information in the info response, as described in | ||||
Section 5.3. This sets up the implementation of "Transition Phase | Section 5.3. This sets up the implementation of "Transition Phase | |||
2 - Storage", since the dependency in returning the authorization | 2 - Storage" (Section 6.2), since the dependency on returning the | |||
information in the info response will be removed. This feature is | authorization information in the info response will be removed. | |||
the only one that is not an optional change to the registrar that | This feature is the only one that is not an optional change to the | |||
has the potential of breaking the client, so it's recommended that | registrar, and this change could potentially break the client, so | |||
the registry provide notice of the change. | it's recommended that the registry provide notice of the change. | |||
Info Command and Transfer Request: Change the info command and the | ||||
transfer request to ensure that a registrar cannot get an | <Info> Command and Transfer Request: Change the <info> command and | |||
the transfer request to ensure that a registrar cannot get an | ||||
indication that the authorization information is set or not set by | indication that the authorization information is set or not set by | |||
returning the EPP error result code of 2202 when comparing a | returning the EPP error result code of 2202 when comparing a | |||
passed authorization to a non-matching set authorization | passed authorization to a non-matching set authorization | |||
information value or an unset value. | information value or an unset value. | |||
6.2. Transition Phase 2 - Storage | 6.2. Transition Phase 2 - Storage | |||
The goal of the "Transition Phase 2 - Storage" is to transition the | The goal of "Transition Phase 2 - Storage" is to transition the | |||
registry to use hashed authorization information instead of encrypted | registry to use hashed authorization information instead of encrypted | |||
authorization information. There is no direct impact to the | authorization information. There is no direct impact on the | |||
registrars, since the only visible indication that the authorization | registrars, since the only visible indication that the authorization | |||
information has been hashed is by not returning the set authorization | information has been hashed is that the set authorization information | |||
information in the info response, which is addressed in Transition | is not returned in the info response, as addressed in "Transition | |||
Phase 1 - Features (Section 6.1). There are three steps to | Phase 1 - Features" (Section 6.1). Transitioning the authorization | |||
transition the authorization information storage, which includes: | information storage includes the following three steps: | |||
Hash New Authorization Information Values: Change the create command | Hash New Authorization Information Values: Change the <create> | |||
and the update command to hash instead of encrypting the | command and the <update> command to hash rather than encrypt the | |||
authorization information. | authorization information. | |||
Supporting Comparing Against Encrypted and Hashed Authorization | ||||
Information: Change the info command and the transfer request | Support Comparison against Encrypted or Hashed Authorization | |||
Information: Change the <info> command and the <transfer> request | ||||
command to be able to compare a passed authorization information | command to be able to compare a passed authorization information | |||
value with either a hashed or encrypted authorization information | value with either a hashed or encrypted authorization information | |||
value. This requires that the stored values are self-identifying | value. This requires that the stored values be self-identifying | |||
as being in hashed or encrypted form. | as being in hashed or encrypted form. | |||
Hash Existing Encrypted Authorization Information Values: Convert | Hash Existing Encrypted Authorization Information Values: Convert | |||
the encrypted authorization information values stored in the | the encrypted authorization information values stored in the | |||
registry database to hashed values. The update is not a visible | registry database to hashed values. This update will not be | |||
change to the registrar. The conversion can be done over a period | visible to the registrar. The conversion can be done over a | |||
of time depending on registry policy. | period of time, depending on registry policy. | |||
6.3. Transition Phase 3 - Enforcement | 6.3. Transition Phase 3 - Enforcement | |||
The goal of the "Transition Phase 3 - Enforcement" is to complete the | The goal of "Transition Phase 3 - Enforcement" is to complete the | |||
implementation of the "Secure Authorization Information Model", by | implementation of the Secure Authorization Information Model, by | |||
enforcing the following: | enforcing the following: | |||
Disallow Authorization Information on Create Command: Change the | Disallow Authorization Information on <Create> Command: Change the | |||
create command to not allow for the passing of a non-empty | <create> command to not allow the passing of a non-empty | |||
authorization information value. This behavior has the potential | authorization information value. This behavior could potentially | |||
of breaking the client, so it's recommended that the registry | break the client, so it's recommended that the registry provide | |||
provide notice of the change. | notice of this change. | |||
Validate the Strong Random Authorization Information: Change the | Validate the Strong Random Authorization Information: Change the | |||
validation of the authorization information in the update command | validation of the authorization information in the <update> | |||
to ensure at least 128 bits of entropy. | command to ensure at least 128 bits of entropy. | |||
7. IANA Considerations | 7. IANA Considerations | |||
7.1. XML Namespace | 7.1. XML Namespace | |||
This document uses URNs to describe XML namespaces conforming to a | This document uses URNs to describe XML namespaces conforming to the | |||
registry mechanism described in [RFC3688]. The following URI | registry mechanism described in [RFC3688]. IANA has assigned the | |||
assignment is requested of IANA: | following URI in the "ns" subregistry within the "IETF XML Registry" | |||
for secure authorization information for the transfer namespace: | ||||
Registration request for the secure authorization information for | ||||
transfer namespace: | ||||
URI: urn:ietf:params:xml:ns:epp:secure-authinfo-transfer-1.0 | URI: urn:ietf:params:xml:ns:epp:secure-authinfo-transfer-1.0 | |||
Registrant Contact: IESG | Registrant Contact: IESG | |||
XML: None. Namespace URIs do not represent an XML specification. | XML: None. Namespace URIs do not represent an XML specification. | |||
7.2. EPP Extension Registry | 7.2. EPP Extension Registry | |||
The EPP operational practice described in this document should be | IANA has registered the EPP operational practice described in this | |||
registered by the IANA in the EPP Extension Registry described in | document in the "Extensions for the Extensible Provisioning Protocol | |||
[RFC7451]. The details of the registration are as follows: | (EPP)" registry as defined in [RFC7451]. The details of the | |||
registration are as follows: | ||||
Name of Extension: "Extensible Provisioning Protocol (EPP) Secure | ||||
Authorization Information for Transfer" | ||||
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: None | ||||
Status: Active | ||||
Notes: None | ||||
8. Implementation Status | ||||
Note to RFC Editor: Please remove this section and the reference to | ||||
RFC 7942 [RFC7942] before publication. | ||||
This section records the status of known implementations of the | ||||
protocol defined by this specification at the time of posting of this | ||||
Internet-Draft, and is based on a proposal described in RFC 7942 | ||||
[RFC7942]. The description of implementations in this section is | ||||
intended to assist the IETF in its decision processes in progressing | ||||
drafts to RFCs. Please note that the listing of any individual | ||||
implementation here does not imply endorsement by the IETF. | ||||
Furthermore, no effort has been spent to verify the information | ||||
presented here that was supplied by IETF contributors. This is not | ||||
intended as, and must not be construed to be, a catalog of available | ||||
implementations or their features. Readers are advised to note that | ||||
other implementations may exist. | ||||
According to RFC 7942 [RFC7942], "this will allow reviewers and | ||||
working groups to assign due consideration to documents that have the | ||||
benefit of running code, which may serve as evidence of valuable | ||||
experimentation and feedback that have made the implemented protocols | ||||
more mature. It is up to the individual working groups to use this | ||||
information as they see fit". | ||||
8.1. Verisign EPP SDK | ||||
Organization: Verisign Inc. | ||||
Name: Verisign EPP SDK | ||||
Description: The Verisign EPP SDK includes both a full client | ||||
implementation and a full server stub implementation of draft-ietf- | ||||
regext-secure-authinfo-transfer. | ||||
Level of maturity: Development | ||||
Coverage: All aspects of the protocol are implemented. | ||||
Licensing: GNU Lesser General Public License | ||||
Contact: jgould@verisign.com | ||||
URL: https://www.verisign.com/en_US/channel-resources/domain- | ||||
registry-products/epp-sdks | ||||
8.2. RegistryEngine EPP Service | ||||
Organization: CentralNic | ||||
Name: RegistryEngine EPP Service | ||||
Description: Generic high-volume EPP service for gTLDs, ccTLDs and | ||||
SLDs | ||||
Level of maturity: Deployed in CentralNic's production environment as | ||||
well as two other gTLD registry systems, and two ccTLD registry | ||||
systems. | ||||
Coverage: Authorization Information is "write only" in that the | ||||
registrars can set the Authorization Information, but not get the | ||||
Authorization Information in the Info Response. | ||||
Licensing: Proprietary In-House software | ||||
Contact: epp@centralnic.com | Name of Extension: "Extensible Provisioning Protocol (EPP) Secure | |||
URL: https://www.centralnic.com | Authorization Information for Transfer" | |||
Document status: Standards Track | ||||
Reference: RFC 9154 | ||||
Registrant Name and Email Address: IESG (iesg@ietf.org) | ||||
TLDs: Any | ||||
IPR Disclosure: None | ||||
Status: Active | ||||
Notes: None | ||||
9. Security Considerations | 8. Security Considerations | |||
Section 4.1 defines the use a secure random value for the generation | Section 4.1 defines the use of a secure random value for the | |||
of the authorization information. The client SHOULD choose a length | generation of authorization information. The client SHOULD choose a | |||
and set of characters that results in at least 128 bits of entropy. | length and set of characters that result in at least 128 bits of | |||
entropy. | ||||
Section 4.2 defines the use of an authorization information Time-To- | Section 4.2 defines the use of an authorization information TTL. The | |||
Live (TTL). The registrar SHOULD only set the authorization | registrar SHOULD only set the authorization information during the | |||
information during the transfer process by the server support for | transfer process by setting the authorization information at the | |||
setting and unsetting the authorization information. The TTL value | start of the transfer process and unsetting the authorization | |||
is up to registrar policy and the sponsoring registrar MUST inform | information at the end of the transfer process. The TTL value is | |||
left up to registrar policy, and the sponsoring registrar MUST inform | ||||
the registrant of the TTL when providing the authorization | the registrant of the TTL when providing the authorization | |||
information to the registrant. | information to the registrant. | |||
Section 4.3 defines the storage and transport of authorization | Section 4.3 defines the storage and transport of authorization | |||
information. The losing registrar MUST NOT store the authorization | information. The losing registrar MUST NOT store the authorization | |||
information and the gaining registrar MUST only store the | information and the gaining registrar MUST only store the | |||
authorization information as a "transient" value during the transfer | authorization information as a "transient" value during the transfer | |||
process, where the authorization information MUST NOT be stored after | process, where the authorization information MUST NOT be stored after | |||
the end of the transfer process. The registry MUST store the | the end of the transfer process. The registry MUST store the | |||
authorization information using a one-way cryptographic hash of at | authorization information using a one-way cryptographic hash of at | |||
least 256 bits and with a per-authorization information random salt, | least 256 bits and with a per-authorization information random salt | |||
with at least 128 bits. All communication that includes the | with at least 128 bits. All communication that includes the | |||
authorization information MUST be over an encrypted channel. The | authorization information MUST be over an encrypted channel. The | |||
plain text authorization information MUST NOT be written to any logs | plain-text authorization information MUST NOT be written to any logs | |||
by the registrar or the registry. | by the registrar or the registry. | |||
Section 4.4 defines the matching of the authorization information | Section 4.4 defines the matching of the authorization information | |||
values. The registry stores an unset authorization information as a | values. The registry stores an unset authorization information value | |||
NULL (undefined) value to ensure that an empty input authorization | as a NULL (undefined) value to ensure that an empty input | |||
information never matches it. The method used to define a NULL | authorization information value never matches it. The method used to | |||
(undefined) value is database specific. | define a NULL (undefined) value is database specific. | |||
10. Acknowledgements | ||||
The authors wish to thank the following persons for their feedback | ||||
and suggestions: Michael Bauland, Martin Casanova, Scott Hollenbeck, | ||||
Benjamin Kaduk, Jody Kolker, Barry Leiba, Patrick Mevzek, Matthew | ||||
Pozun, Srikanth Veeramachaneni, and Ulrich Wisser. | ||||
11. References | 9. References | |||
11.1. Normative References | 9.1. Normative References | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | |||
DOI 10.17487/RFC3688, January 2004, | DOI 10.17487/RFC3688, January 2004, | |||
<https://www.rfc-editor.org/info/rfc3688>. | <https://www.rfc-editor.org/info/rfc3688>. | |||
skipping to change at page 25, line 37 ¶ | skipping to change at line 1075 ¶ | |||
[RFC5733] Hollenbeck, S., "Extensible Provisioning Protocol (EPP) | [RFC5733] Hollenbeck, S., "Extensible Provisioning Protocol (EPP) | |||
Contact Mapping", STD 69, RFC 5733, DOI 10.17487/RFC5733, | Contact Mapping", STD 69, RFC 5733, DOI 10.17487/RFC5733, | |||
August 2009, <https://www.rfc-editor.org/info/rfc5733>. | August 2009, <https://www.rfc-editor.org/info/rfc5733>. | |||
[RFC5734] Hollenbeck, S., "Extensible Provisioning Protocol (EPP) | [RFC5734] Hollenbeck, S., "Extensible Provisioning Protocol (EPP) | |||
Transport over TCP", STD 69, RFC 5734, | Transport over TCP", STD 69, RFC 5734, | |||
DOI 10.17487/RFC5734, August 2009, | DOI 10.17487/RFC5734, August 2009, | |||
<https://www.rfc-editor.org/info/rfc5734>. | <https://www.rfc-editor.org/info/rfc5734>. | |||
[RFC7942] Sheffer, Y. and A. Farrel, "Improving Awareness of Running | ||||
Code: The Implementation Status Section", BCP 205, | ||||
RFC 7942, DOI 10.17487/RFC7942, July 2016, | ||||
<https://www.rfc-editor.org/info/rfc7942>. | ||||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
[RFC8499] Hoffman, P., Sullivan, A., and K. Fujiwara, "DNS | [RFC8499] Hoffman, P., Sullivan, A., and K. Fujiwara, "DNS | |||
Terminology", BCP 219, RFC 8499, DOI 10.17487/RFC8499, | Terminology", BCP 219, RFC 8499, DOI 10.17487/RFC8499, | |||
January 2019, <https://www.rfc-editor.org/info/rfc8499>. | January 2019, <https://www.rfc-editor.org/info/rfc8499>. | |||
11.2. Informative References | [W3C.REC-xml-20081126] | |||
Bray, T., Paoli, J., Sperberg-McQueen, M., Maler, E., and | ||||
F. Yergeau, "Extensible Markup Language (XML) 1.0 (Fifth | ||||
Edition)", World Wide Web Consortium Recommendation REC- | ||||
xml-20081126, November 2008, | ||||
<https://www.w3.org/TR/2008/REC-xml-20081126>. | ||||
9.2. Informative References | ||||
[FIPS-140-2] | [FIPS-140-2] | |||
National Institute of Standards and Technology, U.S. | National Institute of Standards and Technology, U.S. | |||
Department of Commerce, "NIST Federal Information | Department of Commerce, "NIST Federal Information | |||
Processing Standards (FIPS) Publication 140-2", May 2001, | Processing Standards (FIPS) Publication 140-2", | |||
DOI 10.6028/NIST.FIPS.140-2, May 2001, | ||||
<https://csrc.nist.gov/publications/detail/fips/140/2/ | <https://csrc.nist.gov/publications/detail/fips/140/2/ | |||
final>. | final>. | |||
[FIPS-180-4] | [FIPS-180-4] | |||
National Institute of Standards and Technology, U.S. | National Institute of Standards and Technology, U.S. | |||
Department of Commerce, "Secure Hash Standard, NIST | Department of Commerce, "Secure Hash Standard, NIST | |||
Federal Information Processing Standards (FIPS) | Federal Information Processing Standards (FIPS) | |||
Publication 180-4", August 2015, | Publication 180-4", DOI 10.6028/NIST.FIPS.180-4, August | |||
2015, | ||||
<https://csrc.nist.gov/publications/detail/fips/180/4/ | <https://csrc.nist.gov/publications/detail/fips/180/4/ | |||
final>. | final>. | |||
[RFC7451] Hollenbeck, S., "Extension Registry for the Extensible | [RFC7451] Hollenbeck, S., "Extension Registry for the Extensible | |||
Provisioning Protocol", RFC 7451, DOI 10.17487/RFC7451, | Provisioning Protocol", RFC 7451, DOI 10.17487/RFC7451, | |||
February 2015, <https://www.rfc-editor.org/info/rfc7451>. | February 2015, <https://www.rfc-editor.org/info/rfc7451>. | |||
Appendix A. Change History | Acknowledgements | |||
A.1. Change from 00 to 01 | ||||
1. Filled in the "Implementation Status" section with the inclusion | ||||
of the "Verisign EPP SDK" and "RegistryEngine EPP Service" | ||||
implementations. | ||||
2. Made small wording corrections based on private feedback. | ||||
3. Added content to the "Acknowledgements" section. | ||||
A.2. Change from 01 to 02 | ||||
1. Revised the language used for the storage of the authorization | ||||
information based on the feedback from Patrick Mevzek and Jody | ||||
Kolker. | ||||
A.3. Change from 02 to 03 | ||||
1. Updates based on the feedback from the interim REGEXT meeting | ||||
held at ICANN-66: | ||||
1. Section 3.3, include a reference to the hash algorithm to | ||||
use. Broke the requirements into a list and included a the | ||||
reference the text ', with at least a 256-bit hash function, | ||||
such as SHA-256'. | ||||
2. Add a Transition Considerations section to cover the | ||||
transition from the classic authorization information | ||||
security model in the EPP RFCs to the model defined in the | ||||
document. | ||||
3. Add a statement to the Introduction that elements of the | ||||
practice can be used for purposes other than transfer, but | ||||
with a caveat. | ||||
2. Updates based on the review by Michael Bauland, that include: | ||||
1. In section 2, change 'there are three actors' to 'there are | ||||
three types of actors' to cover the case with transfers that | ||||
has two registrar actors (losing and gaining). | ||||
2. In section 3.1, change the equations equals to be | ||||
approximately equal by using '=~' instead of '=', where | ||||
applicable. | ||||
3. In section 3.3, change 'MUST be over an encrypted channel, | ||||
such as RFC5734' to 'MUST be over an encrypted channel, such | ||||
as defined in RFC5734'. | ||||
4. In section 4.1, remove the optional RFC 5733 elements from | ||||
the contact create, which includes the <contact:voice>, | ||||
<contact:fax>, <contact:disclose>, <contact:org>, | ||||
<contact:street>, <contact:sp>, and <contact:cc> elements. | ||||
5. In section 4.2, changed 'Example of unsetting the | ||||
authorization information explicitly in an [RFC5731] domain | ||||
name update command.' to 'Example of adding the | ||||
"clientTransferProhibited" status and unsetting the | ||||
authorization information explicitly in an [RFC5731] domain | ||||
name update command.' | ||||
6. In section 4.3, cover a corner case of the ability to return | ||||
the authorization information when it's passed in the info | ||||
command. | ||||
7. In section 4.4, change 'If the transfer does not complete | ||||
within the time-to-live (TTL)' to 'If the transfer is not | ||||
initiated within the time-to-live (TTL)', since the TTL is | ||||
the time between setting the authorization information and | ||||
when it's successfully used in a transfer request. Added the | ||||
case of unsetting the authorization information when the | ||||
transfer is cancelled or rejected. | ||||
3. Updates based on the authorization information messages by Martin | ||||
Casanova on the REGEXT mailing list, that include: | ||||
1. Added section 3.4 'Authorization Information Matching' to | ||||
clarify how the authorization information is matched, when | ||||
there is set and unset authorization information in the | ||||
database and empty and non-empty authorization information | ||||
passed in the info and transfer commands. | ||||
2. Added support for signaling that the authorization | ||||
information is set or unset to the sponsoring registrar with | ||||
the inclusion of an empty authorization information element | ||||
in the response to indicate that the authorization | ||||
information is set and the exclusion of the authorization | ||||
information element in the response to indicate that the | ||||
authorization information is unset. | ||||
4. Made the capitalization of command and response references | ||||
consistent by uppercasing section and item titles and lowercasing | ||||
references elsewhere. | ||||
A.4. Change from 03 to REGEXT 00 | ||||
1. Changed to regext working group draft by changing draft-gould- | ||||
regext-secure-authinfo-transfer to draft-ietf-regext-secure- | ||||
authinfo-transfer. | ||||
A.5. Change from REGEXT 00 to REGEXT 01 | ||||
1. Added the "Signaling Client and Server Support" section to | ||||
describe the mechanism to signal support for the BCP by the | ||||
client and the server. | ||||
2. Added the "IANA Considerations" section with the registration of | ||||
the secure authorization for transfer XML namespace and the | ||||
registration of the EPP Best Current Practice (BCP) in the EPP | ||||
Extension Registry. | ||||
A.6. Change from REGEXT 01 to REGEXT 02 | ||||
1. Added inclusion of random salt for the hashed authorization | ||||
information, based on feedback from Ulrich Wisser. | ||||
2. Added clarification that the representation of a NULL (undefined) | ||||
value is dependent on the type of database, based on feedback | ||||
from Patrick Mevzek. | ||||
3. Filled in the Security Considerations section. | ||||
A.7. Change from REGEXT 02 to REGEXT 03 | ||||
1. Updated the XML namespace to urn:ietf:params:xml:ns:epp:secure- | ||||
authinfo-transfer-1.0, which removed bcp from the namespace and | ||||
bumped the version from 0.1 and 1.0. Inclusion of bcp in the XML | ||||
namespace was discussed at the REGEXT interim meeting. | ||||
2. Replaced Auhtorization with Authorization based on a review by | ||||
Jody Kolker. | ||||
A.8. Change from REGEXT 03 to REGEXT 04 | ||||
1. Converted from xml2rfc v2 to v3. | ||||
2. Updated Acknowledgements to match the approach taken by the RFC | ||||
Editor with draft-ietf-regext-login-security. | ||||
3. Changed from Best Current Practice (BCP) to Standards Track based | ||||
on mailing list discussion. | ||||
A.9. Change from REGEXT 04 to REGEXT 05 | ||||
1. Fixed IDNITS issues, including moving RFC7451 to Informative | ||||
References section. | ||||
A.10. Change from REGEXT 05 to REGEXT 06 | ||||
Updates based on the Barry Leiba (AD) feedback: | ||||
1. Simplified the abstract based on the proposal provided. | ||||
2. In the Introduction, split the first paragraph by starting a new | ||||
paragraph at "This document". | ||||
3. In section 1.1, updated to use the new BCP 14 boilerplate and | ||||
add a normative reference to RFC 8174. | ||||
4. In section 4, Updated the phrasing to "For the authorization | ||||
information to be secure it must be generated using a strong | ||||
random value and have a short time-to-live (TTL).". | ||||
5. In section 4.1, removed the first two unnecessary calculations | ||||
and condensed the introduction of the section. | ||||
6. In section 4.1, added the use of the normative SHOULD for use of | ||||
at least 128 bits of entropy. | ||||
7. Added an informative reference to FIPS 180-4 for the SHA-256 | ||||
references. | ||||
8. Normalized the way that the "empty and non-empty authorization | ||||
information values" are referenced, which a few exceptions. | ||||
9. In section 4, revised the first sentence to explicitly reference | ||||
the use of the <domain:pw> and <contact:pw> elements for | ||||
password-based authorization information. | ||||
10. In section 4.4, revised the language associated with the storage | ||||
of the authorization information to be cleaner. | ||||
11. In section 4.4, added "set" in the sentence "An empty input | ||||
authorization information value MUST NOT match any set | ||||
authorization information value." | ||||
12. In section 5.1 and 5.2, clarified the references to RFC5731 and | ||||
RFC5733 as examples of object extensions that use the | ||||
"eppcom:pwAuthInfoType" element. | ||||
13. In section 5.2, updated language for the validation of the | ||||
randomness of the authorization information, based on an offline | ||||
review by Barry Leiba, Benjamin Kaduk, and Roman Danyliw. | ||||
14. In section 9, changed "49 bits of entropy" to "128 bits of | ||||
entropy". | ||||
In section 3, replaced the reference to BCP with operational | ||||
practice, since the draft is not defined as a BCP. | ||||
A.11. Change from REGEXT 06 to REGEXT 07 | ||||
1. Updates based on the Lars Eggert feedback: | ||||
1. Updated Section 1, Paragraph 4 to read "The operational | ||||
practice will require the client to not store the | ||||
authorization information and". | ||||
2. Updated each of the example references to end with a colon | ||||
instead of a period. | ||||
3. Updated Section 1, Paragraph 3 to read "provide secure | ||||
authorization information used for transfers." | ||||
4. Updated Section 3, Paragraph 3 to read "extension services | ||||
can expect". | ||||
5. Updated Section 4, Paragraph 2 to read "authorization | ||||
information to be secure, it must". | ||||
6. Updated Section 4.2, Paragraph 2 to read "authorization | ||||
information by the sponsoring registrar, the". | ||||
7. Updated Section 4.2, Paragraph 2 to read "proprietary | ||||
registrar-specific criteria, which". | ||||
8. Updated Section 4.3, Paragraph 3 to read "256-bit hash | ||||
function, such as SHA-256". | ||||
9. Updated Section 4.3, Paragraph 3 to read "a NULL (undefined) | ||||
value". | ||||
10. Updated Section 5, Paragraph 2 to read "To secure the | ||||
transfer process using secure authorization". | ||||
11. Updated Section 5.2, Paragraph 6 to read "Often, the | ||||
registrar has the "clientTransferProhibited" status set". | ||||
12. Updated Section 5.2, Paragraph 9 to read "MUST cancel cancel | ||||
the transfer process by unsetting the authorization | ||||
information value and MAY add back statuses". | ||||
13. Updated Section 5.2, Paragraph 9 to read | ||||
""eppcom:pwAuthInfoType" element can have". | ||||
2. Updated the first sentence of the abstract and introduction based | ||||
on the Rob Wilton feedback to help non-EPP readers on the what | ||||
and the who for transfers. | ||||
3. Removed the duplicate first paragraph of section 5.2 based on | ||||
feedback from Francesca Palombini. | ||||
4. Updates based on the Benjamin Kaduk feedback: | ||||
1. Added the second paragraph in the Introduction to provide | ||||
high-level motivation for the work. | ||||
2. Updated Section 1, changed "in any way" to "in any | ||||
substantial way". | ||||
3. Updated Section 1 by adding the sentence "All of these | ||||
features are compatible with the EPP RFCs, though not | ||||
mandatory to implement." for the "Short-Lived Authorization | ||||
Information". | ||||
4. Updated the description of "Short-Lived Authorization | The authors wish to thank the following persons for their feedback | |||
Information" in Section 1 to reference section 2.6 of | and suggestions: Michael Bauland, Martin Casanova, Scott Hollenbeck, | |||
RFC5731 and change in nature of the authorization | Benjamin Kaduk, Jody Kolker, Barry Leiba, Patrick Mevzek, Matthew | |||
information. | Pozun, Srikanth Veeramachaneni, and Ulrich Wisser. | |||
5. Updated Section 4.1, Paragraph 1 and 2 were merged with | ||||
modified language proposed by Benjamin Kaduk, which included | ||||
removing the reference to RFC4086 for length and entropy. | ||||
6. Updated rule #1 of Section 4.1 to add a second clarifying | ||||
sentence for what is meant by input authorization | ||||
information. | ||||
7. Updated Section 4.1 by replacing the last paragraph "The | ||||
strength of the random..." with a revised version. | ||||
8. Updated "retrieves the stored authorization information | ||||
locally" with "retrieves the locally stored authorization | ||||
information". | ||||
9. Updated Section 6.1 to include the recommendation that the | ||||
registry provide notice of the Info Response change. | ||||
10. Updated Section 6.2 to include the sentence "This requires | ||||
that the stored values are self-identifying as being in | ||||
hashed or encrypted form" for the "Supporting Comparing | ||||
Against Encrypted and Hashed Authorization Information" | ||||
step. | ||||
11. Updated Section 6.3 to include the recommendation that the | ||||
registry provide notice of the Create Command change. | ||||
12. Updated "written to any logs by the registrar or the | ||||
registry" to "written to any logs by a registrar or the | ||||
registry" to cover both the losing and the gaining | ||||
registrar. | ||||
13. Updated references to "with a random salt" to "with a per- | ||||
authorization information random salt, with at least 128 | ||||
bits" to address sharing of salts and the size of the salts. | ||||
14. Updated the first paragraph of Section 9 to remove the | ||||
reference to defining a server policy for the length and set | ||||
of characters that are included in the randomization to | ||||
target the target entropy level. | ||||
15. Updated Section 9 by removing the sentence "A random number | ||||
generator (RNG) is preferable over the use of a pseudorandom | ||||
number generator (PRNG) when creating the authorization | ||||
information value." | ||||
16. Changed FIPS-140-2 from a normative reference to an | ||||
informative reference. | ||||
Authors' Addresses | Authors' Addresses | |||
James Gould | James Gould | |||
VeriSign, Inc. | Verisign, Inc. | |||
12061 Bluemont Way | 12061 Bluemont Way | |||
Reston, VA 20190 | Reston, VA 20190 | |||
United States of America | United States of America | |||
Email: jgould@verisign.com | Email: jgould@verisign.com | |||
URI: http://www.verisign.com | URI: https://www.verisign.com | |||
Richard Wilhelm | Richard Wilhelm | |||
VeriSign, Inc. | Verisign, Inc. | |||
12061 Bluemont Way | 12061 Bluemont Way | |||
Reston, VA 20190 | Reston, VA 20190 | |||
United States of America | United States of America | |||
Email: rwilhelm@verisign.com | Email: 4rickwilhelm@gmail.com | |||
URI: http://www.verisign.com | URI: https://www.verisign.com | |||
End of changes. 148 change blocks. | ||||
823 lines changed or deleted | 522 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |