¿Es seguro el cifrado de imágenes basado en píxeles?

-4

He cifrado una imagen utilizando el método de cifrado de píxeles. Acabo de usar una imagen bmp para eso. Lo que hice es recuperar cada valor de píxel de la imagen y obtener el valor de rojo, verde y azul individualmente y XOR-ed con un valor pseudoaleatorio. Para la generación de números pseudoaleatorios, utilicé SecureRandom con el algoritmo SHA1PRNG. El valor inicial establecido para generar los números aleatorios se obtiene a partir de la contraseña que proporcionamos.

La descripción detallada del código y la salida está disponible en zone4java

Mi pregunta es cuánto tiempo tomará una utilidad, si está disponible, para descifrar la imagen sin saber la contraseña. ¿Es seguro este tipo de métodos de encriptación?

Nota: si mi pregunta está siendo rechazada, comente el motivo.

    
pregunta Maximin 17.03.2013 - 07:34
fuente

2 respuestas

1

En principio, el cifrado de los píxeles en un mapa de bits con la salida de un cifrado de flujo es correcto, pero hay una serie de advertencias:

  1. No cifras el tamaño de la imagen ni ningún metadato.
  2. Al igual que con todos los cifrados de flujo, nunca debe reutilizar una clave (o par de claves-nonce). En su caso, esto significa que nunca debe reutilizar una semilla.

    De lo contrario, obtienes un pad de muchas veces, lo que apesta. Así que necesitas alguna forma de incluir un nonce.

  3. SHA1PRNG no es la mejor opción para un cifrado de flujo. El mayor problema es que la implementación puede cambiar entre diferentes versiones. Creo que esto sucedió en Android, rompiendo algunas aplicaciones.

    Debes usar un cifrado de flujo designado, como AES en modo CTR, no un PRNG.

  4. Ya que está utilizando un cifrado basado en contraseña, necesita un KDF basado en contraseña adecuada, como PBKDF2 con iteraciones suficientes y un salt. Recomiendo usar una sal de 16 bytes al azar.

    El uso de sales únicas aquí conduce a claves únicas para el cifrado, por lo que ya no necesita el código que mencioné en el paso 2. Efectivamente la sal es el nonce.

respondido por el CodesInChaos 17.03.2013 - 10:05
fuente
2

La primera imagen es de Tux, la mascota de Linux. La segunda imagen es de Tux, encriptada en modo ECB (más o menos lo que estás intentando). El tercero es de Tux, encriptado en modo CBC. El problema tanto con el segundo enfoque como con el suyo es que los valores de píxeles idénticos se cifran al mismo valor en el texto cifrado. Entonces, aunque el color de cada píxel está protegido, el patrón subyacente es fácilmente visible.

Hazte un favor y no hagas rodar tu propio cripto. Use algo bien establecido como AES en modo CBC o (idealmente) modo GCM. Y encripte el flujo de bytes completo de una sola vez, en lugar de tratar de ser inteligente y cifrar píxel por píxel.

    
respondido por el Stephen Touset 17.03.2013 - 07:44
fuente

Lea otras preguntas en las etiquetas