Skip to content

crypto/elliptic: incorrect operations on the P-224 curve #43786

Closed

Description

@rolandshoemaker

The P224() Curve implementation can in rare circumstances generate incorrect outputs, including returning invalid points from ScalarMult.

The crypto/x509 and golang.org/x/crypto/ocsp (but not crypto/tls) packages support P-224 ECDSA keys, but they are not supported by publicly trusted certificate authorities. No other standard library or golang.org/x/crypto package supports or uses the P-224 curve.

The incorrect output was found by the elliptic-curve-differential-fuzzer project running on OSS-Fuzz and reported by Philippe Antoine (Catena cyber).

This issue is CVE-2021-3114.

Activity

  1. added this to the Go1.16 milestone on Jan 19, 2021
  2. JasonGross commented on Jan 20, 2021

    @JasonGross

    Would #40171 solve the issue? (I can point at the relevant Go code in fiat-crypto if that would help with integration/testing.)

  3. mdempsky commented on Jan 20, 2021

    @mdempsky
    Contributor

    I think the issue is already fixed in today's security fix releases for Go 1.14 and Go 1.15; e.g., 5c8fd72. Presumably the same fix will be ported forward for Go 1.16.

    Looking at the fix, it does seem like #40171 would have prevented it.

  4. gopherbot commented on Jan 20, 2021

    @gopherbot
    Contributor

    Change https://golang.org/cl/284779 mentions this issue: crypto/elliptic: fix P-224 field reduction

  5. gopherbot commented on May 1, 2021

    @gopherbot
    Contributor

    Change https://golang.org/cl/315271 mentions this issue: crypto/elliptic: import fiat-crypto P-521 field implementation

  6. locked and limited conversation to collaborators on May 1, 2022
  7. added a commit that references this issue on Apr 29, 2024
    d95ca91
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions