Estoy escribiendo una aplicación de escritorio .NET que se utiliza para enviar pedidos a un servidor a través de una API REST. Para evitar la pérdida de nuestro token de autenticación, lo hice para que, cuando lo use por primera vez, el usuario tenga que enviar el token de autenticación y una contraseña para cifrarlo.
El algoritmo de encriptación es AES-256-CBC y el esquema es el siguiente: la contraseña se revisa antes de que la use el algoritmo, la sal utilizada para el hashing es el GUID de la computadora, por lo que no basta con copiar los archivos del programa, y El IV se genera aleatoriamente y se concatena con el cifrado. Después, cuando el usuario abre el programa, se le pide una contraseña, se inicia el descifrado y, cuando el token de autenticación no coincide con la máscara requerida, se mostrará un error. Hasta aquí todo bien diría.
Sin embargo , mi supervisor aún no está satisfecho con el nivel de seguridad: quiere que el programa registre todos los pedidos que se enviaron al servidor en caso de anomalías administrativas por parte del tercero que hospeda El servidor, solo para que tengamos una referencia con un nivel razonable de credibilidad (aunque supongo que podría llamarlo 'prueba' en caso de que su administración falle). La parte de 'credibilidad' es donde cualquier implementación directa de un archivo de registro sale por la ventana, no proporcionaría:
- Integridad: ninguna persona (incluido el usuario) tiene permiso para modificar el archivo de registro con contenido que no refleja el uso real del programa. El registro solo se puede adjuntar, solo cuando se utiliza la función principal del programa, y solo por el propio programa.
- Confidencialidad: El contenido del registro solo puede ser convocado por el usuario del programa (la solicitud de contraseña ayudará en la identificación del usuario).
He intentado crear un esquema criptográfico (firma digital) que encripta cada registro que se adjunta al registro y encripta la clave pública con la contraseña del usuario, pero esto no resuelve la mitad del problema: la clave privada El programa debe almacenarlo de todas maneras, por lo que estrictamente hablando significa que el usuario tiene acceso a él y tiene la capacidad de modificar el registro.
¿Hay algún método o esquema que cumpla con estos requisitos?