Una marca de agua ciega es un mensaje - normalmente texto u otra imagen - secretamente incrustado dentro de una foto “portadora” de tal forma que la foto sigue viendose igual al ojo desnudo. La palabra ciega significa que no se necesita la imagen original para recuperar el mensaje: solo le pasas la foto al extractor y los datos vuelven.
Si alguna vez te has preguntado como funciona, estas en el sitio correcto. Resulta que el truco es una de las ideas mas simples del procesamiento de imagen, y puedes probarlo tu mismo en 30 segundos con la herramienta de marca de agua ciega de Piick.
La analogia del sobre y el sello
Piensa en una postal. La imagen del frente es la foto portadora. El mensaje que quieres ocultar es una nota pequena que deslizas debajo del sello - invisible hasta que alguien sabe levantarlo. Una marca de agua ciega hace exactamente lo mismo con una foto digital: esconde la nota bajo una capa que tu ojo nunca revisa.
LSB: ocultar un bit en el ruido
Cada pixel de una foto en color tiene tres canales - R, G, B - cada uno guardado como un numero del 0 al 255. Ese numero es el brillo de ese canal de color.
Aqui esta la clave: cambiar el valor en ±1 es invisible para el ojo humano. 124 vs 125 en rojo? Nadie lo nota. 200 vs 201 en verde? Identico. Entonces, si queremos colar un 0 o un 1 en cada canal, reemplazamos el ultimo bit del numero por el bit que queremos enviar. Ese ultimo bit se llama bit menos significativo, o LSB.
Un solo pixel nos da 3 canales x 1 bit = 3 bits secretos por pixel. Una foto modesta de 500x500 tiene 250.000 pixeles, asi que 750.000 bits = unos 91 KB de espacio oculto. Suficiente para un parrafo de texto. No suficiente para una foto de 16 MB (mas sobre esto abajo).
Como entra el mensaje
El codificador convierte tu mensaje en un flujo de bits:
- Escribe la longitud del mensaje en los primeros 32 bits (asi el extractor sabe cuando parar).
- Anade los bytes reales del mensaje.
- Rellena el resto con bits aleatorios para que el espacio sin usar no delate donde termina el mensaje.
- Recorre los pixeles en algun orden (opcionalmente barajado por una contrasena) y, para cada uno, reemplaza el LSB de R, luego G, luego B por el siguiente bit del flujo.
Para recuperar el mensaje, el extractor hace el mismo recorrido en sentido inverso, lee 32 bits para conocer la longitud y luego lee ese numero de bytes.
Por que PNG es obligatorio
Si tomas una foto con marca de agua y la guardas como JPEG, la marca de agua desaparece. Por que?
JPEG es un formato con perdida - reduce el tamano de archivo descartando detalles que el ojo probablemente no notara. Redondea 124 a 123, redondea 200 a 199, promedia pixeles vecinos… exactamente el tipo de pequenos cambios en el LSB que hicimos. JPEG esta, en la practica, borrando nuestro mensaje oculto.
PNG, en cambio, es sin perdida. Cada byte que entra sale igual. Por eso las herramientas de marca de agua ciega siempre sacan PNG y por eso tienes que volver a exportar a PNG cada vez que quieras conservar la marca.
Copia una postal -> sigue leible. Fotocopia una postal -> el matasellos se difumina. PNG es el original; JPEG es la fotocopia.
Por que la portada tiene que ser enorme
LSB nos da 3 bits por pixel. Para incrustar un payload de 1 MB necesitas al menos 1.000.000 x 8 / 3 ≈ 2,7 millones de pixeles - unos 1650x1650. Para incrustar un payload de 16 MB (un PNG 2048x2048 con alfa) necesitas aproximadamente 44 megapixeles de portada, por eso una portada 500x500 falla de inmediato: solo tiene 91 KB de capacidad, tres ordenes de magnitud pequena.
Cuando subes una portada a la herramienta de Piick, la tarjeta cargada muestra la capacidad de la portada en tiempo real, asi puedes comprobarlo antes de pulsar Ocultar.
Una contrasena no es cifrado
Si marcas el campo de contrasena, Piick baraja el orden de los pixeles usando una secuencia aleatoria deterministica derivada de tu contrasena. Sin la contrasena, los bytes extraidos parecen ruido - la cabecera de longitud de 32 bits no se parsea, asi que el extractor avisara “no se encontro marca de agua”.
Esto es ofuscacion, no cifrado. Cualquiera que conozca la tecnica puede seguir sacando los bits uno a uno y probando todas las contrasenas posibles offline. Para compartir de forma casual (guardar una nota privada dentro de una imagen publica) es mas que suficiente. Para algo sensible, usa primero un cifrado real.
Pruebalo tu mismo
Toda la tecnica corre en tu navegador en unos pocos cientos de lineas de JavaScript. Abre la herramienta de marca de agua ciega de Piick, suelta cualquier PNG, escribe una nota corta y pulsa Ocultar. El PNG de salida se ve igual - pero abre la pestana de extraer y la nota vuelve tal cual.
Prefieres una guia paso a paso? Lee la guia de uso.
Todo lo descrito arriba ocurre en local en tu navegador. Piick nunca sube tus imagenes.