
O algoritmo Keccak é uma família de funções hash criptográficas criadas para transformar dados de entrada de qualquer tamanho em uma impressão digital digital de comprimento fixo. Ele é a base do padrão SHA-3 e amplamente utilizado em aplicações de blockchain.
Uma função hash pode ser vista como uma “máquina de impressão digital”: a mesma entrada sempre gera a mesma saída, mas é praticamente impossível reconstruir a entrada original apenas com base nessa saída. O Keccak permite comprimentos de saída variáveis, sendo o mais comum o de 256 bits (Keccak-256). Esse resultado de tamanho fixo viabiliza verificações, indexações e checagens de consistência eficientes.
O Keccak é indispensável porque atua como a principal “máquina de impressão digital” de sistemas como o Ethereum, sustentando processos-chave como geração de endereços, seletores de funções de smart contracts e indexação de logs de eventos.
Por exemplo, em exchanges como a Gate, ao depositar ETH, o endereço iniciado por “0x” é obtido ao aplicar Keccak-256 à chave pública e utilizar os 20 bytes finais. Para chamadas de contrato, o seletor de função é gerado aplicando Keccak-256 à assinatura da função e extraindo os 4 primeiros bytes. Logs de eventos utilizam Keccak para criar tópicos que permitem buscas rápidas.
O Keccak utiliza uma “construção esponja”. Imagine uma esponja: ela primeiro “absorve” os dados de entrada para misturar o estado interno e, em seguida, “espreme” a saída desejada do hash.
Etapa 1, Absorção: A mensagem de entrada é dividida em blocos, que são aplicados com XOR na “área de escrita” do estado—como absorver água em uma esponja e incorporar os dados ao estado.
Etapa 2, Permutação: Uma função de permutação (Keccak-f) é aplicada em várias rodadas para embaralhar os bits do estado. Essa permutação é um processo reversível de “embaralhamento”; o Keccak-f[1600] normalmente executa 24 rodadas.
Etapa 3, Extração: A saída é lida da “área de leitura” do estado. Para saídas maiores, novas permutações são aplicadas antes de extrair mais dados—assim como espremer mais água de uma esponja conforme necessário.
Com os parâmetros padrão do Keccak-256, o estado interno possui 1600 bits, divididos em uma taxa (área de leitura/escrita) de 1088 bits e uma capacidade (buffer de segurança) de 512 bits. Quanto maior a capacidade, maior a segurança.
Existem quatro aplicações principais do Keccak no Ethereum: geração de endereços, seletores de funções, tópicos de eventos e indexação de estruturas de dados.
A principal diferença entre Keccak e SHA3 está nos parâmetros de preenchimento (“separação de domínio”). O SHA3-256 utiliza o sufixo de preenchimento 0x06, enquanto o Keccak-256 do Ethereum utiliza 0x01.
Isso significa que entradas idênticas geram saídas diferentes para Keccak-256 e SHA3-256. Em desenvolvimento ou auditorias, é fundamental confirmar se está usando “Keccak-256” ou “SHA3-256”—eles não são intercambiáveis. Quando o NIST padronizou o SHA-3 em 2015, fez esse ajuste de separação de domínio (fonte: NIST, 2015).
Primeiro: Confirme se sua entrada é bytes ou texto. Se for uma string, sempre codifique como UTF-8; para strings hexadecimais, converta para bytes puros e não inclua o prefixo “0x” como parte dos dados.
Segundo: Escolha a função correta. Na EVM, keccak256 (Keccak-256) é o padrão. Algumas bibliotecas se referem ao SHA3-256 como sha3—verifique cuidadosamente a documentação e a versão da biblioteca para evitar equívocos.
Terceiro: Faça validação cruzada dos resultados. Use duas bibliotecas ou ferramentas independentes para calcular os hashes e garantir que sejam idênticos; seletores conhecidos como "transfer(address,uint256)" resultando em "0xa9059cbb" servem como testes.
Considere hashes como impressões digitais irreversíveis em seus fluxos de trabalho—eles não são criptografia nem números aleatórios. Para evitar ataques de rainbow table, sempre adicione um salt aleatório antes de hashear, e faça o hash do salt junto com os dados.
Há três armadilhas principais: diferenças de preenchimento, erros de codificação e uso inadequado em aplicações.
A segurança do Keccak está em sua construção esponja e no parâmetro de capacidade. Para Keccak-256, a resistência a colisão é de cerca de 2^128 operações; a resistência à pré-imagem é de aproximadamente 2^256 operações.
Até janeiro de 2025, não existem ataques práticos de colisão ou pré-imagem conhecidos contra os parâmetros padrão; as pesquisas concentram-se em variantes de menos rodadas ou limites teóricos. Em desempenho, as principais bibliotecas já contam com implementações otimizadas para CPU/GPU de alta performance; a aceleração por hardware (como ASICs) está avançando para demandas elevadas.
O Keccak continuará sendo central para a segurança de sistemas como núcleo do SHA-3; no ecossistema EVM, é fundamental para endereços, seletores e indexação de logs. Com a evolução da aceleração por hardware e das bibliotecas, desempenho e ferramentas continuarão avançando. Novos casos de uso (como provas de conhecimento zero) podem adotar hashes alternativos como Poseidon, mas isso não compromete a estabilidade do Keccak para tarefas gerais de impressão digital e indexação. Para desenvolvedores, desde que se diferencie Keccak-256 de SHA3-256 e se gerencie rigorosamente codificação e testes, Keccak segue como ferramenta de confiança em baixo nível.
No Ethereum, Keccak-256 é utilizado para gerar endereços de conta—hasheando sua chave pública com Keccak-256 e usando os 20 bytes finais como endereço. Se você utiliza a Gate ou outro app de carteira, esse processo é automático; se estiver desenvolvendo smart contracts, use a função nativa keccak256() do Solidity. Experimente bibliotecas como Web3.js para observar como os hashes convertem dados de qualquer tamanho em resultados fixos de 256 bits.
Isso normalmente se deve a diferenças na codificação dos dados de entrada. Keccak-256 espera dados em bytes—se você inserir strings de texto, as ferramentas podem tratar a codificação de caracteres de formas diferentes (UTF-8 vs ASCII). A solução é padronizar sua codificação e especificar explicitamente o formato de entrada durante o desenvolvimento; plataformas como a Gate normalmente fornecem instruções claras. Também confirme se está usando Keccak-256 ou SHA3-256—os resultados diferem mesmo para entradas idênticas.
Keccak-256 é amplamente utilizado em smart contracts: verificação de integridade de dados (hash de dados de transação para comparação), geração de IDs únicas (hash de parâmetros combinados) ou implementação de controle de acesso (armazenamento de informações sensíveis como hash em vez de texto puro). Alguns contratos fazem hash dos dados do usuário antes do armazenamento para evitar a exposição de valores brutos. Essa flexibilidade faz do Keccak uma ferramenta fundamental do Web3—mas lembre-se: o hash é unidirecional, não é possível recuperar os dados originais a partir dele.
Não. Como usuário Web3 ou desenvolvedor iniciante, basta entender que “Keccak é uma função hash unidirecional—entradas idênticas sempre produzem saídas idênticas.” Estudo avançado de criptografia é opcional (para auditorias de segurança ou pesquisa); a maioria dos desenvolvedores apenas utiliza funções de biblioteca prontas, como a keccak256 do Solidity. Comece testando aplicações reais, como assinaturas ou geração de endereços na Gate ou em testnets.
Ao usar Keccak em código fora da blockchain (front-end ou back-end), certifique-se de que a versão da biblioteca corresponde à utilizada on-chain—geralmente Keccak-256. Usar bibliotecas padrão como Web3.js ou ethers.js evita a maioria dos problemas, pois implementam Keccak corretamente por padrão. Fique atento à serialização de dados—se gerar hashes fora da blockchain para validação on-chain, os métodos de serialização (como codificação ABI) devem ser idênticos. Sempre valide cuidadosamente em ambientes de teste, principalmente para assinaturas ou verificação de contratos.


