]> Cypherpunks repositories - gostls13.git/commit
crypto/internal/fips140/edwards25519: make Scalar.SetCanonicalBytes constant time
authorFilippo Valsorda <filippo@golang.org>
Mon, 10 Feb 2025 10:30:52 +0000 (11:30 +0100)
committerGopher Robot <gobot@golang.org>
Sat, 15 Feb 2025 00:09:56 +0000 (16:09 -0800)
commit1ce87bea470c3eae9be75f6e2848271588cc6ca2
tree0b0ee35f3e489d66fcfdb44b86e0e3c35480a590
parent10cef816aa9769345016c04032090ae7f5851f5c
crypto/internal/fips140/edwards25519: make Scalar.SetCanonicalBytes constant time

Internally we only use SetCanonicalBytes as part of Ed25519
verification, where all inputs are public, so it doesn't need to be
constant time.

However, this code is replicated outside of the standard library. Even
there, an attack is not practical, so this should not be considered a
security vulnerability:

  - For specific scalars, this only leaks at most four bits of
    information, and always the same four bits (so it's not an adaptive
    attack).

  - For derived scalars, assuming they are valid and uniformly
    distributed, the loop would return true on the first iteration with
    probability (1 - 2⁻¹²⁷) due to the shape of the scalar field order.

Still, making it constant time is easy enough and saves the next person
from having to think about it.

This was previously reported by Yawning Angel, and then as part of a
security audit.

Change-Id: I6a6a46563c8abecb0b4a6f12033a71c4c4da6fa7
Reviewed-on: https://go-review.googlesource.com/c/go/+/648035
Reviewed-by: Roland Shoemaker <roland@golang.org>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Auto-Submit: Filippo Valsorda <filippo@golang.org>
src/crypto/internal/fips140/edwards25519/scalar.go
src/crypto/internal/fips140/edwards25519/scalar_test.go