]> Cypherpunks repositories - gostls13.git/commit
crypto/rsa: drop contradictory promise to keep PublicKey modulus secret
authorFilippo Valsorda <filippo@golang.org>
Thu, 10 Jul 2025 15:24:26 +0000 (17:24 +0200)
committerGopher Robot <gobot@golang.org>
Fri, 11 Jul 2025 19:29:02 +0000 (12:29 -0700)
commit9d04122d240db4de36bf9ef4f5627e0025201bd9
tree11a97c064ccb54e3dfc3c51f0902b344dcfa2c5d
parent1ca23682dd7b2706daa94e428b3b82cc85a752c0
crypto/rsa: drop contradictory promise to keep PublicKey modulus secret

We claim to treat N as secret (and indeed bigmod is constant time in
relation to the modulus) but at the same time we warn that all inputs to
VerifyPKCS1v15 and Verify are public:

> The inputs are not considered confidential, and may leak through
> timing side channels, or if an attacker has control of part of the
> inputs.

See #67043 (which focuses on the inverse, recovering signatures by
controlling the public key input to Verify), and in particular
https://github.com/golang/go/issues/67043#issuecomment-2079335804.

Stopping the Verify adaptive attack would require significantly more
complexity, the kind that has caused vulnerabilities in the past (e.g.
CVE-2016-2107). On the other hand, assuming that a public key is
confidential is unlikely to work in practice, since it can be recovered
from just two valid (message, signature) pairs. See for example
https://keymaterial.net/2024/06/15/reconstructing-public-keys-from-signatures/.

This comment was introduced in CL 552935, not really due to a need to
specify that N was secret, but rather to clarify that E is not (so it
could be used in variable-time exponentiation).

Change-Id: I6a6a6964f3f8d2dc2fcc13ce938b271c9de9666b
Reviewed-on: https://go-review.googlesource.com/c/go/+/687616
Reviewed-by: Roland Shoemaker <roland@golang.org>
Auto-Submit: Filippo Valsorda <filippo@golang.org>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Carlos Amedee <carlos@golang.org>
src/crypto/rsa/rsa.go