Pular para o conteúdo
ecdsa.com

P-256 (secp256r1)

A curva elíptica do NIST sobre um corpo primo de 256 bits, também chamada de secp256r1 e prime256v1, que oferece cerca de 128 bits de segurança e é a curva mais usada em ECDSA e ECDH.
Também escrito comosecp256r1prime256v1NIST P-256P256

A P-256 é a curva de Weierstrass curta y² = x³ − 3x + b sobre o primo p = 2²⁵⁶ − 2²²⁴ + 2¹⁹² + 2⁹⁶ − 1, com ordem do grupo prima (cofator 1). Ela é especificada no NIST SP 800-186 §3.2.1.3 e no SEC 2 como secp256r1; o OpenSSL a chama de prime256v1, seu OID é 1.2.840.10045.3.1.7, o TLS a chama de secp256r1 (grupo 23) e o JOSE e o COSE usam "crv": "P-256".

Tamanhos: chaves privadas de 32 bytes; chaves públicas de 65 bytes na forma não comprimida (04‖x‖y) ou de 33 bytes na forma comprimida; assinaturas ECDSA de 64 bytes no formato bruto r‖s (JWS ES256) ou de 70–72 bytes em DER (X.509, TLS, asserções WebAuthn, padrão do OpenSSL e do Java). Misturar as duas codificações é a causa mais comum de “invalid signature” com chaves válidas.

É o padrão em quase todo lugar: JWTs ES256, chaves de acesso (algoritmo COSE −7), certificados TLS ECDSA e key shares, o Secure Enclave da Apple e a maioria dos HSMs e cartões inteligentes, que muitas vezes não oferecem suporte a nenhuma outra curva. Em um núcleo de um Apple M4 Max, o OpenSSL 3.6.5 gera cerca de 87.000 assinaturas ECDSA P-256 e verifica cerca de 29.000 por segundo.

Seus coeficientes vieram de uma semente da NSA sem explicação, um dos motivos pelos quais alguns projetistas preferem a Curve25519; não se conhece nenhuma fraqueza na própria P-256. Como toda curva elíptica, ela é quebrada por um computador quântico de grande porte, e o NIST IR 8547 (rascunho) propõe proibir o ECDSA e o ECDH em todos os níveis de segurança depois de 2035. Para a curva do Bitcoin, veja P-256 vs secp256k1.

Padrões e referências

Todos os termos