EdDSA

 Nota: Não confundir com ECDSA.
EdDSA
Geral
Projetistas Daniel J. Bernstein, Niels Duif, Tanja Lange, Peter Schwabe, Bo-Yin Yang, et al.
Primeira publicação 26 de setembro de 2011
Detalhe
Estrutura Criptografia de curva elíptica

Na criptografia de chave pública, o Edwards-curve Digital Signature Algorithm (EdDSA - Algoritmo de Assinatura Digital de Curva de Edwards) é um esquema de assinatura digital que utiliza uma variante da assinatura de Schnorr baseada em curvas de Edwards torcidas.[1]

Foi projetado para ser mais rápido do que os esquemas de assinatura digital existentes sem sacrificar a segurança. Foi desenvolvido por uma equipa que inclui Daniel J. Bernstein, Niels Duif, Tanja Lange, Peter Schwabe e Bo-Yin Yang.[2] A implementação de referência é um software de domínio público.[3]

Resumo

A seguir apresenta-se uma descrição simplificada do EdDSA, ignorando os detalhes da codificação de inteiros e pontos da curva como cadeias de bits; todos os detalhes completos encontram-se nos artigos originais e no RFC.[4][2][1]

Um esquema de assinatura EdDSA baseia-se na escolha:[4][2][1]

  • do corpo finito sobre a potência de um número primo ímpar ;
  • da curva elíptica sobre cujo grupo de pontos racionais sobre tem ordem , onde é um número primo grande e é chamado de cofator;
  • do ponto base com ordem ; e
  • da função hash criptográfica com saídas de bits, onde de modo que os elementos de e os pontos da curva em possam ser representados por cadeias de bits.

Estes parâmetros são comuns a todos os utilizadores do esquema de assinatura EdDSA. A segurança do esquema de assinatura EdDSA depende criticamente da escolha dos parâmetros, exceto pela escolha arbitrária do ponto base — por exemplo, espera-se que o algoritmo rho de Pollard para logaritmos exija aproximadamente adições de curva antes de conseguir calcular um logaritmo discreto,[5] de modo que deve ser grande o suficiente para que isso seja inviável, sendo tipicamente escolhido para exceder 2200.[6] A escolha de é limitada pela escolha de , uma vez que, pelo teorema de Hasse, não pode diferir de por mais de . A função hash é normalmente modelada como um oráculo aleatório nas análises formais de segurança do EdDSA.

Dentro de um esquema de assinatura EdDSA:

Chave pública
Uma chave pública EdDSA é um ponto da curva , codificado em bits.
Verificação da assinatura
Uma assinatura EdDSA para uma mensagem usando a chave pública é o par , codificado em bits, de um ponto da curva e um número inteiro que satisfaz a seguinte equação de verificação, onde denota a concatenação:

Chave privada
Uma chave privada EdDSA é uma cadeia de bits que deve ser escolhida uniformemente de forma aleatória. A chave pública correspondente é , onde corresponde aos bits menos significativos de interpretados como um número inteiro em formato little-endian.
Assinatura
A assinatura de uma mensagem é computada deterministicamente como onde para , e

Isto satisfaz a equação de verificação:

Ed25519

Ed25519 é o esquema de assinatura EdDSA que usa a função hash SHA-512 e uma curva elíptica relacionada à Curve25519[2] onde:

  • é a curva de Edwards torcida

  • e
  • é o ponto único em cuja coordenada é e cuja coordenada é positiva. "Positivo" é definido em termos de codificação de bits:
    • coordenadas "positivas" são coordenadas pares (o bit menos significativo está zerado)
    • coordenadas "negativas" são coordenadas ímpares (o bit menos significativo está ativado)
  • é o SHA-512, com .

A curva de Edwards torcida é conhecida como edwards25519,[7][1] e é birracionalmente equivalente à Curva de Montgomery conhecida como Curve25519. A equivalência é:[2][7][8]

Desempenho

A equipa original otimizou o Ed25519 para a família de processadores x86-64 Nehalem/Westmere. A verificação pode ser executada em lotes (batches) de 64 assinaturas para um rendimento ainda maior. O Ed25519 destina-se a fornecer uma resistência a ataques comparável a cifras simétricas de qualidade de 128 bits.[9]

