Initial release, version 0.0.0.
[gsasl.git] / doc / specification / draft-burdis-cat-srp-sasl-06.txt
blob09da6950752157539577616a463e50591574f8fe
3 Network Working Group                                        K.R. Burdis
4 Internet-Draft                                         Rhodes University
5 Expires: July 13, 2002                                         R. Naffah
6                                                           Forge Research
7                                                         January 12, 2002
10                  Secure Remote Password SASL Mechanism
11                       draft-burdis-cat-srp-sasl-06
13 Status of this Memo
15    This document is an Internet-Draft and is in full conformance with
16    all provisions of Section 10 of RFC2026.
18    Internet-Drafts are working documents of the Internet Engineering
19    Task Force (IETF), its areas, and its working groups. Note that
20    other groups may also distribute working documents as
21    Internet-Drafts.
23    Internet-Drafts are draft documents valid for a maximum of six
24    months and may be updated, replaced, or obsoleted by other documents
25    at any time. It is inappropriate to use Internet-Drafts as reference
26    material or to cite them other than as "work in progress."
28    The list of current Internet-Drafts can be accessed at
29    http://www.ietf.org/ietf/1id-abstracts.txt.
31    The list of Internet-Draft Shadow Directories can be accessed at
32    http://www.ietf.org/shadow.html.
34    This Internet-Draft will expire on July 13, 2002.
36 Copyright Notice
38    Copyright (C) The Internet Society (2002). All Rights Reserved.
40 Abstract
42    This document describes a SASL mechanism based on the Secure Remote
43    Password protocol.  This mechanism performs mutual authentication
44    and can provide a security layer with replay detection, integrity
45    protection and/or confidentiality protection.
55 Burdis & Naffah          Expires July 13, 2002                  [Page 1]
57 Internet-Draft             SRP SASL Mechanism               January 2002
60 Table of Contents
62    1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  3
63    2.  Conventions Used in this Document  . . . . . . . . . . . . . .  4
64    3.  Data Element Formats . . . . . . . . . . . . . . . . . . . . .  5
65    3.1 Scalar numbers . . . . . . . . . . . . . . . . . . . . . . . .  5
66    3.2 Multi-Precision Integers . . . . . . . . . . . . . . . . . . .  5
67    3.3 Octet Sequences  . . . . . . . . . . . . . . . . . . . . . . .  6
68    3.4 Extended Octet Sequences . . . . . . . . . . . . . . . . . . .  6
69    3.5 Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  6
70    3.6 Buffers  . . . . . . . . . . . . . . . . . . . . . . . . . . .  6
71    3.7 Data Element Size Limits . . . . . . . . . . . . . . . . . . .  7
72    4.  Protocol Description . . . . . . . . . . . . . . . . . . . . .  8
73    4.1 Client sends its identity  . . . . . . . . . . . . . . . . . .  9
74    4.2 Server sends initial protocol elements . . . . . . . . . . . .  9
75    4.3 Client sends its ephemeral public key  . . . . . . . . . . . . 11
76    4.4 Server sends its ephemeral public key  . . . . . . . . . . . . 11
77    4.5 Client sends its evidence  . . . . . . . . . . . . . . . . . . 12
78    4.6 Server sends its evidence  . . . . . . . . . . . . . . . . . . 13
79    5.  Security Layer . . . . . . . . . . . . . . . . . . . . . . . . 14
80    5.1 Confidentiality Protection . . . . . . . . . . . . . . . . . . 15
81    5.2 Replay Detection . . . . . . . . . . . . . . . . . . . . . . . 16
82    5.3 Integrity Protection . . . . . . . . . . . . . . . . . . . . . 17
83    5.4 Summary of Security Layer Output . . . . . . . . . . . . . . . 17
84    6.  Example  . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
85    7.  Discussion . . . . . . . . . . . . . . . . . . . . . . . . . . 22
86    7.1 Mandatory Algorithms . . . . . . . . . . . . . . . . . . . . . 22
87    7.2 Modulus and generator values . . . . . . . . . . . . . . . . . 22
88    7.3 Replay detection sequence number counters  . . . . . . . . . . 22
89    7.4 SASL Profile Considerations  . . . . . . . . . . . . . . . . . 23
90    8.  Security Considerations  . . . . . . . . . . . . . . . . . . . 25
91    9.  Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 26
92        References . . . . . . . . . . . . . . . . . . . . . . . . . . 27
93        Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . 29
94    A.  Modulus and Generator values . . . . . . . . . . . . . . . . . 30
95    B.  Changes since the previous draft . . . . . . . . . . . . . . . 32
96        Full Copyright Statement . . . . . . . . . . . . . . . . . . . 33
111 Burdis & Naffah          Expires July 13, 2002                  [Page 2]
113 Internet-Draft             SRP SASL Mechanism               January 2002
116 1. Introduction
118    The Secure Remote Password (SRP) is a password-based,
119    zero-knowledge, authentication and key-exchange protocol developed
120    by Thomas Wu.  It has good performance, is not plaintext-equivalent
121    and maintains perfect forward secrecy.  It provides authentication
122    (optionally mutual authentication) and the negotiation of a session
123    key [SRP].
125    The mechanism described herein is based on the optimised SRP
126    protocol described at the end of section 3 in [RFC-2945], since this
127    reduces the total number of messages exchanged by grouping together
128    pieces of information that do not depend on earlier messages.  Due
129    to the design of the mechanism, mutual authentication is MANDATORY.
131    The SASL mechanism name associated with this protocol is "SRP".
167 Burdis & Naffah          Expires July 13, 2002                  [Page 3]
169 Internet-Draft             SRP SASL Mechanism               January 2002
172 2. Conventions Used in this Document
174    o  A hex digit is an element of the set: 
176          {0, 1, 2, 3, 4, 5, 6, 7, 8 , 9, A, B, C, D, E, F}
178       A hex digit is the representation of a 4-bit string.  Examples: 
180          7 = 0111
182          A = 1010
184    o  An octet is an 8-bit string.  In this document an octet may be
185       written as a pair of hex digits.  Examples: 
187          7A = 01111010
189          02 = 00000010
191    o  All data is encoded and sent in network byte order (big-endian).
193    o  The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
194       NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and
195       "OPTIONAL" in this document are to be interpreted as described in
196       [RFC-2119]. 
223 Burdis & Naffah          Expires July 13, 2002                  [Page 4]
225 Internet-Draft             SRP SASL Mechanism               January 2002
228 3. Data Element Formats
230    This section describes the encoding of the data elements used by the
231    SASL mechanism described in this document.
233 3.1 Scalar numbers
235    Scalar numbers are unsigned quantities.  Using b[k] to refer to the
236    k-th octet being processed, the value of a two-octet scalar is: 
238       ((b[0] << 8) + b[1]),
240    where << is the bit left-shift operator.  The value of a four-octet
241    scalar is: 
243       ((b[0] << 24) + (b[1] << 16) + (b[2] << 8) + b[3]).
245 3.2 Multi-Precision Integers
247    Multi-Precision Integers, or MPIs, are positive integers used to
248    hold large integers used in cryptographic computations.
250    MPIs are encoded using a scheme inspired by that used by OpenPGP -
251    [RFC-2440] (section 3.2) - for encoding such entities: 
253       The encoded form of an MPI SHALL consist of two pieces: a
254       two-octet scalar that represents the length of the entity, in
255       octets, followed by a sequence of octets that contain the actual
256       integer.
258       These octets form a big-endian number; A big-endian number can be
259       encoded by prefixing it with the appropriate length.
261       Examples: (all numbers are in hexadecimal) 
263          The sequence of octets [00 01 01] encodes an MPI with the
264          value 1, while the sequence [00 02 01 FF] encodes an MPI with
265          the value of 511.
267       Additional rule: 
269       *  The length field of an encoded MPI describes the octet count
270          starting from the MPI's first non-zero octet, containing the
271          most significant non-zero bit.  Thus, the encoding [00 02 01]
272          is not formed correctly; It should be [00 01 01].
274    We shall use the syntax mpi(A) to denote the encoded form of the
275    multi-precision integer A.  Furthermore, we shall use the syntax
276    bytes(A) to denote the big-endian sequence of octets forming the
279 Burdis & Naffah          Expires July 13, 2002                  [Page 5]
281 Internet-Draft             SRP SASL Mechanism               January 2002
284    multi-precision integer with the most significant octet being the
285    first non-zero octet containing the most significant bit of A.
287 3.3 Octet Sequences
289    This mechanism generates, uses and exchanges sequences of octets;
290    e.g. output values of message digest algorithm functions.  When such
291    entities travel on the wire, they shall be preceded by a one-octet
292    scalar quantity representing the count of following octets.
294    We shall use the syntax os(s) to denote the encoded form of the
295    octet sequence.  Furthermore, we shall use the syntax bytes(s) to
296    denote the sequence of octets s, in big-endian order.
298 3.4 Extended Octet Sequences
300    Extended sequences of octets are exchanged when using the security
301    layer.  When these sequences travel on the wire, they shall be
302    preceded by a four-octet scalar quantity representing the count of
303    following octets. 
305    We shall use the syntax eos(s) to denote the encoded form of the
306    extended octet sequence.  Furthermore, we shall use the syntax
307    bytes(s) to denote the sequence of octets s, in big-endian order.
309 3.5 Text
311    The only character set for text is the UTF-8 encoding [RFC-2279] of
312    Unicode characters [ISO-10646].
314    We shall use the syntax utf8(L) to denote the string L in UTF-8
315    encoding, preceded by a two-octet scalar quantity representing the
316    count of following octets.  Furthermore, we shall use the syntax
317    bytes(L) to denote the sequence of octets representing the UTF-8
318    encoding of L, in big-endian order.
320 3.6 Buffers
322    In this SASL mechanism data is exchanged between the client and
323    server using buffers.  A buffer acts as an envelope for the sequence
324    of data elements sent by one end-point of the exchange, and expected
325    by the other.
327    A buffer MAY NOT contain other buffers.  It may only contain zero,
328    one or more data elements.
330    A buffer shall be encoded as two fields: a four-octet scalar
331    quantity representing the count of following octets, and the
332    concatenation of the octets of the data element(s) contained in the
335 Burdis & Naffah          Expires July 13, 2002                  [Page 6]
337 Internet-Draft             SRP SASL Mechanism               January 2002
340    buffer.
342    We shall use the syntax {A|B|C} to denote a buffer containing A, B
343    and C in that order.  For example: 
345       { mpi(N) | mpi(g) | utf8(L) }
347    is a buffer containing, in the designated order, the encoded forms
348    of an MPI N, an MPI g and a Text L.
350 3.7 Data Element Size Limits
352    The following table details the size limit, in number of octets, for
353    each of the SASL data element encodings described earlier.
355       Data element type          Header       Size limit in octets
356                                 (octets)       (excluding header)
357       ------------------------------------------------------------
358       Octet Sequence               1                  255
359       MPI                          2                 65,535
360       Text                         2                 65,535
361       Extended Octet Sequence      4             2,147,483,383
362       Buffer                       4             2,147,483,643
364    An implementation MUST signal an exception if any size constraint is
365    violated.
391 Burdis & Naffah          Expires July 13, 2002                  [Page 7]
393 Internet-Draft             SRP SASL Mechanism               January 2002
396 4. Protocol Description
398    The following sections describe the sequence of data transmitted
399    between the client and server for the SRP SASL mechanism, as well as
400    the extra control information exchanged to enable a client to
401    request whether or not replay detection, integrity protection and/or
402    confidentiality protection should be provided by a security layer.
404    Mechanism data exchanges, during the authentication phase, are shown
405    below:
407        Client                                             Server
409          ---  { utf8(U) | utf8(I) }  ------------------------>
411          <--------  { mpi(N) | mpi(g) | os(s) | utf8(L) }  ---
413          ---  { mpi(A) | utf8(o) }  ------------------------->
415          <-----------------------------------  { mpi(B) }  ---
417          ---  { os(M1) }  ----------------------------------->
419                               ( optionally )
421          <-----------------------------------  { os(M2) }  ---
423    where: 
425       U     is the authentication identity (username),
427       I     is the authorisation identity,
429       N     is the safe prime modulus,
431       g     is the generator,
433       s     is the user's password salt,
435       L     is the options list indicating available security services,
437       A     is the client's ephemeral public key,
439       o     is the options list indicating chosen security services,
441       B     is the server's ephemeral public key,
443       M1    is the client's evidence that the shared key K is known,
447 Burdis & Naffah          Expires July 13, 2002                  [Page 8]
449 Internet-Draft             SRP SASL Mechanism               January 2002
452       M2    is the server's evidence that the shared key K is known.
454 4.1 Client sends its identity
456    The client determines its authentication identity U and
457    authorisation identity I, encodes them and sends them to the server.
459    The client sends: 
461       { utf8(U) | utf8(I) }
463 4.2 Server sends initial protocol elements
465    The server receives U, and looks up the safe prime modulus N, the
466    generator g, and the salt s to be used for that identity.
468    The server also creates an options list L, which consists of a
469    comma-separated list of option strings that specify the options the
470    server supports.  This options list MUST NOT be interpreted in a
471    case-sensitive manner, and whitespace characters MUST be ignored.
473    The following option strings are defined: 
475    o  "mda=<message digest algorithm name>" indicates that the server
476       supports the designated hash function as the underlying Message
477       Digest Algorithm for the designated user to be used for all SRP
478       calculations - to compute both client-side and server-side
479       digests.  The specified algorithm MUST meet the requirements
480       specified in section 3.2 of [RFC-2945]: 
482          "Any hash function used with SRP should produce an output of
483          at least 16 bytes and have the property that small changes in
484          the input cause significant nonlinear changes in the output."
486       Note that in the interests of interoperability between client and
487       server implementations and with other SRP-based tools, both the
488       client and the server MUST support SHA-160 as an underlying
489       Message Digest Algorithm.  While the server is not required to
490       list SHA-160 as an available underlying Message Digest Algorithm,
491       it must be able to do so.
493    o  "integrity=HMAC-<MDA-name>" indicates that the server supports
494       integrity protection using the HMAC algorithm [RFC-2104] with
495       <MDA-name> as the underlying Message Digest Algorithm. 
496       Acceptable MDA names are chosen from [SCAN] under the
497       MessageDigest section.  A server SHOULD send such an option
498       string for each HMAC algorithm it supports.  Note that in the
499       interest of interoperability, if the server offers integrity
500       protection it MUST, as a minimum, send the option string
503 Burdis & Naffah          Expires July 13, 2002                  [Page 9]
505 Internet-Draft             SRP SASL Mechanism               January 2002
508       "integrity=HMAC-SHA-160" since support for this algorithm is then
509       MANDATORY.
511    o  "replay detection" indicates that the server supports replay
512       detection using sequence numbers.  Replay detection SHALL NOT be
513       activated without also activating integrity protection.  If the
514       replay detection option is offered (by the server) and/or chosen
515       (by the client) without explicitely specifying an integrity
516       protection option, then the default integrity protection option
517       "integrity=HMAC-SHA-160" is implied and shall be activated.
519    o  "confidentiality=<cipher name>" indicates that the server
520       supports confidentiality protection using the symmetric block
521       cipher algorithm <cipher name>.  The server SHOULD send such an
522       option string for each confidentiality protection algorithm it
523       supports. Note that in the interest of interoperability, if the
524       server offers confidentiality protection, it MUST send the option
525       string "confidentiality=aes" since it is then MANDATORY for it to
526       provide support for this algorithm.  (Rijndael [RIJNDAEL] is
527       synonymous with AES [AES].)
529    o  "mandatory=[integrity|replay detection|confidentiality]" is an
530       option only available to the server that indicates that the
531       specified security layer option is MANDATORY and MUST be chosen
532       by the client for use in the resulting security layer.  If a
533       server specifies an option as mandatory in this way, it MUST
534       abort the connection if the specified option is not chosen by the
535       client.  It doesn't make sense for the client to send this option
536       since it is only able to choose options that the server
537       advertises.  The client SHOULD abort the connection if the server
538       does not offer an option that it requires.  If this option is not
539       specified then this implies that no options are mandatory.
541    o  "maxbuffersize=<number of bytes>" indicates to the peer the
542       maximum number of raw bytes (excluding the SASL buffer 4-byte
543       length header) to be processed by the security layer at a time,
544       if one is negotiated.  The value of <number of bytes> MUST NOT
545       exceed the Buffer size limit defined in section 3.7.  If this
546       option is not detected by a client or server mechanism, then it
547       shall operate its security layer on the assumption that the
548       maximum number of bytes that may be sent, to the peer server or
549       client mechanism respectively, is the Buffer data size limit
550       indicated in section 3.7.  On the other hand, if a recipient
551       detects this option, it shall break any octet-sequence longer
552       than the designated limit into two or more fragments, each
553       wrapped in a SASL buffer, before sending them, in sequence, to
554       the peer.
556    For example, if the server supports integrity protection using the
559 Burdis & Naffah          Expires July 13, 2002                 [Page 10]
561 Internet-Draft             SRP SASL Mechanism               January 2002
564    HMAC-SHA-160 and HMAC-MD5 algorithms, replay detection and no
565    confidentiality protection, the options list would be: 
567       mda=SHA-1,integrity=HMAC-SHA-160,integrity=HMAC-MD5,replay
568       detection
570    The server sends: 
572       { mpi(N) | mpi(g) | os(s) | utf8(L) }
574 4.3 Client sends its ephemeral public key
576    The client receives the options list L from the server that
577    specifies the Message Digest Algorithm(s) available to be used for
578    all SRP calculations, the security service options the server
579    supports, and the maximum buffer size the server can handle.  The
580    client selects options from this list and creates a new options list
581    o that specifies the selected Message Digest Algorithm to be used
582    for SRP calculations and the security services that will be used in
583    the security layer.  At most one available Message Digest Algorithm
584    name, one available integrity protection algorithm and one available
585    confidentiality protection algorithm may be selected.  The client
586    MUST include any option specified by the mandatory option.
588    The client generates its ephemeral public key A as follows: 
590       a = prng();
592       A = g**a % N;
594    where: 
596       prng() is a random number generation function,
598       a      is the MPI that will act as the client's private key,
600       **     is the exponentiation operator,
602       %      is the modulus operator,
604    The client sends: 
606       { mpi(A) | utf8(o) }
608 4.4 Server sends its ephemeral public key
610    The server reads the client's verifier v, calculates the shared
611    context key K and generates its ephemeral public key B as follows: 
615 Burdis & Naffah          Expires July 13, 2002                 [Page 11]
617 Internet-Draft             SRP SASL Mechanism               January 2002
620       b = prng();
622       B = (v + g**b) % N;
624       K = H2((A * v**u) ** b % N);
626    where: 
628       b    is the MPI that will act as the server's private key,
630       v    is the stored password verifier value,
632       u    is a 32-bit unsigned integer which takes its value from the
633       first 32 bits of the hash of B, MSB first,
635       H2() is the "Interleaved SHA" function, as described in
636       [RFC-2945], but generalised to any message digest algorithm, and
637       applied using the underlying Message Digest Algorithm (see
638       Section 4.2).
640    The server sends: 
642       { mpi(B) }
644 4.5 Client sends its evidence
646    The client calculates the shared context key K, and calculates the
647    evidence M1 that proves to the server that it knows the shared
648    context key K, including I and L as part of the calculation.  K, on
649    the client's side is computed as follows: 
651       x = H(s | H(U | ":" | p));
653       K = H2((B - g**x) ** (a + u * x) % N);
655    where: 
657       H() is the result of digesting the designated input/data with the
658       underlying Message Digest Algorithm function (see Section 4.2).
660       p   is the password value.
662    M1 is computed as: 
671 Burdis & Naffah          Expires July 13, 2002                 [Page 12]
673 Internet-Draft             SRP SASL Mechanism               January 2002
676             H(   bytes(H( bytes(N) )) ^ bytes( H( bytes(g) ))
677                | bytes(H( bytes(U) ))
678                | bytes(s)
679                | bytes(A)
680                | bytes(B)
681                | bytes(K)
682                | bytes(H( bytes(I) )
683                | bytes(H( bytes(L) ))
684             )
686    where: 
688       ^ is the bitwise XOR operator.
690    The client sends: 
692       { os(M1) }
694 4.6 Server sends its evidence
696    When the Confidentiality Protection service is requested and
697    approved, the server MUST NOT send M2 but instead conclude the SASL
698    exchange with the reception and verification of the client's M1. 
699    Otherwise, M2 MUST be sent.
701    When the server has to send its evidence M2, which proves to the
702    client that it knows the shared context key K, as well as U, I and
703    o, it shall compute it as follows: 
705             H(   bytes(A)
706                | bytes(M1)
707                | bytes(K)
708                | bytes(H( bytes(U) ))
709                | bytes(H( bytes(I) ))
710                | bytes(H( bytes(o) ))
711             )
713    The server OPTIONALLY sends: 
715       { os(M2) }
727 Burdis & Naffah          Expires July 13, 2002                 [Page 13]
729 Internet-Draft             SRP SASL Mechanism               January 2002
732 5. Security Layer
734    Depending on the options offered by the server and specified by the
735    client, the security layer may provide integrity protection, replay
736    detection, and/or confidentiality protection.
738    The security layer can be thought of as a three-stage filter through
739    which the data flows from the output of one stage to the input of
740    the following one.  The first input is the original data, while the
741    last output is the data after being subject to the transformations
742    of this filter.
744    The data always passes through this three-stage filter, though any
745    of the stages may be inactive.  Only when a stage is active would
746    the output be different from the input.  In other words, if a stage
747    is inactive, the octet sequence at the output side is an exact
748    duplicate of the same sequence at the input side.
750    Schematically, the three-stage filter security layer appears as
751    follows: 
753                  +----------------------------+
754                  |                            |     I/ p1
755          p1  --->| Confidentiality protection |---+
756                  |                            |   | A/ c
757                  +----------------------------+   |
758                                                   |
759              +------------------------------------+
760              |
761              |   +----------------------------+
762              |   |                            |     I/ p2
763          p2  +-->|      Replay detection      |---+
764                  |                            |   | A/ p2 | q
765                  +----------------------------+   |
766                                                   |
767              +------------------------------------+
768              |
769              |   +----------------------------+
770              |   |                            |     I/ p3
771          p3  +-->|    Integrity protection    |--->
772                  |                            |     A/ p3 | C
773                  +----------------------------+
775    where: 
777       p1, p2 and p3 are the input octet sequences at each stage,
779       I/ denotes the output at the end of one stage if/when the stage
780       is inactive or disabled,
783 Burdis & Naffah          Expires July 13, 2002                 [Page 14]
785 Internet-Draft             SRP SASL Mechanism               January 2002
788       A/ denotes the output at the end of one stage if/when the stage
789       is active or enabled,
791       c is the encrypted (sender-side) or decrypted (receiver-side)
792       octet sequence.  c1 shall denote the value computed by the
793       sender, while c2 shall denote the value computed by the receiver.
795       q is a four-octet scalar quantity representing a sequence number,
797       C is the Message Authentication Code.  C1 shall denote the value
798       of the MAC as computed by the sender, while C2 shall denote the
799       value computed by the receiver.
801    The following paragraphs detail each of the transformations
802    mentioned above.
804 5.1 Confidentiality Protection
806    The plaintext data octet sequence p1 is encrypted using the chosen
807    confidentiality algorithm (CALG) initialised for encryption with the
808    shared context key K. 
810       c1 = CALG(K, ENCRYPTION)( bytes(p1) )
812    On the receiving side, the ciphertext data octet sequence p1 is
813    decrypted using the chosen confidentiality algorithm (CALG)
814    initialised for decryption, with the shared context key K. 
816       c2 = CALG(K, DECRYPTION)( bytes(p1) )
818    The designated CALG block cipher should be used in OFB (Output
819    Feedback Block) mode in the ISO variant, as described in [HAC],
820    algorithm 7.20.
822    Let k be the block size of the chosen symmetric cipher algorithm;
823    e.g. for AES this is 128 bits or 16 octets.  The OFB mode used shall
824    be of length/size k.
826    It is recommended that Block ciphers operating in OFB mode be used
827    with an Initial Vector (the mode's IV).  For the SASL mechanism
828    described in this document, the IV shall be an all-zero octet
829    sequence of size k.
831    In such a mode of operation - OFB with key re-use - the IV, which
832    need not be secret, must be changed.  Otherwise an identical
833    keystream results; and, by XORing corresponding ciphertexts, an
834    adversary may reduce cryptanalysis to that of a running-key cipher
835    with one plaintext as the running key.  To counter the effect of
836    fixing the IV to an all-zero octet sequence, the sender should use a
839 Burdis & Naffah          Expires July 13, 2002                 [Page 15]
841 Internet-Draft             SRP SASL Mechanism               January 2002
844    one k-octet sequence as the value of its first block, constructed as
845    follows: 
847    o  the first (most significant) (k-2) octets are random,
849    o  the octets at position #k-1 and #k, assuming the first octet is
850       at position #1, are exact copies of those at positions #1 and #2
851       respectively.
853    The input data to the confidentiality protection algorithm shall be
854    a multiple of the symmetric cipher block size k.  When the input
855    length is not a multiple of k octets, the data shall be padded
856    according to the following scheme (described in [PKCS7] which itself
857    is based on [RFC-1423]): 
859       Assuming the length of the input is l octets, (k - (l mod k))
860       octets, all having the value (k - (l mod k)), shall be appended
861       to the original data.  In other words, the input is padded at the
862       trailing end with one of the following sequences: 
864                       01 -- if l mod k = k-1
865                      02 02 -- if l mod k = k-2
866                                ...
867                                ...
868                                ...
869                    k k ... k k -- if l mod k = 0
871       The padding can be removed unambiguously since all input is
872       padded and no padding sequence is a suffix of another.  This
873       padding method is well-defined if and only if k < 256 octets,
874       which is the case with symmetric block ciphers today, and in the
875       forseeable future.
877    The output of this stage, when it is active, is: 
879       at the sending side: CALG(K, ENCRYPT)( bytes(p1) )
881       at the receiving side: CALG(K, DECRYPT)( bytes(p1) )
883    If the receiver, after decrypting the first block, finds that the
884    last two octets do not match the value of the first two, it MUST
885    signal an exception and abort the exchange.
887 5.2 Replay Detection
889    A sequence number q is incremented every time a message is sent to
890    the peer.
892    The output of this stage, when it is active, is: 
895 Burdis & Naffah          Expires July 13, 2002                 [Page 16]
897 Internet-Draft             SRP SASL Mechanism               January 2002
900       p2 | q
902    At the other end, the receiver increments its copy of the sequence
903    number.  This new value of the sequence number is then used in the
904    integrity protection transformation, which must also be active as
905    described in Section 4.2.  See Section 7.3 for more details.
907 5.3 Integrity Protection
909    When the Integrity Protection stage is active, a message
910    authentication code C is computed using the chosen integrity
911    protection algorithm (IALG) as follows: 
913    o  the IALG is initialised (once) with the shared context key K,
915    o  the IALG is updated with every exchange of the sequence p3,
916       yielding the value C and a new IALG context for use in the
917       following exchange.
919    At the other end, the receiver computes its version of C, using the
920    same transformation, and checks that its value is equal to that
921    received. If the two values do not agree, the receiver must signal
922    an exception and abort.
924    The output of this stage, when it is active, is then: 
926       IALG(K)( bytes(p3) )
928 5.4 Summary of Security Layer Output
930    The following table shows the data exchanged by the security layer
931    peers, depending on the possible legal combinations of the three
932    security services in operation: 
934       CP   IP   RD   Peer sends/receives
936       I    I    I    { eos(p) }
937       I    A    I    { eos(p) | os( IALG(K)( bytes(p) ) ) }
938       I    A    A    { eos(p) | os( IALG(K)( bytes(p) | bytes(q)) ) }
939       A    I    I    { eos(c) }
940       A    A    I    { eos(c) | os( IALG(K)( bytes(c) ) ) }
941       A    A    A    { eos(c) | os( IALG(K)((bytes(c) | bytes(q)) ) }
943    where 
945       CP    Confidentiality protection,
947       IP    Integrity protection,
951 Burdis & Naffah          Expires July 13, 2002                 [Page 17]
953 Internet-Draft             SRP SASL Mechanism               January 2002
956       RD    Replay detection,
958       I     Security service is Inactive/disabled,
960       A     Security service is Active/enabled,
962       p     The original plaintext,
964       q     The sequence number.
966       c     The enciphered input obtained by either: 
968          CALG(K, ENCRYPT)( bytes(p) ) at the sender's side, or
970          CALG(K, DECRYPT)( bytes(p) ) at the receiver's side
1007 Burdis & Naffah          Expires July 13, 2002                 [Page 18]
1009 Internet-Draft             SRP SASL Mechanism               January 2002
1012 6. Example
1014    The example below uses SMTP authentication [RFC-2554]. The base64
1015    encoding of challenges and responses, as well as the reply codes
1016    preceding the responses are part of the SMTP authentication
1017    specification, not part of this SASL mechanism itself.
1019    "C:" and "S:" indicate lines sent by the client and server
1020    respectively.
1023     S: 220 smtp.example.com ESMTP server ready
1025     C: EHLO zaau.example.com
1027     S: 250-smtp.example.com
1028     S: 250 AUTH SRP CRAM-MD5 DIGEST-MD5
1030     C: AUTH SRP AAAADAAEdGVzdAAEdGVzdA==
1032      with:
1034        U = "test"
1036        I = "test"
1038     S: 334 AAABygEArGvbQTJKmpvxZt5eE4lYL69ytmUZh+4H/DGSlD21YFCjcynLtKCZ7Y
1039     GT4HV3Z6E91SMSq0sDMQ3Nf0ip2gT9UOgIOWntt2ewz2CVF5oWOrNmGgX71fqq6CkYqZY
1040     vC5O4Vfl5k+yXXuqoDXQK2/T/dHNZ0EHVwz6nHSgeRGsUdzvKl7Q6I/uAFna9IHpDbGSB
1041     8dK5B4cXRhpbnTLmiPh3SFRFI7UksNV9Xqd6J3XS7PoDLPvb9S+zeGFgJ5AE5Xrmr4dOc
1042     wPOUymczAQce8MI2CpWmPOo0MOCca41+Onb+7aUtcgD2J965DXeI21SX1R1m2XjcvzWjv
1043     IPpxEfnkr/cwABAgqsi3AvmIqdEbREALhtZGE9U0hBLTEsbWFuZGF0b3J5PXJlcGxheSB
1044     kZXRlY3Rpb24scmVwbGF5IGRldGVjdGlvbixpbnRlZ3JpdHk9aG1hYy1zaGExLGludGVn
1045     cml0eT1obWFjLW1kNSxjb25maWRlbnRpYWxpdHk9YWVzLGNvbmZpZGVudGlhbGl0eT1jY
1046     XN0NSxjb25maWRlbnRpYWxpdHk9Ymxvd2Zpc2gsbWF4YnVmZmVyc2l6ZT0yMTQ3NDgzNj
1047     Qz
1049      with:
1051        N = "2176617445861743577319100889180275378190766837425553851114464
1052        322468988623538384095721090901308605640157139971723580726658164960
1053        647214841029141336415219736447718088739565548373811507267740223510
1054        176252190156982074029314952962041933326626207347105454836873603951
1055        970248622650624886106025697180298495356112144268015766800076142998
1056        822245709041387397397017192709399211475176516806361476111961547623
1057        342209644278311797123637164733387141433589577347466730896705080700
1058        550932042479967841703686792831676127227423031406754829113358247958
1059        306143957755934710196177140617368437852270348349533703765500675132
1060        8447510550299250924469288819"
1063 Burdis & Naffah          Expires July 13, 2002                 [Page 19]
1065 Internet-Draft             SRP SASL Mechanism               January 2002
1068        g = "2"
1070        s = "814819216327401865851972"
1072        L = "mda=SHA-1,mandatory=replay detection,replay detection,integri
1073        ty=hmac-sha1,integrity=hmac-md5,confidentiality=aes,confidentialit
1074        y=cast5,confidentiality=blowfish,maxbuffersize=2147483643"
1076     C: AAABYwEAAp5q/4zhXoTUzXBscozN97SWgfDcAImIk3lNHNvd0b+Dr7jEm6upXblZT5
1077     sL9mPgFsejlIh+B/eCu/HvzWCrXj6ylPZv8dy3LCH3LIORqQ45S7Lsbmrrg/dukDh4tZC
1078     JMLD4r3evzaY8KVhtJeLMVbeXuh4JljKP42Ll59Lzwf8jfPh4+4Lae1rpWUCL9DueKcY+
1079     nN+xNHTit/ynLATxwL93P6+GoGY4TkUbUBfjiI1+rAMvyMDMw5XozGy07FOEc++U0iPeX
1080     CQP4MT5FipOUoz8CYX7J1LbaXp2WJuFHlkyVXF7oCoyHbhld/5CfR3o6q/B/x9+yZRqaH
1081     H+JfllOgBfbWRhPVNIQS0xLHJlcGxheSBkZXRlY3Rpb24saW50ZWdyaXR5PWhtYWMtbWQ
1082     1LGNvbmZpZGVudGlhbGl0eT1ibG93ZmlzaCxtYXhidWZmZXJzaXplPTIxNDc0ODM2NDM=
1084      with:
1086        A = "3305954184671210249746312321130434202193449637258786928151596
1087        956582377798844627774788503949777445537469304518958156158884050562
1088        780707370878253753979367019077142882237029766166623275718227655538
1089        983419084032208109159908908194732453790761392470705815003778027907
1090        762317939621437864117925167600301024366036210465417293966890613394
1091        379900527412007068242559299422872893332111365840536495185883474232
1092        883537338757318836995637988160638089067541196607366511069220022940
1093        355334703015419992745572006667033895314817945166254757418442215980
1094        634933876533189969562613241499465295849832999091403980813218409496
1095        06581251320320995783959866"
1097        o = mda=SHA-1,replay detection,integrity=hmac-md5,confidentiality=
1098        blowfish,maxbuffersize=2147483643"
1100     S: 334 AAABAgEAOUKbXpnzMhziivGgMwm+FS8sKGSvjh5M3D+80RF/5z9rm0oPoi4+pF
1101     83fueWn4Hz9M+muF/22PHHZkHtlutDrtapj4OtirdxC21fS9bMtEh3F0whTX+3mPvthw5
1102     sk11turandHiLvcUZOgcrAGIoDKcBPoGyBud+8bMgpkf/uGfyBM2nEX/hV+oGggX+LiHj
1103     mkxAJ3kewfQPH0eV9ffEuuyu8BUcBXkJsS6l7eWkuERSCttVOi/jS031c+CD/nuecUXYi
1104     F8IYzW03rbcwYhZzifmTi3VK9C8zG2K1WmGU+cDKlZMkyCPMmtCsxlbgE8zSHCuCiOgQ3
1105     5XhcA0Qa0C3Q==
1107      with:
1109        B: "72284284756503184420540308728542442858927345812975023176601544
1110        656078275298532392401181852634926172435239161066586969655965268585
1111        300845435562962039149169549800169184521786717633959469278439877134
1112        444500243257950929211559843568506288263176079641655456298084758961
1113        983258355079013195569295114214721321849903652130596549627218189966
1114        140113906545856088040473723048909402258929560823932725202215411408
1115        791389541192767670707304028113609680668175826522120988223747234163
1116        643404100201722157739343027946790344246999996116789730443114919539
1119 Burdis & Naffah          Expires July 13, 2002                 [Page 20]
1121 Internet-Draft             SRP SASL Mechanism               January 2002
1124        575466941344964841591072763617954717789621871251710891793993491944
1125        52686682517183909017223901"
1127     C: AAAAFRTkoju6xGP+zH89iaDWIFjfIKt5Kg==
1129     S: 235 Authentication successful.
1175 Burdis & Naffah          Expires July 13, 2002                 [Page 21]
1177 Internet-Draft             SRP SASL Mechanism               January 2002
1180 7. Discussion
1182 7.1 Mandatory Algorithms
1184    The algorithms specified as mandatory were chosen for utility and
1185    availablity.  We felt that a mandatory confidentiality and integrity
1186    protection algorithm for the security layer and a mandatory Message
1187    Digest Algorithm for SRP calculations should be specified to ensure
1188    interoperability between implementations of this mechanism: 
1190    o  The SHA-160 Message Digest Algorithm was chosen as an underlying
1191       algorithm for SRP calculations because this allows for easy
1192       interoperability with other SRP-based tools that use the SRP-SHA1
1193       protocol described in section 3 of [RFC-2945] and create their
1194       password files using this algorithm.
1196    o  The HMAC algorithm was chosen as an integrity algorithm because
1197       it is faster than MAC algorithms based on secret key encryption
1198       algorithms [RFC-2847].
1200    o  Rijndael was chosen as a cipher because it has undergone thorough
1201       scrutiny by the best cryptographers in the world and was chosen
1202       ahead of many other algorithms as the Advanced Encryption
1203       Standard.
1205    Since confidentiality protection is optional, this mechanism should
1206    be usable in countries that have strict controls on the use of
1207    cryptography.
1209 7.2 Modulus and generator values
1211    It is RECOMMENDED that the server use values for the modulus (N) and
1212    generator (g) chosen from those listed in Appendix A so that the
1213    client can avoid expensive constraint checks, since these predefined
1214    values already meet the constraints described in [RFC-2945]:
1216       "For maximum security, N should be a safe prime (i.e. a number of
1217       the form N = 2q + 1, where q is also prime).  Also, g should be a
1218       generator modulo N (see [SRP] for details), which means that for
1219       any X where 0 < X < N, there exists a value x for which g**x % N
1220       == X."
1222 7.3 Replay detection sequence number counters
1224    The mechanism described in this document allows the use of a Replay
1225    Detection security service that works by including sequence number
1226    counters in the message authentication code (MAC) created by the
1227    Integrity Protection service.  As noted in Section 4.2 integrity
1228    protection is always activated when the Replay Detection service is
1231 Burdis & Naffah          Expires July 13, 2002                 [Page 22]
1233 Internet-Draft             SRP SASL Mechanism               January 2002
1236    activated.
1238    Both the client and the server keep two sequence number counters. 
1239    Each of these counters is a 32-bit unsigned integer initialised with
1240    a Starting Value and incremented by an Increment Value with every
1241    successful transmission of an SASL buffer through the security
1242    layer.  The Sent counter is incremented for each buffer sent through
1243    the security layer. The Received counter is incremented for each
1244    buffer received through the security layer.  If the value of a
1245    sequence number counter exceeds 2**32 it wraps around and starts
1246    from zero again.
1248    When a sender sends a buffer it includes the value of its Sent
1249    counter in the computation of the MAC accompanying each integrity
1250    protected message.  When a recipient receives a buffer it uses the
1251    value of it's Received counter in its computation of the integrity
1252    protection MAC for the received message.  The recipient's Received
1253    counter must be the same as the sender's Sent counter in order for
1254    the received and computed MACs to match.
1256    This specification assumes that for each sequence number counter the
1257    Starting Value is ZERO, and that the Increment Value is ONE.  These
1258    values do not affect the security or the intended objective of the
1259    replay detection service, since they never travel on the wire.
1261 7.4 SASL Profile Considerations
1263    As mentioned briefly in [RFC-2222], and detailed in [SASL] a SASL
1264    specification has three layers: (a) a protocol definition using SASL
1265    known as the "Profile", (b) a SASL mechanism definition, and (c) the
1266    SASL framework.
1268    Point (3) in section 5 of [SASL] ("Protocol profile requirements")
1269    clearly states that it is the responsibility of the Profile to
1270    define "...how the challenges and responses are encoded, how the
1271    server indicates completion or failure of the exchange, how the
1272    client aborts an exchange, and how the exchange method interacts
1273    with any line length limits in the protocol."
1275    The username entity, referenced as "U" throughout this document, and
1276    used by the server to locate the password data, is assumed to travel
1277    "in the clear," meaning that no transformation is applied to its
1278    contents. This assumption was made to allow the same SRP password
1279    files to be used in this mechanism, as those used with other SRP
1280    applications and tools.
1282    A Profile may decide, for privacy or other reason, to disallow such
1283    information to travel in the clear, and instead use a hashed version
1284    of U, or more generally a transformation function applied to U; i.e.
1287 Burdis & Naffah          Expires July 13, 2002                 [Page 23]
1289 Internet-Draft             SRP SASL Mechanism               January 2002
1292    f(U).  Such a Profile would require additional tools to add the
1293    required entries to the SRP password files for the new value(s) of
1294    f(U).  It is worth noting too that if this is the case, and the same
1295    user shall access the server through this mechanism as well as
1296    through other SRP tools, then at least two entries, one with U and
1297    the other with f(U) need to be present in the SRP password files if
1298    those same files are to be used for both types of access.
1343 Burdis & Naffah          Expires July 13, 2002                 [Page 24]
1345 Internet-Draft             SRP SASL Mechanism               January 2002
1348 8. Security Considerations
1350    This mechanism relies on the security of SRP, which bases its
1351    security on the difficulty of solving the Diffie-Hellman problem in
1352    the multiplicative field modulo a large safe prime.  See section 4
1353    "Security Considerations" of [RFC-2945] and section 4 "Security
1354    analysis" of [SRP].
1356    B, the server's ephemeral public key, is computed as g**b + v = g**b
1357    + g**x, which is symmetric and allows two guesses per *active
1358    attack*.  In practical terms, this makes no difference to the
1359    security of SRP, since the number of active attacks needed is still
1360    linearly proportional to the number of guesses needed; only the
1361    constant factor (2 vs. 1) has changed.
1363    This mechanism also relies on the security of the HMAC algorithm and
1364    the underlying hash function when integrity protection is used. 
1365    Section 6 "Security" of [RFC-2104] discusses these security issues
1366    in detail.  Weaknesses found in MD5 do not impact HMAC-MD5
1367    [DOBBERTIN].
1369    U, A, I and o, sent from the client to the server, and N, g, L, s
1370    and B, sent from the server to the client could be modified by an
1371    attacker before reaching the other party.  For this reason, these
1372    values are included in the respective calculations of evidence (M1
1373    and M2) to prove that each party knows the session key K.  This
1374    allows each party to verify that these values were received
1375    unmodified.
1377    The use of integrity protection is RECOMMENDED to detect message
1378    tampering and to avoid session hijacking after authentication has
1379    taken place.
1381    Replay attacks may be avoided through the use of sequence numbers,
1382    because sequence numbers make each integrity protected message
1383    exchanged during a session different, and each session uses a
1384    different key.
1386    Research [KRAWCZYK] shows that the order and way of combining
1387    message encryption (Confidentiality Protection) and message
1388    authentication (Integrity Protection) are important.  This mechanism
1389    follows the EtA (encrypt-then-authenticate) method and is
1390    "generically secure."
1399 Burdis & Naffah          Expires July 13, 2002                 [Page 25]
1401 Internet-Draft             SRP SASL Mechanism               January 2002
1404 9. Acknowledgements
1406    The following people provided valuable feedback in the preparation
1407    of this document: 
1409       Stephen Farrell <stephen.farrell@baltimore.ie>
1411       Timothy Martin <tmartin@andrew.cmu.edu>
1413       Ken Murchison <ken@oceana.com>
1415       Magnus Nystrom <magnus@rsasecurity.com>
1417       Thomas Wu <tom@arcot.com>
1455 Burdis & Naffah          Expires July 13, 2002                 [Page 26]
1457 Internet-Draft             SRP SASL Mechanism               January 2002
1460 References
1462    [AES]        National Institute of Standards and Technology,
1463                 "Rijndael: NIST's Selection for the AES", December
1464                 2000, 
1465                 <http://csrc.nist.gov/encryption/aes/rijndael/Rijndael.p
1466                 df>.
1468    [DOBBERTIN]  Dobbertin, H., "The Status of MD5 After a Recent
1469                 Attack", December 1996, 
1470                 <ftp://ftp.rsasecurity.com/pub/cryptobytes/crypto2n2.pdf
1471                 >.
1473    [HAC]        Menezes, A.J., van Oorschot, P.C. and S.A. Vanstone,
1474                 "Handbook of Applied Cryptography", CRC Press, Inc.,
1475                 ISBN 0-8493-8523-7, 1997, 
1476                 <http://www.cacr.math.uwaterloo.ca/hac/about/chap7.ps>.
1478    [ISO-10646]  "International Standard --Information technology--
1479                 Universal Multiple-Octet Coded Character Set (UCS) --
1480                 Part 1 Architecture and Basic Multilingual Plane",
1481                 ISO/IEC 10646-1, 1993.
1483    [KRAWCZYK]   Krawczyk, H., "The order of encryption and
1484                 authentication for protecting communications (Or: how
1485                 secure is SSL?)", June 2001, 
1486                 <http://eprint.iacr.org/2001/045/>.
1488    [PKCS7]      RSA Data Security, Inc., "PKCS #7: Cryptographic
1489                 Message Syntax Standard", Version 1.5, November 1993, 
1490                 <ftp://ftp.rsasecurity.com/pub/pkcs/ascii/pkcs-7.asc>.
1492    [RFC-1423]   Balenson, D., "Privacy Enhancement for Internet
1493                 Electronic Mail: Part III: Algorithms, Modes, and
1494                 Identifiers", RFC 1423, February 1993, 
1495                 <http://www.ietf.org/rfc/rfc1423.txt>.
1497    [RFC-2104]   Krawczyk, H. et al, "HMAC: Keyed-Hashing for Message
1498                 Authentication", RFC 2104, February 1997, 
1499                 <http://www.ietf.org/rfc/rfc2104.txt>.
1501    [RFC-2119]   Bradner, S., "Key words for use in RFCs to Indicate
1502                 Requirement Levels", BCP 0014, RFC 2119, March 1997, 
1503                 <http://www.ietf.org/rfc/rfc2119.txt>.
1505    [RFC-2222]   Myers, J.G., "Simple Authentication and Security Layer
1506                 (SASL)", RFC 2222, October 1997, 
1507                 <http://www.ietf.org/rfc/rfc2222.txt>.
1511 Burdis & Naffah          Expires July 13, 2002                 [Page 27]
1513 Internet-Draft             SRP SASL Mechanism               January 2002
1516    [RFC-2279]   Yergeau, F., "UTF-8, a transformation format of Unicode
1517                 and ISO 10646", RFC 2279, January 1998, 
1518                 <http://www.ietf.org/rfc/rfc2279.txt>.
1520    [RFC-2440]   Callas, J., Donnerhacke, L., Finney, H. and R. Thayer,
1521                 "OpenPGP Message Format", RFC 2440, November 1998, 
1522                 <http://www.ietf.org/rfc/rfc2440.txt>.
1524    [RFC-2554]   Myers, J.G., "SMTP Service Extension for
1525                 Authentication", RFC 2554, March 1999.
1527    [RFC-2629]   Rose, M., "Writing I-Ds and RFCs using XML", RFC 2629,
1528                 June 1999, 
1529                 <http://www.ietf.org/rfc/rfc2629.txt>.
1531    [RFC-2847]   Eisler, M., "LIPKEY - A Low Infrastructure Public Key
1532                 Mechanism Using SPKM", RFC 2847, June 2000, 
1533                 <http://www.ietf.org/rfc/rfc2847.txt>.
1535    [RFC-2945]   Wu, T., "The SRP Authentication and Key Exchange
1536                 System", RFC 2945, September 2000, 
1537                 <http://www.ietf.org/rfc/rfc2945.txt>.
1539    [RIJNDAEL]   Daemen, Joan and Vincent Rijmen, "AES Proposal:
1540                 Rijndael", September 1999, 
1541                 <http://www.esat.kuleuven.ac.be/~rijmen/rijndael/>.
1543    [SASL]       Myers, J.G., "Simple Authentication and Security Layer
1544                 (SASL)", April 2001, 
1545                 <http://www.ietf.org/internet-drafts/draft-myers-saslrev
1546                 -01.txt>.
1548    [SCAN]       Hopwood, D., "Standard Cryptographic Algorithm Naming",
1549                 June 2000, 
1550                 <http://www.eskimo.com/~weidai/scan-mirror/>.
1552    [SRP]        Wu, T., "The Secure Remote Password Protocol", March
1553                 1998, 
1554                 <http://srp.stanford.edu/ndss.html>.
1556    [SRP']       Wu, T., "SRP: The Open Source Password Authentication
1557                 Standard", March 1998, 
1558                 <http://srp.stanford.edu/srp/>.
1567 Burdis & Naffah          Expires July 13, 2002                 [Page 28]
1569 Internet-Draft             SRP SASL Mechanism               January 2002
1572 Authors' Addresses
1574    Keith Burdis
1575    Rhodes University
1576    Computer Science Department
1577    Grahamstown  6139
1578    ZA
1580    EMail: keith@rucus.ru.ac.za
1583    Raif S. Naffah
1584    Forge Research Pty. Limited
1585    Suite 116, Bay 9
1586    Locomotive Workshop,
1587    Australian Technology Park
1588    Cornwallis Street
1589    Eveleigh, NSW  1430
1590    AU
1592    EMail: raif@forge.com.au
1623 Burdis & Naffah          Expires July 13, 2002                 [Page 29]
1625 Internet-Draft             SRP SASL Mechanism               January 2002
1628 Appendix A. Modulus and Generator values
1630    Modulus (N) and generator (g) values for various modulus lengths are
1631    given below.  In each case the modulus is a large safe prime and the
1632    generator is a primitve root of GF(n) [RFC-2945].  These values are
1633    taken from software developed by Tom Wu and Eugene Jhong for the
1634    Stanford SRP distribution [SRP'].
1637       [264 bits]
1638         Modulus (base 16) =
1639           115B8B692E0E045692CF280B436735C77A5A9E8A9E7ED56C965F87DB5B2A2ECE
1640           3
1641         Generator = 2
1643       [384 bits]
1644         Modulus (base 16) =
1645           8025363296FB943FCE54BE717E0E2958A02A9672EF561953B2BAA3BAACC3ED57
1646           54EB764C7AB7184578C57D5949CCB41B
1647         Generator = 2
1649       [512 bits]
1650         Modulus (base 16) =
1651           D4C7F8A2B32C11B8FBA9581EC4BA4F1B04215642EF7355E37C0FC0443EF756EA
1652           2C6B8EEB755A1C723027663CAA265EF785B8FF6A9B35227A52D86633DBDFCA43
1653         Generator = 2
1655       [640 bits]
1656         Modulus (base 16) =
1657           C94D67EB5B1A2346E8AB422FC6A0EDAEDA8C7F894C9EEEC42F9ED250FD7F0046
1658           E5AF2CF73D6B2FA26BB08033DA4DE322E144E7A8E9B12A0E4637F6371F34A207
1659           1C4B3836CBEEAB15034460FAA7ADF483
1660         Generator = 2
1662       [768 bits]
1663         Modulus (base 16) =
1664           B344C7C4F8C495031BB4E04FF8F84EE95008163940B9558276744D91F7CC9F40
1665           2653BE7147F00F576B93754BCDDF71B636F2099E6FFF90E79575F3D0DE694AFF
1666           737D9BE9713CEF8D837ADA6380B1093E94B6A529A8C6C2BE33E0867C60C3262B
1667         Generator = 2
1669       [1024 bits]
1670         Modulus (base 16) =
1671           EEAF0AB9ADB38DD69C33F80AFA8FC5E86072618775FF3C0B9EA2314C9C256576
1672           D674DF7496EA81D3383B4813D692C6E0E0D5D8E250B98BE48E495C1D6089DAD1
1673           5DC7D7B46154D6B6CE8EF4AD69B15D4982559B297BCF1885C529F566660E57EC
1674           68EDBC3C05726CC02FD4CBF4976EAA9AFD5138FE8376435B9FC61D2FC0EB06E3
1675         Generator = 2
1679 Burdis & Naffah          Expires July 13, 2002                 [Page 30]
1681 Internet-Draft             SRP SASL Mechanism               January 2002
1684       [1280 bits]
1685         Modulus (base 16) =
1686           D77946826E811914B39401D56A0A7843A8E7575D738C672A090AB1187D690DC4
1687           3872FC06A7B6A43F3B95BEAEC7DF04B9D242EBDC481111283216CE816E004B78
1688           6C5FCE856780D41837D95AD787A50BBE90BD3A9C98AC0F5FC0DE744B1CDE1891
1689           690894BC1F65E00DE15B4B2AA6D87100C9ECC2527E45EB849DEB14BB2049B163
1690           EA04187FD27C1BD9C7958CD40CE7067A9C024F9B7C5A0B4F5003686161F0605B
1691         Generator = 2
1693       [1536 bits]
1694         Modulus (base 16) =
1695           9DEF3CAFB939277AB1F12A8617A47BBBDBA51DF499AC4C80BEEEA9614B19CC4D
1696           5F4F5F556E27CBDE51C6A94BE4607A291558903BA0D0F84380B655BB9A22E8DC
1697           DF028A7CEC67F0D08134B1C8B97989149B609E0BE3BAB63D47548381DBC5B1FC
1698           764E3F4B53DD9DA1158BFD3E2B9C8CF56EDF019539349627DB2FD53D24B7C486
1699           65772E437D6C7F8CE442734AF7CCB7AE837C264AE3A9BEB87F8A2FE9B8B5292E
1700           5A021FFF5E91479E8CE7A28C2442C6F315180F93499A234DCF76E3FED135F9BB
1701         Generator = 2
1703       [2048 bits]
1704         Modulus (base 16) =
1705           AC6BDB41324A9A9BF166DE5E1389582FAF72B6651987EE07FC3192943DB56050
1706           A37329CBB4A099ED8193E0757767A13DD52312AB4B03310DCD7F48A9DA04FD50
1707           E8083969EDB767B0CF6095179A163AB3661A05FBD5FAAAE82918A9962F0B93B8
1708           55F97993EC975EEAA80D740ADBF4FF747359D041D5C33EA71D281E446B14773B
1709           CA97B43A23FB801676BD207A436C6481F1D2B9078717461A5B9D32E688F87748
1710           544523B524B0D57D5EA77A2775D2ECFA032CFBDBF52FB3786160279004E57AE6
1711           AF874E7303CE53299CCC041C7BC308D82A5698F3A8D0C38271AE35F8E9DBFBB6
1712           94B5C803D89F7AE435DE236D525F54759B65E372FCD68EF20FA7111F9E4AFF73
1713         Generator = 2
1735 Burdis & Naffah          Expires July 13, 2002                 [Page 31]
1737 Internet-Draft             SRP SASL Mechanism               January 2002
1740 Appendix B. Changes since the previous draft
1742    The underlying message digest algorithm for SRP calculations is now
1743    selected during an exchange between the server and client. Section
1744    4.2 and Section 4.3 have been amended to reflect this change.
1746    Changed "mechanisms" to "mechanism" in various places and fixed the
1747    mechanism name to "SRP."
1749    Removed "Mechanism Names" section, since it is no longer needed, and
1750    replaced with "Introduction."
1752    Changed the mechanism data exchanges in Section 4 so that the
1753    authorisation identity (I) is sent with the authentication identity
1754    (U).
1756    Added a new bullet point to Section 7.1 justifying the selection of
1757    SHA-160 as the MANDATORY Message Digest Algorithm for SRP
1758    calculations.
1760    Added a new paragraph to Section 8 giving Tom Wu's response to the
1761    SRP password-guessing attack pointed out by Robert Moskowitz.
1763    Added Ken Murchison to Section 9.
1765    Used "**" consistently as the symbol for the exponentiation operator.
1767    Re-ordered the references alphabetically.
1791 Burdis & Naffah          Expires July 13, 2002                 [Page 32]
1793 Internet-Draft             SRP SASL Mechanism               January 2002
1796 Full Copyright Statement
1798    Copyright (C) The Internet Society (2002). All Rights Reserved.
1800    This document and translations of it may be copied and furnished to
1801    others, and derivative works that comment on or otherwise explain it
1802    or assist in its implementation may be prepared, copied, published
1803    and distributed, in whole or in part, without restriction of any
1804    kind, provided that the above copyright notice and this paragraph
1805    are included on all such copies and derivative works. However, this
1806    document itself may not be modified in any way, such as by removing
1807    the copyright notice or references to the Internet Society or other
1808    Internet organizations, except as needed for the purpose of
1809    developing Internet standards in which case the procedures for
1810    copyrights defined in the Internet Standards process must be
1811    followed, or as required to translate it into languages other than
1812    English.
1814    The limited permissions granted above are perpetual and will not be
1815    revoked by the Internet Society or its successors or assigns.
1817    This document and the information contained herein is provided on an
1818    "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
1819    TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
1820    BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
1821    HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
1822    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
1824 Acknowledgement
1826    Funding for the RFC editor function is currently provided by the
1827    Internet Society.
1847 Burdis & Naffah          Expires July 13, 2002                 [Page 33]