Discussões de fontes altamente respeitadas (detalhes abaixo) enfatizam a importância da implementação de software criptográfico para a segurança eficaz fornecida, sendo um caso particular a sensibilidade a ataques de temporização.
Esclarecimento – Contexto é assinatura criptográfica de mensagens não secretas
A resposta inicial do @poncho observa que os invasores nem sempre podem se dar ao luxo de determinar a implementação do "usuário".
Na verdade, estou interessado nesta questão precisamente na situação real em que o invasor é o usuário e tem a capacidade de escolher sua própria implementação - na assinatura criptográfica de mensagens não secretas. Minha citação abaixo é sobre NaCl, que inclui uma implementação do ed25519. Nos casos de uso em que estou trabalhando, você pode assumir que o "invasor"/usuário possui a mensagem de texto simples, a assinatura e a chave pública. Todos os três são necessários para que a assinatura seja útil. A única coisa que falta é a chave privada.
Isto não é irrelevante? Logicamente, um algoritmo criptográfico é inerentemente suscetível a ataques de temporização se o próprio algoritmo for capaz de identificar uma falha de validação em um número menor de operações do que o necessário para confirmar o sucesso da validação. Quanto mais pontos distintos em que a falha de validação puder ser determinada matematicamente, mais suscetível será o algoritmo.
- Se um algoritmo não puder determinar matematicamente a validade de um conjunto de entradas até a etapa final, então ele é inerentemente imune a ataques de temporização. Entendo que todos os algoritmos SHA aprovados pelo NIST a partir do FIPS-180-4 estão neste grupo.
- Se um algoritmo puder identificar matematicamente entradas inválidas em cada byte/palavra/bloco incremental de algum fluxo processado, ele será extremamente sensível a ataques de temporização.
- Na pior das hipóteses, o número mínimo de operações necessárias para determinar o sucesso ou a falha depende de cada bit incremental numa chave secreta.
A capacidade de qualquer implementação de evitar ou ignorar a suscetibilidade subjacente do algoritmo a um ataque de temporização é logicamente irrelevante, porque um invasor racional simplesmente escolherá usar uma implementação que seja intencionalmente sensível a ataques de temporização. Mesmo que a maioria dos invasores não tenha habilidade ou motivação para escrever sua própria implementação, basta apenas um para criar e depois distribuir uma implementação que acentue os ataques de tempo.
Da mesma forma, se um algoritmo é inerentemente imune a ataques de temporização (por exemplo, não pode determinar validade ou invalidez até a etapa final), então, por definição, não é possível criar uma implementação que seja suscetível a ataques de temporização, seja propositalmente ou acidentalmente.
Um autor pode se orgulhar de inúmeras qualidades de sua implementação de um algoritmo, mas não parece que "resistência a ataques de temporização" seja uma qualidade logicamente significativa.
Estou faltando alguma coisa aqui?
Referência: Daniel Bernstein/NaCl
A seção de recursos da documentação da biblioteca NaCl original de Daniel Bernstein, que é a implementação de referência do algoritmo de assinatura ed25519 que ele e os co-autores inventaram, faz múltiplas afirmações sobre a superioridade de sua implementação, o que a torna resistente a ataques de temporização (ênfase minha ):
Sem ramificações dependentes de dados
... A literatura tem muitos exemplos de ataques de temporização bem-sucedidos que extraíram chaves secretas dessas partes da CPU. O NaCl evita sistematicamente todo o fluxo de dados de informações secretas para o ponteiro de instrução e o preditor de desvio
Nenhum índice de matriz dependente de dados
... A literatura tem vários exemplos de ataques bem-sucedidos de temporização de cache que usaram informações secretas vazadas por meio de endereços. O NaCl evita sistematicamente todo o fluxo de dados de informações secretas para os endereços usados ​​nas instruções de carregamento e armazenamento.