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.

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.

Um esquema de assinatura EdDSA baseia-se na escolha:

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, de modo que deve ser grande o suficiente para que isso seja inviável, sendo tipicamente escolhido para exceder . 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 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, e é birracionalmente equivalente à Curva de Montgomery conhecida como Curve25519. A equivalência é:

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.

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.

Apple Watch e iPhone usam chaves Ed25519 para autenticação mútua IKEv2 Botan Crypto++ Protocolo da criptomoeda CryptoNote Dropbear SSH Implementação do EdDSA pelo I2Pd Java Development Kit 15 Libgcrypt Minisign e Minisign Miscellanea para o macOS NaCl / libsodium OpenSSL 1.1.1 Python - Uma implementação alternativa lenta porém concisa, não inclui proteção contra ataques de canal lateral Implementação de referência Supercop (Linguagem C com código assembly em linha) Virgil PKI utiliza chaves Ed25519 por padrão wolfSSL

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.

Referências

Ligações externas

Página inicial do Ed25519