rohrpost

A commandline mail client to change the world as we see it.
git clone git://r-36.net/rohrpost
Log | Files | Refs | README | LICENSE

rfc4616.txt (20270B)


      1 
      2 
      3 
      4 
      5 
      6 
      7 Network Working Group                                   K. Zeilenga, Ed.
      8 Request for Comments: 4616                           OpenLDAP Foundation
      9 Updates: 2595                                                August 2006
     10 Category: Standards Track
     11 
     12 
     13   The PLAIN Simple Authentication and Security Layer (SASL) Mechanism
     14 
     15 Status of This Memo
     16 
     17    This document specifies an Internet standards track protocol for the
     18    Internet community, and requests discussion and suggestions for
     19    improvements.  Please refer to the current edition of the "Internet
     20    Official Protocol Standards" (STD 1) for the standardization state
     21    and status of this protocol.  Distribution of this memo is unlimited.
     22 
     23 Copyright Notice
     24 
     25    Copyright (C) The Internet Society (2006).
     26 
     27 Abstract
     28 
     29    This document defines a simple clear-text user/password Simple
     30    Authentication and Security Layer (SASL) mechanism called the PLAIN
     31    mechanism.  The PLAIN mechanism is intended to be used, in
     32    combination with data confidentiality services provided by a lower
     33    layer, in protocols that lack a simple password authentication
     34    command.
     35 
     36 
     37 
     38 
     39 
     40 
     41 
     42 
     43 
     44 
     45 
     46 
     47 
     48 
     49 
     50 
     51 
     52 
     53 
     54 
     55 
     56 
     57 
     58 Zeilenga                    Standards Track                     [Page 1]
     59 
     60 RFC 4616                The PLAIN SASL Mechanism             August 2006
     61 
     62 
     63 1.  Introduction
     64 
     65    Clear-text, multiple-use passwords are simple, interoperate with
     66    almost all existing operating system authentication databases, and
     67    are useful for a smooth transition to a more secure password-based
     68    authentication mechanism.  The drawback is that they are unacceptable
     69    for use over network connections where data confidentiality is not
     70    ensured.
     71 
     72    This document defines the PLAIN Simple Authentication and Security
     73    Layer ([SASL]) mechanism for use in protocols with no clear-text
     74    login command (e.g., [ACAP] or [SMTP-AUTH]).  This document updates
     75    RFC 2595, replacing Section 6.  Changes since RFC 2595 are detailed
     76    in Appendix A.
     77 
     78    The name associated with this mechanism is "PLAIN".
     79 
     80    The PLAIN SASL mechanism does not provide a security layer.
     81 
     82    The PLAIN mechanism should not be used without adequate data security
     83    protection as this mechanism affords no integrity or confidentiality
     84    protections itself.  The mechanism is intended to be used with data
     85    security protections provided by application-layer protocol,
     86    generally through its use of Transport Layer Security ([TLS])
     87    services.
     88 
     89    By default, implementations SHOULD advertise and make use of the
     90    PLAIN mechanism only when adequate data security services are in
     91    place.  Specifications for IETF protocols that indicate that this
     92    mechanism is an applicable authentication mechanism MUST mandate that
     93    implementations support an strong data security service, such as TLS.
     94 
     95    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
     96    "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
     97    document are to be interpreted as described in [Keywords].
     98 
     99 2.  PLAIN SASL Mechanism
    100 
    101    The mechanism consists of a single message, a string of [UTF-8]
    102    encoded [Unicode] characters, from the client to the server.  The
    103    client presents the authorization identity (identity to act as),
    104    followed by a NUL (U+0000) character, followed by the authentication
    105    identity (identity whose password will be used), followed by a NUL
    106    (U+0000) character, followed by the clear-text password.  As with
    107    other SASL mechanisms, the client does not provide an authorization
    108    identity when it wishes the server to derive an identity from the
    109    credentials and use that as the authorization identity.
    110 
    111 
    112 
    113 
    114 Zeilenga                    Standards Track                     [Page 2]
    115 
    116 RFC 4616                The PLAIN SASL Mechanism             August 2006
    117 
    118 
    119    The formal grammar for the client message using Augmented BNF [ABNF]
    120    follows.
    121 
    122    message   = [authzid] UTF8NUL authcid UTF8NUL passwd
    123    authcid   = 1*SAFE ; MUST accept up to 255 octets
    124    authzid   = 1*SAFE ; MUST accept up to 255 octets
    125    passwd    = 1*SAFE ; MUST accept up to 255 octets
    126    UTF8NUL   = %x00 ; UTF-8 encoded NUL character
    127 
    128    SAFE      = UTF1 / UTF2 / UTF3 / UTF4
    129                ;; any UTF-8 encoded Unicode character except NUL
    130 
    131    UTF1      = %x01-7F ;; except NUL
    132    UTF2      = %xC2-DF UTF0
    133    UTF3      = %xE0 %xA0-BF UTF0 / %xE1-EC 2(UTF0) /
    134                %xED %x80-9F UTF0 / %xEE-EF 2(UTF0)
    135    UTF4      = %xF0 %x90-BF 2(UTF0) / %xF1-F3 3(UTF0) /
    136                %xF4 %x80-8F 2(UTF0)
    137    UTF0      = %x80-BF
    138 
    139    The authorization identity (authzid), authentication identity
    140    (authcid), password (passwd), and NUL character deliminators SHALL be
    141    transferred as [UTF-8] encoded strings of [Unicode] characters.  As
    142    the NUL (U+0000) character is used as a deliminator, the NUL (U+0000)
    143    character MUST NOT appear in authzid, authcid, or passwd productions.
    144 
    145    The form of the authzid production is specific to the application-
    146    level protocol's SASL profile [SASL].  The authcid and passwd
    147    productions are form-free.  Use of non-visible characters or
    148    characters that a user may be unable to enter on some keyboards is
    149    discouraged.
    150 
    151    Servers MUST be capable of accepting authzid, authcid, and passwd
    152    productions up to and including 255 octets.  It is noted that the
    153    UTF-8 encoding of a Unicode character may be as long as 4 octets.
    154 
    155    Upon receipt of the message, the server will verify the presented (in
    156    the message) authentication identity (authcid) and password (passwd)
    157    with the system authentication database, and it will verify that the
    158    authentication credentials permit the client to act as the (presented
    159    or derived) authorization identity (authzid).  If both steps succeed,
    160    the user is authenticated.
    161 
    162    The presented authentication identity and password strings, as well
    163    as the database authentication identity and password strings, are to
    164    be prepared before being used in the verification process.  The
    165    [SASLPrep] profile of the [StringPrep] algorithm is the RECOMMENDED
    166    preparation algorithm.  The SASLprep preparation algorithm is
    167 
    168 
    169 
    170 Zeilenga                    Standards Track                     [Page 3]
    171 
    172 RFC 4616                The PLAIN SASL Mechanism             August 2006
    173 
    174 
    175    recommended to improve the likelihood that comparisons behave in an
    176    expected manner.  The SASLprep preparation algorithm is not mandatory
    177    so as to allow the server to employ other preparation algorithms
    178    (including none) when appropriate.  For instance, use of a different
    179    preparation algorithm may be necessary for the server to interoperate
    180    with an external system.
    181 
    182    When preparing the presented strings using [SASLPrep], the presented
    183    strings are to be treated as "query" strings (Section 7 of
    184    [StringPrep]) and hence unassigned code points are allowed to appear
    185    in their prepared output.  When preparing the database strings using
    186    [SASLPrep], the database strings are to be treated as "stored"
    187    strings (Section 7 of [StringPrep]) and hence unassigned code points
    188    are prohibited from appearing in their prepared output.
    189 
    190    Regardless of the preparation algorithm used, if the output of a
    191    non-invertible function (e.g., hash) of the expected string is
    192    stored, the string MUST be prepared before input to that function.
    193 
    194    Regardless of the preparation algorithm used, if preparation fails or
    195    results in an empty string, verification SHALL fail.
    196 
    197    When no authorization identity is provided, the server derives an
    198    authorization identity from the prepared representation of the
    199    provided authentication identity string.  This ensures that the
    200    derivation of different representations of the authentication
    201    identity produces the same authorization identity.
    202 
    203    The server MAY use the credentials to initialize any new
    204    authentication database, such as one suitable for [CRAM-MD5] or
    205    [DIGEST-MD5].
    206 
    207 3.  Pseudo-Code
    208 
    209    This section provides pseudo-code illustrating the verification
    210    process (using hashed passwords and the SASLprep preparation
    211    function) discussed above.  This section is not definitive.
    212 
    213    boolean Verify(string authzid, string authcid, string passwd) {
    214      string pAuthcid = SASLprep(authcid, true); # prepare authcid
    215      string pPasswd = SASLprep(passwd, true);   # prepare passwd
    216      if (pAuthcid == NULL || pPasswd == NULL) {
    217        return false;     # preparation failed
    218      }
    219      if (pAuthcid == "" || pPasswd == "") {
    220        return false;     # empty prepared string
    221      }
    222 
    223 
    224 
    225 
    226 Zeilenga                    Standards Track                     [Page 4]
    227 
    228 RFC 4616                The PLAIN SASL Mechanism             August 2006
    229 
    230 
    231      storedHash = FetchPasswordHash(pAuthcid);
    232      if (storedHash == NULL || storedHash == "") {
    233        return false;     # error or unknown authcid
    234      }
    235 
    236      if (!Compare(storedHash, Hash(pPasswd))) {
    237        return false;     # incorrect password
    238      }
    239 
    240      if (authzid == NULL ) {
    241        authzid = DeriveAuthzid(pAuthcid);
    242        if (authzid == NULL || authzid == "") {
    243            return false; # could not derive authzid
    244        }
    245      }
    246 
    247      if (!Authorize(pAuthcid, authzid)) {
    248        return false;     # not authorized
    249      }
    250 
    251      return true;
    252    }
    253 
    254    The second parameter of the SASLprep function, when true, indicates
    255    that unassigned code points are allowed in the input.  When the
    256    SASLprep function is called to prepare the password prior to
    257    computing the stored hash, the second parameter would be false.
    258 
    259    The second parameter provided to the Authorize function is not
    260    prepared by this code.  The application-level SASL profile should be
    261    consulted to determine what, if any, preparation is necessary.
    262 
    263    Note that the DeriveAuthzid and Authorize functions (whether
    264    implemented as one function or two, whether designed in a manner in
    265    which these functions or whether the mechanism implementation can be
    266    reused elsewhere) require knowledge and understanding of mechanism
    267    and the application-level protocol specification and/or
    268    implementation details to implement.
    269 
    270    Note that the Authorize function outcome is clearly dependent on
    271    details of the local authorization model and policy.  Both functions
    272    may be dependent on other factors as well.
    273 
    274 
    275 
    276 
    277 
    278 
    279 
    280 
    281 
    282 Zeilenga                    Standards Track                     [Page 5]
    283 
    284 RFC 4616                The PLAIN SASL Mechanism             August 2006
    285 
    286 
    287 4.  Examples
    288 
    289    This section provides examples of PLAIN authentication exchanges.
    290    The examples are intended to help the readers understand the above
    291    text.  The examples are not definitive.
    292 
    293    "C:" and "S:" indicate lines sent by the client and server,
    294    respectively.  "<NUL>" represents a single NUL (U+0000) character.
    295    The Application Configuration Access Protocol ([ACAP]) is used in the
    296    examples.
    297 
    298    The first example shows how the PLAIN mechanism might be used for
    299    user authentication.
    300 
    301    S: * ACAP (SASL "CRAM-MD5") (STARTTLS)
    302    C: a001 STARTTLS
    303    S: a001 OK "Begin TLS negotiation now"
    304    <TLS negotiation, further commands are under TLS layer>
    305    S: * ACAP (SASL "CRAM-MD5" "PLAIN")
    306    C: a002 AUTHENTICATE "PLAIN"
    307    S: + ""
    308    C: {21}
    309    C: <NUL>tim<NUL>tanstaaftanstaaf
    310    S: a002 OK "Authenticated"
    311 
    312    The second example shows how the PLAIN mechanism might be used to
    313    attempt to assume the identity of another user.  In this example, the
    314    server rejects the request.  Also, this example makes use of the
    315    protocol optional initial response capability to eliminate a round-
    316    trip.
    317 
    318    S: * ACAP (SASL "CRAM-MD5") (STARTTLS)
    319    C: a001 STARTTLS
    320    S: a001 OK "Begin TLS negotiation now"
    321    <TLS negotiation, further commands are under TLS layer>
    322    S: * ACAP (SASL "CRAM-MD5" "PLAIN")
    323    C: a002 AUTHENTICATE "PLAIN" {20+}
    324    C: Ursel<NUL>Kurt<NUL>xipj3plmq
    325    S: a002 NO "Not authorized to requested authorization identity"
    326 
    327 5.  Security Considerations
    328 
    329    As the PLAIN mechanism itself provided no integrity or
    330    confidentiality protections, it should not be used without adequate
    331    external data security protection, such as TLS services provided by
    332    many application-layer protocols.  By default, implementations SHOULD
    333    NOT advertise and SHOULD NOT make use of the PLAIN mechanism unless
    334    adequate data security services are in place.
    335 
    336 
    337 
    338 Zeilenga                    Standards Track                     [Page 6]
    339 
    340 RFC 4616                The PLAIN SASL Mechanism             August 2006
    341 
    342 
    343    When the PLAIN mechanism is used, the server gains the ability to
    344    impersonate the user to all services with the same password
    345    regardless of any encryption provided by TLS or other confidentiality
    346    protection mechanisms.  Whereas many other authentication mechanisms
    347    have similar weaknesses, stronger SASL mechanisms address this issue.
    348    Clients are encouraged to have an operational mode where all
    349    mechanisms that are likely to reveal the user's password to the
    350    server are disabled.
    351 
    352    General [SASL] security considerations apply to this mechanism.
    353 
    354    Unicode, [UTF-8], and [StringPrep] security considerations also
    355    apply.
    356 
    357 6.  IANA Considerations
    358 
    359    The SASL Mechanism registry [IANA-SASL] entry for the PLAIN mechanism
    360    has been updated by the IANA to reflect that this document now
    361    provides its technical specification.
    362 
    363    To: iana@iana.org
    364    Subject: Updated Registration of SASL mechanism PLAIN
    365 
    366    SASL mechanism name: PLAIN
    367    Security considerations: See RFC 4616.
    368    Published specification (optional, recommended): RFC 4616
    369    Person & email address to contact for further information:
    370         Kurt Zeilenga <kurt@openldap.org>
    371         IETF SASL WG <ietf-sasl@imc.org>
    372    Intended usage: COMMON
    373    Author/Change controller: IESG <iesg@ietf.org>
    374    Note: Updates existing entry for PLAIN
    375 
    376 7.  Acknowledgements
    377 
    378    This document is a revision of RFC 2595 by Chris Newman.  Portions of
    379    the grammar defined in Section 2 were borrowed from [UTF-8] by
    380    Francois Yergeau.
    381 
    382    This document is a product of the IETF Simple Authentication and
    383    Security Layer (SASL) Working Group.
    384 
    385 
    386 
    387 
    388 
    389 
    390 
    391 
    392 
    393 
    394 Zeilenga                    Standards Track                     [Page 7]
    395 
    396 RFC 4616                The PLAIN SASL Mechanism             August 2006
    397 
    398 
    399 8.  Normative References
    400 
    401    [ABNF]        Crocker, D., Ed. and P. Overell, "Augmented BNF for
    402                  Syntax Specifications: ABNF", RFC 4234, October 2005.
    403 
    404    [Keywords]    Bradner, S., "Key words for use in RFCs to Indicate
    405                  Requirement Levels", BCP 14, RFC 2119, March 1997.
    406 
    407    [SASL]        Melnikov, A., Ed., and K. Zeilenga, Ed., "Simple
    408                  Authentication and Security Layer (SASL)", RFC 4422,
    409                  June 2006.
    410 
    411    [SASLPrep]    Zeilenga, K., "SASLprep: Stringprep Profile for User
    412                  Names and Passwords", RFC 4013, February 2005.
    413 
    414    [StringPrep]  Hoffman, P. and M. Blanchet, "Preparation of
    415                  Internationalized Strings ("stringprep")", RFC 3454,
    416                  December 2002.
    417 
    418    [Unicode]     The Unicode Consortium, "The Unicode Standard, Version
    419                  3.2.0" is defined by "The Unicode Standard, Version
    420                  3.0" (Reading, MA, Addison-Wesley, 2000. ISBN 0-201-
    421                  61633-5), as amended by the "Unicode Standard Annex
    422                  #27: Unicode 3.1"
    423                  (http://www.unicode.org/reports/tr27/) and by the
    424                  "Unicode Standard Annex #28: Unicode 3.2"
    425                  (http://www.unicode.org/reports/tr28/).
    426 
    427    [UTF-8]       Yergeau, F., "UTF-8, a transformation format of ISO
    428                  10646", STD 63, RFC 3629, November 2003.
    429 
    430    [TLS]         Dierks, T. and E. Rescorla, "The Transport Layer
    431                  Security (TLS) Protocol Version 1.1", RFC 4346, April
    432                  2006.
    433 
    434 9.  Informative References
    435 
    436    [ACAP]        Newman, C. and J. Myers, "ACAP -- Application
    437                  Configuration Access Protocol", RFC 2244, November
    438                  1997.
    439 
    440    [CRAM-MD5]    Nerenberg, L., Ed., "The CRAM-MD5 SASL Mechanism", Work
    441                  in Progress, June 2006.
    442 
    443    [DIGEST-MD5]  Melnikov, A., Ed., "Using Digest Authentication as a
    444                  SASL Mechanism", Work in Progress, June 2006.
    445 
    446 
    447 
    448 
    449 
    450 Zeilenga                    Standards Track                     [Page 8]
    451 
    452 RFC 4616                The PLAIN SASL Mechanism             August 2006
    453 
    454 
    455    [IANA-SASL]   IANA, "SIMPLE AUTHENTICATION AND SECURITY LAYER (SASL)
    456                  MECHANISMS",
    457                  <http://www.iana.org/assignments/sasl-mechanisms>.
    458 
    459    [SMTP-AUTH]   Myers, J., "SMTP Service Extension for Authentication",
    460                  RFC 2554, March 1999.
    461 
    462 
    463 
    464 
    465 
    466 
    467 
    468 
    469 
    470 
    471 
    472 
    473 
    474 
    475 
    476 
    477 
    478 
    479 
    480 
    481 
    482 
    483 
    484 
    485 
    486 
    487 
    488 
    489 
    490 
    491 
    492 
    493 
    494 
    495 
    496 
    497 
    498 
    499 
    500 
    501 
    502 
    503 
    504 
    505 
    506 Zeilenga                    Standards Track                     [Page 9]
    507 
    508 RFC 4616                The PLAIN SASL Mechanism             August 2006
    509 
    510 
    511 Appendix A.  Changes since RFC 2595
    512 
    513    This appendix is non-normative.
    514 
    515    This document replaces Section 6 of RFC 2595.
    516 
    517    The specification details how the server is to compare client-
    518    provided character strings with stored character strings.
    519 
    520    The ABNF grammar was updated.  In particular, the grammar now allows
    521    LINE FEED (U+000A) and CARRIAGE RETURN (U+000D) characters in the
    522    authzid, authcid, passwd productions.  However, whether these control
    523    characters may be used depends on the string preparation rules
    524    applicable to the production.  For passwd and authcid productions,
    525    control characters are prohibited.  For authzid, one must consult the
    526    application-level SASL profile.  This change allows PLAIN to carry
    527    all possible authorization identity strings allowed in SASL.
    528 
    529    Pseudo-code was added.
    530 
    531    The example section was expanded to illustrate more features of the
    532    PLAIN mechanism.
    533 
    534 Editor's Address
    535 
    536    Kurt D. Zeilenga
    537    OpenLDAP Foundation
    538 
    539    EMail: Kurt@OpenLDAP.org
    540 
    541 
    542 
    543 
    544 
    545 
    546 
    547 
    548 
    549 
    550 
    551 
    552 
    553 
    554 
    555 
    556 
    557 
    558 
    559 
    560 
    561 
    562 Zeilenga                    Standards Track                    [Page 10]
    563 
    564 RFC 4616                The PLAIN SASL Mechanism             August 2006
    565 
    566 
    567 Full Copyright Statement
    568 
    569    Copyright (C) The Internet Society (2006).
    570 
    571    This document is subject to the rights, licenses and restrictions
    572    contained in BCP 78, and except as set forth therein, the authors
    573    retain all their rights.
    574 
    575    This document and the information contained herein are provided on an
    576    "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
    577    OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
    578    ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
    579    INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
    580    INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
    581    WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
    582 
    583 Intellectual Property
    584 
    585    The IETF takes no position regarding the validity or scope of any
    586    Intellectual Property Rights or other rights that might be claimed to
    587    pertain to the implementation or use of the technology described in
    588    this document or the extent to which any license under such rights
    589    might or might not be available; nor does it represent that it has
    590    made any independent effort to identify any such rights.  Information
    591    on the procedures with respect to rights in RFC documents can be
    592    found in BCP 78 and BCP 79.
    593 
    594    Copies of IPR disclosures made to the IETF Secretariat and any
    595    assurances of licenses to be made available, or the result of an
    596    attempt made to obtain a general license or permission for the use of
    597    such proprietary rights by implementers or users of this
    598    specification can be obtained from the IETF on-line IPR repository at
    599    http://www.ietf.org/ipr.
    600 
    601    The IETF invites any interested party to bring to its attention any
    602    copyrights, patents or patent applications, or other proprietary
    603    rights that may cover technology that may be required to implement
    604    this standard.  Please address the information to the IETF at
    605    ietf-ipr@ietf.org.
    606 
    607 Acknowledgement
    608 
    609    Funding for the RFC Editor function is provided by the IETF
    610    Administrative Support Activity (IASA).
    611 
    612 
    613 
    614 
    615 
    616 
    617 
    618 Zeilenga                    Standards Track                    [Page 11]
    619