← Volver al blog

Cómo verificar si una imagen fue alterada

Qué prueba la firma de un .oim y qué no, cómo se eliminan los metadatos y cómo comprobar la firma con oim-player o con la API de claves. Guía práctica.

Te llega una imagen por correo. Dice ser la foto de un contrato, un cartel de un evento o un diseño aprobado. ¿Cómo sabes si alguien la cambió por el camino? Y, más difícil, ¿cómo sabes si lo que muestra es verdad?

Son dos preguntas distintas. Una es de integridad: ¿el archivo es el que salió de su origen? La otra es de veracidad: ¿lo que dice es cierto? Un archivo puede ser íntegro y mentir. Esta guía trata la primera pregunta, que es la que una firma puede responder, y deja clara la segunda.

Integridad no es verdad

Imagina un recibo impreso con sello. El sello prueba que nadie tocó el papel después de sellarlo. No prueba que el precio sea justo ni que la tienda existe. Con una imagen pasa lo mismo.

En un .oim, la firma ECDSA cubre los datos del documento y la imagen base. Si cambias un texto, un color o un píxel, la comprobación falla. Pero la firma no dice quién hizo la imagen, ni si el contenido es cierto. La guía de seguridad lo resume en una frase: la firma garantiza que los datos no se alteraron desde que OIM los empaquetó, y que pasaron por el saneado. Nada más.

Qué se elimina al empaquetar

Un archivo original trae cosas que quizá no quieras compartir: comentarios, datos de cámara, la posición GPS de una foto. Al crear un .oim, el compilador descarta los fragmentos de texto del PNG original (tEXt, zTXt e iTXt). Si la entrada es un JPEG, descarta también su EXIF. Así que el .oim no lleva esos datos.

Hay otra cosa que el archivo tampoco lleva: el identificador del autor. Esa información es un dato personal, y sellarla en un archivo que se distribuye impediría borrarla después. Se guarda en un registro que sí puede corregirse. Por eso la firma no te dice quién lo hizo.

Lo que no detecta

Hay límites que conviene conocer:

  • La esteganografía. Si alguien esconde un mensaje en los bits menos significativos de los píxeles, ese mensaje viaja con el archivo. La firma lo cubre como parte del documento, pero no lo inspecciona. Detectar ese tipo de mensaje de forma fiable no es posible hoy, y la guía no promete hacerlo.
  • Un archivo ajeno a OIM. La firma solo prueba algo sobre archivos firmados por OIM.
  • Una imagen que se recomprime. Si cambias el PNG sin tocar ningún píxel, los bytes de la imagen cambian. La firma lo nota, aunque la imagen se vea igual.

Cómo se ven los resultados

La guía de seguridad y la de ECDSA describen estos estados. Un archivo alterado no se muestra, ni su imagen ni sus capas:

Resultado Qué significa ¿Se muestra?
Firma válida y la imagen coincide con el sello Íntegro Sí
Firma válida, sin sello de imagen (archivos anteriores al 11 de septiembre de 2026) Firmado, imagen sin sellar Sí, con aviso
Firma válida, pero la imagen no coincide La imagen fue cambiada No
Firma inválida Datos alterados o firma falsa No

Un ejemplo cotidiano: alguien abre tu .oim en un programa, lo guarda de nuevo con otra compresión y te lo reenvía. No cambió ningún color a simple vista. Para el player, la imagen ya no es la que OIM produjo, y no la muestra.

Cómo comprobarlo con el player

La forma más directa es usar <oim-player>. El método getSecurityStatus() devuelve el estado de la firma:

const player = document.querySelector('oim-player');
const estado = player.getSecurityStatus();
console.log(estado); // el estado de la firma

Cómo comprobarlo sin el player

La clave pública se publica como un conjunto JWK, en este punto:

GET https://api.oim.media/v1/media/keys

Cada firma indica qué clave usar con su campo key_version, que coincide con el kid de la clave. Con esa clave, la guía de ECDSA muestra cómo verificar en el navegador con la API Web Crypto, y un script de Python equivalente. Ambos reconstruyen primero los datos canónicos, sin los campos signature, key_version, timestamp y creator_user_id, y después comprueban la firma IEEE P1363 de 64 bytes.

Si escribes tu propio lector de .oim, la regla es la misma que aplica el player: verifica la firma antes de usar nada del documento, y sanea el contenido antes de insertarlo en la página.

Una lista corta para tu día a día

  1. Usa el archivo .oim.png original, no una captura ni una copia reenviada.
  2. Abre el archivo en la web con <oim-player> y mira el estado de la firma.
  3. Si el estado es invalid o el archivo no aparece, no lo des por bueno.
  4. Si el estado es correcto, recuerda que solo confirma integridad. Para la veracidad, busca la fuente.

Para el principio de fondo, lee el protocolo de firma en cada píxel. Y para la idea de que la imagen lleva su propia descripción, la imagen que sabe lo que es.

Preguntas frecuentes

¿Si la imagen se ve igual, significa que no fue alterada?

No necesariamente. Un cambio puede ser invisible a simple vista y, aun así, cambiar los bytes del archivo. Para un .oim la pregunta es si la firma coincide, no si la imagen parece la misma.

¿Un archivo sin firma es falso?

No. Significa que no está firmado por OIM. Puede ser un PNG normal, o un .oim anterior a la firma de la imagen. El estado unsigned solo dice eso.

¿Por qué no aparece mi imagen si está bien?

Si el estado es image_mismatch o invalid_signature, el player no muestra nada del archivo. Lo más habitual es que haya pasado por una herramienta que recomprimió los píxeles. Pide el archivo original.

¿Esto impide que alguien copie la imagen?

No. La firma no controla quién la copia ni la usa. Prueba que el archivo es el que salió de OIM y no ha cambiado. Quien lo copie tiene la misma copia.