Estoy escribiendo un sistema de administración de contraseñas de colaboración y tengo preguntas relacionadas con el almacenamiento de contraseñas encriptadas. Básicamente, me gustaría que varios usuarios puedan acceder y cambiar una base de datos.
Nivel alto:
- El usuario ejecuta el cliente que solicita la autenticación de nombre de usuario / contraseña (respaldada con AD / Samba / Radius / local).
- En caso de éxito, el usuario debe ingresar una contraseña compartida . Esto debe ser conocido por todos los usuarios que tienen acceso.
- La base de datos cifrada se envía al cliente, que la descifra y la muestra al usuario autenticado.
Un poco más detallado:
- Tras la inicialización de la base de datos, se genera una clave aleatoria y se cifra con la contraseña del conjunto de claves legible. Esta clave cifrada se almacena en el disco.
- Cada entrada en la base de datos que contiene contraseñas se almacena encriptada con la clave original.
- Por lo tanto, se requiere la contraseña del conjunto de claves para descifrar el resto de las contraseñas.
- La contraseña del conjunto de claves también se puede actualizar sin volver a cifrar toda la base de datos. Todo lo que sucede es que descifras la clave con la contraseña anterior y la vuelves a cifrar con la nueva.
¿Esto es todo para nada? ¿Se considera esto mal diseño? Mi objetivo es evitar que alguien simplemente descargue la base de datos si se le da acceso al servidor. Le transmití esto a un amigo mío que medio bromeando dijo "Sí, porque esto evita que la gente robe la base de datos de Chrome". ¿Qué tan seriamente debo tomar eso?
¿Alguna recomendación para un diseño adecuado, algoritmos para usar, etc.?