-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

On 10/20/14, 10:15 AM, Richard Barnes wrote:
> 
> 
> On Sat, Oct 11, 2014 at 5:14 PM, Mike Jones 
> <[email protected] <mailto:[email protected]>> 
> wrote:
> 
>> From: Richard Barnes [mailto:[email protected] <mailto:[email protected]>] 
>> Sent: Friday, October 10, 2014 3:20 PM To: Mike Jones Cc: The 
>> IESG; [email protected]
> <mailto:[email protected]>; [email protected] 
> <mailto:[email protected]>; 
> [email protected] 
> <mailto:[email protected]>
>> Subject: Re: [jose] Richard Barnes' Discuss on
> draft-ietf-jose-json-web-signature-33: (with DISCUSS and COMMENT)
>> 
>> On Mon, Oct 6, 2014 at 3:54 AM, Mike Jones
> <[email protected] <mailto:[email protected]>>
>  wrote:
>> Thanks for your review, Richard.  I'm repeating my previous
> responses from my Thursday reply, but this time using ">" quoting 
> rather than colors, for better readability by people not using 
> HTML-enabled mail readers...
>> 
>>> -----Original Message----- From: jose 
>>> [mailto:[email protected]
> <mailto:[email protected]>] On Behalf Of Richard Barnes
>>> Sent: Wednesday, October 01, 2014 9:22 PM To: The IESG Cc: 
>>> [email protected]
> <mailto:[email protected]>; [email protected] 
> <mailto:[email protected]>; draft-ietf-jose-json-web-
>>> [email protected] <mailto:[email protected]> 
>>> Subject: [jose] Richard Barnes' Discuss on
> draft-ietf-jose-json-web-signature-33:
>>> (with DISCUSS and COMMENT)
>>> 
>>> Richard Barnes has entered the following ballot position for 
>>> draft-ietf-jose-json-web-signature-33: Discuss
>>> 
>>> When responding, please keep the subject line intact and reply
> to all email
>>> addresses included in the To and CC lines. (Feel free to cut
> this introductory
>>> paragraph, however.)
>>> 
>>> 
>>> Please refer to
> http://www.ietf.org/iesg/statement/discuss-criteria.html
>>> for more information about IESG DISCUSS and COMMENT positions.
>>> 
>>> 
>>> The document, along with other ballot positions, can be found 
>>> here: 
>>> http://datatracker.ietf.org/doc/draft-ietf-jose-json-web-signature/
>
>>>
>>> 
>> 
>>> 
>>> 
>>> 
> ----------------------------------------------------------------------
>
>
> 
>> DISCUSS:
>>> 
> ----------------------------------------------------------------------
>
>
> 
>> 
>>> Overall, this document is in much more solid shape than when 
>>> it
> began.
>>> Thanks to the WG for a lot of hard work.  I only have two
> remaining concerns,
>>> which should hopefully be easy to address.
>>> 
>>> Section 7.2. I've had several implementers trying to use JWS
>>> in the JSON
> serialization ask why
>>> it was necessary to include a "signatures" array in cases
>>> where there's only one signer.  It seems like this is going to
>>> be a major barrier to deployment and re- use, so I would
>>> propose including the following text:
>>> 
>>> """ In cases where the JWS has been signed by only a single 
>>> signer, the "signatures" array will contain a single object. In
>>> such cases, the elements of the single "signatures" object MAY
>>> be included at the top level of the JWS object.  A JSON- 
>>> formatted JWS that contains a "signatures" field MUST NOT 
>>> contain a "protected", "header", or "signature" field, and
>>> vice versa. """
>>> 
>>> This may also require some other changes where "signatures" is 
>>> relied on, e.g., in Section 9 of the JWE spec.
>> This was previously proposed (I believe during the Denver
>> interim meeting) and rejected by the working group because it
>> complicates both producers and parsers by introducing an
>> unnecessary special case.  Currently, by design, whether there
>> are single or multiple signatures, the same syntax is used.  Your
>> proposal would use a different syntax in the single signature
>> case than in the multiple signature case.  This is likely to
>> result in implementation bugs and inconsistencies.
>> 
>> This assertion of complexity is bogus.  Have you implemented
>> this syntax, or can you point me to someone who has, and has had 
>> problems?  I have implemented it and I'm asking for the simpler 
>> syntax.  I've gotten the same request from others, for JWE.
> 
> I'm not saying that anything is insurmountable.  I'm saying that 
> having two equivalent syntaxes in the JSON Serialization for the 
> same thing is going to make it more likely that some 
> implementations won't correctly support both of them.  For those 
> following along, those two syntaxes would be:
> 
> { "payload":"<payload contents>", "signatures":[ 
> {"protected":"<integrity-protected header 1 contents>", 
> "header":<non-integrity-protected header 1 contents>, 
> "signature":"<signature 1 contents>"}] }
> 
> and
> 
> { "payload":"<payload contents>",
> "protected":"<integrity-protected header 1 contents>",
> "header":<non-integrity-protected header 1 contents>,
> "signature":"<signature 1 contents>" }
> 
> 
> It's worth noting that the multi-signer case reduces to the 
> single-signer case, e.g.:
> 
> <script> var JWS = get_jws(); if ("signatures" in JWS) { // i = 
> index of a signature we'll use JWS.protected = 
> JWS.signatures[i].protected JWS.header = JWS.signatures[i].header 
> JWS.signature = JWS.signatures[i].signature } else if (! 
> ("signature" in JWS) && (("protected" in JWS) || ("header" in 
> JWS))) { throw "malformed JWS"; } var result = 
> validate_single_signer_jws(JWS) </script>
> 
> Or copy "payload" up into each signature object.  Or iterate 
> through signatures and see which ones work.  Either way, you're 
> going to build this with a "verify single signature" primitive.
> 
> 
> 
> Is your motivating use case a profile of the JSON Serialization in
>  which multiple signatures aren't used or supported, and so for 
> which the array notation would always be superfluous syntax?  Are 
> you concerned that if this profile becomes the predominant use 
> case, that some/many implementations wouldn't implement the more 
> general multi-signature syntax (or would implement it incorrectly, 
> since it would normally not ever be used or tested)?
> 
> 
> If you look at existing uses for signed objects (such as they are),
> single-signer is by far the dominant use case, so requiring the
> multiple signer notation is would almost always be superfluous 
> syntax.
> 
> I'm not all that concerned about support for multi-sig.  If 
> implementations care about it, it will get built.  And because of 
> the way this has been designed, it's easy to build once you've got 
> the single-signer version (see above).
> 
> 
> 
> I'd love to hear others in the working group chime in on this 
> topic...
> 

