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/ |