]> Cypherpunks repositories - gostls13.git/commit
crypto/elliptic: don't unmarshal points that are off the curve
authorDavid Leon Gil <coruus@gmail.com>
Wed, 7 Jan 2015 05:07:24 +0000 (21:07 -0800)
committerAdam Langley <agl@golang.org>
Sun, 26 Apr 2015 21:11:50 +0000 (21:11 +0000)
commitd86b8d34d069c3895721ba47cac664f8bbf2b8ad
tree5be6f6a662efdf73b25c97e054b52c7bd152e689
parent54bb4b9fd771f793c623e82afcb769068736495a
crypto/elliptic: don't unmarshal points that are off the curve

At present, Unmarshal does not check that the point it unmarshals
is actually *on* the curve. (It may be on the curve's twist.)

This can, as Daniel Bernstein has pointed out at great length,
lead to quite devastating attacks. And 3 out of the 4 curves
supported by crypto/elliptic have twists with cofactor != 1;
P-224, in particular, has a sufficiently large cofactor that it
is likely that conventional dlog attacks might be useful.

This closes #2445, filed by Watson Ladd.

To explain why this was (partially) rejected before being accepted:

In the general case, for curves with cofactor != 1, verifying subgroup
membership is required. (This is expensive and hard-to-implement.)
But, as recent discussion during the CFRG standardization process
has brought out, small-subgroup attacks are much less damaging than
a twist attack.

Change-Id: I284042eb9954ff9b7cde80b8b693b1d468c7e1e8
Reviewed-on: https://go-review.googlesource.com/2421
Reviewed-by: Adam Langley <agl@golang.org>
src/crypto/elliptic/elliptic.go
src/crypto/elliptic/elliptic_test.go