EdDSA
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. 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. A implementação de referência é um software de domínio público.
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
[editar | editar código]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
[editar | editar código]Ed25519 é o esquema de assinatura EdDSA que usa a função hash SHA-512 e uma curva elíptica relacionada à Curve25519[2] onde:
- 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
[editar | editar código]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
[editar | editar código]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
[editar | editar código]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
[editar | editar código]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]
- Apple Watch e iPhone usam chaves Ed25519 para autenticação mútua IKEv2[23]
- Botan
- Crypto++
- Protocolo da criptomoeda CryptoNote
- Dropbear SSH[24]
- Implementação do EdDSA pelo I2Pd[25]
- Java Development Kit 15
- Libgcrypt
- Minisign[26] e Minisign Miscellanea para o macOS
- NaCl / libsodium[27]
- OpenSSL 1.1.1[28]
- Python - Uma implementação alternativa lenta porém concisa,[29] não inclui proteção contra ataques de canal lateral[30]
- Implementação de referência Supercop[31] (Linguagem C com código assembly em linha)
- Virgil PKI utiliza chaves Ed25519 por padrão[32]
- wolfSSL[33]
Ed448
[editar | editar código]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
[editar | editar código]- ↑ 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
- ↑ 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
- ↑ «Software». 11 de junho de 2015. Consultado em 7 de outubro de 2016
- ↑ 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
- ↑ 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
- ↑ Bernstein, Daniel J.; Lange, Tanja. «ECDLP Security: Rho». SafeCurves: choosing safe curves for elliptic-curve cryptography. Consultado em 16 de novembro de 2016
- ↑ a b Langley, A.; Hamburg, M.; Turner, S. (janeiro de 2016). «Elliptic Curves for Security». IETF. Consultado em 12 de novembro de 2024
- ↑ 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
- ↑ Bernstein, Daniel J. (22 de janeiro de 2017). «Ed25519: high-speed high-security signatures». Consultado em 27 de setembro de 2019
- ↑ Bernstein, Daniel J. (22 de janeiro de 2017). «Ed25519: high-speed high-security signatures». Consultado em 1 de junho de 2020
- ↑ Johnston, Casey (30 de dezembro de 2010). «PS3 hacked through poor cryptography implementation». Ars Technica. Consultado em 15 de novembro de 2016
- ↑ 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
- ↑ «27th Chaos Communication Congress: Console Hacking 2010: PS3 Epic Fail» (PDF). Consultado em 4 de agosto de 2019
- ↑ 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
- ↑ 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
- ↑ 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
- ↑ 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
- ↑ «ed25519-speccheck». GitHub. Consultado em 15 de fevereiro de 2021
- ↑ «Changes since OpenSSH 6.4». 3 de janeiro de 2014. Consultado em 7 de outubro de 2016
- ↑ «What's new in GnuPG 2.1». 14 de julho de 2016. Consultado em 7 de outubro de 2016
- ↑ «Things that use Ed25519». 6 de outubro de 2016. Consultado em 7 de outubro de 2016
- ↑ 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
- ↑ «System security for watchOS». Consultado em 7 de junho de 2021
- ↑ 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
- ↑ «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
- ↑ Denis, Frank. «Minisign: A dead simple tool to sign files and verify signatures.». Consultado em 7 de outubro de 2016
- ↑ Denis, Frank (29 de junho de 2016). «libsodium/ChangeLog». GitHub. Consultado em 7 de outubro de 2016
- ↑ «OpenSSL CHANGES». 31 de julho de 2019. Consultado em 5 de agosto de 2019. Cópia arquivada em 18 de maio de 2018
- ↑ «python/ed25519.py: the main subroutines». 6 de julho de 2011. Consultado em 7 de outubro de 2016
- ↑ «Software: Alternate implementations». 11 de junho de 2015. Consultado em 7 de outubro de 2016
- ↑ «eBACS: ECRYPT Benchmarking of Cryptographic Systems: SUPERCOP». 10 de setembro de 2016. Consultado em 7 de outubro de 2016
- ↑ «Virgil Security Crypto Library for C: Library: Foundation». GitHub. Consultado em 4 de agosto de 2019
- ↑ «wolfSSL Embedded SSL Library (formerly CyaSSL)». Consultado em 7 de outubro de 2016