ECDSA

Em criptografia, o Elliptic Curve Digital Signature Algorithm (ECDSA, em português Algoritmo de Assinatura Digital de Curvas Elípticas) oferece uma variante do Digital Signature Algorithm (DSA), que usa criptografia de curva elíptica.

Tamanho de chave e assinatura com o DSA

Tal como ocorre com a criptografia de curva elíptica em geral, o tamanho em bits da chave pública que se acredita ser necessário para o ECDSA é cerca de duas vezes o tamanho do nível de segurança, em bits.[1] Por exemplo, em um nível de segurança de 80 bits (o que significa que um invasor precisaria de no máximo cerca de operações para encontrar a chave privada) o tamanho da chave pública de um algoritmo ECDSA deverá ser de 160 bits. Por outro lado, o tamanho da assinatura é o mesmo para o DSA e o ECDSA: aproximadamente bits, onde é o nível de segurança medido em bits, isto é, cerca de 320 bits para um nível de segurança de 80 bits, que é equivalente a

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:

  1. Calcular . (Aqui HASH é uma função de hash criptográfica, como SHA-2, com a saída convertida para um inteiro.)
  2. 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.[2])
  3. Escolher um inteiro aleatório criptograficamente seguro em .
  4. Calcular o ponto da curva .
  5. Calcular . Se , voltar para o passo 3.
  6. Calcular . Se , voltar para o passo 3.
  7. 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.[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.[4]

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.[5]

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:

  1. Verificar que não é igual ao elemento identidade O, e suas coordenadas são, de outra forma válida
  2. Verificar que está sobre a curva
  3. Verificar que

Depois, Bob segue estes passos:

  1. Verificar que e são números inteiros em . Se não, a assinatura é inválida.
  2. Calcular , em que HASH é a mesma função utilizada na geração da assinatura.
  3. Considerar como os bits mais à esquerda de .
  4. Calcular e .
  5. Calcular o ponto da curva . Se então, a assinatura é válida.
  6. 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.[6]

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:[7]

  1. Verificar que r e s são inteiros em . Caso contrário, a assinatura é inválida.
  2. 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.
  3. Calcule , onde HASH é a mesma função usada na geração da assinatura.
  4. Seja os bits mais à esquerda de .
  5. Calcule e .
  6. Calcule o ponto de curva .
  7. A assinatura é válida se , combina com a chave pública de Alice.
  8. 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.[8]

Em 29 de Março de 2011, dois pesquisadores publicaram um artigo da IACR (Associação Internacional para pesquisa criptológica),[9] 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.[10] A vulnerabilidade foi corrigida no OpenSSL 1.0.0e.[11]

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.[12]

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:

  1. 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[13] expressaram[14][15] dúvidas sobre como as curvas do NIST foram concebidas, e o estrago voluntário já foi provado no passado.[16][17]
  2. Preocupações de ordem técnica: a dificuldade de implementar corretamente o padrão,[18] 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 .[19]

Ambas as preocupações são resumidas na introdução do libssh curve25519.[20]

Implementações

Abaixo, está uma lista de bibliotecas de criptografia que fornecem suporte para o algoritmo ECDSA:

Referências

  1. Johnson, Don; Menezes, Alfred (1999). «The Elliptic Curve Digital Signature Algorithm (ECDSA)». Certicom Research. Canada. CiteSeerX 10.1.1.38.8014Acessível livremente
  2. «NIST FIPS 186-4, de julho de 2013, pp. 19 e 26» (PDF)
  3. Console de Hacking 2010 - PS3 Epic Fail Arquivado em 2014-12-15 no Wayback Machine, página 123-128
  4. «Android Security Vulnerability». Consultado em 24 de fevereiro de 2015. Arquivado do original em 7 de abril de 2019
  5. RFC 6979 - Deterministic Usage of the Digital Signature Algorithm (DSA) and Elliptic Curve Digital Signature Algorithm (ECDSA) (Relatório técnico). doi:10.17487/RFC6979
  6. «The Double-Base Number System in Elliptic Curve Cryptography» (PDF). Consultado em 22 de abril de 2014. Arquivado do original (PDF) em 26 de julho de 2011
  7. Daniel R. L. Brown Standards for Efficient Cryptography Groug (SECG) 1: Elliptic Curve Cryptography (Version 2.0) https://www.secg.org/sec1-v2.pdf
  8. «Hackers Describe PS3 Security As Epic Fail, Gain Unrestricted Access»
  9. «Cryptology ePrint Archive: Report 2011/232 acessodata=24 de fevereiro de 2015». Arquivado do original em 8 de dezembro de 2018
  10. «Vulnerability Note VU#536044 - OpenSSL leaks ECDSA private key through a remote timing attack». www.kb.cert.org. Consultado em 24 de maio de 2011. Arquivado do original em 7 de abril de 2019
  11. «ChangeLog». OpenSSL Project. Consultado em 22 de abril de 2014. Arquivado do original em 9 de agosto de 2020
  12. «Android bug batters Bitcoin wallets». The Register. 12 de agosto de 2013. Consultado em 27 de agosto de 2017. Arquivado do original em 15 de agosto de 2013
  13. Schneier, Bruce (5 de setembro de 2013). «The NSA Is Breaking Most Encryption on the Internet». Schneier on Security. Consultado em 11 de janeiro de 2018. Arquivado do original em 15 de dezembro de 2017
  14. «SafeCurves: choosing safe curves for elliptic-curve cryptography». 25 de outubro de 2013. Consultado em 11 de janeiro de 2018. Arquivado do original em 7 de abril de 2017
  15. «Security dangers of the NIST curves» (PDF)
  16. «The Strange Story of Dual_EC_DRBG». Schneier on Security
  17. «NSA Efforts to Evade Encryption Technology Damaged U.S. Cryptography Standard»
  18. «How to design an elliptic-curve signature system». The cr.yp.to blog
  19. «New key type (ed25519) and private key format»
  20. «curve25519-sha256@libssh.org.txt\doc - projects/libssh.git». libssh shared repository

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 

Ligações externas