7 Network Working Group Abhijit Menon-Sen
\r
8 Internet-Draft Oryx Mail Systems GmbH
\r
9 Intended Status: Proposed Standard Chris Newman
\r
10 Expires: August 2009 Sun Microsystems
\r
16 Salted Challenge Response (SCRAM) SASL Mechanism
\r
18 draft-newman-auth-scram-09.txt
\r
23 This Internet-Draft is submitted to IETF in full conformance with
\r
24 the provisions of BCP 78 and BCP 79.
\r
26 Internet-Drafts are working documents of the Internet Engineering
\r
27 Task Force (IETF), its areas, and its working groups. Note that
\r
28 other groups may also distribute working documents as Internet-
\r
31 Internet-Drafts are draft documents valid for a maximum of six
\r
32 months and may be updated, replaced, or obsoleted by other documents
\r
33 at any time. It is inappropriate to use Internet-Drafts as reference
\r
34 material or to cite them other than as "work in progress."
\r
36 The list of current Internet-Drafts can be accessed at
\r
37 http://www.ietf.org/ietf/1id-abstracts.txt. The list of Internet-
\r
38 Draft Shadow Directories can be accessed at
\r
39 http://www.ietf.org/shadow.html.
\r
41 This Internet-Draft expires in July 2009.
\r
46 Copyright (c) 2009 IETF Trust and the persons identified as the
\r
47 document authors. All rights reserved.
\r
49 This document is subject to BCP 78 and the IETF Trust's Legal
\r
50 Provisions Relating to IETF Documents
\r
51 (http://trustee.ietf.org/license-info) in effect on the date of
\r
52 publication of this document. Please review these documents
\r
53 carefully, as they describe your rights and restrictions with
\r
54 respect to this document.
\r
58 Menon-Sen & Co Expires August 2009 FF[Page 1]
\r
64 Internet-draft February 2009
\r
69 The secure authentication mechanism most widely deployed and used by
\r
70 Internet application protocols is the transmission of clear-text
\r
71 passwords over a channel protected by Transport Layer Security
\r
72 (TLS). There are some significant security concerns with that
\r
73 mechanism, which could be addressed by the use of a challenge
\r
74 response authentication mechanism protected by TLS. Unfortunately,
\r
75 the challenge response mechanisms presently on the standards track
\r
76 all fail to meet requirements necessary for widespread deployment,
\r
77 and have had success only in limited use.
\r
79 This specification describes a family of authentication mechanisms
\r
80 called the Salted Challenge Response Authentication Mechanism
\r
81 (SCRAM), which addresses the security concerns and meets the
\r
82 deployability requirements. When used in combination with TLS or an
\r
83 equivalent security layer, a mechanism from this family could
\r
84 improve the status-quo for application protocol authentication and
\r
85 provide a suitable choice for a mandatory-to-implement mechanism for
\r
86 future application protocol standards.
\r
89 1. Conventions Used in This Document
\r
91 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
\r
92 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
\r
93 document are to be interpreted as described in [RFC2119].
\r
95 Formal syntax is defined by [RFC5234] including the core rules
\r
96 defined in Appendix B of [RFC5234].
\r
98 Example lines prefaced by "C:" are sent by the client and ones
\r
99 prefaced by "S:" by the server. If a single "C:" or "S:" label
\r
100 applies to multiple lines, then the line breaks between those lines
\r
101 are for editorial clarity only, and are not part of the actual
\r
107 This document uses several terms defined in [RFC4949] ("Internet
\r
108 Security Glossary") including the following: authentication,
\r
109 authentication exchange, authentication information, brute force,
\r
110 challenge-response, cryptographic hash function, dictionary attack,
\r
111 eavesdropping, hash result, keyed hash, man-in-the-middle, nonce,
\r
112 one-way encryption function, password, replay attack and salt.
\r
113 Readers not familiar with these terms should use that glossary as a
\r
118 Menon-Sen & Co Expires August 2009 FF[Page 2]
\r
124 Internet-draft February 2009
\r
127 Some clarifications and additional definitions follow:
\r
129 - Authentication information: Information used to verify an identity
\r
130 claimed by a SCRAM client. The authentication information for a
\r
131 SCRAM identity consists of salt, iteration count, the "StoredKey"
\r
132 and "ServerKey" (as defined in the algorithm overview) for each
\r
133 supported cryptographic hash function.
\r
135 - Authentication database: The database used to look up the
\r
136 authentication information associated with a particular identity.
\r
137 For application protocols, LDAPv3 (see [RFC4510]) is frequently
\r
138 used as the authentication database. For network-level protocols
\r
139 such as PPP or 802.11x, the use of RADIUS is more common.
\r
141 - Base64: An encoding mechanism defined in [RFC4648] which converts
\r
142 an octet string input to a textual output string which can be
\r
143 easily displayed to a human. The use of base64 in SCRAM is
\r
144 restricted to the canonical form with no whitespace.
\r
146 - Octet: An 8-bit byte.
\r
148 - Octet string: A sequence of 8-bit bytes.
\r
150 - Salt: A random octet string that is combined with a password
\r
151 before applying a one-way encryption function. This value is used
\r
152 to protect passwords that are stored in an authentication
\r
158 The pseudocode description of the algorithm uses the following
\r
161 - ":=": The variable on the left hand side represents the octet
\r
162 string resulting from the expression on the right hand side.
\r
164 - "+": Octet string concatenation.
\r
166 - "[ ]": A portion of an expression enclosed in "[" and "]" may not
\r
167 be included in the result under some circumstances. See the
\r
168 associated text for a description of those circumstances.
\r
170 - HMAC(key, str): Apply the HMAC keyed hash algorithm (defined in
\r
171 [RFC2104]) using the octet string represented by "key" as the key
\r
172 and the octet string "str" as the input string. The size of the
\r
173 result is the hash result size for the hash function in use. For
\r
174 example, it is 20 octets for SHA-1 (see [RFC3174]).
\r
178 Menon-Sen & Co Expires August 2009 FF[Page 3]
\r
184 Internet-draft February 2009
\r
187 - H(str): Apply the cryptographic hash function to the octet string
\r
188 "str", producing an octet string as a result. The size of the
\r
189 result depends on the hash result size for the hash function in
\r
192 - XOR: Apply the exclusive-or operation to combine the octet string
\r
193 on the left of this operator with the octet string on the right of
\r
194 this operator. The length of the output and each of the two inputs
\r
195 will be the same for this use.
\r
199 U0 := HMAC(str, salt || INT(1))
\r
200 U1 := HMAC(str, U0)
\r
201 U2 := HMAC(str, U1)
\r
203 Ui-1 := HMAC(str, Ui-2)
\r
204 Ui := HMAC(str, Ui-1)
\r
206 Hi := U0 XOR U1 XOR U2 XOR ... XOR Ui
\r
207 where "i" is the iteration count, "||" is the string concatenation
\r
208 operator and INT(g) is a four-octet encoding of the integer g,
\r
209 most significant octet first.
\r
211 This is, essentially, PBKDF2 [RFC2898] with HMAC() as the PRF and
\r
212 with dkLen == output length of HMAC() == output length of H().
\r
218 This specification describes a family of authentication mechanisms
\r
219 called the Salted Challenge Response Authentication Mechanism
\r
220 (SCRAM) which addresses the requirements necessary to deploy a
\r
221 challenge-response mechanism more widely than past attempts. When
\r
222 used in combination with Transport Layer Security (TLS, see [TLS])
\r
223 or an equivalent security layer, a mechanism from this family could
\r
224 improve the status-quo for application protocol authentication and
\r
225 provide a suitable choice for a mandatory-to-implement mechanism for
\r
226 future application protocol standards.
\r
228 For simplicity, this family of mechanism does not presently include
\r
229 negotiation of a security layer. It is intended to be used with an
\r
230 external security layer such as that provided by TLS or SSH.
\r
232 SCRAM provides the following protocol features:
\r
234 - The authentication information stored in the authentication
\r
238 Menon-Sen & Co Expires August 2009 FF[Page 4]
\r
244 Internet-draft February 2009
\r
247 database is not sufficient by itself to impersonate the client.
\r
248 The information is salted to prevent a pre-stored dictionary
\r
249 attack if the database is stolen.
\r
251 - The server does not gain the ability to impersonate the client to
\r
252 other servers (with an exception for server-authorized proxies).
\r
254 - The mechanism permits the use of a server-authorized proxy without
\r
255 requiring that proxy to have super-user rights with the back-end
\r
258 - A standard attribute is defined to enable storage of the
\r
259 authentication information in LDAPv3 (see [RFC4510]).
\r
261 - Both the client and server can be authenticated by the protocol.
\r
263 For an in-depth discussion of why other challenge response
\r
264 mechanisms are not considered sufficient, see appendix A. For more
\r
265 information about the motivations behind the design of this
\r
266 mechanism, see appendix B.
\r
268 Comments regarding this draft may be sent either to the ietf-
\r
269 sasl@imc.org mailing list or to the authors.
\r
272 3. SCRAM Algorithm Overview
\r
274 Note that this section omits some details, such as client and server
\r
275 nonces. See Section 5 for more details.
\r
277 To begin with, the client is in possession of a username and
\r
278 password. It sends the username to the server, which retrieves the
\r
279 corresponding authentication information, i.e. a salt, StoredKey,
\r
280 ServerKey and the iteration count i. (Note that a server
\r
281 implementation may chose to use the same iteration count for all
\r
282 account.) The server sends the salt and the iteration count to the
\r
283 client, which then computes the following values and sends a
\r
284 ClientProof to the server:
\r
286 SaltedPassword := Hi(password, salt)
\r
287 ClientKey := H(SaltedPassword)
\r
288 StoredKey := H(ClientKey)
\r
289 AuthMessage := client-first-message + "," +
\r
290 server-first-message + "," +
\r
291 final-client-message-without-proof
\r
292 ClientSignature := HMAC(StoredKey, AuthMessage)
\r
293 ClientProof := ClientKey XOR ClientSignature
\r
294 ServerKey := HMAC(SaltedPassword, salt)
\r
298 Menon-Sen & Co Expires August 2009 FF[Page 5]
\r
304 Internet-draft February 2009
\r
307 ServerSignature := HMAC(ServerKey, AuthMessage)
\r
309 The server authenticates the client by computing the
\r
310 ClientSignature, exclusive-ORing that with the ClientProof to
\r
311 recover the ClientKey and verifying the correctness of the ClientKey
\r
312 by applying the hash function and comparing the result to the
\r
313 StoredKey. If the ClientKey is correct, this proves that the client
\r
314 has access to the user's password.
\r
316 Similarly, the client authenticates the server by computing the
\r
317 ServerSignature and comparing it to the value sent by the server.
\r
318 If the two are equal, it proves that the server had access to the
\r
321 The AuthMessage is computed by concatenating messages from the
\r
322 authentication exchange. The format of these messages is defined in
\r
323 the Formal Syntax section.
\r
326 4. SCRAM mechanism names
\r
328 A SCRAM mechanism name is a string "SCRAM-HMAC-" followed by the
\r
329 uppercased name of the underlying hashed function taken from the
\r
330 IANA "Hash Function Textual Names" registry (see
\r
331 http://www.iana.org).
\r
333 For interoperability, all SCRAM clients and servers MUST implement
\r
334 the SCRAM-HMAC-SHA-1 authentication mechanism, i.e. an
\r
335 authentication mechanism from the SCRAM family that uses the SHA-1
\r
336 hash function as defined in [RFC3174].
\r
339 5. SCRAM Authentication Exchange
\r
341 SCRAM is a text protocol where the client and server exchange
\r
342 messages containing one or more attribute-value pairs separated by
\r
343 commas. Each attribute has a one-letter name. The messages and their
\r
344 attributes are described in section 5.1, and defined in the Formal
\r
347 This is a simple example of a SCRAM-HMAC-SHA-1 authentication
\r
349 C: n=Chris Newman,r=ClientNonce
\r
350 S: r=ClientNonceServerNonce,s=PxR/wv+epq,i=128
\r
351 C: r=ClientNonceServerNonce,p=WxPv/siO5l+qxN4
\r
352 S: v=WxPv/siO5l+qxN4
\r
354 With channel-binding data sent by the client this might look like this:
\r
358 Menon-Sen & Co Expires August 2009 FF[Page 6]
\r
364 Internet-draft February 2009
\r
367 C: n=Chris Newman,r=ClientNonce
\r
368 S: r=ClientNonceServerNonce,s=PxR/wv+epq,i=128
\r
369 C: c=0123456789ABCDEF,r=ClientNonceServerNonce,p=WxPv/siO5l+qxN4
\r
370 S: v=WxPv/siO5l+qxN4
\r
372 <<Note that the channel-bind data above, as well as all hashes are fake>>
\r
374 First, the client sends a message containing the username, and a
\r
375 random, unique nonce. In response, the server sends the user's
\r
376 iteration count i, the user's salt, and appends its own nonce to the
\r
377 client-specified one. The client then responds with the same nonce
\r
378 and a ClientProof computed using the selected hash function as
\r
379 explained earlier. In this step the client can also include an
\r
380 optional authorization identity. The server verifies the nonce and
\r
381 the proof, verifies that the authorization identity (if supplied by
\r
382 the client in the second message) is authorized to act as the
\r
383 authentication identity, and, finally, it responds with a
\r
384 ServerSignature, concluding the authentication exchange. The client
\r
385 then authenticates the server by computing the ServerSignature and
\r
386 comparing it to the value sent by the server. If the two are
\r
387 different, the client MUST consider the authentication exchange to
\r
388 be unsuccessful and it might have to drop the connection.
\r
391 5.1 SCRAM attributes
\r
393 This section describes the permissible attributes, their use, and
\r
394 the format of their values. All attribute names are single US-ASCII
\r
395 letters and are case-sensitive.
\r
397 - a: This optional attribute specifies an authorization identity. A
\r
398 client may include it in its second message to the server if it
\r
399 wants to authenticate as one user, but subsequently act as a
\r
400 different user. This is typically used by an administrator to
\r
401 perform some management task on behalf of another user, or by a
\r
402 proxy in some situations.
\r
404 Upon the receipt of this value the server verifies its correctness
\r
405 according to the used SASL protocol profile. Failed verification
\r
406 results in failed authentication exchange.
\r
408 If this attribute is omitted (as it normally would be), or
\r
409 specified with an empty value, the authorization identity is
\r
410 assumed to be derived from the username specified with the
\r
411 (required) "n" attribute.
\r
413 The server always authenticates the user specified by the "n"
\r
414 attribute. If the "a" attribute specifies a different user, the
\r
418 Menon-Sen & Co Expires August 2009 FF[Page 7]
\r
424 Internet-draft February 2009
\r
427 server associates that identity with the connection after
\r
428 successful authentication and authorization checks.
\r
430 The syntax of this field is the same as that of the "n" field with
\r
431 respect to quoting of '=' and ','.
\r
433 - n: This attribute specifies the name of the user whose password is
\r
434 used for authentication. A client must include it in its first
\r
435 message to the server. If the "a" attribute is not specified
\r
436 (which would normally be the case), this username is also the
\r
437 identity which will be associated with the connection subsequent
\r
438 to authentication and authorization.
\r
440 Before sending the username to the server, the client MUST prepare
\r
441 the username using the "SASLPrep" profile [SASLPrep] of the
\r
442 "stringprep" algorithm [RFC3454]. If the preparation of the
\r
443 username fails or results in an empty string, the client SHOULD
\r
444 abort the authentication exchange (*).
\r
446 (*) An interactive client can request a repeated entry of the
\r
449 Upon receipt of the username by the server, the server SHOULD
\r
450 prepare it using the "SASLPrep" profile [SASLPrep] of the
\r
451 "stringprep" algorithm [RFC3454]. If the preparation of the
\r
452 username fails or results in an empty string, the server SHOULD
\r
453 abort the authentication exchange.
\r
455 The characters ',' or '=' in usernames are sent as '=2C' and '=3D'
\r
456 respectively. If the server receives a username which contains '='
\r
457 not followed by either '2C' or '3D', then the server MUST fail the
\r
460 - m: This attribute is reserved for future extensibility. In this
\r
461 version of SCRAM, its presence in a client or a server message
\r
462 MUST cause authentication failure when the attribute is parsed by
\r
465 - r: This attribute specifies a sequence of random printable
\r
466 characters excluding ',' which forms the nonce used as input to
\r
467 the hash function. No quoting is applied to this string (unless
\r
468 the binding of SCRAM to a particular protocol states otherwise).
\r
469 As described earlier, the client supplies an initial value in its
\r
470 first message, and the server augments that value with its own
\r
471 nonce in its first response. It is important that this be value
\r
472 different for each authentication. The client MUST verify that the
\r
473 initial part of the nonce used in subsequent messages is the same
\r
474 as the nonce it initially specified. The server MUST verify that
\r
478 Menon-Sen & Co Expires August 2009 FF[Page 8]
\r
484 Internet-draft February 2009
\r
487 the nonce sent by the client in the second message is the same as
\r
488 the one sent by the server in its first message.
\r
490 - c: This optional attribute specifies base64-encoded channel-
\r
491 binding data. It is sent by the client in the second step. If
\r
492 specified by the client, if the server supports the specified
\r
493 channel binding type and if the server can't verify it, then the
\r
494 server MUST fail the authentication exchange. Whether this
\r
495 attribute is included, and the meaning and contents of the
\r
496 channel-binding data depends on the external security layer in
\r
497 use. This is necessary to detect a man-in-the-middle attack on the
\r
500 - s: This attribute specifies the base64-encoded salt used by the
\r
501 server for this user. It is sent by the server in its first
\r
502 message to the client.
\r
504 - i: This attribute specifies an iteration count for the selected
\r
505 hash function and user, and must be sent by the server along with
\r
508 For SCRAM-HMAC-SHA-1 SASL mechanism servers SHOULD announce a hash
\r
509 iteration-count of at least 128.
\r
511 - p: This attribute specifies a base64-encoded ClientProof. The
\r
512 client computes this value as described in the overview and sends
\r
515 - v: This attribute specifies a base64-encoded ServerSignature. It
\r
516 is sent by the server in its final message, and may be used by the
\r
517 client to verify that the server has access to the user's
\r
518 authentication information. This value is computed as explained in
\r
524 The following syntax specification uses the Augmented Backus-Naur
\r
525 Form (ABNF) notation as specified in [RFC5234]. "UTF8-2", "UTF8-3"
\r
526 and "UTF8-4" non-terminal are defined in [UTF-8].
\r
528 generic-message = attr-val *("," attr-val)
\r
529 ;; Generic syntax of any server challenge
\r
530 ;; or client response
\r
532 attr-val = ALPHA "=" value
\r
534 value = *(value-char)
\r
538 Menon-Sen & Co Expires August 2009 FF[Page 9]
\r
544 Internet-draft February 2009
\r
547 value-safe-char = %01-2B / %2D-3C / %3E-7F /
\r
548 UTF8-2 / UTF-3 / UTF8-4
\r
549 ;; UTF8-char except NUL, "=", and ",".
\r
551 value-char = value-safe-char / "="
\r
553 base64-char = ALPHA / DIGIT / "/" / "+"
\r
555 base64-4 = 4*4(base64-char)
\r
557 base64-3 = 3*3(base64-char) "="
\r
559 base64-2 = 2*2(base64-char) "=="
\r
561 base64 = *(base64-4) [base64-3 / base64-2]
\r
563 posit-number = (%x31-39) *DIGIT
\r
564 ;; A positive number
\r
566 saslname = 1*(value-safe-char / "=2C" / "=3D")
\r
567 ;; Conforms to <value>
\r
569 authzid = "a=" saslname
\r
570 ;; Protocol specific.
\r
572 username = "n=" saslname
\r
573 ;; Usernames are prepared using SASLPrep.
\r
575 reserved-mext = "m=" 1*(value-char)
\r
576 ;; Reserved for signalling mandatory extensions.
\r
577 ;; The exact syntax will be defined in
\r
580 channel-binding = "c=" base64
\r
582 proof = "p=" base64
\r
584 nonce = "r=" c-nonce [s-nonce]
\r
585 ;; Second part provided by server.
\r
593 verifier = "v=" base64
\r
594 ;; base-64 encoded ServerSignature.
\r
598 Menon-Sen & Co Expires August 2009 FF[Page 10]
\r
604 Internet-draft February 2009
\r
607 iteration-count = "i=" posit-number
\r
608 ;; A positive number
\r
610 client-first-message =
\r
611 [reserved-mext ","] username "," nonce [","
\r
614 server-first-message =
\r
615 [reserved-mext ","] nonce "," salt ","
\r
616 iteration-count ["," extensions]
\r
618 client-final-message-without-proof =
\r
619 [authzid ","] [channel-binding ","] nonce [","
\r
622 client-final-message =
\r
623 client-final-message-without-proof "," proof
\r
625 server-final-message =
\r
626 verifier ["," extensions]
\r
628 extensions = attr-val *("," attr-val)
\r
629 ;; All extensions are optional,
\r
630 ;; i.e. unrecognized attributes
\r
631 ;; not defined in this document
\r
632 ;; MUST be ignored.
\r
635 7. Security Considerations
\r
637 If the authentication exchange is performed without a strong
\r
638 security layer, then a passive eavesdropper can gain sufficient
\r
639 information to mount an offline dictionary or brute-force attack
\r
640 which can be used to recover the user's password. The amount of time
\r
641 necessary for this attack depends on the cryptographic hash function
\r
642 selected, the strength of the password and the iteration count
\r
643 supplied by the server. An external security layer with strong
\r
644 encryption will prevent this attack.
\r
646 If the external security layer used to protect the SCRAM exchange
\r
647 uses an anonymous key exchange, then the SCRAM channel binding
\r
648 mechanism can be used to detect a man-in-the-middle attack on the
\r
649 security layer and cause the authentication to fail as a result.
\r
650 However, the man-in-the-middle attacker will have gained sufficient
\r
651 information to mount an offline dictionary or brute-force attack.
\r
652 For this reason, SCRAM includes the ability to increase the
\r
653 iteration count over time.
\r
658 Menon-Sen & Co Expires August 2009 FF[Page 11]
\r
664 Internet-draft February 2009
\r
667 If the authentication information is stolen from the authentication
\r
668 database, then an offline dictionary or brute-force attack can be
\r
669 used to recover the user's password. The use of salt mitigates this
\r
670 attack somewhat by requiring a separate attack on each password.
\r
671 Authentication mechanisms which protect against this attack are
\r
672 available (e.g., the EKE class of mechanisms), but the patent
\r
673 situation is presently unclear.
\r
675 If an attacker obtains the authentication information from the
\r
676 authentication repository and either eavesdrops on one
\r
677 authentication exchange or impersonates a server, the attacker gains
\r
678 the ability to impersonate that user to all servers providing SCRAM
\r
679 access using the same hash function, password, iteration count and
\r
680 salt. For this reason, it is important to use randomly-generated
\r
683 If the server detects (from the value of the client-specified "h"
\r
684 attribute) that both endpoints support a stronger hash function that
\r
685 the one the client actually chooses to use, then it SHOULD treat
\r
686 this as a downgrade attack and reject the authentication attempt.
\r
688 A hostile server can perform a computational denial-of-service
\r
689 attack on clients by sending a big iteration count value.
\r
718 Menon-Sen & Co Expires August 2009 FF[Page 12]
\r
724 Internet-draft February 2009
\r
727 8. IANA considerations
\r
729 IANA is requested to add the following entry to the SASL Mechanism
\r
730 registry established by [RFC4422]:
\r
733 Subject: Registration of a new SASL mechanism SCRAM-HMAC-SHA-1
\r
735 SASL mechanism name (or prefix for the family): SCRAM-HMAC-SHA-1
\r
736 Security considerations: Section 7 of [RFCXXXX]
\r
737 Published specification (optional, recommended): [RFCXXXX]
\r
738 Person & email address to contact for further information:
\r
739 IETF SASL WG <ietf-sasl@imc.org>
\r
740 Intended usage: COMMON
\r
741 Owner/Change controller: IESG <iesg@ietf.org>
\r
744 Note that even though this document defines a family of SCRAM-HMAC
\r
745 mechanisms, it doesn't register a family of SCRAM-HMAC mechanisms in
\r
746 the SASL Mechanisms registry. IANA is requested to prevent future
\r
747 registrations of SASL mechanisms starting with SCRAM-HMAC- without
\r
748 consulting the SASL mailing list <ietf-sasl@imc.org> first.
\r
750 Note to future SCRAM-HMAC mechanism designers: each new SCRAM-HMAC
\r
751 SASL mechanism MUST be explicitly registered with IANA and MUST
\r
752 comply with SCRAM-HMAC mechanism naming convention defined in
\r
753 Section 4 of this document.
\r
759 The authors would like to thank Dave Cridland for his contributions
\r
763 10. Normative References
\r
765 [RFC4648] Josefsson, "The Base16, Base32, and Base64 Data
\r
766 Encodings", RFC 4648, SJD, October 2006.
\r
768 [UTF-8] Yergeau, F., "UTF-8, a transformation format of ISO
\r
769 10646", STD 63, RFC 3629, November 2003.
\r
771 [RFC2104] Krawczyk, Bellare, Canetti, "HMAC: Keyed-Hashing for
\r
772 Message Authentication", IBM, February 1997.
\r
774 [RFC2119] Bradner, "Key words for use in RFCs to Indicate
\r
778 Menon-Sen & Co Expires August 2009 FF[Page 13]
\r
784 Internet-draft February 2009
\r
787 Requirement Levels", RFC 2119, Harvard University, March
\r
790 [RFC3174] Eastlake, Jones, "US Secure Hash Algorithm 1 (SHA1)", RFC
\r
791 3174, Motorola, September 2001
\r
793 [RFC5234] Crocker, Overell, "Augmented BNF for Syntax
\r
794 Specifications: ABNF", RFC 5234, January 2008.
\r
796 [RFC4422] Melnikov, Zeilenga, "Simple Authentication and Security
\r
797 Layer (SASL)", RFC 4422, Isode Limited, June 2006.
\r
799 [SASLPrep] Zeilenga, K., "SASLprep: Stringprep profile for user
\r
800 names and passwords", RFC 4013, February 2005.
\r
802 [RFC3454] Hoffman, P., Blanchet, M., "Preparation of
\r
803 Internationalized Strings ("stringprep")", RFC 3454,
\r
808 11. Informative References
\r
810 [RFC2195] Klensin, Catoe, Krumviede, "IMAP/POP AUTHorize Extension
\r
811 for Simple Challenge/Response", RFC 2195, MCI, September
\r
814 [RFC2202] Cheng, Glenn, "Test Cases for HMAC-MD5 and HMAC-SHA-1",
\r
815 RFC 2202, IBM, September 1997
\r
817 [RFC2898] Kaliski, B., "PKCS #5: Password-Based Cryptography
\r
818 Specification Version 2.0", RFC 2898, September 2000.
\r
820 [TLS] Dierks, Rescorla, "The Transport Layer Security (TLS)
\r
821 Protocol, Version 1.2", RFC 5246, August 2008.
\r
823 [RFC4949] Shirey, "Internet Security Glossary, Version 2", RFC
\r
824 4949, FYI 0036, August 2007.
\r
826 [RFC4086] Eastlake, Schiller, Crocker, "Randomness Requirements for
\r
827 Security", RFC 4086, BCP 0106, Motorola Laboratories,
\r
830 [RFC4510] Zeilenga, "Lightweight Directory Access Protocol (LDAP):
\r
831 Technical Specification Road Map", RFC 4510, June 2006.
\r
833 [DIGEST-MD5] Leach, P. and C. Newman , "Using Digest Authentication
\r
834 as a SASL Mechanism", RFC 2831, May 2000. <<Also draft-
\r
838 Menon-Sen & Co Expires August 2009 FF[Page 14]
\r
844 Internet-draft February 2009
\r
847 ietf-sasl-rfc2831bis-12.txt>>
\r
849 [DIGEST-HISTORIC] Melnikov, "Moving DIGEST-MD5 to Historic", work in
\r
850 progress, draft-ietf-sasl-digest-to-historic-00.txt, July
\r
853 [CRAM-HISTORIC] Zeilenga, "CRAM-MD5 to Historic", work in progress,
\r
854 draft-ietf-sasl-crammd5-to-historic-00.txt, November
\r
857 [PLAIN] Zeilenga, "The PLAIN Simple Authentication and Security
\r
858 Layer (SASL) Mechanism" RFC 4616, August 2006.
\r
861 12. Authors' Addresses
\r
864 Oryx Mail Systems GmbH
\r
866 Email: ams@oryx.com
\r
872 EMail: Alexey.Melnikov@isode.com
\r
878 West Covina, CA 91790
\r
881 Email: chris.newman@sun.com
\r
884 Appendix A: Other Authentication Mechanisms
\r
886 The DIGEST-MD5 [DIGEST-MD5] mechanism has proved to be too complex
\r
887 to implement and test, and thus has poor interoperability. The
\r
888 security layer is often not implemented, and almost never used;
\r
889 everyone uses TLS instead. For a more complete list of problems
\r
890 with DIGEST-MD5 which lead to the creation of SCRAM see [DIGEST-
\r
893 The CRAM-MD5 SASL mechanism, while widely deployed has also some
\r
894 problems, in particular it is missing some modern SASL features such
\r
898 Menon-Sen & Co Expires August 2009 FF[Page 15]
\r
904 Internet-draft February 2009
\r
907 as support for internationalized usernames and passwords, support
\r
908 for passing of authorization identity, support for channel bindings.
\r
909 It also doesn't support server authentication. For a more complete
\r
910 list of problems with CRAM-MD5 see [CRAM-HISTORIC].
\r
912 The PLAIN [PLAIN] SASL mechanism allows a malicious server or
\r
913 eavesdropper to impersonate the authenticating user to any other
\r
914 server for which the user has the same password. It also sends the
\r
915 password in the clear over the network, unless TLS is used. Server
\r
916 authentication is not supported.
\r
919 Appendix B: Design Motivations
\r
921 The following design goals shaped this document. Note that some of
\r
922 the goals have changed since the initial version of the document.
\r
924 The SASL mechanism has all modern SASL features: support for
\r
925 internationalized usernames and passwords, support for passing of
\r
926 authorization identity, support for channel bindings.
\r
928 Both the client and server can be authenticated by the protocol.
\r
930 The authentication information stored in the authentication
\r
931 database is not sufficient by itself to impersonate the client.
\r
933 <<The server does not gain the ability to impersonate the client
\r
934 to other servers (with an exception for server-authorized
\r
937 The mechanism is extensible, but [hopefully] not overengineered in
\r
940 Easier to implement than DIGEST-MD5 in both clients and servers.
\r
943 Appendix C: SCRAM Examples
\r
958 Menon-Sen & Co Expires August 2009 FF[Page 16]
\r
964 Internet-draft February 2009
\r
967 (RFC Editor: Please delete everything after this point)
\r
972 - The appendices need to be written.
\r
974 - Should the server send a base64-encoded ServerSignature for the
\r
975 value of the "v" attribute, or should it compute a ServerProof the
\r
976 way the client computes a ClientProof?
\r
981 Updated References.
\r
983 Clarified purpose of the m= attribute.
\r
985 Fixed a problem with authentication/authorization identity's ABNF
\r
986 not allowing for some characters.
\r
988 Updated ABNF for nonce to show client-generated and server-generated
\r
991 Only register SCRAM-HMAC-SHA-1 with IANA and require explicit
\r
992 registrations of all other SCRAM-HMAC- mechanisms.
\r
998 Removed hash negotiation from SCRAM and turned it into a family of
\r
1001 Start using "Hash Function Textual Names" IANA registry for SCRAM
\r
1004 Fixed definition of Hi(str, salt) to be consistent with [RFC2898].
\r
1006 Clarified extensibility of SCRAM: added m= attribute (for future
\r
1007 mandatory extensions) and specified that all unrecognized
\r
1008 attributes must be ignored.
\r
1014 Changed the mandatory to implement hash algorithm to SHA-1 (as per
\r
1018 Menon-Sen & Co Expires August 2009 FF[Page 17]
\r
1024 Internet-draft February 2009
\r
1029 Added text about use of SASLPrep for username
\r
1030 canonicalization/validation.
\r
1032 Clarified that authorization identity is canonicalized/verified
\r
1033 according to SASL protocol profile.
\r
1035 Clarified that iteration count is per-user.
\r
1037 Clarified how clients select the authentication function.
\r
1039 Added IANA registration for the new mechanism.
\r
1041 Added missing normative references (UTF-8, SASLPrep).
\r
1043 Various editorial changes based on comments from Hallvard B
\r
1044 Furuseth, Nico William and Simon Josefsson.
\r
1050 - Update Base64 and Security Glossary references.
\r
1052 - Add Formal Syntax section.
\r
1054 - Don't bother with "v=".
\r
1056 - Make MD5 mandatory to implement. Suggest i=128.
\r
1062 - Seven years have passed, in which it became clear that DIGEST-MD5
\r
1063 suffered from unacceptably bad interoperability, so SCRAM-MD5 is
\r
1064 now back from the dead.
\r
1066 - Be hash agnostic, so MD5 can be replaced more easily.
\r
1068 - General simplification.
\r
1078 Menon-Sen & Co Expires August 2009 FF[Page 18]
\r