Skip to content

Adding key-committing AEAD implementations (CTX or UtC/RtC/HtE) #317

@brycx

Description

@brycx

I think it would make sense to start thinking about adding key-committing AEADs to the library. In general there seem to be two recent proposals that transform non-committing AEs into committing ones.

The first, are the UtC/RtC/HtE constructions by Bellare & Hoang in https://eprint.iacr.org/2022/268. Second, we have CTX proposed by Chan & Rogaway in https://eprint.iacr.org/2022/1260.

The most notable difference is that the UtC/RtC transforms work for either nonce-based AEADs and MRAEs, respectively. CTX only works for nonce-based AEADs. Orion currently only supports nonce-based AEADs, but if we choose to go with CTX then we'd need to implement RtC/HtE later on, if we add MRAE as well and wish to add key-commitment there as well.

On the other hand, CTX is much simpler to implement than UtC/RtC/HtE. Further, CTX commits to the entire input set (key, nonce, ciphertext, ad), whereas UtC only commits to the key and needs HtE on top, to be fully committing. For this reason, I think it would be best to start with CTX.

Questions remaining:

  • Should this be behind an experimental flag?
  • The intention is to eventually replace the high-level AEAD implementation to be fully committing. Should the high-level interface be modified in the first release, even if gated behind a feature flag, or not?
  • What sizes for the new authentication tags should be chosen? 256-bit seems to be a reasonable choice. This is important because the security of the commitment scheme is based on the collision-resistance of the hash function used for CTX.
  • Do we add key-commitment to XChaCha20-Poly1305 only or ChaCha20-Poly1305 also (I think both are good, then it makes sense to start providing key-committing implementations in the hazardous layer and move it to high-level up later on)

Metadata

Metadata

Assignees

No one assigned

    Labels

    new featureNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions