Pular para o conteúdo
ecdsa.com
RecomendadaWeierstrass curta

P-256

A P-256 (secp256r1, prime256v1) é a curva elíptica mais difundida: o TLS, o X.509, o ES256 do JOSE, o WebAuthn e o DNSSEC, todos a usam.

P-256 é uma curva na forma curta de Weierstrass y² = x³ + ax + b sobre um campo primo de 256 bits com um subgrupo de ordem prima de 256 bits e cofator 1; o nível de segurança estimado é de 128 bits. Status: recomendada para sistemas novos.

A P-256 é a curva de Weierstrass curta y² = x³ − 3x + b sobre o primo p = 2^256 − 2^224 + 2^192 + 2^96 − 1, cuja forma especial permite uma redução rápida. O grupo dela tem ordem prima (cofator 1) de cerca de 2^256, o que dá aproximadamente 128 bits de segurança. A mesma curva tem três nomes: P-256 (NIST, JOSE, COSE), secp256r1 (SEC 2, TLS) e prime256v1 (ANSI X9.62, OpenSSL).

Uma chave pública é um ponto: 65 bytes na forma não comprimida (0x04 ‖ x ‖ y) ou 33 bytes na forma comprimida. Uma assinatura ECDSA tem 64 bytes como r ‖ s bruto (JOSE, WebCrypto) e, em geral, de 70 a 72 bytes em DER (X.509, TLS, OpenSSL, asserções do WebAuthn); confundir as duas codificações é um dos bugs de interoperabilidade mais comuns, e o conversor DER ⇄ bruto converte de uma para a outra.

O suporte em hardware é amplo: o Secure Enclave da Apple cria apenas chaves P-256, e as chaves de segurança FIDO2 e os autenticadores de plataforma costumam criar chaves de acesso P-256 (algoritmo −7 do COSE, ES256). Como nas outras curvas do NIST, b foi derivado com SHA-1 de uma semente cuja origem não está documentada, e esse é um dos motivos pelos quais alguns projetistas de protocolos preferem a Curve25519; nenhuma fraqueza foi encontrada na P-256.

Nomes nos padrões

PadrãoNome
NIST FIPS 186-5 / SP 800-186P-256
SEC 2secp256r1
ANSI X9.62prime256v1
JOSE / COSEP-256
SSHnistp256

Identificadores de objeto

Parâmetros de domínio

campo primo de 256 bits · cerca de 128 bits de segurança

Primo p do campo
0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff
Coeficiente a
0xffffffff00000001000000000000000000000000fffffffffffffffffffffffc
Coeficiente b
0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b
Coordenada x do ponto base
0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296
Coordenada y do ponto base
0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5
Ordem n do ponto base
0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551
Cofator h
0x1
Semente
0xc49d360886e704936a6678e1139d26b7819f7e90

Usada em

  • TLS 1.3
  • X.509 / Web PKI
  • JOSE (ES256)
  • COSE (ES256, ESP256)
  • SSH (ecdsa-sha2-nistp256)
  • DNSSEC (algorithm 13)
  • WebAuthn / passkeys
  • Apple Secure Enclave

Identificadores em registros

Grupos suportados do TLS
secp256r1 0x0017SecP256r1MLKEM512 0x11E9SecP256r1MLKEM768 0x11EBSecP256r1Kyber768Draft00 0x639A
Esquemas de assinatura do TLS
ecdsa_secp256r1_sha256 0x0403
Algoritmos JOSE
ES256HPKE-0HPKE-0-KEHPKE-7HPKE-7-KE
Curvas JWK
P-256
Algoritmos COSE
ESP256 -9
Curvas elípticas COSE
P-256 1
Métodos de troca de chaves SSH
ecdh-sha2-nistp256gss-nistp256-sha256-*mlkem768nistp256-sha256
Algoritmos de chave pública SSH
ecdsa-sha2-nistp256x509v3-ecdsa-sha2-nistp256
Números de algoritmo DNSSEC
ECDSAP256SHA256 13
Identificadores de KEM do HPKE
DHKEM(P-256, HKDF-SHA256) 0x0010DHKEM(CP-256, HKDF-SHA256) 0x0013MLKEM768-P256 0x0050

Padrões e referências

Todas as curvas