Pular para o conteúdo
ecdsa.com

Ataque de canal lateral

Um ataque que obtém segredos a partir do comportamento físico ou temporal de uma computação — tempo de execução, acessos ao cache, consumo de energia, emissões eletromagnéticas ou reação a falhas induzidas —, e não a partir de suas entradas e saídas.
Também escrito comoside channeltiming attackconstant-timefault attack

Canais clássicos: tempo de execução que depende de bits secretos (Kocher, 1996), acessos à memória dependentes de segredos observados por meio de caches compartilhados (Flush+Reload e técnicas semelhantes), traços de consumo de energia e de emissões eletromagnéticas de cartões inteligentes e microcontroladores, e injeção de falhas (variações bruscas de tensão ou de clock, lasers, Rowhammer) que faz um dispositivo produzir uma assinatura defeituosa a partir da qual a chave pode ser calculada. Ataques de tempo remotos também são viáveis: o Lucky Thirteen (2013) atacou pela rede as verificações de padding CBC do TLS.

A criptografia assimétrica está especialmente exposta porque a multiplicação escalar e a exponenciação modular iteram sobre os bits da chave ou do nonce. As defesas são código de tempo constante (sem desvios nem índices de memória que dependam de segredos e sem instruções de tempo variável), mascaramento (blinding) de escalares e de mensagens, fórmulas completas com escadas (ladders) uniformes e, contra falhas, verificar a assinatura antes de liberá-la e usar nonces hedged.

Para desenvolvedores, a regra prática é usar bibliotecas mantidas e com histórico de trabalho em tempo constante (BoringSSL, OpenSSL, libsodium, o pacote crypto do Go, RustCrypto, as bibliotecas noble) e nunca reimplementar a aritmética. Em linguagens com compiladores JIT ou coleta de lixo, o comportamento em tempo constante é apenas um melhor esforço, o que importa em hosts compartilhados e em navegadores.

Padrões e referências

Todos os termos