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.
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.
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:
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:
Isto satisfaz a equação de verificação:
Ed25519 é o esquema de assinatura EdDSA que usa a função hash SHA-512 e uma curva elíptica relacionada à Curve25519 onde:
A curva de Edwards torcida é conhecida como edwards25519, e é birracionalmente equivalente à Curva de Montgomery conhecida como Curve25519. A equivalência é:
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.
As chaves públicas têm 256 bits de comprimento e as assinaturas têm 512 bits de comprimento.
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.
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.
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.