That is why one would be in the 'enc' sub-object, something like this:
{
, 'kid': // signing key id
, 'alg': // signing algorithm
, 'enc':
{ 'kid': // encryption key id
, 'alg': // encryption algorithm
}
}
On Dec 19, 2012, at 1:31 PM, Richard Barnes <[email protected]> wrote:
> In which order? Just having two "kid" values seems ambiguous.
>
>
> On Dec 19, 2012, at 3:02 PM, Dick Hardt <[email protected]> wrote:
>
>> Um, yeah.
>>
>> I have the keys backwards.
>>
>> If I am signing with my private key and encrypting with the recipients
>> public key …
>>
>> On Dec 19, 2012, at 11:42 AM, Dick Hardt <[email protected]> wrote:
>>
>>> Hi Mike
>>>
>>> Either I don't understand your answer or you don't understand what I was
>>> saying, so let me elaborate.
>>>
>>> If I am signing with the recipients public key and encrypting with my
>>> private key, I need to have two 'kid' values and possible other
>>> cryptography header values.
>>>
>>> -- Dick
>>>
>>> On Dec 19, 2012, at 11:36 AM, Mike Jones <[email protected]>
>>> wrote:
>>>
>>>> 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
>
_______________________________________________
jose mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/jose