Quiero almacenar copias de pasaportes de forma segura en una base de datos, la base de datos en sí misma es una base de datos MySQL normal y en un servidor web algo confiable. El usuario que posee la copia del pasaporte solo debe poder cargar su pasaporte y no verlo. El enfoque que quiero tomar consiste en los siguientes pasos.
Configuración:
- El administrador del sistema abre la página a través de https
- El administrador envía una clave pública generada al servidor y almacena la clave privada localmente (en una tarjeta inteligente o algo que no esté conectado permanentemente a la computadora)
Almacenamiento de pasaportes:
- El usuario abre la página a través de https
- El usuario selecciona la copia del pasaporte (imagen) en el navegador y la envía al servidor
- El servidor cifra la imagen con la clave RSA pública y la almacena en la columna de la base de datos
- El servidor sobrescribe cualquier copia sin cifrar en la memoria
Recuperación de pasaportes:
- El administrador abre la página a través de https
- El servidor carga la columna cifrada y envía la imagen cifrada a través de AJAX al navegador del administrador
- El navegador del administrador carga la clave privada de un archivo o smarcard y descifra la imagen usando la enlace biblioteca
- Los datos de la imagen sin cifrar se inyectan en el atributo src de una etiqueta de imagen.
(Todavía no he encontrado una buena forma de cargar la clave privada en el navegador)
Preguntas:
- Si el servidor es pirateado y el atacante descarga la base de datos, ¿son seguras las copias del pasaporte?
- ¿Hay una mejor manera de garantizar que las copias estén seguras?