Um breve overview sobre as vantagens e aplicações de ECDSA e algoritmos assimétricos de assinatura digital em problemas reais
Com a crescente ameaça cibernética e avanços computacionais, é natural o interesse geral pelo avanço de técnicas de defesa nas comunicações digitais, cobertas pelo campo da criptografia. Um dos algoritmos que se destacam atualmente, muito promovido pelo advento das criptomoedas, é o Elliptic Curve Digital Signature Algorithm (ECDSA).
Para entender a ideia por trás do algoritmo, antes precisamos fazer algumas diferenciações sobre as ferramentas da criptografia. Para isso, imagine a seguinte situação, onde temos:
- Ana, que quer enviar uma mensagem de forma segura para Beto;
- Beto, que quer receber a mensagem de Ana de forma segura;
- Carlos, que deseja de alguma forma violar a mensagem enviada;

Considere os seguintes aspectos da segurança da mensagem enviada:
- Confidencialidade: É necessário evitar que Carlos seja capaz de compreender a mensagem enviada de Ana para Beto;
- Integridade: É necessário garantir que exatamente a mesma mensagem que foi enviada por Ana seja recebida por Beto, sem interferências de Carlos;
- Autenticidade: É necessário garantir que de fato foi Ana que enviou a mensagem para Beto, impedindo que Carlos mande a mensagem fingindo que foi emitida por Ana;
Duas ferramentas da criptografia lidam com estes diferentes propósitos:
- Encriptação: Embaralhando as mensagens de forma que apenas aqueles que possuem determinada senha/chave possam desembaralha-la, pode garantir ao mesmo tempo os objetivos de confidencialidade e de integridade.
- Assinatura digital: Declarando a identidade do emissor da mensagem e gerando uma espécie de assinatura que pode ser verificada como pertencente ao emissor, garante ao mesmo tempo os objetivos de integridade e de autenticidade.
A segunda diferenciação que precisamos trazer é sobre a natureza das senhas/chaves que precisam ser trocadas entre os participantes para estabelecer uma comunicação segura. A forma mais simples de fazer isso utiliza as chamadas chaves simétricas. Nestes arranjos, os dois lados da comunicação devem possuir a mesma chave. No caso de encriptação com chave simétrica, por exemplo, o emissor da mensagem utiliza uma chave para embaralhar a mensagem e o receptor deve utilizar a mesma chave para desembaralha-la.
Esse método possui apenas um problema: Em algum momento anterior ao estabelecimento da conexão segura, essa chave precisa ser transmitida de um participante para o outro. Ou seja, se a transmissão da chave for interceptada por uma terceira pessoa, toda a segurança da comunicação foi violada.
Para resolver esse problema, surgem as chaves assimétricas. Como o emissor da mensagem só utiliza a sua chave para embaralhar/assinar e o receptor apenas utiliza a sua para desembaralhar/verificar, eles poderiam ter chaves diferentes, com cada uma delas executando apenas uma destas funções. Os algoritmos assimétricos cumprem justamente isso:
- O iniciador da comunicação gera uma chave segura, chamada de chave privada. No caso da encriptação, esta chave será responsável por desembaralhar as mensagens e, no caso da assinatura digital, irá gerar as assinaturas.
- O iniciador então calcula uma chave pública a partir da sua chave privada. Esta chave, como diz o nome, pode ser livremente distribuída. Ela cumpre apenas a função restante no processo, ou seja, embaralha (no caso da criptografia) e verifica (no caso da assinatura digital). Naturalmente, é importante que seja impossível, na prática, recalcular a chave privada a partir da chave pública.
- O iniciador então envia apenas a chave pública para a outra pessoa na comunicação e mantém a chave privada segura consigo.
Desta forma, por mais que um terceiro intercepte a chave pública gerada, não será capaz de ler mensagens encriptadas nem de gerar assinaturas digitais por outras pessoas, garantindo a segurança da comunicação.
O ECDSA é um algoritmo de assinatura digital e utiliza chaves assimétricas.
Outros algoritmos possibilitam resultados semelhantes, sendo o Rivest-Shamir-Adleman (RSA) um dos mais conhecidos concorrentes do ECDSA. As principais vantagens do ECDSA frente ao RSA são:
- Velocidade de geração das chaves: A chave privada no ECDSA é simplesmente um número aleatório muito grande, sendo rapidamente gerado por um computador. Já o RSA necessita da geração de dois números primos aleatórios gigantes, o que tende a ser mais trabalhoso, reduzindo a velocidade de geração das chaves.
- Tamanho das chaves: O ECDSA consegue atingir o mesmo nível de segurança do RSA com chaves muito menores. Uma chave ECDSA de 256 bits, por exemplo, equivale a uma chave RSA de 3072 bits. Isso permite a sua utilização em computadores e aplicações mais simples.
- Resistência quântica: Os algoritmos de computação quântica estudados atualmente são capazes de quebrar mais facilmente uma chave RSA do que uma chave de ECDSA, reduzindo a preocupação dos seus usuários com o futuro.
No geral, todos os algoritmos criptográficos aceitos atualmente são resistentes a ataques de tentativa e erro (brute force). No entanto, para fins de ilustração, cabe avaliar o quão difícil seria adivinhar a chave ECDSA gerada por um usuário de forma segura. Considere o seguinte:
- Com determinadas informações disponíveis, é possível reduzir a quantidade máxima de tentativas para quebrar uma chave ECDSA de 256 bits a 2¹²⁸, que é algo em torno de 340 milhões de trilhões de trilhões de tentativas.
- Suponha que toda a capacidade computacional do mundo consiga fazer cerca de mil trilhões de tentativas por segundo.
- Dividindo o número necessário de tentativas pela velocidade de processamento do planeta inteiro, chegamos à conclusão quase cômica de que mesmo alguém com uma capacidade impensável de recursos ainda levaria mais de dez trilhões de anos para quebrar uma chave ECDSA qualquer, tornando qualquer ideia de brute force virtualmente inviável.
O mundo de criptomoedas se baseou fortemente no uso do ECDSA para garantir a segurança das suas operações. Sistemas como Bitcoin e Ethereum funcionam com o usuário gerando uma chave privada e definindo a sua conta (ou endereço) na rede como uma forma compacta da sua chave pública. Com isso, apenas o dono do endereço consegue gerar novas transações, anexando sua assinatura digital a elas e as enviando para a rede. Assim, qualquer participante do sistema pode facilmente utilizar a chave pública (endereço) para verificar a legitimidade da transação.
Esse uso difundido do ECDSA pelo mundo de cripto trouxe muita atenção para as implementações de ECDSA, tornando-as extremamente robustas. No caso do Stark Bank, tomamos o exemplo do mundo cripto e construímos um case sólido de segurança com base no ECDSA. Utilizando os mesmos princípios, nossos clientes utilizam chaves ECDSA como credencial, permitindo que gerem suas próprias chaves privadas e compartilhem conosco apenas as suas contra-partes públicas. Assim, conseguimos diversas vantagens:
- Apenas o cliente tem acesso a sua chave privada. Sendo assim, enquanto ele não a divulgar para terceiros, não existirá informação acessível nem mesmo para nós, como seu banco, que permita forjar sua assinatura digital e assim falsificar sua identidade. Isso vai de encontro com as práticas comuns de segurança mesmo em bancos, onde normalmente guarda informações suficientes na sua base para replicar a identidade de um cliente. No nosso caso, por mais que hipoteticamente ocorresse um vazamento dos nossos dados ou que um funcionário com alta credencial conseguisse acesso a eles, a autenticação do cliente ainda estaria protegida, já que apenas as chaves públicas seriam expostas.
- Outra particularidade do ECDSA é que, mesmo que uma chave privada seja usada para assinar duas vezes a mesma mensagem, uma assinatura digital diferente será gerada. Com isso, basta que nosso sistema rejeite assinaturas repetidas para evitar o chamado replay attack, onde um atacante poderia capturar uma mensagem e, mesmo sem entendê-la, enviá-la múltiplas vezes para o seu alvo. Isso permitiria, que uma mensagem de um cliente para o seu banco contendo a autorização de determinada transferência fosse enviada de forma maliciosa várias vezes, multiplicando o valor transferido.
- Finalmente, como estamos tratando de um algoritmo popular, nossas implementações de código aberto do algoritmo ganharam grande visibilidade. Agora, em meados de 2023, contamos com mais de 200 mil downloads por dia e mais de 40 milhões de downloads acumulados em algumas das linguagens de programação a que damos suporte. Com isso, garantimos que um número altíssimo de usuários validem diariamente a segurança do nosso sistema, além de retribuirmos à comunidade de programação pela popularização do algoritmo que nos mantém seguros.
As ameaças do mundo cibernético estão sempre avançando e pondo em risco aspectos fundamentais do nosso dia a dia. Isso nos obriga a evoluir constantemente as nossas defesas e a explorar ferramentas diferentes das que funcionavam antigamente. Seguindo o exemplo do ECDSA, para nos mantermos em um mundo eletrônico confiável e robusto, cabe testar e dar chance às novas técnicas que acompanharem essa evolução.

