> At IETF 84, I suggested that we take another look at what header
> information gets integrity-protected and what doesn't.  The main issue
> being that in multiple-recipient or multiple-signer scenarios, there's
> unnecessary duplication of data if recipient- or signer-specific
> information is in the integrity-protected header.

The unnecessary duplication could be avoided while retaining full header 
integrity protection if the JOSE syntax explicitly supported multiple 
recipients/signers.

Richard’s JSMS draft, and Mike’s JWS-JS/JWE-JS drafts show that people want 
specs for the multiple recipients/signers situations so I think we would be 
better off supporting these cases in the core syntax from the start.

Multiple recipients/signers does add some complexity to the simplest (and 
commonest) cases, but I suspect the change can be really quite minor for a 
party that knows they only ever want to support a single recipient/signer. The 
change basically just moves a few fields from a top-level JSON object to the 
first JSON object in an array. Syntax overhead is 8 bytes, using "r" for 
recipients.

FROM     { ..., "x":123, "y":456, ... }
TO       { ..., "r":[{"x":123, "y":456}], ... }


With support in the core for multiple recipients/signers, full integrity 
protection would only cause duplication when multiple parties are added *at 
separate times* (ie after a JOSE message has been created). The XMPP use case 
did need this (Alice creates a JOSE message for Bob; later Bob’s server adds 
Bob's phone and Bob’s laptop as new recipients), but that feels like quite a 
specialized case that JOSE need not optimize for.


> Following some on what Bob Wyman proposed this afternoon, I would like
> to propose that we split the set of header fields into some logical
> groupings:
> 1. Top-level fields that require integrity protection (e.g., cty or a
> digest algorithm parameter)
> 2. Top-level fields that do not require integrity protection (e.g.,
> x5c)
> 3. Fields that are specific to a signer (e.g., jwk)
> 4. Fields that are specific to a recipient (e.g., epk)

Would another possibility for #2 be wrapping a JOSE message as the content of 
another unprotected JOSE message that has the fields not requiring protection? 
For example (without base64url-encoding for clarity):

  { "alg":"none", "x5c":["MIIE3…"], "ocsp":["MIeR…"]}.<inner-JOSE-message>.

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

Reply via email to