Network Working Group                                          J. Schaad
Internet-Draft                                   Soaring Hawk Consulting
Intended status: Informational                             June 23, 2012
Expires: December 25, 2012


            JOSE Serialization Proposal for Multiple People
                     draft-schaad-jose-serialize-00

Abstract

   This is a fast proposal for doing serialization of JOSE signature,
   authentication and encryption formats.

Status of this Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at http://datatracker.ietf.org/drafts/current/.

   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."

   This Internet-Draft will expire on December 25, 2012.

Copyright Notice

   Copyright (c) 2012 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (http://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.






Schaad                  Expires December 25, 2012               [Page 1]


Internet-Draft             JOSE Serialization                  June 2012


Table of Contents

   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  3
     1.1.  Constraints and Design Issues  . . . . . . . . . . . . . .  3
   2.  Serialization Formats  . . . . . . . . . . . . . . . . . . . .  4
     2.1.  JSON Serialization . . . . . . . . . . . . . . . . . . . .  4
     2.2.  String Serialization . . . . . . . . . . . . . . . . . . .  4
   3.  Header JSON construction . . . . . . . . . . . . . . . . . . .  6
   4.  Canonicalization . . . . . . . . . . . . . . . . . . . . . . .  7
   5.  Signature Processing Steps . . . . . . . . . . . . . . . . . .  8
     5.1.  Signature Creation . . . . . . . . . . . . . . . . . . . .  8
   6.  Authentication Processing Steps  . . . . . . . . . . . . . . .  9
     6.1.  Authentication Creation  . . . . . . . . . . . . . . . . .  9
   7.  Encryption Processing Steps  . . . . . . . . . . . . . . . . . 10
     7.1.  Encryption Creation  . . . . . . . . . . . . . . . . . . . 10
   8.  Security Considerations  . . . . . . . . . . . . . . . . . . . 11
   9.  IANA Considerations  . . . . . . . . . . . . . . . . . . . . . 12
   10. References . . . . . . . . . . . . . . . . . . . . . . . . . . 13
     10.1. Normative References . . . . . . . . . . . . . . . . . . . 13
     10.2. Informative References . . . . . . . . . . . . . . . . . . 13
   Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 14






























Schaad                  Expires December 25, 2012               [Page 2]


Internet-Draft             JOSE Serialization                  June 2012


1.  Introduction

   This is a simple fast proposal for doing serialization of JOSE
   signature, authentication and encryption formats.  The proposal is
   setup to allow for multiple signatures or recipients to be created.

1.1.  Constraints and Design Issues

   This is what controlled the format.

   1.  Minimal changes to the other JOSE documents.  This is not to be
       interpreted as an endorsement of those documents but instead is
       to reduce the current set of arguments to a minimum.

   2.  Assume that when creating a signature operation, all signatures
       are to be applied at one time.  If additional signatures are to
       be added it will be done as a nested rather than parallel
       signature.  This avoids the issues of [RFC6211] which was
       designed to prevent removal of parallel signatures.  Since all of
       the parallel signature information is signed, this cannot be done
       without breaking all of the signatures.

   3.  Assume that when doing an authenticated or encrypted operation,
       all recipients will be defined at the time that the message is
       created.  If new recipients are to be added in the future, then a
       new authentication value will need to be created.

   4.  Long field names are used for the purpose of clarity.  If
       adopted, it is assumed that shorter field names will be used.






















Schaad                  Expires December 25, 2012               [Page 3]


Internet-Draft             JOSE Serialization                  June 2012


2.  Serialization Formats

   This document describes both a version that is encoded as a JSON
   object and also a simple string.

2.1.  JSON Serialization

   The JSON serialization format is a JSON object the following fields:

   Header  has a string value that contains the base64 encoded header
      for the JSON security.  The header is either a single entity or a
      multiple entity header value.  This element is REQUIRED.

   Content  has a string value that contains the base64 encoded content
      value.  This element is OPTIONAL.  If this element is present then
      the ContentURI element MUST be absent.

   ContentURI  has a URI for the location of the content.  This element
      is OPTIONAL.  If this element is present then the Content element
      MUST be absent.

   Signatures  contains the signature value(s) associated with the
      header.  The element is either a single string or an array of
      strings.  The string value(s) contain the base64 encoded signature
      value.  This element is OPTIONAL.  It MUST be present if a
      signature operation has been done.

   MAC  has a string value that contains the base64 encoded message
      authentication value.  This element is OPTIONAL.  It MUST be
      present if an authentication or AEAD encryption operation has been
      done.

2.2.  String Serialization

   The simple string serialization matches the current serialization
   method.

   A string is constructed by concatenating the following items:

   1.  The Header value from the JSON serialization.

   2.  A period character.

   3.  The Content value from the JSON serialization.  This element MAY
       be omitted if the content is location known.

   4.  A period character.




Schaad                  Expires December 25, 2012               [Page 4]


Internet-Draft             JOSE Serialization                  June 2012


   5.  Either the Signatures or MAC value from the JSON serialization.


















































Schaad                  Expires December 25, 2012               [Page 5]


Internet-Draft             JOSE Serialization                  June 2012


3.  Header JSON construction

   The header consists of either a single header object or an array of
   header objects.  If it is a single header, then object is the same as
   in the current documents.  If the header is an array of objects The
   JSON header structure consists of the field headers which is an array
   of objects.  Each of the objects is a SJON header structure from the
   current documents.

   When doing either encryption or authentication, there is one
   additional new field which is placed in the current set of header
   fields.

   wrappedKey  is an OPTIONAL string element.  The value is the base64
      encoded wrapped CMK.  The CMK is then used either as the CEK for
      encryption or the MAC key for authentication.  It is RECOMMENDED
      that this value be used for authentication rather than directly
      using a pre-shared secret.  For encryption this key replaces the
      second field in the simple serialization.  For authentication this
      is a new element.

   When a sender creates a header JSON string, the following rules
   apply:

   1.  The string produce MUST be a well formed JSON string.

   2.  The string MUST NOT have any leading or trailing whitespace.

   3.  For every name-value pair, there MUST NOT be another name-value
       pair with the same name in the same lexical context.

   4.  The canonicalization algorithm in Section 4 SHOULD be applied to
       the string.

   When a recipient parses the header JSON string, the following rules
   apply:

   1.  There MUST be no leading or trailing whitespace characters.

   2.  Every character in the string MUST be consumed during parsing.

   3.  Every name in every lexical context MUST be unique.

   If any of these rules fail, then processing of the header MUST fail.







Schaad                  Expires December 25, 2012               [Page 6]


Internet-Draft             JOSE Serialization                  June 2012


4.  Canonicalization

   This canonicalization algorithm is designed for compactness of
   representation.  This algorithm does not have the same purpose as
   canonicalization algorithms in the XML Digital Signature world where
   it is applied by both the sender and the recipient to produce a
   binary stream for hashing.

   The canonicalization algorithm consists of applying the following
   rules:

   1.  Whitespace preceding and following the brace characters is
       removed.

   2.  Whitespace preceding and following the colon character is
       removed.

   3.  Whitespace preceding the comma character is removed.

   4.  Whitespace is collapsed into a single space character.

   The preceding rules apply only in the syntax space, it does not apply
   to values.




























Schaad                  Expires December 25, 2012               [Page 7]


Internet-Draft             JOSE Serialization                  June 2012


5.  Signature Processing Steps

5.1.  Signature Creation

   The following steps are descriptive rather than proscriptive.  Any
   other processing that produces the same result is acceptable.

   1.   Create the header object containing all of the desired and
        required parameters.

   2.   Serialize the header to an array of bytes using the UTF8
        Encoding.

   3.   Hash the binary version of the header

   4.   Apply the Base64URL encoding to the binary version of the
        header.

   5.   Create the content to be signed.  If the content is to be
        represented as in JSON , then the object is serialized to a byte
        array using the UTF8 Encoding.

   6.   Hash the content.

   7.   Apply the base64URL encoding to the content.

   8.   Compute the signature(s).

   9.   If there is a single object, then base64URL encode the signature
        value.  If there are multiple signatures then create an object
        with the array of signature values, serialize it to a binary
        stream and base64URL encode the resulting binary stream.

   10.  Apply the appropriate serialization process.

















Schaad                  Expires December 25, 2012               [Page 8]


Internet-Draft             JOSE Serialization                  June 2012


6.  Authentication Processing Steps

6.1.  Authentication Creation

   The following steps are descriptive rather than proscriptive.  Any
   other processing that produces the same result is acceptable.

   1.   Create the header object containing all of the desired and
        required parameters.

        A.  Create a per message key to be used in the authentication
            process.

        B.  For each recipient - wrap the key by a unique key for the
            recipient and identify which key is to be used for
            unwrapping the per message key.

        C.  In some circumstances (one recipient and transient key) a
            shared key can be identified and used as the per message
            key.

   2.   Serialize the header to an array of bytes using the UTF8
        Encoding.

   3.   MAC the binary version of the header

   4.   Apply the Base64URL encoding to the binary version of the
        header.

   5.   Create the content to be authenticated.  If the content is to be
        represented as in JSON , then the object is serialized to a byte
        array using the UTF8 Encoding.

   6.   MAC the content.

   7.   Apply the base64URL encoding to the content.

   8.   Finish computing the MAC value.

   9.   Base64URL encode the resulting MAC value.  (Note there is a
        single MAC value as there is only one message key.)

   10.  Apply the appropriate serialization process.








Schaad                  Expires December 25, 2012               [Page 9]


Internet-Draft             JOSE Serialization                  June 2012


7.  Encryption Processing Steps

7.1.  Encryption Creation

   The following steps are descriptive rather than proscriptive.  Any
   other processing that produces the same result is acceptable.

   1.   Create the header object containing all of the desired and
        required parameters.

        A.  Create a per message key to be used in the encryption
            process.

        B.  For each recipient - wrap the key by a unique key for the
            recipient and identify which key is to be used for
            unwrapping the per message key.

        C.  In some circumstances (one recipient and transient key) a
            shared key can be identified and used as the per message
            key.

   2.   Serialize the header to an array of bytes using the UTF8
        Encoding.

   3.   Pass in the header as the auxiliary data to the AEAD algorithm

   4.   Apply the Base64URL encoding to the binary version of the
        header.

   5.   Create the content to be encrypted.  If the content is to be
        represented as in JSON , then the object is serialized to a byte
        array using the UTF8 Encoding.

   6.   Encrypt and authenticate the content.

   7.   Apply the base64URL encoding to the encrypted content.

   8.   Finish computing the MAC value.

   9.   Base64URL encode the resulting MAC value.  (Note there is a
        single MAC value as there is only one message key.)

   10.  Apply the appropriate serialization process.








Schaad                  Expires December 25, 2012              [Page 10]


Internet-Draft             JOSE Serialization                  June 2012


8.  Security Considerations

   To be supplied
















































Schaad                  Expires December 25, 2012              [Page 11]


Internet-Draft             JOSE Serialization                  June 2012


9.  IANA Considerations

   No action by IANA is required for this document.
















































Schaad                  Expires December 25, 2012              [Page 12]


Internet-Draft             JOSE Serialization                  June 2012


10.  References

10.1.  Normative References

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

10.2.  Informative References

   [RFC6211]  Schaad, J., "Cryptographic Message Syntax (CMS) Algorithm
              Identifier Protection Attribute", RFC 6211, April 2011.








































Schaad                  Expires December 25, 2012              [Page 13]


Internet-Draft             JOSE Serialization                  June 2012


Author's Address

   Jim Schaad
   Soaring Hawk Consulting

   Email: ietf@augustcellars.com













































Schaad                  Expires December 25, 2012              [Page 14]