| < draft-melnikov-precis-saslprepbis-03.txt | draft-melnikov-precis-saslprepbis-04.txt > | |||
|---|---|---|---|---|
| Precis P. Saint-Andre | Precis P. Saint-Andre | |||
| Internet-Draft Cisco Systems, Inc. | Internet-Draft Cisco Systems, Inc. | |||
| Obsoletes: 4013 (if approved) A. Melnikov | Obsoletes: 4013 (if approved) A. Melnikov | |||
| Intended status: Standards Track Isode Ltd | Intended status: Standards Track Isode Ltd | |||
| Expires: March 18, 2013 September 14, 2012 | Expires: March 27, 2013 September 23, 2012 | |||
| Preparation and Comparison of Internationalized Strings Representing | Preparation and Comparison of Internationalized Strings Representing | |||
| Simple User Names and Passwords | Simple User Names and Passwords | |||
| draft-melnikov-precis-saslprepbis-03 | draft-melnikov-precis-saslprepbis-04 | |||
| Abstract | Abstract | |||
| This document describes how to handle Unicode strings representing | This document describes how to handle Unicode strings representing | |||
| simple user names and passwords, primarily for purposes of | simple user names and passwords, primarily for purposes of | |||
| comparison. This profile is intended to be used by Simple | comparison. This profile is intended to be used by Simple | |||
| Authentication and Security Layer (SASL) mechanisms (such as PLAIN | Authentication and Security Layer (SASL) mechanisms (such as PLAIN | |||
| and SCRAM-SHA-1), as well as other protocols that exchange simple | and SCRAM-SHA-1), as well as other protocols that exchange simple | |||
| user names or passwords. This document obsoletes RFC 4013. | user names or passwords. This document obsoletes RFC 4013. | |||
| skipping to change at page 1, line 37 ¶ | skipping to change at page 1, line 37 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on March 18, 2013. | This Internet-Draft will expire on March 27, 2013. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2012 IETF Trust and the persons identified as the | Copyright (c) 2012 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 | |||
| skipping to change at page 2, line 16 ¶ | skipping to change at page 2, line 16 ¶ | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 1.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 | 1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Simple User Names . . . . . . . . . . . . . . . . . . . . . . 4 | 2. Simple User Names . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2.1. Definition . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2.1. Definition . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2.2. Preparation . . . . . . . . . . . . . . . . . . . . . . . 4 | 2.2. Preparation . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2.3. Migration . . . . . . . . . . . . . . . . . . . . . . . . 5 | 3. Passwords . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 3. Passwords . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 3.1. Definition . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 3.1. Definition . . . . . . . . . . . . . . . . . . . . . . . . 6 | 3.2. Preparation . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 3.2. Preparation . . . . . . . . . . . . . . . . . . . . . . . 6 | 4. Migration . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 3.3. Migration . . . . . . . . . . . . . . . . . . . . . . . . 7 | 4.1. User Names . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 4. Open Issues . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 4.2. Passwords . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 5. Security Considerations . . . . . . . . . . . . . . . . . . . 8 | 5. Security Considerations . . . . . . . . . . . . . . . . . . . 8 | |||
| 5.1. Password/Passphrase Strength . . . . . . . . . . . . . . . 8 | 5.1. Password/Passphrase Strength . . . . . . . . . . . . . . . 8 | |||
| 5.2. Reuse of PRECIS . . . . . . . . . . . . . . . . . . . . . 8 | 5.2. Reuse of PRECIS . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 5.3. Reuse of Unicode . . . . . . . . . . . . . . . . . . . . . 8 | 5.3. Reuse of Unicode . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 8 | 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 6.1. Use of NameClass . . . . . . . . . . . . . . . . . . . . . 8 | 6.1. Use of NameClass . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 6.2. Use of FreeClass . . . . . . . . . . . . . . . . . . . . . 9 | 6.2. Use of FreeClass . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 7. References . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 7. Open Issues . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 7.1. Normative References . . . . . . . . . . . . . . . . . . . 9 | 8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 7.2. Informative References . . . . . . . . . . . . . . . . . . 9 | 8.1. Normative References . . . . . . . . . . . . . . . . . . . 10 | |||
| Appendix A. Differences from RFC 4013 . . . . . . . . . . . . . . 10 | 8.2. Informative References . . . . . . . . . . . . . . . . . . 10 | |||
| Appendix A. Differences from RFC 4013 . . . . . . . . . . . . . . 11 | ||||
| Appendix B. Acknowledgements . . . . . . . . . . . . . . . . . . 11 | Appendix B. Acknowledgements . . . . . . . . . . . . . . . . . . 11 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 11 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 1. Introduction | 1. Introduction | |||
| 1.1. Overview | 1.1. Overview | |||
| User names and passwords are used pervasively in authentication and | User names and passwords are used pervasively in authentication and | |||
| authorization on the Internet. To increase the likelihood that the | authorization on the Internet. To increase the likelihood that the | |||
| input and comparison of user names and passwords will work in ways | input and comparison of user names and passwords will work in ways | |||
| that make sense for typical users throughout the world, this document | that make sense for typical users throughout the world, this document | |||
| defines rules for preparing and comparing internationalized strings | defines rules for preparing and comparing internationalized strings | |||
| skipping to change at page 3, line 25 ¶ | skipping to change at page 3, line 25 ¶ | |||
| The algorithms defined in this document assume that all strings are | The algorithms defined in this document assume that all strings are | |||
| comprised of characters from the Unicode character set [UNICODE]. | comprised of characters from the Unicode character set [UNICODE]. | |||
| The algorithms are designed for use in Simple Authentication and | The algorithms are designed for use in Simple Authentication and | |||
| Security Layer (SASL) [RFC4422] mechanisms, such as PLAIN [RFC4616] | Security Layer (SASL) [RFC4422] mechanisms, such as PLAIN [RFC4616] | |||
| and SCRAM-SHA-1 [RFC5802]. However, they might be applicable | and SCRAM-SHA-1 [RFC5802]. However, they might be applicable | |||
| wherever simple user names or passwords are used. This profile is | wherever simple user names or passwords are used. This profile is | |||
| not intended for use in preparing strings that are not simple user | not intended for use in preparing strings that are not simple user | |||
| names (e.g., email addresses, DNS domain names, LDAP distinguished | names (e.g., email addresses, DNS domain names, LDAP distinguished | |||
| names), nor in cases where identifiers or secrets are not character | names), nor in cases where identifiers or secrets are not strings | |||
| data (e.g., keys) or require different handling (e.g., case folding). | (e.g., keys or certificates) or require different handling (e.g., | |||
| case folding). | ||||
| This document builds upon the PRECIS framework defined in | This document builds upon the PRECIS framework defined in | |||
| [FRAMEWORK], which differs fundamentally from the stringprep | [FRAMEWORK], which differs fundamentally from the stringprep | |||
| technology [RFC3454] used in SASLprep [RFC4013]. The primary | technology [RFC3454] used in SASLprep [RFC4013]. The primary | |||
| difference is that stringprep profiles allowed all characters except | difference is that stringprep profiles allowed all characters except | |||
| those which were explicitly disallowed, whereas PRECIS profiles | those which were explicitly disallowed, whereas PRECIS profiles | |||
| disallow all characters except those which are explicitly allowed | disallow all characters except those which are explicitly allowed | |||
| (this "inclusion model" was originally used for internationalized | (this "inclusion model" was originally used for internationalized | |||
| domain names in [RFC5891]; see [RFC5894] for further discussion). It | domain names in [RFC5891]; see [RFC5894] for further discussion). It | |||
| is important to keep this distinction in mind when comparing the | is important to keep this distinction in mind when comparing the | |||
| technology defined in this document to SASLprep [RFC4013]. | technology defined in this document to SASLprep [RFC4013]. | |||
| This document obsoletes RFC 4013. | This document obsoletes RFC 4013. | |||
| 1.2. Terminology | 1.2. Terminology | |||
| Many important terms used in this document are defined in | Many important terms used in this document are defined in | |||
| [FRAMEWORK], [RFC4422], [RFC5890], [RFC6365], and [UNICODE]. The | [FRAMEWORK], [RFC4422], [RFC5890], [RFC6365], and [UNICODE]. The | |||
| term "non-ASCII" space refers to any Unicode code point with a | term "non-ASCII space" refers to any Unicode code point with a | |||
| general category of "Zs", with the exception of U+0020 (here called | general category of "Zs", with the exception of U+0020 (here called | |||
| "ASCII space"). | "ASCII space"). | |||
| As used here, the term "password" is not literally limited to a word; | As used here, the term "password" is not literally limited to a word; | |||
| i.e., a password could be a passphrase consisting of more than one | i.e., a password could be a passphrase consisting of more than one | |||
| word, perhaps separated by spaces or other such characters. | word, perhaps separated by spaces or other such characters. | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
| skipping to change at page 4, line 24 ¶ | skipping to change at page 4, line 24 ¶ | |||
| Some SASL mechanisms (e.g., CRAM-MD5, DIGEST-MD5, and SCRAM) specify | Some SASL mechanisms (e.g., CRAM-MD5, DIGEST-MD5, and SCRAM) specify | |||
| that the authentication identity used in the context of such | that the authentication identity used in the context of such | |||
| mechanisms is a "simple user name" (see Section 2 of [RFC4422] as | mechanisms is a "simple user name" (see Section 2 of [RFC4422] as | |||
| well as [RFC4013]). However, the exact form of a simple user name in | well as [RFC4013]). However, the exact form of a simple user name in | |||
| any particular mechanism or deployment thereof is a local matter, and | any particular mechanism or deployment thereof is a local matter, and | |||
| a simple user name does not necessarily map to an application | a simple user name does not necessarily map to an application | |||
| identifier such as the localpart of an email address. | identifier such as the localpart of an email address. | |||
| For purposes of preparation and comparison of authentication | For purposes of preparation and comparison of authentication | |||
| identities, this document specifies that a simple user name is a | identities, this document specifies that a simple user name is a | |||
| string of [UNICODE] code points, encoded using UTF-8 [RFC3629], and | string of Unicode code points [UNICODE], encoded using UTF-8 | |||
| structured as an ordered sequence of "simpleparts" (where the | [RFC3629], and structured as an ordered sequence of "simpleparts" | |||
| complete simple user name can consist of a single simplepart or a | (where the complete simple user name can consist of a single | |||
| space-separated sequence of simpleparts). | simplepart or a space-separated sequence of simpleparts). | |||
| Therefore the syntax for a simple user name is defined as follows | Therefore the syntax for a simple user name is defined as follows | |||
| using the Augmented Backus-Naur Form (ABNF) as specified in | using the Augmented Backus-Naur Form (ABNF) as specified in | |||
| [RFC5234]. | [RFC5234]. | |||
| simpleusername = simplepart [1*(1*SP simplepart)] | simpleusername = simplepart [1*(1*SP simplepart)] | |||
| simplepart = 1*(namepoint) | simplepart = 1*(namepoint) | |||
| ; | ; | |||
| ; a "namepoint" is a UTF-8 encoded | ; a "namepoint" is a UTF-8 encoded | |||
| ; Unicode code point that conforms to | ; Unicode code point that conforms to | |||
| ; the "NameClass" string class defined | ; the "NameClass" string class defined | |||
| ; in draft-ietf-precis-framework | ; in draft-ietf-precis-framework | |||
| ; | ; | |||
| Note well that all code points and blocks not explicitly allowed in | ||||
| the PRECIS NameClass are disallowed; this includes private use | ||||
| characters, surrogate code points, and the other code points and | ||||
| blocks defined as "Prohibited Output" in Section 2.3 of RFC 4013. | ||||
| 2.2. Preparation | 2.2. Preparation | |||
| A simple user name MUST NOT be zero bytes in length. This rule is to | A simple user name MUST NOT be zero bytes in length. This rule is to | |||
| be enforced after any normalization or mapping of code points. | be enforced after any normalization and mapping of code points. | |||
| Each simplepart of a simple user name MUST be treated as follows, | ||||
| where the operations specified MUST be completed in the order shown: | ||||
| 1. Apply Unicode Normalization Form C (NFC) to all characters. | Each simplepart of a simple user name MUST conform to the definition | |||
| of the PRECIS NameClass provided in [FRAMEWORK], where the | ||||
| normalization, casemapping, and directionality rules are as described | ||||
| below. | ||||
| 2. Map uppercase and titlecase characters to their lowercase | 1. Unicode Normalization Form C (NFC) MUST be applied to all | |||
| equivalents. | characters. | |||
| 3. Optionally apply additional mappings, such as those defined in | 2. Uppercase and titlecase characters MUST be mapped to their | |||
| [MAPPINGS]. | lowercase equivalents. | |||
| 4. Ensure that the resulting string conforms to the definition of | 3. Additional mappings MAY be applied, such as those defined in | |||
| the PRECIS NameClass. | [I-D.yoneya-precis-mappings]. | |||
| With regard to directionality, the "Bidi Rule" provided in [RFC5893] | With regard to directionality, the "Bidi Rule" provided in [RFC5893] | |||
| applies. | applies. | |||
| 2.3. Migration | ||||
| The rules defined in the previous section differ slightly from those | ||||
| defined by the SASLprep specification [RFC4013]. Therefore, | ||||
| deployments that currently use SASLprep for handling user names will | ||||
| need to scrub existing data when migrating to use of the rules | ||||
| defined here. In particular: | ||||
| o SASLprep specified the use of Unicode Normalization Form KC | ||||
| (NFKC), whereas this usage of the PRECIS NameClass employs Unicode | ||||
| Normalization Form C (NFC). In practice this change is unlikely | ||||
| to cause significant problems, because NFKC provides methods for | ||||
| mapping Unicode code points with compatibility equivalents to | ||||
| those equivalents, whereas the PRECIS NameClass entirely disallows | ||||
| Unicode code points with compatibility equivalents. For migration | ||||
| purposes, deployments need to search their simple user names for | ||||
| Unicode code points with compatibility equivalents and map those | ||||
| code points to their compatibility equivalents. | ||||
| o SASLprep mapped non-ASCII spaces to ASCII space (U+0020), whereas | ||||
| the PRECIS NameClass entirely disallows non-ASCII spaces. For | ||||
| migration purposes, deployments need to convert non-ASCII space | ||||
| characters to ASCII space in simple user names. | ||||
| o SASLprep mapped the "characters commonly mapped to nothing" from | ||||
| Appendix B.1 of [RFC3454]) to nothing, whereas the PRECIS | ||||
| NameClass entirely disallows such characters, which correspond to | ||||
| the code points from the "M" category defined under Section 6.13 | ||||
| of [FRAMEWORK] (with the exception of U+1806 MONGOLIAN TODO SOFT | ||||
| HYPHEN, which was commonly mapped to nothing in Unicode 3.2 but at | ||||
| the time of this writing is allowed by Unicode 6.1). For | ||||
| migration purposes, deployments need to remove code points from | ||||
| the PRECIS "M" category in simple user names. | ||||
| o SASLprep allowed uppercase and titlecase characters, whereas this | ||||
| usage of the PRECIS NameClass maps uppercase and titlecase | ||||
| characters to their lowercase equivalents. For migration | ||||
| purposes, deployments can either convert uppercase and titlecase | ||||
| characters to their lowercase equivalents in simple user names | ||||
| (thus losing the case information) or preserve uppercase and | ||||
| titlecase characters and ignore the case difference when comparing | ||||
| simple user names. | ||||
| Note well that all code points and blocks not explicitly allowed in | ||||
| the PRECIS NameClass are disallowed; this includes private use | ||||
| characters, surrogate code points, and the other code points and | ||||
| blocks defined as "Prohibited Output" in Section 2.3 of RFC 4013. | ||||
| 3. Passwords | 3. Passwords | |||
| 3.1. Definition | 3.1. Definition | |||
| For purposes of preparation and comparison of passwords, this | For purposes of preparation and comparison of passwords, this | |||
| document specifies that a password is a string of [UNICODE] code | document specifies that a password is a string of Unicode code points | |||
| points, encoded using UTF-8 [RFC3629], and conformant to the PRECIS | [UNICODE], encoded using UTF-8 [RFC3629], and conformant to the | |||
| FreeClass. | PRECIS FreeClass. | |||
| Therefore the syntax for a password is defined as follows using the | Therefore the syntax for a password is defined as follows using the | |||
| Augmented Backus-Naur Form (ABNF) as specified in [RFC5234]. | Augmented Backus-Naur Form (ABNF) as specified in [RFC5234]. | |||
| password = 1*(freepoint) | password = 1*(freepoint) | |||
| ; | ; | |||
| ; a "freepoint" is a UTF-8 encoded | ; a "freepoint" is a UTF-8 encoded | |||
| ; Unicode code point that conforms to | ; Unicode code point that conforms to | |||
| ; the "FreeClass" string class defined | ; the "FreeClass" string class defined | |||
| ; in draft-ietf-precis-framework | ; in draft-ietf-precis-framework | |||
| ; | ; | |||
| Note well that all code points and blocks not explicitly allowed in | ||||
| the PRECIS FreeClass are disallowed; this includes private use | ||||
| characters, surrogate code points, and the other code points and | ||||
| blocks defined as "Prohibited Output" in Section 2.3 of RFC 4013. | ||||
| 3.2. Preparation | 3.2. Preparation | |||
| A password MUST NOT be zero bytes in length. This rule is to be | A password MUST NOT be zero bytes in length. This rule is to be | |||
| enforced after any normalization or mapping of code points. | enforced after any normalization and mapping of code points. | |||
| A password MUST be treated as follows, where the operations specified | A password MUST be treated as follows, where the operations specified | |||
| MUST be completed in the order shown: | MUST be completed in the order shown: | |||
| 1. Apply Unicode Normalization Form C (NFC) to all characters. | 1. Apply Unicode Normalization Form C (NFC) to all characters. | |||
| 2. Map any instances of non-ASCII space to ASCII space (U+0020). | 2. Map any instances of non-ASCII space to ASCII space (U+0020). | |||
| 3. Ensure that the resulting string conforms to the definition of | 3. Ensure that the resulting string conforms to the definition of | |||
| the PRECIS FreeClass. | the PRECIS FreeClass. | |||
| skipping to change at page 7, line 21 ¶ | skipping to change at page 6, line 26 ¶ | |||
| and similar rules are unnecessary and inapplicable to passwords, | and similar rules are unnecessary and inapplicable to passwords, | |||
| since they can reduce the range of characters that are allowed in a | since they can reduce the range of characters that are allowed in a | |||
| string and therefore reduce the amount of entropy that is possible in | string and therefore reduce the amount of entropy that is possible in | |||
| a password. Furthermore, such rules are intended to minimize the | a password. Furthermore, such rules are intended to minimize the | |||
| possibility that the same string will be displayed differently on a | possibility that the same string will be displayed differently on a | |||
| system set for right-to-left display and a system set for left-to- | system set for right-to-left display and a system set for left-to- | |||
| right display; however, passwords are typically not displayed at all | right display; however, passwords are typically not displayed at all | |||
| and are rarely meant to be interoperable across different systems in | and are rarely meant to be interoperable across different systems in | |||
| the way that non-secret strings like domain names and user names are. | the way that non-secret strings like domain names and user names are. | |||
| 3.3. Migration | 4. Migration | |||
| The rules defined in the previous section differ slightly from those | The rules defined in this specification differ slightly from those | |||
| defined by the SASLprep specification [RFC4013]. Depending on local | defined by the SASLprep specification [RFC4013]. The following | |||
| service policy, migration from RFC 4013 to this specification might | sections describe these differences, along with their implications | |||
| not involve any scrubbing of data (since passwords might not be | for migration, in more detail. | |||
| stored in the clear anyway); however, service providers need to be | ||||
| aware of possible issues that might arise during migration. In | 4.1. User Names | |||
| particular: | ||||
| Deployments that currently use SASLprep for handling user names might | ||||
| need to scrub existing data when migrating to use of the rules | ||||
| defined in this specification. In particular: | ||||
| o SASLprep specified the use of Unicode Normalization Form KC | ||||
| (NFKC), whereas this usage of the PRECIS NameClass employs Unicode | ||||
| Normalization Form C (NFC). In practice this change is unlikely | ||||
| to cause significant problems, because NFKC provides methods for | ||||
| mapping Unicode code points with compatibility equivalents to | ||||
| those equivalents, whereas the PRECIS NameClass entirely disallows | ||||
| Unicode code points with compatibility equivalents (i.e., during | ||||
| comparison NFKC is more "aggressive" about finding matches than is | ||||
| NFC). A few examples might suffice to indicate the nature of the | ||||
| problem: (1) U+017F LATIN SMALL LETTER LONG S is compatibility | ||||
| equivalent to U+0073 LATIN SMALL LETTER S (2) U+2163 ROMAN NUMERAL | ||||
| FOUR is compatibility equivalent to U+0049 LATIN CAPITAL LETTER I | ||||
| and U+0056 LATIN CAPITAL LETTER V (3) U+FB01 LATIN SMALL LIGATURE | ||||
| FI is compatibility equivalent to U+0066 LATIN SMALL LETTER F and | ||||
| U+0069 LATIN SMALL LETTER I. Under SASLprep, the use of NFKC also | ||||
| handled the mapping of fullwidth and halfwidth code points to | ||||
| their decomposition equivalents (see | ||||
| [I-D.yoneya-precis-mappings]). Although it is expected that code | ||||
| points with compatibility equivalents are rare in existing user | ||||
| names, for migration purposes deployments might want to search | ||||
| their database of user names for Unicode code points with | ||||
| compatibility equivalents and map those code points to their | ||||
| compatibility equivalents. | ||||
| o SASLprep mapped non-ASCII spaces to ASCII space (U+0020), whereas | ||||
| the PRECIS NameClass entirely disallows non-ASCII spaces. The | ||||
| non-ASCII space characters are U+00A0 NO-BREAK SPACE, U+1680 OGHAM | ||||
| SPACE MARK, U+180E MONGOLIAN VOWEL SEPARATOR, U+2000 EN QUAD | ||||
| through U+200A HAIR SPACE, U+202F NARROW NO-BREAK SPACE, U+205F | ||||
| MEDIUM MATHEMATICAL SPACE, and U+3000 IDEOGRAPHIC SPACE. For | ||||
| migration purposes, deployments might want to convert non-ASCII | ||||
| space characters to ASCII space in simple user names. | ||||
| o SASLprep mapped the "characters commonly mapped to nothing" from | ||||
| Appendix B.1 of [RFC3454]) to nothing, whereas the PRECIS | ||||
| NameClass entirely disallows most of these characters, which | ||||
| correspond to the code points from the "M" category defined under | ||||
| Section 6.13 of [FRAMEWORK] (with the exception of U+1806 | ||||
| MONGOLIAN TODO SOFT HYPHEN, which was "commonly mapped to nothing" | ||||
| in Unicode 3.2 but at the time of this writing does not have a | ||||
| derived property of Default_Ignorable_Code_Point in Unicode 6.1). | ||||
| For migration purposes, deployments might want to remove code | ||||
| points contained in the PRECIS "M" category from simple user | ||||
| names. | ||||
| o SASLprep allowed uppercase and titlecase characters, whereas this | ||||
| usage of the PRECIS NameClass maps uppercase and titlecase | ||||
| characters to their lowercase equivalents. For migration | ||||
| purposes, deployments can either convert uppercase and titlecase | ||||
| characters to their lowercase equivalents in simple user names | ||||
| (thus losing the case information) or preserve uppercase and | ||||
| titlecase characters and ignore the case difference when comparing | ||||
| simple user names. | ||||
| 4.2. Passwords | ||||
| Depending on local service policy, migration from RFC 4013 to this | ||||
| specification might not involve any scrubbing of data (since | ||||
| passwords might not be stored in the clear anyway); however, service | ||||
| providers need to be aware of possible issues that might arise during | ||||
| migration. In particular: | ||||
| o SASLprep specified the use of Unicode Normalization Form KC | o SASLprep specified the use of Unicode Normalization Form KC | |||
| (NFKC), whereas this usage of the PRECIS FreeClass employs Unicode | (NFKC), whereas this usage of the PRECIS FreeClass employs Unicode | |||
| Normalization Form C (NFC). Because NFKC is more aggressive about | Normalization Form C (NFC). Because NFKC is more aggressive about | |||
| finding matches than NFC, in practice this change is unlikely to | finding matches than NFC, in practice this change is unlikely to | |||
| cause significant problems and indeed will probably result in | cause significant problems and indeed has the security benefit of | |||
| fewer false positives when comparing passwords. | probably resulting in fewer false positives when comparing | |||
| passwords. A few examples might suffice to indicate the nature of | ||||
| the problem: (1) U+017F LATIN SMALL LETTER LONG S is compatibility | ||||
| equivalent to U+0073 LATIN SMALL LETTER S (2) U+2163 ROMAN NUMERAL | ||||
| FOUR is compatibility equivalent to U+0049 LATIN CAPITAL LETTER I | ||||
| and U+0056 LATIN CAPITAL LETTER V (3) U+FB01 LATIN SMALL LIGATURE | ||||
| FI is compatibility equivalent to U+0066 LATIN SMALL LETTER F and | ||||
| U+0069 LATIN SMALL LETTER I. Under SASLprep, the use of NFKC also | ||||
| handled the mapping of fullwidth and halfwidth code points to | ||||
| their decomposition equivalents (see | ||||
| [I-D.yoneya-precis-mappings]). Although it is expected that code | ||||
| points with compatibility equivalents are rare in existing | ||||
| passwords, some passwords that matched when SASLprep was used | ||||
| might no longer work when the rules in this specification are | ||||
| applied. | ||||
| o SASLprep mapped the "characters commonly mapped to nothing" from | o SASLprep mapped the "characters commonly mapped to nothing" from | |||
| Appendix B.1 of [RFC3454]) to nothing, whereas the PRECIS | Appendix B.1 of [RFC3454]) to nothing, whereas the PRECIS | |||
| FreeClass entirely disallows such characters, which correspond to | FreeClass entirely disallows such characters, which correspond to | |||
| the code points from the "M" category defined under Section 6.13 | the code points from the "M" category defined under Section 6.13 | |||
| of [FRAMEWORK] (with the exception of U+1806 MONGOLIAN TODO SOFT | of [FRAMEWORK] (with the exception of U+1806 MONGOLIAN TODO SOFT | |||
| HYPHEN, which was commonly mapped to nothing in Unicode 3.2 but at | HYPHEN, which was commonly mapped to nothing in Unicode 3.2 but at | |||
| the time of this writing is allowed by Unicode 6.1). | the time of this writing is allowed by Unicode 6.1). In practice, | |||
| this change will probably have no effect on comparison, but user- | ||||
| Note well that all code points and blocks not explicitly allowed in | oriented software might reject such code points instead of | |||
| the PRECIS FreeClass are disallowed; this includes private use | ignoring them during password preparation. | |||
| characters, surrogate code points, and the other code points and | ||||
| blocks defined as "Prohibited Output" in Section 2.3 of RFC 4013. | ||||
| 4. Open Issues | ||||
| We need to compare the output obtained when applying the new rules | ||||
| with Unicode 3.2 and Unicode 6.1 data to the output obtained when | ||||
| applying the SASLprep rules with Unicode 3.2 data, then make sure | ||||
| that the PRECIS Working Group and KITTEN Working Group are | ||||
| comfortable with any changes to the Unicode characters that are | ||||
| allowed and disallowed. (See also the migration issues described in | ||||
| the foregoing sections.) | ||||
| 5. Security Considerations | 5. Security Considerations | |||
| 5.1. Password/Passphrase Strength | 5.1. Password/Passphrase Strength | |||
| The ability to include a wide range of characters in passwords and | The ability to include a wide range of characters in passwords and | |||
| passphrases can increase the potential for creating a strong password | passphrases can increase the potential for creating a strong password | |||
| with high entropy. However, in practice, the ability to include such | with high entropy. However, in practice, the ability to include such | |||
| characters ought to be weighed against the possible need to reproduce | characters ought to be weighed against the possible need to reproduce | |||
| them on various devices using various input methods. | them on various devices using various input methods. | |||
| 5.2. Reuse of PRECIS | 5.2. Reuse of PRECIS | |||
| The security considerations described in [FRAMEWORK] apply to the | The security considerations described in [FRAMEWORK] apply to the | |||
| "NameClass" and "FreeClass" base string classes used in this document | "NameClass" and "FreeClass" base string classes used in this document | |||
| for user names and passwords, respectively. | for simple user names and passwords, respectively. | |||
| 5.3. Reuse of Unicode | 5.3. Reuse of Unicode | |||
| The security considerations described in [UTR39] apply to the use of | The security considerations described in [UTR39] apply to the use of | |||
| Unicode characters in user names and passwords. | Unicode characters in user names and passwords. | |||
| 6. IANA Considerations | 6. IANA Considerations | |||
| 6.1. Use of NameClass | 6.1. Use of NameClass | |||
| The IANA shall add an entry to the PRECIS Usage Registry for reuse of | The IANA shall add an entry to the PRECIS Usage Registry for reuse of | |||
| the PRECIS NameClass in SASL, as follows: | the PRECIS NameClass in SASL, as follows: | |||
| Application Protocol: SASL/Kerberos. | Applicability: Usernames in SASL and Kerberos. | |||
| Base Class: NameClass. | Base Class: NameClass. | |||
| Subclassing: No. | Subclass: No. | |||
| Directionality: The "Bidi Rule" defined in RFC 5893 applies. | Replaces: The SASLprep profile of Stringprep. | |||
| Casemapping: Map uppercase and titlecase code points to their | ||||
| lowercase equivalents. | ||||
| Normalization: NFC. | Normalization: NFC. | |||
| Specification: RFC XXXX. | Casemapping: Map uppercase and titlecase characters to lowercase. | |||
| Additional Mappings: None. | ||||
| Directionality: The "Bidi Rule" defined in RFC 5893 applies. | ||||
| Specification: RFC XXXX. [Note to RFC Editor: please change XXXX to | ||||
| the number issued for this specification.] | ||||
| 6.2. Use of FreeClass | 6.2. Use of FreeClass | |||
| The IANA shall add an entry to the PRECIS Usage Registry for reuse of | The IANA shall add an entry to the PRECIS Usage Registry for reuse of | |||
| the PRECIS FreeClass in SASL, as follows: | the PRECIS FreeClass in SASL, as follows: | |||
| Application Protocol: SASL/Kerberos. | Applicability: Passwords in SASL and Kerberos. | |||
| Base Class: FreeClass | Base Class: FreeClass | |||
| Subclassing: No. | Subclass: No. | |||
| Directionality: The "Bidi Rule" defined in RFC 5893 applies. | Replaces: The SASLprep profile of Stringprep. | |||
| Casemapping: None. | ||||
| Normalization: NFC. | Normalization: NFC. | |||
| Specification: RFC XXXX. | Casemapping: None. | |||
| Additional Mappings: Map non-ASCII space characters to ASCII space. | ||||
| Directionality: None. | ||||
| Specification: RFC XXXX. [Note to RFC Editor: please change XXXX to | ||||
| the number issued for this specification.] | ||||
| 7. References | 7. Open Issues | |||
| 7.1. Normative References | We need to compare the output obtained when applying the new rules | |||
| with Unicode 3.2 and Unicode 6.1 data to the output obtained when | ||||
| applying the SASLprep rules with Unicode 3.2 data, then make sure | ||||
| that the PRECIS Working Group and KITTEN Working Group are | ||||
| comfortable with any changes to the Unicode characters that are | ||||
| allowed and disallowed. (See also the migration issues described | ||||
| under Section 4.) | ||||
| 8. References | ||||
| 8.1. Normative References | ||||
| [FRAMEWORK] | [FRAMEWORK] | |||
| Saint-Andre, P. and M. Blanchet, "Precis Framework: | Saint-Andre, P. and M. Blanchet, "Precis Framework: | |||
| Handling Internationalized Strings in Protocols", | Handling Internationalized Strings in Protocols", | |||
| draft-ietf-precis-framework-05 (work in progress), | draft-ietf-precis-framework-05 (work in progress), | |||
| August 2012. | August 2012. | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
| [RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO | [RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO | |||
| 10646", STD 63, RFC 3629, November 2003. | 10646", STD 63, RFC 3629, November 2003. | |||
| [RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax | [RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax | |||
| Specifications: ABNF", STD 68, RFC 5234, January 2008. | Specifications: ABNF", STD 68, RFC 5234, January 2008. | |||
| [UNICODE] The Unicode Consortium, "The Unicode Standard, Version | [UNICODE] The Unicode Consortium, "The Unicode Standard, Version | |||
| 6.1", 2012, | 6.1", 2012, | |||
| <http://www.unicode.org/versions/Unicode6.1.0/>. | <http://www.unicode.org/versions/Unicode6.1.0/>. | |||
| 7.2. Informative References | 8.2. Informative References | |||
| [MAPPINGS] | [I-D.yoneya-precis-mappings] | |||
| YONEYA, Y. and T. NEMOTO, "Mapping characters for PRECIS | YONEYA, Y. and T. NEMOTO, "Mapping characters for PRECIS | |||
| classes", draft-yoneya-precis-mappings-02 (work in | classes", draft-yoneya-precis-mappings-02 (work in | |||
| progress), July 2012. | progress), July 2012. | |||
| [RFC3454] Hoffman, P. and M. Blanchet, "Preparation of | [RFC3454] Hoffman, P. and M. Blanchet, "Preparation of | |||
| Internationalized Strings ("stringprep")", RFC 3454, | Internationalized Strings ("stringprep")", RFC 3454, | |||
| December 2002. | December 2002. | |||
| [RFC4013] Zeilenga, K., "SASLprep: Stringprep Profile for User Names | [RFC4013] Zeilenga, K., "SASLprep: Stringprep Profile for User Names | |||
| and Passwords", RFC 4013, February 2005. | and Passwords", RFC 4013, February 2005. | |||
| skipping to change at page 10, line 48 ¶ | skipping to change at page 11, line 34 ¶ | |||
| [RFC6365] Hoffman, P. and J. Klensin, "Terminology Used in | [RFC6365] Hoffman, P. and J. Klensin, "Terminology Used in | |||
| Internationalization in the IETF", BCP 166, RFC 6365, | Internationalization in the IETF", BCP 166, RFC 6365, | |||
| September 2011. | September 2011. | |||
| [UTR39] The Unicode Consortium, "Unicode Technical Report #39: | [UTR39] The Unicode Consortium, "Unicode Technical Report #39: | |||
| Unicode Security Mechanisms", August 2010, | Unicode Security Mechanisms", August 2010, | |||
| <http://unicode.org/reports/tr39/>. | <http://unicode.org/reports/tr39/>. | |||
| Appendix A. Differences from RFC 4013 | Appendix A. Differences from RFC 4013 | |||
| The following substantive modifications were made from RFC 3920. | The following substantive modifications were made from RFC 4013. | |||
| o A single SASLprep algorithm was replaced by two separate | o A single SASLprep algorithm was replaced by two separate | |||
| algorithms: one for user names and another for passwords. | algorithms: one for simple user names and another for passwords. | |||
| o The new preparation algorithms use PRECIS instead of a stringprep | o The new preparation algorithms use PRECIS instead of a stringprep | |||
| profile. The new algorithms work independenctly of Unicode | profile. The new algorithms work independenctly of Unicode | |||
| versions. | versions. | |||
| o As recommended in the PRECIS framwork, changed the Unicode | o As recommended in the PRECIS framwork, changed the Unicode | |||
| normalization form from NFKC to NFC. | normalization form from NFKC to NFC. | |||
| o Some Unicode code points that were mapped to nothing in RFC 4013 | o Some Unicode code points that were mapped to nothing in RFC 4013 | |||
| are simply disallowed by PRECIS. | are simply disallowed by PRECIS. | |||
| Appendix B. Acknowledgements | Appendix B. Acknowledgements | |||
| Thanks to Yoshiro YONEYA and Takahiro NEMOTO for implementation | Thanks to Yoshiro YONEYA and Takahiro NEMOTO for implementation | |||
| feedback. Thanks also to Marc Blanchet, Joe Hildebrand, Alan DeKok, | feedback. Thanks also to Marc Blanchet, Joe Hildebrand, Alan DeKok, | |||
| Simon Josefsson, Jonathan Lennox, Pete Resnick, and Andrew Sullivan | Simon Josefsson, Jonathan Lennox, Matt Miller, Pete Resnick, and | |||
| for their input regarding the text. | Andrew Sullivan for their input regarding the text. | |||
| This document borrows some text from RFC 4013 and RFC 6120. | This document borrows some text from RFC 4013 and RFC 6120. | |||
| Authors' Addresses | Authors' Addresses | |||
| Peter Saint-Andre | Peter Saint-Andre | |||
| Cisco Systems, Inc. | Cisco Systems, Inc. | |||
| 1899 Wynkoop Street, Suite 600 | 1899 Wynkoop Street, Suite 600 | |||
| Denver, CO 80202 | Denver, CO 80202 | |||
| USA | USA | |||
| End of changes. 38 change blocks. | ||||
| 134 lines changed or deleted | 179 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||