-
Notifications
You must be signed in to change notification settings - Fork 12
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Issuer-signed JWT Verification Key Validation - Separation of signature and identity verification/validation? #253
Comments
I think this makes sense only in the case of embedded X509 certificate. Otherwise, I think the "validation mechanism" (e.g. resolving the DID or downloading the keys from a web server) would always have to be executed anyway. There would be no extra value in having an embedded signing key, since an attacker that can replace the signature can also replace the signing key. And there would be a risk that implementers create security holes by considering the "validation mechanism" as something optional... Or am I missing anything? |
Excellent point @peacekeeper! There are always 2 processes
In many environments (high-loads, low connectivity, ...) we cannot rely on ". resolving the DID or downloading the keys from a web server would always have to be executed anyway". Furthermore, if the resource is not available, again, signature validation fails. Hence, these mechanisms (well-known, DIDs) should also define how identity information could be embedded in the signature (like x509, OIDFed, advanced signatures are already doing) - but this is out of scope of this specification and discussion. |
Thanks @alenhorvat
Yes, but what's the value of knowing that a payload has been signed by "someone", if you don't know who that key belongs to?
Yes that sounds useful! |
Goal is a bit broader - to clearly split and define the two processes, and show that x509 verification or .well-known/DIDs are all process of verifying the identity/identifier of the signer (link between a public key and an identifier). |
We discussed this topic with the other editor's. Our opinion is that including the @alenhorvat Is there a specific use case you have in mind that would be blocked by this? |
Challenges
Implementers MUST understand how to verify the identity, independently of the signature validation. This also forces the standard to clearly define the two verification streams. |
Related question: How can the Verifier/RP know whether issuer is truly Google or not? |
I think one way to address this is as follows and you have alluded to the same thing in your previous post:
This way, a verifier can cache the trusted root cert and use the contained end-entity cert in the For simplicity I didn't mention intermediate certs but they can be included in the This behaviour is enforced by X.509 itself (RFC5280) which requires certificate chain validation. If implementations don't have a trust point, the It seems you want to define the same thing for If you want to use DIDs and/or issuer metadata, wouldn't it be possible to support the use cases you just mentioned by simply caching DID resolution or the issuer metadata URL? |
IMO x5c/x5u+x5t are enough, but this document puts x509, jwk+URL, and DID on the same level. |
Nothing, but I believe this issue is solved by the trust framework and the provided trust points, isn't it? There are various mechanisms and based on my prior observations of different trust frameworks, there can be a lot of differences. In your specific example which I think has to be corrected (since an attacker would need to use Google's domain in the issuer identifier and not happy-issuer.com, to pretend to be Google), I believe the trust point is Internet PKI and if you don't trust the Internet PKI, it probably makes no sense to rely on issuer well-known alone or at all. You can combine this with X.509 (or even DIDs if required). |
wouldn't the "iss" value be: happy-issuer.com/issuers/google.com? x509 -> originates from own framework and defines the rules; no problems here |
Perhaps we are talking past each other but I thought you were concerned about impersonating Google in your example. I was saying that there is no reason for a verifier to think that the identity of happy-issuer.com/issuers/google.com is Google if it doesn't use one of Google's domains, right? |
What is google's identifier if they are using service hosted by the happy issuer? (in the case of using jwk + URL in the iss; when using x509 and (some) DID methods it's clear and it's irrelevant if the service is self-managed or is managed by a 3rd party) |
There seem to be several mechanisms for issuer key validation (section 3.5).
Two mechanisms define fetching of keys (issuer metadata, DID), and one can be embedded or referenced (x509).
Would it make sense to enable signature validation at all times and
jwk
header with the issuer's signing key (https://datatracker.ietf.org/doc/html/rfc7515#section-4.1.3)Signature is always verified using this key.
Public key - identity binding can be verified
kid
could be misused to express the validation mechanism or one could define an additional header claim where identity verification mechanism is specified:The text was updated successfully, but these errors were encountered: