mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-27 03:20:22 +08:00
340 lines
13 KiB
Plaintext
340 lines
13 KiB
Plaintext
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Network Working Group K. Zeilenga
|
|||
|
Request for Comments: 4013 OpenLDAP Foundation
|
|||
|
Category: Standards Track February 2005
|
|||
|
|
|||
|
|
|||
|
SASLprep: Stringprep Profile for User Names and Passwords
|
|||
|
|
|||
|
Status of This Memo
|
|||
|
|
|||
|
This document specifies an Internet standards track protocol for the
|
|||
|
Internet community, and requests discussion and suggestions for
|
|||
|
improvements. Please refer to the current edition of the "Internet
|
|||
|
Official Protocol Standards" (STD 1) for the standardization state
|
|||
|
and status of this protocol. Distribution of this memo is unlimited.
|
|||
|
|
|||
|
Copyright Notice
|
|||
|
|
|||
|
Copyright (C) The Internet Society (2005).
|
|||
|
|
|||
|
Abstract
|
|||
|
|
|||
|
This document describes how to prepare Unicode strings representing
|
|||
|
user names and passwords for comparison. The document defines the
|
|||
|
"SASLprep" profile of the "stringprep" algorithm to be used for both
|
|||
|
user names and passwords. This profile is intended to be used by
|
|||
|
Simple Authentication and Security Layer (SASL) mechanisms (such as
|
|||
|
PLAIN, CRAM-MD5, and DIGEST-MD5), as well as other protocols
|
|||
|
exchanging simple user names and/or passwords.
|
|||
|
|
|||
|
1. Introduction
|
|||
|
|
|||
|
The use of simple user names and passwords in authentication and
|
|||
|
authorization is pervasive on the Internet. To increase the
|
|||
|
likelihood that user name and password input and comparison work in
|
|||
|
ways that make sense for typical users throughout the world, this
|
|||
|
document defines rules for preparing internationalized user names and
|
|||
|
passwords for comparison. For simplicity and implementation ease, a
|
|||
|
single algorithm is defined for both user names and passwords.
|
|||
|
|
|||
|
The algorithm assumes all strings are comprised of characters from
|
|||
|
the Unicode [Unicode] character set.
|
|||
|
|
|||
|
This document defines the "SASLprep" profile of the "stringprep"
|
|||
|
algorithm [StringPrep].
|
|||
|
|
|||
|
The profile is designed for use in Simple Authentication and Security
|
|||
|
Layer ([SASL]) mechanisms, such as [PLAIN], [CRAM-MD5], and
|
|||
|
[DIGEST-MD5]. It may be applicable where simple user names and
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Zeilenga Standards Track [Page 1]
|
|||
|
|
|||
|
RFC 4013 SASLprep February 2005
|
|||
|
|
|||
|
|
|||
|
passwords are used. This profile is not intended for use in
|
|||
|
preparing identity strings that are not simple user names (e.g.,
|
|||
|
email addresses, domain names, distinguished names), or where
|
|||
|
identity or password strings that are not character data, or require
|
|||
|
different handling (e.g., case folding).
|
|||
|
|
|||
|
This document does not alter the technical specification of any
|
|||
|
existing protocols. Any specification that wishes to use the
|
|||
|
algorithm described in this document needs to explicitly incorporate
|
|||
|
this document and provide precise details as to where and how this
|
|||
|
algorithm is used by implementations of that specification.
|
|||
|
|
|||
|
2. The SASLprep Profile
|
|||
|
|
|||
|
This section defines the "SASLprep" profile of the "stringprep"
|
|||
|
algorithm [StringPrep]. This profile is intended for use in
|
|||
|
preparing strings representing simple user names and passwords.
|
|||
|
|
|||
|
This profile uses Unicode 3.2 [Unicode].
|
|||
|
|
|||
|
Character names in this document use the notation for code points and
|
|||
|
names from the Unicode Standard [Unicode]. For example, the letter
|
|||
|
"a" may be represented as either <U+0061> or <LATIN SMALL LETTER A>.
|
|||
|
In the lists of mappings and the prohibited characters, the "U+" is
|
|||
|
left off to make the lists easier to read. The comments for
|
|||
|
character ranges are shown in square brackets (such as "[CONTROL
|
|||
|
CHARACTERS]") and do not come from the standard.
|
|||
|
|
|||
|
Note: A glossary of terms used in Unicode can be found in [Glossary].
|
|||
|
Information on the Unicode character encoding model can be found in
|
|||
|
[CharModel].
|
|||
|
|
|||
|
2.1. Mapping
|
|||
|
|
|||
|
This profile specifies:
|
|||
|
|
|||
|
- non-ASCII space characters [StringPrep, C.1.2] that can be
|
|||
|
mapped to SPACE (U+0020), and
|
|||
|
|
|||
|
- the "commonly mapped to nothing" characters [StringPrep, B.1]
|
|||
|
that can be mapped to nothing.
|
|||
|
|
|||
|
2.2. Normalization
|
|||
|
|
|||
|
This profile specifies using Unicode normalization form KC, as
|
|||
|
described in Section 4 of [StringPrep].
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Zeilenga Standards Track [Page 2]
|
|||
|
|
|||
|
RFC 4013 SASLprep February 2005
|
|||
|
|
|||
|
|
|||
|
2.3. Prohibited Output
|
|||
|
|
|||
|
This profile specifies the following characters as prohibited input:
|
|||
|
|
|||
|
- Non-ASCII space characters [StringPrep, C.1.2]
|
|||
|
- ASCII control characters [StringPrep, C.2.1]
|
|||
|
- Non-ASCII control characters [StringPrep, C.2.2]
|
|||
|
- Private Use characters [StringPrep, C.3]
|
|||
|
- Non-character code points [StringPrep, C.4]
|
|||
|
- Surrogate code points [StringPrep, C.5]
|
|||
|
- Inappropriate for plain text characters [StringPrep, C.6]
|
|||
|
- Inappropriate for canonical representation characters
|
|||
|
[StringPrep, C.7]
|
|||
|
- Change display properties or deprecated characters
|
|||
|
[StringPrep, C.8]
|
|||
|
- Tagging characters [StringPrep, C.9]
|
|||
|
|
|||
|
2.4. Bidirectional Characters
|
|||
|
|
|||
|
This profile specifies checking bidirectional strings as described in
|
|||
|
[StringPrep, Section 6].
|
|||
|
|
|||
|
2.5. Unassigned Code Points
|
|||
|
|
|||
|
This profile specifies the [StringPrep, A.1] table as its list of
|
|||
|
unassigned code points.
|
|||
|
|
|||
|
3. Examples
|
|||
|
|
|||
|
The following table provides examples of how various character data
|
|||
|
is transformed by the SASLprep string preparation algorithm
|
|||
|
|
|||
|
# Input Output Comments
|
|||
|
- ----- ------ --------
|
|||
|
1 I<U+00AD>X IX SOFT HYPHEN mapped to nothing
|
|||
|
2 user user no transformation
|
|||
|
3 USER USER case preserved, will not match #2
|
|||
|
4 <U+00AA> a output is NFKC, input in ISO 8859-1
|
|||
|
5 <U+2168> IX output is NFKC, will match #1
|
|||
|
6 <U+0007> Error - prohibited character
|
|||
|
7 <U+0627><U+0031> Error - bidirectional check
|
|||
|
|
|||
|
4. Security Considerations
|
|||
|
|
|||
|
This profile is intended to prepare simple user name and password
|
|||
|
strings for comparison or use in cryptographic functions (e.g.,
|
|||
|
message digests). The preparation algorithm was specifically
|
|||
|
designed such that its output is canonical, and it is well-formed.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Zeilenga Standards Track [Page 3]
|
|||
|
|
|||
|
RFC 4013 SASLprep February 2005
|
|||
|
|
|||
|
|
|||
|
However, due to an anomaly [PR29] in the specification of Unicode
|
|||
|
normalization, canonical equivalence is not guaranteed for a select
|
|||
|
few character sequences. These sequences, however, do not appear in
|
|||
|
well-formed text. This specification was published despite this
|
|||
|
known technical problem. It is expected that this specification will
|
|||
|
be revised before further progression on the Standards Track (after
|
|||
|
[Unicode] and/or [StringPrep] specifications have been updated to
|
|||
|
address this problem).
|
|||
|
|
|||
|
It is not intended for preparing identity strings that are not simple
|
|||
|
user names (e.g., distinguished names, domain names), nor is the
|
|||
|
profile intended for use of simple user names that require different
|
|||
|
handling (such as case folding). Protocols (or applications of those
|
|||
|
protocols) that have application-specific identity forms and/or
|
|||
|
comparison algorithms should use mechanisms specifically designed for
|
|||
|
these forms and algorithms.
|
|||
|
|
|||
|
Application of string preparation may have an impact upon the
|
|||
|
feasibility of brute force and dictionary attacks. While the number
|
|||
|
of possible prepared strings is less than the number of possible
|
|||
|
Unicode strings, the number of usable names and passwords is greater
|
|||
|
than as if only ASCII was used. Though SASLprep eliminates some
|
|||
|
Unicode code point sequences as possible prepared strings, that
|
|||
|
elimination generally makes the (canonical) output forms practicable
|
|||
|
and prohibits nonsensical inputs.
|
|||
|
|
|||
|
User names and passwords should be protected from eavesdropping.
|
|||
|
|
|||
|
General "stringprep" and Unicode security considerations apply. Both
|
|||
|
are discussed in [StringPrep].
|
|||
|
|
|||
|
5. IANA Considerations
|
|||
|
|
|||
|
This document details the "SASLprep" profile of the [StringPrep]
|
|||
|
protocol. This profile has been registered in the stringprep profile
|
|||
|
registry.
|
|||
|
|
|||
|
Name of this profile: SASLprep
|
|||
|
RFC in which the profile is defined: RFC 4013
|
|||
|
Indicator whether or not this is the newest version of the
|
|||
|
profile: This is the first version of the SASPprep profile.
|
|||
|
|
|||
|
6. Acknowledgement
|
|||
|
|
|||
|
This document borrows text from "Preparation of Internationalized
|
|||
|
Strings ('stringprep')" and "Nameprep: A Stringprep Profile for
|
|||
|
Internationalized Domain Names", both by Paul Hoffman and Marc
|
|||
|
Blanchet. This document is a product of the IETF SASL WG.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Zeilenga Standards Track [Page 4]
|
|||
|
|
|||
|
RFC 4013 SASLprep February 2005
|
|||
|
|
|||
|
|
|||
|
7. Normative References
|
|||
|
|
|||
|
[StringPrep] Hoffman, P. and M. Blanchet, "Preparation of
|
|||
|
Internationalized Strings ("stringprep")", RFC 3454,
|
|||
|
December 2002.
|
|||
|
|
|||
|
[Unicode] The Unicode Consortium, "The Unicode Standard, Version
|
|||
|
3.2.0" is defined by "The Unicode Standard, Version
|
|||
|
3.0" (Reading, MA, Addison-Wesley, 2000. ISBN 0-201-
|
|||
|
61633-5), as amended by the "Unicode Standard Annex
|
|||
|
#27: Unicode 3.1"
|
|||
|
(http://www.unicode.org/reports/tr27/) and by the
|
|||
|
"Unicode Standard Annex #28: Unicode 3.2"
|
|||
|
(http://www.unicode.org/reports/tr28/).
|
|||
|
|
|||
|
8. Informative References
|
|||
|
|
|||
|
[Glossary] The Unicode Consortium, "Unicode Glossary",
|
|||
|
<http://www.unicode.org/glossary/>.
|
|||
|
|
|||
|
[CharModel] Whistler, K. and M. Davis, "Unicode Technical Report
|
|||
|
#17, Character Encoding Model", UTR17,
|
|||
|
<http://www.unicode.org/unicode/reports/tr17/>, August
|
|||
|
2000.
|
|||
|
|
|||
|
[SASL] Melnikov, A., Ed., "Simple Authentication and Security
|
|||
|
Layer (SASL)", Work in Progress.
|
|||
|
|
|||
|
[CRAM-MD5] Nerenberg, L., "The CRAM-MD5 SASL Mechanism", Work in
|
|||
|
Progress.
|
|||
|
|
|||
|
[DIGEST-MD5] Leach, P., Newman, C., and A. Melnikov, "Using Digest
|
|||
|
Authentication as a SASL Mechanism", Work in Progress.
|
|||
|
|
|||
|
[PLAIN] Zeilenga, K., Ed., "The Plain SASL Mechanism", Work in
|
|||
|
Progress.
|
|||
|
|
|||
|
[PR29] "Public Review Issue #29: Normalization Issue",
|
|||
|
<http://www.unicode.org/review/pr-29.html>, February
|
|||
|
2004.
|
|||
|
|
|||
|
Author's Address
|
|||
|
|
|||
|
Kurt D. Zeilenga
|
|||
|
OpenLDAP Foundation
|
|||
|
|
|||
|
EMail: Kurt@OpenLDAP.org
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Zeilenga Standards Track [Page 5]
|
|||
|
|
|||
|
RFC 4013 SASLprep February 2005
|
|||
|
|
|||
|
|
|||
|
Full Copyright Statement
|
|||
|
|
|||
|
Copyright (C) The Internet Society (2005).
|
|||
|
|
|||
|
This document is subject to the rights, licenses and restrictions
|
|||
|
contained in BCP 78, and except as set forth therein, the authors
|
|||
|
retain all their rights.
|
|||
|
|
|||
|
This document and the information contained herein are provided on an
|
|||
|
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
|
|||
|
OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
|
|||
|
ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
|
|||
|
INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
|
|||
|
INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
|
|||
|
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
|||
|
|
|||
|
Intellectual Property
|
|||
|
|
|||
|
The IETF takes no position regarding the validity or scope of any
|
|||
|
Intellectual Property Rights or other rights that might be claimed to
|
|||
|
pertain to the implementation or use of the technology described in
|
|||
|
this document or the extent to which any license under such rights
|
|||
|
might or might not be available; nor does it represent that it has
|
|||
|
made any independent effort to identify any such rights. Information
|
|||
|
on the IETF's procedures with respect to rights in IETF Documents can
|
|||
|
be found in BCP 78 and BCP 79.
|
|||
|
|
|||
|
Copies of IPR disclosures made to the IETF Secretariat and any
|
|||
|
assurances of licenses to be made available, or the result of an
|
|||
|
attempt made to obtain a general license or permission for the use of
|
|||
|
such proprietary rights by implementers or users of this
|
|||
|
specification can be obtained from the IETF on-line IPR repository at
|
|||
|
http://www.ietf.org/ipr.
|
|||
|
|
|||
|
The IETF invites any interested party to bring to its attention any
|
|||
|
copyrights, patents or patent applications, or other proprietary
|
|||
|
rights that may cover technology that may be required to implement
|
|||
|
this standard. Please address the information to the IETF at ietf-
|
|||
|
ipr@ietf.org.
|
|||
|
|
|||
|
|
|||
|
Acknowledgement
|
|||
|
|
|||
|
Funding for the RFC Editor function is currently provided by the
|
|||
|
Internet Society.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Zeilenga Standards Track [Page 6]
|
|||
|
|