F5 es un algoritmo de esteganografía para ocultar información en imágenes JPEG, desarrollador por Andreas Westfeld.

Para su estegoanálisis hemos usado una implementación que se puede descargar aquí.

Para el experimento hemous usado la imagen de Lena.

Una vez descargado F5, generamos un mensaje aleatorio y lo ocultamos en la imagen Lena. Loa hacemos (en Linux) de la forma siguiente:

$ head -200 /dev/urandom | tr -dc A-Za-z0-9 > secret.txt
$ java Embed -e secret.txt sample_images/lena.jpg sample_images/lena_f5.jpg -q 92

Usamos la misma calidad que la imagen original, para generar menos variación en los coeficientes DCT de la imagen JPEG.

F5 usa diferentes técnicas para preservar la estadística básica de los coeficientes DCT de la imagen. Por lo que no es vulnerable a ataques de tipo chi square. Sin embargo, sí es vulnerable a ataques de tipo calibration [Fridrich2003]. Este ataque, elimina unos pocos píxeles de la imágen y recalcula de nuevo el valor de los coeficientes JPEG. De esta manera, se obtiene, a partir de la imagen stego una versión de la imagen parecidad a la cover. Esto, permite obtener un histograma de coeficientes DCT parecido al de la imagen cover y usarlo para compararlo con el de la imagen stego.

We can not see the anomalies produced by LSB replacement. So, in this case we are going to use the “calibration” attack. This attack uses a cropped version of the stego image to estimate the statistics of the cover image.

./aletheia.py calibration sample_images/lena_f5.jpg 
Hidden data found in channel 0: 0.34287625870111765
Hidden data found in channel 1: 0.18420134516797085
Hidden data found in channel 2: 0.13354175828569145

Obviously, with the original Lena image, the tool does not detect any hidden data:

./aletheia.py calibration sample_images/lena.jpg 
No hidden data found