Cifrar uma Imagem
Cifrar uma Imagem • Decifrar uma Imagem • Ressalvas sobre Cifrar e Decifrar
A maioria das imagens, por design, é feita para ser vista com frequência e por muitas pessoas. Imagens da web, por exemplo, podem ser visualizadas centenas de vezes por dia por uma multidão de visitantes. No entanto, em alguns casos, você pode querer manter uma determinada imagem privada, de modo que apenas você ou talvez um grupo seleto de seus amigos ou visitantes da web possam visualizá-la. O ImageMagick permite embaralhar suas imagens de tal forma que, a menos que alguém conheça sua frase secreta, não conseguirá visualizar o conteúdo original.
Você poderia usar um utilitário de cifragem para embaralhar sua imagem, mas eles normalmente embaralham o arquivo inteiro, tornando-o irreconhecível como um formato de imagem. Com o ImageMagick, apenas os pixels são embaralhados. A imagem embaralhada continua sendo reconhecida como uma imagem e até será exibida em sua página da web. No entanto, o conteúdo aparece como algo ininteligível, nada parecido com o conteúdo original.
Cifrar uma Imagem
Use a opção -encipher para embaralhar sua imagem de modo que ela fique irreconhecível. A opção requer um nome de arquivo que contenha sua frase secreta. Neste exemplo, embaralhamos uma imagem e a salvamos no formato PNG:
magick rose.jpg -encipher passphrase.txt rose.png
Aqui ciframos uma imagem usando outra imagem como frase secreta:
magick rose.jpg -encipher smiley.gif rose.png
Decifrar uma Imagem
Use a opção -decipher para desembaralhar sua imagem de modo que ela fique reconhecível novamente. A opção requer um nome de arquivo que contenha sua frase secreta. Neste exemplo, desembaralhamos uma imagem e a salvamos no formato JPEG:
magick rose.png -decipher passphrase.txt rose.jpg
Ressalvas sobre Cifrar e Decifrar
Alguns formatos não suportam pixels cifrados — os formatos JPEG ou GIF, por exemplo. Para garantir que seu formato de imagem seja suportado, cifre uma imagem de teste e verifique se você consegue restaurar seu conteúdo original antes de cifrar qualquer imagem adicional nesse formato.
O formato de imagem pode suportar apenas 8 bits e RGB (TrueColor). Assim, talvez você queira incluir as opções "-depth 8 -type TrueColor" antes do nome do arquivo de saída.
A frase secreta pode ser qualquer combinação de letras e símbolos. Ela deve ter no mínimo 12 caracteres combinados para ajudar a garantir que sua imagem permaneça privada. Além disso, certifique-se de que as permissões do arquivo da frase secreta impeçam que outros o leiam; caso contrário, usuários não intencionados poderão visualizar o conteúdo original da imagem.
Você só pode restaurar o conteúdo original da imagem se conhecer sua frase secreta. Se você a perder ou esquecer, o conteúdo original da imagem estará perdido para sempre.
O ImageMagick embaralha apenas os pixels da imagem. Os metadados da imagem permanecem intactos e legíveis por qualquer pessoa com acesso ao arquivo de imagem.
O ImageMagick usa AES no modo Counter (CTR) para embaralhar os dados de pixel de uma imagem. A implementação atual deriva tanto a chave AES quanto o IV (contador inicial) deterministicamente a partir da frase secreta fornecida pelo usuário: a primeira metade da frase secreta torna-se a chave AES, e a segunda metade é submetida a hash juntamente com as dimensões da imagem para produzir o IV. Como esse IV é derivado apenas da frase secreta e da largura e altura da imagem, criptografar várias imagens com a mesma frase secreta e as mesmas dimensões produz o mesmo IV e, portanto, o mesmo fluxo de chave (keystream).
O modo CTR requer um IV único e não repetido para cada criptografia sob a mesma chave. Reutilizar um IV no modo CTR causa a reutilização do fluxo de chave, o que permite que atacantes recuperem informações sobre os textos em claro ao aplicar XOR nos textos cifrados. Por esse motivo, a construção determinística atual do IV não fornece confidencialidade criptograficamente forte.
Para evitar a reutilização do fluxo de chave e os vazamentos de informação resultantes, os usuários precisariam fornecer uma frase secreta diferente para cada imagem, o que é impraticável e ainda assim não atende às expectativas criptográficas modernas. O recurso de cifragem do ImageMagick é, portanto, adequado apenas para ofuscação casual, não para criptografia sensível à segurança.
Atualmente, apenas o ImageMagick pode restaurar o conteúdo da sua imagem cifrada. Usamos uma cifra e um modo padrão, de modo que outros fornecedores poderiam suportar o conteúdo de imagem cifrado.
Alguns pequenos exemplos práticos de cifragem de imagens podem ser encontrados no IM Examples Encrypting Image Data.