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.
Um esquema de assinatura EdDSA baseia-se na escolha:
do corpo finito sobre a potência de um número primo ímpar ;
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, de modo que deve ser grande o suficiente para que isso seja inviável, sendo tipicamente escolhido para exceder 2200. 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 onde:
A equipa original otimizou o Ed25519 para a família de processadores x86-64Nehalem/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.
As chaves públicas têm 256 bits de comprimento e as assinaturas têm 512 bits de comprimento.
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, 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.
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.
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. As diferenças entre os padrões foram analisadas, e encontram-se disponíveis vetores de teste.
Software
Usos notáveis do Ed25519 incluem o OpenSSH, o GnuPG e várias alternativas, além da ferramenta signify do OpenBSD. O uso do Ed25519 (e Ed448) no protocolo SSH foi padronizado. Em 2023, a versão final do padrão FIPS 186-5 incluiu o Ed25519 determinístico como um esquema de assinatura aprovado.
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.
↑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. Cópia arquivada em 22 de outubro de 2026 !CS1 manut: Nomes múltiplos: lista de autores (link)