JOSE and many other specs have allowed algorithms to be specified at multiple 
security levels: a baseline 128-bit level, and then usually 192- and 256-bit 
levels too. It seems odd that a draft that is ostensibly for high security 
assurance environments would choose to only specify the lowest acceptable 
security level, especially when the 256-bit level has essentially negligible 
overhead. (OK, ~60 bytes additional overhead in a JWT - I’d be surprised if 
that was a deal breaker though).

Still, if the consensus of the WG is that this is not worth it, then I don’t 
want to delay the draft any further. I can always submit a 2 line RFC in future 
to add a SHA-512 confirmation method.

— Neil

> On 30 Apr 2018, at 23:58, John Bradley <ve7...@ve7jtb.com> wrote:
> 
> We allow for new thumbprint algorithms to be defined and used with this spec.
> I think that we all agree that is a good thing.
> 
> The question is if we should define them here or as part of JWT/CWT based on 
> broader demand.
> 
> Including them in this document may be a distraction in my opinion.   There 
> is no attack against SHA256 with a short duration token/key (days) that is 
> better solved by using a long duration token/key (years) with a longer hash.
> 
> That said it woiulden't like me.  I just think it will distract people in the 
> wrong direction.
> 
> John B.
> 
>> On Apr 30, 2018, at 7:23 PM, Neil Madden <neil.mad...@forgerock.com> wrote:
>> 
>> Responses inline again. 
>> 
>> On Mon, 30 Apr 2018 at 19:44, John Bradley <ve7...@ve7jtb.com> wrote:
>> Inline.
>> 
>> 
>>> On Apr 30, 2018, at 12:57 PM, Neil Madden <neil.mad...@forgerock.com> wrote:
>>> 
>>> Hi John,
>>> 
>>>> On 30 Apr 2018, at 15:07, John Bradley <ve7...@ve7jtb.com> wrote:
>>>> 
>>>> I lean towards letting new certificate thumbprints be defined someplace 
>>>> else.
>>>> 
>>>> With SHA256, it is really second preimage resistance that we care about 
>>>> for a certificate thumbprint, rather than simple collision resistance.  
>>> 
>>> That’s not true if you consider a malicious client. If I can find any pair 
>>> of certificates c1 and c2 such that SHA256(c1) == SHA256(c2) then I can 
>>> present c1 to the AS when I request an access token and later present c2 to 
>>> the protected resource when I use it. I don’t know if there is an actual 
>>> practical attack based on this, but a successful attack would violate the 
>>> security goal implied by the draft: that that requests made to the 
>>> protected resource "MUST be made […] using the same certificate that was 
>>> used for mutual TLS at the token endpoint.”
>>> 
>>> NB: this is obviously easier if the client gets to choose its own 
>>> client_id, as it can find the colliding certificates and then sign up with 
>>> whatever subject ended up in c1.
>>> 
>> 
>> Both C1 and C2 need to be valid certificates, so not just any collision will 
>> do.  
>> 
>> That doesn’t help much. There’s still enough you can vary in a certificate 
>> to generate collisions. 
>> 
>> If the client produces C1 and C2 and has the private keys for them, I have a 
>> hard time seeing what advantage it could get by having colliding certificate 
>> hashes.
>> 
>> Me too. But if the security goal is proof of possession, then this attack 
>> (assuming practical collisions) would break that goal. 
>> 
>> 
>> If the AS is trusting a CA, the attacker producing a certificate that 
>> matches the hash of another certificate so that it seems like the fake 
>> certificate was issued by the CA, is an attack that worked on MD5 given some 
>> predictability.  That is why we now have entropy requirements for 
>> certificate serial numbers, that reduce known prefix attacks.
>> 
>> The draft allows for self-signed certificates. 
>> 
>> Second-preimage Resistance is being computationaly infusible to find a 
>> second preimage that has the same output as the first preimage.   The second 
>> preimage strength for SHA256 is 201-256bits and collision resistance 
>> strength is 128 bits.  See Appendix A of 
>> https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-107r1.pdf
>>  if you want to understand the relationship between message length and 
>> second Preimage resistance.
>> 
>> RFC 4270 is old but still has some relevant info. 
>> https://tools.ietf.org/html/rfc4270
>> 
>> Think of the confirmation method as the out of band integrity check for the 
>> certificate that is presented in the TLS session.
>> 
>> This is all largely irrelevant. 
>> 
>>>> MD5 failed quite badly with chosen prefix collision attacks against 
>>>> certificates (Thanks to some X.509 extensions).
>>>> SHA1 has also been shown to be vulnerable to a PDF chosen prefix attack 
>>>> (http://shattered.io)
>>>> 
>>>> The reason NIST pushed for development of SHA3 was concern that a preimage 
>>>> attack might eventually be found agains the SHA2 family of hash 
>>>> algorithms. 
>>>> 
>>>> While SHA512 may have double the number of bytes it may not help much 
>>>> against a SHA2 preimage attack,. (Some papers  suggest that the double 
>>>> word size of SHA512 it may be more vulnerable than SHA256 to some attacks)
>>> 
>>> This is really something where the input of a cryptographer would be 
>>> welcome. As far as I am aware, the collision resistance of SHA-256 is still 
>>> considered at around the 128-bit level, while it is considered at around 
>>> the 256-bit level for SHA-512. Absent a total break of SHA2, it is likely 
>>> that SHA-512 will remain at a higher security level than SHA-256 even if 
>>> both are weakened by cryptanalytic advances. They are based on the same 
>>> algorithm, with different parameters and word/block sizes.
>>> 
>> SHA512 uses double words and more rounds, true.  It also has more rounds 
>> broken by known attacks than SHA256 https://en.wikipedia.org/wiki/SHA-2.. So 
>> it is slightly more complex than doubling the output size doubles the 
>> strength.
>> 
>> SHA-512 also has more rounds (80) than SHA-256 (64), so still has more 
>> rounds left to go...
>> 
>> 
>>>> 
>>>> It is currently believed that SHA256 has 256 bits of second preimage 
>>>> strength.   That could always turn out to be wrong as SHA2 has some 
>>>> similarities to SHA1, and yes post quantum that is reduced to 128bits. 
>>>> 
>>>> To have a safe future option we would probably want to go with SHA3-512.   
>>>> However I don’t see that getting much traction in the near term.  
>>> 
>>> SHA3 is also slower than SHA2 in software.
>> Yes roughly half the speed in software but generally faster in hardware.  
>> 
>> I am not necessarily arguing for SHA3, rather I think this issue is larger 
>> than this spec and selecting alternate hashing algorithms for security 
>> should be separate from this spec.
>> 
>> I am for agility, but I don’t want to accidentally have people doing 
>> something that is just theatre.
>> 
>> Rotating certificates, and having the lifetime of a certificates validity is 
>> as useful as doubling the hash size. 
>> 
>> Why not allow both? 
>> 
>> 
>> I don’t think the confirmation hash length is the weakest link.
>> 
>> Shouldn’t we allow all the parts to be as strong as possible?
>> 
>> 
>> John B.
>> 
>>> 
>>>> 
>>>> Practical things people should do run more along the lines of:
>>>> 1: Put at least 64 bits of entropy into the certificate serial number if 
>>>> using self signed or a local CA.  Commercial CA need to do that now.
>>>> 2: Rotate certificates on a regular basis,  using a registered JWKS URI
>>>> 
>>>> My concern is that people will see a bigger number and decide it is better 
>>>> if we define it in the spec.  
>>>> We may be getting people to do additional work and increasing token size 
>>>> without a good reason by putting it in the spec directly.
>>> 
>>> I’m not sure why this is a concern. As previously pointed out, SHA-512 is 
>>> often *faster* than SHA-256, and an extra 32 bytes doesn’t seem worth 
>>> worrying about.
>>> 
>>> [snip]
>>> 
>>> — Neil
>> — Neil
> 

_______________________________________________
OAuth mailing list
OAuth@ietf.org
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to