Hi Ilari,

Response inline below – apologies once more for Outlook threading.

I’m not seeing convergence to consensus in this thread. At this point it seems 
that we have one group definitely favouring “alg” and another group definitely 
favouring “hkc”, and it seems like no-one is changing their mind at this point 
because there are strong technical arguments on both sides.

Perhaps it is better for WG chair to get a feel for where wider group opinion 
lies – we have maybe six or seven people expressing strong opinions in one 
direction or another in a group that doubtless has a much larger number of 
contributors.

Even the “+1” for one or other approach from a broader range of people in the 
group would be very helpful at this point, I think.

Jeremy

On 29/06/2023, 21:41, "COSE" <[email protected]> wrote:

WARNING: This email originated from outside of Qualcomm. Please be wary of any 
links or attachments, and do not enable macros.

On Thu, Jun 29, 2023 at 04:00:09PM +0000, Jeremy O'Donoghue wrote:

> The short version is that I *strongly* prefer a single “alg” integer
> to further parameterise the key usage space. The use of a construction
> like “hkc” is almost certain to complicate interoperability and
> testing. Large-scale systems may be able to support many options, but
> constrained systems rarely have that luxury. While configuration or
> profile documents can help, there is generally a risk over time of
> there being a large enough number of configurations that they no
> longer help very much as everyone chooses his/her favourite.

There has *never* been "single alg parameter" in COSE. Even in stock
RFC 8152, Message recipients can involve *three* different alg
parameters (+ fourth thing).

[JOD] “hkc” still complicates things further. As an implementer, checking the 
consistency and compatibility of COSE arguments is already fairly tedious – 
adding a special case makes things significantly worse.

I’m strongly with Laurence on this point.

And "hkc" is not meant for highly constrained cases. For example,
if application does ciphersuite-per-key-type, then "hkc" is
completely unnecressary.

[JOD] HPKE is not for constrained use-cases? I can think of constrained 
use-cases. This seems like a bold claim to make.

In many cases, particularly if you care strongly about security in an Edge 
device, you will want your COSE implementation to sit in a small Enclave/TEE 
that communicates with a Root of Trust that holds the crypto keys and hardware 
– these are commonly pretty constrained environments – a Arm Cortex M class 
device with Trustzone-M or an equivalent RISC-V MCU, with low-hundreds of kiB 
memory.


And having explicit list would do absolutely nothing to help interop in
constrained environments. The list would probably cover every KEM, KDF
and AEAD in HPKE at least once. Which would require the same effort as
dealing with everything. Except with *additional* complexity of dealing
with coupling.

[JOD] I think this is just a question of where you put the complexity. In a 
constrained environment you would likely use a profile to constrain the 
supported algorithm choices.


As an example, it is much easier to deal with TLS 1.3 crypto negotiation
compared to TLS 1.2 crypto negotiation. Not because there are less
choices, but because there is much less coupling.

[JOD] <snip>

> While crypto-agility is of definite and growing importance, it is not
> unreasonable to restrict the space within which agility is permitted
> to a subset of the large set of possible options in the name of
> interoperability, providing options that provide meaningfully different
> levels of security and/or differently constructed algorithms (hence,
> presumably, resistant to different classes of attack)

This does not actually help interoperability.

Then, COSE has always been frameworky. For such specifications,
restrictions for interop are inapporiate. Instead, the specs are
intended to be profiled down or specialized for applications, and in
that process, appriate restrictions are defined for interoperability.

[JOD] I agree that profiles are needed regardless of solution. “alg” and “hkc” 
are proposing different ways to do the same thing, placing the effort in 
slightly different places.

<snip>

> If the time to generate new informational RFCs to define new cipher-
> suites for COSE “alg” is too long, we should address this rather than
> adopting “hkc” as a workaround.

It is not just one RFC (and that is surprising amount of effort), but
essentially endless stream of those, every time HPKE adds something,
and those costs add up.

[JOD] I am aware of the effort in producing an RFC. What I have seen is that 
large framework RFCs that define something new take a long time (some of us on 
this list are editors of the RATS EAT draft, for example, so well aware of 
this). I have also observed that RFCs which extend an existing framework in 
specific and limited ways can be published fairly quickly.

It is probably true that the “alg” approach may require two RFCs rather than 
one if making HPKE changes, but this reflects that anyway if you are 
potentially changing how COSE works (as here), consensus is needed in the COSE 
WG before this can be adopted.

