| < draft-ietf-precis-saslprepbis-07.txt | draft-ietf-precis-saslprepbis-08.txt > | |||
|---|---|---|---|---|
| PRECIS P. Saint-Andre | PRECIS P. Saint-Andre | |||
| Internet-Draft &yet | Internet-Draft &yet | |||
| 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: September 25, 2014 March 24, 2014 | Expires: April 13, 2015 October 10, 2014 | |||
| Preparation and Comparison of Internationalized Strings Representing | Preparation and Comparison of Internationalized Strings Representing | |||
| Usernames and Passwords | Usernames and Passwords | |||
| draft-ietf-precis-saslprepbis-07 | draft-ietf-precis-saslprepbis-08 | |||
| Abstract | Abstract | |||
| This document describes methods for handling Unicode strings | This document describes methods for handling Unicode strings | |||
| representing usernames and passwords. This document obsoletes RFC | representing usernames and passwords. This document obsoletes RFC | |||
| 4013. | 4013. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| skipping to change at page 1, line 34 ¶ | skipping to change at page 1, line 34 ¶ | |||
| 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 September 25, 2014. | This Internet-Draft will expire on April 13, 2015. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2014 IETF Trust and the persons identified as the | Copyright (c) 2014 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 . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 2. What the Username and Password Profiles Provide . . . . . . . 3 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 3. Preparation, Comparison, and Enforcement . . . . . . . . . . 4 | |||
| 4. Usernames . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 4. Usernames . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 4.1. Definition . . . . . . . . . . . . . . . . . . . . . . . 4 | 4.1. Definition . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 4.2. Preparation . . . . . . . . . . . . . . . . . . . . . . . 5 | 4.2. Preparation . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 4.2.1. Case Mapping . . . . . . . . . . . . . . . . . . . . 6 | 4.3. Enforcement . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 4.3. Examples . . . . . . . . . . . . . . . . . . . . . . . . 7 | 4.4. Comparison . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 4.5. Case Mapping . . . . . . . . . . . . . . . . . . . . . . 7 | ||||
| 4.6. Examples . . . . . . . . . . . . . . . . . . . . . . . . 8 | ||||
| 5. Passwords . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 5. Passwords . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 5.1. Definition . . . . . . . . . . . . . . . . . . . . . . . 9 | 5.1. Definition . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 5.2. Preparation . . . . . . . . . . . . . . . . . . . . . . . 10 | 5.2. Preparation . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 5.3. Examples . . . . . . . . . . . . . . . . . . . . . . . . 10 | 5.3. Enforcement . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 6. Migration . . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 5.4. Comparison . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 6.1. Usernames . . . . . . . . . . . . . . . . . . . . . . . . 11 | 5.5. Examples . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 6.2. Passwords . . . . . . . . . . . . . . . . . . . . . . . . 12 | 6. Migration . . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 13 | 6.1. Usernames . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 7.1. UsernameIdentifierClass . . . . . . . . . . . . . . . . . 13 | 6.2. Passwords . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 7.2. PasswordFreeformClass . . . . . . . . . . . . . . . . . . 14 | 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 8. Security Considerations . . . . . . . . . . . . . . . . . . . 15 | 7.1. UsernameIdentifierClass . . . . . . . . . . . . . . . . . 14 | |||
| 8.1. Password/Passphrase Strength . . . . . . . . . . . . . . 15 | 7.2. PasswordFreeformClass . . . . . . . . . . . . . . . . . . 15 | |||
| 8.2. Identifier Comparison . . . . . . . . . . . . . . . . . . 15 | 8. Security Considerations . . . . . . . . . . . . . . . . . . . 16 | |||
| 8.3. Reuse of PRECIS . . . . . . . . . . . . . . . . . . . . . 15 | 8.1. Password/Passphrase Strength . . . . . . . . . . . . . . 16 | |||
| 8.4. Reuse of Unicode . . . . . . . . . . . . . . . . . . . . 15 | 8.2. Identifier Comparison . . . . . . . . . . . . . . . . . . 16 | |||
| 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 15 | 8.3. Reuse of PRECIS . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 9.1. Normative References . . . . . . . . . . . . . . . . . . 15 | 8.4. Reuse of Unicode . . . . . . . . . . . . . . . . . . . . 16 | |||
| 9.2. Informative References . . . . . . . . . . . . . . . . . 16 | 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| Appendix A. Differences from RFC 4013 . . . . . . . . . . . . . 17 | 9.1. Normative References . . . . . . . . . . . . . . . . . . 16 | |||
| Appendix B. Acknowledgements . . . . . . . . . . . . . . . . . . 18 | 9.2. Informative References . . . . . . . . . . . . . . . . . 17 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 18 | Appendix A. Differences from RFC 4013 . . . . . . . . . . . . . 18 | |||
| Appendix B. Acknowledgements . . . . . . . . . . . . . . . . . . 19 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 19 | ||||
| 1. Introduction | 1. Introduction | |||
| Usernames and passwords are widely used for authentication and | Usernames and passwords are widely used for authentication and | |||
| authorization on the Internet, either directly when provided in | authorization on the Internet, either directly when provided in | |||
| plaintext (as in the SASL PLAIN mechanism [RFC4616] or the HTTP Basic | plaintext (as in the SASL PLAIN mechanism [RFC4616] or the HTTP Basic | |||
| scheme [RFC2617]) or indirectly when provided as the input to a | scheme [RFC2617]) or indirectly when provided as the input to a | |||
| cryptographic algorithm such as a hash function (as in the SASL SCRAM | cryptographic algorithm such as a hash function (as in the SASL SCRAM | |||
| mechanism [RFC5802] or the HTTP Digest scheme [RFC2617]). To | mechanism [RFC5802] or the HTTP Digest scheme [RFC2617]). | |||
| increase the likelihood that the input and comparison of usernames | ||||
| To increase the likelihood that the input and comparison of usernames | ||||
| and passwords will work in ways that make sense for typical users | and passwords will work in ways that make sense for typical users | |||
| throughout the world, this document defines rules for preparing and | throughout the world, this document defines rules for preparing and | |||
| comparing internationalized strings that represent usernames and | comparing internationalized strings that represent usernames and | |||
| passwords. | passwords. Such strings consist of characters from the Unicode | |||
| character set [UNICODE], especially characters outside the ASCII | ||||
| The methods specified in this document define two PRECIS profiles as | range [RFC20]. The rules for handling such strings are specified | |||
| explained in the PRECIS framework specification | through profiles of the string classes defined in the PRECIS | |||
| framework specification [I-D.ietf-precis-framework]. | ||||
| [I-D.ietf-precis-framework]. This document assumes that all strings | ||||
| are comprised of characters from the Unicode character set [UNICODE], | ||||
| with special attention to characters outside the ASCII range [RFC20]. | ||||
| The methods defined here might be applicable wherever usernames or | ||||
| passwords are used. However, the methods are not intended for use in | ||||
| preparing strings that are not usernames (e.g., email addresses and | ||||
| LDAP distinguished names), nor in cases where identifiers or secrets | ||||
| are not strings (e.g., keys and certificates) or require specialized | ||||
| handling. | ||||
| This document obsoletes RFC 4013 (the "SASLprep" profile of | ||||
| stringprep [RFC3454]) but can be used by technologies other than the | ||||
| Simple Authentication and Security Layer (SASL) [RFC4422], such as | ||||
| HTTP authentication [RFC2617]. | ||||
| 2. What the Username and Password Profiles Provide | ||||
| Profiles of the PRECIS framework enable software to handle Unicode | Profiles of the PRECIS framework enable software to handle Unicode | |||
| characters outside the ASCII range in an automated way, so that such | characters outside the ASCII range in an automated way, so that such | |||
| characters are treated carefully and consistently in application | characters are treated carefully and consistently in application | |||
| protocols. In large measure, these profiles are designed to protect | protocols. In large measure, these profiles are designed to protect | |||
| application developers from the potentially negative consequences of | application developers from the potentially negative consequences of | |||
| supporting the full range of Unicode characters. For instance, in | supporting the full range of Unicode characters. For instance, in | |||
| almost all application protocols it would be dangerous to treat the | almost all application protocols it would be dangerous to treat the | |||
| Unicode character SUPERSCRIPT ONE (U+0089) as equivalent to DIGIT ONE | Unicode character SUPERSCRIPT ONE (U+0089) as equivalent to DIGIT ONE | |||
| (U+0031), since that would result in false positives during | (U+0031), since that would result in false positives during | |||
| comparison, authentication, and authorization (e.g., an attacker | comparison, authentication, and authorization (e.g., an attacker | |||
| could easy spoof an account "user1@example.com"). | could easy spoof an account "user1@example.com"). | |||
| Whereas a naive use of Unicode would make such attacks trivially | Whereas a naive use of Unicode would make such attacks trivially | |||
| easy, the Username PRECIS profile defined in this document generally | easy, the PRECIS profile defined here for usernames generally | |||
| protects applications from inadvertently causing such problems. | protects applications from inadvertently causing such problems. | |||
| (Similar considerations apply to passwords, although here it is | (Similar considerations apply to passwords, although here it is | |||
| desirable to support a wider range of characters so as to maximize | desirable to support a wider range of characters so as to maximize | |||
| entropy during authentication.) | entropy during authentication.) | |||
| 3. Terminology | The methods defined here might be applicable wherever usernames or | |||
| passwords are used. However, the methods are not intended for use in | ||||
| preparing strings that are not usernames (e.g., email addresses and | ||||
| LDAP distinguished names), nor in cases where identifiers or secrets | ||||
| are not strings (e.g., keys and certificates) or require specialized | ||||
| handling. | ||||
| This document obsoletes RFC 4013 (the "SASLprep" profile of | ||||
| stringprep [RFC3454]) but can be used by technologies other than the | ||||
| Simple Authentication and Security Layer (SASL) [RFC4422], such as | ||||
| HTTP authentication [RFC2617]. | ||||
| 2. Terminology | ||||
| Many important terms used in this document are defined in | Many important terms used in this document are defined in | |||
| [I-D.ietf-precis-framework], [RFC5890], [RFC6365], and [UNICODE]. | [I-D.ietf-precis-framework], [RFC5890], [RFC6365], and [UNICODE]. | |||
| The term "non-ASCII space" refers to any Unicode code point having a | The term "non-ASCII space" refers to any Unicode code point having 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. | |||
| skipping to change at page 4, line 22 ¶ | skipping to change at page 4, line 26 ¶ | |||
| username in any particular SASL mechanism or application technology | username in any particular SASL mechanism or application technology | |||
| is a matter for implementation and deployment, and that a username | is a matter for implementation and deployment, and that a username | |||
| does not necessarily map to any particular application identifier | does not necessarily map to any particular application identifier | |||
| (such as the localpart of an email address). | (such as the localpart of an email address). | |||
| 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 | |||
| [RFC2119]. | [RFC2119]. | |||
| 3. Preparation, Comparison, and Enforcement | ||||
| This document distinguishes between three different actions that an | ||||
| entity can take in handling a username or password: | ||||
| o Enforcement entails applying all of the rules specified for a | ||||
| particular profile (UsernameIdentifierClass or | ||||
| PasswordFreeformClass) to an individual string. | ||||
| o Comparison entails applying all of the rules specified for a | ||||
| particular profile to two separate strings, for the purpose of | ||||
| determining if the two strings are equivalent. | ||||
| o Preparation entails only ensuring that the characters in an | ||||
| individual string are allowed by the underlying PRECIS base class | ||||
| (IdentifierClass or FreeformClass). | ||||
| In most cases, "servers" are responsible for enforcement and | ||||
| "clients" are responsible only for preparation. Although some | ||||
| information regarding these responsibilities (e.g., the protocol | ||||
| slots in which usernames or passwords can be placed) needs to be | ||||
| provided in specifications that use the profiles defined in this | ||||
| document, the general outlines of such responsibilities are explained | ||||
| in the following sections. | ||||
| 4. Usernames | 4. Usernames | |||
| 4.1. Definition | 4.1. Definition | |||
| This document specifies that a username is a string of Unicode code | This document specifies that a username is a string of Unicode code | |||
| points [UNICODE], encoded using UTF-8 [RFC3629], and structured | points [UNICODE], encoded using UTF-8 [RFC3629], and structured | |||
| either as an ordered sequence of "userparts" (where the complete | either as an ordered sequence of "userparts" (where the complete | |||
| username can consist of a single userpart or a space-separated | username can consist of a single userpart or a space-separated | |||
| sequence of userparts) or as a userpart@domainpart (where the | sequence of userparts) or as a userpart@domainpart (where the | |||
| domainpart is an IP literal, an IPv4 address, or a fully-qualified | domainpart is an IP literal, an IPv4 address, or a fully-qualified | |||
| skipping to change at page 5, line 43 ¶ | skipping to change at page 6, line 9 ¶ | |||
| constructions such as "user@example.com" are allowed as usernames | constructions such as "user@example.com" are allowed as usernames | |||
| under this specification, as they were under [RFC4013]. | under this specification, as they were under [RFC4013]. | |||
| Implementation Note: The username construct defined in this | Implementation Note: The username construct defined in this | |||
| document does not necessarily match what all deployed applications | document does not necessarily match what all deployed applications | |||
| might refer to as a "username" or "userid", but instead provides a | might refer to as a "username" or "userid", but instead provides a | |||
| relatively safe subset of Unicode characters that can be used in | relatively safe subset of Unicode characters that can be used in | |||
| existing SASL mechanisms and SASL-using application protocols, and | existing SASL mechanisms and SASL-using application protocols, and | |||
| even in most application protocols that do not currently use SASL. | even in most application protocols that do not currently use SASL. | |||
| A username MUST NOT be zero bytes in length. This rule is to be | ||||
| enforced after any normalization and mapping of code points. | ||||
| In protocols that provide usernames as input to a cryptographic | ||||
| algorithm such as a hash function, the client will need to perform | ||||
| proper preparation of the username before applying the algorithm. | ||||
| 4.2. Preparation | 4.2. Preparation | |||
| Each userpart of a username MUST conform to the | An entity that prepares a string for inclusion in a username slot | |||
| "UsernameIdentifierClass" profile of the PRECIS IdentifierClass, | MUST ensure that the string consists only of Unicode code points that | |||
| which is defined as follows: | conform to the "IdentifierClass" base string class defined in | |||
| [I-D.ietf-precis-framework]. In addition, the string MUST be encoded | ||||
| as UTF-8 [RFC3629]. | ||||
| 1. The base string class is the "IdentifierClass" specified in | 4.3. Enforcement | |||
| [I-D.ietf-precis-framework]. | ||||
| 2. Fullwidth and halfwidth characters MUST be mapped to their | An entity that performs enforcement in username slots MUST prepare a | |||
| decomposition mappings. | string as described in the previous section and MUST also apply the | |||
| rules specified below for the UsernameIdentifierClass profile (these | ||||
| rules MUST be applied in the order shown). | ||||
| 3. So-called additional mappings MAY be applied, such as mapping of | 1. Width Mapping Rule: Fullwidth and halfwidth characters MUST be | |||
| delimiters (e.g., characters such as '@', ':', '/', '+', and '-') | mapped to their decomposition mappings. | |||
| and special handling of certain characters or classes of | ||||
| characters (e.g., mapping of non-ASCII spaces to ASCII space or | ||||
| mapping of control characters to nothing); the PRECIS mappings | ||||
| document [I-D.ietf-precis-mappings] describes such mappings in | ||||
| more detail. | ||||
| 4. Depending on the SASL mechanism, SASL-using application protocol, | 2. Additional Mapping Rule: There is no additional mapping rule. | |||
| or non-SASL-using application protocol in question, uppercase and | ||||
| titlecase characters might or might not be mapped to their | ||||
| lowercase equivalents (see Section 4.2.1 below). | ||||
| 5. Unicode Normalization Form C (NFC) MUST be applied to all | 3. Case Mapping Rule: There is no case mapping rule (although see | |||
| characters. | Section 4.5 below). | |||
| With regard to directionality, the "Bidi Rule" provided in [RFC5893] | 4. Normalization Rule: Unicode Normalization Form C (NFC) MUST be | |||
| applies. | applied to all characters. | |||
| A username MUST NOT be zero bytes in length. This rule is to be | 5. Exclusion Rule: There is no exclusion rule. | |||
| enforced after any normalization and mapping of code points. | ||||
| In protocols that provide usernames as input to a cryptographic | 6. Directionality Rule: The "Bidi Rule" provided in [RFC5893] | |||
| algorithm such as a hash function, the client will need to perform | applies. | |||
| proper preparation of the username before applying the algorithm. | ||||
| 4.2.1. Case Mapping | 4.4. Comparison | |||
| An entity that performs comparison of two strings before or after | ||||
| their inclusion in username slots MUST prepare each string and | ||||
| enforce the rules specified in the previous two sections. The two | ||||
| strings are to be considered equivalent if they are an exact octet- | ||||
| for-octet match (sometimes called "bit-string identity"). | ||||
| 4.5. Case Mapping | ||||
| Case mapping is a matter for the application protocol, protocol | Case mapping is a matter for the application protocol, protocol | |||
| implementation, or end deployment. In general, this document | implementation, or end deployment. In general, this document | |||
| suggests that it is preferable to perform case mapping, since not | suggests that it is preferable to perform case mapping, since not | |||
| doing so can lead to false positives during authentication and | doing so can lead to false positives during authentication and | |||
| authorization (as described in [RFC6943]) and can result in confusion | authorization (as described in [RFC6943]) and can result in confusion | |||
| among end users given the prevalence of case mapping in many existing | among end users given the prevalence of case mapping in many existing | |||
| protocols and applications. However, there can be good reasons to | protocols and applications. However, there can be good reasons to | |||
| not perform case mapping, such as backward compatibility with | not perform case mapping, such as backward compatibility with | |||
| deployed infrastructure. | deployed infrastructure. | |||
| skipping to change at page 7, line 38 ¶ | skipping to change at page 8, line 12 ¶ | |||
| decisions about case mapping can be a matter of deployment | decisions about case mapping can be a matter of deployment | |||
| policy). | policy). | |||
| If the specification for a SASL mechanism, SASL application protocol, | If the specification for a SASL mechanism, SASL application protocol, | |||
| or non-SASL application protocol specifies the handling of case | or non-SASL application protocol specifies the handling of case | |||
| mapping for strings that conform to the UsernameIdentifierClass, it | mapping for strings that conform to the UsernameIdentifierClass, it | |||
| MUST clearly describe whether case mapping is required, recommended, | MUST clearly describe whether case mapping is required, recommended, | |||
| or optional at the level of the protocol itself, implementations | or optional at the level of the protocol itself, implementations | |||
| thereof, or service deployments. | thereof, or service deployments. | |||
| 4.3. Examples | 4.6. Examples | |||
| The following examples illustrate a small number of usernames that | The following examples illustrate a small number of usernames that | |||
| are consistent with the format defined above (note that the | are consistent with the format defined above (note that the | |||
| characters < and > are used here to delineate the actual usernames | characters < and > are used here to delineate the actual usernames | |||
| and are not part of the username strings). | and are not part of the username strings). | |||
| Table 1: A sample of legal usernames | Table 1: A sample of legal usernames | |||
| +---------------------------------+---------------------------------+ | +---------------------------------+---------------------------------+ | |||
| | # | Username | Notes | | | # | Username | Notes | | |||
| skipping to change at page 10, line 7 ¶ | skipping to change at page 10, line 17 ¶ | |||
| ; 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 PRECIS "FreeformClass" | ; the PRECIS "FreeformClass" | |||
| ; | ; | |||
| All code points and blocks not explicitly allowed in the PRECIS | All code points and blocks not explicitly allowed in the PRECIS | |||
| FreeformClass are disallowed; this includes private use characters, | FreeformClass are disallowed; this includes private use characters, | |||
| surrogate code points, and the other code points and blocks defined | surrogate code points, and the other code points and blocks defined | |||
| as "Prohibited Output" in Section 2.3 of RFC 4013. | as "Prohibited Output" in Section 2.3 of RFC 4013. | |||
| A password MUST NOT be zero bytes in length. This rule is to be | ||||
| enforced after any normalization and mapping of code points. | ||||
| In protocols that provide passwords as input to a cryptographic | ||||
| algorithm such as a hash function, the client will need to perform | ||||
| proper preparation of the password before applying the algorithm, | ||||
| since the password is not available to the server in plaintext form. | ||||
| 5.2. Preparation | 5.2. Preparation | |||
| A password MUST conform to the "PasswordFreeformClass" profile of the | An entity that prepares a string for inclusion in a password slot | |||
| PRECIS FreeformClass, which is defined as follows: | MUST ensure that the string consists only of Unicode code points that | |||
| conform to the "FreeformClass" base string class defined in | ||||
| [I-D.ietf-precis-framework]. In addition, the string MUST be encoded | ||||
| as UTF-8 [RFC3629]. | ||||
| 1. The base string class is the "FreeformClass" specified in | 5.3. Enforcement | |||
| [I-D.ietf-precis-framework]. | ||||
| 2. Fullwidth and halfwidth characters MUST NOT be mapped to their | An entity that performs enforcement in password slots MUST prepare a | |||
| decomposition mappings. | string as described in the previous section and MUST also apply the | |||
| rules specified below for the PasswordFreeformClass (these rules MUST | ||||
| be applied in the order shown). | ||||
| 3. Any instances of non-ASCII space MUST be mapped to ASCII space | 1. Width Mapping Rule: Fullwidth and halfwidth characters MUST NOT | |||
| (U+0020). | be mapped to their decomposition mappings. | |||
| 4. Uppercase and titlecase characters MUST NOT be mapped to their | 2. Additional Mapping Rule: Any instances of non-ASCII space MUST be | |||
| lowercase equivalents. | mapped to ASCII space (U+0020); such an instance is any Unicode | |||
| code point that has a compatibility mapping of any kind to U+0020 | ||||
| SPACE (including but not limited to <compat> as for U+0384 GREEK | ||||
| TONOS, <noBreak> as for U+2007 FIGURE SPACE, and <wide> as for | ||||
| U+3000 IDEOGRAPHIC SPACE). | ||||
| 5. Unicode Normalization Form C (NFC) MUST be applied to all | 3. Case Mapping Rule: Uppercase and titlecase characters MUST NOT be | |||
| characters. | mapped to their lowercase equivalents. | |||
| 4. Normalization Rule: Unicode Normalization Form C (NFC) MUST be | ||||
| applied to all characters. | ||||
| 5. Exclusion Rule: There is no exclusion rule. | ||||
| 6. Directionality Rule: There is no directionality rule. | ||||
| With regard to directionality, the "Bidi Rule" (defined in [RFC5893]) | With regard to directionality, the "Bidi Rule" (defined in [RFC5893]) | |||
| 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 usernames are. | the way that non-secret strings like domain names and usernames are. | |||
| A password MUST NOT be zero bytes in length. This rule is to be | 5.4. Comparison | |||
| enforced after any normalization and mapping of code points. | ||||
| In protocols that provide passwords as input to a cryptographic | An entity that performs comparison of two strings before or after | |||
| algorithm such as a hash function, the client will need to perform | their inclusion in password slots MUST prepare each string and | |||
| proper preparation of the password before applying the algorithm, | enforce the rules specified in the previous two sections. The two | |||
| since the password is not available to the server in plaintext form. | strings are to be considered equivalent if they are an exact octet- | |||
| for-octet match (sometimes called "bit-string identity"). | ||||
| 5.3. Examples | 5.5. Examples | |||
| The following examples illustrate a small number of passwords that | The following examples illustrate a small number of passwords that | |||
| are consistent with the format defined above (note that the | are consistent with the format defined above (note that the | |||
| characters < and > are used here to delineate the actual passwords | characters < and > are used here to delineate the actual passwords | |||
| and are not part of the username strings). | and are not part of the username strings). | |||
| Table 3: A sample of legal passwords | Table 3: A sample of legal passwords | |||
| +------------------------------------+------------------------------+ | +------------------------------------+------------------------------+ | |||
| | # | Password | Notes | | | # | Password | Notes | | |||
| skipping to change at page 14, line 7 ¶ | skipping to change at page 14, line 51 ¶ | |||
| 7.1. UsernameIdentifierClass | 7.1. UsernameIdentifierClass | |||
| Name: UsernameIdentifierClass. | Name: UsernameIdentifierClass. | |||
| Applicability: Usernames in security and application protocols. | Applicability: Usernames in security and application protocols. | |||
| Base Class: IdentifierClass. | Base Class: IdentifierClass. | |||
| Replaces: The SASLprep profile of Stringprep. | Replaces: The SASLprep profile of Stringprep. | |||
| Width Mapping: Map fullwidth and halfwidth characters to their | Width Mapping Rule: Map fullwidth and halfwidth characters to their | |||
| decomposition mappings. | decomposition mappings. | |||
| Additional Mappings: None required or recommended. | Additional Mapping Rule: None. | |||
| Case Mapping: To be defined by security or application protocols | Case Mapping Rule: To be defined by security or application | |||
| that use this profile. | protocols that use this profile. | |||
| Normalization: NFC. | Normalization Rule: NFC. | |||
| Directionality: The "Bidi Rule" defined in RFC 5893 applies. | Exclusion Rule: None. | |||
| Exclusions: None. | Directionality Rule: The "Bidi Rule" defined in RFC 5893 applies. | |||
| Enforcement: To be defined by security or application protocols that | Enforcement: To be defined by security or application protocols that | |||
| use this profile. | use this profile. | |||
| Specification: RFC XXXX. [Note to RFC Editor: please change XXXX to | Specification: RFC XXXX. [Note to RFC Editor: please change XXXX to | |||
| the number issued for this specification.] | the number issued for this specification.] | |||
| 7.2. PasswordFreeformClass | 7.2. PasswordFreeformClass | |||
| Name: PasswordFreeformClass. | Name: PasswordFreeformClass. | |||
| Applicability: Passwords in security and application protocols. | Applicability: Passwords in security and application protocols. | |||
| Base Class: FreeformClass | Base Class: FreeformClass | |||
| Replaces: The SASLprep profile of Stringprep. | Replaces: The SASLprep profile of Stringprep. | |||
| Width Mapping: None. | Width Mapping Rule: None. | |||
| Additional Mappings: Map non-ASCII space characters to ASCII space. | Additional Mapping Rule: Map non-ASCII space characters to ASCII | |||
| space. | ||||
| Case Mapping: None. | Case Mapping Rule: None. | |||
| Normalization: NFC. | Normalization Rule: NFC. | |||
| Directionality: None. | Exclusion Rule: None. | |||
| Exclusions: None. | Directionality Rule: None. | |||
| Enforcement: To be defined by security or application protocols that | Enforcement: To be defined by security or application protocols that | |||
| use this profile. | use this profile. | |||
| Specification: RFC XXXX. | Specification: RFC XXXX. [Note to RFC Editor: please change XXXX to | |||
| the number issued for this specification.] | ||||
| 8. Security Considerations | 8. Security Considerations | |||
| 8.1. Password/Passphrase Strength | 8.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. | |||
| skipping to change at page 15, line 42 ¶ | skipping to change at page 16, line 42 ¶ | |||
| The security considerations described in [UTS39] apply to the use of | The security considerations described in [UTS39] apply to the use of | |||
| Unicode characters in usernames and passwords. | Unicode characters in usernames and passwords. | |||
| 9. References | 9. References | |||
| 9.1. Normative References | 9.1. Normative References | |||
| [I-D.ietf-precis-framework] | [I-D.ietf-precis-framework] | |||
| Saint-Andre, P. and M. Blanchet, "Precis Framework: | Saint-Andre, P. and M. Blanchet, "Precis Framework: | |||
| Handling Internationalized Strings in Protocols", draft- | Handling Internationalized Strings in Protocols", draft- | |||
| ietf-precis-framework-15 (work in progress), March 2014. | ietf-precis-framework-18 (work in progress), September | |||
| 2014. | ||||
| [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.3", 2013, | |||
| <http://www.unicode.org/versions/Unicode6.1.0/>. | <http://www.unicode.org/versions/Unicode6.3.0/>. | |||
| 9.2. Informative References | 9.2. Informative References | |||
| [I-D.ietf-precis-mappings] | ||||
| Yoneya, Y. and T. NEMOTO, "Mapping characters for PRECIS | ||||
| classes", draft-ietf-precis-mappings-07 (work in | ||||
| progress), February 2014. | ||||
| [RFC20] Cerf, V., "ASCII format for network interchange", RFC 20, | [RFC20] Cerf, V., "ASCII format for network interchange", RFC 20, | |||
| October 1969. | October 1969. | |||
| [RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., | [RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., | |||
| Leach, P., Luotonen, A., and L. Stewart, "HTTP | Leach, P., Luotonen, A., and L. Stewart, "HTTP | |||
| Authentication: Basic and Digest Access Authentication", | Authentication: Basic and Digest Access Authentication", | |||
| RFC 2617, June 1999. | RFC 2617, June 1999. | |||
| [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, | |||
| skipping to change at page 17, line 51 ¶ | skipping to change at page 18, line 47 ¶ | |||
| The following substantive modifications were made from RFC 4013. | 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 usernames and another for passwords. | algorithms: one for usernames 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 to NFC (from NFKC). | 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 | |||
| The following individuals provided helpful feedback on this document: | The following individuals provided helpful feedback on this document: | |||
| Marc Blanchet, Alan DeKok, Joe Hildebrand, Jeffrey Hutzelman, Simon | Marc Blanchet, Alan DeKok, Joe Hildebrand, Jeffrey Hutzelman, Simon | |||
| Josefsson, Jonathan Lennox, Matt Miller, Chris Newman, Yutaka OIWA, | Josefsson, Jonathan Lennox, Matt Miller, Chris Newman, Yutaka OIWA, | |||
| Pete Resnick, Andrew Sullivan, and Nico Williams (Nico in particular | Pete Resnick, Andrew Sullivan, and Nico Williams. Nico in particular | |||
| provided text that was used in Section 4.2.1). Thanks also to | deserves special recognition for providing text that was used in | |||
| Yoshiro YONEYA and Takahiro NEMOTO for implementation feedback. | Section 4.5. Thanks also to Yoshiro YONEYA and Takahiro NEMOTO for | |||
| implementation feedback. | ||||
| This document borrows some text from [RFC4013] and [RFC6120]. | This document borrows some text from [RFC4013] and [RFC6120]. | |||
| Authors' Addresses | Authors' Addresses | |||
| Peter Saint-Andre | Peter Saint-Andre | |||
| &yet | &yet | |||
| P.O. Box 787 | ||||
| Parker, CO 80134 | ||||
| USA | ||||
| Email: ietf@stpeter.im | Email: peter@andyet.com | |||
| URI: https://andyet.com/ | ||||
| Alexey Melnikov | Alexey Melnikov | |||
| Isode Ltd | Isode Ltd | |||
| 5 Castle Business Village | 5 Castle Business Village | |||
| 36 Station Road | 36 Station Road | |||
| Hampton, Middlesex TW12 2BX | Hampton, Middlesex TW12 2BX | |||
| UK | UK | |||
| Email: Alexey.Melnikov@isode.com | Email: Alexey.Melnikov@isode.com | |||
| End of changes. 52 change blocks. | ||||
| 131 lines changed or deleted | 185 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/ | ||||