/[suikacvs]/webroot/www/2004/id/draft-ietf-http-digest-aa-03.txt
Suika

Contents of /webroot/www/2004/id/draft-ietf-http-digest-aa-03.txt

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations) (download)
Tue Jun 15 08:04:04 2004 UTC (20 years, 10 months ago) by wakaba
Branch: MAIN
CVS Tags: HEAD
File MIME type: text/plain
New

1 wakaba 1.1
2     HTTP Working Group Jeffery L. Hostetler
3     INTERNET-DRAFT John Franks
4     <draft-ietf-http-digest-aa-03.txt> Philip Hallam-Baker
5     Paul Leach
6     Ari Luotonen
7     Eric W. Sink
8     Lawrence C. Stewart
9    
10     Expires SIX MONTHS FROM---> March 1, 1996
11    
12     A Proposed Extension to HTTP : Digest Access Authentication
13    
14     Status of this Memo
15    
16     This document is an Internet-Draft. Internet-Drafts are working
17     documents of the Internet Engineering Task Force (IETF), its areas,
18     and its working groups. Note that other groups may also distribute
19     working documents as Internet-Drafts.
20    
21     Internet-Drafts are draft documents valid for a maximum of six
22     months and may be updated, replaced, or obsoleted by other
23     documents at any time. It is inappropriate to use Internet-
24     Drafts as reference material or to cite them other than as
25     "work in progress."
26    
27     To learn the current status of any Internet-Draft, please check
28     the "1id-abstracts.txt" listing contained in the Internet-
29     Drafts Shadow Directories on ds.internic.net (US East Coast),
30     nic.nordu.net (Europe), ftp.isi.edu (US West Coast), or
31     munnari.oz.au (Pacific Rim).
32    
33     Distribution of this document is unlimited. Please send comments
34     to the proposed HTTP working group at <http-wg@cuckoo.hpl.hp.com>.
35     Discussions of the working group are archived at
36     <URL:http://www.ics.uci.edu/pub/ietf/http/>. General discussions
37     about HTTP and the applications which use HTTP should take place
38     on the <www-talk@www10.w3.org> mailing list.
39    
40     Abstract
41    
42     The protocol referred to as "HTTP/1.0" includes specification
43     for a Basic Access Authentication scheme. This scheme is not
44     considered to be a secure method of user authentication, as the
45     user name and password are passed over the network in an
46     unencrypted form. A specification for a new authentication scheme
47     is needed for future versions of the HTTP protocol. This document
48     provides specification for such a scheme, referred to as "Digest
49     Access Authentication". The encryption method used by default is the
50     RSA Data Security, Inc. MD5 Message-Digest Algorithm [2].
51    
52     Table of Contents
53    
54     1. Introduction
55     1.1 Purpose
56     1.2 Overall Operation
57     1.3 Representation of MD5 digest values
58     2. Basic Access Authentication Scheme
59     2.1 Specification of Digest Headers
60     2.2 Digest Operation
61     2.3 Security protocol negotiation
62     2.4 Example
63     3. Security Considerations
64     4. Acknowledgments
65     5. References
66     6. Authors Addresses
67    
68    
69     1. Introduction
70    
71     1.1 Purpose
72    
73     The protocol referred to as "HTTP/1.0" includes specification
74     for a Basic Access Authentication scheme[1]. This scheme is not
75     considered to be a secure method of user authentication, as the
76     user name and password are passed over the network in an
77     unencrypted form. A specification for a new authentication scheme
78     is needed for future versions of the HTTP protocol. This document
79     provides specification for such a scheme, referred to as "Digest
80     Access Authentication".
81    
82     The Digest Access Authentication scheme is not intended to be
83     a complete answer to the need for security in the World Wide Web.
84     This scheme provides no encryption of object content. The intent
85     is simply to facilitate secure access authentication.
86    
87     It is proposed that this access authentication scheme be included
88     in the proposed HTTP/1.1 specification.
89    
90     1.2 Overall Operation
91    
92     Like Basic Access Authentication, the Digest scheme is based on a
93     simple challenge-response paradigm. The Digest scheme challenges
94     using a nonce value. A valid response contains a checksum (by default
95     the MD5 checksum) of the username, the password, the given nonce
96     value, and the requested URI. In this way, the password is never sent
97     in the clear. Just as with the Basic scheme, the username and
98     password must be prearranged in some fashion which is not addressed
99     by this document.
100    
101     1.3 Representation of digest values
102    
103     An optional header allows the server to specify the algorithm
104     used to create the checksum or digest. By default the MD5
105     algorithm is used and that is the only algorithm described in
106     this document.
107    
108     For the purposes of this document, an MD5 digest of 128 bits
109     is represented as 32 ASCII printable characters. The bits
110     in the 128 bit digest are converted from most significant
111     to least significant bit, four bits at a time to their
112     ASCII presentation as follows. Each four bits is
113     represented by its familiar hexadecimal notation from the
114     characters 0123456789abcdef. That is binary 0000 gets
115     represented by the character '0', 0001, by '1', and so on
116     up to the representation of 1111 as 'f'.
117    
118    
119     1.4 Limitations
120    
121     The digest authentication scheme described in this document suffers
122     from many known limitations. It is intended as a replacement for
123     basic authentication and nothing more. It is a password-based system
124     and (on the server side) suffers from all the same problems of any
125     password system. In particular no provision is made in this protocol
126     for the initial secure arrangement between user and server
127     establishing the user's password.
128    
129     Users and implementors should be aware that this protocol is not as
130     secure as kerberos, and not as secure as any client-side private-key
131     scheme. Nevertheless it is better than nothing, better than what is
132     commonly used with telnet and ftp and better than Basic
133     authentication.
134    
135    
136     2. Digest Access Authentication Scheme
137    
138     2.1 Specification of Digest Headers
139    
140     The Digest Access Authentication scheme is conceptually similar to the Basic
141     scheme. The formats of the modified WWW-Authenticate header line and the
142     Authorization header line are specified below. In addition, a new header,
143     Digest-MessageDigest, is specified as well.
144    
145     Due to formatting constraints, all of the headers are depicted here
146     on multiple lines. In actual usage, they must follow the syntactic
147     rules for HTTP/1.0 header lines [1]. Whitespace between the
148     attribute-value pairs is allowed.
149    
150     If a server receives a request for an access-protected object, and an
151     acceptable Authorization header is not sent, the server responds with:
152    
153     HTTP/1.1 401 Unauthorized
154     WWW-Authenticate: Digest realm="<realm>",
155     domain="<domain>",
156     nonce="<nonce>",
157     opaque="<opaque>",
158     stale="<TRUE | FALSE>",
159     algorithm="<digest-algorithm>"
160    
161    
162     The meanings of the identifiers used above are as follows:
163    
164     <realm>
165     A string to be displayed to users so they know which
166     username and password to use. This string should contain
167     at least the name of the host performing the authentication
168     and might additionally indicate the collection of users who
169     might have access. An example might be
170     "registered users @ gotham.news.com."
171    
172     <domain> OPTIONAL
173     A comma separated list of URIs, as specified for HTTP/1.0. The
174     intent is that the client could use this information to know the
175     set of URIs for which the same authentication information should be
176     sent. The URIs in this list may exist on different servers. If
177     this keyword is omitted or empty, the client should assume that
178     the domain consists of all URIs on the responding server.
179    
180     <nonce>
181     A server-specified data string which may be uniquely generated each
182     time a 401 response is made. It is recommended that this string be
183     base64 or hexadecimal data. Specifically, since the string is passed
184     in the header lines as a quoted string, the double-quote character
185     is not allowed.
186    
187     The contents of the nonce is implementation dependent. The
188     quality of the implementation depends on a good choice. A
189     recommended nonce would include
190    
191     H(<client IP> + ":" + <timestamp> + ":" + <private key> )
192    
193     Where <client IP> is the dotted quad IP address of the client
194     making the request, <timestamp> is a server generated time value,
195     <private key> is data known only to the server. With a nonce
196     of this form a server would normally recalculate the nonce
197     after receiving the client authentication header and reject
198     the request if it did not match the nonce from that header.
199     In this way the server can limit the reuse of a nonce to
200     the IP address to which it was issued and limit the time of
201     the nonce's validity. A server might also wish to include
202     the client request or the contents of the Host: header in
203     the data digested to create the nonce. Further discussion
204     of the rationale for nonce construction is in section 3.2
205     below.
206    
207     An implementation might choose not to accept a previously used
208     <nonce> or a previously used <digest> to protect against a
209     replay attack. Or, an implementation might choose to use
210     one-time nonces or digests for POST or PUT requests and a
211     timestamp for GET requests. For more details on the issues
212     involved see section 3. of this document.
213    
214     The nonce is opaque to the client.
215    
216     <opaque> OPTIONAL
217     A string of data, specified by the server, which should returned by
218     the client unchanged. It is recommended that this string be
219     base64 or hexadecimal data. Specifically, since the string is passed
220     in the header lines as a quoted string, the double-quote character
221     is not allowed.
222    
223     <stale> OPTIONAL
224     A flag, indicating that the previous request from the client
225     was rejected because the nonce value was stale. If stale
226     is TRUE, the client may wish to simply retry the request with
227     a new encrypted response, without reprompting the user for a
228     new username and password. The server should only set stale
229     to true if it receives a request for which the nonce is invalid
230     but with a valid digest for that nonce (indicating the the client
231     knows the correct username/password).
232    
233     <algorithm> OPTIONAL
234     A string indicating the algorithm used to produce the digest
235     or checksum. If this not present the MD5 algorithm is assumed.
236     In this document the string obtained by applying this algorithm
237     to the data "<data>" will be denoted by H(<data>).
238    
239    
240     The client is expected to retry the request, passing an Authorization header
241     line as follows:
242    
243     Authorization: Digest
244     username="<username>", -- required
245     realm="<realm>", -- required
246     nonce="<nonce>", -- required
247     uri="<requested-uri>", -- required
248     response="<digest>", -- required
249     message="<message-digest>", -- OPTIONAL
250     algorithm="<digest-algorithm>" -- OPTIONAL
251     opaque="<opaque>", -- required if provided
252     by server
253    
254     where <digest> := H( H(A1) + ":" + N + ":" + H(A2) )
255     and <message-digest> := H( H(A1) + ":" + N + ":" + H(<entity-body>) )
256    
257     where:
258    
259     A1 := U + ':' + R + ':' + P
260     A2 := <Method> + ':' + <requested-uri>
261    
262     with:
263     N -- nonce value
264     U -- username
265     R -- realm
266     P -- password
267    
268     <Method> is the HTTP method specified at the beginning of the
269     first line of the client request. <requested-uri> is the part
270     of the requested URL transmitted by the client to the server
271     in the first line of an HTTP request. In particular it does
272     not include the "http://host:port" part of the URL but does
273     include any "query" part which might, for example, include form
274     data after a '?' in the URL.
275    
276     The purpose of the <message-digest> is to allow the server to
277     ensure that the content of the request body has not been tampered
278     with after leaving the client. This would normally be used with a
279     POST or PUT request and would allow the server to check the validity
280     of the posted data. The <entity-body> is the "entity body" as
281     prescribed in the Hypertext Transfer Protocol version 1.1.
282    
283     When authorization succeeds, the Server may optionally provide the
284     following:
285    
286     HTTP/1.1 200 OK
287     Digest-MessageDigest:
288     message="<message-digest>",
289     nextnonce="<nextnonce>"
290    
291     The Digest-MessageDigest header indicates that the server
292     wants to communicate some information regarding the
293     successful authentication (such as a message digest or a
294     new nonce to be used for the next transaction).
295    
296     <message-digest> is computed by the same algorithm given
297     above for the body of the client request. This allows the
298     client to verify that the body of the response has not been
299     changed en-route. The server would probably only send this
300     when it has the document and can compute it. The server would
301     probably not bother generating this header for CGI output.
302    
303     <nextnonce> is the nonce the server wishes the client to use for
304     the next authentication response. Either field is optional. In
305     particular the server may send the Digest-MessageDigest header
306     with only the nextnonce=<nextnonce> field as a means of
307     implementing one-time nonces. If the nextnonce field is present
308     the client is strongly encouraged to use it for the next
309     WWW-Authenticate header. Failure of the client to do so may
310     result in a request to re-authenticate from the server with
311     the "stale=TRUE."
312    
313     The Digest-MessageDigest header has many limitations. Only the
314     entity body is digested, not any headers. This limitation is due
315     to the fact that proxy caches may (and do) alter the headers of
316     documents which they relay. Future authentication schemes will
317     have to deal with the complexities imposed by the behavior of
318     intermediaries handling documents on their way from the origin
319     server to the client, but those issues are beyond the scope of
320     digest authentication, whose purpose is to replace Basic
321     Authentication. Despite its limitations the Digest-MessageDigest
322     can be useful.
323    
324     2.2 Digest Operation
325    
326     Upon receiving the Authorization information, the server may check
327     its validity by looking up its known password which corresponds to
328     the submitted <username>. Then, the server must perform the same
329     MD5 operation performed by the client, and compare the result to
330     the given <response>.
331    
332     Note that the HTTP server does not actually need to know the user's
333     clear text password. As long as H(A1) is available to the server, the
334     validity of an Authorization header may be verified.
335    
336     All keyword-value pairs must be expressed in characters from the
337     US-ASCII character set, excluding control characters.
338    
339     A client may remember the username, password and nonce values, so that
340     future requests within the specified <domain> may include the Authorization
341     line preemptively. The server may choose to accept the old Authorization
342     information, even though the nonce value included might not be fresh.
343     Alternatively, the server could return a 401 response with a new nonce
344     value, causing the client to retry the request. By specifying stale=TRUE
345     with this response, the server hints to the client that the request should
346     be retried with the new nonce, without reprompting the user for a new
347     username and password.
348    
349     The <opaque> data is useful for transporting state information around.
350     For example, a server could be responsible for authenticating content
351     which actual sits on another server. The first 401 response would include
352     a <domain> which includes the URI on the second server, and the <opaque>
353     for specifying state information. The client will retry the request, at
354     which time the server may respond with a 301/302 redirection, pointing
355     to the URI on the second server. The client will follow the redirection,
356     and pass the same Authorization line, including the <opaque> data which
357     the second server may require.
358    
359     As with the basic scheme, proxies must be completely transparent in
360     the Digest access authentication scheme. That is, they must forward the
361     WWW-Authenticate, Digest-MessageDigest and Authorization headers untouched.
362     If a proxy wants to authenticate a client before a request is forwarded to
363     the server, it can be done using the Proxy-Authenticate and
364     Proxy-Authorization headers.
365    
366     2.3 Security Protocol Negotiation
367    
368     It is useful for a server to be able to know which security schemes
369     a client is capable of handling.
370    
371     If this proposal is accepted as a required part of the HTTP/1.1
372     specification, then a server may assume Digest support when a client
373     identifies itself as HTTP/1.1 compliant.
374    
375     It is possible that a server may want to require Digest as its
376     authentication method, even if the server does not know that the client
377     supports it. A client is encouraged to fail gracefully if the server
378     specifies any authentication scheme it cannot handle.
379    
380     2.4 Example
381    
382     The following example assumes that an access-protected document is being
383     requested from the server. The URI of the document is
384     "http://www.nowhere.org/dir/index.html".
385    
386     Both client and server know that the username for this document is
387     "Mufasa", and the password is "CircleOfLife".
388    
389     The first time the client requests the document, no Authorization header
390     is sent, so the server responds with:
391    
392     HTTP/1.1 401 Unauthorized
393     WWW-Authenticate: Digest realm="testrealm@host.com",
394     nonce="72540723369",
395     opaque="5ccc069c403ebaf9f0171e9517f40e41"
396    
397     The client may prompt the user for the username and password, after which it
398     will respond with a new request, including the following Authorization
399     header:
400    
401     Authorization: Digest username="Mufasa",
402     realm="testrealm@host.com",
403     nonce="72540723369",
404     uri="/dir/index.html",
405     response="e966c932a9242554e42c8ee200cec7f6",
406     opaque="5ccc069c403ebaf9f0171e9517f40e41"
407    
408    
409     3. Security Considerations
410    
411     Digest Authentication does not provide provide a strong authentication
412     mechanism. That is not its intent. It is intended solely to replace
413     a much weaker and even dangerous authentication mechanism: Basic
414     Authentication. An important design constraint is that the new
415     authentication scheme be free of patent and export restrictions.
416    
417     Most needs for secure HTTP transactions cannot be met by Digest
418     Authentication. For those needs SSL or SHTTP are more appropriate
419     protocols. In particular digest authentication cannot be used for any
420     transaction requiring encrypted content. Nevertheless many functions
421     remain for which digest authentication is both useful and appropriate.
422    
423     3.1 Comparison with Basic Authentication
424    
425     Both Digest and Basic Authentication are very much on the weak end of
426     the security strength spectrum. But a comparison between
427     the two points out the utility, even necessity, of replacing Basic
428     by Digest.
429    
430     The greatest threat to the type of transactions for which these
431     protocols are used is network snooping. This kind of transaction
432     might involve, for example, online access to a database whose use is
433     restricted to paying subscribers. With Basic authentication an
434     eavesdropper can obtain the password of the user. This not only
435     permits him to access anything in the data base, but often worse, will
436     permit access to anything else the user protects with the same
437     password.
438    
439     By contrast, with Digest Authentication the eavesdropper only gets
440     access to the transaction in question and not to the user's password.
441     The information gained by the eavesdropper would permit a replay
442     attack, but only with a request for the same document and even
443     that might be difficult.
444    
445     3.2 Replay Attacks
446    
447     A replay attack against digest authentication would usually be
448     pointless for a simple GET request since an eavesdropper would
449     already have seen the only document he could obtain with a replay.
450     This is because the URI of the requested document is digested in
451     the client response and the server will only deliver that document.
452     By contrast under Basic Authentication once the eavesdropper has
453     the user's password any document protected by that password is open
454     to him. A GET request containing form data could only be "replayed"
455     with the identical data. However, this could be problematic if it
456     caused a CGI script to take some action on the server.
457    
458     Thus, for some purposes, it is necessary to protect against replay
459     attacks. A good digest implementation can do this in various ways.
460     The server created "nonce" value is implementation dependent, but if
461     it contains a digest of the client IP, a timestamp, and a private
462     server key (as recommended above) then a replay attack is not
463     simple. An attacker must convince the server that the request is
464     coming from a false IP address and must cause the server to deliver
465     the document to an IP address different from the address to which it
466     believes it is sending the document. An attack can only succeed in
467     the period before the timestamp expires. Digesting the client
468     IP and timestamp in the nonce permits an implementation which does
469     not maintain state between transactions.
470    
471     For applications where no possibility of replay attack can be
472     tolerated the server can use one-time response digests which will
473     not be honored for a second use. This requires the overhead of
474     the server remembering which digests have been used until the
475     nonce timestamp (and hence the digest built with it) has expired,
476     but it effectively protects against replay attacks. Instead of
477     maintaining a list of the values of used digests, a server would
478     hash these values and require re-authentication whenever a hash
479     collision occurs.
480    
481     An implementation must give special attention to the possibility of
482     replay attacks with POST and PUT requests. A successful replay
483     attack could result in counterfeit form data or a counterfeit
484     version of a PUT file. The use of one-time digests or one-time
485     nonces is recommended. It is also recommended that the optional
486     <message-digest> be implemented for use with POST or PUT requests
487     to assure the integrity of the posted data. Alternatively, a server
488     may choose to allow digest authentication only with GET requests.
489     Responsible server implementors will document the risks described
490     here as they pertain to a given implementation.
491    
492     3.3 Man in the Middle
493    
494     Both Basic and Digest authentication are vulnerable to "man in the
495     middle" attacks, for example, from a hostile or compromised proxy.
496     Clearly, this would present all the problems of eavesdropping. But it
497     could also offer some additional threats. In particular, even with
498     digest authentication, a hostile proxy might spoof the client into
499     making a request the attacker wanted rather than one the client
500     wanted. Of course, this is still much harder than a comparable
501     attack against Basic Authentication.
502    
503     3.4 Spoofing by Counterfeit Servers
504    
505     Basic Authentication is vulnerable to spoofing by counterfeit servers.
506     If a user can be led to believe that she is connecting to a host
507     containing information protected by a password she knows when
508     in fact she is connecting to a hostile server then the hostile server
509     can request a password, store it away for later use, and feign an
510     error. This type of attack is not possible with Digest Authentication.
511    
512     3.5 Summary
513    
514     By modern cryptographic standards Digest Authentication is weak. But
515     for a large range of purposes it is valuable as a replacement for
516     Basic Authentication. It remedies many, but not all, weaknesses of
517     Basic Authentication. Its strength may vary depending on the
518     implementation. In particular the structure of the nonce (which is
519     dependent on the server implementation) may affect the ease of
520     mounting a replay attack. A range of server options is appropriate
521     since, for example, some implementations may be willing to accept the
522     server overhead of one-time nonces or digests to eliminate the
523     possibility of replay while others may satisfied with a nonce like
524     the one recommended above restricted to a single IP address and with
525     a limited lifetime.
526    
527     The bottom line is that *any* compliant implementation will be
528     relatively weak by cryptographic standards, but *any* compliant
529     implementation will be far superior to Basic Authentication.
530    
531    
532     4. Acknowledgments
533    
534     In addition to the authors, valuable discussion instrumental in
535     creating this document have come from Peter J Churchyard, Ned Freed,
536     and David Kristol.
537    
538    
539     5. References
540    
541     [1] T. Berners-Lee, R. T. Fielding, H. Frystyk Nielsen.
542     "Hypertext Transfer Protocol -- HTTP/1.0"
543     Internet-Draft (work in progress), UC Irvine,
544     <URL:http://ds.internic.net/internet-drafts/
545     draft-ietf-http-v10-spec-00.txt>, March 1995.
546    
547     [2] RFC 1321. R.Rivest, "The MD5 Message-Digest Algorithm",
548     <URL:http://ds.internic.net/rfc/rfc1321.txt>,
549     April 1992.
550    
551     6. Authors Addresses
552    
553     John Franks
554     john@math.nwu.edu
555     Professor of Mathematics
556     Department of Mathematics
557     Northwestern University
558     Evanston, IL 60208-2730, USA
559    
560     Phillip M. Hallam-Baker
561     hallam@w3.org
562     European Union Fellow
563     CERN
564     Geneva
565     Switzerland
566    
567     Jeffery L. Hostetler
568     jeff@spyglass.com
569     Senior Software Engineer
570     Spyglass, Inc.
571     3200 Farber Drive
572     Champaign, IL 61821, USA
573    
574     Paul J. Leach
575     paulle@microsoft.com
576     Microsoft Corporation
577     1 Microsoft Way
578     Redmond, WA 98052, USA
579    
580     Ari Luotonen
581     luotonen@netscape.com
582     Member of Technical Staff
583     Netscape Communications Corporation
584     501 East Middlefield Road
585     Mountain View, CA 94043, USA
586    
587     Eric W. Sink
588     eric@spyglass.com
589     Senior Software Engineer
590     Spyglass, Inc.
591     3200 Farber Drive
592     Champaign, IL 61821, USA
593    
594     Lawrence C. Stewart
595     stewart@OpenMarket.com
596     Open Market, Inc.
597     215 First Street
598     Cambridge, MA 02142, USA
599    
600    
601    

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24  
Google Analytics is used in this page; Cookies are used. 忍者AdMax is used in this page; Cookies are used. Privacy policy.