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.