Let's first define a valid Bitcoin private key as a number in the range of [1, 115792089237316195423570985008687907852837564279074904382605163141518161494336], and a valid Bitcoin public key as a public key derived from a valid Bitcoin private key.

Then my question is: Is there a way to determine whether a specific point on the secp256k1 curve is a valid Bitcoin public key?

1 Answer 1


The secp256k1 curve has cofactor one, so every point on the curve can be written as a multiple of the generator. As a result, there are exactly as many points on the curve (excluding the point at infinity) as there are valid (nonzero) private keys.

In short: yes, every point on the curve is a valid public key.

  • The point K = (9166C289B9F905E55F9E3DF9F69D7F356B4A22095F894F4715714AA4B56606AF, F181EB966BE4ACB5CFF9E16B66D809BE94E214F06C93FD091099AF98499255E7) is part of the secp256k1 curve, but it's derived from an invalid private key (FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF), such that according to the definition in my question, the point is not a valid Bitcoin public key. Question that remains: is there a non-brute-force way to determine such validity of a public key?
    – drogos86
    Commented May 10, 2022 at 9:40
  • @drogos86 That point also has corresponding (valid) private key 0x000000000000000000000000000000014551231950b75fc4402da1732fc9bebe. The restriction for private keys to be in range 1 to 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141 is simply to make sure there is exactly one private key for every public key, but beyond that, private keys act "modulo" the size of the curve. Commented May 10, 2022 at 12:48

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.