<snip>

> Variety of supportable use-cases: This is exactly the same with both
> proposals, as far as I can tell. The difference is in the mechanism to
> define new variations. I regard restricting the default set of
> operations as a feature and not a bug.

No, it is not the same. More work for extra complexity, for likely no
gain.

[JOD] I’m personally happy to put more work/complexity on the 1% that have 
particular and specialized needs compared to the 99% who do not, as previously 
stated. I can’t see that “alg” makes anything impossible, merely more work, 
although later in thread you suggest that it does.

<snip>
> In short, this is exactly the area where I *like* to see expert
> review.

That review is going to be less "expert" than what you would like...

[JOD] Disappointing, if true.

<snip>
> This also helps hugely with interoperability as it provides a
> tractable combination of options to test (this is not a trivial factor
> for product vendors).

As I explained above, it does not help with interoperability. And
with regards to testing, it would *increase* the effort required.

[JOD] As a vendor, I will certainly test layers independently in unit testing, 
but I will also extensively test *all* supported options before I ship.

> Ease of Adding a new HPKE KEM: I don’t agree on the assumption that
> HPKE will be provided as a separate layer. This will doubtless often
> be the case, but it will not always be true. We certainly don’t
> “need” to do it.

HPKE is certainly *specified* as a separate layer. While yeeting the
parts of HPKE that are never used gets good simplifications, I think
it is doubtful that mixng in the HPKE implementation will buy much,
as most of that is irreducable crypto code.

[JOD] It should reduce parameter checking code. While this is often not very 
much compiled code, it is easy to get wrong.

> Adding any new algorithm to a system implies change somewhere, and
> for the same reason that I don’t regard “ease of coding” as an
> argument in favour of “alg”, I don’t regard “ease of adding a new
> HPKE KEM” as an argument in favour of “hkc”.

That change can be just updating the HPKE library. Something that is
required anyway.

[JOD] Assumes that you can update libraries individually. This is usually not 
true for enclaves where static bootable images are more common. Once you have 
to generate a new image, there is no benefit to enforced separation.

> In particular, I expect to see increasing numbers of systems for
> which the layers defined in CBOR are at least partially auto-
> generated from CDDL, and in this case I think the effort would be
> the same.

CDDL might autogenerate a parser, but it definitely will not
autogenerate a decoder.

[JOD] Agreed.

However parser-generator code could very well contain productions that drive 
the crypto libraries, and these would rarely change – this is the case I 
consider to be the same effort.

<snip>

> Also important to consider that many embedded systems are essentially
> statically linked and run from a single system image, so making any
> change implies creating a complete new image.

That does not mean it is irrelevant how many components need to be
modified: Builds are automated, modifying components is not.


> Incidentally, solutions like dependabot do not address the problem of
> creating adequate validation suites for cryptographic systems, and
> more algorithm combinations creates a combinational explosion in the
> testing requirements.

How testing requirements scale depends on coupling.

That combinatorial explosion *only* happens in presence of coupling.

[JOD] As noted above, I will not ship anything before testing all of the 
combinations I support in my implementation.

> Examples
>
>
> Ø  > AwesomeHPKEApp.new(suite={kem: DHKEM_X25519_HKDFSHA256(0x20), kdf:
>
> Ø  > HKDF_SHA256(0x01), aead: AES128GCM(0x01)})
>
> Ø
>
> Ø  
> AwesomeHPKEApp.new(suite="HPKEv1-Base-DHKEM(X25519,HKDFSHA256)-HKDFSHA256-AES128GCM")
>
> Assuming we had a value of 1762 for “alg” representing
> “HPKEv1-Base-DKEM(X25519,HKDFSHA256)-HKDFSHA256-AES128GCM”, I offer
> you:
>
> AwesomeHPKEApp.new(alg=1762)
>
> …which seems shorter still. I’m aware this example is facetious,
> but in reality libraries would pre-define constants that an IDE
> would likely auto-complete for you (even emacs does such things
> these days).

Well, there are some issues with that API, starting from the fact that
KEM is constrained by the key...

[JOD] My apologies. I misattributed the original examples above to you. I had 
to follow the message threading by date to verify that it didn’t originate in 
any of your mails.

My general point is that there are lots of ways to design an API.





-Ilari

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

Reply via email to