As I think I've said in previous discussions about the JSON
serialization, I can live with something verbose *BUT* would rather
like a lighter syntax for the single-sig JSON serialization.  It's by
far the most common usecase, so optimizing for it seems like a good thing.

>>> Section 6. """ These Header Parameters MUST be integrity 
>>> protected if the information that they convey is to be
>>> utilized in a trust decision. """ This smells really fishy to
>>> me. What's your attack scenario?  I'm pretty certain that
>>> there's no way any of these fields can be altered in such a way
>>> that (1) the signature will validate, and (2) the recipient
>>> will accept a key it shouldn't.  By way of contrast, CMS
>>> doesn't sign the certificate fields, and the Certificate
>>> payload in TLS is only signed as a side effect of the
>>> protocol's verification that the remote end has been the same
>>> through the whole handshake (which doesn't apply here).
>> 
>> The attack scenario is trivial to describe.  If an attacker can 
>> change information used in a trust decision, the trust decision 
>> has no validity.  Unless the information is integrity-protected, 
>> the attacker could change the non-integrity-protected portions
>> of the JWS in an undetectable way.
>> 
>> That's hand waving, not an attack scenario.  Allow me to 
>> elaborate on this:
>> 
>> There is no possible attack scenario for the key identifiers
>> that identify a *key* (vs. a cert) -- jwk, jku, and kid.  For
>> any given signed object, there is exactly one key that can
>> validate the signature (otherwise the crypto is broken).  If the
>> attacker changes the validation key, then the signature won't
>> validate. So there is no need to integrity protect these headers,
>> since there's no point to the attacker changing them.  RFC 2634 
>> actually has text to this effect:
>> 
>> """ The first version of this attack is a simple denial of 
>> service attack where an invalid certificate is substituted for 
>> the valid certificate. This renders the message unverifiable, as 
>> the public key in the certificate no longer matches the private 
>> key used to sign the message. """
> 
> It's not clear to me that enabling the attacker to substitute keys
>  and get the recipient to attempt to validate the signature with a
>  key of the attacker's choosing doesn't constitute at least a 
> portion of a viable attack scenario.  It may or may not (knowing 
> for sure is beyond my specific cryptographic expertise in this 
> area) and it may not now but may be in the future (when new
> attacks are created). Requiring these parameters to be integrity
> protected when used in a trust decision does no harm and may do
> substantial good.
> 
> 
> It seems pretty clear to me :)  Everything involved in signature 
> verification is public, so anything the attacker could do by 
> tricking a third party into verifying he could just as well do 
> himself.  The only exception to this would be if the verification 
> were somehow a side-channel for something else happening on the 
> verifier's machine, which seems pretty outlandish.
> 
> 
> 
>> With regard to the certificate identifiers ("x5u", "x5c", "x5t", 
>> and "x5t#S256"), the risks that Jim points out [RFC2634, Section 
>> 5] are real, but only apply in certain narrow circumstances. 
>> Namely, the only time a risk arises is when two certificates
>> have been issued for the same public key, with different
>> attributes. This is exceedingly rare in practice, and all current
>> secure messaging systems get along fine without protection
>> against this attack.  And it might not even be an attack -- you
>> could envision cases with "x5u" where the signer purposely
>> presents different certificates to different relying parties! So
>> the blanket requirement that these fields MUST be integrity
>> protected is not appropriate.  It is only required for certain
>> special situations using certificates.  Proposed revision:
>> Delete: "These Header Parameters MUST be integrity protected if
>> the information that they convey is to be utilized in a trust
>> decision."
> 
> Researching the history a bit more, this text was added to address
>  issue #104 http://trac.tools.ietf.org/wg/jose/trac/ticket/104 
> raised by Jim Schaad.  Unless Jim agrees that it is now somehow 
> unnecessary, I don't believe that it's reasonable for us to now 
> remove it.  Also, see Jim's related comments about trust statements
> and trust decisions in issue #74.
> 
> 
> I would note that issue #104 was closed without any discussion on 
> the list (AFAICT).  And that issue only related to "jku", so the 
> extension to all the other fields is unnecessary.  See my response 
> to Jim for why it's not necessary for "jku" either.
> 
> As far as issue #74, that appears to be about not using the URI as 
> an element of the trust decision unless the identity in the URI is
>  authenticated.  I read that as to mean that the subject of the URI
>  authenticated itself, e.g., using HTTPS server authentication.
> 
> 
> 
> 
>> Add new paragraph: "In situations where multiple certificates 
>> with
> different attributes may be issued over the same public key, there
>  is a risk that one of these certificates may be substituted for 
> another. In such situations, the creator of a JWS object MUST 
> integrity protect the "x5u", "x5c", "x5t", and "x5t#S256" 
> attributes, if present."
>> 
>> For what it's worth, Sean had us add language in a number of
> places that basically said that information is only as trustworthy
>  as its source and the means by which it is obtained.  If I 
> remember correctly, this was one of those places.
>> 
>>> 
> ----------------------------------------------------------------------
>
>
> 
>> COMMENT:
>>> 
> ----------------------------------------------------------------------
>
>
> 
>> 
>>> Section 2. In the definition of "Unsecured JWS", it would be 
>>> good to note
> that this requires
>>> "alg" == "none".
>> 
>> OK
>> 
>>> Section 3.3. Why doesn't this section have a JSON-encoded form 
>>> as well?
>> 
>> Because it's meant to be a simple introductory example to help
> people get their head around the concept - not a complete
> tutorial. Other examples of JSON-encoded objects are found
> elsewhere in the document and lots of them are found in
> draft-ietf-jose-cookbook.
>> 
>>> Appendix A.5. I would prefer if this example could be removed. 
>>> JWT is the
> only use case for
>>> Unsecured JWS right now, and there's already an example in 
>>> that
> document.
>> 
>> Mike> Given that it's important that implementers using them
> understand Unsecured JWSs, there is motivation to retain the 
> example.  I'd be interested in what others in the working group 
> think, given that there was substantial support for retaining this
>  functionality when its removal was proposed.
>> 
>>> Thanks for Appendix C.  FWIW, it has been implemented:
>>> 
> http://dxr.mozilla.org/mozilla-central/source/dom/crypto/CryptoBuffer.cpp#85
>
>
> 
> 
>> You're welcome.
>> 
>>> _______________________________________________ jose mailing 
>>> list [email protected] <mailto:[email protected]> 
>>> https://www.ietf.org/mailman/listinfo/jose
>> 
>> Thanks again! -- Mike
> 
> -- Mike
> 
> 
> 
> 
> _______________________________________________ jose mailing list 
> [email protected] https://www.ietf.org/mailman/listinfo/jose
> 


- -- 
- - m&m

Matt Miller < [email protected] >
Cisco Systems, Inc.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG/MacGPG2 v2.0.22 (Darwin)
Comment: GPGTools - https://gpgtools.org

iQEcBAEBCgAGBQJURTwQAAoJEDWi+S0W7cO1bH0IALWtE7ZjYJgjtxeXtZCbHK1a
XZX1BcInXWEJa09tddnfU4kkHM26bcwO0KWUEcAgqaJGZawKFdB2SxpLnG3U1Cm3
LMzBtfYF1VhZgoh4YomuQkT8rflooy15PvlGBbbENjiVl/6KZiZ745lN86EEuXvI
+qX9Ltjf3VfupqMYafE79FP8yO+18O8EaYY66+njPQYm0kvTQQ1c6RJbAYlxjo4M
Zr5cmpTjEvS3wspHfE4fBiEp/kbjpGJ57jKSpKOK1hocibu6uMeEc9ImWWOgT6+5
u/ylFqkwMf8mvI3rLWIczJBSE/zl2G7cX/h+DJdustdaFjubYiMQH/YmMhWRcPw=
=sxXV
-----END PGP SIGNATURE-----

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

Reply via email to