Seguridad PDF

 

 

Hola a todos. Soy nuevo en el foro y quiero felicitaros a todos por el buen contenido publicado.

Tengo un reto o problema que creo que no tiene solución, pero ahí va:

En mi empresa preparamos documentación compleja (proyectos de ingeniería), muy extensa, con texto, tablas, gráficos, planos, ... para las administraciones públicas. Cuando se lo entregamos al cliente, le cedemos todos los derechos, pero la propiedad intelectual sigue siendo nuestra.

El reto es conseguir que el cliente pueda leer la información, imprimirla, colgarla en un servidor web para que todo el mundo pueda acceder a ella, con la máxima accesibilidad posible (evitar problemas de incompatibilidad). Pero restringiendo que otras empresas de la competencia puedan copiarse el texto completo y reutilizarlo en sus proyectos.

Hasta ahora utilizamos seguridad PDF, permitiendo la lectura e impresión del contenido, pero no la copia del mismo. He visto que esta seguridad es poco "fuerte", pues hay múltiples programas por ahí que quitan la seguridad de los PDF instantáneamente, sea cual sea la contraseña y el nivel de seguridad. He visto que también es fácil implementar un lector de PDF que no cumpla con las restricciones de seguridad del autor. ¿Qué puedo hacer? En realidad sé que no hay método infalible. Pero me gustaría encontrar un método de protección cuyo contrapuesto método de desprotección sea tan complicado, lento o complejo como para sentirme seguro. En realidad las empresas de mi competencia no suelen tener gabinete de informática, ni nadie con conocimientos de programación inversa ni desencriptado, ni se gastarían el dinero en contratar a alguien para copiarme.

Yo mismo utilizo programas de desencriptado de PDF que me funcionan bien. Estos programas tienen muchas dificultades cuando el PDF tiene contraseña de apertura (además de contraseña de permisos). Lo último que he intentado es crear un archivo .exe personalizado, con botones que abran los documentos con protección de apertura. De esta manera, los programas desencriptadores no funcionan. Y para abrir el archivo es necesario utilizar mi .exe. El único sitio donde se guarda la contraseña de apertura es en el .exe, con lo que sería necesario entrar al código del programa para extraer la clave. Mi .exe personalizado, sólo es compatible con Acrobat Reader, con lo que evito que alguien utilice visores PDF trucados que no respetan la protección del documento. Lo malo es que obligo a utilizar un determinado visor, pero como es el más extendido del mercado, lo puedo aceptar.

¿Lo que estoy probando es buena idea? ¿O se podría vulnerar la protección de manera muy fácil?

¿Alguien sabe si se puede pasar la contraseña de apertura del documento al Reader por línea de comandos, mediante un switch o parámetro? Esto sí es posible para descomprimir archivos ZIP o RAR cifrados.

Comentarios

Selecciona arriba tu forma preferida de visualizar los comentarios y pulsa el botón para guardar tu elección para próximas visitas (sólo si eres usuario registrado).
dadaninielel's picture

protección


Si no dejas que se pueda ver ni imprimir y lo encriptas a lo mejor puedes conseguir algo. Siempre y cuando no se lo pases a nadie, claro.

SI vas a una reprografia seguro que encuentras gente que por 6€/hoja te copia lo que quieras (a mano), si son muchas supongo que mas barato.

Si se puede imprimir los OCR trabajan bastante bien.

Yo hago proyectos y no me preocupo de eso, al igual que es imposible evitar que alguien coja tu proyecto y tome datos o formas de cálculo.

No me digais que nunca habeis consultado proyectos ajenos, y mas si están disponibles publicamente.

Un saludo

Daniel

anónimo's picture

todo el mundo copia


Bueno, todo el mundo consulta y/o copia proyectos ajenos. Pero una cosa es que sea una práctica habitual y otra es que sea correcta.

Yo lo único que intento es proteger algo mi trabajo, no dar demasiadas facilidades, pero ya veo que es imposible.

Caminamos hacia la sociedad pública de la información, donde los derechos de autor se disuelven y todo pasa a formar parte del conocimiento común de la humanidad, con derechos de libre uso y/o distribución. No digo que esté en contra de ello, sólo que tendremos que adaptarnos a la situación.

¡Un saludo!

anónimo's picture

cifrado y firma digital


creo que algo que hacen funcionar la seguridad es poner las cosas publicas,

se puede incorporar una firma digital con el fin de autentificar al usuario y su perfil con esto se puede realizar una seguridad en capas de acuerdo a los mismos

alff

jaconbue's picture

Solución encontrada (creo)


Después de un largo tiempo, he retomado mi inquietud de hace un año y he encontrado una respuesta que me parece satisfactoria. En el siguiente enlace podéis ver el resultado (imagen ISO con un ejemplo): VisorPDF.iso

Reto a cualquiera a extraer el texto (obviamente, sin acudir al artículo original de la Wikipedia, sin mecanografiarlo por completo y sin utilizar OCR).

Si alguien lo desea, subiré el código fuente utilizado.

A continuación, la memoria explicativa del proceso (perdón si es larga).

LIMITACIONES

En primer lugar señalaremos que no existe solución completamente satisfactoria al problema.

Si se permite la visualización del contenido, siempre será posible su copia, aunque sea manualmente (tecleando letra a letra), o bien en manuscrito. Lo que se pretende aquí es poner dificultades a la copia automática y sistemática de largos documentos.

Siempre será posible también almacenar el documento en formato imagen raster, pero ese formato ya presenta una dificultad técnica de manipulación, pues el procesado de una gran cantidad de imágenes requiere mucho tiempo de cómputo.

Si se permite la impresión del documento, siempre será posible escanear el resultado de impresión y generar un documento similar al original formado por una composición de imágenes raster. También será posible utilizar un software de reconocimiento de textos (OCR) que transforme las imágenes en cadenas de texto.

SOLUCIÓN BASADA EN PDF-RASTER

Una primera solución al problema sería crear archivos PDF formados íntegramente por imágenes raster. Es similar a entregar al público el resultado de escanear el documento imprimido.

Un posible copiador únicamente tendría la opción de escribir letra a letra el documento, o utilizar un software OCR. Para dificultar el funcionamiento del OCR se puede incluir una marca de agua o sello de impresión.

El inconveniente reside en que para documentos complejos el equivalente raster es muchísimo más pesado que el original vectorial (mayor tamaño de archivo, más lentitud de copia, más lentitud de visualización y lectura, mayor requerimiento de memoria), y pierde el contenido interactivo.

REFLEXIÓN SOBRE CONTRASEÑAS

Una segunda solución es la utilización de contraseñas de apertura y edición de documentos. Sin contraseña de apertura hay programas que desbloquean fácilmente la protección, por lo que es estrictamente necesaria. Pero si hemos de entregar al usuario la contraseña de apertura (para poder acceder al contenido) éste puede usar un ataque por diccionario (basado en la contraseña facilitada) para desbloquear con mucha facilidad la protección.

Así pues, hay que usar contraseña de apertura pero no facilitarla al público. Para ello, se puede utilizar un software desarrollado a medida, que almacene la contraseña en su interior (cofre de llaves) y que la use automáticamente sin intervención del usuario y sin que él pueda conocerla. El cofre ha de estar cifrado para evitar que un atacante acceda a la contraseña. La contraseña ha de ser utilizada en un canal inaccesible para el usuario, y/o en un lenguaje ininteligible para el usuario (al menos, para un usuario medio sin conocimientos en programación inversa, cracking, o traducción del lenguaje-máquina).

SOLUCIÓN BASADA EN RELLENADO AUTOMÁTICO DE FORMULARIOS

Si utilizamos un visor convencional de archivos PDF, como por ejemplo Acrobat Reader, éste solicita al usuario la introducción de la contraseña de apertura mediante un formulario, al intentar acceder a un archivo PDF protegido.

Podemos construir un código que rellene ese formulario de manera automática y silenciosa. Yo he utilizado para ello AutoIt Sin embargo, encontramos las siguientes limitaciones:

  • Si utilizamos el portapapeles para copiar y pegar la contraseña, un programa que registre los cambios en el portapapeles del sistema desvelará la clave.
  • Si utilizamos una simulación de pulsaciones de teclado para introducir la contraseña en el formulario, un programa que registre la entrada de teclado desvelará la clave.
  • Si enviamos la clave directamente al formulario, un programa que registre el texto introducido desvelará la clave.
  • Si disfrazamos u ocultamos el formulario, un programa que analice todas las ventanas existentes (ocultas o no), desvelará la clave.
  • Podemos utilizar una combinación de todos los métodos anteriores, incluso añadiendo esteganografía (técnica mediante la cual saturamos todos los canales posibles de comunicación con información irrelevante, para que la clave pase desapercibida), pero un programa diseñado para suplantar al visor externo accedería a la clave.
  • Suponiendo que fuéramos capaces de rellenar el formulario de manera oculta al usuario, todavía existiría la posibilidad de que utilice un visor externo que no respete las restricciones de usuario (que permita copiar o extraer texto aunque el creador del archivo haya querido impedirlo). Esto es especialmente importante con SumatraPDF, pues al ser GPL y disponerse del código fuente del programa, cualquiera puede modificarlo y volver a compilarlo.

En conclusión, basarse en un visor externo (llamar a la aplicación por defecto para abrir PDF que ya esté instalada en el ordenador) no es una solución eficaz, pues no tenemos control estricto sobre la aplicación convocada.

SOLUCIÓN BASADA EN VISOR INTEGRADO

La alternativa es utilizar un visor integrado en el sistema, incluido en el paquete entregado, que sea fácil de usar, con interfaz en múltiples idiomas, que sea capaz de visualizar documentos complejos, que no permita la copia si no se desea, y al que podamos suministrar la contraseña de apertura de documento por un canal inaccesible e ininteligible para el usuario.

Podemos desarrollar dicho visor desde el principio, ajustado por entero a nuestras necesidades, o bien confiar en un visor desarrollado por otros que sea de nuestra confianza. En ambos casos es necesario incluir una verificación de autenticidad y/o de integridad que permita detectar si ha habido una suplantación del archivo ejecutable (y/o de sus librerías). De esta manera evitamos que el programa "cofre" entregue la clave a un programa con código modificado o desconocido.

La opción que he utilizado es pasar la contraseña como parámetro en línea de comandos (utilizando el comando "Foxit Reader.exe fichero.pdf -ps contraseña").