Cifrar una imagen
Cifrar una imagen • Descifrar una imagen • Advertencias sobre el cifrado y descifrado
La mayoría de las imágenes, por diseño, están hechas para verse a menudo y por muchas personas. Las imágenes web, por ejemplo, pueden ser vistas cientos de veces al día por una multitud de visitantes. Sin embargo, en algunos casos puede que desee mantener privada una imagen en particular para que solo usted, o quizás un grupo selecto de sus amigos o visitantes web, puedan verla. ImageMagick le permite revolver sus imágenes de modo que, a menos que alguien conozca su frase de contraseña, no podrá ver el contenido original.
Podría usar una utilidad de cifrado para revolver su imagen, pero normalmente revuelven el archivo entero, dejándolo irreconocible como formato de imagen. Con ImageMagick, solo se revuelven los píxeles. La imagen revuelta sigue siendo reconocida como una imagen e incluso se mostrará en su página web. Sin embargo, el contenido aparece como algo ininteligible, nada parecido al contenido original.
Cifrar una imagen
Use la opción -encipher para revolver su imagen de modo que quede irreconocible. La opción requiere un nombre de archivo que contenga su frase de contraseña. En este ejemplo revolvemos una imagen y la guardamos en formato PNG:
magick rose.jpg -encipher passphrase.txt rose.png
Aquí ciframos una imagen usando otra imagen como frase de contraseña:
magick rose.jpg -encipher smiley.gif rose.png
Descifrar una imagen
Use la opción -decipher para deshacer el revuelto de su imagen y que vuelva a ser reconocible. La opción requiere un nombre de archivo que contenga su frase de contraseña. En este ejemplo deshacemos el revuelto de una imagen y la guardamos en formato JPEG:
magick rose.png -decipher passphrase.txt rose.jpg
Advertencias sobre el cifrado y descifrado
Algunos formatos no admiten píxeles cifrados; el formato JPEG o GIF, por ejemplo. Para asegurarse de que su formato de imagen es compatible, cifre una imagen de prueba y verifique que puede restaurar su contenido original antes de cifrar cualquier imagen adicional en ese formato.
El formato de imagen puede admitir solo 8 bits y RGB (TrueColor). Por ello, quizá desee incluir las opciones "-depth 8 -type TrueColor" antes del nombre de archivo de salida.
La frase de contraseña puede ser cualquier combinación de letras y símbolos. Debería tener como mínimo una combinación de 12 caracteres para ayudar a garantizar que su imagen permanezca privada. Asegúrese también de que los permisos del archivo de la frase de contraseña impidan que otros lo lean; de lo contrario, usuarios no deseados podrían ver el contenido original de la imagen.
Solo puede restaurar el contenido original de la imagen si conoce su frase de contraseña. Si la pierde o la olvida, el contenido original de su imagen se pierde para siempre.
ImageMagick solo revuelve los píxeles de la imagen. Los metadatos de la imagen permanecen intactos y legibles para cualquiera que tenga acceso al archivo de imagen.
ImageMagick usa AES en modo Contador (CTR) para revolver los datos de píxeles de una imagen. La implementación actual deriva tanto la clave AES como el IV (contador inicial) de forma determinista a partir de la frase de contraseña suministrada por el usuario: la primera mitad de la frase de contraseña se convierte en la clave AES, y la segunda mitad se somete a hash junto con las dimensiones de la imagen para producir el IV. Debido a que este IV se deriva únicamente de la frase de contraseña y del ancho y alto de la imagen, cifrar varias imágenes con la misma frase de contraseña y las mismas dimensiones produce el mismo IV y, por lo tanto, el mismo flujo de claves (keystream).
El modo CTR requiere un IV único y no repetido para cada cifrado bajo la misma clave. Reutilizar un IV en modo CTR provoca la reutilización del flujo de claves, lo que permite a los atacantes recuperar información sobre los textos planos haciendo XOR de los textos cifrados. Por esta razón, la construcción determinista actual del IV no proporciona una confidencialidad criptográficamente sólida.
Para evitar la reutilización del flujo de claves y las fugas de información resultantes, los usuarios tendrían que suministrar una frase de contraseña diferente para cada imagen, lo cual es poco práctico y aun así no cumple con las expectativas criptográficas modernas. Por lo tanto, la función de cifrado de ImageMagick solo es adecuada para una ofuscación informal, no para un cifrado en el que la seguridad sea crítica.
Actualmente, solo ImageMagick puede restaurar el contenido de su imagen cifrada. Usamos un cifrado y un modo estándar, de modo que otros proveedores podrían admitir el contenido de imágenes cifradas.
Algunos pequeños ejemplos prácticos de cifrado de imágenes se pueden encontrar en IM Examples Encrypting Image Data.