secp256k1 vs ed25519: Curvas Elipticas em Cripto
Índice
Toda transacao de criptomoeda requer uma assinatura digital --- uma prova matematica de que a pessoa enviando fundos realmente controla a conta. Essa assinatura e produzida por um algoritmo que depende das propriedades de uma curva eliptica. As duas curvas que dominam o mundo blockchain sao secp256k1 e ed25519. Elas servem ao mesmo proposito fundamental, mas seus designs, caracteristicas de desempenho e historicos de adocao sao muito diferentes.
Este guia explica o que as curvas elipticas fazem na criptografia, como secp256k1 e ed25519 diferem, e o que essas diferencas significam para geracao de chaves, seguranca de carteiras e as blockchains que voce usa.
O Que Sao Curvas Elipticas?¶
Uma curva eliptica, no contexto da criptografia, e uma estrutura matematica definida por uma equacao da forma y^2 = x^3 + ax + b (para curvas como secp256k1) ou uma forma relacionada (para curvas como ed25519). A seguranca da criptografia de curva eliptica (ECC) repousa no Problema do Logaritmo Discreto de Curva Eliptica (ECDLP): dado um ponto P na curva e um ponto Q = k * P (onde k e um escalar e * representa multiplicacao de ponto), e computacionalmente inviavel determinar k a partir de P e Q sozinhos.
Em termos de criptomoedas:
- k e sua chave privada --- um numero secreto.
- P e o ponto gerador --- um ponto fixo e publicamente conhecido na curva.
- Q e sua chave publica --- derivada da chave privada via multiplicacao de ponto.
Qualquer pessoa pode verificar que Q corresponde a k * P se conhecer tanto Q quanto uma assinatura produzida com k, mas ninguem pode extrair k de Q. E isso que torna seguro compartilhar sua chave publica (e o endereco derivado dela) enquanto mantém a chave privada em segredo.
ECC fornece a mesma seguranca que RSA com tamanhos de chave muito menores. Uma chave de curva eliptica de 256 bits oferece aproximadamente a mesma seguranca que uma chave RSA de 3.072 bits. Essa compacidade e essencial para blockchains, onde cada byte de uma transacao custa armazenamento e largura de banda.
secp256k1: A Curva do Bitcoin e Ethereum¶
secp256k1 e a curva eliptica usada pelo Bitcoin, Ethereum e a maioria das blockchains em seu ecossistema. O nome se decompoe da seguinte forma:
- sec --- Standards for Efficient Cryptography
- p --- A curva e definida sobre um corpo primo
- 256 --- O primo tem 256 bits de comprimento
- k --- Esta e uma curva de Koblitz (uma classe especifica com beneficios de eficiencia computacional)
- 1 --- E a primeira (e unica) curva desse tipo no padrao
A equacao da curva e: y^2 = x^3 + 7 (sobre o corpo finito definido pelo primo p = 2^256 - 2^32 - 977).
Satoshi Nakamoto escolheu secp256k1 para o Bitcoin em 2009. Na epoca, foi uma escolha incomum. A maioria dos sistemas usava a curva NIST P-256 (tambem chamada secp256r1). O "r" em secp256r1 indica que usa uma semente veriflcavelmente aleatoria para seus parametros, enquanto os parametros de secp256k1 foram escolhidos por eficiencia computacional, nao por aleatoriedade. Alguns criptografos ha muito tempo se preocupam que curvas NIST possam ter parametros influenciados pela NSA --- uma preocupacao amplificada pelo escandalo Dual_EC_DRBG revelado em 2013. Secp256k1 evita essa suspeita inteiramente porque seus parametros sao simples e transparentes: a = 0, b = 7.
Assinaturas: ECDSA¶
O algoritmo de assinatura emparelhado com secp256k1 no Bitcoin e Ethereum e ECDSA --- o Elliptic Curve Digital Signature Algorithm. Quando voce envia uma transacao Bitcoin ou Ethereum, a carteira usa ECDSA para produzir uma assinatura a partir da sua chave privada e do hash da transacao. Os validadores na rede verificam essa assinatura usando sua chave publica.
Assinaturas ECDSA em secp256k1 tem 64 bytes (dois valores de 32 bytes, comumente chamados r e s) mais um byte de recuperacao que algumas implementacoes incluem. Elas sao deterministicas quando usam RFC 6979 (que tanto Bitcoin quanto Ethereum usam), significando que a mesma mensagem e chave privada sempre produzem a mesma assinatura --- nenhuma aleatoriedade necessaria no momento da assinatura.
Uma peculiaridade do ECDSA e a maleabilidade de assinatura: dada uma assinatura valida (r, s), o par (r, -s mod n) tambem e valido. Bitcoin abordou isso com BIP66 (codificacao DER estrita) e mais tarde com SegWit. Ethereum resolve isso aplicando uma forma canonica para s.
Desempenho¶
A verificacao de secp256k1 em implementacoes otimizadas (como libsecp256k1, usada pelo Bitcoin Core) e rapida: varios milhares de verificacoes por segundo em hardware moderno. No entanto, assinatura e verificacao ECDSA sao inerentemente mais complexas que EdDSA (o algoritmo emparelhado com ed25519), que foi projetado desde o inicio para velocidade.
ed25519: A Escolha Moderna do Solana¶
ed25519 e uma curva eliptica projetada por Daniel J. Bernstein e seus colaboradores. Foi publicada em 2011, dois anos apos o lancamento do Bitcoin, e representa uma geracao mais nova de design de curva que prioriza tanto seguranca quanto desempenho.
O nome se refere a forma da curva de Edwards sobre o corpo primo 2^255 - 19 (dai "25519"). A curva especifica usada e uma curva de Edwards retorcida chamada "edwards25519", que e biracionalmente equivalente a Curve25519 (amplamente usada em troca de chaves, por exemplo no Signal e TLS 1.3).
Solana escolheu ed25519 como sua curva de assinatura, assim como varias outras blockchains modernas. A escolha reflete as vantagens de ed25519 em throughput --- uma preocupacao critica para a arquitetura de alto desempenho do Solana.
Assinaturas: EdDSA¶
O algoritmo de assinatura emparelhado com ed25519 e EdDSA --- o Edwards-curve Digital Signature Algorithm. Especificamente, Solana usa Ed25519 (EdDSA com edwards25519), que produz assinaturas de 64 bytes.
EdDSA foi projetado para evitar as armadilhas do ECDSA:
- Nenhuma aleatoriedade necessaria durante a assinatura. Assinaturas EdDSA sao inerentemente deterministicas --- o nonce e derivado da chave privada e da mensagem via hashing. Com ECDSA, um mau gerador de numeros aleatorios durante a assinatura pode vazar a chave privada completamente (isso aconteceu com a chave de assinatura do PS3 da Sony em 2010).
- Sem maleabilidade de assinatura. Assinaturas EdDSA tem uma unica forma canonica.
- Verificacao em lote mais rapida. Multiplas assinaturas Ed25519 podem ser verificadas simultaneamente mais rapido do que verificar cada uma individualmente --- uma vantagem significativa para blockchains de alto throughput.
- Implementacao mais simples. O algoritmo tem menos casos extremos e condicoes de ramificacao, o que reduz a superficie para ataques de canal lateral.
Desempenho¶
Ed25519 e consistentemente mais rapido que ECDSA-secp256k1 em benchmarks. Assinatura e aproximadamente 2-3 vezes mais rapida, e verificacao de assinatura unica e aproximadamente comparavel, mas a verificacao em lote e onde Ed25519 realmente brilha --- pode verificar centenas de assinaturas significativamente mais rapido do que verifica-las uma por uma. No Solana, onde blocos podem conter milhares de transacoes, essa diferenca de desempenho e substancial.
ECDSA vs EdDSA: Uma Comparacao Direta¶
| Propriedade | ECDSA (secp256k1) | EdDSA (ed25519) |
|---|---|---|
| Tipo de curva | Short Weierstrass | Twisted Edwards |
| Tamanho de chave | 256 bits | 256 bits |
| Tamanho de assinatura | 64-65 bytes | 64 bytes |
| Nivel de seguranca | ~128 bits | ~128 bits |
| Velocidade de assinatura | Rapida | Mais rapida (2-3x) |
| Velocidade de verificacao | Rapida | Comparavel (unica), mais rapida (lote) |
| Assinatura deterministica | Opcional (RFC 6979) | Nativa (por design) |
| Maleabilidade de assinatura | Possivel (mitigada na pratica) | Nenhuma |
| Vulnerabilidade de nonce | Sim (RNG ruim vaza a chave) | Nao (nonce derivado da chave + mensagem) |
| Adocao | Bitcoin, Ethereum, BNB Chain, Tron, Dogecoin, Litecoin | Solana, XRP (parcial), Cardano, Polkadot |
Ambos os algoritmos fornecem aproximadamente 128 bits de seguranca, significando que um atacante precisaria realizar aproximadamente 2^128 operacoes para quebrar uma chave. Isso esta bem alem da capacidade de qualquer computador classico atual ou previsivel. As diferencas residem na seguranca da implementacao e desempenho, nao na forca de seguranca bruta.
Para um olhar mais profundo sobre como a seguranca de chaves funciona na pratica, veja Melhores Praticas de Seguranca de Chave Privada.
Quais Cadeias Usam Qual?¶
A escolha da curva e uma das decisoes arquiteturais mais fundamentais que uma blockchain toma. Aqui esta uma visao geral das principais redes:
Cadeias secp256k1¶
- Bitcoin --- A original. Usa ECDSA com secp256k1 para transacoes padrao, e assinaturas Schnorr (tambem em secp256k1) para Taproot.
- Ethereum --- ECDSA com secp256k1. Todas as cadeias compativeis com EVM herdam essa escolha.
- BNB Chain --- Compativel com EVM, usa secp256k1.
- Polygon --- Compativel com EVM, usa secp256k1.
- Arbitrum e Optimism --- L2s de Ethereum, herdam secp256k1.
- Tron --- Usa secp256k1 com ECDSA.
- Dogecoin --- Fork do Bitcoin, usa secp256k1.
- Litecoin --- Fork do Bitcoin, usa secp256k1.
- Avalanche (C-Chain) --- Compativel com EVM, usa secp256k1.
Cadeias ed25519¶
- Solana --- Usa Ed25519 exclusivamente. Esta e uma razao central pela qual Solana pode processar milhares de transacoes por segundo.
- XRP --- Suporta tanto secp256k1 quanto ed25519. Usuarios podem escolher qual curva usar ao gerar chaves.
- Cardano --- Usa Ed25519 (especificamente Ed25519-BIP32, uma variante estendida).
- Polkadot --- Usa principalmente Sr25519 (Schnorr sobre Ristretto25519), que e proximamente relacionada a ed25519.
A divisao e amplamente geracional. Blockchains projetadas antes de 2015 tendem a usar secp256k1 (seguindo o exemplo do Bitcoin). Blockchains projetadas apos 2017 favorecem cada vez mais ed25519 ou curvas relacionadas.
Impacto na Geracao de Chaves¶
A escolha da curva eliptica afeta diretamente como chaves e enderecos sao gerados. Se voce usa as ferramentas do SafeSeed, a diferenca e tratada automaticamente, mas entende-la ajuda voce a saber o que acontece nos bastidores.
Geracao de Chaves secp256k1¶
- Gere um numero aleatorio de 256 bits (a chave privada). Deve estar entre 1 e
n - 1, onde n e a ordem de secp256k1 (~2^256). - Compute a chave publica: multiplique a chave privada pelo ponto gerador G em secp256k1. O resultado e um ponto (x, y) na curva.
- A chave publica nao comprimida tem 65 bytes (prefixo 04 + 32 bytes x + 32 bytes y). A forma comprimida tem 33 bytes (prefixo 02 ou 03 + 32 bytes x).
- Faca o hash da chave publica para produzir o endereco (SHA-256 + RIPEMD-160 para Bitcoin; Keccak-256 para Ethereum).
Voce pode gerar chaves secp256k1 usando o Gerador de Chave Privada Bitcoin ou Gerador de Chave Privada Ethereum.
Geracao de Chaves ed25519¶
- Gere uma semente aleatoria de 32 bytes (nao e o mesmo que uma seed BIP39 --- este e o material de chave bruto).
- Faca o hash da semente com SHA-512 para produzir 64 bytes. Os primeiros 32 bytes (com bits especificos ajustados) se tornam o escalar usado para assinatura. Os ultimos 32 bytes sao usados para geracao de nonce durante a assinatura.
- Compute a chave publica: multiplique o escalar pelo ponto base B em edwards25519. O resultado e um ponto comprimido de 32 bytes.
- O formato do endereco e especifico da cadeia. No Solana, a propria chave publica (codificada em Base58) e o endereco.
Voce pode gerar chaves ed25519 usando o Gerador de Chave Privada Solana.
Implicacoes Entre Curvas¶
Como secp256k1 e ed25519 sao matematicamente incompativeis, uma chave privada valida em uma curva nao tem relacao significativa com uma chave na outra. Quando voce restaura uma seed phrase em uma carteira que suporta tanto Bitcoin quanto Solana, a carteira executa dois processos de derivacao completamente separados a partir da mesma seed mestre --- um usando secp256k1 para contas Bitcoin/Ethereum, e outro usando ed25519 para contas Solana. A seed compartilhada e a unica conexao entre eles.
E por isso que o caminho de derivacao inclui um tipo de moeda: o caminho do Bitcoin (m/44'/0'/0'/0/0) e o caminho do Solana (m/44'/501'/0'/0') se ramificam no nivel do tipo de moeda, e cada ramo usa sua curva respectiva. Para uma explicacao completa de como os caminhos de derivacao funcionam entre cadeias, leia Carteiras HD e Caminhos de Derivacao Explicados.
E a Computacao Quantica?¶
Tanto secp256k1 quanto ed25519 sao igualmente vulneraveis a um computador quantico suficientemente poderoso executando o algoritmo de Shor, que poderia resolver o problema do logaritmo discreto em tempo polinomial. Nenhuma curva e "mais resistente a quantica" que a outra. A comunidade criptografica esta desenvolvendo esquemas de assinatura pos-quantica, mas nenhuma blockchain importante migrou para um ainda. Para uma avaliacao atual, veja Computacao Quantica e a Ameaca Cripto.
Escolhendo a Ferramenta Certa¶
Como usuario, voce nao escolhe entre secp256k1 e ed25519 diretamente. A blockchain que voce usa faz essa escolha por voce. Bitcoin e Ethereum exigem secp256k1. Solana exige ed25519. O que voce pode escolher e usar ferramentas que implementem corretamente a curva que sua cadeia requer.
Os geradores do SafeSeed lidam com isso automaticamente. O Gerador de Seed Phrase Bitcoin deriva chaves secp256k1. O Gerador de Seed Phrase Ethereum faz o mesmo. O Gerador de Seed Phrase Solana deriva chaves ed25519. Todos rodam inteiramente client-side, usando a Web Crypto API do seu navegador para geracao de numeros aleatorios seguros. Nenhum material de chave privada sai do seu dispositivo.
Entender a curva subjacente a sua blockchain nao muda como voce usa sua carteira no dia a dia. Mas ajuda voce a entender por que enderecos Solana parecem diferentes de enderecos Ethereum, por que voce nao pode usar uma chave privada Solana bruta no Ethereum, e por que as suposicoes de seguranca por tras dos seus fundos sao tao fortes quanto sao. Essas curvas sao a base matematica da propriedade de criptomoedas --- invisiveis no uso normal, mas absolutamente fundamentais.