Internet DRAFT - draft-barbato-scs

draft-barbato-scs






Network Working Group                                         S. Barbato
Internet-Draft                                              S. Dorigotti
Expires: March 9, 2007                                        T. Fossati
                                                               KoanLogic
                                                       September 5, 2006


                  SCS: Secure Cookie Sessions for HTTP
                          draft-barbato-scs-00

Status of this Memo

   By submitting this Internet-Draft, each author represents that any
   applicable patent or other IPR claims of which he or she is aware
   have been or will be disclosed, and any of which he or she becomes
   aware will be disclosed, in accordance with Section 6 of BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF), its areas, and its working groups.  Note that
   other groups may also distribute working documents as Internet-
   Drafts.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   The list of current Internet-Drafts can be accessed at
   http://www.ietf.org/ietf/1id-abstracts.txt.

   The list of Internet-Draft Shadow Directories can be accessed at
   http://www.ietf.org/shadow.html.

   This Internet-Draft will expire on March 9, 2007.

Copyright Notice

   Copyright (C) The Internet Society (2006).

Abstract

   This document provides an overview of SCS, a cryptographic protocol
   aimed at the protection of "client-side" HTTP sessions, i.e. sessions
   in which the application state is held entirely on the client in the
   form of cookies [10].






Barbato, et al.           Expires March 9, 2007                 [Page 1]

Internet-Draft    SCS: Secure Cookie Sessions for HTTP    September 2006


1.  Requirements Notation

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in [1].














































Barbato, et al.           Expires March 9, 2007                 [Page 2]

Internet-Draft    SCS: Secure Cookie Sessions for HTTP    September 2006


2.  Introduction

   SCS is a cryptographic protocol aimed at protecting "client-side"
   HTTP sessions, i.e. sessions in which the application state (for
   example, whether or not authentication credentials have been
   provided) is held by the client in the form of cookies [10].

   SCS allows HTTP servers to handle application-level sessions in a
   completely stateless manner.

   The server delegates the application state storage to the client
   (browser) - which basically acts as a remote storage device.  The
   cryptographic transformations are applied to the state data so that
   confidentiality and information authenticity attributes exchanged
   between parties have the same characteristics as for typical "server-
   side" sessions.

   The following are a few scenarios in which SCS can be used:

   1.  devices with little or no storage - typically embedded devices -
       which provide functionality such as software updates,
       configuration, device monitoring, etc. via an HTTP interface;

   2.  web applications with HA or load balancing requirements, which
       may delegate handling of the application state to clients instead
       of using shared storage or forced peering.

























Barbato, et al.           Expires March 9, 2007                 [Page 3]

Internet-Draft    SCS: Secure Cookie Sessions for HTTP    September 2006


3.  Protocol

   The SCS protocol defines:

   o  a PDU, as a well-defined aggregate of cookies (Section 3.1);

   o  cryptographic transformations which manipulate the PDU fields
      (Section 3.2);

   o  the HTTP-based PDU exchange model (Section 3.3)

   Note that the PDU is transmitted to the client as an opaque data
   block and no interpretation or validation is necessary.  The single
   requirement for client-side support of SCS is cookie activation on
   the browser, so only the server is involved in the PDU manipulation
   process.

   In the following sections we define S to be one or more
   interchangeable HTTP server entities (e.g. a server pool in a load-
   balanced or HA environment) and C to be the client with a cookie-
   enabled browser.

3.1.  PDU Description

   S and C exchange the same PDU (Section 3.3), which consists of a set
   of cookies transformed into a single block by cryptographic
   functions.  Confidentiality is limited to the application state
   information (i.e.  SCS_DATA cookie), while integrity and
   authentication apply to the entire PDU.

   Cookie (name/value) length cannot exceed 4KB [10].  In practice, this
   is only an application state data limit, although one can use as many
   SCS_DATA cookies as required, where SCS_DATA{N} is the cookie
   containing the n'th payload section of the session data (already
   compressed and/or encrypted as required).

