| < draft-ietf-precis-saslprepbis-03.txt | draft-ietf-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: January 13, 2014 July 12, 2013 | Expires: February 5, 2014 August 4, 2013 | |||
| Preparation and Comparison of Internationalized Strings Representing | Preparation and Comparison of Internationalized Strings Representing | |||
| Simple User Names and Passwords | Usernames and Passwords | |||
| draft-ietf-precis-saslprepbis-03 | draft-ietf-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 | usernames and passwords. This profile is intended to be used by | |||
| comparison. This profile is intended to be used by Simple | protocols that exchange or otherwise make use of usernames and | |||
| Authentication and Security Layer (SASL) mechanisms (such as PLAIN | passwords. This document obsoletes RFC 4013. | |||
| and SCRAM-SHA-1), as well as other protocols that exchange simple | ||||
| user names or passwords. This document obsoletes RFC 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 | |||
| 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 January 13, 2014. | This Internet-Draft will expire on February 5, 2014. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2013 IETF Trust and the persons identified as the | Copyright (c) 2013 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 1.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. What the Username and Password Profiles Provide . . . . . . . 3 | |||
| 1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 | 3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2. Simple User Names . . . . . . . . . . . . . . . . . . . . . . 4 | 4. Usernames . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2.1. Definition . . . . . . . . . . . . . . . . . . . . . . . . 4 | 4.1. Definition . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2.2. Preparation . . . . . . . . . . . . . . . . . . . . . . . 5 | 4.2. Preparation . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 3. Passwords . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 5. Passwords . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 3.1. Definition . . . . . . . . . . . . . . . . . . . . . . . . 6 | 5.1. Definition . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 3.2. Preparation . . . . . . . . . . . . . . . . . . . . . . . 7 | 5.2. Preparation . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 4. Migration . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 6. Migration . . . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 4.1. User Names . . . . . . . . . . . . . . . . . . . . . . . . 7 | 6.1. Usernames . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 4.2. Passwords . . . . . . . . . . . . . . . . . . . . . . . . 9 | 6.2. Passwords . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 5. Security Considerations . . . . . . . . . . . . . . . . . . . 9 | 7. Security Considerations . . . . . . . . . . . . . . . . . . . 10 | |||
| 5.1. Password/Passphrase Strength . . . . . . . . . . . . . . . 10 | 7.1. Password/Passphrase Strength . . . . . . . . . . . . . . . 10 | |||
| 5.2. Identifier Comparison . . . . . . . . . . . . . . . . . . 10 | 7.2. Identifier Comparison . . . . . . . . . . . . . . . . . . 10 | |||
| 5.3. Reuse of PRECIS . . . . . . . . . . . . . . . . . . . . . 10 | 7.3. Reuse of PRECIS . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 5.4. Reuse of Unicode . . . . . . . . . . . . . . . . . . . . . 10 | 7.4. Reuse of Unicode . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 6.1. Use of IdentifierClass . . . . . . . . . . . . . . . . . . 10 | 8.1. Use of IdentifierClass . . . . . . . . . . . . . . . . . . 11 | |||
| 6.2. Use of FreeformClass . . . . . . . . . . . . . . . . . . . 11 | 8.2. Use of FreeformClass . . . . . . . . . . . . . . . . . . . 11 | |||
| 7. Open Issues . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 9.1. Normative References . . . . . . . . . . . . . . . . . . . 12 | |||
| 8.1. Normative References . . . . . . . . . . . . . . . . . . . 11 | 9.2. Informative References . . . . . . . . . . . . . . . . . . 12 | |||
| 8.2. Informative References . . . . . . . . . . . . . . . . . . 12 | ||||
| Appendix A. Differences from RFC 4013 . . . . . . . . . . . . . . 13 | Appendix A. Differences from RFC 4013 . . . . . . . . . . . . . . 13 | |||
| Appendix B. Acknowledgements . . . . . . . . . . . . . . . . . . 13 | Appendix B. Acknowledgements . . . . . . . . . . . . . . . . . . 14 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 13 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 1. Introduction | 1. Introduction | |||
| 1.1. Overview | Usernames and passwords are widely used for authentication and | |||
| authorization on the Internet, either directly when provided in | ||||
| plaintext (as in the SASL PLAIN mechanism [RFC4616] or the HTTP Basic | ||||
| scheme [RFC2617]) or indirectly when provided as the input to a | ||||
| cryptographic algorithm such as a hash function (as in the SASL SCRAM | ||||
| mechanism [RFC5802] or the HTTP Digest scheme [RFC2617]). To | ||||
| increase the likelihood that the input and comparison of usernames | ||||
| and passwords will work in ways that make sense for typical users | ||||
| throughout the world, this document defines rules for preparing and | ||||
| comparing internationalized strings that represent usernames and | ||||
| passwords. | ||||
| User names and passwords are used pervasively in authentication and | The methods specified in this document define a PRECIS profile as | |||
| authorization on the Internet. To increase the likelihood that the | explained in the PRECIS framework specification | |||
| input and comparison of user names and passwords will work in ways | [I-D.ietf-precis-framework]. This document assumes that all strings | |||
| that make sense for typical users throughout the world, this document | are comprised of characters from the Unicode character set [UNICODE], | |||
| defines rules for preparing and comparing internationalized strings | with special attention to characters outside the ASCII range [RFC20]. | |||
| that represent simple user names and passwords. (In many | The methods defined here might be applicable wherever usernames or | |||
| authentication technologies passwords are not directly compared | passwords are used. However, the methods are not intended for use in | |||
| because the actual password is used as input to an algorithm such as | preparing strings that are not usernames (e.g., email addresses and | |||
| a hash function; however, non-ASCII code points in the input string | LDAP distinguished names), nor in cases where identifiers or secrets | |||
| still need to be handled correctly.) | are not strings (e.g., keys and certificates) or require specialized | |||
| handling. | ||||
| The algorithms defined in this document assume that all strings are | This document obsoletes RFC 4013 (the "SASLprep" profile of | |||
| comprised of characters from the Unicode character set [UNICODE]. | stringprep [RFC3454]) but can be used by technologies other than the | |||
| Simple Authentication and Security Layer (SASL) [RFC4422], such as | ||||
| HTTP authentication [RFC2617]. | ||||
| The algorithms are designed for use in Simple Authentication and | 2. What the Username and Password Profiles Provide | |||
| Security Layer (SASL) [RFC4422] mechanisms, such as PLAIN [RFC4616] | ||||
| and SCRAM-SHA-1 [RFC5802]. However, they might be applicable | ||||
| wherever simple user names or passwords are used. This profile is | ||||
| not intended for use in preparing strings that are not simple user | ||||
| names (e.g., email addresses, DNS domain names, LDAP distinguished | ||||
| names), nor in cases where identifiers or secrets are not strings | ||||
| (e.g., keys or certificates) or require specialized handling (e.g., | ||||
| case folding). | ||||
| This document builds upon the PRECIS framework defined in | Profiles of the PRECIS framework enable software to handle Unicode | |||
| [I-D.ietf-precis-framework], which differs fundamentally from the | characters outside the ASCII range in an automated way, so that such | |||
| stringprep technology [RFC3454] used in SASLprep [RFC4013]. The | characters are treated carefully and consistently in application | |||
| primary difference is that stringprep profiles allowed all characters | protocols. In large measure, these profiles are designed to protect | |||
| except those which were explicitly disallowed, whereas PRECIS | application developers from the potentially negative consequences of | |||
| profiles disallow all characters except those which are explicitly | supporting the full range of Unicode characters. For instance, in | |||
| allowed (this "inclusion model" was originally used for | almost all application protocols it would be dangerous to treat the | |||
| internationalized domain names in [RFC5891]; see [RFC5894] for | Unicode character SUPERSCRIPT ONE (U+0089) as equivalent to DIGIT ONE | |||
| further discussion). It is important to keep this distinction in | (U+0031), since that would result in false positives during | |||
| mind when comparing the technology defined in this document to | comparison, authentication, and authorization (e.g., an attacker | |||
| SASLprep [RFC4013]. | could easy spoof an account "user1@example.com"). | |||
| This document obsoletes RFC 4013. | Whereas a naive use of Unicode would make such attacks trivially | |||
| easy, the Username PRECIS profile defined in this document generally | ||||
| protects applications from inadvertently causing such problems. | ||||
| (Similar considerations apply to passwords, although here it is | ||||
| desirable to support a wider range of characters so as to maximize | ||||
| entropy during authentication.) | ||||
| 1.2. Terminology | 3. 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], [RFC4422], [RFC5890], [RFC6365], and | [I-D.ietf-precis-framework], [RFC5890], [RFC6365], and [UNICODE]. | |||
| [UNICODE]. The term "non-ASCII space" refers to any Unicode code | The term "non-ASCII space" refers to any Unicode code point having a | |||
| point with a general category of "Zs", with the exception of U+0020 | general category of "Zs", with the exception of U+0020 (here called | |||
| (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. | |||
| Some SASL mechanisms (e.g., CRAM-MD5, DIGEST-MD5, and SCRAM) specify | ||||
| that the authentication identity used in the context of such | ||||
| mechanisms is a "simple user name" (see Section 2 of [RFC4422] as | ||||
| well as [RFC4013]). Various application technologies also assume | ||||
| that the identity of a user or account takes the form of a username | ||||
| (e.g., authentication for the HyperText Transfer Protocol [RFC2617]), | ||||
| whether or not they use SASL. Note well that the exact form of a | ||||
| username in any particular SASL mechanism or application technology | ||||
| is a matter for implementation and deployment, and that a username | ||||
| does not necessarily map to any particular 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]. | |||
| 2. Simple User Names | 4. Usernames | |||
| 2.1. Definition | ||||
| Some SASL mechanisms (e.g., CRAM-MD5, DIGEST-MD5, and SCRAM) specify | ||||
| that the authentication identity used in the context of such | ||||
| 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 | ||||
| any particular mechanism or deployment thereof is a local matter, and | ||||
| a simple user name does not necessarily map to an application | ||||
| identifier such as the localpart of an email address. | ||||
| For purposes of preparation and comparison of authentication | 4.1. Definition | |||
| identities, this document specifies that a simple user name is a | ||||
| string of Unicode code points [UNICODE], encoded using UTF-8 | ||||
| [RFC3629], and structured either as an ordered sequence of | ||||
| "simpleparts" (where the complete simple user name can consist of a | ||||
| single simplepart or a space-separated sequence of simpleparts) or as | ||||
| a simplepart@domainpart (where the domainpart is an IP literal, an | ||||
| IPv4 address, or a fully-qualified domain name). | ||||
| Therefore the syntax for a simple user name is defined as follows | This document specifies that a username is a string of Unicode code | |||
| using the Augmented Backus-Naur Form (ABNF) as specified in | points [UNICODE], encoded using UTF-8 [RFC3629], and structured | |||
| [RFC5234]. | either as an ordered sequence of "userparts" (where the complete | |||
| username can consist of a single userpart or a space-separated | ||||
| sequence of userparts) or as a userpart@domainpart (where the | ||||
| domainpart is an IP literal, an IPv4 address, or a fully-qualified | ||||
| domain name). | ||||
| simpleusername = simplepart [1*(1*SP simplepart)] | The syntax for a username is defined as follows using the Augmented | |||
| / simplepart '@' domainpart | Backus-Naur Form (ABNF) [RFC5234]. | |||
| simplepart = 1*(idpoint) | ||||
| ; | ||||
| ; an "idpoint" is a UTF-8 encoded | ||||
| ; Unicode code point that conforms to | ||||
| ; the PRECIS "IdentifierClass" | ||||
| ; | ||||
| domainpart = IP-literal / IPv4address / ifqdn | ||||
| ; | ||||
| ; the "IPv4address" and "IP-literal" | ||||
| ; rules are defined in RFC 3986, and | ||||
| ; the first-match-wins (a.k.a. "greedy") | ||||
| ; algorithm described in RFC 3986 | ||||
| ; applies to the matching process | ||||
| ; | ||||
| ; note well that reuse of the IP-literal | ||||
| ; rule from RFC 3986 implies that IPv6 | ||||
| ; addresses are enclosed in square | ||||
| ; brackets (i.e., beginning with '[' | ||||
| ; and ending with ']') | ||||
| ; | ||||
| ifqdn = 1*1023(domainpoint) | ||||
| ; | ||||
| ; a "domainpoint" is a UTF-8 encoded | ||||
| ; Unicode code point that conforms to | ||||
| ; RFC 5890 | ||||
| ; | ||||
| Note well that all code points and blocks not explicitly allowed in | username = userpart [1*(1*SP userpart)] | |||
| the PRECIS IdentifierClass are disallowed; this includes private use | / userpart '@' domainpart | |||
| characters, surrogate code points, and the other code points and | userpart = 1*(idpoint) | |||
| blocks defined as "Prohibited Output" in Section 2.3 of RFC 4013. | ; | |||
| ; an "idpoint" is a UTF-8 encoded Unicode code point | ||||
| ; that conforms to the PRECIS "IdentifierClass" | ||||
| ; | ||||
| domainpart = IP-literal / IPv4address / ifqdn | ||||
| ; | ||||
| ; the "IPv4address" and "IP-literal" rules are | ||||
| ; defined in RFC 3986, and the first-match-wins | ||||
| ; (a.k.a. "greedy") algorithm described in RFC 3986 | ||||
| ; applies | ||||
| ; | ||||
| ; reuse of the IP-literal rule from RFC 3986 implies | ||||
| ; that IPv6 addresses are enclosed in square brackets | ||||
| ; (i.e., beginning with '[' and ending with ']') | ||||
| ; | ||||
| ifqdn = 1*1023(domainpoint) | ||||
| ; | ||||
| ; a "domainpoint" is a UTF-8 encoded Unicode code | ||||
| ; point that conforms to RFC 5890 | ||||
| ; | ||||
| Note also that common constructions such as "user@example.com" are | All code points and blocks not explicitly allowed in the PRECIS | |||
| allowed as simple user names when using software that conforms to | IdentifierClass are disallowed; this includes private use characters, | |||
| this specification, as they were under [RFC4013]. | surrogate code points, and the other code points and blocks that were | |||
| defined as "Prohibited Output" in [RFC4013]. In addition, common | ||||
| constructions such as "user@example.com" are allowed as usernames | ||||
| under this specification, as they were under [RFC4013]. | ||||
| 2.2. Preparation | 4.2. Preparation | |||
| A simple user name MUST NOT be zero bytes in length. This rule is to | A username MUST NOT be zero bytes in length. This rule is to be | |||
| be enforced after any normalization and mapping of code points. | enforced after any normalization and mapping of code points. | |||
| Each simplepart of a simple user name MUST conform to the definition | Each userpart of a username MUST conform to the definition of the | |||
| of the PRECIS IdentifierClass provided in | PRECIS IdentifierClass provided in [I-D.ietf-precis-framework], where | |||
| [I-D.ietf-precis-framework], where the width mapping, additional | the width mapping, additional mapping, case mapping, normalization, | |||
| mapping, case mapping, normalization, and directionality rules are as | and directionality rules are as follows. | |||
| described below. | ||||
| 1. Fullwidth and halfwidth characters MUST be mapped to their | 1. Fullwidth and halfwidth characters MUST be mapped to their | |||
| decomposition equivalents. | decomposition equivalents. | |||
| 2. So-called additional mappings MAY be applied, such as those | 2. So-called additional mappings MAY be applied, such as those | |||
| defined in [I-D.ietf-precis-mappings]. | defined in [I-D.ietf-precis-mappings]. | |||
| 3. Uppercase and titlecase characters MAY be mapped to their | 3. Uppercase and titlecase characters SHOULD be mapped to their | |||
| lowercase equivalents. | lowercase equivalents (not doing so can lead to false positives | |||
| during authentication and authorization, as described in | ||||
| [RFC6943]). | ||||
| 4. Unicode Normalization Form C (NFC) MUST be applied to all | 4. Unicode Normalization Form C (NFC) MUST be applied to all | |||
| characters. | characters. | |||
| With regard to directionality, the "Bidi Rule" provided in [RFC5893] | With regard to directionality, the "Bidi Rule" provided in [RFC5893] | |||
| applies. | applies. | |||
| SASL mechanisms that directly re-use this profile MUST specify | SASL mechanisms that directly re-use this profile MUST specify | |||
| whether case mapping is to be applied to authentication IDs, and | whether and when case mapping is to be applied to authentication | |||
| when. SASL mechanisms SHOULD delay any case mapping to the last | identifiers. SASL mechanisms SHOULD delay any case mapping to the | |||
| possible moment, such as when doing a lookup by username, username | 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 | |||
| username. In keeping with RFC4422, SASL mechanisms are not to apply | ||||
| this or any other profile to authorization identifiers. | ||||
| Application protocols that use SASL (such as IMAP [RFC4616] and XMPP | Application protocols that use SASL (such as IMAP [RFC4616] and XMPP | |||
| [RFC6120]) and that directly re-use this profile MUST specify whether | [RFC6120]) and that directly re-use this profile MUST specify whether | |||
| case mapping is to be applied to authorization IDs. Such "SASL | case mapping is to be applied to authorization identifiers. Such | |||
| application protocols" SHOULD delay any case mapping of authorization | "SASL application protocols" SHOULD delay any case mapping of | |||
| IDs to the last possible moment, which happens to necessarily be on | authorization identifiers to the last possible moment, which happens | |||
| the server side. | to necessarily be on the server side. In keeping with RFC4422, SASL | |||
| application protocols are not to apply this or any other profile to | ||||
| authentication identifiers. | ||||
| In keeping with RFC4422, SASL application protocols are not to apply | Application protoocls that do not use SASL (such as HTTP | |||
| this or any other profile to authentication IDs, and SASL mechanisms | authentication with the Basic and Digest schemes [RFC2617]) MUST | |||
| are not to apply this or any other profile to authorization IDs. | specify whether and when case mapping is to be applied to | |||
| authentication identifiers and authorization identifiers. Such | ||||
| application protocols SHOULD delay any case mapping to the last | ||||
| possible moment, such as when doing a lookup by username, username | ||||
| comparisons, or generating a cryptographic salt from a username. | ||||
| 3. Passwords | 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, | ||||
| since the username is not available to the server in plaintext form. | ||||
| 3.1. Definition | 5. Passwords | |||
| 5.1. Definition | ||||
| For purposes of preparation and comparison of passwords, this | 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 [UNICODE], encoded using UTF-8 [RFC3629], and conformant to | |||
| [UNICODE], encoded using UTF-8 [RFC3629], and conformant to the | the PRECIS FreeformClass. | |||
| PRECIS FreeformClass. | ||||
| Therefore the syntax for a password is defined as follows using the | The syntax for a password is defined as follows using the Augmented | |||
| Augmented Backus-Naur Form (ABNF) as specified in [RFC5234]. | Backus-Naur Form (ABNF) [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 PRECIS "FreeformClass" | ; the PRECIS "FreeformClass" | |||
| ; | ; | |||
| Note well that all code points and blocks not explicitly allowed in | All code points and blocks not explicitly allowed in the PRECIS | |||
| the PRECIS FreeformClass are disallowed; this includes private use | FreeformClass are disallowed; this includes private use characters, | |||
| characters, surrogate code points, and the other code points and | surrogate code points, and the other code points and blocks defined | |||
| blocks defined as "Prohibited Output" in Section 2.3 of RFC 4013. | as "Prohibited Output" in Section 2.3 of RFC 4013. | |||
| 3.2. Preparation | 5.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 and 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 conform to the definition of the PRECIS FreeformClass | |||
| MUST be completed in the order shown: | provided in [I-D.ietf-precis-framework], where the width mapping, | |||
| additional mapping, case mapping, normalization, and directionality | ||||
| rules are as described below. | ||||
| 1. Width mapping is not applied. | 1. Fullwidth and halfwidth characters MUST NOT be mapped to their | |||
| 2. Map any instances of non-ASCII space to ASCII space (U+0020). | decomposition equivalents. | |||
| 3. Case mapping is not applied. | 2. Any instances of non-ASCII space MUST be mapped to ASCII space | |||
| 4. Apply Unicode Normalization Form C (NFC) to all characters. | (U+0020). | |||
| 5. Ensure that the resulting string conforms to the definition of | 3. So-called additional mappings MAY be applied, such as those | |||
| the PRECIS FreeformClass. | defined in [I-D.ietf-precis-mappings]. | |||
| 4. Uppercase and titlecase characters MUST NOT be mapped to their | ||||
| lowercase equivalents. | ||||
| 5. Unicode Normalization Form C (NFC) MUST be applied to all | ||||
| characters. | ||||
| 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 user names are. | the way that non-secret strings like domain names and usernames are. | |||
| 4. Migration | 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. | ||||
| 6. Migration | ||||
| The rules defined in this specification differ slightly from those | The rules defined in this specification differ slightly from those | |||
| defined by the SASLprep specification [RFC4013]. The following | defined by the SASLprep specification [RFC4013]. The following | |||
| sections describe these differences, along with their implications | sections describe these differences, along with their implications | |||
| for migration, in more detail. | for migration, in more detail. | |||
| 4.1. User Names | 6.1. Usernames | |||
| Deployments that currently use SASLprep for handling user names might | Deployments that currently use SASLprep for handling usernames might | |||
| need to scrub existing data when migrating to use of the rules | need to scrub existing data when migrating to use of the rules | |||
| defined in this specification. In particular: | defined in this specification. 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 IdentifierClass employs | (NFKC), whereas this usage of the PRECIS IdentifierClass employs | |||
| Unicode Normalization Form C (NFC). In practice this change is | Unicode Normalization Form C (NFC). In practice this change is | |||
| unlikely to cause significant problems, because NFKC provides | unlikely to cause significant problems, because NFKC provides | |||
| methods for mapping Unicode code points with compatibility | methods for mapping Unicode code points with compatibility | |||
| equivalents to those equivalents, whereas the PRECIS | equivalents to those equivalents, whereas the PRECIS | |||
| IdentifierClass entirely disallows Unicode code points with | IdentifierClass entirely disallows Unicode code points with | |||
| skipping to change at page 8, line 20 ¶ | skipping to change at page 8, line 46 ¶ | |||
| might suffice to indicate the nature of the problem: (1) U+017F | 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 LONG S is compatibility equivalent to U+0073 | |||
| LATIN SMALL LETTER S (2) U+2163 ROMAN NUMERAL FOUR is | LATIN SMALL LETTER S (2) U+2163 ROMAN NUMERAL FOUR is | |||
| compatibility equivalent to U+0049 LATIN CAPITAL LETTER I and | compatibility equivalent to U+0049 LATIN CAPITAL LETTER I and | |||
| U+0056 LATIN CAPITAL LETTER V (3) U+FB01 LATIN SMALL LIGATURE FI | U+0056 LATIN CAPITAL LETTER V (3) U+FB01 LATIN SMALL LIGATURE FI | |||
| is compatibility equivalent to U+0066 LATIN SMALL LETTER F and | is compatibility equivalent to U+0066 LATIN SMALL LETTER F and | |||
| U+0069 LATIN SMALL LETTER I. Under SASLprep, the use of NFKC also | U+0069 LATIN SMALL LETTER I. Under SASLprep, the use of NFKC also | |||
| handled the mapping of fullwidth and halfwidth code points to | handled the mapping of fullwidth and halfwidth code points to | |||
| their decomposition equivalents (see [I-D.ietf-precis-mappings]). | their decomposition equivalents (see [I-D.ietf-precis-mappings]). | |||
| Although it is expected that code points with compatibility | Although it is expected that code points with compatibility | |||
| equivalents are rare in existing user names, for migration | equivalents are rare in existing usernames, for migration purposes | |||
| purposes deployments might want to search their database of user | deployments might want to search their database of usernames for | |||
| names for Unicode code points with compatibility equivalents and | Unicode code points with compatibility equivalents and map those | |||
| map those code points to their compatibility equivalents. | code points to their compatibility equivalents. | |||
| o SASLprep mapped non-ASCII spaces to ASCII space (U+0020), whereas | o SASLprep mapped non-ASCII spaces to ASCII space (U+0020), whereas | |||
| the PRECIS IdentifierClass entirely disallows non-ASCII spaces. | the PRECIS IdentifierClass entirely disallows non-ASCII spaces. | |||
| The non-ASCII space characters are U+00A0 NO-BREAK SPACE, U+1680 | 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 | 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 | through U+200A HAIR SPACE, U+202F NARROW NO-BREAK SPACE, U+205F | |||
| MEDIUM MATHEMATICAL SPACE, and U+3000 IDEOGRAPHIC SPACE. For | MEDIUM MATHEMATICAL SPACE, and U+3000 IDEOGRAPHIC SPACE. For | |||
| migration purposes, deployments might want to convert non-ASCII | migration purposes, deployments might want to convert non-ASCII | |||
| space characters to ASCII space in simple user names. | space characters to ASCII space in usernames. | |||
| 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 | |||
| IdentifierClass entirely disallows most of these characters, which | IdentifierClass entirely disallows most of these characters, which | |||
| correspond to the code points from the "M" category defined under | correspond to the code points from the "M" category defined under | |||
| Section 6.13 of [I-D.ietf-precis-framework] (with the exception of | Section 6.13 of [I-D.ietf-precis-framework] (with the exception of | |||
| U+1806 MONGOLIAN TODO SOFT HYPHEN, which was "commonly mapped to | 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 | 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 | have a derived property of Default_Ignorable_Code_Point in Unicode | |||
| 6.1). For migration purposes, deployments might want to remove | 6.2). For migration purposes, deployments might want to remove | |||
| code points contained in the PRECIS "M" category from simple user | code points contained in the PRECIS "M" category from usernames. | |||
| names. | ||||
| o SASLprep allowed uppercase and titlecase characters, whereas this | o SASLprep allowed uppercase and titlecase characters, whereas this | |||
| usage of the PRECIS IdentifierClass maps uppercase and titlecase | usage of the PRECIS IdentifierClass maps uppercase and titlecase | |||
| characters to their lowercase equivalents. For migration | characters to their lowercase equivalents. For migration | |||
| purposes, deployments can either convert uppercase and titlecase | purposes, deployments can either convert uppercase and titlecase | |||
| characters to their lowercase equivalents in simple user names | characters to their lowercase equivalents in usernames (thus | |||
| (thus losing the case information) or preserve uppercase and | losing the case information) or preserve uppercase and titlecase | |||
| titlecase characters and ignore the case difference when comparing | characters and ignore the case difference when comparing | |||
| simple user names. | usernames. | |||
| 4.2. Passwords | 6.2. Passwords | |||
| Depending on local service policy, migration from RFC 4013 to this | Depending on local service policy, migration from RFC 4013 to this | |||
| specification might not involve any scrubbing of data (since | specification might not involve any scrubbing of data (since | |||
| passwords might not be stored in the clear anyway); however, service | passwords might not be stored in the clear anyway); however, service | |||
| providers need to be aware of possible issues that might arise during | providers need to be aware of possible issues that might arise during | |||
| migration. In particular: | 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 FreeformClass employs | (NFKC), whereas this usage of the PRECIS FreeformClass employs | |||
| Unicode Normalization Form C (NFC). Because NFKC is more | Unicode Normalization Form C (NFC). Because NFKC is more | |||
| skipping to change at page 9, line 43 ¶ | skipping to change at page 10, line 21 ¶ | |||
| might no longer work when the rules in this specification are | might no longer work when the rules in this specification are | |||
| applied. | 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 | |||
| FreeformClass entirely disallows such characters, which correspond | FreeformClass entirely disallows such characters, which correspond | |||
| to the code points from the "M" category defined under Section | to the code points from the "M" category defined under Section | |||
| 6.13 of [I-D.ietf-precis-framework] (with the exception of U+1806 | 6.13 of [I-D.ietf-precis-framework] (with the exception of U+1806 | |||
| MONGOLIAN TODO SOFT HYPHEN, which was commonly mapped to nothing | MONGOLIAN TODO SOFT HYPHEN, which was commonly mapped to nothing | |||
| in Unicode 3.2 but at the time of this writing is allowed by | in Unicode 3.2 but at the time of this writing is allowed by | |||
| Unicode 6.1). In practice, this change will probably have no | Unicode 6.2). In practice, this change will probably have no | |||
| effect on comparison, but user-oriented software might reject such | effect on comparison, but user-oriented software might reject such | |||
| code points instead of ignoring them during password preparation. | code points instead of ignoring them during password preparation. | |||
| 5. Security Considerations | 7. Security Considerations | |||
| 5.1. Password/Passphrase Strength | ||||
| 7.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. Identifier Comparison | 7.2. Identifier Comparison | |||
| The process of comparing identifiers (such as SASL simple user names, | The process of comparing identifiers (such as SASL simple user names, | |||
| authentication identifiers, and authorization identifiers) can lead | authentication identifiers, and authorization identifiers) can lead | |||
| to either false negatives or false positives, both of which have | to either false negatives or false positives, both of which have | |||
| security implications. A more detailed discussion can be found in | security implications. A more detailed discussion can be found in | |||
| [RFC6943]. | [RFC6943]. | |||
| 5.3. Reuse of PRECIS | 7.3. Reuse of PRECIS | |||
| The security considerations described in [I-D.ietf-precis-framework] | The security considerations described in [I-D.ietf-precis-framework] | |||
| apply to the "IdentifierClass" and "FreeformClass" base string | apply to the "IdentifierClass" and "FreeformClass" base string | |||
| classes used in this document for simple user names and passwords, | classes used in this document for usernames and passwords, | |||
| respectively. | respectively. | |||
| 5.4. Reuse of Unicode | 7.4. 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 usernames and passwords. | |||
| 6. IANA Considerations | 8. IANA Considerations | |||
| 6.1. Use of IdentifierClass | [Note to RFC Editor: please change XXXX to the number issued for this | |||
| specification.] | ||||
| 8.1. Use of IdentifierClass | ||||
| 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 IdentifierClass in SASL, as follows: | the PRECIS IdentifierClass, as follows: | |||
| Applicability: Usernames in SASL and Kerberos. | Applicability: Usernames in security and application protocols. | |||
| Base Class: IdentifierClass. | Base Class: IdentifierClass. | |||
| Subclass: No. | Subclass: No. | |||
| Replaces: The SASLprep profile of Stringprep. | Replaces: The SASLprep profile of Stringprep. | |||
| Width Mapping: Map fullwidth and halfwidth characters to their | Width Mapping: Map fullwidth and halfwidth characters to their | |||
| decomposition equivalents. | decomposition equivalents. | |||
| Additional Mappings: None. | Additional Mappings: None. | |||
| Case Mapping: To be defined by application protocols that use this | Case Mapping: Not recommended, but to be defined by application | |||
| profile. | protocols that use this profile. | |||
| Normalization: NFC. | Normalization: NFC. | |||
| Directionality: The "Bidi Rule" defined in RFC 5893 applies. | Directionality: The "Bidi Rule" defined in RFC 5893 applies. | |||
| Specification: RFC XXXX. [Note to RFC Editor: please change XXXX to | Specification: RFC XXXX. | |||
| the number issued for this specification.] | ||||
| 6.2. Use of FreeformClass | 8.2. Use of FreeformClass | |||
| 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 FreeformClass in SASL, as follows: | the PRECIS FreeformClass, as follows: | |||
| Applicability: Passwords in SASL and Kerberos. | Applicability: Passwords in security and application protocols. | |||
| Base Class: FreeformClass | Base Class: FreeformClass | |||
| Subclass: No. | Subclass: No. | |||
| Replaces: The SASLprep profile of Stringprep. | Replaces: The SASLprep profile of Stringprep. | |||
| Width Mapping: None. | Width Mapping: None. | |||
| Additional Mappings: Map non-ASCII space characters to ASCII space. | Additional Mappings: Map non-ASCII space characters to ASCII space. | |||
| Case Mapping: None. | Case Mapping: None. | |||
| Normalization: NFC. | Normalization: NFC. | |||
| Directionality: None. | Directionality: None. | |||
| Specification: RFC XXXX. [Note to RFC Editor: please change XXXX to | Specification: RFC XXXX. | |||
| the number issued for this specification.] | ||||
| 7. 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 | ||||
| under Section 4.) | ||||
| 8. References | ||||
| 8.1. Normative References | 9. 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", | Handling Internationalized Strings in Protocols", | |||
| draft-ietf-precis-framework-09 (work in progress), | draft-ietf-precis-framework-09 (work in progress), | |||
| July 2013. | July 2013. | |||
| [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/>. | |||
| 8.2. Informative References | 9.2. Informative References | |||
| [I-D.ietf-precis-mappings] | [I-D.ietf-precis-mappings] | |||
| YONEYA, Y. and T. NEMOTO, "Mapping characters for PRECIS | YONEYA, Y. and T. NEMOTO, "Mapping characters for PRECIS | |||
| classes", draft-ietf-precis-mappings-02 (work in | classes", draft-ietf-precis-mappings-02 (work in | |||
| progress), May 2013. | progress), May 2013. | |||
| [RFC20] Cerf, V., "ASCII format for network interchange", RFC 20, | ||||
| 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. | |||
| [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. | |||
| [RFC4422] Melnikov, A., Ed. and K. Zeilenga, Ed., "Simple | [RFC4422] Melnikov, A., Ed. and K. Zeilenga, Ed., "Simple | |||
| Authentication and Security Layer (SASL)", RFC 4422, | Authentication and Security Layer (SASL)", RFC 4422, | |||
| June 2006. | June 2006. | |||
| skipping to change at page 13, line 21 ¶ | skipping to change at page 13, line 41 ¶ | |||
| [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. | |||
| [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 | |||
| This document builds upon the PRECIS framework defined in | ||||
| [I-D.ietf-precis-framework], which differs fundamentally from the | ||||
| stringprep technology [RFC3454] used in SASLprep [RFC4013]. The | ||||
| primary difference is that stringprep profiles allowed all characters | ||||
| except those which were explicitly disallowed, whereas PRECIS | ||||
| profiles disallow all characters except those which are explicitly | ||||
| allowed (this "inclusion model" was originally used for | ||||
| internationalized domain names in [RFC5891]; see [RFC5894] for | ||||
| further discussion). It is important to keep this distinction in | ||||
| mind when comparing the technology defined in this document to | ||||
| SASLprep [RFC4013]. | ||||
| 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 simple user names 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 to NFC (from NFKC). | |||
| 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, Pete Resnick, | Josefsson, Jonathan Lennox, Matt Miller, Chris Newman, Yutaka OIWA, | |||
| Andrew Sullivan, and Nico Williams (Nico in particular provided text | Pete Resnick, Andrew Sullivan, and Nico Williams (Nico in particular | |||
| that was used in Section 2.2). Thanks also to Yoshiro YONEYA and | provided text that was used in Section 2.2). Thanks also to Yoshiro | |||
| Takahiro NEMOTO for implementation feedback. | 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 | |||
| 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. 69 change blocks. | ||||
| 230 lines changed or deleted | 265 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/ | ||||