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>
_______________________________________________ COSE mailing list [email protected] https://www.ietf.org/mailman/listinfo/cose
