Skip to content

Handling cofactor 4 #49

@fscoto

Description

@fscoto

Copying over from #1 with some changes.

There are a few options of how to handle the relationship between cofactor 4 curves and Ristretto. As far as I can glean from the Git history, ristretto448 used to be planned, but then quietly got cut.

Currently, the website presents Ristretto as this mixed bag between h = 4 as well as h = 8 and only h = 8:

Ristretto is a technique for constructing prime order elliptic curve groups with non-malleable encodings. It extends Mike Hamburg's Decaf approach to cofactor elimination to support cofactor-8 curves such as Curve25519.

[...]

Ristretto can be used in conjunction with Edwards curves with cofactor 4 or 8, and provides the following specific parameter choices:

However, ristretto448 for Ed448-Goldilocks, the other major Edwards curve going around, isn't actually defined. The reason specifying something for Ed448-Goldilocks at all is useful is because of I-D.draft-irtf-cfrg-voprf-03 specifying in § 8.1.4 that they only consider ciphersuites providing 196 bits of security (Not sure if this was supposed to be 192 or if they really did mean 196 bits but include NIST P-384 regardless). While the Internet Draft does account for required cofactor hacks, having a more elegant alternative to implement the IETF (V)OPRF on would probably be useful from an implementation perspective, and a lot less scary.

The curve selection page on the website of the Doppio group notes that Decaf is much easier and straightforward in the h = 4 case, both conceptionally and practically. And I agree in theory. Personally, I think the main issue with saying “just use Decaf”, however, is that there are no test vectors, plus the definition of what constitutes a negative number as well as encoding of field elements is implementation-defined. Making this well-defined (e.g. as Ristretto-flavored Decaf that just writes down Decaf and defines some missing elements and instantiates ristretto448 with that theory) would probably end up being a net gain. New curve designs could then pick up from the base decisions made for Ristretto-flavored Decaf, too, without having to specify a bunch of specific Decaf parameters for interop.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions