Metadatos PDF y datos ocultos
Última actualización:
Los metadatos de un documento son la información que un archivo lleva sobre sí mismo más allá del contenido de la página: quién dicen sus campos que lo escribió, qué aplicación lo produjo, cuándo dice que se creó y se cambió, y qué material anterior sigue dentro de él. Un PDF puede guardar dos sistemas de metadatos que se solapan, una cadena de revisiones anteriores, archivos completos incrustados y texto que se dibuja de forma invisible; una foto JPEG guarda un diario de cámara; incluso una simple captura PNG nombra el programa que la hizo. Este artículo recorre dónde está cada uno de esos escondites, por qué los datos sobreviven a la edición ordinaria y cómo ocurrieron las filtraciones reales. Para inspeccionar un archivo tuyo mientras lees, ejecuta la herramienta de forense de documentos — funciona localmente en tu navegador — y para el lado de la estructura de lectura de los mismos archivos, consulta tus PDF forman parte de la accesibilidad de tu sitio web.
Dos sistemas de metadatos viajan dentro de cada PDF
El más antiguo es el diccionario de información, un pequeño conjunto de pares clave–valor guardado en el tráiler del archivo: Title, Author, Creator (la aplicación que hizo el documento original), Producer (la aplicación que hizo el PDF), CreationDate y ModDate. Estos campos se escriben automáticamente al exportar, y la mayoría de los autores de documentos nunca abre el diálogo de propiedades que los mostraría — y esa es exactamente la razón por la que se filtran. Un informe exportado desde un portátil personal lleva el nombre de la cuenta del portátil como autor. Un documento empezado desde la plantilla del año pasado sigue nombrando al autor del año pasado. Nada de esto se ve en la página impresa, y todo está a un panel de propiedades de distancia para cada destinatario del archivo.
El sistema más nuevo es XMP, un paquete XML incrustado en el documento, construido sobre la plataforma de metadatos extensible de Adobe y descrito junto a la propia especificación PDF, ISO 32000-2. XMP repite gran parte del mismo terreno en espacios de nombres: dc:title para el título, pdf:Producer, xmp:CreateDate y xmp:ModifyDate, además de campos que el diccionario antiguo nunca tuvo, como la herramienta creadora. Tener dos sistemas sería inofensivo si se mantuvieran al paso, pero no es así: una herramienta actualiza el diccionario de información e ignora XMP, otra reescribe XMP y deja el diccionario obsoleto, una tercera elimina uno y conserva el otro. El resultado es que un solo archivo cuenta rutinariamente dos historias ligeramente distintas sobre sí mismo — y el desacuerdo es en sí mismo información, porque registra que más de una herramienta, en más de un momento, ha tenido las manos en el documento.
Actualizaciones incrementales: el párrafo borrado que nunca se fue
PDF se diseñó para la edición de solo adición. Cuando un editor guarda un cambio de forma incremental, no reescribe el archivo: añade los objetos cambiados, una nueva sección de referencias cruzadas y un nuevo tráiler al final, encadenando hacia el tráiler anterior mediante un puntero /Prev. Cada revisión termina con su propio marcador %%EOF, así que contar esos marcadores da una cota inferior de cuántas veces se ha guardado el archivo así — y cada revisión anterior permanece físicamente presente y legible en los bytes. Abre un archivo así en un visor ordinario y solo ves la revisión más nueva. Lee los bytes, o retrocede por la cadena, y el estado anterior del documento sigue ahí: la cifra antigua de la tabla, la redacción previa de la cláusula, el párrafo borrado antes de la publicación.
Este es el mecanismo detrás de los fallos de censura que siguen llegando a las noticias. Un equipo necesita publicar un informe con nombres o cifras retenidos, así que alguien dibuja rectángulos negros sobre los pasajes sensibles — una operación de dibujo que cambia el aspecto de la página y no toca nada debajo — o borra el texto en un editor que luego guarda de forma incremental, dejando los objetos borrados en una revisión anterior. El archivo publicado parece limpio. Días después, un lector selecciona la región «censurada», la copia y pega las palabras originales en un editor de texto; o un investigador analiza la cadena de revisiones y recupera lo que se eliminó. La censura real es una operación distinta de cubrir: el contenido subyacente tiene que eliminarse del flujo de contenido y el archivo tiene que reescribirse por completo, para que los propios bytes ya no contengan lo que la página ya no muestra. Si un archivo que vas a publicar lleva varios marcadores %%EOF, su historia sigue dentro — da por hecho que un lector motivado leerá esa historia.
Archivos incrustados y texto oculto: la carga que nadie enumera
Un PDF puede llevar archivos completos dentro de sí mismo. El formato define un árbol de nombres de archivos incrustados, al que se llega a través de los objetos /EmbeddedFiles y /Filespec, y las herramientas de autoría lo usan para hojas de cálculo de origen, apéndices de datos y documentos de cartera. El panel de adjuntos que los revelaría es uno que la mayoría de los lectores nunca abre, así que la carga incrustada viaja en silencio: publica el pulido resumen en PDF y puede que publiques también la hoja de cálculo de trabajo que hay detrás, completa con sus propios metadatos, sus hojas de borrador y sus comentarios. Lo mismo vale a la inversa para los destinatarios: un adjunto dentro de un PDF recibido hereda la confianza del documento que lo rodea, y por eso los archivos incrustados merecen una línea en cualquier lista de inspección en lugar de un descubrimiento por accidente.
El texto puede esconderse sin ser un archivo aparte. PDF pinta el texto con un modo de renderizado, y el modo 3 — fijado con el operador 3 Tr — no pinta ni relleno ni trazo: los caracteres están en el flujo de contenido, se pueden seleccionar, buscar y extraer, y son completamente invisibles en la página. Parte del texto invisible es legítimo y valioso: la capa OCR tras una página escaneada es exactamente esto, texto oculto que hace buscable una imagen. El problema es todo lo demás que acaba en el modo 3 o en sus primos — texto blanco sobre fondo blanco, texto recortado fuera de la página visible, una capa de palabras clave añadida para buscadores — porque un lector que extrae la capa de texto recibe palabras que la página nunca mostró. Cuando la capa oculta discrepa de la visible, el archivo dice dos cosas a la vez, y solo una de ellas fue corregida.
Las imágenes también llevan diarios: bloques PNG y Exif en JPEG
Un archivo PNG es una secuencia de bloques con nombre, y varios tipos de bloque existen únicamente para llevar texto: tEXt, su hermano comprimido zTXt y el internacionalizado iTXt. Las herramientas de exportación los escriben por costumbre — una palabra clave Software que nombra el editor, una cadena de herramienta de creación, a veces un perfil XML incrustado entero — y sobreviven a cada recorte y redimensionado que deja intacta la lista de bloques. El bloque tIME añade una marca de última modificación, un bloque eXIf puede llevar un bloque completo de metadatos de cámara, y los bytes añadidos tras el bloque de cierre IEND los ignora cualquier visor mientras permanecen en el archivo. Una captura que parece una imagen neutra de una ventana puede así nombrar el programa de la máquina, fecharse a sí misma y llevar datos que su autor nunca vio.
Las fotos JPEG van más lejos. El archivo es una cadena de segmentos de marcador: APP0 lleva la cabecera JFIF, APP1 lleva un bloque Exif o un paquete XMP — a veces ambos. Los campos IFD0 de Exif se leen como el diario de una cámara: Make y Model del dispositivo, el DateTime en que se tomó o se modificó por última vez la foto, el Software que la procesó y, en directorios extendidos, las coordenadas GPS. Las fotos de móvil publicadas directamente desde el carrete han avergonzado a organizaciones y particulares por igual al situarlos, con precisión, en un momento y un lugar que la propia foto nunca mostró. Los segmentos de comentario (COM) añaden texto libre de la última herramienta que guardó el archivo, los bytes sobrantes pueden quedar tras el marcador de fin de imagen, y la herramienta que lee todo esto — ExifTool, de Phil Harvey, citada en las fuentes — es una descarga gratuita, lo que significa que tus destinatarios también pueden leerlo.
Contrasta las marcas de tiempo y limpia antes de publicar
Una sola marca de tiempo es una afirmación; varias marcas de tiempo son una historia que puede contrastarse consigo misma. Una fecha de creación que cae después de la fecha de modificación no puede describir un documento producido por una herramienta en una sola pasada. Una fecha del diccionario de información que discrepa de la fecha XMP para el mismo hecho registra dos herramientas con dos relojes. Una fecha en el futuro registra un reloj mal puesto, un campo editado a mano o un archivo montado con piezas. Incluso el propio formato de fecha de PDF invita a la ambigüedad: la cadena D: puede omitir su zona horaria, dejando que los lectores adivinen de qué reloj salieron los números. Trata cada incoherencia como un auditor trata una discrepancia contable: suele tener una explicación inocente — reutilización de una plantilla, el reloj de un portátil, un optimizador que reescribió el archivo al subirlo — y es una evidencia que sopesar, nunca un veredicto por sí sola. Los campos de metadatos puede editarlos cualquiera con herramientas gratuitas, así que corroboran o contradicen una historia; no pueden probarla.
Limpiar es, por tanto, un flujo de trabajo, no un botón. Primero, inspecciona: pasa el archivo por la herramienta de forense de documentos y anota lo que le diría a un desconocido: nombres de autor y de herramientas, número de revisiones, archivos incrustados, texto oculto, marcas de tiempo que discuten entre sí. Segundo, corrige en el origen cuando puedas: corrige las propiedades del documento en la aplicación de autoría en lugar de parchear su salida. Tercero, exporta una reescritura completa y nueva — imprimir a PDF, un limpiador dedicado o ExifTool para las imágenes — porque una reescritura completa descarta las revisiones anteriores, los objetos huérfanos y los datos sobrantes de un modo que el guardado incremental nunca hará. Por último, vuelve a comprobar la copia que realmente envías, no la que querías enviar. Y mantén la distinción sobre la que descansa todo el artículo: los originales internos deben conservar sus metadatos, porque la procedencia, el valor de archivo e incluso la accesibilidad — un título de documento también es un metadato — dependen de ello. Limpia la copia publicada y conserva el registro intacto en casa.