Evitar alteración de documento
Buenas, la verdad es que no tengo mucha idea de criptografía, por eso vengo a preguntaros jejeje. A ver, la cosa es que tengo un programa que genera un documento de salida y necesito que sea entregado en una oficina tal cual lo generó el programa, y que el usuario no pueda ser capaz de alterar su contenido.
He pensado en usar cifrado de clave asimétrica y firmar el documento con la clave privada del usuario, pero... esa clave tendrá que estar almacenada en algún sitio del PC del usuario y por tanto podría generar otro documento a su antojo y firmarlo, y llevar ese último a la oficina, en vez del original.
A ver si me podéis dar alguna solución viable para mi problema porque yo no la encuentro. Gracias a todos!
- Conecta o crea cuenta para participar

- 744 lecturas
Twitter

Chocante
Normalmente es el usuario quien no quiere que nadie pueda alterar su documento, con lo cual lo firma con su clave privada, y problema resuelto. Pero por lo visto tú quieres que un programa genere el documento como perteneciente a un usuario, sin que éste intervenga. Chocante. Si no lo explicas mejor se podría parecer a un caso de suplantación de identidad.
---
¿pdf?
A falta de datos más específicos... ¿y si imprimes [1] a pdf y les envías el documento? No es tan seguro como firmar el fichero, pero te puede servir (si solo se trata de no alterar el contenido).
[1] Pdfcreator
Antes de nada daros las gracias
Antes de nada daros las gracias a los dos por vuestras respuestas, aunque la del PDF no la entiendo muy bien, nada le impediría al usuario generar otro PDF para su beneficio.
Os voy a explicar más de qué va el tema. Es un programa de gestión que genera un informe con las ventas de un periodo, y este informe ha de ser entregado por el empleado en una oficina central. Entonces ya se han dado casos que el empleado ha cambiado datos del informe para su beneficio, como suprimir parte de las ventas. Por eso quiero que el informe que genere el programa tenga alguna marca, esté cifrado o algo parecido, de forma que no se pueda alterar por el empleado.
No sé si me he explicado bien. Un saludo a todos!
Firmar el pdf
Vale, entonces la solución pasa por firmar el pdf, tal y como te indica Agustín. De esta forma el receptor puede comprobar la firma digital y asegurarse de que el documento no ha sido alterado por el camino.
Dale un vistazo a este hilo:
http://www.kriptopolis.org/firmar-digitalmente-pdf-con-software-open-source
Pero insisto
Pero insisto, que le impide al empleado modificar el PDF a su antojo y volverlo a firmar? Porque la firma deberá estar en algún lado del ordenador al que tiene acceso no?
Comprobación de firmas
Ya no es que sea un pdf, sino que se trata de un documento firmado digitalmente por tí (con tu clave o certificado digital). Por mucho que genere otra persona una versión propia (firmada forzosamente con otro certificado digital, o sin firmar), el receptor comprobará la validez de la firma digital de dicho documento y no coincidirá con la tuya.
Para hacerlo bien, solicita un certificado digital a una entidad certificadora y úsalo para la firma.
No sé si me he explicado... ;)
Mira esto:
http://www.tuguialegal.com/firmadigital.htm
Lo siento pero sigo sin entenderte
Lo siento pero sigo sin entenderte lo que me quieres decir :(
Me dices que el programa genere un documento firmado por mi? vale, pero es que para que se pueda firmar, dicha firma deberá estar en alguna parte del ordenador. Y por tanto, el empleado podría coger, modificar el documento a su antojo y firmarlo con la firma anterior.
Con un poco más de detalle
A ver si ahora nos entendemos... ;)
Vamos a poner un ejemplo práctico a grandes rasgos, y para ello nos apoyamos en el enlace que te sugerí:
http://www.tuguialegal.com/firmadigital4.htm
Tú necesitas enviar documentos a una tercera persona garantizando la integridad de la información. Para ello vas a un organismo certificador (Prestador de Servicios de Certificación) como por ejemplo la Fabrica Nacional de Moneda y Timbre, o bien un organismo privado. Este organismo genera un certificado digital asociado a tí, y te lo entrega en una tarjeta de firma electrónica, que guardarás como un tesoro.
Ahora generas el documento que vas a enviar, y mediante una aplicación que soporte firma digital, procedes a firmar dicho documento. Para ello introduces tu tarjeta de firma digital en el ordenador (lector usb de tarjetas) y firmas el fichero. Para mayor seguridad necesitarás una contraseña para acceder a la tarjeta (en realidad a la clave privada para firmar).
Generado el documento, éste incorporará un hash resumen del documento (para garantizar la integridad) y tu certificado digital (para garantizar el emisor).
Ahora bien, el receptor, cuando reciba dicho documento, procederá a validar la firma digital. Para ello, de acuerdo con los procedimientos para clave asimétrica (dale un vistazo porque es la base de todo), obtiene la clave pública del Prestador de Servicios de Certificación que ha emitido tu certificado (el de la tarjeta) y comprueba que esa firma digital corresponde realmente con tus datos.
De esta forma, como el receptor se apoya en una tercera parte para garantizar la validez de la firma, y la tarjeta es tuya, personal e intransferible, es imposible que puedan falsificar el documento.
Este es el sistema usado para el DNIe, los visados electrónicos y otras muchas cosas.
Incluso la firma de documentos y correos electrónicos con gpg se basan en esto, con la diferencia de que no hay un certificado digital emitido por una tercera persona, sino que tú envías al receptor (por un medio seguro) la clave pública con la que debe verificar tu firma digital (te recomiendo estudiar también el uso de gnu gpg).
Bueno, creo que ahora está mejor explicado (epero que sin demasiadas imprecisiones, que alguien me corrija en tal caso) y se entiende mejor. :)
Un saludo.
Una pequeña aclaración
Creo que lo había pasado un poco por alto y esta es la verdadera cuestión. Si usas cifrado asimétrico (sin certificados digitales ni historias) para firmar el documento, para evitar que otro usuario use la clave privada para firmar, tienes dos opciones (más bien diría obligaciones):
1) Que la clave privada esté protegida con una contraseña que sólo tú conoces.
2) Que la clave privada no esté alojada en el ordenador, sino en un lápiz usb (por ejemplo) que lleves tú siempre encima.
Mi consejo es que hagas las dos cosas. Mira bien los tutoriales de gpg (o Pgp), como te he dicho antes.
Ahora ya estoy casi convencido de haberte resuelto las dudas... ;)
Mi problema
jejejeje gracias por aclararlo todo, está muy bien pero creo que no has entendido mi problema. Mi problema es que un programa genera un documento, el cual el empleado de esa sucursal debe llevarlo a la central sin cambiar su contenido. Si aplico todo lo que me has dicho, debería estar la clave privada, la contraseña para acceder a ella y todo lo que quieras en el programa que genera el documento, para, una vez generado, firmarlo. Por esto anterior, si el empleado es avispado (lo es) podría extraer la clave privada de dónde quiera que esté, modificar el documento generado, y firmarlo con los cambios que él ha hecho.