Com a criptografia AES e uma chave e texto simples conhecidos, um invasor pode criar uma chave e um texto simples diferentes, resultando no mesmo texto cifrado?
Resumindo: com a criptografia AES, um invasor pode criar uma nova chave2 e texto simples2 de forma que AES chave1 (texto simples1) = AES chave2 (texto simples2)
Em caso afirmativo, isso pode ser resolvido apenas aplicando, por exemplo, um MAC como AES-GCM ou um AES-CTR com um SHA256 HMAC?
Aplicação pretendida: a criptografia de um arquivo. Cada cliente com a chave pode descriptografar o arquivo. O arquivo criptografado é tratado cegamente por um servidor (sem saber a chave) por seu hash SHA256. Quando um novo cliente recebe uma chave falsa com o arquivo hospedado, ele deve ser capaz de detectar que é a chave errada. E não obter nenhum outro binário (ruidoso) do mesmo arquivo criptografado como resultado. Observando que um invasor que entrega a chave falsa tem acesso à chave original, ao texto cifrado e, portanto, também ao texto simples.
(A opção de arquivos idênticos sendo criptografados com chaves diferentes deve estar lá. Portanto, criptografia determinística não é minha intenção)
Uma outra solução fácil possível que pensei seria armazenar o hash da chave secreta junto com o arquivo criptografado no servidor e enviá-lo ao cliente para verificação. Mas, na verdade, prefiro usar uma solução out-of-the-box bem conhecida, e não algo que eu inventei. Está aplicando um MAC / HMAC o suficiente para garantir apenas um resultado de chave no texto cifrado fornecido.
Espero que minha intenção esteja clara e alguém com conhecimento possa me indicar a direção certa.
Respostas
Para AES básico, é fácil encontrar duas chaves dessa forma. Pegue qualquer$key1$ e $plaintext1$ e computar $c=AES_{key1}(plaintext1)$. Então, pegue qualquer$key2$ e computar $plaintext2 = AES^{-1}_{key2}(c)$. Segue que$AES_{key1}(plaintext1) = AES_{key2}(plaintext2)$. Dito isso, se AES for usado em um modo de criptografia autenticado com um MAC, isso pode não ser necessariamente possível. Gostaria de enfatizar que não há garantia de que não, e isso precisaria ser provado. Em particular, se você fez o padrão encrypt-then-MAC (com chaves diferentes), isso seria vulnerável exatamente da mesma maneira, já que a parte da "criptografia" permanece inalterada. Resumindo, isso deveria ser possível, mas certamente não é garantido e, freqüentemente, não é válido.