Pular para o conteúdo
ecdsa.com

Ataque de curva inválida

Um ataque em que a outra parte envia um ponto que não está na curva acordada, de modo que uma implementação que pula a validação de pontos faz os cálculos em uma curva mais fraca e vaza sua chave privada aos poucos.
Também escrito comoinvalid curve attacktwist attackpoint validationCurveBall

As fórmulas de adição de Weierstrass não usam o coeficiente b, então um código que nunca confere a equação da curva calcula sem reclamar d·P para um ponto P de outra curva com um subgrupo pequeno. Cada resposta (um segredo compartilhado ECDH, uma mensagem criptografada, um MAC) revela d módulo um primo pequeno, e o teorema chinês do resto combina respostas suficientes para obter a chave inteira. Biehl, Meyer e Müller descreveram o ataque em 2000; Jager, Schwenk e Somorovsky o demonstraram contra implementações TLS-ECDH em 2015 e, em 2017, descobriu-se que várias bibliotecas JOSE aceitavam pontos inválidos em ECDH-ES.

A correção é barata: confira se o ponto está na curva, se não é o ponto no infinito e, quando o cofator é maior que 1, se pertence ao subgrupo correto (SEC 1 §3.2.2, SP 800-56A §5.6.2.3). A maioria das bibliotecas modernas valida o ponto na importação. O X25519 e o X448 foram projetados para que a escada de Montgomery continue segura na torção (twist) da curva, e resta apenas verificar se a saída não é toda zero.

Uma falha relacionada é confiar em parâmetros de curva fornecidos por quem chama: a CVE-2020-0601 (“CurveBall”) da CryptoAPI do Windows aceitava certificados cujos parâmetros explícitos trocavam o gerador por um escolhido pelo atacante, o que permitia que um certificado forjado se passasse por uma raiz confiável. Aceitar só curvas nomeadas, como exige a RFC 5480, fecha essa porta.

Padrões e referências

Todos os termos