Firmas digitales y validación real de lo que realmente se acordó

3

Estoy desarrollando una aplicación y parte de la suscripción requiere que un usuario firme un contrato de uso del servicio.

He estado leyendo sobre el tema durante unos días y estoy bastante contento con todas las técnicas relacionadas con la firma digital de un documento. Algunas referencias abajo

Firmar digitalmente DATA, Not Documents [closed]

¿Cuál es la diferencia entre una firma electrónica y una firma digital

La única pregunta abierta que tengo es ¿cómo podemos validar realmente que los datos / contrato que presento al usuario para su revisión son los mismos que los datos / contrato que se firmaron?

Por ejemplo, podría implementar en mi aplicación todo el hashing y la PKI necesaria para firmar de forma segura el documento / los datos, pero ¿qué sucede si decido que quiero corromper y alterar el texto que se muestra en la página web? esto a través de javascript, o suministrando un pdf diferente al que necesita ser firmado).

Podría mostrarle al usuario una información / contrato completamente diferente a lo que se requiere, luego, en el backend de mi solicitud, firmaré los datos correctos. Entonces puedo eliminar el código malicioso. Si alguien auditó mi software porque el contrato estaba en disputa, verían que muestro los datos / contrato correctos y, por lo tanto, el contrato cuestionable es vinculante.

En última instancia, tengo control sobre todos los aspectos de la firma, por lo que me cuesta mucho entender cómo cualquier cosa puede ser más segura que tomar mi palabra como proveedor de que no alteraré los datos / contrato que se muestran al usuario.

Entonces, con toda la seguridad en la firma del documento, en última instancia, todo depende de la confianza que tengo en mí como desarrollador para no alterar maliciosamente el acuerdo contractual que se muestra al usuario.

¿Me he perdido algo en mi investigación? ¿O realmente se reduce a confiar? ¿En qué caso, por qué molestarse en firmar digitalmente?

ACTUALIZACIÓN Basado en la respuesta a continuación:

Controlo el proceso de firma y lo que elijo mostrar en la página. Podría mostrar un documento de usuario A en la página web. Hacen clic en el botón "firmar ahora". El documento B se usa en el backend y se firma. Envío el documento de usuario B por correo electrónico. Ellos lo disputan. No tienen forma de probar que vieron el documento A como se mostraba en una página web que ahora he eliminado y reemplazado con el documento B. A menos que un usuario sea realmente inteligente y se encargue de la propia página web o tome una captura de pantalla (la mayoría de los usuarios no lo harían). ). ¿Cómo pueden probar que aceptaron documentar A?

ACTUALIZACIÓN Basado en la respuesta aceptada:

Para cualquiera que lea esto y también tenga dificultades, lo que realmente pasé por alto aquí es que asumí que podría ser el guardián de mi clave privada y la clave privada de mis clientes. En retrospectiva, esto es obviamente un plano de avión equivocado. La única forma de aplicar verdaderamente una firma digital es permitir que ambas partes firmen con su propia clave privada y luego proporcionar su clave pública para permitir la validación de la firma. El problema con esto obviamente es que muchos usuarios no expertos en tecnología simplemente no sabrían mucho acerca de las firmas digitales y cómo aplicarlas, por lo que he tenido que admitir la derrota y la baja a una simple firma electrónica con algún hash SHA256. Séllalo después de firmar.

    
pregunta Gaz_Edge 27.01.2014 - 13:34
fuente

3 respuestas

2

Su sistema asume que le están dando acceso a su clave privada. Si están haciendo eso, entonces las cosas ya están rotas y la clave probablemente podría declararse comprometida y no vinculante (según la jurisdicción). Una clave privada siempre debe ser controlada por el usuario al que pertenece y debe negarse a permitirle firmar algo en su nombre.

En su lugar, trabajando correctamente, tendría que darles una copia del documento para firmar, ellos lo firmarían ellos mismos y le enviarían una copia. De lo contrario, en realidad solo es usted quien certifica que "firmaron" el documento y casi con certeza no sería un documento vinculante, ya que en realidad es usted quien lo firma.

Este es efectivamente el equivalente a que usted haga un documento y luego firme mi nombre en él. Es una falsificación y no es vinculante. Puede que tenga que haber un caso legal al respecto, pero es muy probable que vaya en su favor.

Parece que se trata de una firma electrónica en lugar de una digital. No puede tener la autenticación criptográfica de una firma digital para nadie que no sea el titular de la clave privada y solo el titular de una clave privada puede firmar algo. Si una empresa lo firma en su nombre, no es una firma digital, sino una firma electrónica. No verifica que realmente fue usted quien lo firmó y, en general, tiene un poco más de validez legal que hacer clic en "Acepto" en un EULA. En muchos casos, para que se levante ante el tribunal, la empresa tiene que poder demostrar que fue usted quien hizo clic en el botón y está en ellos para demostrar que el documento no ha cambiado. (Millage puede variar según la jurisdicción, y no soy abogado). Esto puede ser bastante difícil de hacer.

    
respondido por el AJ Henderson 27.01.2014 - 15:07
fuente
2

Si la otra parte del documento tiene algún sentido, detectará rápidamente su comportamiento nefasto. El punto principal de las firmas digitales es que alguien puede verificar que el documento y la firma coinciden.

Tomemos un ejemplo. Estoy firmando un contrato en su sitio web. Usted muestra el contrato (documento A) y lo acepto. Luego, cambia los términos del documento a su favor (creando el documento B) y lo firma. Luego me envía el documento para mi registro (voy a insistir en esto).

  • Si me envía por correo el documento A, la firma digital no coincidirá cuando lo verifique, por lo que mis sospechas se han despertado.
  • Si me envía el documento B, veo que los términos han cambiado y lo cuestiono.

La única forma de enviarme el documento A y una firma que coincida con el documento B es encontrar una colisión en el proceso de firma, lo cual, si se sigue un proceso adecuado, será más o menos imposible.

    
respondido por el Qwerky 27.01.2014 - 14:30
fuente
0
  

¿cómo podemos validar realmente que los datos / contrato que presento al usuario para su revisión son los mismos que los datos / contrato que se han firmado?

Según tengo entendido, este es el problema básico de integridad. Generalmente se resuelve de la siguiente manera: descifre la firma con la clave pública para obtener el hash original, compárelo con el hash real. Si difieren, entonces el documento ha sido manipulado (y con suerte, con una función hash adecuada, lo contrario es cierto).

La integridad no se basa en lo que veo o muestro, sino en lo que puedo calcular. Esto me hace incómodo con el software propietario que hace todo por mí, aunque el software también puede ser firmado o certificado.

  

luchando para entender cómo cualquier cosa puede ser más segura que tomar mi palabra como proveedor de que no alteraré los datos / contrato que se muestran al usuario.

Si se trata de una aplicación web, utilizarás https, por supuesto, para evitar a los usuarios intermedios, y supongo que puedes obtener una certificación de tus métodos por parte de un tercero. Esto le costará mucho debido al trabajo requerido y al riesgo.

    
respondido por el Pierre ALBARÈDE 01.12.2015 - 01:30
fuente

Lea otras preguntas en las etiquetas