Pesquisador encontra vulnerabilidade no mecanismo de encapsulamento de chave pós-quântica Kyber (KEM)
A vulnerabilidade de encapsulamento de chave pós-quântica Kyber mostra que o código que parece seguro pode ser desfeito por um compilador.
![](https://www.plugged.ninja/wp-content/uploads/2021/12/Screenshot_8.jpg)
Um pesquisador de segurança descobriu um vazamento de tempo explorável no mecanismo de encapsulamento de chave Kyber (KEM) que está em processo de adoção pelo NIST como um padrão criptográfico pós-quântico .
Antoon Purnal, do PQShield, detalhou suas descobertas em uma postagem no blog e nas redes sociais, e observou que o problema foi resolvido com a ajuda da equipe Kyber. O problema foi encontrado na implementação de referência do mecanismo de encapsulamento de chave baseado em estrutura de módulo (ML-KEM) que está em processo de adoção como um padrão de encapsulamento de chave pós-quântica do NIST .
Compilador Clang apresenta vulnerabilidade de canal lateral
“Uma parte fundamental da segurança da implementação é a resistência contra ataques de canal lateral, que exploram os efeitos colaterais físicos dos cálculos criptográficos para inferir informações confidenciais”, escreveu Purnal.
Para se proteger contra ataques de canal lateral, os algoritmos criptográficos devem ser implementados de forma que “nenhum efeito observável de sua execução pelo invasor dependa dos segredos que eles processam”, escreveu ele. Na implementação de referência do ML-KEM, “estamos preocupados com um canal lateral específico que é observável em quase todos os cenários de implantação criptográfica: o tempo”.
A vulnerabilidade pode ocorrer quando um compilador otimiza o código, no processo desfazendo silenciosamente “medidas tomadas pelo implementador qualificado”.
Na análise de Purnal, descobriu-se que o compilador Clang emite uma ramificação vulnerável dependente de segredo na função poly_frommsg do código de referência ML-KEM necessária tanto no encapsulamento quanto no desencapsulamento de chave, correspondendo à implementação expand_secure.
“No desencapsulação, poly_frommsg é usado uma vez. Toda a desencapsulação leva mais de 100 mil ciclos. Certamente a diferença de tempo produzida por este ramo é pequena demais para ter importância? Purnal perguntou retoricamente.
“…atacantes locais sofisticados podem realizar ataques de cache de alta resolução, direcionar o preditor de ramificação para saber quais ramificações são tomadas ou desacelerar a biblioteca para amplificar a diferença de tempo”, respondeu ele. “Portanto, a abordagem prudente é corrigir.”
Medir o tempo necessário para um desencapsulamento completo “é suficiente para um invasor reunir a chave”, disse ele.
Purnal publicou uma demonstração no GitHub chamada “clangover” mostrando o papel da vulnerabilidade de tempo na recuperação de uma chave de criptografia secreta ML-KEM 512. “A demonstração termina com sucesso em menos de 10 minutos no laptop do autor”, escreveu ele.
Uma vulnerabilidade crítica de chave pós-quântica
Purnal observou que embora nem todos os compiladores, opções e plataformas sejam afetados, “se um determinado binário for afetado, o impacto na segurança pode ser crítico. Portanto, a abordagem conservadora é levar esse problema a sério e procurar patches do seu provedor de criptografia.”
A implementação de referência foi corrigida implementando o movimento condicional relevante como uma função em um arquivo separado. “Essa mudança impede o Clang de reconhecer a natureza binária do sinalizador de condição e, portanto, de aplicar a otimização”, disse ele.
“É importante notar que isso não exclui a possibilidade de que outras bibliotecas, que são baseadas na implementação de referência, mas não usam a função poly_frommsg literalmente, possam estar vulneráveis – agora ou no futuro”, concluiu.