As chaves públicas têm 256 bits de comprimento e as assinaturas têm 512 bits de comprimento.[10]

Codificação segura

O Ed25519 foi projetado para evitar implementações que usem condições de ramificação (branch) ou índices de arrays que dependam de dados secretos,[2][1] a fim de mitigar ataques de canal lateral.

Assim como ocorre em outros esquemas de assinatura baseados em logaritmo discreto, o EdDSA utiliza um valor secreto chamado nonce, que é único para cada assinatura. Nos esquemas de assinatura DSA e ECDSA, este nonce é tradicionalmente gerado de forma aleatória para cada assinatura — e se o gerador de números aleatórios for quebrado ou se tornar previsível ao fazer uma assinatura, a assinatura pode vazar a chave privada, como aconteceu com a chave de assinatura da atualização de firmware do Sony PlayStation 3.[11][12][13][14]

Em contrapartida, o EdDSA escolhe o nonce de forma determinística como o hash de uma parte da chave privada e da mensagem. Assim, uma vez gerada uma chave privada, o EdDSA não necessita mais de um gerador de números aleatórios para criar assinaturas, e não existe o perigo de que um gerador de números aleatórios corrompido revele a chave privada.[2]

Inconsistências de padronização e implementação

De notar que existem dois esforços de padronização para o EdDSA: um da IETF, a RFC 8032 (informativa), e um do NIST como parte do FIPS 186-5.[15] As diferenças entre os padrões foram analisadas,[16][17] e encontram-se disponíveis vetores de teste.[18]

Software

Usos notáveis do Ed25519 incluem o OpenSSH,[19] o GnuPG[20] e várias alternativas, além da ferramenta signify do OpenBSD.[21] O uso do Ed25519 (e Ed448) no protocolo SSH foi padronizado.[22] Em 2023, a versão final do padrão FIPS 186-5 incluiu o Ed25519 determinístico como um esquema de assinatura aprovado.[15]

Ed448

Ed448 é o esquema de assinatura EdDSA definido na RFC 8032 usando a função hash SHAKE256 e a curva elíptica edwards448, uma curva de Edwards (não torcida) relacionada à Curve448 definida na RFC 7748. O Ed448 também foi aprovado na versão final do padrão FIPS 186-5.[15]

