>
> It's *extremely* unfortunate naming choices, because that's not how JOSE
> works:


...Regarding the KEM/key agreement thing about which we are talking,  *that's
how JOSE works*.

In JOSE, the primary "alg" value for key agreement is "ECDH-ES".
Not only "crv" but also "kty" cannot be determined by the "ECDH-ES".

In the first place, "alg" is just an optional value in JWK/COSE_Key and
cannot be relied upon. There are plenty of examples of JWKS endpoints
without "alg" values.

For example, Azure-AD JWKS endpoints like this...
https://login.microsoftonline.com/common/discovery/keys

Example JWKs in MDN web docs don't use "alg" ...
https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/importKey#json_web_key_import

> And this is "better" than iterating one list of "advertised algorithms"
in the sense that it is "more compact" and "safer" ?

I think the "hkc" approach is better.
- Since it does not rely on "alg", it will work with many existing
implementations and it can be used not only JOSE/COSE but also many other
applications.
- If the recipient(server) wants to support multiple KDF/AEADs for one KEM
algorithm, the "alg" approach should provide multiple KEM keys.
- etc...

--
Daisuke

2023年7月21日(金) 1:53 Orie Steele <[email protected]>:

> Inline:
>
> On Thu, Jul 20, 2023 at 10:42 AM AJITOMI Daisuke <[email protected]>
> wrote:
>
>> The point here is... If I tell you -7 (ES256), you know 2 (kty EC2) and 1
>>> (crv P-256)
>>
>>
>> ... No. In COSE, ES256 can be used not only with P-256 but also with
>> other curves (P-521, etc.).
>>
>
> https://datatracker.ietf.org/doc/html/rfc9053#section-8.3
>
> I think you are correct.
>
> It's *extremely* unfortunate naming choices, because that's not how JOSE
> works:
>
> https://datatracker.ietf.org/doc/html/rfc7518#section-3.1
>
> It's also probably not a "good idea" to use "sha256 with P-521" (mismatch
> in hash and curve strength)
> ... Why does COSE encourage this kind of thing, I can't answer that...
>
> It leads to devices needing to support a kitchen sink, or only certain
> protocols, ... it impacts agility.
>
> It seems that COSE created even more flexibility than JOSE, and encouraged
> protocols to lock things down...
> in other words, it punted responsibility, in a way that JOSE did not.
>
>
>>
>> Constrained devices won't ship support for both 6 and 7... so advertising
>>> -8 is therefore ambiguous / not helpful (by itself)
>>
>> ... Now consider advertising "HPKE-Base"... How does this help you know
>>> how to talk to a firmware or relying party?
>>
>>
>> ES256 is also ambiguous... let's use key information.
>>
>
> Seems you are required to use key information to use COSE...
> But not in JOSE... I'm sorta shocked by how bad that is...
> COSE "alg" values are NEVER enough information.
>
> Just for clarity... a receiver needs to advertise a list like this [ kty,
> crv, alg, hkc ].
>
> And then the sender needs to iterate that list to find a match they
> support, in order to send.
>
> And this is "better" than iterating one list of "advertised algorithms" in
> the sense that it is "more compact" and "safer" ?
>
>
>> ... why would we go out of our way to add extra information to this
>>> process, when we are supposed to be trying to design for a compact /
>>> constrained environment?
>>
>>
>> ... The current draft(or "hkc" approach) does not prohibit implementing
>> only a specific combination of KEM/KDF/AEAD for constrained environments,
>> and it is also possible not to put HPKE algorithm information in
>> COSE_Key/JWK as an implicit agreement between a sender and a recipient.
>>
>
> I agree with this.
>
>
>> --
>> Daisuke
>>
>> 2023年7月20日(木) 23:27 Orie Steele <[email protected]>:
>>
>>> Granted, JOSE & COSE kinda broke this with EdDSA...
>>>
>>> > Therefore, in COSE, even ES256 has to be defined as follows:
>>> >    -7 (ES256), where kty is 2 (with uncompressed points) and crv is 1
>>> (P-256).
>>>
>>> The point here is... If I tell you -7 (ES256), you know 2 (kty EC2) and
>>> 1 (crv P-256)
>>>
>>> If I tell you -8 (EdDSA) .... You know 1 (kty OKP), but *you don't
>>> know if I meant 6 (crv Ed25519) or 7 (crv Ed448)*
>>>
>>> Constrained devices won't ship support for both 6 and 7... so
>>> advertising -8 is therefore ambiguous / not helpful (by itself)
>>>
>>> ... Now consider advertising "HPKE-Base"... How does this help you know
>>> how to talk to a firmware or relying party?
>>>
>>> ... why would we go out of our way to add extra information to this
>>> process, when we are supposed to be trying to design for a compact /
>>> constrained environment?
>>>
>>> OS
>>>
>>>
>>>
>>> On Thu, Jul 20, 2023 at 9:11 AM Michael Prorock <[email protected]>
>>> wrote:
>>>
>>>> A correction/clarification - basically, while you see both kty and alg
>>>> together, if you have a well defined alg, you always know what kty is for
>>>> that alg - so derivation is from alg alone
>>>>
>>>> Mike Prorock
>>>> CTO - mesur.io
>>>>
>>>> On Thu, Jul 20, 2023, 08:01 Michael Prorock <[email protected]> wrote:
>>>>
>>>>> Daisuke,
>>>>> definitely 'combination of "alg" and key information.', especially as
>>>>> things have started to evolve recently.  However, I think the point that
>>>>> Orie is trying to make (please correct me if I am wrong Orie) is that once
>>>>> you have the 'kty' which lets you know what shape and family of keys you
>>>>> are dealing with, then you should have everything you need from 'alg' and
>>>>> nothing else.
>>>>>
>>>>> Mike Prorock
>>>>> CTO, Founder
>>>>> https://mesur.io/
>>>>>
>>>>>
>>>>>
>>>>> On Thu, Jul 20, 2023 at 7:53 AM AJITOMI Daisuke <[email protected]>
>>>>> wrote:
>>>>>
>>>>>> Daisuke asserts “On the other hand, there are no examples like the
>>>>>>> proposal from Hannes/Laurence, where the "alg" value includes 
>>>>>>> information
>>>>>>> about "crv" values and unrelated key operation information (e.g., KDF,
>>>>>>> AEAD)”.  There are actually many such examples.
>>>>>>
>>>>>>
>>>>>> It mainly concerns the latter, which is ”unrelated key operation
>>>>>> information". Anyway, while it is true that JOSE's ES* algs include the
>>>>>> "crv" value implicitly, the COSE's ES* algs don't. The COSE's ES256
>>>>>> algorithm is not limited to P-256 and this crv value and the information
>>>>>> about whether the key is compressed EC point or not ultimately requires
>>>>>> referring to the key info.
>>>>>>
>>>>>> Therefore, in COSE, even ES256 has to be defined as follows:
>>>>>>
>>>>>>    - -7 (ES256), where kty is 2 (with uncompressed points) and crv
>>>>>>    is 1 (P-256).
>>>>>>
>>>>>> It is evident that the mainstream approach is to negotiate using a
>>>>>> combination of "alg" and key information.
>>>>>>
>>>>>> --
>>>>>> Daisuke
>>>>>>
>>>>>>
>>>>>> 2023年7月20日(木) 9:55 Michael Jones <[email protected]>:
>>>>>>
>>>>>>> [chair hat off]
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> The interoperability problem caused by polymorphic algorithm
>>>>>>> identifiers is that the “alg” and “enc” values are no longer useful for
>>>>>>> algorithm negotiation.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> In protocols such as OpenID Connect, OAuth 2.0, and WebAuthn/FIDO2, 
>>>>>>> lists of supported “alg” and “enc” values are published in metadata.  
>>>>>>> For instance, here’s an example from RFC 8414:
>>>>>>>
>>>>>>>     "token_endpoint_auth_signing_alg_values_supported":
>>>>>>>
>>>>>>>         ["RS256", "ES256"],
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> The problem with polymorphic algorithm identifiers such as “EdDSA”
>>>>>>> is that they don’t actually specify which algorithm is used.  It could 
>>>>>>> mean
>>>>>>> either “Ed25519” or “Ed448”.  You can’t advertise which you support 
>>>>>>> and/or
>>>>>>> which you want.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> This is a problem in practice for WebAuthn, since some COSE alg
>>>>>>> identifiers are polymorphic and WebAuthn and FIDO2 use COSE algorithm
>>>>>>> identifiers for negotiation.  See that WebAuthn specified that EdDSA 
>>>>>>> always
>>>>>>> uses Ed25519 – making it non-polymorphic but precluding its use with
>>>>>>> Ed448.  Here’s the line doing so at
>>>>>>> https://www.w3.org/TR/webauthn-2/#sctn-public-key-easy:
>>>>>>>
>>>>>>>    - -8 (EdDSA), where crv
>>>>>>>    <https://tools.ietf.org/html/rfc8152#section-13.1.1> is 6
>>>>>>>    (Ed25519).
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Daisuke asserts “On the other hand, there are no examples like the
>>>>>>> proposal from Hannes/Laurence, where the "alg" value includes 
>>>>>>> information
>>>>>>> about "crv" values and unrelated key operation information (e.g., KDF,
>>>>>>> AEAD)”.  There are actually many such examples.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> All the registered JOSE algorithms (for example “ES256”) fully
>>>>>>> specified all parameters until “EdDSA”  was registered.  The COSE
>>>>>>> algorithms from RFC 8812 fully specify all parameters, such as when
>>>>>>> secp256k1 is used and when RSASSA is used.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Likewise, if we had a single HPKE algorithm identifier, it couldn’t
>>>>>>> be used to distinguish which HPKE algorithms are supported (and not all
>>>>>>> will be by all implementations).  This would cause the same problem for
>>>>>>> future systems that, for instance, WebAuthn/FIDO2, OAuth 2.0, and OpenID
>>>>>>> Connect already encounter when polymorphic algorithm identifiers are 
>>>>>>> used.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>                                                        -- Mike
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> *From:* AJITOMI Daisuke <[email protected]>
>>>>>>> *Sent:* Wednesday, July 19, 2023 3:45 PM
>>>>>>> *To:* Michael Jones <[email protected]>; Ilari Liusvaara <
>>>>>>> [email protected]>
>>>>>>> *Cc:* cose <[email protected]>
>>>>>>> *Subject:* Re: [COSE] Draft IETF 117 COSE agenda
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> > Speaking as an individual contributor, I fully support the first
>>>>>>> > (fully specified) choice.  Whereas the second possibility will
>>>>>>> cause
>>>>>>> > endless interoperability problems.
>>>>>>>
>>>>>>>
>>>>>>> I disagree.
>>>>>>>
>>>>>>>
>>>>>>> +1
>>>>>>>
>>>>>>> (Below, I comment from the standpoint that the design of alg values
>>>>>>> should be consistent with COSE and JOSE.)
>>>>>>>
>>>>>>> I am convinced that the "fully specified" design, on the contrary,
>>>>>>> includes more interoperability issues.
>>>>>>>
>>>>>>> Originally, in JOSE and COSE, the identification of the specific
>>>>>>> cryptographic algorithm was done by combining the "alg" value 
>>>>>>> ("ECDH-ES,"
>>>>>>> "EdDSA," etc.) with the information held by the key itself ({"kty": 
>>>>>>> "EC",
>>>>>>> "crv": "P-256", ...}, {"kty": "OKP", "crv": "Ed25519", ...}, etc.).
>>>>>>> The current draft follows this approach. On the other hand, there are no
>>>>>>> examples like the proposal from Hannes/Laurence, where the "alg" value
>>>>>>> includes information about "crv" values and unrelated key operation
>>>>>>> information (e.g., KDF, AEAD) to the original key's purpose. In JWK, the
>>>>>>> "alg" value is merely an optional parameter, so packing excessive
>>>>>>> information into the "alg" value will, in fact, lead to interoperability
>>>>>>> issues.
>>>>>>>
>>>>>>> I have repeatedly written about the reasons why the current
>>>>>>> specification is better than the "fully specified" design (*1, *2).
>>>>>>> However, I would like to add one more point from a new perspective.
>>>>>>>
>>>>>>> I am very concerned that JWK, which is a "JSON representation of
>>>>>>> keys" that could be used for a wide range of applications not limited to
>>>>>>> JOSE and COSE, will no longer be available as a means of transmission 
>>>>>>> and
>>>>>>> negotiation of HPKE parameters. I think this is a very big loss.
>>>>>>>
>>>>>>> The following works with no problem with existing JWK
>>>>>>> implementations, and it is also guaranteed to work in the JWK RFC:
>>>>>>>
>>>>>>>   {
>>>>>>>         kty: "EC",
>>>>>>>         crv: "P-256",
>>>>>>>         // alg: "HPKE-v1-Base(-KEM)",   // alg can be omitted as
>>>>>>> many JWKs do
>>>>>>>         hkc: { kem: 0x0010, kdfs: [0x0001], aeads: [0x0001]},
>>>>>>> // Unknown parameters for the JWK implementation MUST be ignored on the 
>>>>>>> JWK
>>>>>>> layer.
>>>>>>>         x: "-eZXC6nV-xgthy8zZMCN8pcYSeE2XfWWqckA2fsxHPc",
>>>>>>>         y: "BGU5soLgsu_y7GN2I3EPUXS9EZ7Sw0qif-V70JtInFI",
>>>>>>>   }
>>>>>>>
>>>>>>> On the other hand, the following does not work with many existing
>>>>>>> JWK implementations. This is because existing JWK implementations often
>>>>>>> throw errors for "alg" values not supported by the bundled JWS/JWE:
>>>>>>>
>>>>>>>   {
>>>>>>>         kty: "EC",
>>>>>>>         crv: "P-256",
>>>>>>>         alg: "
>>>>>>> HPKEv1-Base-DHKEM(P256,HKDFSHA256)-HKDFSHA256-AES128GCM",   // Must be
>>>>>>> specified to specify HPKE parameters if not assuming an 
>>>>>>> offline(implicit)
>>>>>>> agreement.
>>>>>>>         x: "-eZXC6nV-xgthy8zZMCN8pcYSeE2XfWWqckA2fsxHPc",
>>>>>>>         y: "BGU5soLgsu_y7GN2I3EPUXS9EZ7Sw0qif-V70JtInFI",
>>>>>>>   }
>>>>>>>
>>>>>>> I think this example clearly illustrates the harm of putting
>>>>>>> subsequent algorithm information (KDF&AEAD), which is not originally
>>>>>>> relevant to the key itsef, into a key that is originally only used in 
>>>>>>> the
>>>>>>> KEM step.
>>>>>>>
>>>>>>>
>>>>>>> In any case, I am tired of the situation where even after all these
>>>>>>> repeated discussions, even the obvious design point, which is obvious if
>>>>>>> you read the HPKE standard, that "encapsulated_key should be expressed 
>>>>>>> as a
>>>>>>> sequence of bytes," is being rehashed...
>>>>>>>
>>>>>>> I hope the chairs will make a wise decision.
>>>>>>>
>>>>>>> Best regards,
>>>>>>> Daisuke
>>>>>>>
>>>>>>> P.S.
>>>>>>> ... the design of COSE-HPKE was more difficult than I had thought,
>>>>>>> as it required not only knowledge of both COSE and HPKE, but also 
>>>>>>> knowledge
>>>>>>> of JOSE (primarily JWK) in terms of alg value design, and related
>>>>>>> considerations of consistency with the W3C Web Cryptography API and
>>>>>>> existing implementations. So I do not intend to ask you (the mailing 
>>>>>>> list
>>>>>>> participants) to agree with my suggestion easily, but I'm very glad if 
>>>>>>> you
>>>>>>> could read (*1)(*2) without bias.
>>>>>>>
>>>>>>> (*1)
>>>>>>> https://mailarchive.ietf.org/arch/msg/cose/KTpXbZ3UxUH8BuLT4OmhfaToYTk/
>>>>>>> (*2)
>>>>>>> https://mailarchive.ietf.org/arch/msg/cose/cPqYqCagPbWPKwvQODjqn98U3F4/
>>>>>>>
>>>>>>> 2023年7月20日(木) 2:37 lgl island-resort.com <[email protected]>:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Jul 19, 2023, at 9:52 AM, Michael Jones <
>>>>>>> [email protected]> wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> As a chair, I’d like clarity on what you mean by “the single
>>>>>>> algorithm design”.  Do you mean that each algorithm identifier fully
>>>>>>> specifies all the cryptographic parameters being used?  Or do you mean 
>>>>>>> that
>>>>>>> a single algorithm identifier is used for all the HPKE possibilities?
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> The proposal that Hannes, Jeremy and a few others favor is roughly
>>>>>>> this. (I picked these three just as an example, the decision we want is 
>>>>>>> not
>>>>>>> whether these three are the ones to register, it is that we will use one
>>>>>>> algorithm ID to indicate the HPKE KEM, KDF and AEAD.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> *Alg ID HPKE-P-256 (equivalent to COSE -29 with NIST key)*
>>>>>>>
>>>>>>> KEM: 0x0010 DHKEM(P-256, HKDF-SHA-256)
>>>>>>>
>>>>>>> KDF: 0x0001 HKDF-SHA256
>>>>>>>
>>>>>>> AEAD: 0x0001  AES-128-GCM
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> *Alg ID HPKE-P-384 (equivalent to COSE -30 with NIST key)*
>>>>>>>
>>>>>>> KEM: 0x0011 DHKEM(P-384, HKDF-SHA-384)
>>>>>>>
>>>>>>> KDF: 0x0002 HKDF-SHA384
>>>>>>>
>>>>>>> AEAD: 0x0002  AES-256-GCM
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> *Alg ID HPKE-P-521 (equivalent to COSE -31 with NIST key)*
>>>>>>>
>>>>>>> KEM: 0x0012 DHKEM(P-521, HKDF-SHA-512)
>>>>>>>
>>>>>>> KDF: 0x0003 HKDF-SHA512
>>>>>>>
>>>>>>> AEAD: 0x0002  AES-256-GCM
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> The one that Ilari and Ajitomi-san favor is what we have now in
>>>>>>> COSE-HPKE:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>    When the alg value is set to 'HPKE-v1-BASE', the HPKE_sender_info
>>>>>>>
>>>>>>>    structure MUST be present in the unprotected header parameter.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>    The CDDL grammar describing the HPKE_sender_info structure is:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>       HPKE_sender_info = [
>>>>>>>
>>>>>>>           kem_id : uint,         ; kem identifier
>>>>>>>
>>>>>>>           kdf_id : uint,         ; kdf identifier
>>>>>>>
>>>>>>>           aead_id : uint,        ; aead identifier
>>>>>>>
>>>>>>>           enc : bstr,            ; encapsulated key
>>>>>>>
>>>>>>>       ]
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Speaking as an individual contributor, I fully support the first
>>>>>>> (fully specified) choice.  Whereas the second possibility will cause
>>>>>>> endless interoperability problems.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> We need your efforts primarily has a chair at this point. I think
>>>>>>> we’ve had the discussion.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> LL
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> COSE mailing list
>>>>>>> [email protected]
>>>>>>> https://www.ietf.org/mailman/listinfo/cose
>>>>>>>
>>>>>>> _______________________________________________
>>>>>> COSE mailing list
>>>>>> [email protected]
>>>>>> https://www.ietf.org/mailman/listinfo/cose
>>>>>>
>>>>> _______________________________________________
>>>> COSE mailing list
>>>> [email protected]
>>>> https://www.ietf.org/mailman/listinfo/cose
>>>>
>>>
>>>
>>> --
>>>
>>>
>>> ORIE STEELE
>>> Chief Technology Officer
>>> www.transmute.industries
>>>
>>> <https://transmute.industries>
>>>
>>
>
> --
>
>
> ORIE STEELE
> Chief Technology Officer
> www.transmute.industries
>
> <https://transmute.industries>
>
_______________________________________________
COSE mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/cose

Reply via email to