P-256 est la courbe de Weierstrass réduite y² = x³ − 3x + b définie modulo le nombre premier p = 2^256 − 2^224 + 2^192 + 2^96 − 1, dont la forme particulière permet une réduction rapide. Son groupe est d’ordre premier (cofacteur 1), d’environ 2^256, ce qui donne à peu près 128 bits de sécurité. La même courbe porte trois noms : P-256 (NIST, JOSE, COSE), secp256r1 (SEC 2, TLS) et prime256v1 (ANSI X9.62, OpenSSL).
Une clé publique est un point : 65 octets sous forme non compressée (0x04 ‖ x ‖ y) ou 33 octets sous forme compressée. Une signature ECDSA fait 64 octets au format brut r ‖ s (JOSE, WebCrypto) et généralement de 70 à 72 octets en DER (X.509, TLS, OpenSSL, assertions WebAuthn) ; confondre les deux encodages est l’un des bugs d’interopérabilité les plus courants, et le convertisseur DER ⇄ brut convertit l’un en l’autre.
La prise en charge matérielle est large : la Secure Enclave d’Apple ne crée que des clés P-256, et les clés de sécurité FIDO2 comme les authentificateurs de plateforme créent couramment des clés d’accès P-256 (algorithme COSE −7, ES256). Comme pour les autres courbes du NIST, b a été dérivé d’une graine SHA-1 dont l’origine n’est pas documentée, ce qui est l’une des raisons pour lesquelles certains concepteurs de protocoles préfèrent Curve25519 ; aucune faiblesse n’a été trouvée dans P-256.