Hi Dick,

The way to do that with the current spec is to define a new composite 
encryption/integrity algorithm that does what you want.  For instance, the 
"A128CBC+HS256" composite algorithm performs encryption with AES CBC and the 
integrity check with HMAC SHA-256.  I could imagine an "A128CBC+ES256" 
algorithm that performs the encryption with AES CBC and the integrity 
calculation with ECDSA P-256 SHA-256.  The key for that composite algorithm 
could be the concatenation of a 128-bit CBC key and the ECDSA key.

For what it's worth, until draft -06, the block encryption algorithm and the 
integrity algorithm were separately specified (in "enc" and "int") parameters.  
The working group made a decision to only support encryption algorithms that 
provided integrity - hence the use of composite algorithms when using CBC 
(which doesn't provide integrity itself.  However, you still would have had to 
define a new "int" algorithm even when they were separate, because the only 
integrity algorithms specified were HS256, HS384, and HS512.

                                -- Mike

-----Original Message-----
From: [email protected] [mailto:[email protected]] On Behalf Of Dick 
Hardt
Sent: Tuesday, December 18, 2012 6:45 PM
To: Mike Jones
Cc: [email protected]; Dick Hardt
Subject: Re: [jose] Reducing the size of JWS payloads

Hi Mike

Thanks for bringing this up again. 

An alternative approach I proposed was to have both the encryption and signing 
information in one header, and to use the signing signature to ensure integrity 
instead of having a separate encryption integrity check. This would reduce the 
size of the token by the size of the integrity value +1 bytes, as well as 
reduce the processing.

Given that header properties are overloaded now (they have different meanings 
depending on being a JWE or JWS, we could put the encryption header values into 
a sub object in the header. Perhaps call that 'enc'.

-- Dick

The process below has 
On Dec 18, 2012, at 6:26 PM, Mike Jones <[email protected]> wrote:

> I've noticed that more than one person has expressed a desire to reduce the 
> size of JWS payloads before signing.  This especially comes up when nested 
> encryption and signing is being performed.  This note contains a quantitative 
> evaluation of some possible methods of reducing JWS payload size and asks for 
> working group input based upon the data.
> 
> Dick proposed one method below - have a header parameter to say that the 
> payload is already URL-safe and that base64url encoding is not to be 
> performed.  Another way that people have proposed is to allow the use of the 
> "zip" parameter to compress the JWS payload before base64url encoding.  To 
> get some initial data on how the solutions compare, I tried both methods 
> using the sample JWE value in 
> http://tools.ietf.org/html/draft-ietf-jose-json-web-encryption-07#appendix-A.2
>  as the JWS payload.
> 
> CURRENT SITUATION:  The JWE is 526 characters in length.  Currently, when 
> used as a JWS payload, base64url encoding it would increase its size to 702 
> characters - an increase of 33% or 176 characters.
> 
> AVOIDING DOUBLE BASE64URL ENCODING:  If we used a header parameter 
> "b64":false to indicate that no additional base64url encoding is to be 
> performed, the payload would be 176 characters smaller than the current 
> situation.  The encoded header size would increase by 16 characters - the 
> number of characters needed to base64url encode this header parameter value 
> and a comma, for a net decrease in size of 160 characters.  (Yes, parsing the 
> three pieces would be slightly more difficult.)
> 
> APPLYING DEFLATE TO THE PAYLOAD:  Believe it or not, using DEFLATE on this 
> input results in a LARGER output - 536 bytes or a net increase of 10 bytes.  
> If you think about it, this isn't too surprising, as the encrypted data 
> should contain no usable predictability/redundancy.  Base64url encoding these 
> 536 bytes results in a 715 character payload - an increase of 189 characters 
> or 36%.  Plus, adding "zip":"DEF" to the header adds 16 characters, for a 
> total increase of 29 characters over the current situation.  Clearly a 
> suboptimal choice!
> 
> CONCLUSION:  Clearly, if we're going to enable reduction of the size of JWS 
> payloads, avoiding the double base64url encoding is preferable to zip, which 
> actually makes things worse.
> 
> QUESTION TO WORKING GROUP:  I'm curious whether people would like to see us 
> enable avoiding double base64encoding of JWS payloads when they are already 
> URL-safe.  The space savings are significant; they come at the cost of the 
> JWS parsing becoming [part before first period . part between first and last 
> period . part after last period] rather than the current [part before first 
> period . part between first and second period . part after second period 
> (with no other periods allowed)].  Opinions?
> 
>                               -- Mike
> 
> -----Original Message-----
> From: [email protected] [mailto:[email protected]] On Behalf Of Dick 
> Hardt
> Sent: Monday, October 29, 2012 8:57 AM
> To: [email protected]
> Subject: [jose] signing an existing JWT
> 
> 
> Let's say we have created a JWE as such:
>       
>       
> headerOne.encryptedKeyOne.initializationVectorOne.ciphertextOne.integritityVectorOne
> 
> This is now the payload to a JWS. Rather than increasing the token size by 
> 4/3 by URL safe base 64 encoding the payload (since it is already URL safe), 
> it would be useful to have a JWS header parameter that indicates the payload 
> was not re-encoded and does not need to be URL safe base 64 decoded.
> 
> As there are more periods than expected in a JWS, decoding would ignore all 
> periods except the first and last one for separating out the header, payload 
> and signature.
> 
> The indicating parameter would seem to be either "tip" or "cty". I'm still 
> confused about the difference between the two parameters, so not sure which 
> one is appropriate.
> 
> -- Dick
> 
> 
> _______________________________________________
> jose mailing list
> [email protected]
> https://www.ietf.org/mailman/listinfo/jose
> 

_______________________________________________
jose mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/jose
_______________________________________________
jose mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/jose

Reply via email to