Segurança da Informação - Criptografia AES

Este post faz parte da série Segurança da Informação. Leia também os outros posts da série:

Continuando a série "Segurança da Informação", neste artigo será mostrada a criptografia AES, uma criptografia de blocos que é geralmente mais segura e confiável que RC4. A criptografia Advanced Encryption Standard (AES) é talvez a criptografia simétrica mais utilizada no mundo, sendo altamente confiável e compatível com os mais diversos sistemas operacionais e relacionados.

As criptografias simétricas de blocos, como AES, contam com diversos métodos de operação criados ao longo do tempo, para melhorar ou obter diferentes resultados. Veja alguns deles:

ECB (Electronic CodeBook)

Modo mais simples de criptografia. A mensagem (plaintext) é dividida em blocos, os quais são criptografados separadamente. Blocos iguais de plaintext geram o mesmo output (ciphertext). É o único método que não usa IV (vetor de inicialização).

Algoritmo AES - modo ECB.
Figura 1 - Algoritmo ECB.

Vetor de inicialização (IV)

O vetor de inicialização pode ser entendido como um “bloco falso”, utilizado no início do processo de cifragem, gerando aleatoriedade no sistema. Exceto ECB, todos fazem o uso do IV.

CBC (Cypher Block Chaining)

Para cada bloco de plaintext é realizada a operação XOR junto com o bloco cifrado anterior antes dele ser criptografado. Com isso os blocos futuros são dependentes dos blocos anteriores. Com IV aleatório em cada cifragem, é possível manter a aleatoriedade do ciphertext mesmo com um plaintext igual.

Algoritmo AES - modo CBC.
Figura 2 - Algoritmo CBC.

CFB (Cipher FeedBack)

Similar ao CBC, permite que a cifra de bloco vire uma espécie de cifra de fluxo, se parecendo com o RC4. Este modo é interessante quando a transmissão de dados pela rede é fraca e você faz a criptografia de pequenos dados.

Algoritmo AES - modo CFB.
Figura 3 - Algoritmo CFB.

CTR (Counter)

Transforma a cifra de bloco em cifra de fluxo (similar a CFB), entretanto é adicionado um contador para gerar aleatoriedade no sistema de criptografia. O método mais simples é apenas um incrementador.

Algoritmo AES - modo CTR.
Figura 4 - Algoritmo CTR.

Na prática

Vamos novamente utilizar o ESP32 para executar essas criptografias. A biblioteca MbedTLS permite os modos ECB, CBC, CFB e CTR. Faremos como no material anterior, criptografando uma mensagem e descriptografando a mensagem encriptada para verificar os resultados.

Obs: Estamos usando chaves fixas e simples apenas para demonstração e didática. Você deve usar chaves e IV’s aleatórios a fim de garantir a segurança dessas informações.

ECB

Parâmetros AES-ECB encrypt MbedTLS.
Figura 5 - Parâmetros AES-ECB encrypt MbedTLS.

Chave: “1234567890123456”

Plaintext: “Embarcados”

Resultados AES-ECB no ESP32.
Figura 6 - Resultados AES-ECB no ESP32.

O ciphertext retornado para nosso plaintext em ECB é sempre igual, já que é usado o mesmo plaintext. Você deve ter atenção ao usar comandos estáticos em seu sistema, que irá sempre gerar um ciphertext igual.

CBC

Parâmetros AES-CBC encrypt MbedTLS.
Figura 7 - Parâmetros AES-CBC encrypt MbedTLS.

Chave: “1234567890123456”

IV (inicial): “1234567890123456”

Plaintext: “Embarcados”

Resultados AES-CBC no ESP32.
Figura 8 - Resultados AES-CBC no ESP32.

Veja que para o mesmo plaintext, houve diversas saídas (ciphertext). Isso acontece pois o próprio sistema do MbedTLS atualiza o nosso vetor de inicialização. Perceba que o IV é igual aos dados da última criptografia (ciphertext). Se você precisa do IV fixo, terá que salvar em alguma variável auxiliar. Agora, vamos analisar a primeira e a segunda cifragem com a ferramenta externa:

Lembrando: o IV deve ser colocado em Hexadecimal.

Descriptografia AES-CBC.
Figura 9 - Descriptografia AES-CBC.

Utilizamos o ciphertext com o IV e chave corretos, veja que o plaintext está certo.

Agora, vamos incrementar a chave e o IV, respectivamente, e ver o que acontece com o plaintext:

Alterando a chave.
Figura 10 - Alterando a chave.
Alterando o IV.
Figura 11 - Alterando o IV.

Fizemos o incremento do último número da nossa chave e IV, e veja que interessante. A alteração mínima da chave foi o suficiente para deixar o plaintext inesperado, porém o mesmo não ocorreu com a alteração do IV, que gerou apenas um incremento no local alterado.

Para finalizar, vamos analisar a próxima cifra que alterou automaticamente o IV, deixando o ciphertext diferente:

IV errado.
Figura 12 - IV errado.
IV correto.
Figura 13 - IV correto.

Chegamos à conclusão que a alteração completa ou de boa parte do IV gera um plaintext inesperado. Perceba que na figura 12 usamos o IV que foi definido inicialmente e mesmo assim a mensagem retornada não está correta. O MbedTLS fez alteração do IV com o ciphertext da última encriptação e, ao usar esse novo IV, o plaintext foi gerado corretamente (Figura 13).

A premissa de sigilo de dados é amplamente utilizada, entretanto precisamos mais que apenas sigilo para garantir um dado seguro, como, por exemplo, assinaturas digitais. Devemos implementar a segurança necessária para o projeto de acordo com sua utilização e nunca se esquecer que em algum momento alguém pode “bisbilhotar” seus dados e gerar terríveis danos. Ficará como lição de casa a implementação de certificados e assinaturas digitais. Bons estudos!

Outros artigos da série

<< Segurança da informação para IoT
Este post faz da série Segurança da Informação. Leia também os outros posts da série:
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Internet Das Coisas » Segurança da Informação - Criptografia AES
Talvez você goste:
Comentários:

Séries



Outros da Série

Menu