ECDSA
Algoritmo de geração de assinaturas
Suponha que Alice deseje enviar uma mensagem assinada para o Bob. Inicialmente, eles devem concordar com os parâmetros
da curva. Além do corpo e da equação da curva, é preciso
, um ponto de base de primeira ordem sobre a curva;
é a ordem multiplicativa do ponto
.
| Parâmetro |
|
| CURVA |
o corpo e a equação usados na curva elíptica |
| G |
ponto base da curva elíptica, tal como um ponto de curva que gera um subgrupo de grande ordem prima n |
| n |
ordem inteira de G, significa que , em que é o elemento identidade. |
 |
a chavem privada (escolhida aleatóriamente) |
 |
a chave pública (calculado pela curva elíptica) |
| m |
a mensagem a ser enviada |
A ordem
do ponto base
deve ser prima. De fato, supõe-se que cada elemento diferente de zero do anel
são invertíveis, de modo que
deve ser um corpo. Isso implica que
deve ser primo (ver identidade de Bézout).
Alice cria um par de chaves, consistindo de uma chave privada
, que é um inteiro selecionado aleatoriamente no intervalo
; e um ponto de curva de chave pública
. Utiliza-se
para denotar a multiplicação de um ponto da curva elíptica por um escalar.
Para Alice assinar uma mensagem
, ela deve seguir os seguintes passos:
- Calcular
. (Aqui HASH é uma função de hash criptográfica, como SHA-2, com a saída convertida para um inteiro.)
- Considerar
como sendo os
bits mais à esquerda de
, em que
é o comprimento de bit da ordem do grupo
. (Note que
pode ser maior do que
mas não mais longo.)
- Escolher um inteiro aleatório criptograficamente seguro
em
.
- Calcular o ponto da curva
.
- Calcular
. Se
, voltar para o passo 3.
- Calcular
. Se
, voltar para o passo 3.
- A assinatura é o par
. E
também é uma assinatura válida.)
Como é observado no padrão, é preciso não apenas que
seja secreto, mas também que sejam escolhidos valores de
diferentes para assinaturas diferentes, caso contrário, a equação da etapa 6 pode ser resolvido para
, a chave privada: Dadas duas assinaturas
e
empregando a mesmo mesmo
desconhecido para diferentes mensagens conhecidas
e
, um invasor pode calcular
e
, e como
(todas as operações neste parágrafo são feitas módulo
) o atacante pode encontrar
. Como
, o invasor pode agora calcular a chave privada
.
Esta falha na implementação foi utilizada, por exemplo, para extrair a chave de assinatura utilizada para o console de jogos PlayStation 3.
Outra forma como a assinatura ECDSA pode vazar as chaves privadas é quando
é gerado por um gerador de números aleatórios defeituoso. Uma falha como esta na geração de um número aleatório fez com que usuários de carteiras de Bitcoin para Android perdessem seus fundos em agosto de 2013.
Para garantir que
é único para cada mensagem, pode-se ignorar completamente a geração de números aleatórios e gerar assinaturas deterministicas derivando
tanto da mensagem quanto da chave privada.
Algoritmo de verificação de assinatura
Para Bob autenticar a assinatura de Alice r, s, em uma mensagem
ele deve ter uma cópia de sua chave pública de ponto da curva
. Bob pode verificar que
é um ponto válido da curva da seguinte forma:
- Verificar que
não é igual ao elemento identidade O, e suas coordenadas são, de outra forma válida
- Verificar que
está sobre a curva
- Verificar que

Depois, Bob segue estes passos:
- Verificar que
e
são números inteiros em
. Se não, a assinatura é inválida.
- Calcular
, em que HASH é a mesma função utilizada na geração da assinatura.
- Considerar
como os
bits mais à esquerda de
.
- Calcular
e
.
- Calcular o ponto da curva
. Se
então, a assinatura é válida.
- A assinatura é válida se
, e inválida caso contrário.
Note que utilizando o truque de Shamir, uma soma de duas multiplicações escalares
pode ser calculada mais rapidamente do que duas multiplicações escalares feitas de forma independente.
Corretude do algoritmo
Não é imediatamente óbvio o porquê de a verificação sequer funcionar corretamente. Para ver porquê, indique por
o ponto da curva calculado no passo 6 da verificação,

A partir da definição da chave pública como
,

Como a multiplicação por escalar em curva elíptica é distributiva em relação à adição,

Expandindo as definições de
e
a partir da etapa de verificação 4,

Colocando o termo comum
em evidência,

Expandindo a definição de
a partir do passo 6 da assinatura,

Como o inverso de um inverso é o elemento original e o produto de um elemento inverso e o elemento é a identidade, resulta que

