Estoy trabajando en una aplicación que actúa como back-end (API REST) para una extensión de Google Chrome. Se supone que los datos se envían desde y hacia el cliente.
La forma en que funciona es:
- Los datos que provienen del cliente están encriptados por la aplicación utilizando AES-256 (usando la clave maestra, busque debajo ) y se almacenan en una base de datos SQLite3.
- Los datos que la aplicación envía al cliente se descifran en el back-end y luego se envían a través de un protocolo HTTP.
Nota, la aplicación y la extensión residen en el mismo entorno local, por lo que otras computadoras en la red no pueden acceder a ella. Es por eso que los datos se transfieren en texto sin formato en ambos casos.
Hay algunas restricciones:
- Puede haber varios clientes enviando solicitudes al back-end. Todos están controlados por la misma persona.
- Hay un formulario de inicio de sesión en el cliente y solo se requiere una clave maestra. Una vez que se envía el formulario, se supone que la clave se envía al back-end y el cliente se autentica, es decir, al compararlo con el (cifrado mediante PBKDF2) en la base de datos.
El problema El problema es que no quiero almacenar la clave maestra de forma persistente en el cliente (Javascript), ya que cualquiera puede acceder fácilmente a la computadora. Si era posible autenticarse solo una vez, enviando la clave maestra a través del protocolo a la aplicación y luego retírela del cliente.
Entonces, la pregunta es ¿cuál sería la solución óptima?