3.1.1.  SCS_ATIME

   Timestamp relating to the last read or write operation performed on
   session data.  This value is updated with each client contact
   operation and is used to identify expired sessions.  A session is
   considered to be expired, and hence no longer valid, if the memorised
   SCS_ATIME timestamp is older than the predefined time value
   "session_max_age", which is chosen by S as an application-level
   parameter.






Barbato, et al.           Expires March 9, 2007                 [Page 4]

Internet-Draft    SCS: Secure Cookie Sessions for HTTP    September 2006


3.1.2.  SCS_DATA

   Block of encrypted and optionally compressed data, containing session
   state, which may be stored as name=value pairs or with any other
   semantics intelligible by the server.  If the total size of SCS_DATA
   exceeds 4KB, it is separated into N SCS_DATA{N} cookies, each 4KB in
   size and so that the concatenation of their values in the order of
   cookie name (1, 2, ..., N) yields the original SCS_DATA.  The
   specification [10] suggests that browsers accept at least twenty
   cookies per server.  It follows that the maximum size for the state
   data block (possibly compressed) is 64KB (16 * 4KB).

3.1.3.  SCS_TID

   Unique identifier of the transform set (encryption and/or
   authentication keys and possible encryption, authentication and
   compression algorithms applied, etc.) used to generate this PDU.  SCS
   assumes that a key-agreement/distribution mechanism exists for
   environments in which S consists of multiple servers (it may consist
   of a simple key-refresh in the case |S|=1), which provides a unique
   external identifier for each transform set defined and shared amongst
   pool members.  This identifier (equivalent to a SPI in a Data
   Security SA [6]) is represented in the cookie value.

3.1.4.  SCS_IV

   Initialisation Vector used for the encryption algorithm
   (Section 3.2).  In order to avoid providing correlation information
   to a possible attacker with access to a sample of SCS PDUs, the IV
   MUST be created randomly for each PDU.

3.1.5.  SCS_AUTHTAG

   Authentication tag based on the concatenation of SCS_ATIME, SCS_DATA,
   SCS_TID and SCS_IV.

3.2.  Crypto Transform

   SCS could potentially use any combination primitives capable of
   performing authenticated encryption.  In practice an encrypt-then-mac
   approach [12] with CBC-mode encryption and HMAC [8] autentication was
   chosen.  The two algorithms MUST be associated with two independent
   keys.

   The possibility of using UMAC for authentication [9] was taken into
   consideration, but priority was given to space over performance: the
   nonce field transfer would require an extra cookie, therefore
   reducing the space reserved to state information by another 4KB.



Barbato, et al.           Expires March 9, 2007                 [Page 5]

Internet-Draft    SCS: Secure Cookie Sessions for HTTP    September 2006


   The following conventions will be used in the algorithm description
   (Section 3.2.5 and Section 3.2.4)

   o  Enc/Dec(): encryption/decryption functions (Section 3.2.1);

   o  HMAC(): authentication function (Section 3.2.1);

   o  Comp/Uncomp(): compression/decompression functions
      (Section 3.2.2);

   o  e/d(): cookie value encoding/decoding functions (Section 3.2.3);

   o  '||': concatenation operator;

   o  RAND(): random number generator [5]

3.2.1.  Cipher Suite

   Implementors MUST support at least the following algorithms:

   o  AES-CBC-128 for encryption;

   o  HMAC-SHA1 with a 128 bit key for authenticity and integrity,

   which appear to be sufficiently secure in a wide range of use cases
   [11] and are widely available.  One should consider using larger
   cryptographic key lengths (192 or 256 bit) according to the actual
   security and overall system performance requirements.

3.2.2.  Compression

   Compression, which may be useful or even necessary when handling
   large quantities of data, is not compulsory (in such case Comp/Uncomp
   are replaced by an identity matrix).  DEFLATE [4] format support is
   recommended if this function is enabled.

