P-256 — кривая в короткой форме Вейерштрасса y² = x³ − 3x + b над простым полем по модулю p = 2²⁵⁶ − 2²²⁴ + 2¹⁹² + 2⁹⁶ − 1 с простым порядком группы (кофактор 1). Она определена в NIST SP 800-186, § 3.2.1.3, и в SEC 2 под именем secp256r1; в OpenSSL она называется prime256v1, её OID — 1.2.840.10045.3.1.7, в TLS она обозначается secp256r1 (группа 23), а в JOSE/COSE используется "crv": "P-256".
Размеры: закрытые ключи — 32 байта; открытые ключи — 65 байт в несжатом виде (04‖x‖y) или 33 байта в сжатом; подписи ECDSA — 64 байта в формате raw r‖s (JWS ES256) или 70–72 байта в DER (X.509, TLS, assertion в WebAuthn, формат по умолчанию в OpenSSL и Java). Смешение этих двух кодировок — самая частая причина ошибки «invalid signature» при действительных ключах.
Это кривая по умолчанию почти везде: JWT с ES256, ключи доступа (алгоритм COSE −7), TLS-сертификаты ECDSA и key share, Secure Enclave от Apple, а также большинство HSM и смарт-карт, которые часто не поддерживают никаких других кривых. На одном ядре Apple M4 Max OpenSSL 3.6.5 создаёт около 87 000 подписей ECDSA на P-256 и проверяет около 29 000 подписей в секунду.
Её коэффициенты получены из необъяснённого seed от NSA — это одна из причин, по которым некоторые разработчики криптосистем предпочитают Curve25519; слабостей самой P-256 не известно. Как и любая эллиптическая кривая, она уязвима для большого квантового компьютера, а NIST IR 8547 (черновик) предлагает запретить ECDSA и ECDH при любой стойкости после 2035 года. О кривой Bitcoin читайте в сравнении P-256 или secp256k1.