A partir da definição de
, este é o passo de verificação 6.
Isso só mostra que uma mensagem assinada corretamente será verificada corretamente; outras propriedades como mensagens assinadas incorretamente que não são verificadas corretamente e a resistência à ataques de criptoanálise tornam um algoritmo de criptografia seguro.
Recuperação da chave pública
Dado uma mensagem
e a assinatura de Alice
, Bob pode recuperar a chave pública de Alice da seguinte forma:
- Verificar que r e s são inteiros em
. Caso contrário, a assinatura é inválida.
- Calcular o ponto de curva
onde
é um dos
etc. (
não é um valor grande de campo da curva) e
é um valor tal que a equação da curva é satisfeita. Vale ressaltar que existem inúmeros pontos de curva que satisfazem essas condições, e cada valor
vai resultar em uma chave diferente.
- Calcule
, onde HASH é a mesma função usada na geração da assinatura.
- Seja
os
bits mais à esquerda de
.
- Calcule
e
.
- Calcule o ponto de curva
.
- A assinatura é válida se
, combina com a chave pública de Alice.
- Se todos os pontos R foram tentados e nenhum deles combinam com a chave pública de Alice, então a assinatura é inválida.
Correctness of the recovery algorithm
Começamos com a definição de
da etapa de recuperação 6,

Definindo
da etapa de assinatura 4,

Como a multiplicação escalar da curva elíptica se distribui diversas vezes,

Expandindo a definição de
and
da etapa de verificação 5,

Expandindo a definição de s da etapa de assinatura 6,

Como o produto do inverso de um elemento pelo próprio elemento é a identidade, ficamos com

O primeiro e o segundo termo cancelam,

Pela definição de
, esta é a chave pública da Alice.
O parágrafo revela que uma mensagem corretamente assinada vai recuperar a chave pública correta, desde que as informações adicionais foram compartilhadas exclusivamente para calcular o ponto de curva r
Segurança
Em dezembro de 2010, um grupo autodenominado fail0verflow anunciou a recuperação da chave privada do ECDSA usada pela Sony para assinar software para o console de jogos PlayStation 3. No entanto, esse ataque só funcionou porque a Sony não implementou corretamente o algoritmo, porque
era estático em vez de aleatório. Como apontado anteriormente, na seção sobre o algoritmo de geração de assinaturas, isso torna
solucionável, e o algoritmo completamente inútil.
Em 29 de Março de 2011, dois pesquisadores publicaram um artigo da IACR (Associação Internacional para pesquisa criptológica), demonstrando que é possível obter uma chave privada TLS de um servidor utilizando OpenSSL que autentica com curvas elípticas DSA sobre um corpo binário através de um ataque de temporização. A vulnerabilidade foi corrigida no OpenSSL 1.0.0e.
Em agosto de 2013, foi revelado que os erros em algumas implementações da classe Java SecureRandom, algumas vezes gerava colisões em valores k. Isso permitiu que hackers recuperassem chaves privadas, dando-lhes o mesmo controle sobre transações de bitcoin que os proprietários legítimos das chaves tinham, usando a mesma falha que foi usada para revelar a chave de assinatura do PS3 em algumas implementações em aplicativos para Android, que usam Java e dependem do ECDSA para autenticar transações.
Este problema pode ser evitado por meio da geração determinística de k, como descrito pela RFC 6979.
Preocupações
Existem dois tipos de preocupações com ECDSA:
- Preocupações políticas: a confiabilidade das curvas produzidas pelo NIST sendo questionada após serem feitas revelações de que a NSA voluntariamente insere backdoors em software, componentes de hardware e padrões publicados; criptógrafos bem conhecidos expressaram dúvidas sobre como as curvas do NIST foram concebidas, e o estrago voluntário já foi provado no passado.
- Preocupações de ordem técnica: a dificuldade de implementar corretamente o padrão, sua lentidão e falhas de projeto reduzem a segurança em implementações insuficientemente defensivas do gerador de número aleatório Dual EC DRBG .
Ambas as preocupações são resumidas na introdução do libssh curve25519.
Implementações
Abaixo, está uma lista de bibliotecas de criptografia que fornecem suporte para o algoritmo ECDSA:
Leitura complementar
- Accredited Standards Committee X9, American National Standard X9.62-2005, Criptografia de Chave Pública para a Indústria de Serviços Financeiros, O Elliptic Curve Digital Signature Algorithm (algoritmo ECDSA), 16 de novembro de 2005.
- Certicom de Pesquisa, Padrões eficientes de criptografia, SEC 1: Criptografia de Curva Elíptica, Versão 2.0, de 21 de Maio de 2009.
- López, J. e Dahab, R. Uma Visão geral da Criptografia de Curva Elíptica, Relatório Técnico IC-00-10 Universidade Estadual de Campinas, Campinas, 2000.
- Daniel J. Bernstein, Pippenger do algoritmo de exponenciação, 2002.
- Daniel R. L. Brown, Grupos Genéricos, Colisão de Resistência, e ECDSA, Designs, Códigos e Criptografia, 35, 119-152, 2005. ePrint versão
- Ian F. Blake, Gadiel Seroussi, e Nigel Inteligente, os editores, os Avanços na Criptografia de Curva Elíptica, London Mathematical Society Palestra de Série Nota 317, Cambridge University Press, 2005.
- Hankerson, D.; Vanstone, S.; Menezes, A. Guide to Elliptic Curve Cryptography. Col: Springer Professional Computing. [S.l.: s.n.] ISBN 0-387-95273-X. doi:10.1007/b97644