Hi Mike,

> On 4 Feb 2022, at 15:30, Mike Jones 
> <Michael.Jones=40microsoft....@dmarc.ietf.org> wrote:
> 
> 
> Neil, thanks for your review.  First, you wrote:
>  
> > Using a (hash of a) public key as an identifier is an idea that has 
> > historically been subject to various attacks such as unknown key share 
> > attacks, as well as issues due to malleable signature schemes or key 
> > exchange schemes - where the same proof of identity is valid under many 
> > public keys. The security considerations should mention these issues, and 
> > potential suggest countermeasures (eg including the full public key JWK in 
> > the input to be signed etc).
>  
> I’m not all that familiar with the attacks you’re referencing.  Is there I 
> write-up on them that you could refer me and the other working group members 
> to so we can better understand them?  And ideally, could you write up a 
> paragraph or two on them that you’d like us to include in the Security 
> Considerations?

I’ll have a look and see if there is a concise write up somewhere. To give you 
an idea, here are some potential attacks:

Firstly, in ECDSA for example each signature is typically valid for at least 
two public keys, and these keys can be easily recovered from the signature 
itself [1]. So if Alice is using an ECDSA signature as proof of her identity, 
and her identity is a (hash of a) public key, then it is also a valid proof of 
identity for a different identity (different JWK thumbprint). This makes an 
authentication scheme based on this ambiguous, which is not usually a good 
thing.

A similar thing can happen with ECDH-based key exchanges or authenticated 
encryption schemes (like my own ECDH-1PU) with certain elliptic curves. In this 
case you can add “points of small order” to a public key to derive a new public 
key that will produce the same ECDH shared secrets (or even simpler change the 
PK point (x,y) to (x,-y)). The attacker in this case can’t decrypt or tamper 
with a message but they can claim that it came from their public key instead of 
the real originator. Again, this can make the same proof of identity valid for 
two or more identities if you use public keys as identities. 

In both cases these “attacks” can be avoided by including the identities/public 
keys in the input to the signature (or KDF for ECDH). For example, EdDSA 
already does this, and this is a recommended best practice for ECDH (sadly 
missing from JWE). An alternative is to define a canonical public key for each 
given signature and reject non-canonical keys. 

Whether these “attacks” actually lead to a vulnerability or not depends on 
exactly what you are doing. But it is a surprising property that can lead to 
subtle issues as the security considerations of RFC 7748 note [2]:

“ Designers using these curves should be aware that for each public
   key, there are several publicly computable public keys that are
   equivalent to it, i.e., they produce the same shared secrets.  Thus
   using a public key as an identifier and knowledge of a shared secret
   as proof of ownership (without including the public keys in the key
   derivation) might lead to subtle vulnerabilities.”

Adding wording along those lines (generalised to mention signatures too) would 
be good. I’ll come up with some wording. 

Other security issues can arise when a public key hash is informally associated 
with some other kind of identifier without a strong binding between the two. 
For example, the unknown key share attacks described in RFC 8844 [3].

[1]: https://crypto.stackexchange.com/a/60219
[2]: https://datatracker.ietf.org/doc/html/rfc7748#section-7
[3]: https://www.rfc-editor.org/rfc/rfc8844.html

— Neil

>  
> Second, you asked that the hash algorithm be made explicit, as did Vladimir.  
> I’ll consult with Kristina on that today and respond to that suggestion in a 
> subsequent message.
>  
>                                                        Thanks again,
>                                                        -- Mike
>  
> From: OAuth <oauth-boun...@ietf.org> On Behalf Of Vladimir Dzhuvinov
> Sent: Thursday, February 3, 2022 11:00 PM
> To: oauth@ietf.org
> Subject: [EXTERNAL] Re: [OAUTH-WG] WGLC for JWK Thumbprint URI document
>  
> The original JWK thumbprint RFC 7638 essentially describes the method for 
> composing the hash input from a JWK and that the output is base64url encoded. 
> SHA-256 is mentioned, but there is no default implied hash function. This 
> leaves it to applications / other specs to determine.
> 
> https://www.rfc-editor.org/rfc/rfc7638.html#section-3.4
> 
> The URN gives us now a natural possibility to encode the hash function 
> alongside the fact that it's a JWK thumbprint, so let's include it. This will 
> make things more explicit and self-contained.
> 
> What do the authors think about this possibility?
> 
> ~Vladimir
> 
> Vladimir Dzhuvinov
> On 04/02/2022 01:47, Neil Madden wrote:
> The draft doesn’t specify which hash function is being used. I assume it is 
> SHA-256, but it should either say that is the only algorithm allowed or 
> perhaps encode the hash algorithm into the URI. Otherwise the value is 
> ambiguous. 
>  
> Using a (hash of a) public key as an identifier is an idea that has 
> historically been subject to various attacks such as unknown key share 
> attacks, as well as issues due to malleable signature schemes or key exchange 
> schemes - where the same proof of identity is valid under many public keys. 
> The security considerations should mention these issues, and potential 
> suggest countermeasures (eg including the full public key JWK in the input to 
> be signed etc). 
>  
> — Neil
> 
> 
> On 2 Feb 2022, at 12:19, Rifaat Shekh-Yusef <rifaat.s.i...@gmail.com> wrote:
> 
> 
> All,
>  
> The JWK Thumbprint URI document is a simple and straightforward specification.
>  
> This is a WG Last Call for this document:
> https://www.ietf.org/archive/id/draft-ietf-oauth-jwk-thumbprint-uri-00.html
>  
> Please, provide your feedback on the mailing list by Feb 16th.
>  
> Regards,
>  Rifaat & Hannes
>  
>  
> _______________________________________________
> OAuth mailing list
> OAuth@ietf.org
> https://www.ietf.org/mailman/listinfo/oauth
> 
> 
> _______________________________________________
> OAuth mailing list
> OAuth@ietf.org
> https://www.ietf.org/mailman/listinfo/oauth
> _______________________________________________
> OAuth mailing list
> OAuth@ietf.org
> https://www.ietf.org/mailman/listinfo/oauth
_______________________________________________
OAuth mailing list
OAuth@ietf.org
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to