> On Mar 14, 2022, at 2:19 PM, Orie Steele <[email protected]> wrote:
<snip>
> So for a dilithium example:
> 
> kty: PQK (required)
> pset: CRYD3 (required)
> x: ... (required)
> alg: CRYD3 (optional)

Would you expect additional parameters (say “s1” and “s2”) for private keys?

Is X consistent within a parameter set, or is there variability (such as the 
algorithm to generate the matrix from a seed value, or the option to include a 
full matrix)

> Obviously JWK thumbprint will need to be aware of all required fields, and 
> will need to drop all optional fields in order to be useful.

And if those rules aren’t generic and simple, it is possible we have rolled 
multiple key types into one “kty”. The “EC” key type allowed just “X” 
coordinates for other curves, but my interpretation is that “OKP” was still 
created because the public value for Edwards curves was defined with a 
different packed binary format.

I posit it is better to have experimental key types for experimental key 
formats, vs the potential for a complex set of key forms in future production 
deployments. That is not to say that I have an informed opinion on stability of 
any proposal.

> If we don't define something like "pset" and we don't make "alg" required for 
> "kty:PQK"... the only optional will be to explode based on mismatched keys / 
> signatures... unless I am missing something... we have the same problem with 
> P-256 keys today... when "alg" is not present, you can't tell if the key is 
> for "signing" or "key agreement"... which means that any JWE / JWS can target 
> that key, and the key representation won't catch what the key was intended 
> for... unless "alg" and "use" are present... which nobody can rely on, 
> because they are marked optional.

Parameter set seems appropriate, as long as it is the term of art for the 
category of key type, and (for a given parameter set name) is in a 
non-extensible format.

WRT the usage of “alg” - there can be multiple algorithms that leverage the 
same underlying key object, which means a subtype is a different level of 
restrictiveness/specificity than specifying an algorithm. A single instantiated 
key of a subtype can be used with multiple algorithms (“RS” and “PS” families), 
and a single algorithm can be used with multiple key subtypes - such as 
“ECDH-ES” and “EdDSA”.

This would make the subtype of a key and its algorithmic usage restrictions 
orthogonal.

> Take a look at: 
> https://auth0.com/docs/secure/tokens/json-web-tokens/json-web-key-set-properties
>  
> <https://auth0.com/docs/secure/tokens/json-web-tokens/json-web-key-set-properties>
> 
> Notice that they include "alg" and "use"... if both are optional, why include 
> them in such an example? 

> FWIW I think making "alg" required is the best thing to do for new key types 
> moving forward (it addresses future ambiguity / explicit over implicit makes 
> me feel safer).

The “alg” and “use” parameters are restrictions on key object usage, rather 
than specifying the key object cryptographic properties themselves. IMHO, one 
needs an underlying PKI or just blanket immutability which restricts a party 
from changing such parameters over time for them to have value.

Historically these have not been “self asserted”, but rather asserted by an 
authority in a PKI system who has made an integrity protected statement about 
the key (e.g. a public certificate). In this case they may not be self-imposed 
restrictions, but restrictions by the trust broker, such as “they can’t act as 
a sub-CA” or “check here to see if the authority marked this key as revoked”. 

Likewise, key usage restrictions are systems-specific. An example would be key 
operations (also specified in the JWK RFC, distinct from “use”). Verification 
relationships in decentralized identifier documents are arguably another 
example of operational restrictions, albeit in a graph rather than a simple 
broker hierarchy.

-DW
_______________________________________________
COSE mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/cose

Reply via email to