3.2.3.  Cookie Encoding

   base-64 [3] is used for encoding/decoding of cookie values.  It is
   quite efficient in terms of space occupation and is very wide-spread.











Barbato, et al.           Expires March 9, 2007                 [Page 6]

Internet-Draft    SCS: Secure Cookie Sessions for HTTP    September 2006


3.2.4.  Outbound Transform

   The output data transformation as seen by the server (the only actor
   which manipulates PDUs) is illustrated by the following pseudo-code:

   1.  iv = RAND()
   2.  atime = NOW
   3.  data = Enc(Comp(state))
   4.  tag = HMAC(data||atime||tid||iv)

   NOW is defined as the current timestamp of the server clock.  Since
   the only user of the atime field is the server, it is unnecessary for
   it to be synchronised with the client.  However, if multiple servers
   are active in a load-balancing configuration, clocks SHOULD be
   synchronised to avoid errors in the calculation of session expiry.

   Hence the SCS PDU fields are created as follows:

       SCS_ATIME = e(atime)
       SCS_AUTHTAG = e(tag)
       SCS_DATA = e(data)
       SCS_TID = e(tid)
       SCS_IV = e(iv)

3.2.5.  Inbound Transform

   The inbound transformation is described by the following:

   1.  If (tid is available)
   2.      data' = d($SCS_DATA)
           atime' = d($SCS_ATIME)
           tid' = d($SCS_TID)
           iv' = d($SCS_IV)
           tag' = d($SCS_AUTHTAG)
   3.      tag = HMAC(data'||atime'||tid'||iv')
   4.      If (tag == tag' && NOW - atime' <= session_max_age)
   5.          state = Uncomp(Dec(data'))
   6.      Else discard PDU
   7.  Else discard PDU

   If the cryptographic credentials (encryption and authentication keys
   identified by SCS_TID) are unavailable (step 7.), the inbound PDU
   cannot be interpreted correctly.  This may happen for several
   reasons: for example, if a device without storage is resetted and
   loses the credentials stored in RAM, or if a server pool node
   desynchronises, etc.

   Note that step 4. allows any altered packets or expired sessions to



Barbato, et al.           Expires March 9, 2007                 [Page 7]

Internet-Draft    SCS: Secure Cookie Sessions for HTTP    September 2006


   be discarded, hence avoiding unnecessary state decryption and
   decompression.

3.3.  PDU Exchange

   SCS can be modelled in the same manner as a typical store-and-forward
   protocol, in which the endpoints are S, consisting of one or more
   HTTP servers and the client C, a median node used to "temporarily"
   store the data to be successively forwarded to S.

   In brief, S and C exchange an immutable cookie data block
   (Section 3.1): the state is stored on the client at the first hop and
   then restored on the server at the second, as follows:

   1.  dump-state:

              Set-Cookie: SCS_DATA=...;
              expires=...; path=...;
              domani=...;
       S -->                           --> C
              Set-Cookie: SCS_TID=...;
              expires=...; path=...;
              domain=...;
              ...

   2.  restore-state:

              Cookie: SCS_DATA=...;
       C -->  Cookie: SCS_TID=...;     --> S
              ...





















Barbato, et al.           Expires March 9, 2007                 [Page 8]

Internet-Draft    SCS: Secure Cookie Sessions for HTTP    September 2006


4.  Key Management and Session State

   This specification provides some common recommendations and praxis
   relevant to cryptographic key management:

   o  the key SHOULD be generated securely following the randomness
      recommendations in [5];

   o  the key length SHOULD be at least 128 bits;

   o  the key SHOULD only be used to generate and verify SCS PDUs;

   o  the key SHOULD be replaced regularly as well as any time the
      format of SCS PDUs or cryptographic algorithms changes;

   Furthermore, to preserve the validity of active HTTP sessions upon
   renewal of cryptographic credentials (whenever the value of SCS_TID
   changes), a SCS server MUST be capabale of managing at least two
   transforms contemporarily: the currently instantiated one, and the
   predecessor.

   Each transform set is associated with an attribute pair: "refresh"
   and "expiry", which is used to identify the exposure limits (in terms
   of time or quantity of encrypted and/or authenticated bytes, etc) of
   related cryptographic material.

   In particular, the "refresh" attribute specifies the time limit for
   substitution of transform set T with new material T'.  From that
   moment onwards, and for an amount of time determined by "expiry", all
   new sessions will be created using T', while the active T-protected
   ones go through a translation phase in which:

   o  the inbound transformation authenticates and decrypts/decompresses
      using T (identified by SCS_TID);

   o  the outbound transformation encrypts/compresses and authenticates
      using T'


       T' {not valid yet} |---------------------|----------------
                          |  translation stage  |
       T  ----------------|---------------------| {no longer valid}
                        refresh         refresh + expiry

   Note that the duration of the HTTP session MUST fit within the
   lifetime of a given transform set (i.e. from creation time until
   "refresh" + "expiry").  In practice, this should not be an obstacle
   because the longevity of the two entities (HTTP session and SCS



Barbato, et al.           Expires March 9, 2007                 [Page 9]

Internet-Draft    SCS: Secure Cookie Sessions for HTTP    September 2006


   transform set) should differ by one or two orders of magnitude.

   An SCS server may take this into account by determining the duration
   of a session adaptively according to the expected deletion time of
   the active T, or by setting the "expiry" value to at least the
   maximum lifetime allowed by an HTTP session.

   Since there is only one refresh attribute also in situations with
   more than one key (e.g. one for encryption and one for
   authentication) within the same T, the smallest value is chosen.









































Barbato, et al.           Expires March 9, 2007                [Page 10]

Internet-Draft    SCS: Secure Cookie Sessions for HTTP    September 2006


5.  Security Considerations

   From a cryptographic architecture perspective, the described
   mechanism can be easily traced to an Encode-then-EtM scheme described
   in [12].  Given a "provably-secure" encryption scheme and MAC (as for
   the algorithms recommended in Section 3.2.1), [12] demonstrates that
   their composition results in a secure authenticated encryption
   scheme.

5.1.  Server Side vs SCS

   None of the common vulnerabilities of server-side sessions (SID
   prediction, SID brute forcing, session fixation [13]) can be
   exploited when using SCS, unless the attacker posesses encryption and
   HMAC keys (both current ones and those relating to the previous set
   of credentials).

   However, there may still be some risk related to traffic interception
   and reuse aimed at gaining the privileges of the intercepted user
   (Replay Attack).  In fact, as with server-side sessions, if an
   attacker gains posession of a given user's cookies - via simple
   passive interception or another technique - he/she will always be
   able to restore the state of an intercepted session by representing
   the captured data to the server.  The SCS_ATIME cookie along with the
   session_max_age configuration parameter can be used to mitigate the
   chances of an attack (by forcing a time window outside of which a
   given cookie is no longer valid), but cannot exclude it completely.

   The only real countermeasures in this case can be taken at
   application level (for example, by inserting a nonce within the state
   information) or at transport/network level using SSL/TLS [2] or IPSEC
   [7].



















Barbato, et al.           Expires March 9, 2007                [Page 11]

Internet-Draft    SCS: Secure Cookie Sessions for HTTP    September 2006


6.  References

6.1.  Normative References

   [1]   Bradner, S., "Key words for use in RFCs to Indicate Requirement
         Levels", BCP 14, RFC 2119, March 1997.

   [2]   Blake-Wilson, S., Nystrom, M., Hopwood, D., Mikkelsen, J., and
         T. Wright, "Transport Layer Security (TLS) Extensions",
         RFC 3546, June 2003.

   [3]   Josefsson, S., "The Base16, Base32, and Base64 Data Encodings",
         RFC 3548, July 2003.

   [4]   Deutsch, L., "DEFLATE Compressed Data Format Specification
         version 1.3", RFC 1951, May 1996.

   [5]   Eastlake, D., Schiller, J., and S. Crocker, "Randomness
         Requirements for Security", RFC 4086, June 2005.

   [6]   Hardjono, T. and B. Weis, "The Multicast Group Security
         Architecture", RFC 3740, March 2004.

   [7]   Kent, S. and K. Seo, "Security Architecture for the Internet
         Protocol", RFC 4301, December 2005.

   [8]   Krawczyk, H., Bellare, M., and R. Canetti, "HMAC: Keyed-Hashing
         for Message Authentication", RFC 2104, February 1997.

   [9]   Krovetz, T., "UMAC: Message Authentication Code using Universal
         Hashing", RFC 4418, March 2006.

   [10]  Kristol, D. and L. Montulli, "HTTP State Management Mechanism",
         RFC 2965, October 2000.

6.2.  Informative References

   [11]  Bellare, M., "New Proofs for NMAC and HMAC: Security Without
         Collision-Resistance", IACR 2006/043, 2006.

   [12]  Kohno, T., Palacio, A., and J. Black, "Building Secure
         Cryptographic Transforms, or How to Encrypt and MAC",
         IACR 2003/177, 2003.

   [13]  Kolsec, M., "Session Fixation Vulnerability in Web-based
         Applications", 2002.





Barbato, et al.           Expires March 9, 2007                [Page 12]

Internet-Draft    SCS: Secure Cookie Sessions for HTTP    September 2006


Authors' Addresses

   Stefano Barbato
   KoanLogic
   Via S. Maria Maggiore
   117
   Roma, RM  00185
   Italy

   Email: barbato@koanlogic.com
   URI:   http://www.koanlogic.com


   Steven Dorigotti
   KoanLogic
   Via Valvassori Peroni
   84
   Milano, MI  20133
   Italy

   Email: dorigotti@koanlogic.com
   URI:   http://www.koanlogic.com


   Thomas Fossati
   KoanLogic
   Via San Vitale
   88
   Bologna, BO  40125
   Italy

   Email: fossati@koanlogic.com
   URI:   http://www.koanlogic.com


















Barbato, et al.           Expires March 9, 2007                [Page 13]

Internet-Draft    SCS: Secure Cookie Sessions for HTTP    September 2006


Intellectual Property Statement

   The IETF takes no position regarding the validity or scope of any
   Intellectual Property Rights or other rights that might be claimed to
   pertain to the implementation or use of the technology described in
   this document or the extent to which any license under such rights
   might or might not be available; nor does it represent that it has
   made any independent effort to identify any such rights.  Information
   on the procedures with respect to rights in RFC documents can be
   found in BCP 78 and BCP 79.

   Copies of IPR disclosures made to the IETF Secretariat and any
   assurances of licenses to be made available, or the result of an
   attempt made to obtain a general license or permission for the use of
   such proprietary rights by implementers or users of this
   specification can be obtained from the IETF on-line IPR repository at
   http://www.ietf.org/ipr.

   The IETF invites any interested party to bring to its attention any
   copyrights, patents or patent applications, or other proprietary
   rights that may cover technology that may be required to implement
   this standard.  Please address the information to the IETF at
   ietf-ipr@ietf.org.


Disclaimer of Validity

   This document and the information contained herein are provided on an
   "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
   ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
   INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
   INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.


Copyright Statement

   Copyright (C) The Internet Society (2006).  This document is subject
   to the rights, licenses and restrictions contained in BCP 78, and
   except as set forth therein, the authors retain all their rights.


Acknowledgment

   Funding for the RFC Editor function is currently provided by the
   Internet Society.




Barbato, et al.           Expires March 9, 2007                [Page 14]