| rfc6885.original | rfc6885.txt | |||
|---|---|---|---|---|
| Network Working Group M. Blanchet | Internet Engineering Task Force (IETF) M. Blanchet | |||
| Internet-Draft Viagenie | Request for Comments: 6885 Viagenie | |||
| Intended status: Informational A. Sullivan | Category: Informational A. Sullivan | |||
| Expires: July 26, 2013 Dyn, Inc. | ISSN: 2070-1721 Dyn, Inc. | |||
| January 22, 2013 | March 2013 | |||
| Stringprep Revision and PRECIS Problem Statement | Stringprep Revision and Problem Statement | |||
| draft-ietf-precis-problem-statement-09.txt | for the Preparation and Comparison of Internationalized Strings (PRECIS) | |||
| Abstract | Abstract | |||
| If a protocol expects to compare two strings and is prepared only for | If a protocol expects to compare two strings and is prepared only for | |||
| those strings to be ASCII, then using Unicode codepoints in those | those strings to be ASCII, then using Unicode code points in those | |||
| strings requires they be prepared somehow. Internationalizing Domain | strings requires they be prepared somehow. Internationalizing Domain | |||
| Names in Applications (here called IDNA2003) defined and used | Names in Applications (here called IDNA2003) defined and used | |||
| Stringprep and Nameprep. Other protocols subsequently defined | Stringprep and Nameprep. Other protocols subsequently defined | |||
| Stringprep profiles. A new approach different from Stringprep and | Stringprep profiles. A new approach different from Stringprep and | |||
| Nameprep is used for a revision of IDNA2003 (called IDNA2008). Other | Nameprep is used for a revision of IDNA2003 (called IDNA2008). Other | |||
| Stringprep profiles need to be similarly updated or a replacement of | Stringprep profiles need to be similarly updated, or a replacement of | |||
| Stringprep needs to be designed. This document outlines the issues | Stringprep needs to be designed. This document outlines the issues | |||
| to be faced by those designing a Stringprep replacement. | to be faced by those designing a Stringprep replacement. | |||
| Status of this Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | ||||
| provisions of BCP 78 and BCP 79. | ||||
| Internet-Drafts are working documents of the Internet Engineering | This document is not an Internet Standards Track specification; it is | |||
| Task Force (IETF). Note that other groups may also distribute | published for informational purposes. | |||
| working documents as Internet-Drafts. The list of current Internet- | ||||
| Drafts is at http://datatracker.ietf.org/drafts/current/. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | 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). Not all documents | |||
| approved by the IESG are a candidate for any level of Internet | ||||
| Standard; see Section 2 of RFC 5741. | ||||
| This Internet-Draft will expire on July 26, 2013. | Information about the current status of this document, any errata, | |||
| and how to provide feedback on it may be obtained at | ||||
| http://www.rfc-editor.org/info/rfc6885. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2013 IETF Trust and the persons identified as the | Copyright (c) 2013 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 | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Keywords . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 2. Keywords . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 3. Conventions . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 3. Conventions . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 4. Stringprep Profiles Limitations . . . . . . . . . . . . . . . 6 | 4. Stringprep Profiles Limitations . . . . . . . . . . . . . . . 5 | |||
| 5. Major Topics for Consideration . . . . . . . . . . . . . . . . 7 | 5. Major Topics for Consideration . . . . . . . . . . . . . . . . 7 | |||
| 5.1. Comparison . . . . . . . . . . . . . . . . . . . . . . . . 7 | 5.1. Comparison . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 5.1.1. Types of Identifiers . . . . . . . . . . . . . . . . . 7 | 5.1.1. Types of Identifiers . . . . . . . . . . . . . . . . . 7 | |||
| 5.1.2. Effect of comparison . . . . . . . . . . . . . . . . . 8 | 5.1.2. Effect of Comparison . . . . . . . . . . . . . . . . . 7 | |||
| 5.2. Dealing with characters . . . . . . . . . . . . . . . . . 8 | 5.2. Dealing with Characters . . . . . . . . . . . . . . . . . 8 | |||
| 5.2.1. Case folding, case sensitivity, and case | 5.2.1. Case Folding, Case Sensitivity, and Case | |||
| preservation . . . . . . . . . . . . . . . . . . . . . 8 | Preservation . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 5.2.2. Stringprep and NFKC . . . . . . . . . . . . . . . . . 8 | 5.2.2. Stringprep and NFKC . . . . . . . . . . . . . . . . . 8 | |||
| 5.2.3. Character mapping . . . . . . . . . . . . . . . . . . 9 | 5.2.3. Character Mapping . . . . . . . . . . . . . . . . . . 9 | |||
| 5.2.4. Prohibited characters . . . . . . . . . . . . . . . . 9 | 5.2.4. Prohibited Characters . . . . . . . . . . . . . . . . 9 | |||
| 5.2.5. Internal structure, delimiters, and special | 5.2.5. Internal Structure, Delimiters, and Special | |||
| characters . . . . . . . . . . . . . . . . . . . . . . 9 | Characters . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 5.2.6. Restrictions because of glyph similarity . . . . . . . 10 | 5.2.6. Restrictions Because of Glyph Similarity . . . . . . . 10 | |||
| 5.3. Where the data comes from and where it goes . . . . . . . 10 | 5.3. Where the Data Comes from and Where It Goes . . . . . . . 10 | |||
| 5.3.1. User input and the source of protocol elements . . . . 10 | 5.3.1. User Input and the Source of Protocol Elements . . . . 10 | |||
| 5.3.2. User output . . . . . . . . . . . . . . . . . . . . . 11 | 5.3.2. User Output . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 5.3.3. Operations . . . . . . . . . . . . . . . . . . . . . . 11 | 5.3.3. Operations . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 6. Considerations for Stringprep replacement . . . . . . . . . . 12 | 6. Considerations for Stringprep Replacement . . . . . . . . . . 12 | |||
| 7. Security Considerations . . . . . . . . . . . . . . . . . . . 13 | 7. Security Considerations . . . . . . . . . . . . . . . . . . . 13 | |||
| 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 13 | 8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 9. Discussion home for this draft . . . . . . . . . . . . . . . . 13 | 9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 13 | 9.1. Normative References . . . . . . . . . . . . . . . . . . . 13 | |||
| 11. Informative References . . . . . . . . . . . . . . . . . . . . 14 | 9.2. Informative References . . . . . . . . . . . . . . . . . . 14 | |||
| Appendix A. Classification of Stringprep Profiles . . . . . . . . 18 | Appendix A. Classification of Stringprep Profiles . . . . . . . . 17 | |||
| Appendix B. Evaluation of Stringprep Profiles . . . . . . . . . . 18 | Appendix B. Evaluation of Stringprep Profiles . . . . . . . . . . 18 | |||
| B.1. iSCSI Stringprep Profile: RFC3722 (and RFC3721, | B.1. iSCSI Stringprep Profile: RFC 3722 (and RFC 3721, RFC | |||
| RFC3720) . . . . . . . . . . . . . . . . . . . . . . . . . 18 | 3720) . . . . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
| B.2. SMTP/POP3/ManageSieve Stringprep Profiles: | B.2. SMTP/POP3/ManageSieve Stringprep Profiles: RFC 4954, | |||
| RFC4954,RFC5034,RFC 5804 . . . . . . . . . . . . . . . . . 20 | RFC 5034, RFC 5804 . . . . . . . . . . . . . . . . . . . . 20 | |||
| B.3. IMAP Stringprep Profiles: RFC5738, RFC4314: Usernames . . 22 | B.3. IMAP Stringprep Profiles: RFC 5738, RFC 4314: Usernames . 22 | |||
| B.4. IMAP Stringprep Profiles: RFC5738: Passwords . . . . . . . 23 | B.4. IMAP Stringprep Profiles: RFC 5738: Passwords . . . . . . 24 | |||
| B.5. Anonymous SASL Stringprep Profiles: RFC4505 . . . . . . . 24 | B.5. Anonymous SASL Stringprep Profiles: RFC 4505 . . . . . . . 26 | |||
| B.6. XMPP Stringprep Profiles: RFC3920 Nodeprep . . . . . . . . 26 | B.6. XMPP Stringprep Profiles: RFC 3920 Nodeprep . . . . . . . 28 | |||
| B.7. XMPP Stringprep Profiles: RFC3920 Resourceprep . . . . . . 27 | B.7. XMPP Stringprep Profiles: RFC 3920 Resourceprep . . . . . 30 | |||
| B.8. EAP Stringprep Profiles: RFC3748 . . . . . . . . . . . . . 28 | B.8. EAP Stringprep Profiles: RFC 3748 . . . . . . . . . . . . 31 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 28 | ||||
| 1. Introduction | 1. Introduction | |||
| Internationalizing Domain Names in Applications (here called | Internationalizing Domain Names in Applications (here called | |||
| IDNA2003) [RFC3490], [RFC3491], [RFC3492], [RFC3454] describes a | IDNA2003) [RFC3490] [RFC3491] [RFC3492] and [RFC3454] describes a | |||
| mechanism for encoding Unicode labels making up Internationalized | mechanism for encoding Unicode labels that make up the | |||
| Domain Names (IDNs) as standard DNS labels. The labels were | Internationalized Domain Names (IDNs) as standard DNS labels. The | |||
| processed using a method called Nameprep [RFC3491] and Punycode | labels were processed using a method called Nameprep [RFC3491] and | |||
| [RFC3492]. That method was specific to IDNA2003, but is generalized | Punycode [RFC3492]. That method was specific to IDNA2003 but is | |||
| as Stringprep [RFC3454]. The general mechanism is used by other | generalized as Stringprep [RFC3454]. The general mechanism is used | |||
| protocols with similar needs, but with different constraints than | by other protocols with similar needs but with different constraints | |||
| IDNA2003. | than IDNA2003. | |||
| Stringprep defines a framework within which protocols define their | Stringprep defines a framework within which protocols define their | |||
| Stringprep profiles. Some known IETF specifications using Stringprep | Stringprep profiles. Some known IETF specifications using Stringprep | |||
| are listed below: | are listed below: | |||
| o The Nameprep profile [RFC3490] for use in Internationalized Domain | o The Nameprep profile [RFC3490] for use in Internationalized Domain | |||
| Names (IDNs); | Names (IDNs); | |||
| o IAX using Nameprep [RFC5456]; | ||||
| o The Inter-Asterisk eXchange (IAX) using Nameprep [RFC5456]; | ||||
| o NFSv4 [RFC3530] and NFSv4.1 [RFC5661]; | o NFSv4 [RFC3530] and NFSv4.1 [RFC5661]; | |||
| o The iSCSI profile [RFC3722] for use in Internet Small Computer | ||||
| Systems Interface (iSCSI) Names; | o The Internet Small Computer System Interface (iSCSI) profile | |||
| o EAP [RFC3748]; | [RFC3722] for use in iSCSI names; | |||
| o The Extensible Authentication Protocol (EAP) [RFC3748]; | ||||
| o The Nodeprep and Resourceprep profiles [RFC3920] for use in the | o The Nodeprep and Resourceprep profiles [RFC3920] for use in the | |||
| Extensible Messaging and Presence Protocol (XMPP), and the XMPP to | Extensible Messaging and Presence Protocol (XMPP), and the XMPP to | |||
| CPIM mapping [RFC3922] (the latter of these relies on the former); | Common Presence and Instant Messaging (CPIM) mapping [RFC3922] | |||
| o IRI and URI in XMPP [RFC5122]; | (the latter of these relies on the former); | |||
| o The Internationalized Resource Identifier (IRI) and URI in XMPP | ||||
| [RFC5122]; | ||||
| o The Policy MIB profile [RFC4011] for use in the Simple Network | o The Policy MIB profile [RFC4011] for use in the Simple Network | |||
| Management Protocol (SNMP); | Management Protocol (SNMP); | |||
| o TLS [RFC4279]; | ||||
| o The LDAP profile [RFC4518] for use with LDAP [RFC4511] and its | o Transport Layer Security (TLS) [RFC4279]; | |||
| authentication methods [RFC4513]; | ||||
| o The Lightweight Directory Access Protocol (LDAP) profile [RFC4518] | ||||
| for use with LDAP [RFC4511] and its authentication methods | ||||
| [RFC4513]; | ||||
| o PKIX subject identification using LDAPprep [RFC4683]; | o PKIX subject identification using LDAPprep [RFC4683]; | |||
| o PKIX CRL using LDAPprep [RFC5280]; | o PKIX Certificate Revocation List (CRL) using LDAPprep [RFC5280]; | |||
| o The SASLprep profile [RFC4013] for use in the Simple | ||||
| Authentication and Security Layer (SASL), and SASL itself | o The Simple Authentication and Security Layer (SASL) [RFC4422] and | |||
| [RFC4422]; | SASLprep profile [RFC4013] for use in SASL; | |||
| o Plain SASL using SASLprep [RFC4616]; | o Plain SASL using SASLprep [RFC4616]; | |||
| o SMTP Auth using SASLprep [RFC4954]; | o SMTP Auth using SASLprep [RFC4954]; | |||
| o POP3 Auth using SASLprep [RFC5034]; | ||||
| o TLS SRP using SASLprep [RFC5054]; | o The Post Office Protocol (POP3) Auth using SASLprep [RFC5034]; | |||
| o SASL SCRAM using SASLprep [RFC5802]; | ||||
| o TLS Secure Remote Password (SRP) using SASLprep [RFC5054]; | ||||
| o SASL Salted Challenge Response Authentication Mechanism (SCRAM) | ||||
| using SASLprep [RFC5802]; | ||||
| o Remote management of Sieve using SASLprep [RFC5804]; | o Remote management of Sieve using SASLprep [RFC5804]; | |||
| o NNTP using SASLprep [RFC4643]; | ||||
| o The Network News Transfer Protocol (NNTP) using SASLprep | ||||
| [RFC4643]; | ||||
| o IMAP4 using SASLprep [RFC4314]; | o IMAP4 using SASLprep [RFC4314]; | |||
| o The trace profile [RFC4505] for use with the SASL ANONYMOUS | o The trace profile [RFC4505] for use with the SASL ANONYMOUS | |||
| mechanism; | mechanism; | |||
| o Internet Application Protocol Collation Registry [RFC4790]; | o Internet Application Protocol Collation Registry [RFC4790]; | |||
| o The unicode-casemap Unicode Collation [RFC5051]. | o The unicode-casemap Unicode Collation [RFC5051]. | |||
| However, a review (see [ietf78precis]) of these protocol | However, a review (see [78PRECIS]) of these protocol specifications | |||
| specifications found that they are very similar and can be grouped | found that they are very similar and can be grouped into a short | |||
| into a short number of classes. Moreover, many reuse the same | number of classes. Moreover, many reuse the same Stringprep profile, | |||
| Stringprep profile, such as the SASL one. | such as the SASL one. | |||
| IDNA2003 was replaced because of some limitations described in | IDNA2003 was replaced because of some limitations described in | |||
| [RFC4690]. The new IDN specification, called IDNA2008 [RFC5890], | [RFC4690]. The new IDN specification, called IDNA2008 [RFC5890], | |||
| [RFC5891], [RFC5892], [RFC5893] was designed based on the | [RFC5891], [RFC5892], [RFC5893] was designed based on the | |||
| considerations found in [RFC5894]. One of the effects of IDNA2008 is | considerations found in [RFC5894]. One of the effects of IDNA2008 is | |||
| that Nameprep and Stringprep are not used at all. Instead, an | that Nameprep and Stringprep are not used at all. Instead, an | |||
| algorithm based on Unicode properties of codepoints is defined. That | algorithm based on Unicode properties of code points is defined. | |||
| algorithm generates a stable and complete table of the supported | That algorithm generates a stable and complete table of the supported | |||
| Unicode codepoints for each Unicode version. This algorithm uses an | Unicode code points for each Unicode version. This algorithm uses an | |||
| inclusion-based approach, instead of the exclusion-based approach of | inclusion-based approach, instead of the exclusion-based approach of | |||
| Stringprep/Nameprep. That is, IDNA2003 created an explicit list of | Stringprep/Nameprep. That is, IDNA2003 created an explicit list of | |||
| excluded or mapped-away characters; anything in Unicode 3.2 that was | excluded or mapped-away characters; anything in Unicode 3.2 that was | |||
| not so listed could be assumed to be allowed under the protocol. | not so listed could be assumed to be allowed under the protocol. | |||
| IDNA2008 begins instead from the assumption that code points are | IDNA2008 begins instead from the assumption that code points are | |||
| disallowed, and then relies on Unicode properties to derive whether a | disallowed and then relies on Unicode properties to derive whether a | |||
| given code point actually is allowed in the protocol. | given code point actually is allowed in the protocol. | |||
| This document lists the shortcomings and issues found by protocols | This document lists the shortcomings and issues found by protocols | |||
| listed above that defined Stringprep profiles. It also lists the | listed above that defined Stringprep profiles. It also lists the | |||
| requirements for any potential replacement of Stringprep. | requirements for any potential replacement of Stringprep. | |||
| 2. Keywords | 2. Keywords | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
| document are to be interpreted as described in [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
| This document uses various internationalization terms, which are | This document uses various internationalization terms, which are | |||
| defined and discussed in [RFC6365]. | defined and discussed in [RFC6365]. | |||
| Additionally, this document defines the following keyword: | Additionally, this document defines the following keyword: | |||
| o PRECIS: Preparation and Comparison of Internationalized Strings | ||||
| PRECIS: Preparation and Comparison of Internationalized Strings | ||||
| 3. Conventions | 3. Conventions | |||
| A single Unicode code point in this memo is denoted by "U+" followed | A single Unicode code point in this memo is denoted by "U+" followed | |||
| by four to six hexadecimal digits, as used in [Unicode61], Appendix | by four to six hexadecimal digits, as used in [Unicode61], | |||
| A. | Appendix A. | |||
| 4. Stringprep Profiles Limitations | 4. Stringprep Profiles Limitations | |||
| During IETF 77 (March 2010), a BOF discussed the current state of the | During IETF 77 (March 2010), a BOF discussed the current state of the | |||
| protocols that have defined Stringprep profiles [NEWPREP]. The main | protocols that have defined Stringprep profiles [NEWPREP]. The main | |||
| conclusions from that discussion were as follows: | conclusions from that discussion were as follows: | |||
| o Stringprep is bound to version 3.2 of Unicode. Stringprep has not | ||||
| o Stringprep is bound to Version 3.2 of Unicode. Stringprep has not | ||||
| been updated to new versions of Unicode. Therefore, the protocols | been updated to new versions of Unicode. Therefore, the protocols | |||
| using Stringprep are stuck at Unicode 3.2, and their | using Stringprep are stuck at Unicode 3.2, and their | |||
| specifications need to be updated to support new versions of | specifications need to be updated to support new versions of | |||
| Unicode. | Unicode. | |||
| o The protocols would like to not be bound to a specific version of | o The protocols would like to not be bound to a specific version of | |||
| Unicode, but rather have better Unicode version agility in the way | Unicode, but rather have better Unicode version agility in the way | |||
| of IDNA2008. This is important partly because it is usually | of IDNA2008. This is important partly because it is usually | |||
| impossible for an application to require Unicode 3.2; the | impossible for an application to require Unicode 3.2; the | |||
| application gets whatever version of Unicode is available on the | application gets whatever version of Unicode is available on the | |||
| host. | host. | |||
| o The protocols require better bidirectional support (bidi) than | o The protocols require better bidirectional support (bidi) than | |||
| currently offered by Stringprep. | currently offered by Stringprep. | |||
| o If the protocols are updated to use a new version of Stringprep or | o If the protocols are updated to use a new version of Stringprep or | |||
| another framework, then backward compatibility is an important | another framework, then backward compatibility is an important | |||
| requirement. For example, Stringprep normalization is based on | requirement. For example, Stringprep normalization is based on | |||
| and profiles may use Unicode Normalization Form KC (NFKC) [UAX15], | and profiles may use Unicode Normalization Form KC (NFKC) [UAX15], | |||
| while IDNA2008 mostly uses Unicode Normalization Form C (NFC) | while IDNA2008 mostly uses Unicode Normalization Form C (NFC) | |||
| [UAX15]. | [UAX15]. | |||
| o Identifiers are passed between protocols. For example, the same | o Identifiers are passed between protocols. For example, the same | |||
| username string of codepoints may be passed between SASL, XMPP, | username string of code points may be passed between SASL, XMPP, | |||
| LDAP and EAP. Therefore, common set of rules or classes of | LDAP, and EAP. Therefore, a common set of rules or classes of | |||
| strings are preferred over specific rules for each protocol. | strings are preferred over specific rules for each protocol. | |||
| Without real planning in advance, many Stringprep profiles reuse | Without real planning in advance, many Stringprep profiles reuse | |||
| other profiles, so this goal was accomplished by accident with | other profiles, so this goal was accomplished by accident with | |||
| Stringprep. | Stringprep. | |||
| Protocols that use Stringprep profiles use strings for different | Protocols that use Stringprep profiles use strings for different | |||
| purposes: | purposes: | |||
| o XMPP uses a different Stringprep profile for each part of the XMPP | o XMPP uses a different Stringprep profile for each part of the XMPP | |||
| address (JID): a localpart which is similar to a username and used | address Jabber Identifier (JID): a localpart, which is similar to | |||
| for authentication, a domainpart which is a domain name, and a | a username and used for authentication; a domainpart, which is a | |||
| resource part which is less restrictive than the localpart. | domain name; and a resourcepart, which is less restrictive than | |||
| the localpart. | ||||
| o iSCSI uses a Stringprep profile for the names of protocol | o iSCSI uses a Stringprep profile for the names of protocol | |||
| participants (called initiators and targets). The IQN format of | participants (called initiators and targets). The iSCSI Qualified | |||
| iSCSI names contains a reversed DNS domain name. | Name (IQN) format of iSCSI names contains a reversed DNS domain | |||
| o SASL and LDAP uses a Stringprep profile for usernames. | name. | |||
| o SASL and LDAP use a Stringprep profile for usernames. | ||||
| o LDAP uses a set of Stringprep profiles. | o LDAP uses a set of Stringprep profiles. | |||
| The apparent judgement of the BOF attendees [NEWPREP] was that it | The apparent judgement of the BOF attendees [NEWPREP] was that it | |||
| would be highly desirable to have a replacement of Stringprep, with | would be highly desirable to have a replacement of Stringprep, with | |||
| similar characteristics to IDNA2008. That replacement should be | similar characteristics to IDNA2008. That replacement should be | |||
| defined so that the protocols could use internationalized strings | defined so that the protocols could use internationalized strings | |||
| without a lot of specialized internationalization work, since | without a lot of specialized internationalization work, since | |||
| internationalization expertise is not available in the respective | internationalization expertise is not available in the respective | |||
| protocols or working groups. Accordingly, the IESG formed the PRECIS | protocols or working groups. Accordingly, the IESG formed the PRECIS | |||
| working group to undertake the task. | working group to undertake the task. | |||
| skipping to change at page 7, line 29 | skipping to change at page 7, line 18 | |||
| This section provides an overview of major topics that a Stringprep | This section provides an overview of major topics that a Stringprep | |||
| replacement needs to address. The headings correspond roughly with | replacement needs to address. The headings correspond roughly with | |||
| categories under which known Stringprep-using protocol RFCs have been | categories under which known Stringprep-using protocol RFCs have been | |||
| evaluated. For the details of those evaluations, see Appendix A. | evaluated. For the details of those evaluations, see Appendix A. | |||
| 5.1. Comparison | 5.1. Comparison | |||
| 5.1.1. Types of Identifiers | 5.1.1. Types of Identifiers | |||
| Following [I-D.iab-identifier-comparison], it is possible to organize | Following [ID-COMP], it is possible to organize identifiers into | |||
| identifiers into three classes in respect of how they may be compared | three classes in respect of how they may be compared with one | |||
| with one another: | another: | |||
| Absolute Identifiers Identifiers that can be compared byte-by-byte | Absolute Identifiers: Identifiers that can be compared byte-by-byte | |||
| for equality. | for equality. | |||
| Definite Identifiers Identifiers that have a well-defined comparison | ||||
| algorithm on which all parties agree. | Definite Identifiers: Identifiers that have a well-defined | |||
| Indefinite Identifiers Identifiers that have no single comparison | comparison algorithm on which all parties agree. | |||
| Indefinite Identifiers: Identifiers that have no single comparison | ||||
| algorithm on which all parties agree. | algorithm on which all parties agree. | |||
| Definite Identifiers include cases like the comparison of Unicode | Definite Identifiers include cases like the comparison of Unicode | |||
| code points in different encodings: they do not match byte for byte, | code points in different encodings: they do not match byte for byte | |||
| but can all be converted to a single encoding which then does match | but can all be converted to a single encoding which then does match | |||
| byte for byte. Indefinite Identifiers are sometimes algorithmically | byte for byte. Indefinite Identifiers are sometimes algorithmically | |||
| comparable by well-specified subsets of parties. For more discussion | comparable by well-specified subsets of parties. For more discussion | |||
| of these categories, see [I-D.iab-identifier-comparison]. | of these categories, see [ID-COMP]. | |||
| The section on treating the existing known cases, Appendix A uses the | The section on treating the existing known cases, Appendix A, uses | |||
| categories above. | the categories above. | |||
| 5.1.2. Effect of comparison | 5.1.2. Effect of Comparison | |||
| The three classes of comparison style outlined in Section 5.1.1 may | The three classes of comparison style outlined in Section 5.1.1 may | |||
| have different effects when applied. It is necessary to evaluate the | have different effects when applied. It is necessary to evaluate the | |||
| effects if a comparison results in a false positive, and what the | effects if a comparison results in a false positive or a false | |||
| effects are if a comparison results in a false negative, especially | negative, especially in terms of the consequences to security and | |||
| in terms of the consequences to security and usability. | usability. | |||
| 5.2. Dealing with characters | 5.2. Dealing with Characters | |||
| This section outlines a range of issues having to do with characters | This section outlines a range of issues having to do with characters | |||
| in the target protocols, and outlines the ways in which IDNA2008 | in the target protocols, the ways in which IDNA2008 might be a good | |||
| might be a good analogy to other protocols, and ways in which it | analogy to other protocols, and ways in which it might be a poor one. | |||
| might be a poor one. | ||||
| 5.2.1. Case folding, case sensitivity, and case preservation | 5.2.1. Case Folding, Case Sensitivity, and Case Preservation | |||
| In IDNA2003, labels are always mapped to lower case before the | In IDNA2003, labels are always mapped to lowercase before the | |||
| Punycode transformation. In IDNA2008, there is no mapping at all: | Punycode transformation. In IDNA2008, there is no mapping at all: | |||
| input is either a valid U-label or it is not. At the same time, | input is either a valid U-label or it is not. At the same time, | |||
| upper-case characters are by definition not valid U-labels, because | uppercase characters are by definition not valid U-labels, because | |||
| they fall into the Unstable category (category B) of [RFC5892]. | they fall into the Unstable category (category B) of [RFC5892]. | |||
| If there are protocols that require upper and lower cases be | If there are protocols that require case be preserved, then the | |||
| preserved, then the analogy with IDNA2008 will break down. | analogy with IDNA2008 will break down. Accordingly, existing | |||
| Accordingly, existing protocols are to be evaluated according to the | protocols are to be evaluated according to the following criteria: | |||
| following criteria: | ||||
| 1. Does the protocol use case folding? For all blocks of code | 1. Does the protocol use case folding? For all blocks of code | |||
| points, or just for certain subsets? | points or just for certain subsets? | |||
| 2. Is the system or protocol case sensitive? | ||||
| 2. Is the system or protocol case-sensitive? | ||||
| 3. Does the system or protocol preserve case? | 3. Does the system or protocol preserve case? | |||
| 5.2.2. Stringprep and NFKC | 5.2.2. Stringprep and NFKC | |||
| Stringprep profiles may use normalization. If they do, they use NFKC | Stringprep profiles may use normalization. If they do, they use NFKC | |||
| [UAX15] (most profiles do). It is not clear that NFKC is the right | [UAX15] (most profiles do). It is not clear that NFKC is the right | |||
| normalization to use in all cases. In [UAX15], there is the | normalization to use in all cases. In [UAX15], there is the | |||
| following observation regarding Normalization Forms KC and KD: "It is | following observation regarding Normalization Forms KC and KD: "It is | |||
| best to think of these Normalization Forms as being like uppercase or | best to think of these Normalization Forms as being like uppercase or | |||
| lowercase mappings: useful in certain contexts for identifying core | lowercase mappings: useful in certain contexts for identifying core | |||
| meanings, but also performing modifications to the text that may not | meanings, but also performing modifications to the text that may not | |||
| always be appropriate." In general, it can be said that NFKC is more | always be appropriate." In general, it can be said that NFKC is more | |||
| aggressive about finding matches between codepoints than NFC. For | aggressive about finding matches between code points than NFC. For | |||
| things like the spelling of users' names, then, NFKC may not be the | things like the spelling of users' names, NFKC may not be the best | |||
| best form to use. At the same time, one of the nice things about | form to use. At the same time, one of the nice things about NFKC is | |||
| NFKC is that it deals with the width of characters that are otherwise | that it deals with the width of characters that are otherwise | |||
| similar, by canonicalizing half-width to full-width. This mapping | similar, by canonicalizing half-width to full-width. This mapping | |||
| step can be crucial in practice. A replacement for Stringprep | step can be crucial in practice. A replacement for Stringprep | |||
| depends on analyzing the different use profiles and considering | depends on analyzing the different use profiles and considering | |||
| whether NFKC or NFC is a better normalization for each profile. | whether NFKC or NFC is a better normalization for each profile. | |||
| For the purposes of evaluating an existing example of Stringprep use, | For the purposes of evaluating an existing example of Stringprep use, | |||
| it is helpful to know whether it uses no normalization, NFKC, or NFC. | it is helpful to know whether it uses no normalization, NFKC, or NFC. | |||
| 5.2.3. Character mapping | 5.2.3. Character Mapping | |||
| Along with the case mapping issues raised in Section 5.2.1, there is | Along with the case mapping issues raised in Section 5.2.1, there is | |||
| the question of whether some characters are mapped either to other | the question of whether some characters are mapped either to other | |||
| characters or to nothing during Stringprep. [RFC3454], Section 3, | characters or to nothing during Stringprep. [RFC3454], Section 3, | |||
| outlines a number of characters that are mapped to nothing, and also | outlines a number of characters that are mapped to nothing, and also | |||
| permits Stringprep profiles to define their own mappings. | permits Stringprep profiles to define their own mappings. | |||
| 5.2.4. Prohibited characters | 5.2.4. Prohibited Characters | |||
| Along with case folding and other character mappings, many protocols | Along with case folding and other character mappings, many protocols | |||
| have characters that are simply disallowed. For example, control | have characters that are simply disallowed. For example, control | |||
| characters and special characters such as "@" or "/" may be | characters and special characters such as "@" or "/" may be | |||
| prohibited in a protocol. | prohibited in a protocol. | |||
| One of the primary changes of IDNA2008 is in the way it approaches | One of the primary changes of IDNA2008 is in the way it approaches | |||
| Unicode code points, using the new inclusion-based approach (see | Unicode code points, using the new inclusion-based approach (see | |||
| Section 1). | Section 1). | |||
| skipping to change at page 9, line 42 | skipping to change at page 9, line 36 | |||
| by the protocol"; this is unlike IDNA2003. While some code points | by the protocol"; this is unlike IDNA2003. While some code points | |||
| are disallowed outright, some are allowed only in certain contexts. | are disallowed outright, some are allowed only in certain contexts. | |||
| The reasons for the context-dependent rules have to do with the way | The reasons for the context-dependent rules have to do with the way | |||
| some characters are used. For instance, the ZERO WIDTH JOINER and | some characters are used. For instance, the ZERO WIDTH JOINER and | |||
| ZERO WIDTH NON-JOINER (ZWJ, U+200D and ZWNJ, U+200C) are allowed with | ZERO WIDTH NON-JOINER (ZWJ, U+200D and ZWNJ, U+200C) are allowed with | |||
| contextual rules because they are required in some circumstances, yet | contextual rules because they are required in some circumstances, yet | |||
| are considered punctuation by Unicode and would therefore be | are considered punctuation by Unicode and would therefore be | |||
| DISALLOWED under the usual IDNA2008 derivation rules. The goal of | DISALLOWED under the usual IDNA2008 derivation rules. The goal of | |||
| IDNA2008 is to provide the widest repertoire of code points possible | IDNA2008 is to provide the widest repertoire of code points possible | |||
| and consistent with the traditional DNS "LDH" (letters, digits, | and consistent with the traditional DNS "LDH" (letters, digits, | |||
| hyphen; see [RFC0952]) rule, trusting to the operators of individual | hyphen) rule (see [RFC0952]), trusting to the operators of individual | |||
| zones to make sensible (and usually more restrictive) policies for | zones to make sensible (and usually more restrictive) policies for | |||
| their zones. | their zones. | |||
| 5.2.5. Internal structure, delimiters, and special characters | 5.2.5. Internal Structure, Delimiters, and Special Characters | |||
| IDNA2008 has a special problem with delimiters, because the delimiter | IDNA2008 has a special problem with delimiters, because the delimiter | |||
| "character" in the DNS wire format is not really part of the data. | "character" in the DNS wire format is not really part of the data. | |||
| In DNS, labels are not separated exactly; instead, a label carries | In DNS, labels are not separated exactly; instead, a label carries | |||
| with it an indicator that says how long the label is. When the label | with it an indicator that says how long the label is. When the label | |||
| is presented in presentation format as part of a fully qualified | is displayed in presentation format as part of a fully qualified | |||
| domain name, the label separator FULL STOP, U+002E (.) is used to | domain name, the label separator FULL STOP, U+002E (.) is used to | |||
| break up the labels. But because that label separator does not | break up the labels. But because that label separator does not | |||
| travel with the wire format of the domain name, there is no way to | travel with the wire format of the domain name, there is no way to | |||
| encode a different, "internationalized" separator in IDNA2008. | encode a different, "internationalized" separator in IDNA2008. | |||
| Other protocols may include characters with similar special meaning | Other protocols may include characters with similar special meaning | |||
| within the protocol. Common characters for these purposes include | within the protocol. Common characters for these purposes include | |||
| FULL STOP, U+002E (.); COMMERCIAL AT, U+0040 (@); HYPHEN-MINUS, | FULL STOP, U+002E (.); COMMERCIAL AT, U+0040 (@); HYPHEN-MINUS, | |||
| U+002D (-); SOLIDUS, U+002F (/); and LOW LINE, U+005F (_). The mere | U+002D (-); SOLIDUS, U+002F (/); and LOW LINE, U+005F (_). The mere | |||
| inclusion of such a character in the protocol is not enough for it to | inclusion of such a character in the protocol is not enough for it to | |||
| be considered similar to another protocol using the same character; | be considered similar to another protocol using the same character; | |||
| instead, handling of the character must be taken into consideration | instead, handling of the character must be taken into consideration | |||
| as well. | as well. | |||
| An important issue to tackle here is whether it is valuable to map to | An important issue to tackle here is whether it is valuable to map to | |||
| or from these special characters as part of the Stringprep | or from these special characters as part of the Stringprep | |||
| replacement. In some locales, the analogue to FULL STOP, U+002E is | replacement. In some locales, the analogue to FULL STOP, U+002E is | |||
| some other character, and users may expect to be able to substitute | some other character, and users may expect to be able to substitute | |||
| their normal stop for FULL STOP, U+002E. At the same time, there are | their normal stop for FULL STOP, U+002E. At the same time, there are | |||
| predictability arguments in favour of treating identifiers with FULL | predictability arguments in favor of treating identifiers with FULL | |||
| STOP, U+002E in them just the way they are treated under IDNA2008. | STOP, U+002E in them just the way they are treated under IDNA2008. | |||
| 5.2.6. Restrictions because of glyph similarity | 5.2.6. Restrictions Because of Glyph Similarity | |||
| Homoglyphs are similarly (or identically) rendered glyphs of | Homoglyphs are similarly (or identically) rendered glyphs of | |||
| different codepoints. For DNS names, homoglyphs may enable phishing. | different code points. For DNS names, homoglyphs may enable | |||
| If a protocol requires some visual comparison by end-users, then the | phishing. If a protocol requires some visual comparison by end- | |||
| issue of homoglyphs is to be considered. In the DNS context, theses | users, then the issue of homoglyphs is to be considered. In the DNS | |||
| issues are documented in [RFC5894] and [RFC4690]. IDNA2008 does not, | context, these issues are documented in [RFC5894] and [RFC4690]. | |||
| however, have a mechanism to deal with them, trusting to DNS zone | However, IDNA2008 does not have a mechanism to deal with them, | |||
| operators to enact sensible policies for the subset of Unicode they | trusting DNS zone operators to enact sensible policies for the subset | |||
| wish to support, given their user community. A similar policy/ | of Unicode they wish to support, given their user community. A | |||
| protocol split may not be desirable in every protocol. | similar policy/protocol split may not be desirable in every protocol. | |||
| 5.3. Where the data comes from and where it goes | 5.3. Where the Data Comes from and Where It Goes | |||
| 5.3.1. User input and the source of protocol elements | 5.3.1. User Input and the Source of Protocol Elements | |||
| Some protocol elements are provided by users, and others are not. | Some protocol elements are provided by users, and others are not. | |||
| Those that are not may presumably be subject to greater restrictions, | Those that are not may presumably be subject to greater restrictions, | |||
| whereas those that users provide likely need to permit the broadest | whereas those that users provide likely need to permit the broadest | |||
| range of code points. The following questions are helpful: | range of code points. The following questions are helpful: | |||
| 1. Do users input the strings directly? | 1. Do users input the strings directly? | |||
| 2. If so, how? (keyboard, stylus, voice, copy-paste, etc.) | 2. If so, how? (keyboard, stylus, voice, copy-paste, etc.) | |||
| 3. Where do we place the dividing line between user interface and | 3. Where do we place the dividing line between user interface and | |||
| protocol? (see [RFC5895]) | protocol? (see [RFC5895]) | |||
| 5.3.2. User output | 5.3.2. User Output | |||
| Just as only some protocol elements are expected to be entered | Just as only some protocol elements are expected to be entered | |||
| directly by users, only some protocol elements are intended to be | directly by users, only some protocol elements are intended to be | |||
| consumed directly by users. It is important to know how users are | consumed directly by users. It is important to know how users are | |||
| expected to be able to consume the protocol elements, because | expected to be able to consume the protocol elements, because | |||
| different environments present different challenges. An element that | different environments present different challenges. An element that | |||
| is only ever delivered as part of a vCard remains in machine-readable | is only ever delivered as part of a vCard remains in machine-readable | |||
| format, so the problem of visual confusion is not a great one. Is | format, so the problem of visual confusion is not a great one. Is | |||
| the protocol element published as part of a vCard, a web directory, | the protocol element published as part of a vCard, a web directory, | |||
| on a business card, or on "the side of a bus"? Do users use the | on a business card, or on "the side of a bus"? Do users use the | |||
| skipping to change at page 11, line 30 | skipping to change at page 11, line 28 | |||
| 5.3.3. Operations | 5.3.3. Operations | |||
| Some strings are useful as part of the protocol but are not used as | Some strings are useful as part of the protocol but are not used as | |||
| input to other operations (for instance, purely informative or | input to other operations (for instance, purely informative or | |||
| descriptive text). Other strings are used directly as input to other | descriptive text). Other strings are used directly as input to other | |||
| operations (such as cryptographic hash functions), or are used | operations (such as cryptographic hash functions), or are used | |||
| together with other strings to (such as concatenating a string with | together with other strings to (such as concatenating a string with | |||
| some others to form a unique identifier). | some others to form a unique identifier). | |||
| 5.3.3.1. String classes | 5.3.3.1. String Classes | |||
| Strings often have a similar function in different protocols. For | Strings often have a similar function in different protocols. For | |||
| instance, many different protocols contain user identifiers or | instance, many different protocols contain user identifiers or | |||
| passwords. A single profile for all such uses might be desirable. | passwords. A single profile for all such uses might be desirable. | |||
| Often, a string in a protocol is effectively a protocol element from | Often, a string in a protocol is effectively a protocol element from | |||
| another protocol. For instance, different systems might use the same | another protocol. For instance, different systems might use the same | |||
| credentials database for authentication. | credentials database for authentication. | |||
| 5.3.3.2. Community Considerations | 5.3.3.2. Community Considerations | |||
| skipping to change at page 12, line 18 | skipping to change at page 12, line 12 | |||
| point for use under IDNA2008. It does this by using the properties | point for use under IDNA2008. It does this by using the properties | |||
| of each code point to test its validity. | of each code point to test its validity. | |||
| This approach depends crucially on the idea that code points, once | This approach depends crucially on the idea that code points, once | |||
| valid for a protocol profile, will not later be made invalid. That | valid for a protocol profile, will not later be made invalid. That | |||
| is not a guarantee currently provided by Unicode. Properties of code | is not a guarantee currently provided by Unicode. Properties of code | |||
| points may change between versions of Unicode. Rarely, such a change | points may change between versions of Unicode. Rarely, such a change | |||
| could cause a given code point to become invalid under a protocol | could cause a given code point to become invalid under a protocol | |||
| profile, even though the code point would be valid with an earlier | profile, even though the code point would be valid with an earlier | |||
| version of Unicode. This is not merely a theoretical possibility, | version of Unicode. This is not merely a theoretical possibility, | |||
| because it has occurred ([RFC6452]). | because it has occurred [RFC6452]. | |||
| Accordingly, as in IDNA2008, a Stringprep replacement that intends to | Accordingly, as in IDNA2008, a Stringprep replacement that intends to | |||
| be Unicode version agnostic will need to work out a mechanism to | be Unicode version agnostic will need to work out a mechanism to | |||
| address cases where incompatible changes occur because of new Unicode | address cases where incompatible changes occur because of new Unicode | |||
| versions. | versions. | |||
| 6. Considerations for Stringprep replacement | 6. Considerations for Stringprep Replacement | |||
| The above suggests the following guidance: | The above suggests the following guidance: | |||
| o A Stringprep replacement should be defined. | o A Stringprep replacement should be defined. | |||
| o The replacement should take an approach similar to IDNA2008, (e.g. | ||||
| by using codepoint properties instead of codepoint whitelisting) | o The replacement should take an approach similar to IDNA2008 (e.g., | |||
| in that it enables better Unicode agility. | by using properties of code points instead of whitelisting of code | |||
| points), in that it enables better Unicode agility. | ||||
| o Protocols share similar characteristics of strings. Therefore, | o Protocols share similar characteristics of strings. Therefore, | |||
| defining internationalization preparation algorithms for the | defining internationalization preparation algorithms for the | |||
| smallest set of string classes may be sufficient for most cases, | smallest set of string classes may be sufficient for most cases, | |||
| providing coherence among a set of related protocols or protocols | providing coherence among a set of related protocols or protocols | |||
| where identifiers are exchanged. | where identifiers are exchanged. | |||
| o The sets of string classes need to be evaluated according to the | o The sets of string classes need to be evaluated according to the | |||
| considerations that make up the headings in Section 5 | considerations that make up the headings in Section 5 | |||
| o It is reasonable to limit scope to Unicode code points, and rule | ||||
| o It is reasonable to limit scope to Unicode code points and rule | ||||
| the mapping of data from other character encodings outside the | the mapping of data from other character encodings outside the | |||
| scope of this effort. | scope of this effort. | |||
| o The replacement ought at least to provide guidance to applications | ||||
| o The replacement ought to at least provide guidance to applications | ||||
| using the replacement on how to handle protocol incompatibilities | using the replacement on how to handle protocol incompatibilities | |||
| resulting from changes to Unicode. In an ideal world, the | resulting from changes to Unicode. In an ideal world, the | |||
| Stringprep replacement would handle the changes automatically, but | Stringprep replacement would handle the changes automatically, but | |||
| it appears that such automatic handling would require magic and | it appears that such automatic handling would require magic and | |||
| cannot be expected. | cannot be expected. | |||
| o Compatibility within each protocol between a technique that is | o Compatibility within each protocol between a technique that is | |||
| Stringprep-based and the technique's replacement has to be | Stringprep-based and the technique's replacement has to be | |||
| considered very carefully. | considered very carefully. | |||
| Existing deployments already depend on Stringprep profiles. | Existing deployments already depend on Stringprep profiles. | |||
| Therefore, a replacement must consider the effects of any new | Therefore, a replacement must consider the effects of any new | |||
| strategy on existing deployments. By way of comparison, it is worth | strategy on existing deployments. By way of comparison, it is worth | |||
| noting that some characters were acceptable in IDNA labels under | noting that some characters were acceptable in IDNA labels under | |||
| IDNA2003, but are not protocol-valid under IDNA2008 (and conversely); | IDNA2003, but are not protocol-valid under IDNA2008 (and conversely); | |||
| disagreement about what to do during the transition has resulted in | disagreement about what to do during the transition has resulted in | |||
| skipping to change at page 13, line 19 | skipping to change at page 13, line 19 | |||
| IDNA2003, but are not protocol-valid under IDNA2008 (and conversely); | IDNA2003, but are not protocol-valid under IDNA2008 (and conversely); | |||
| disagreement about what to do during the transition has resulted in | disagreement about what to do during the transition has resulted in | |||
| different approaches to mapping. Different implementers may make | different approaches to mapping. Different implementers may make | |||
| different decisions about what to do in such cases; this could have | different decisions about what to do in such cases; this could have | |||
| interoperability effects. It is necessary to trade better support | interoperability effects. It is necessary to trade better support | |||
| for different linguistic environments against the potential side | for different linguistic environments against the potential side | |||
| effects of backward incompatibility. | effects of backward incompatibility. | |||
| 7. Security Considerations | 7. Security Considerations | |||
| This document merely states what problems are to be solved, and does | This document merely states what problems are to be solved and does | |||
| not define a protocol. There are undoubtedly security implications | not define a protocol. There are undoubtedly security implications | |||
| of the particular results that will come from the work to be | of the particular results that will come from the work to be | |||
| completed. Moreover, the Stringprep Security Considerations | completed. Moreover, the Stringprep Security Considerations | |||
| [RFC3454] Section applies. See also the analysis in the subsections | [RFC3454] Section applies. See also the analysis in the subsections | |||
| of Appendix B, below. | of Appendix B, below. | |||
| 8. IANA Considerations | 8. Acknowledgements | |||
| This document has no actions for IANA. | ||||
| 9. Discussion home for this draft | ||||
| Note: RFC-Editor, please remove this section before publication. | ||||
| This document is intended to define the problem space discussed on | ||||
| the precis@ietf.org mailing list. | ||||
| 10. Acknowledgements | ||||
| This document is the product of the PRECIS IETF Working Group, and | This document is the product of the PRECIS IETF Working Group, and | |||
| participants in that Working Group were helpful in addressing issues | participants in that working group were helpful in addressing issues | |||
| with the text. | with the text. | |||
| Specific contributions came from David Black, Alan DeKok, Simon | Specific contributions came from David Black, Alan DeKok, Simon | |||
| Josefsson, Bill McQuillan, Alexey Melnikov, Peter Saint-Andre, Dave | Josefsson, Bill McQuillan, Alexey Melnikov, Peter Saint-Andre, Dave | |||
| Thaler, and Yoshiro Yoneya. | Thaler, and Yoshiro Yoneya. | |||
| Dave Thaler provided the "buckets" insight in Section 5.1.1, central | Dave Thaler provided the "buckets" insight in Section 5.1.1, central | |||
| to the organization of the problem. | to the organization of the problem. | |||
| Evaluations of Stringprep profiles that are included in Appendix B | Evaluations of Stringprep profiles that are included in Appendix B | |||
| were done by: David Black, Alexey Melnikov, Peter Saint-Andre, Dave | were done by David Black, Alexey Melnikov, Peter Saint-Andre, and | |||
| Thaler. | Dave Thaler. | |||
| 11. Informative References | 9. References | |||
| [I-D.iab-identifier-comparison] | 9.1. Normative References | |||
| Thaler, D., "Issues in Identifier Comparison for Security | ||||
| Purposes", draft-iab-identifier-comparison-07 (work in | ||||
| progress), August 2012. | ||||
| [NEWPREP] "Newprep BoF Meeting Minutes", March 2010. | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, March 1997. | ||||
| [RFC0952] Harrenstien, K., Stahl, M., and E. Feinler, "DoD Internet | 9.2. Informative References | |||
| host table specification", RFC 952, October 1985. | ||||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [78PRECIS] Blanchet, M., "PRECIS Framework", Proceedings of IETF | |||
| Requirement Levels", BCP 14, RFC 2119, March 1997. | 78, July 2010, | |||
| <http://www.ietf.org/proceedings/78/slides/ | ||||
| precis-2.pdf>. | ||||
| [RFC3454] Hoffman, P. and M. Blanchet, "Preparation of | [ID-COMP] Thaler, D., Ed., "Issues in Identifier Comparison for | |||
| Internationalized Strings ("stringprep")", RFC 3454, | Security Purposes", Work in Progress, March 2013. | |||
| December 2002. | ||||
| [RFC3490] Faltstrom, P., Hoffman, P., and A. Costello, | [NEWPREP] "Newprep BoF Meeting Minutes", March 2010, | |||
| "Internationalizing Domain Names in Applications (IDNA)", | <http://www.ietf.org/proceedings/77/minutes/ | |||
| RFC 3490, March 2003. | newprep.txt>. | |||
| [RFC3491] Hoffman, P. and M. Blanchet, "Nameprep: A Stringprep | [RFC0952] Harrenstien, K., Stahl, M., and E. Feinler, "DoD | |||
| Profile for Internationalized Domain Names (IDN)", | Internet host table specification", RFC 952, | |||
| RFC 3491, March 2003. | October 1985. | |||
| [RFC3492] Costello, A., "Punycode: A Bootstring encoding of Unicode | [RFC3454] Hoffman, P. and M. Blanchet, "Preparation of | |||
| for Internationalized Domain Names in Applications | Internationalized Strings ("stringprep")", RFC 3454, | |||
| (IDNA)", RFC 3492, March 2003. | December 2002. | |||
| [RFC3530] Shepler, S., Callaghan, B., Robinson, D., Thurlow, R., | [RFC3490] Faltstrom, P., Hoffman, P., and A. Costello, | |||
| Beame, C., Eisler, M., and D. Noveck, "Network File System | "Internationalizing Domain Names in Applications | |||
| (NFS) version 4 Protocol", RFC 3530, April 2003. | (IDNA)", RFC 3490, March 2003. | |||
| [RFC3722] Bakke, M., "String Profile for Internet Small Computer | [RFC3491] Hoffman, P. and M. Blanchet, "Nameprep: A Stringprep | |||
| Systems Interface (iSCSI) Names", RFC 3722, April 2004. | Profile for Internationalized Domain Names (IDN)", | |||
| RFC 3491, March 2003. | ||||
| [RFC3748] Aboba, B., Blunk, L., Vollbrecht, J., Carlson, J., and H. | [RFC3492] Costello, A., "Punycode: A Bootstring encoding of | |||
| Levkowetz, "Extensible Authentication Protocol (EAP)", | Unicode for Internationalized Domain Names in | |||
| RFC 3748, June 2004. | Applications (IDNA)", RFC 3492, March 2003. | |||
| [RFC3920] Saint-Andre, P., Ed., "Extensible Messaging and Presence | [RFC3530] Shepler, S., Callaghan, B., Robinson, D., Thurlow, R., | |||
| Protocol (XMPP): Core", RFC 3920, October 2004. | Beame, C., Eisler, M., and D. Noveck, "Network File | |||
| System (NFS) version 4 Protocol", RFC 3530, April 2003. | ||||
| [RFC3922] Saint-Andre, P., "Mapping the Extensible Messaging and | [RFC3722] Bakke, M., "String Profile for Internet Small Computer | |||
| Presence Protocol (XMPP) to Common Presence and Instant | Systems Interface (iSCSI) Names", RFC 3722, April 2004. | |||
| Messaging (CPIM)", RFC 3922, October 2004. | ||||
| [RFC4011] Waldbusser, S., Saperia, J., and T. Hongal, "Policy Based | [RFC3748] Aboba, B., Blunk, L., Vollbrecht, J., Carlson, J., and | |||
| Management MIB", RFC 4011, March 2005. | H. Levkowetz, "Extensible Authentication Protocol | |||
| (EAP)", RFC 3748, June 2004. | ||||
| [RFC4013] Zeilenga, K., "SASLprep: Stringprep Profile for User Names | [RFC3920] Saint-Andre, P., Ed., "Extensible Messaging and Presence | |||
| and Passwords", RFC 4013, February 2005. | Protocol (XMPP): Core", RFC 3920, October 2004. | |||
| [RFC4279] Eronen, P. and H. Tschofenig, "Pre-Shared Key Ciphersuites | [RFC3922] Saint-Andre, P., "Mapping the Extensible Messaging and | |||
| for Transport Layer Security (TLS)", RFC 4279, | Presence Protocol (XMPP) to Common Presence and Instant | |||
| December 2005. | Messaging (CPIM)", RFC 3922, October 2004. | |||
| [RFC4314] Melnikov, A., "IMAP4 Access Control List (ACL) Extension", | [RFC4011] Waldbusser, S., Saperia, J., and T. Hongal, "Policy | |||
| RFC 4314, December 2005. | Based Management MIB", RFC 4011, March 2005. | |||
| [RFC4422] Melnikov, A. and K. Zeilenga, "Simple Authentication and | [RFC4013] Zeilenga, K., "SASLprep: Stringprep Profile for User | |||
| Security Layer (SASL)", RFC 4422, June 2006. | Names and Passwords", RFC 4013, February 2005. | |||
| [RFC4505] Zeilenga, K., "Anonymous Simple Authentication and | [RFC4279] Eronen, P. and H. Tschofenig, "Pre-Shared Key | |||
| Security Layer (SASL) Mechanism", RFC 4505, June 2006. | Ciphersuites for Transport Layer Security (TLS)", | |||
| RFC 4279, December 2005. | ||||
| [RFC4511] Sermersheim, J., "Lightweight Directory Access Protocol | [RFC4314] Melnikov, A., "IMAP4 Access Control List (ACL) | |||
| (LDAP): The Protocol", RFC 4511, June 2006. | Extension", RFC 4314, December 2005. | |||
| [RFC4513] Harrison, R., "Lightweight Directory Access Protocol | [RFC4422] Melnikov, A. and K. Zeilenga, "Simple Authentication and | |||
| (LDAP): Authentication Methods and Security Mechanisms", | Security Layer (SASL)", RFC 4422, June 2006. | |||
| RFC 4513, June 2006. | ||||
| [RFC4518] Zeilenga, K., "Lightweight Directory Access Protocol | [RFC4505] Zeilenga, K., "Anonymous Simple Authentication and | |||
| (LDAP): Internationalized String Preparation", RFC 4518, | Security Layer (SASL) Mechanism", RFC 4505, June 2006. | |||
| June 2006. | ||||
| [RFC4616] Zeilenga, K., "The PLAIN Simple Authentication and | [RFC4511] Sermersheim, J., "Lightweight Directory Access Protocol | |||
| Security Layer (SASL) Mechanism", RFC 4616, August 2006. | (LDAP): The Protocol", RFC 4511, June 2006. | |||
| [RFC4643] Vinocur, J. and K. Murchison, "Network News Transfer | [RFC4513] Harrison, R., "Lightweight Directory Access Protocol | |||
| Protocol (NNTP) Extension for Authentication", RFC 4643, | (LDAP): Authentication Methods and Security Mechanisms", | |||
| October 2006. | RFC 4513, June 2006. | |||
| [RFC4683] Park, J., Lee, J., Lee, H., Park, S., and T. Polk, | [RFC4518] Zeilenga, K., "Lightweight Directory Access Protocol | |||
| "Internet X.509 Public Key Infrastructure Subject | (LDAP): Internationalized String Preparation", RFC 4518, | |||
| Identification Method (SIM)", RFC 4683, October 2006. | June 2006. | |||
| [RFC4690] Klensin, J., Faltstrom, P., Karp, C., and IAB, "Review and | [RFC4616] Zeilenga, K., "The PLAIN Simple Authentication and | |||
| Recommendations for Internationalized Domain Names | Security Layer (SASL) Mechanism", RFC 4616, August 2006. | |||
| (IDNs)", RFC 4690, September 2006. | ||||
| [RFC4790] Newman, C., Duerst, M., and A. Gulbrandsen, "Internet | [RFC4643] Vinocur, J. and K. Murchison, "Network News Transfer | |||
| Application Protocol Collation Registry", RFC 4790, | Protocol (NNTP) Extension for Authentication", RFC 4643, | |||
| March 2007. | October 2006. | |||
| [RFC4954] Siemborski, R. and A. Melnikov, "SMTP Service Extension | [RFC4683] Park, J., Lee, J., Lee, H., Park, S., and T. Polk, | |||
| for Authentication", RFC 4954, July 2007. | "Internet X.509 Public Key Infrastructure Subject | |||
| Identification Method (SIM)", RFC 4683, October 2006. | ||||
| [RFC5034] Siemborski, R. and A. Menon-Sen, "The Post Office Protocol | [RFC4690] Klensin, J., Faltstrom, P., Karp, C., and IAB, "Review | |||
| (POP3) Simple Authentication and Security Layer (SASL) | and Recommendations for Internationalized Domain Names | |||
| Authentication Mechanism", RFC 5034, July 2007. | (IDNs)", RFC 4690, September 2006. | |||
| [RFC5051] Crispin, M., "i;unicode-casemap - Simple Unicode Collation | [RFC4790] Newman, C., Duerst, M., and A. Gulbrandsen, "Internet | |||
| Algorithm", RFC 5051, October 2007. | Application Protocol Collation Registry", RFC 4790, | |||
| March 2007. | ||||
| [RFC5054] Taylor, D., Wu, T., Mavrogiannopoulos, N., and T. Perrin, | [RFC4954] Siemborski, R. and A. Melnikov, "SMTP Service Extension | |||
| "Using the Secure Remote Password (SRP) Protocol for TLS | for Authentication", RFC 4954, July 2007. | |||
| Authentication", RFC 5054, November 2007. | ||||
| [RFC5122] Saint-Andre, P., "Internationalized Resource Identifiers | [RFC5034] Siemborski, R. and A. Menon-Sen, "The Post Office | |||
| (IRIs) and Uniform Resource Identifiers (URIs) for the | Protocol (POP3) Simple Authentication and Security Layer | |||
| Extensible Messaging and Presence Protocol (XMPP)", | (SASL) Authentication Mechanism", RFC 5034, July 2007. | |||
| RFC 5122, February 2008. | ||||
| [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., | [RFC5051] Crispin, M., "i;unicode-casemap - Simple Unicode | |||
| Housley, R., and W. Polk, "Internet X.509 Public Key | Collation Algorithm", RFC 5051, October 2007. | |||
| Infrastructure Certificate and Certificate Revocation List | ||||
| (CRL) Profile", RFC 5280, May 2008. | ||||
| [RFC5456] Spencer, M., Capouch, B., Guy, E., Miller, F., and K. | [RFC5054] Taylor, D., Wu, T., Mavrogiannopoulos, N., and T. | |||
| Shumard, "IAX: Inter-Asterisk eXchange Version 2", | Perrin, "Using the Secure Remote Password (SRP) Protocol | |||
| RFC 5456, February 2010. | for TLS Authentication", RFC 5054, November 2007. | |||
| [RFC5661] Shepler, S., Eisler, M., and D. Noveck, "Network File | [RFC5122] Saint-Andre, P., "Internationalized Resource Identifiers | |||
| System (NFS) Version 4 Minor Version 1 Protocol", | (IRIs) and Uniform Resource Identifiers (URIs) for the | |||
| RFC 5661, January 2010. | Extensible Messaging and Presence Protocol (XMPP)", | |||
| RFC 5122, February 2008. | ||||
| [RFC5802] Newman, C., Menon-Sen, A., Melnikov, A., and N. Williams, | [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., | |||
| "Salted Challenge Response Authentication Mechanism | Housley, R., and W. Polk, "Internet X.509 Public Key | |||
| (SCRAM) SASL and GSS-API Mechanisms", RFC 5802, July 2010. | Infrastructure Certificate and Certificate Revocation | |||
| List (CRL) Profile", RFC 5280, May 2008. | ||||
| [RFC5804] Melnikov, A. and T. Martin, "A Protocol for Remotely | [RFC5456] Spencer, M., Capouch, B., Guy, E., Miller, F., and K. | |||
| Managing Sieve Scripts", RFC 5804, July 2010. | Shumard, "IAX: Inter-Asterisk eXchange Version 2", | |||
| RFC 5456, February 2010. | ||||
| [RFC5890] Klensin, J., "Internationalized Domain Names for | [RFC5661] Shepler, S., Eisler, M., and D. Noveck, "Network File | |||
| Applications (IDNA): Definitions and Document Framework", | System (NFS) Version 4 Minor Version 1 Protocol", | |||
| RFC 5890, August 2010. | RFC 5661, January 2010. | |||
| [RFC5891] Klensin, J., "Internationalized Domain Names in | [RFC5802] Newman, C., Menon-Sen, A., Melnikov, A., and N. | |||
| Applications (IDNA): Protocol", RFC 5891, August 2010. | Williams, "Salted Challenge Response Authentication | |||
| Mechanism (SCRAM) SASL and GSS-API Mechanisms", | ||||
| RFC 5802, July 2010. | ||||
| [RFC5892] Faltstrom, P., "The Unicode Code Points and | [RFC5804] Melnikov, A. and T. Martin, "A Protocol for Remotely | |||
| Internationalized Domain Names for Applications (IDNA)", | Managing Sieve Scripts", RFC 5804, July 2010. | |||
| RFC 5892, August 2010. | ||||
| [RFC5893] Alvestrand, H. and C. Karp, "Right-to-Left Scripts for | [RFC5890] Klensin, J., "Internationalized Domain Names for | |||
| Internationalized Domain Names for Applications (IDNA)", | Applications (IDNA): Definitions and Document | |||
| RFC 5893, August 2010. | Framework", RFC 5890, August 2010. | |||
| [RFC5894] Klensin, J., "Internationalized Domain Names for | [RFC5891] Klensin, J., "Internationalized Domain Names in | |||
| Applications (IDNA): Background, Explanation, and | Applications (IDNA): Protocol", RFC 5891, August 2010. | |||
| Rationale", RFC 5894, August 2010. | ||||
| [RFC5895] Resnick, P. and P. Hoffman, "Mapping Characters for | [RFC5892] Faltstrom, P., "The Unicode Code Points and | |||
| Internationalized Domain Names in Applications (IDNA) | Internationalized Domain Names for Applications (IDNA)", | |||
| 2008", RFC 5895, September 2010. | RFC 5892, August 2010. | |||
| [RFC6365] Hoffman, P. and J. Klensin, "Terminology Used in | [RFC5893] Alvestrand, H. and C. Karp, "Right-to-Left Scripts for | |||
| Internationalization in the IETF", BCP 166, RFC 6365, | Internationalized Domain Names for Applications (IDNA)", | |||
| September 2011. | RFC 5893, August 2010. | |||
| [RFC6452] Faltstrom, P. and P. Hoffman, "The Unicode Code Points and | [RFC5894] Klensin, J., "Internationalized Domain Names for | |||
| Internationalized Domain Names for Applications (IDNA) - | Applications (IDNA): Background, Explanation, and | |||
| Unicode 6.0", RFC 6452, November 2011. | Rationale", RFC 5894, August 2010. | |||
| [UAX15] "Unicode Standard Annex #15: Unicode Normalization Forms", | [RFC5895] Resnick, P. and P. Hoffman, "Mapping Characters for | |||
| UAX 15, September 2009. | Internationalized Domain Names in Applications (IDNA) | |||
| 2008", RFC 5895, September 2010. | ||||
| [Unicode61] | [RFC6365] Hoffman, P. and J. Klensin, "Terminology Used in | |||
| The Unicode Consortium. The Unicode Standard, Version | Internationalization in the IETF", BCP 166, RFC 6365, | |||
| 6.1, defined by:, "The Unicode Standard -- Version 6.1", | September 2011. | |||
| (Mountain View, CA: The Unicode Consortium, 2012. ISBN | ||||
| 978-1-936213-02-3), September 2009, | ||||
| <http://www.unicode.org/versions/Unicode6.1.0/>. | ||||
| [ietf78precis] | [RFC6452] Faltstrom, P. and P. Hoffman, "The Unicode Code Points | |||
| Blanchet, M., "PRECIS Framework", Proceedings of the | and Internationalized Domain Names for Applications | |||
| Seventy-Eighth Internet Engineering Task | (IDNA) - Unicode 6.0", RFC 6452, November 2011. | |||
| Force https://www.ietf.org/proceedings/78/, July 2010, | ||||
| <http://www.ietf.org/proceedings/78/slides/precis-2.pdf>. | [UAX15] "Unicode Standard Annex #15: Unicode Normalization | |||
| Forms", UAX 15, September 2009. | ||||
| [Unicode61] The Unicode Consortium. The Unicode Standard, Version | ||||
| 6.1, defined by:, "The Unicode Standard -- Version 6.1", | ||||
| (Mountain View, CA: The Unicode Consortium, 2012. ISBN | ||||
| 978-1-936213-02-3), September 2009, | ||||
| <http://www.unicode.org/versions/Unicode6.1.0/>. | ||||
| Appendix A. Classification of Stringprep Profiles | Appendix A. Classification of Stringprep Profiles | |||
| A number of the known cases of Stringprep use were evaluated during | A number of the known cases of Stringprep use were evaluated during | |||
| the preparation of this document. The known cases are here described | the preparation of this document. The known cases are here described | |||
| in two ways. The types of identifiers the protocol uses is first | in two ways. The types of identifiers the protocol uses is first | |||
| called out in the ID type column (from Section 5.1.1), using the | called out in the ID type column (from Section 5.1.1) using the short | |||
| short forms "a" for Absolute, "d" for Definite, and "i" for | forms "a" for Absolute, "d" for Definite, and "i" for Indefinite. | |||
| Indefinite. Next, there is a column that contains an "i" if the | Next, there is a column that contains an "i" if the protocol string | |||
| protocol string comes from user input, an "o" if the protocol string | comes from user input, an "o" if the protocol string becomes user- | |||
| becomes user-facing output, "b" if both are true, and "n" if neither | facing output, "b" if both are true, and "n" if neither is true. | |||
| is true. | ||||
| +------+--------+-------+ | +------+--------+-------+ | |||
| | RFC | IDtype | User? | | | RFC | IDtype | User? | | |||
| +------+--------+-------+ | +------+--------+-------+ | |||
| | 3722 | a | b | | | 3722 | a | b | | |||
| | 3748 | - | - | | | 3748 | - | - | | |||
| | 3920 | a,d | b | | | 3920 | a,d | b | | |||
| | 4505 | a | i | | | 4505 | a | i | | |||
| | 4314 | a,d | b | | | 4314 | a,d | b | | |||
| | 4954 | a,d | b | | | 4954 | a,d | b | | |||
| skipping to change at page 18, line 40 | skipping to change at page 18, line 28 | |||
| Table 1 | Table 1 | |||
| Appendix B. Evaluation of Stringprep Profiles | Appendix B. Evaluation of Stringprep Profiles | |||
| This section is a summary of evaluation of Stringprep profiles that | This section is a summary of evaluation of Stringprep profiles that | |||
| was done to get a good understanding of the usage of Stringprep. | was done to get a good understanding of the usage of Stringprep. | |||
| This summary is by no means normative nor the actual evaluations | This summary is by no means normative nor the actual evaluations | |||
| themselves. A template was used for reviewers to get a coherent view | themselves. A template was used for reviewers to get a coherent view | |||
| of all evaluations. | of all evaluations. | |||
| B.1. iSCSI Stringprep Profile: RFC3722 (and RFC3721, RFC3720) | B.1. iSCSI Stringprep Profile: RFC 3722 (and RFC 3721, RFC 3720) | |||
| Description: An iSCSI session consists of an initiator (i.e., host | Description: An iSCSI session consists of an initiator (i.e., host | |||
| or server that uses storage) communicating with a target (i.e., a | or server that uses storage) communicating with a target (i.e., a | |||
| storage array or other system that provides storage). Both the | storage array or other system that provides storage). Both the | |||
| iSCSI initiator and target are named by iSCSI Names. The iSCSI | iSCSI initiator and target are named by iSCSI names. The iSCSI | |||
| Stringprep profile is used for iSCSI names. | Stringprep profile is used for iSCSI names. | |||
| How it is used: iSCSI initiators and targets (see above). They can | How it is used: iSCSI initiators and targets (see above). They can | |||
| also be used to identify SCSI ports (these are software entities | also be used to identify SCSI ports (these are software entities | |||
| in the iSCSI protocol, not hardware ports), and iSCSI logical | in the iSCSI protocol, not hardware ports) and iSCSI logical units | |||
| units (storage volumes), although both are unusual in practice. | (storage volumes), although both are unusual in practice. | |||
| What entities create these identifiers? Generally a Human user (1) | What entities create these identifiers? Generally, a human user (1) | |||
| configures an Automated system (2) that generates the names. | configures an automated system (2) that generates the names. | |||
| Advance configuration of the system is required due to the | Advance configuration of the system is required due to the | |||
| embedded use of external unique identifier (from the DNS or IEEE). | embedded use of external unique identifier (from the DNS or IEEE). | |||
| How is the string input in the system? Keyboard and copy-paste are | How is the string input in the system? Keyboard and copy-paste are | |||
| common. Copy-paste is common because iSCSI names are long enough | common. Copy-paste is common because iSCSI names are long enough | |||
| to be problematic for humans to remember, causing use of email, | to be problematic for humans to remember, causing use of email, | |||
| sneaker-net, text files, etc. to avoid mistype mistakes. | sneaker-net, text files, etc., to avoid mistype mistakes. | |||
| Where do we place the dividing line between user interface and | Where do we place the dividing line between user interface and | |||
| protocol? The iSCSI protocol requires that all internationalization | protocol? The iSCSI protocol requires that all internationalization | |||
| string preparation occur in the user interface. The iSCSI | string preparation occur in the user interface. The iSCSI | |||
| protocol treats iSCSI names as opaque identifiers that are | protocol treats iSCSI names as opaque identifiers that are | |||
| compared byte-by-byte for equality. iSCSI names are generally not | compared byte-by-byte for equality. iSCSI names are generally not | |||
| checked for correct formatting by the protocol. | checked for correct formatting by the protocol. | |||
| What entities enforce the rules? There are no iSCSI-specific | What entities enforce the rules? There are no iSCSI-specific | |||
| enforcement entities, although the use of unique identifier | enforcement entities, although the use of unique identifier | |||
| information in the names relies on DNS registrars and the IEEE | information in the names relies on DNS registrars and the IEEE | |||
| Registration Authority. | Registration Authority. | |||
| Comparison Byte-by-byte | ||||
| Case Folding, Sensitivity, Preservation Case folding is required for | Comparison: Byte-by-byte. | |||
| the code blocks specified in RFC 3454, Table B.2. The overall | ||||
| Case Folding, Sensitivity, Preservation: Case folding is required | ||||
| for the code blocks specified in RFC 3454, Table B.2. The overall | ||||
| iSCSI naming system (UI + protocol) is case-insensitive. | iSCSI naming system (UI + protocol) is case-insensitive. | |||
| What is the impact if the comparison results in a false positive? | What is the impact if the comparison results in a false positive? | |||
| Potential access to the wrong storage. - If the initiator has no | Potential access to the wrong storage. | |||
| access to the wrong storage, an authentication failure is the | ||||
| probable result. - If the initiator has access to the wrong | - If the initiator has no access to the wrong storage, an | |||
| storage, the resulting mis-identification could result in use of | authentication failure is the probable result. | |||
| the wrong data and possible corruption of stored data. | ||||
| - If the initiator has access to the wrong storage, the resulting | ||||
| misidentification could result in use of the wrong data and | ||||
| possible corruption of stored data. | ||||
| What is the impact if the comparison results in a false negative? | What is the impact if the comparison results in a false negative? | |||
| Denial of authorized storage access. | Denial of authorized storage access. | |||
| What are the security impacts? iSCSI names may be used as the | What are the security impacts? iSCSI names may be used as the | |||
| authentication identities for storage systems. Comparison | authentication identities for storage systems. Comparison | |||
| problems could result in authentication problems, although note | problems could result in authentication problems, although note | |||
| that authentication failure ameliorates some of the false positive | that authentication failure ameliorates some of the false positive | |||
| cases. | cases. | |||
| Normalization NFKC, as specified by RFC 3454. | ||||
| Mapping Yes, as specified by table B.1 in RFC 3454 | Normalization: NFKC, as specified by RFC 3454. | |||
| Disallowed Characters Only the following characters are allowed: - | ||||
| ASCII dash, dot, colon - ASCII lower case letters and digits - | Mapping: Yes, as specified by Table B.1 in RFC 3454. | |||
| Unicode lower case characters as specified by RFC 3454 All other | ||||
| characters are disallowed. | Disallowed Characters: Only the following characters are allowed: | |||
| Which other strings or identifiers are these most similar to? None - | - ASCII dash, dot, colon | |||
| iSCSI names are unique to iSCSI. | - ASCII lowercase letters and digits | |||
| - Unicode lowercase characters as specified by RFC 3454. | ||||
| All other characters are disallowed. | ||||
| Which other strings or identifiers are these most similar to? None | ||||
| -- iSCSI names are unique to iSCSI. | ||||
| Are these strings or identifiers sometimes the same as strings or | Are these strings or identifiers sometimes the same as strings or | |||
| identifiers from other protocols? No | identifiers from other protocols? No. | |||
| Does the identifier have internal structure that needs to be | Does the identifier have internal structure that needs to be | |||
| respected? Yes - ASCII dot, dash and colon are used for internal | respected? Yes. ASCII dot, dash, and colon are used for internal | |||
| name structure. These are not reserved characters in that they | name structure. These are not reserved characters, in that they | |||
| can occur in the name in locations other than those used for | can occur in the name in locations other than those used for | |||
| structuring purposes (e.g., only the first occurrence of a colon | structuring purposes (e.g., only the first occurrence of a colon | |||
| character is structural, others are not). | character is structural, others are not). | |||
| How are users exposed to these strings? How are they published? | How are users exposed to these strings? How are they published? | |||
| iSCSI names appear in server and storage system configuration | iSCSI names appear in server and storage system configuration | |||
| interfaces. They also appear in system logs. | interfaces. They also appear in system logs. | |||
| Is the string / identifier used as input to other operations? | Is the string / identifier used as input to other operations? | |||
| Effectively, no. The rarely used port and logical unit names | Effectively, no. The rarely used port and logical unit names | |||
| involve concatenation, which effectively extends a unique iSCSI | involve concatenation, which effectively extends a unique iSCSI | |||
| Name for a target to uniquely identify something within that | name for a target to uniquely identify something within that | |||
| target. | target. | |||
| How much tolerance for change from existing Stringprep approach? | How much tolerance for change from existing Stringprep approach? | |||
| Good tolerance; the community would prefer that | Good tolerance; the community would prefer that | |||
| internationalization experts solve internationalization problems. | internationalization experts solve internationalization problems. | |||
| How strong a desire for change (e.g., for Unicode agility)? Unicode | How strong a desire for change (e.g., for Unicode agility)? Unicode | |||
| agility is desired in principle as long as nothing significant | agility is desired, in principle, as long as nothing significant | |||
| breaks. | breaks. | |||
| B.2. SMTP/POP3/ManageSieve Stringprep Profiles: RFC4954,RFC5034,RFC | B.2. SMTP/POP3/ManageSieve Stringprep Profiles: RFC 4954, RFC 5034, RFC | |||
| 5804 | 5804 | |||
| Description: Authorization identity (user identifier) exchanged | Description: Authorization identity (user identifier) exchanged | |||
| during SASL authentication: AUTH (SMTP/POP3) or AUTHENTICATE | during SASL authentication: AUTH (SMTP/POP3) or AUTHENTICATE | |||
| (ManageSieve) command. | (ManageSieve) command. | |||
| How It's Used: Used for proxy authorization, e.g. to [lawfully] | ||||
| impersonate a particular user after a privileged authentication | How It's Used: Used for proxy authorization, e.g., to [lawfully] | |||
| Who Generates It: Typically generated by email system administrators | impersonate a particular user after a privileged authentication. | |||
| using some tools/conventions, sometimes from some backend | ||||
| database. - In some setups human users can register own usernames | Who Generates It: | |||
| (e.g. webmail self registration) | - Typically generated by email system administrators using some | |||
| User Input Methods: - Typed by user / selected from a list - Copy- | tools/conventions, sometimes from some backend database. | |||
| and-paste - Perhaps voice input - Can also be specified in | - In some setups, human users can register their own usernames | |||
| configuration files or on a command line | (e.g., webmail self-registration). | |||
| Enforcement: - Rules enforced by server / add-on service (e.g., | ||||
| gateway service) on registration of account | User Input Methods: | |||
| Comparison Method: "Type 1" (byte-for-byte) or "type 2" (compare by | - Typed by user / selected from a list | |||
| - copy-and-paste | ||||
| - perhaps voice input | ||||
| Can also be specified in configuration files or on a command line. | ||||
| Enforcement: Rules enforced by server / add-on service (e.g., | ||||
| gateway service) on registration of account. | ||||
| Comparison Method: "Type 1" (byte-for-byte) or "Type 2" (compare by | ||||
| a common algorithm that everyone agrees on (e.g., normalize and | a common algorithm that everyone agrees on (e.g., normalize and | |||
| then compare the result byte-by-byte)) | then compare the result byte-by-byte). | |||
| Case Folding, Sensitivity, Preservation: Most likely case sensitive. | ||||
| Case Folding, Sensitivity, Preservation: Most likely case-sensitive. | ||||
| Exact requirements on case-sensitivity/case-preservation depend on | Exact requirements on case-sensitivity/case-preservation depend on | |||
| a specific implementation, e.g. an implementation might treat all | a specific implementation, e.g., an implementation might treat all | |||
| user identifiers as case insensitive (or case insensitive for US- | user identifiers as case-insensitive (or case-insensitive for US- | |||
| ASCII subset only). | ASCII subset only). | |||
| Impact of Comparison: False positives: - an unauthorized user is | Impact of Comparison: False positives: an unauthorized user is | |||
| allowed email service access (login) False negatives: - an | allowed email service access (login). False negatives: an | |||
| authorized user is denied email service access | authorized user is denied email service access. | |||
| Normalization: NFKC (as per RFC 4013) | ||||
| Mapping: (see Section 2 of RFC 4013 for the full list): Non ASCII | Normalization: NFKC (as per RFC 4013). | |||
| Mapping: (see Section 2 of RFC 4013 for the full list) Non-ASCII | ||||
| spaces are mapped to space, etc. | spaces are mapped to space, etc. | |||
| Disallowed Characters: (see Section 2 of RFC 4013 for the full | ||||
| list): Unicode Control characters, etc. | Disallowed Characters: (see Section 2 of RFC 4013 for the full list) | |||
| String Classes: - simple username. See Section 2 of RFC 4013 for | Unicode Control characters, etc. | |||
| String Classes: Simple username. See Section 2 of RFC 4013 for | ||||
| details on restrictions. Note that some implementations allow | details on restrictions. Note that some implementations allow | |||
| spaces in these. While implementations are not required to use a | spaces in these. While implementations are not required to use a | |||
| specific format, an authorization identity frequently has the same | specific format, an authorization identity frequently has the same | |||
| format as an email address (and EAI email address in the future), | format as an email address (and Email Address Internationalization | |||
| or as a left hand side of an email address. Note: whatever is | (EAI) email address in the future), or as a left hand side of an | |||
| recommended for SMTP/POP/ManageSieve authorization identity should | email address. Note: whatever is recommended for SMTP/POP/ | |||
| also be used for IMAP authorization identities, as IMAP/POP3/SMTP/ | ManageSieve authorization identity should also be used for IMAP | |||
| ManageSieve are frequently implemented together. | authorization identities, as IMAP/POP3/SMTP/ManageSieve are | |||
| frequently implemented together. | ||||
| Internal Structure: None | Internal Structure: None | |||
| User Output: Unlikely, but possible. For example, if it is the same | User Output: Unlikely, but possible. For example, if it is the same | |||
| as an email address. | as an email address. | |||
| Operations: - Sometimes concatenated with other data and then used | ||||
| as input to a cryptographic hash function | Operations: Sometimes concatenated with other data and then used as | |||
| input to a cryptographic hash function. | ||||
| How much tolerance for change from existing Stringprep approach? Not | How much tolerance for change from existing Stringprep approach? Not | |||
| sure. | sure. | |||
| Background information: In RFC 5034, when describing the POP3 AUTH | ||||
| command: The authorization identity generated by the SASL exchange | ||||
| is a simple username, and SHOULD use the SASLprep profile (see | ||||
| RFC4013) of the StringPrep algorithm (see RFC3454) to prepare | ||||
| these names for matching. If preparation of the authorization | ||||
| identity fails or results in an empty string (unless it was | ||||
| transmitted as the empty string), the server MUST fail the | ||||
| authentication. In RFC 4954, when describing the SMTP AUTH | ||||
| command: The authorization identity generated by this SASL | ||||
| exchange is a "simple username" (in the sense defined in | ||||
| SASLprep), and both client and server SHOULD (*) use the SASLprep | ||||
| profile of the StringPrep algorithm to prepare these names for | ||||
| transmission or comparison. If preparation of the authorization | ||||
| identity fails or results in an empty string (unless it was | ||||
| transmitted as the empty string), the server MUST fail the | ||||
| authentication. (*) Note: Future revision of this specification | ||||
| may change this requirement to MUST. Currently, the SHOULD is | ||||
| used in order to avoid breaking the majority of existing | ||||
| implementations. In RFC 5804, when describing the ManageSieve | ||||
| AUTHENTICATE command: The authorization identity generated by this | ||||
| SASL exchange is a "simple username" (in the sense defined in | ||||
| SASLprep), and both client and server MUST use the SASLprep | ||||
| profile of the StringPrep algorithm to prepare these names for | ||||
| transmission or comparison. If preparation of the authorization | ||||
| identity fails or results in an empty string (unless it was | ||||
| transmitted as the empty string), the server MUST fail the | ||||
| authentication. | ||||
| B.3. IMAP Stringprep Profiles: RFC5738, RFC4314: Usernames | Background Information: | |||
| In RFC 5034, when describing the POP3 AUTH command: | ||||
| Evaluation Note These documents have 2 types of strings (usernames | The authorization identity generated by the SASL exchange is a | |||
| simple username, and SHOULD use the SASLprep profile (see RFC | ||||
| 4013) of the StringPrep algorithm (see RFC 3454) to prepare | ||||
| these names for matching. If preparation of the authorization | ||||
| identity fails or results in an empty string (unless it was | ||||
| transmitted as the empty string), the server MUST fail the | ||||
| authentication. | ||||
| In RFC 4954, when describing the SMTP AUTH command: | ||||
| The authorization identity generated by this SASL exchange is a | ||||
| "simple username" (in the sense defined in SASLprep), and both | ||||
| client and server SHOULD (*) use the SASLprep profile of the | ||||
| StringPrep algorithm to prepare these names for transmission or | ||||
| comparison. If preparation of the authorization identity fails | ||||
| or results in an empty string (unless it was transmitted as the | ||||
| empty string), the server MUST fail the authentication. | ||||
| (*) Note: Future revision of this specification may change this | ||||
| requirement to MUST. Currently, the SHOULD is used in order to | ||||
| avoid breaking the majority of existing implementations. | ||||
| In RFC 5804, when describing the ManageSieve AUTHENTICATE command: | ||||
| The authorization identity generated by this SASL exchange is a | ||||
| "simple username" (in the sense defined in SASLprep), and both | ||||
| client and server MUST use the SASLprep profile of the | ||||
| StringPrep algorithm to prepare these names for transmission or | ||||
| comparison. If preparation of the authorization identity fails | ||||
| or results in an empty string (unless it was transmitted as the | ||||
| empty string), the server MUST fail the authentication. | ||||
| B.3. IMAP Stringprep Profiles: RFC 5738, RFC 4314: Usernames | ||||
| Evaluation Note: These documents have 2 types of strings (usernames | ||||
| and passwords), so there are two separate templates. | and passwords), so there are two separate templates. | |||
| Description: "username" parameter to the IMAP LOGIN command, | Description: "username" parameter to the IMAP LOGIN command, | |||
| identifiers in IMAP ACL commands. Note that any valid username is | identifiers in IMAP Access Control List (ACL) commands. Note that | |||
| also an IMAP ACL identifier, but IMAP ACL identifiers can include | any valid username is also an IMAP ACL identifier, but IMAP ACL | |||
| other things like name of group of users. | identifiers can include other things like the name of a group of | |||
| users. | ||||
| How It's Used: Used for authentication (Usernames), or in IMAP | How It's Used: Used for authentication (Usernames), or in IMAP | |||
| Access Control Lists (Usernames or Group names) | Access Control Lists (Usernames or Group names). | |||
| Who Generates It: - Typically generated by email system | ||||
| administrators using some tools/conventions, sometimes from some | Who Generates It: | |||
| backend database. - In some setups human users can register own | - Typically generated by email system administrators using some | |||
| usernames (e.g. webmail self registration) | tools/conventions, sometimes from some backend database. | |||
| User Input Methods: - Typed by user / selected from a list - Copy- | - In some setups, human users can register own usernames (e.g., | |||
| and-paste - Perhaps voice input - Can also be specified in | webmail self-registration). | |||
| configuration files or on a command line | ||||
| Enforcement: - Rules enforced by server / add-on service (e.g., | User Input Methods: | |||
| gateway service) on registration of account | - Typed by user / selected from a list | |||
| Comparison Method: Type 1" (byte-for-byte) or "type 2" (compare by a | - copy-and-paste | |||
| common algorithm that everyone agrees on (e.g., normalize and then | - perhaps voice input | |||
| compare the result byte-by-byte)) | Can also be specified in configuration files or on a command line. | |||
| Case Folding, Sensitivity, Preservation: - Most likely case | ||||
| sensitive. Exact requirements on case-sensitivity/ | Enforcement: Rules enforced by server / add-on service (e.g., | |||
| case-preservation depend on a specific implementation, e.g. an | gateway service) on registration of account. | |||
| implementation might treat all user identifiers as case | ||||
| insensitive (or case insensitive for US-ASCII subset only). | Comparison Method: "Type 1" (byte-for-byte) or "Type 2" (compare by | |||
| Impact of Comparison: False positives: - an unauthorized user is | a common algorithm that everyone agrees on (e.g., normalize and | |||
| allowed IMAP access (login) - improperly grant privileges (e.g., | then compare the result byte-by-byte). | |||
| Case Folding, Sensitivity, Preservation: Most likely case-sensitive. | ||||
| Exact requirements on case-sensitivity/case-preservation depend on | ||||
| a specific implementation, e.g., an implementation might treat all | ||||
| user identifiers as case-insensitive (or case-insensitive for US- | ||||
| ASCII subset only). | ||||
| Impact of Comparison: False positives: an unauthorized user is | ||||
| allowed IMAP access (login), privileges improperly granted (e.g., | ||||
| access to a specific mailbox, ability to manage ACLs for a | access to a specific mailbox, ability to manage ACLs for a | |||
| mailbox) False negatives: - an authorized user is denied IMAP | mailbox). False negatives: an authorized user is denied IMAP | |||
| access - unable to use granted privileges (e.g., access to a | access, unable to use granted privileges (e.g., access to a | |||
| specific mailbox, ability to manage ACLs for a mailbox) | specific mailbox, ability to manage ACLs for a mailbox). | |||
| Normalization: NFKC (as per RFC 4013) | Normalization: NFKC (as per RFC 4013) | |||
| Mapping: (see Section 2 of RFC 4013 for the full list): non ASCII | ||||
| spaces are mapped to space | Mapping: (see Section 2 of RFC 4013 for the full list) Non-ASCII | |||
| Disallowed Characters: (see Section 2 of RFC 4013 for the full | spaces are mapped to space. | |||
| list): Unicode Control characters, etc. | ||||
| String Classes: - simple username. See Section 2 of RFC 4013 for | Disallowed Characters: (see Section 2 of RFC 4013 for the full list) | |||
| Unicode Control characters, etc. | ||||
| String Classes: Simple username. See Section 2 of RFC 4013 for | ||||
| details on restrictions. Note that some implementations allow | details on restrictions. Note that some implementations allow | |||
| spaces in these. While IMAP implementations are not required to | spaces in these. While IMAP implementations are not required to | |||
| use a specific format, an IMAP username frequently has the same | use a specific format, an IMAP username frequently has the same | |||
| format as an email address (and EAI email address in the future), | format as an email address (and EAI email address in the future), | |||
| or as a left hand side of an email address. Note: whatever is | or as a left hand side of an email address. Note: whatever is | |||
| recommended for IMAP username should also be used for ManageSieve, | recommended for the IMAP username should also be used for | |||
| POP3 and SMTP authorization identities, as IMAP/POP3/SMTP/ | ManageSieve, POP3 and SMTP authorization identities, as IMAP/POP3/ | |||
| ManageSieve are frequently implemented together. | SMTP/ManageSieve are frequently implemented together. | |||
| Internal Structure: None | ||||
| Internal Structure: None. | ||||
| User Output: Unlikely, but possible. For example, if it is the same | User Output: Unlikely, but possible. For example, if it is the same | |||
| as an email address. - access control lists (e.g. in IMAP ACL | as an email address, access control lists (e.g. in IMAP ACL | |||
| extension), both when managing membership and listing membership | extension), both when managing membership and listing membership | |||
| of existing access control lists. - often show up as mailbox names | of existing access control lists. Often shows up as mailbox names | |||
| (under Other Users IMAP namespace) | (under Other Users IMAP namespace). | |||
| Operations: - Sometimes concatenated with other data and then used | ||||
| as input to a cryptographic hash function | Operations: Sometimes concatenated with other data and then used as | |||
| input to a cryptographic hash function. | ||||
| How much tolerance for change from existing Stringprep approach? Not | How much tolerance for change from existing Stringprep approach? Not | |||
| sure. Non-ASCII IMAP usernames are currently prohibited by IMAP | sure. Non-ASCII IMAP usernames are currently prohibited by IMAP | |||
| (RFC 3501). However they are allowed when used in IMAP ACL | (RFC 3501). However, they are allowed when used in IMAP ACL | |||
| extension. | extension. | |||
| B.4. IMAP Stringprep Profiles: RFC5738: Passwords | B.4. IMAP Stringprep Profiles: RFC 5738: Passwords | |||
| Description: "Password" parameter to the IMAP LOGIN command. | ||||
| How It's Used: Used for authentication (Passwords). | ||||
| Description: "Password" parameter to the IMAP LOGIN command | ||||
| How It's Used: Used for authentication (Passwords) | ||||
| Who Generates It: Either generated by email system administrators | Who Generates It: Either generated by email system administrators | |||
| using some tools/conventions, or specified by the human user. | using some tools/conventions, or specified by the human user. | |||
| User Input Methods: - Typed by user - Copy-and-paste - Perhaps voice | ||||
| input - Can also be specified in configuration files or on a | User Input Methods: | |||
| command line | - Typed by user | |||
| - copy-and-paste | ||||
| - perhaps voice input | ||||
| Can also be specified in configuration files or on a command line. | ||||
| Enforcement: Rules enforced by server / add-on service (e.g., | Enforcement: Rules enforced by server / add-on service (e.g., | |||
| gateway service or backend databse) on registration of account | gateway service or backend database) on registration of account. | |||
| Comparison Method: "Type 1" (byte-for-byte) | ||||
| Case Folding, Sensitivity, Preservation: Most likely case sensitive. | Comparison Method: "Type 1" (byte-for-byte). | |||
| Impact of Comparison: False positives: - an unauthorized user is | ||||
| allowed IMAP access (login) False negatives: - an authorized user | Case Folding, Sensitivity, Preservation: Most likely case-sensitive. | |||
| is denied IMAP access | ||||
| Normalization: NFKC (as per RFC 4013) | Impact of Comparison: False positives: an unauthorized user is | |||
| Mapping: (see Section 2 of RFC 4013 for the full list): non ASCII | allowed IMAP access (login). False negatives: an authorized user | |||
| spaces are mapped to space | is denied IMAP access. | |||
| Disallowed Characters: (see Section 2 of RFC 4013 for the full | ||||
| list): Unicode Control characters, etc. | Normalization: NFKC (as per RFC 4013). | |||
| Mapping: (see Section 2 of RFC 4013 for the full list) Non-ASCII | ||||
| spaces are mapped to space. | ||||
| Disallowed Characters: (see Section 2 of RFC 4013 for the full list) | ||||
| Unicode Control characters, etc. | ||||
| String Classes: Currently defined as "simple username" (see Section | String Classes: Currently defined as "simple username" (see Section | |||
| 2 of RFC 4013 for details on restrictions.), however this is | 2 of RFC 4013 for details on restrictions); however, this is | |||
| likely to be a different class from usernames. Note that some | likely to be a different class from usernames. Note that some | |||
| implementations allow spaces in these. Password in all email | implementations allow spaces in these. Password in all email | |||
| related protocols should be treated in the same way. Same | related protocols should be treated in the same way. Same | |||
| passwords are frequently shared with web, IM, etc. applications. | passwords are frequently shared with web, IM, and etc. | |||
| Internal Structure: None | applications. | |||
| User Output: - text of email messages (e.g. in "you forgot your | ||||
| password" email messages) - web page / directory - side of the bus | Internal Structure: None. | |||
| / in ads -- possible | ||||
| User Output: Text of email messages (e.g. in "you forgot your | ||||
| password" email messages), web page / directory, side of the bus / | ||||
| in ads -- possible. | ||||
| Operations: Sometimes concatenated with other data and then used as | Operations: Sometimes concatenated with other data and then used as | |||
| input to a cryptographic hash function. Frequently stored as is, | input to a cryptographic hash function. Frequently stored as is, | |||
| or hashed. | or hashed. | |||
| How much tolerance for change from existing Stringprep approach? Not | How much tolerance for change from existing Stringprep approach? Not | |||
| sure. Non-ASCII IMAP passwords are currently prohibited by IMAP | sure. Non-ASCII IMAP passwords are currently prohibited by IMAP | |||
| (RFC 3501), however they are likely to be in widespread use. | (RFC 3501); however, they are likely to be in widespread use. | |||
| Background information: RFC 5738 (IMAP INTERNATIONALIZATION): 5. | ||||
| UTF8=USER Capability If the "UTF8=USER" capability is advertised, | ||||
| that indicates the server accepts UTF-8 user names and passwords | ||||
| and applies SASLprep RFC4013 to both arguments of the LOGIN | ||||
| command. The server MUST reject UTF-8 that fails to comply with | ||||
| the formal syntax in RFC 3629 RFC3629 or if it encounters Unicode | ||||
| characters listed in Section 2.3 of SASLprep RFC 4013 RFC4013. | ||||
| RFC 4314 (IMAP4 Access Control List (ACL) Extension): 3. Access | ||||
| control management commands and responses Servers, when processing | ||||
| a command that has an identifier as a parameter (i.e., any of | ||||
| SETACL, DELETEACL, and LISTRIGHTS commands), SHOULD first prepare | ||||
| the received identifier using "SASLprep" profile SASLprep of the | ||||
| "Stringprep" algorithm Stringprep. If the preparation of the | ||||
| identifier fails or results in an empty string, the server MUST | ||||
| refuse to perform the command with a BAD response. Note that | ||||
| Section 6 recommends additional identifier's verification steps. | ||||
| and in Section 6: This document relies on SASLprep to describe | ||||
| steps required to perform identifier canonicalization | ||||
| (preparation). The preparation algorithm in SASLprep was | ||||
| specifically designed such that its output is canonical, and it is | ||||
| well-formed. However, due to an anomaly PR29 in the specification | ||||
| of Unicode normalization, canonical equivalence is not guaranteed | ||||
| for a select few character sequences. Identifiers prepared with | ||||
| SASLprep can be stored and returned by an ACL server. The anomaly | ||||
| affects ACL manipulation and evaluation of identifiers containing | ||||
| the selected character sequences. These sequences, however, do | ||||
| not appear in well-formed text. In order to address this problem, | ||||
| an ACL server MAY reject identifiers containing sequences | ||||
| described in PR29 by sending the tagged BAD response. This is in | ||||
| addition to the requirement to reject identifiers that fail | ||||
| SASLprep preparation as described in Section 3. | ||||
| B.5. Anonymous SASL Stringprep Profiles: RFC4505 | Background Information: | |||
| RFC 5738, Section 5 ("UTF8=USER Capability"): | ||||
| If the "UTF8=USER" capability is advertised, that indicates the | ||||
| server accepts UTF-8 user names and passwords and applies | ||||
| SASLprep RFC4013 to both arguments of the LOGIN command. The | ||||
| server MUST reject UTF-8 that fails to comply with the formal | ||||
| syntax in RFC 3629 RFC3629 or if it encounters Unicode | ||||
| characters listed in Section 2.3 of SASLprep RFC 4013 RFC4013. | ||||
| RFC 4314, Section 3 ("Access control management commands and | ||||
| responses"): | ||||
| Servers, when processing a command that has an identifier as a | ||||
| parameter (i.e., any of SETACL, DELETEACL, and LISTRIGHTS | ||||
| commands), SHOULD first prepare the received identifier using | ||||
| "SASLprep" profile SASLprep of the "stringprep" algorithm | ||||
| Stringprep. If the preparation of the identifier fails or | ||||
| results in an empty string, the server MUST refuse to perform | ||||
| the command with a BAD response. Note that Section 6 | ||||
| recommends additional identifier's verification steps. | ||||
| RFC 4314, Section 6 ("Security Considerations"): | ||||
| This document relies on SASLprep to describe steps required to | ||||
| perform identifier canonicalization (preparation). The | ||||
| preparation algorithm in SASLprep was specifically designed | ||||
| such that its output is canonical, and it is well-formed. | ||||
| However, due to an anomaly PR29 in the specification of Unicode | ||||
| normalization, canonical equivalence is not guaranteed for a | ||||
| select few character sequences. Identifiers prepared with | ||||
| SASLprep can be stored and returned by an ACL server. The | ||||
| anomaly affects ACL manipulation and evaluation of identifiers | ||||
| containing the selected character sequences. These sequences, | ||||
| however, do not appear in well-formed text. In order to | ||||
| address this problem, an ACL server MAY reject identifiers | ||||
| containing sequences described in PR29 by sending the tagged | ||||
| BAD response. This is in addition to the requirement to reject | ||||
| identifiers that fail SASLprep preparation as described in | ||||
| Section 3. | ||||
| B.5. Anonymous SASL Stringprep Profiles: RFC 4505 | ||||
| Description: RFC 4505 defines a "trace" field: | Description: RFC 4505 defines a "trace" field: | |||
| Comparison: this field is not intended for comparison (only used for | Comparison: this field is not intended for comparison (only used for | |||
| logging) | logging) | |||
| Case folding; case sensitivity, preserve case: No case folding/case | ||||
| sensitive | Case folding; case-sensitivity, preserve case: No case folding/ | |||
| case-sensitive | ||||
| Do users input the strings directly? Yes. Possibly entered in | Do users input the strings directly? Yes. Possibly entered in | |||
| configuration UIs, or on a command line. Can also be stored in | configuration UIs, or on a command line. Can also be stored in | |||
| configuration files. The value can also be automatically | configuration files. The value can also be automatically | |||
| generated by clients (e.g. a fixed string is used, or a user's | generated by clients (e.g., a fixed string is used, or a user's | |||
| email address). | email address). | |||
| How users input strings? Keyboard/voice, stylus (pick from a list). | How users input strings? Keyboard/voice, stylus (pick from a list). | |||
| Copy-paste - possibly. | Copy-paste - possibly. | |||
| Normalization: None | ||||
| Disallowed Characters Control characters are disallowed. (See | Normalization: None. | |||
| Section 3 of RFC 4505) | ||||
| Disallowed Characters: Control characters are disallowed. (See | ||||
| Section 3 of RFC 4505). | ||||
| Which other strings or identifiers are these most similar to? RFC | Which other strings or identifiers are these most similar to? RFC | |||
| 4505 says that the trace "should take one of two forms: an | 4505 says that the trace "should take one of two forms: an | |||
| Internet email address, or an opaque string that does not contain | Internet email address, or an opaque string that does not contain | |||
| the '@' U+0040) character and that can be interpreted by the | the '@' U+0040) character and that can be interpreted by the | |||
| system administrator of the client's domain." In practice, this | system administrator of the client's domain." In practice, this | |||
| is a freeform text, so it belongs to a different class from "email | is a free-form text, so it belongs to a different class from | |||
| address" or "username". | "email address" or "username". | |||
| Are these strings or identifiers sometimes the same as strings or | Are these strings or identifiers sometimes the same as strings or | |||
| identifiers from other protocols (e.g., does an IM system sometimes | identifiers from other protocols (e.g., does an IM system sometimes | |||
| use the same credentials database for authentication as an email | use the same credentials database for authentication as an email | |||
| system)? Yes: see above. However there is no strong need to keep | system)? Yes: see above. However, there is no strong need to keep | |||
| them consistent in the future. | them consistent in the future. | |||
| How are users exposed to these strings, how are they published? No. | How are users exposed to these strings, how are they published? No. | |||
| However, The value can be seen in server logs | However, the value can be seen in server logs. | |||
| Impacts of false positives and false negatives: False positive: a | ||||
| user can be confused with another user. False negative: two | Impacts of false positives and false negatives: | |||
| distinct users are treated as the same user. But note that the | False positive: a user can be confused with another user. | |||
| trace field is not authenticated, so it can be easily falsified. | False negative: two distinct users are treated as the same user. | |||
| Tolerance of changes in the community The community would be | But note that the trace field is not authenticated, so it can be | |||
| easily falsified. | ||||
| Tolerance of changes in the community: The community would be | ||||
| flexible. | flexible. | |||
| Delimiters No internal structure, but see comments above about | ||||
| Delimiters: No internal structure, but see comments above about | ||||
| frequent use of email addresses. | frequent use of email addresses. | |||
| Background information: The Anonymous Mechanism The mechanism | ||||
| consists of a single message from the client to the server. The | ||||
| client may include in this message trace information in the form | ||||
| of a string of UTF-8-encoded Unicode characters prepared in | ||||
| accordance with StringPrep and the "trace" Stringprep profile | ||||
| defined in Section 3 of this document. The trace information, | ||||
| which has no semantical value, should take one of two forms: an | ||||
| Internet email address, or an opaque string that does not contain | ||||
| the '@' (U+0040) character and that can be interpreted by the | ||||
| system administrator of the client's domain. For privacy reasons, | ||||
| an Internet email address or other information identifying the | ||||
| user should only be used with permission from the user. 3. The | ||||
| "trace" Profile of "Stringprep" This section defines the "trace" | ||||
| profile of StringPrep. This profile is designed for use with the | ||||
| SASL ANONYMOUS Mechanism. Specifically, the client is to prepare | ||||
| the message production in accordance with this profile. The | ||||
| character repertoire of this profile is Unicode 3.2. No mapping | ||||
| is required by this profile. No Unicode normalization is required | ||||
| by this profile. The list of unassigned code points for this | ||||
| profile is that provided in Appendix A of StringPrep. Unassigned | ||||
| code points are not prohibited. Characters from the following | ||||
| tables of StringPrep are prohibited: - C.2.1 (ASCII control | ||||
| characters) - C.2.2 (Non-ASCII control characters) - C.3 (Private | ||||
| use characters) - C.4 (Non-character code points) - C.5 (Surrogate | ||||
| codes) - C.6 (Inappropriate for plain text) - C.8 (Change display | ||||
| properties are deprecated) - C.9 (Tagging characters) No | ||||
| additional characters are prohibited. This profile requires | ||||
| bidirectional character checking per Section 6 of StringPrep. | ||||
| B.6. XMPP Stringprep Profiles: RFC3920 Nodeprep | Background Information: | |||
| RFC 4505, Section 2 ("The Anonymous Mechanism"): | ||||
| The mechanism consists of a single message from the client to the | ||||
| server. The client may include in this message trace information | ||||
| in the form of a string of UTF-8-encoded Unicode characters | ||||
| prepared in accordance with StringPrep and the "trace" Stringprep | ||||
| profile defined in Section 3 of this document. The trace | ||||
| information, which has no semantical value, should take one of two | ||||
| forms: an Internet email address, or an opaque string that does | ||||
| not contain the '@' (U+0040) character and that can be interpreted | ||||
| by the system administrator of the client's domain. For privacy | ||||
| reasons, an Internet email address or other information | ||||
| identifying the user should only be used with permission from the | ||||
| user. | ||||
| RFC 4505, Section 3 ('The "trace" Profile of "Stringprep"'): | ||||
| This section defines the "trace" profile of StringPrep. This | ||||
| profile is designed for use with the SASL ANONYMOUS Mechanism. | ||||
| Specifically, the client is to prepare the message production in | ||||
| accordance with this profile. | ||||
| The character repertoire of this profile is Unicode 3.2. | ||||
| No mapping is required by this profile. | ||||
| No Unicode normalization is required by this profile. | ||||
| The list of unassigned code points for this profile is that | ||||
| provided in Appendix A of StringPrep. Unassigned code points are | ||||
| not prohibited. | ||||
| Characters from the following tables of StringPrep are prohibited: | ||||
| - C.2.1 (ASCII control characters) | ||||
| - C.2.2 (Non-ASCII control characters) | ||||
| - C.3 (Private use characters) | ||||
| - C.4 (Non-character code points) | ||||
| - C.5 (Surrogate codes) | ||||
| - C.6 (Inappropriate for plain text) | ||||
| - C.8 (Change display properties are deprecated) | ||||
| - C.9 (Tagging characters) | ||||
| No additional characters are prohibited. | ||||
| This profile requires bidirectional character checking per Section | ||||
| 6 of StringPrep. | ||||
| B.6. XMPP Stringprep Profiles: RFC 3920 Nodeprep | ||||
| Description: Localpart of JabberID ("JID"), as in: | Description: Localpart of JabberID ("JID"), as in: | |||
| localpart@domainpart/resourcepart | localpart@domainpart/resourcepart | |||
| How It's Used: - Usernames (e.g., stpeter@jabber.org) - Chatroom | ||||
| names (e.g., precis@jabber.ietf.org) - Publish-subscribe nodes - | How It's Used: | |||
| Bot names | - Usernames (e.g., stpeter@jabber.org) | |||
| Who Generates It: - Typically, end users via an XMPP client - | - Chatroom names (e.g., precis@jabber.ietf.org) | |||
| Sometimes created in an automated fashion | - Publish-subscribe nodes | |||
| User Input Methods: - Typed by user - Copy-and-paste - Perhaps voice | - Bot names | |||
| input - Clicking a URI/IRI | ||||
| Enforcement: - Rules enforced by server / add-on service (e.g., | Who Generates It: | |||
| - Typically, end users via an XMPP client | ||||
| - Sometimes created in an automated fashion | ||||
| User Input Methods: | ||||
| - Typed by user | ||||
| - Copy-and-paste | ||||
| - Perhaps voice input | ||||
| - Clicking a URI/IRI | ||||
| Enforcement: Rules enforced by server / add-on service (e.g., | ||||
| chatroom service) on registration of account, creation of room, | chatroom service) on registration of account, creation of room, | |||
| etc. | etc. | |||
| Comparison Method: "Type 2" (common algorithm) | Comparison Method: "Type 2" (common algorithm) | |||
| Case Folding, Sensitivity, Preservation: - Strings are always folded | ||||
| to lowercase - Case is not preserved | Case Folding, Sensitivity, Preservation: | |||
| Impact of Comparison: False positives: - unable to authenticate at | - Strings are always folded to lowercase | |||
| server (or authenticate to wrong account) - add wrong person to | - Case is not preserved | |||
| buddy list - join the wrong chatroom - improperly grant privileges | ||||
| (e.g., chatroom admin) - subscribe to wrong pubsub node - interact | Impact of Comparison: | |||
| with wrong bot - allow communication with blocked entity False | False positives: | |||
| negatives: - unable to authenticate - unable to add someone to | - unable to authenticate at server (or authenticate to wrong | |||
| buddy list - unable to join desired chatroom - unable to use | account) | |||
| granted privileges (e.g., chatroom admin) - unable to subscribe to | - add wrong person to buddy list | |||
| desired pubsub node - unable to interact with desired bot - | - join the wrong chatroom | |||
| disallow communication with unblocked entity | - improperly grant privileges (e.g., chatroom admin) | |||
| - subscribe to wrong pubsub node | ||||
| - interact with wrong bot | ||||
| - allow communication with blocked entity | ||||
| False negatives: | ||||
| - unable to authenticate | ||||
| - unable to add someone to buddy list | ||||
| - unable to join desired chatroom | ||||
| - unable to use granted privileges (e.g., chatroom admin) | ||||
| - unable to subscribe to desired pubsub node | ||||
| - unable to interact with desired bot | ||||
| - disallow communication with unblocked entity | ||||
| Normalization: NFKC | Normalization: NFKC | |||
| Mapping: Spaces are mapped to nothing | Mapping: Spaces are mapped to nothing | |||
| Disallowed Characters: ",&,',/,:,<,>,@ | Disallowed Characters: ",&,',/,:,<,>,@ | |||
| String Classes: - Often similar to generic username - Often similar | String Classes: | |||
| to localpart of email address - Sometimes same as localpart of | - Often similar to generic username | |||
| email address | - Often similar to localpart of email address | |||
| - Sometimes same as localpart of email address | ||||
| Internal Structure: None | Internal Structure: None | |||
| User Output: - vCard - email signature - web page / directory - text | ||||
| of message (e.g., in a chatroom) | ||||
| Operations: - Sometimes concatenated with other data and then used | ||||
| as input to a cryptographic hash function | ||||
| B.7. XMPP Stringprep Profiles: RFC3920 Resourceprep | User Output: | |||
| - vCard | ||||
| - email signature | ||||
| - web page / directory | ||||
| - text of message (e.g., in a chatroom) | ||||
| Description: - Resourcepart of JabberID ("JID"), as in: | Operations: Sometimes concatenated with other data and then used as | |||
| localpart@domainpart/resourcepart - Typically free-form text | input to a cryptographic hash function | |||
| How It's Used: - Device / session names (e.g., | ||||
| stpeter@jabber.org/Home) - Nicknames (e.g., | B.7. XMPP Stringprep Profiles: RFC 3920 Resourceprep | |||
| precis@jabber.ietf.org/StPeter) | ||||
| Who Generates It: - Often human users via an XMPP client - Often | Description: | |||
| generated in an automated fashion by client or server | - Resourcepart of JabberID ("JID"), as in: | |||
| User Input Methods: - Typed by user - Copy-and-paste - Perhaps voice | localpart@domainpart/resourcepart | |||
| input - Clicking a URI/IRI | - Typically free-form text | |||
| Enforcement: - Rules enforced by server / add-on service (e.g., | ||||
| How It's Used: | ||||
| - Device / session names (e.g., stpeter@jabber.org/Home) | ||||
| - Nicknames (e.g., precis@jabber.ietf.org/StPeter) | ||||
| Who Generates It: | ||||
| - Often human users via an XMPP client | ||||
| - Often generated in an automated fashion by client or server | ||||
| User Input Methods: | ||||
| - Typed by user | ||||
| - Copy-and-paste | ||||
| - Perhaps voice input | ||||
| - Clicking a URI/IRI | ||||
| Enforcement: Rules enforced by server / add-on service (e.g., | ||||
| chatroom service) on account login, joining a chatroom, etc. | chatroom service) on account login, joining a chatroom, etc. | |||
| Comparison Method: "Type 2" (byte-for-byte) | Comparison Method: "Type 2" (byte-for-byte) | |||
| Case Folding, Sensitivity, Preservation: - Strings are never folded | ||||
| - Case is preserved | Case Folding, Sensitivity, Preservation: | |||
| Impact of Comparison: False positives: - interact with wrong device | - Strings are never folded | |||
| (e.g., for file transfer or voice call) - interact with wrong | - Case is preserved | |||
| chatroom participant - improperly grant privileges (e.g., chatroom | ||||
| moderator) - allow communication with blocked entity False | Impact of Comparison: | |||
| negatives: - unable to choose desired chatroom nick - unable to | False positives: | |||
| use granted privileges (e.g., chatroom moderator) - disallow | - interact with wrong device (e.g., for file transfer or voice | |||
| communication with unblocked entity | call) | |||
| - interact with wrong chatroom participant | ||||
| - improperly grant privileges (e.g., chatroom moderator) | ||||
| - allow communication with blocked entity | ||||
| False negatives: | ||||
| - unable to choose desired chatroom nick | ||||
| - unable to use granted privileges (e.g., chatroom moderator) | ||||
| - disallow communication with unblocked entity | ||||
| Normalization: NFKC | Normalization: NFKC | |||
| Mapping: Spaces are mapped to nothing | Mapping: Spaces are mapped to nothing | |||
| Disallowed Characters: None | Disallowed Characters: None | |||
| String Classes: Basically a free-form identifier | String Classes: Basically a free-form identifier | |||
| Internal Structure: None | Internal Structure: None | |||
| User Output: - text of message (e.g., in a chatroom) - device names | ||||
| often not exposed to human users | User Output: | |||
| - text of message (e.g., in a chatroom) | ||||
| - device names often not exposed to human users | ||||
| Operations: Sometimes concatenated with other data and then used as | Operations: Sometimes concatenated with other data and then used as | |||
| input to a cryptographic hash function | input to a cryptographic hash function | |||
| B.8. EAP Stringprep Profiles: RFC3748 | B.8. EAP Stringprep Profiles: RFC 3748 | |||
| Description: RFC 3748 section 5 references Stringprep, but the WG | Description: RFC 3748, Section 5, references Stringprep, but the WG | |||
| did not agree with the text (was added by IESG) and there are no | did not agree with the text (was added by IESG) and there are no | |||
| known implementations that use Stringprep. The main problem with | known implementations that use Stringprep. The main problem with | |||
| that text is that the use of strings is a per-method concept, not | that text is that the use of strings is a per-method concept, not | |||
| a generic EAP concept and so RFC 3748 itself does not really use | a generic EAP concept and so RFC 3748 itself does not really use | |||
| Stringprep, but individual EAP methods could. As such, the | Stringprep, but individual EAP methods could. As such, the | |||
| answers to the template questions are mostly not applicable, but a | answers to the template questions are mostly not applicable, but a | |||
| few answers are universal across methods. The list of IANA | few answers are universal across methods. The list of IANA | |||
| registered EAP methods is at http://www.iana.org/assignments/ | registered EAP methods is at | |||
| eap-numbers/eap-numbers.xml#eap-numbers-3 | <http://www.iana.org/assignments/eap-numbers/eap-numbers.xml>. | |||
| Comparison Methods: n/a (per-method) | Comparison Methods: n/a (per-method) | |||
| Case Folding, Case Sensitivity, Case Preservation: n/a (per-method) | ||||
| Case Folding, Case-Sensitivity, Case Preservation: n/a (per-method) | ||||
| Impact of comparison: A false positive results in unauthorized | Impact of comparison: A false positive results in unauthorized | |||
| network access (and possibly theft of service if some else is | network access (and possibly theft of service if some else is | |||
| billed). A false negative results in lack of authorized network | billed). A false negative results in lack of authorized network | |||
| access (no connectivity). | access (no connectivity). | |||
| User input: n/a (per-method) | User input: n/a (per-method) | |||
| Normalization: n/a (per-method) | Normalization: n/a (per-method) | |||
| Mapping: n/a (per-method) | Mapping: n/a (per-method) | |||
| Disallowed characters: n/a (per-method) | Disallowed characters: n/a (per-method) | |||
| String classes: Although some EAP methods may use a syntax similar | String classes: Although some EAP methods may use a syntax similar | |||
| to other types of identifiers, EAP mandates that the actual values | to other types of identifiers, EAP mandates that the actual values | |||
| must not be assumed to be identifiers usable with anything else. | must not be assumed to be identifiers usable with anything else. | |||
| Internal structure: n/a (per-method) | Internal structure: n/a (per-method) | |||
| User output: Identifiers are never human displayed except perhaps as | User output: Identifiers are never human displayed except perhaps as | |||
| they're typed by a human. | they're typed by a human. | |||
| Operations: n/a (per-method) | Operations: n/a (per-method) | |||
| Community considerations: There is no resistance to change for the | Community considerations: There is no resistance to change for the | |||
| base EAP protocol (as noted, the WG didn't want the existing | base EAP protocol (as noted, the WG didn't want the existing | |||
| text). However actual use of Stringprep, if any, within specific | text). However, actual use of Stringprep, if any, within specific | |||
| EAP methods may have resistance. It is currently unknown whether | EAP methods may have resistance. It is currently unknown whether | |||
| any EAP methods use Stringprep. | any EAP methods use Stringprep. | |||
| Authors' Addresses | Authors' Addresses | |||
| Marc Blanchet | Marc Blanchet | |||
| Viagenie | Viagenie | |||
| 246 Aberdeen | 246 Aberdeen | |||
| Quebec, QC G1R 2E1 | Quebec, QC G1R 2E1 | |||
| Canada | Canada | |||
| Email: Marc.Blanchet@viagenie.ca | EMail: Marc.Blanchet@viagenie.ca | |||
| URI: http://viagenie.ca | URI: http://viagenie.ca | |||
| Andrew Sullivan | Andrew Sullivan | |||
| Dyn, Inc. | Dyn, Inc. | |||
| 150 Dow St | 150 Dow St | |||
| Manchester, NH 03101 | Manchester, NH 03101 | |||
| U.S.A. | U.S.A. | |||
| Email: asullivan@dyn.com | EMail: asullivan@dyn.com | |||
| End of changes. 227 change blocks. | ||||
| 600 lines changed or deleted | 835 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||