| < draft-ietf-precis-saslprepbis-14.txt | draft-ietf-precis-saslprepbis-15.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 3, 2015 March 2, 2015 | Expires: October 16, 2015 April 14, 2015 | |||
| Preparation, Enforcement, and Comparison of Internationalized Strings | Preparation, Enforcement, and Comparison of Internationalized Strings | |||
| Representing Usernames and Passwords | Representing Usernames and Passwords | |||
| draft-ietf-precis-saslprepbis-14 | draft-ietf-precis-saslprepbis-15 | |||
| Abstract | Abstract | |||
| This document describes methods for handling Unicode strings | This document describes updated methods for handling Unicode strings | |||
| representing usernames and passwords. The methods specified in this | representing usernames and passwords. The previous approach was | |||
| document provide a more sustainable approach to the handling of | known as SASLprep (RFC 4013) and was based on Stringprep (RFC 3454). | |||
| internationalized usernames and passwords than the previous approach, | The methods specified in this document provide a more sustainable | |||
| known as SASLprep (RFC 4013) and based on Stringprep (RFC 3454). | approach to the handling of internationalized usernames and | |||
| This document obsoletes RFC 4013. | passwords. The PRECIS framework, RFC YYYY, obsoletes RFC 3454, and | |||
| this document obsoletes RFC 4013. | ||||
| [[ NOTE TO RFC EDITOR: please replace "YYYY" in the previous | ||||
| paragraph with the RFC number assigned to draft-ietf-precis- | ||||
| framework. ]] | ||||
| 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 | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| 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 3, 2015. | This Internet-Draft will expire on October 16, 2015. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2015 IETF Trust and the persons identified as the | Copyright (c) 2015 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 15 ¶ | skipping to change at page 2, line 22 ¶ | |||
| 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 . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 3. Usernames . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 3. Usernames . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 3.1. Definition . . . . . . . . . . . . . . . . . . . . . . . 4 | 3.1. Definition . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 3.2. UsernameCaseMapped Profile . . . . . . . . . . . . . . . 5 | 3.2. UsernameCaseMapped Profile . . . . . . . . . . . . . . . 5 | |||
| 3.2.1. Preparation . . . . . . . . . . . . . . . . . . . . . 5 | 3.2.1. Preparation . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 3.2.2. Enforcement . . . . . . . . . . . . . . . . . . . . . 6 | 3.2.2. Enforcement . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 3.2.3. Comparison . . . . . . . . . . . . . . . . . . . . . 6 | 3.2.3. Comparison . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 3.3. UsernameCasePreserved Profile . . . . . . . . . . . . . . 6 | 3.3. UsernameCasePreserved Profile . . . . . . . . . . . . . . 6 | |||
| 3.3.1. Preparation . . . . . . . . . . . . . . . . . . . . . 7 | 3.3.1. Preparation . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 3.3.2. Enforcement . . . . . . . . . . . . . . . . . . . . . 7 | 3.3.2. Enforcement . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 3.3.3. Comparison . . . . . . . . . . . . . . . . . . . . . 7 | 3.3.3. Comparison . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 3.4. Case Mapping vs. Case Preservation . . . . . . . . . . . 7 | 3.4. Case Mapping vs. Case Preservation . . . . . . . . . . . 7 | |||
| 3.5. Application-Layer Constructs . . . . . . . . . . . . . . 9 | 3.5. Application-Layer Constructs . . . . . . . . . . . . . . 9 | |||
| 3.6. Examples . . . . . . . . . . . . . . . . . . . . . . . . 9 | 3.6. Examples . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 4. Passwords . . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 4. Passwords . . . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 4.1. Definition . . . . . . . . . . . . . . . . . . . . . . . 11 | 4.1. Definition . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 4.2. OpaqueString Profile . . . . . . . . . . . . . . . . . . 11 | 4.2. OpaqueString Profile . . . . . . . . . . . . . . . . . . 12 | |||
| 4.2.1. Preparation . . . . . . . . . . . . . . . . . . . . . 12 | 4.2.1. Preparation . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 4.2.2. Enforcement . . . . . . . . . . . . . . . . . . . . . 12 | 4.2.2. Enforcement . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 4.2.3. Comparison . . . . . . . . . . . . . . . . . . . . . 13 | 4.2.3. Comparison . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 4.3. Examples . . . . . . . . . . . . . . . . . . . . . . . . 13 | 4.3. Examples . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 5. Use in Application Protocols . . . . . . . . . . . . . . . . 14 | 5. Use in Application Protocols . . . . . . . . . . . . . . . . 14 | |||
| 6. Migration . . . . . . . . . . . . . . . . . . . . . . . . . . 14 | 6. Migration . . . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 6.1. Usernames . . . . . . . . . . . . . . . . . . . . . . . . 14 | 6.1. Usernames . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 6.2. Passwords . . . . . . . . . . . . . . . . . . . . . . . . 15 | 6.2. Passwords . . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 16 | 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 7.1. UsernameCaseMapped Profile . . . . . . . . . . . . . . . 17 | 7.1. UsernameCaseMapped Profile . . . . . . . . . . . . . . . 17 | |||
| 7.2. UsernameCasePreserved Profile . . . . . . . . . . . . . . 17 | 7.2. UsernameCasePreserved Profile . . . . . . . . . . . . . . 18 | |||
| 7.3. OpaqueString Profile . . . . . . . . . . . . . . . . . . 18 | 7.3. OpaqueString Profile . . . . . . . . . . . . . . . . . . 18 | |||
| 8. Security Considerations . . . . . . . . . . . . . . . . . . . 18 | 8. Security Considerations . . . . . . . . . . . . . . . . . . . 19 | |||
| 8.1. Password/Passphrase Strength . . . . . . . . . . . . . . 18 | 8.1. Password/Passphrase Strength . . . . . . . . . . . . . . 19 | |||
| 8.2. Identifier Comparison . . . . . . . . . . . . . . . . . . 19 | 8.2. Identifier Comparison . . . . . . . . . . . . . . . . . . 19 | |||
| 8.3. Reuse of PRECIS . . . . . . . . . . . . . . . . . . . . . 19 | 8.3. Reuse of PRECIS . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 8.4. Reuse of Unicode . . . . . . . . . . . . . . . . . . . . 19 | 8.4. Reuse of Unicode . . . . . . . . . . . . . . . . . . . . 19 | |||
| 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 19 | 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 20 | |||
| 9.1. Normative References . . . . . . . . . . . . . . . . . . 19 | 9.1. Normative References . . . . . . . . . . . . . . . . . . 20 | |||
| 9.2. Informative References . . . . . . . . . . . . . . . . . 20 | 9.2. Informative References . . . . . . . . . . . . . . . . . 20 | |||
| Appendix A. Differences from RFC 4013 . . . . . . . . . . . . . 21 | Appendix A. Differences from RFC 4013 . . . . . . . . . . . . . 22 | |||
| Appendix B. Acknowledgements . . . . . . . . . . . . . . . . . . 22 | Appendix B. Acknowledgements . . . . . . . . . . . . . . . . . . 22 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 22 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
| 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] / [I-D.ietf-httpauth-basicauth-update]) or | scheme [I-D.ietf-httpauth-basicauth-update]) or indirectly when | |||
| indirectly when provided as the input to a cryptographic algorithm | provided as the input to a cryptographic algorithm such as a hash | |||
| such as a hash function (as in the SASL SCRAM mechanism [RFC5802] or | function (as in the SASL SCRAM mechanism [RFC5802] or the HTTP Digest | |||
| the HTTP Digest scheme [RFC2617] / [I-D.ietf-httpauth-digest]). | scheme [I-D.ietf-httpauth-digest]). | |||
| To 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, | throughout the world, this document defines rules for preparing, | |||
| enforcing, and comparing internationalized strings that represent | enforcing, and comparing internationalized strings that represent | |||
| usernames and passwords. Such strings consist of characters from the | usernames and passwords. Such strings consist of characters from the | |||
| Unicode character set [Unicode], with special attention to characters | Unicode character set [Unicode], with special attention to characters | |||
| outside the ASCII range [RFC20]. The rules for handling such strings | outside the ASCII range [RFC20]. The rules for handling such strings | |||
| are specified through profiles of the string classes defined in the | are specified through profiles of the string classes defined in the | |||
| PRECIS framework specification [I-D.ietf-precis-framework]. | PRECIS framework specification [I-D.ietf-precis-framework]. | |||
| skipping to change at page 4, line 5 ¶ | skipping to change at page 4, line 11 ¶ | |||
| The methods defined here might be applicable wherever usernames or | The methods defined here might be applicable wherever usernames or | |||
| passwords are used. However, the methods are not intended for use in | passwords are used. However, the methods are not intended for use in | |||
| preparing strings that are not usernames (e.g., email addresses and | preparing strings that are not usernames (e.g., email addresses and | |||
| LDAP distinguished names), nor in cases where identifiers or secrets | LDAP distinguished names), nor in cases where identifiers or secrets | |||
| are not strings (e.g., keys and certificates) or require specialized | are not strings (e.g., keys and certificates) or require specialized | |||
| handling. | handling. | |||
| This document obsoletes RFC 4013 (the "SASLprep" profile of | This document obsoletes RFC 4013 (the "SASLprep" profile of | |||
| stringprep [RFC3454]) but can be used by technologies other than the | stringprep [RFC3454]) but can be used by technologies other than the | |||
| Simple Authentication and Security Layer (SASL) [RFC4422], such as | Simple Authentication and Security Layer (SASL) [RFC4422], such as | |||
| HTTP authentication [RFC2617] / [I-D.ietf-httpauth-basicauth-update] | HTTP authentication as specified in | |||
| / [I-D.ietf-httpauth-digest]. | [I-D.ietf-httpauth-basicauth-update] and [I-D.ietf-httpauth-digest]. | |||
| 2. Terminology | 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, punctuation, or other non- | |||
| alphanumeric characters. | ||||
| 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]). Various application technologies also assume | well as [RFC4013]). Various application technologies also assume | |||
| that the identity of a user or account takes the form of a username | that the identity of a user or account takes the form of a username | |||
| (e.g., authentication for the HyperText Transfer Protocol [RFC2617] / | (e.g., authentication for the HyperText Transfer Protocol as | |||
| [I-D.ietf-httpauth-basicauth-update] / [I-D.ietf-httpauth-digest]), | specified in [I-D.ietf-httpauth-basicauth-update] and | |||
| whether or not they use SASL. Note well that the exact form of a | [I-D.ietf-httpauth-digest]), whether or not they use SASL. Note well | |||
| username in any particular SASL mechanism or application technology | that the exact form of a username in any particular SASL mechanism or | |||
| is a matter for implementation and deployment, and that a username | application technology is a matter for implementation and deployment, | |||
| does not necessarily map to any particular application identifier | and that a username does not necessarily map to any particular | |||
| (such as the localpart of an email address). | application identifier (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. Usernames | 3. Usernames | |||
| 3.1. Definition | 3.1. Definition | |||
| skipping to change at page 5, line 18 ¶ | skipping to change at page 5, line 23 ¶ | |||
| ; an "idbyte" is a byte used to represent a | ; an "idbyte" is a byte used to represent a | |||
| ; UTF-8 encoded Unicode code point that can be | ; UTF-8 encoded Unicode code point that can be | |||
| ; contained in a string that conforms to the | ; contained in a string that conforms to the | |||
| ; PRECIS "IdentifierClass" | ; PRECIS "IdentifierClass" | |||
| ; | ; | |||
| All code points and blocks not explicitly allowed in the PRECIS | All code points and blocks not explicitly allowed in the PRECIS | |||
| IdentifierClass are disallowed; this includes private use characters, | IdentifierClass are disallowed; this includes private use characters, | |||
| surrogate code points, and the other code points and blocks that were | surrogate code points, and the other code points and blocks that were | |||
| defined as "Prohibited Output" in [RFC4013]. In addition, common | defined as "Prohibited Output" in [RFC4013]. In addition, common | |||
| constructions such as "user@example.com" are allowed as usernames | constructions such as "user@example.com" (e.g., the Network Access | |||
| under this specification, as they were under [RFC4013]. | Identifier from [I-D.ietf-radext-nai]) are allowed as usernames 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 | A username MUST NOT be zero bytes in length. This rule is to be | |||
| enforced after any normalization and mapping of code points. | enforced after any normalization and mapping of code points. | |||
| skipping to change at page 7, line 46 ¶ | skipping to change at page 7, line 48 ¶ | |||
| 3.3.3. Comparison | 3.3.3. Comparison | |||
| An entity that performs comparison of two strings according to this | An entity that performs comparison of two strings according to this | |||
| profile MUST prepare each string and enforce the rules specified in | profile MUST prepare each string and enforce the rules specified in | |||
| the previous two sections. The two strings are to be considered | the previous two sections. The two strings are to be considered | |||
| equivalent if they are an exact octet-for-octet match (sometimes | equivalent if they are an exact octet-for-octet match (sometimes | |||
| called "bit-string identity"). | called "bit-string identity"). | |||
| 3.4. Case Mapping vs. Case Preservation | 3.4. Case Mapping vs. Case Preservation | |||
| In order to accomodate the widest range of username constructs in | In order to accommodate the widest range of username constructs in | |||
| applications, this document defines two username profiles: | applications, this document defines two username profiles: | |||
| UsernameCaseMapped and UsernameCasePreserved. | UsernameCaseMapped and UsernameCasePreserved. These two profiles | |||
| differ only in the Case Mapping Rule, and are otherwise identical. | ||||
| 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 apply the UsernameCaseMapped | suggests that it is preferable to apply the UsernameCaseMapped | |||
| profile and therefore perform case mapping, since not doing so can | profile and therefore perform case mapping, since not doing so can | |||
| lead to false positives during authentication and authorization (as | lead to false positives during authentication and authorization (as | |||
| described in [RFC6943]) and can result in confusion among end users | described in [RFC6943]) and can result in confusion among end users | |||
| given the prevalence of case mapping in many existing protocols and | given the prevalence of case mapping in many existing protocols and | |||
| applications. However, there can be good reasons to apply the | applications. However, there can be good reasons to apply the | |||
| UsernameCasePreserved profile and thus not perform case mapping, such | UsernameCasePreserved profile and thus not perform case mapping, such | |||
| skipping to change at page 8, line 37 ¶ | skipping to change at page 8, line 41 ¶ | |||
| whether case mapping is to be applied to authorization | whether case mapping is to be applied to authorization | |||
| identifiers. Such "SASL application protocols" SHOULD delay any | identifiers. Such "SASL application protocols" SHOULD delay any | |||
| case mapping of authorization identifiers to the last possible | case mapping of authorization identifiers to the last possible | |||
| moment, which happens to necessarily be on the server side (this | moment, which happens to necessarily be on the server side (this | |||
| enables decisions about case mapping to be a matter of deployment | enables decisions about case mapping to be a matter of deployment | |||
| policy). In keeping with [RFC4422], SASL application protocols | policy). In keeping with [RFC4422], SASL application protocols | |||
| are not to apply this or any other profile to authentication | are not to apply this or any other profile to authentication | |||
| identifiers. | identifiers. | |||
| o Application protocols that do not use SASL (such as HTTP | o Application protocols that do not use SASL (such as HTTP | |||
| authentication with the Basic and Digest schemes [RFC2617] / | authentication with the Basic and Digest schemes as specified in | |||
| [I-D.ietf-httpauth-basicauth-update] / [I-D.ietf-httpauth-digest]) | [I-D.ietf-httpauth-basicauth-update] and | |||
| but that directly re-use this profile MUST specify whether and | [I-D.ietf-httpauth-digest]) but that directly re-use this profile | |||
| when case mapping is to be applied to authentication identifiers | MUST specify whether and when case mapping is to be applied to | |||
| and authorization identifiers. Such "non-SASL application | authentication identifiers and authorization identifiers. Such | |||
| protocols" SHOULD delay any case mapping to the last possible | "non-SASL application protocols" SHOULD delay any case mapping to | |||
| moment, such as when doing a lookup by username, username | the last possible moment, such as when doing a lookup by username, | |||
| comparisons, or generating a cryptographic salt from a username | username comparisons, or generating a cryptographic salt from a | |||
| (if the last possible moment happens on the server, then decisions | username (if the last possible moment happens on the server, then | |||
| about case mapping can be a matter of deployment policy). | decisions about case mapping can be a matter of deployment | |||
| 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 uses the UsernameCaseMapped profile, | or non-SASL application protocol uses the UsernameCaseMapped profile, | |||
| it MUST clearly describe whether case mapping is to be applied at the | it MUST clearly describe whether case mapping is to be applied at the | |||
| level of the protocol itself, implementations thereof, or service | level of the protocol itself, implementations thereof, or service | |||
| deployments (all of these approaches can be legitimate depending on | deployments (all of these approaches can be legitimate depending on | |||
| the application in question). | the application in question). | |||
| 3.5. Application-Layer Constructs | 3.5. Application-Layer Constructs | |||
| Both the UsernameCaseMapped and UsernameCasePreserved profiles allow | Both the UsernameCaseMapped and UsernameCasePreserved profiles enable | |||
| an application protocol, implementation, or deployment to create | an application protocol, implementation, or deployment to create | |||
| application-layer constructs such as "user@domain" or "Firstname | application-layer constructs such as a space-separated set of names | |||
| Middlename Lastname". One example of the former is the Network | like "Firstname Middlename Lastname". Although such a construct is | |||
| Access Identifier specified in [I-D.ietf-radext-nai]. (Such | not a PRECIS profile (since U+0020 SPACE is not allowed in the | |||
| constructs are possible because the PRECIS IdentifierClass allows any | IdentifierClass), it can be created at the application layer because | |||
| ASCII7 character, because spaces can be used to separate userpart | U+0020 SPACE can be used as a separator between instances of the | |||
| instances, and because domain names as specified in [RFC5890] and | PRECIS IdentifierClass (or a profile thereof). | |||
| [RFC5892] are a subset of the PRECIS IdentifierClass.) | ||||
| 3.6. Examples | 3.6. Examples | |||
| The following examples illustrate a small number of userparts (not | The following examples illustrate a small number of userparts (not | |||
| usernames) that are consistent with the format defined above (note | usernames) that are consistent with the format defined above (note | |||
| that the characters < and > are used here to delineate the actual | that the characters < and > are used here to delineate the actual | |||
| userparts and are not part of the userpart strings). | userparts and are not part of the userpart strings). | |||
| Table 1: A sample of legal userparts | Table 1: A sample of legal userparts | |||
| skipping to change at page 10, line 4 ¶ | skipping to change at page 10, line 30 ¶ | |||
| +--------------------------+---------------------------------+ | +--------------------------+---------------------------------+ | |||
| | 5 | <Σ> | A userpart of GREEK CAPITAL | | | 5 | <Σ> | A userpart of GREEK CAPITAL | | |||
| | | | LETTER SIGMA (U+03A3) | | | | | LETTER SIGMA (U+03A3) | | |||
| +--------------------------+---------------------------------+ | +--------------------------+---------------------------------+ | |||
| | 6 | <σ> | A userpart of GREEK SMALL | | | 6 | <σ> | A userpart of GREEK SMALL | | |||
| | | | LETTER SIGMA (U+03C3) | | | | | LETTER SIGMA (U+03C3) | | |||
| +--------------------------+---------------------------------+ | +--------------------------+---------------------------------+ | |||
| | 7 | <ς> | A userpart of GREEK SMALL | | | 7 | <ς> | A userpart of GREEK SMALL | | |||
| | | | LETTER FINAL SIGMA (U+03C2) | | | | | LETTER FINAL SIGMA (U+03C2) | | |||
| +--------------------------+---------------------------------+ | +--------------------------+---------------------------------+ | |||
| Several points are worth noting. Regarding examples 2 and 3: | Several points are worth noting. Regarding examples 2 and 3: | |||
| although in German the character esszett (LATIN SMALL LETTER SHARP S, | although in German the character eszett (LATIN SMALL LETTER SHARP S, | |||
| U+00DF) can mostly be used interchangeably with the two characters | U+00DF) can mostly be used interchangeably with the two characters | |||
| "ss", the userparts in these examples are different and (if desired) | "ss", the userparts in these examples are different and (if desired) | |||
| a server would need to enforce a registration policy that disallows | a server would need to enforce a registration policy that disallows | |||
| one of them if the other is registered. Regarding examples 5, 6, and | one of them if the other is registered. Regarding examples 5, 6, and | |||
| 7: optional case-mapping of GREEK CAPITAL LETTER SIGMA (U+03A3) to | 7: optional case-mapping of GREEK CAPITAL LETTER SIGMA (U+03A3) to | |||
| lowercase (i.e., to GREEK SMALL LETTER SIGMA, U+03C3) during | lowercase (i.e., to GREEK SMALL LETTER SIGMA, U+03C3) during | |||
| comparison would result in matching the userparts in examples 5 and | comparison would result in matching the userparts in examples 5 and | |||
| 6; however, because the PRECIS mapping rules do not account for the | 6; however, because the PRECIS mapping rules do not account for the | |||
| special status of GREEK SMALL LETTER FINAL SIGMA (U+03C2), the | special status of GREEK SMALL LETTER FINAL SIGMA (U+03C2), the | |||
| userparts in examples 5 and 7 or examples 6 and 7 would not be | userparts in examples 5 and 7 or examples 6 and 7 would not be | |||
| skipping to change at page 13, line 36 ¶ | skipping to change at page 14, line 21 ¶ | |||
| +------------------------------------+------------------------------+ | +------------------------------------+------------------------------+ | |||
| | 13| <Correct Horse Battery Staple> | Different from example 12 | | | 13| <Correct Horse Battery Staple> | Different from example 12 | | |||
| +------------------------------------+------------------------------+ | +------------------------------------+------------------------------+ | |||
| | 14| <πßå> | Non-ASCII letters are OK | | | 14| <πßå> | Non-ASCII letters are OK | | |||
| | | | (e.g., GREEK SMALL LETTER | | | | | (e.g., GREEK SMALL LETTER | | |||
| | | | PI, U+03C0) | | | | | PI, U+03C0) | | |||
| +------------------------------------+------------------------------+ | +------------------------------------+------------------------------+ | |||
| | 15| <Jack of ♦s> | Symbols are OK (e.g., BLACK | | | 15| <Jack of ♦s> | Symbols are OK (e.g., BLACK | | |||
| | | | DIAMOND SUIT, U+2666) | | | | | DIAMOND SUIT, U+2666) | | |||
| +------------------------------------+------------------------------+ | +------------------------------------+------------------------------+ | |||
| | 16| <foo bar> | OGHAM SPACE MARK, U+1680, is | | ||||
| | | | mapped to U+0020 and thus | | ||||
| | | | the full string is mapped to | | ||||
| | | | <foo bar> | | ||||
| +------------------------------------+------------------------------+ | ||||
| The following examples illustrate strings that are not valid | The following example illustrates a strings that is not a valid | |||
| passwords because they violate the format defined above. | password because it violates the format defined above. | |||
| Table 4: A sample of strings that violate the password rules | Table 4: A string that violates the password rules | |||
| +------------------------------------+------------------------------+ | +------------------------------------+------------------------------+ | |||
| | # | Password | Notes | | | # | Password | Notes | | |||
| +------------------------------------+------------------------------+ | +------------------------------------+------------------------------+ | |||
| | 16| <foo bar> | Non-ASCII space (here, OGHAM | | ||||
| | | | SPACE MARK, U+1680) is not | | ||||
| | | | allowed | | ||||
| +------------------------------------+------------------------------+ | ||||
| | 17| <my cat is a 	by> | Controls are disallowed | | | 17| <my cat is a 	by> | Controls are disallowed | | |||
| +------------------------------------+------------------------------+ | +------------------------------------+------------------------------+ | |||
| 5. Use in Application Protocols | 5. Use in Application Protocols | |||
| This specification defines only the PRECIS-based rules for handling | This specification defines only the PRECIS-based rules for handling | |||
| of strings conforming to the UsernameCaseMapped and | of strings conforming to the UsernameCaseMapped and | |||
| UsernameCasePreserved profiles of the PRECIS IdentifierClass, and | UsernameCasePreserved profiles of the PRECIS IdentifierClass, and | |||
| strings conforming to the OpaqueString profile of the PRECIS | strings conforming to the OpaqueString profile of the PRECIS | |||
| FreeformClass. It is the responsibility of an application protocol | FreeformClass. It is the responsibility of an application protocol | |||
| skipping to change at page 19, line 44 ¶ | skipping to change at page 20, line 24 ¶ | |||
| [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. | |||
| [RFC5890] Klensin, J., "Internationalized Domain Names for | ||||
| Applications (IDNA): Definitions and Document Framework", | ||||
| RFC 5890, August 2010. | ||||
| [RFC6365] Hoffman, P. and J. Klensin, "Terminology Used in | ||||
| Internationalization in the IETF", BCP 166, RFC 6365, | ||||
| September 2011. | ||||
| [Unicode] The Unicode Consortium, "The Unicode Standard", | [Unicode] The Unicode Consortium, "The Unicode Standard", | |||
| 2015-present, <http://www.unicode.org/versions/latest/>. | 2015-present, <http://www.unicode.org/versions/latest/>. | |||
| [Unicode7.0] | [Unicode7.0] | |||
| The Unicode Consortium, "The Unicode Standard, Version | The Unicode Consortium, "The Unicode Standard, Version | |||
| 7.0.0", 2014, | 7.0.0", 2014, | |||
| <http://www.unicode.org/versions/Unicode7.0.0/>. | <http://www.unicode.org/versions/Unicode7.0.0/>. | |||
| 9.2. Informative References | 9.2. Informative References | |||
| [I-D.ietf-httpauth-basicauth-update] | [I-D.ietf-httpauth-basicauth-update] | |||
| Reschke, J., "The 'Basic' HTTP Authentication Scheme", | Reschke, J., "The 'Basic' HTTP Authentication Scheme", | |||
| draft-ietf-httpauth-basicauth-update-07 (work in | draft-ietf-httpauth-basicauth-update-07 (work in | |||
| progress), February 2015. | progress), February 2015. | |||
| [I-D.ietf-httpauth-digest] | [I-D.ietf-httpauth-digest] | |||
| Shekh-Yusef, R., Ahrens, D., and S. Bremer, "HTTP Digest | Shekh-Yusef, R., Ahrens, D., and S. Bremer, "HTTP Digest | |||
| Access Authentication", draft-ietf-httpauth-digest-14 | Access Authentication", draft-ietf-httpauth-digest-18 | |||
| (work in progress), February 2015. | (work in progress), April 2015. | |||
| [I-D.ietf-radext-nai] | [I-D.ietf-radext-nai] | |||
| DeKok, A., "The Network Access Identifier", draft-ietf- | DeKok, A., "The Network Access Identifier", draft-ietf- | |||
| radext-nai-15 (work in progress), December 2014. | radext-nai-15 (work in progress), December 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., | ||||
| Leach, P., Luotonen, A., and L. Stewart, "HTTP | ||||
| Authentication: Basic and Digest Access Authentication", | ||||
| 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, | |||
| December 2002. | December 2002. | |||
| [RFC3501] Crispin, M., "INTERNET MESSAGE ACCESS PROTOCOL - VERSION | [RFC3501] Crispin, M., "INTERNET MESSAGE ACCESS PROTOCOL - VERSION | |||
| 4rev1", RFC 3501, March 2003. | 4rev1", RFC 3501, March 2003. | |||
| [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 20, line 50 ¶ | skipping to change at page 21, line 33 ¶ | |||
| Authentication and Security Layer (SASL)", RFC 4422, June | Authentication and Security Layer (SASL)", RFC 4422, June | |||
| 2006. | 2006. | |||
| [RFC4616] Zeilenga, K., "The PLAIN Simple Authentication and | [RFC4616] Zeilenga, K., "The PLAIN Simple Authentication and | |||
| Security Layer (SASL) Mechanism", RFC 4616, August 2006. | Security Layer (SASL) Mechanism", RFC 4616, August 2006. | |||
| [RFC5802] Newman, C., Menon-Sen, A., Melnikov, A., and N. Williams, | [RFC5802] Newman, C., Menon-Sen, A., Melnikov, A., and N. Williams, | |||
| "Salted Challenge Response Authentication Mechanism | "Salted Challenge Response Authentication Mechanism | |||
| (SCRAM) SASL and GSS-API Mechanisms", RFC 5802, July 2010. | (SCRAM) SASL and GSS-API Mechanisms", RFC 5802, July 2010. | |||
| [RFC5890] Klensin, J., "Internationalized Domain Names for | ||||
| Applications (IDNA): Definitions and Document Framework", | ||||
| RFC 5890, August 2010. | ||||
| [RFC5891] Klensin, J., "Internationalized Domain Names in | [RFC5891] Klensin, J., "Internationalized Domain Names in | |||
| Applications (IDNA): Protocol", RFC 5891, August 2010. | Applications (IDNA): Protocol", RFC 5891, August 2010. | |||
| [RFC5892] Faltstrom, P., "The Unicode Code Points and | ||||
| Internationalized Domain Names for Applications (IDNA)", | ||||
| RFC 5892, August 2010. | ||||
| [RFC5893] Alvestrand, H. and C. Karp, "Right-to-Left Scripts for | [RFC5893] Alvestrand, H. and C. Karp, "Right-to-Left Scripts for | |||
| Internationalized Domain Names for Applications (IDNA)", | Internationalized Domain Names for Applications (IDNA)", | |||
| RFC 5893, August 2010. | RFC 5893, August 2010. | |||
| [RFC5894] Klensin, J., "Internationalized Domain Names for | [RFC5894] Klensin, J., "Internationalized Domain Names for | |||
| Applications (IDNA): Background, Explanation, and | Applications (IDNA): Background, Explanation, and | |||
| Rationale", RFC 5894, August 2010. | Rationale", RFC 5894, August 2010. | |||
| [RFC6120] Saint-Andre, P., "Extensible Messaging and Presence | [RFC6120] Saint-Andre, P., "Extensible Messaging and Presence | |||
| Protocol (XMPP): Core", RFC 6120, March 2011. | Protocol (XMPP): Core", RFC 6120, March 2011. | |||
| [RFC6365] Hoffman, P. and J. Klensin, "Terminology Used in | ||||
| Internationalization in the IETF", BCP 166, RFC 6365, | ||||
| September 2011. | ||||
| [RFC6943] Thaler, D., "Issues in Identifier Comparison for Security | [RFC6943] Thaler, D., "Issues in Identifier Comparison for Security | |||
| Purposes", RFC 6943, May 2013. | Purposes", RFC 6943, May 2013. | |||
| [UTS39] The Unicode Consortium, "Unicode Technical Standard #39: | [UTS39] The Unicode Consortium, "Unicode Technical Standard #39: | |||
| Unicode Security Mechanisms", July 2012, | Unicode Security Mechanisms", July 2012, | |||
| <http://unicode.org/reports/tr39/>. | <http://unicode.org/reports/tr39/>. | |||
| Appendix A. Differences from RFC 4013 | Appendix A. Differences from RFC 4013 | |||
| This document builds upon the PRECIS framework defined in | This document builds upon the PRECIS framework defined in | |||
| End of changes. 34 change blocks. | ||||
| 85 lines changed or deleted | 86 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/ | ||||