Image from Wikpedia A vantagem é, ao contrário do CBC, a encriptação pode ser feita em paralelo e todos os blocos dependem do IV e não apenas do primeiro. Uma grande advertência é que um IV nunca deve ser reutilizado com a mesma chave porque um atacante pode trivialmente calcular a chave usada a partir disso.
Posso ter a certeza de que ninguém alterou a minha mensagem?
A dura verdade: a encriptação não protege automaticamente contra a modificação de dados. Na verdade, é um ataque bastante comum. Leia aqui uma discussão mais aprofundada sobre este assunto.
Então o que podemos fazer? Adicionamos apenas o Código de Autenticação de Mensagem (MAC) à mensagem encriptada. Um MAC é semelhante a uma assinatura digital, com a diferença de que a chave de verificação e autenticação são praticamente as mesmas. Existem diferentes variações deste método, o modo que é recomendado pela maioria dos investigadores chama-se Encrypt-then-Mac. Ou seja, após encriptação é calculado um MAC sobre o texto cifrado e anexado. Normalmente utiliza-se o código de autenticação de mensagem baseado em Hash (HMAC) como tipo de MAC.
, pelo que agora começa a tornar-se complicado. Para integridade/autenticidade temos de escolher um algoritmo MAC, escolher um modo de etiqueta de encriptação, calcular o MAC e anexá-lo. Isto também é lento, uma vez que toda a mensagem deve ser processada duas vezes. O lado oposto tem de ser o mesmo mas para decifrar e verificar.
Criptação autenticada com GCM
Não seria óptimo se houvesse modos que tratassem de todas as coisas de autenticação para si? Felizmente, existe uma coisa chamada encriptação autenticada que fornece simultaneamente garantias de confidencialidade, integridade e autenticidade sobre os dados. Um dos modos de bloco mais populares que suporta isto chama-se Galois/Counter Mode ou GCM (por exemplo, também está disponível como um conjunto de cifras em TLS v1.2)
GCM é basicamente modo CTR que também calcula uma etiqueta de autenticação sequencialmente durante a encriptação. Esta etiqueta de autenticação é então normalmente anexada ao texto cifrado. O seu tamanho é uma propriedade de segurança importante, pelo que deve ter pelo menos 128 bit.
É também possível autenticar informação adicional não incluída no texto da placa. Estes dados são chamados dados associados. Porque é que isto é útil? Por exemplo, os dados encriptados têm uma meta propriedade, a data de criação, que é utilizada para verificar se o conteúdo deve ser reencriptado. Um atacante pode agora alterar trivialmente a data de criação, mas se for adicionado como dados associados, o GCM também verificará esta informação e reconhecerá a alteração.
Uma discussão acalorada: Que tamanho de chave usar?
Então a intuição diz: quanto maior, melhor – é óbvio que é mais difícil forçar um valor aleatório de 256 bit do que um valor de 128 bit. Com o nosso entendimento actual de força bruta através de todos os valores de uma palavra longa de 128 bit exigiria uma quantidade astronómica de energia, não realista para ninguém em tempo sensato (olhando para si, NSA). Assim, a decisão é basicamente entre infinito e infinito vezes 2¹²⁸.
AES tem na realidade três tamanhos chave distintos porque foi escolhido como Apto Federal de Algoritmos dos EUA para ser utilizado em várias áreas sob o controlo do governo federal dos EUA . (…) Assim, os bons cérebros militares surgiram com a ideia de que deveria haver três “níveis de segurança”, para que os segredos mais importantes fossem codificados com os métodos pesados que mereciam, mas os dados de menor valor táctico poderiam ser codificados com algoritmos mais práticos, se mais fracos. (…) Assim, o NIST decidiu seguir formalmente os regulamentos (pedir três tamanhos de chave) mas também fazer a coisa inteligente (o nível mais baixo tinha de ser inquebrável com tecnologia previsível)(Fonte)
O argumento segue-se: uma mensagem encriptada AES provavelmente não será quebrada pela força bruta da chave, mas por outros ataques menos dispendiosos (não conhecidos actualmente). Estes ataques serão tão prejudiciais ao modo de chave de 128 bits como ao modo de chave de 256 bits, pelo que escolher um tamanho de chave maior não ajuda neste caso.
Por isso, basicamente, a chave de 128 bits é segurança suficiente para a maioria dos casos de utilização, com a excepção da protecção quântica do computador. Também a utilização de chaves encriptadas de 128 bits mais rápida do que 256 bits e o calendário de chaves para chaves de 128 bits parece estar mais bem protegido contra ataques de chaves relacionadas (no entanto, isto é irrelevante para a maioria dos usos no mundo real).
Como nota lateral: Ataques de canais laterais
Ataques de canais laterais são ataques que visam explorar questões específicas de determinadas implementações. Os próprios esquemas de cifra de encriptação não podem ser intrinsecamente protegidos contra eles. Implementações simples de AES podem ser propensas a ataques temporais e de cache entre outros.
Como exemplo muito básico: um algoritmo simples que é propenso a ataques temporais é um método equals()
que compara duas matrizes de bytes secretas. Se o equals()
tem um retorno rápido, ou seja, após o primeiro par de bytes que não coincidem, um atacante pode medir o tempo que leva para o equals()
completar e pode adivinhar byte por byte até que todos coincidam.