Referências

  1. a b c d e Josefsson, S.; Liusvaara, I. (janeiro de 2017). «Edwards-Curve Digital Signature Algorithm (EdDSA)». IRTF. Consultado em 11 de julho de 2022 
  2. a b c d e f g Bernstein, Daniel J.; Duif, Niels; Lange, Tanja; Schwabe, Peter; Yang, Bo-Yin (2012). «High-speed high-security signatures» (PDF). Journal of Cryptographic Engineering. 2 (2): 77–89. doi:10.1007/s13389-012-0027-1 
  3. «Software». 11 de junho de 2015. Consultado em 7 de outubro de 2016 
  4. a b Bernstein, Daniel J.; Josefsson, Simon; Lange, Tanja; Schwabe, Peter; Yang, Bo-Yin (4 de julho de 2015). «EdDSA for more curves» (PDF). Consultado em 14 de novembro de 2016 
  5. Bernstein, Daniel J.; Lange, Tanja; Schwabe, Peter (1 de janeiro de 2011). «On the correct use of the negation map in the Pollard rho method». IACR Cryptology ePrint Archive. Consultado em 14 de novembro de 2016 
  6. Bernstein, Daniel J.; Lange, Tanja. «ECDLP Security: Rho». SafeCurves: choosing safe curves for elliptic-curve cryptography. Consultado em 16 de novembro de 2016 
  7. a b Langley, A.; Hamburg, M.; Turner, S. (janeiro de 2016). «Elliptic Curves for Security». IETF. Consultado em 12 de novembro de 2024 
  8. Bernstein, Daniel J.; Lange, Tanja (2007). «Faster addition and doubling on elliptic curves». Advances in cryptology—ASIACRYPT, Springer. Consultado em 1 de março de 2024 
  9. Bernstein, Daniel J. (22 de janeiro de 2017). «Ed25519: high-speed high-security signatures». Consultado em 27 de setembro de 2019 
  10. Bernstein, Daniel J. (22 de janeiro de 2017). «Ed25519: high-speed high-security signatures». Consultado em 1 de junho de 2020 
  11. Johnston, Casey (30 de dezembro de 2010). «PS3 hacked through poor cryptography implementation». Ars Technica. Consultado em 15 de novembro de 2016 
  12. fail0verflow (29 de dezembro de 2010). «Console Hacking 2010: PS3 Epic Fail» (PDF). Chaos Communication Congress. Consultado em 15 de novembro de 2016. Cópia arquivada (PDF) em 26 de outubro de 2018 
  13. «27th Chaos Communication Congress: Console Hacking 2010: PS3 Epic Fail» (PDF). Consultado em 4 de agosto de 2019 
  14. Buchanan, Bill (12 de novembro de 2018). «Not Playing Randomly: The Sony PS3 and Bitcoin Crypto Hacks. Watch those random number generators». Medium. Consultado em 11 de março de 2024 
  15. a b c Moody, Dustin (3 de fevereiro de 2023). «FIPS 186-5: Digital Signature Standard (DSS)». NIST. Consultado em 4 de março de 2023 
  16. Chalkias, Konstantinos; Garillot, Francois; Nikolaenko, Valeria (1 de outubro de 2020). «Taming the many EdDSAs». Security Standardisation Research Conference (SSR 2020). Consultado em 15 de fevereiro de 2021 
  17. Brendel, Jacqueline; Cremers, Cas; Jackson, Dennis; Zhao, Mang (3 de julho de 2020). «The provable security of ed25519: Theory and practice». IEEE Symposium on Security and Privacy (S&P 2021). Consultado em 15 de fevereiro de 2021 
  18. «ed25519-speccheck». GitHub. Consultado em 15 de fevereiro de 2021 
  19. «Changes since OpenSSH 6.4». 3 de janeiro de 2014. Consultado em 7 de outubro de 2016 
  20. «What's new in GnuPG 2.1». 14 de julho de 2016. Consultado em 7 de outubro de 2016 
  21. «Things that use Ed25519». 6 de outubro de 2016. Consultado em 7 de outubro de 2016 
  22. Harris, B.; Velvindron, L. (fevereiro de 2020). «Ed25519 and Ed448 Public Key Algorithms for the Secure Shell (SSH) Protocol». IETF. Consultado em 11 de julho de 2022 
  23. «System security for watchOS». Consultado em 7 de junho de 2021 
  24. Johnston, Matt (14 de novembro de 2013). «DROPBEAR_2013.61test». Consultado em 5 de agosto de 2019. Cópia arquivada em 5 de agosto de 2019 
  25. «Heuristic Algorithms and Distributed Computing» (PDF). Èvrističeskie Algoritmy I Raspredelennye Vyčisleniâ. 2015. Consultado em 7 de outubro de 2016. Cópia arquivada (PDF) em 20 de outubro de 2016 
  26. Denis, Frank. «Minisign: A dead simple tool to sign files and verify signatures.». Consultado em 7 de outubro de 2016 
  27. Denis, Frank (29 de junho de 2016). «libsodium/ChangeLog». GitHub. Consultado em 7 de outubro de 2016 
  28. «OpenSSL CHANGES». 31 de julho de 2019. Consultado em 5 de agosto de 2019. Cópia arquivada em 18 de maio de 2018 
  29. «python/ed25519.py: the main subroutines». 6 de julho de 2011. Consultado em 7 de outubro de 2016 
  30. «Software: Alternate implementations». 11 de junho de 2015. Consultado em 7 de outubro de 2016 
  31. «eBACS: ECRYPT Benchmarking of Cryptographic Systems: SUPERCOP». 10 de setembro de 2016. Consultado em 7 de outubro de 2016 
  32. «Virgil Security Crypto Library for C: Library: Foundation». GitHub. Consultado em 4 de agosto de 2019 
  33. «wolfSSL Embedded SSL Library (formerly CyaSSL)». Consultado em 7 de outubro de 2016 

Ligações externas

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.