Almacenamiento seguro de contraseñas en la nube

0

Me gustaría desarrollar un administrador de contraseñas. No estoy seguro de cuál es la forma más segura de almacenar los datos en la nube.

Las credenciales (nombres de usuario, contraseñas, enlaces de inicio de sesión) se almacenarán en un servidor MySQL. Estoy planeando almacenar credenciales para cada sitio en su propia fila. Estos datos se cifrarán usando los métodos integrados en Laravel: enlace ( AES-256-CBC )

Los datos deben estar sincronizados entre dispositivos, y no deben ser accesibles sin descifrado desde el cliente (al igual que los almacenes LastPass no pueden descifrarlos por sí mismos).

Los datos deben ser descifrados cuando se entregan al dispositivo.

Antes de ir demasiado lejos en este camino, me gustaría saber si alguien me puede dar una respuesta de este método y si utiliza los métodos nativos de cifrado / descifrado ( enlace ) es suficientemente seguro en comparación con, por ejemplo, PBKDF2 SHA-256

    
pregunta FooBar 28.09.2017 - 14:55
fuente

3 respuestas

3

Esto no va a funcionar. De acuerdo con los documentos, debe configurar la clave en la configuración de php. Eso significa que todos los usuarios tendrán la misma clave y esa clave también se almacenará en el servidor. Eso no es lo que quieres.

    
respondido por el Elias 28.09.2017 - 15:02
fuente
2

Entiendo que desea poner algo almacenado de forma segura en una base de datos. Tampoco desea que sea descifrable por alguien que obtiene la base de datos.

Esto significa, ante todo, que no puede almacenar la clave en el mismo servidor que la base de datos. Pero tiene otras implicaciones. Si está utilizando la función de ayuda integrada de laravel encrypt() , en realidad significa que el servidor usa la misma contraseña (secreta) para cifrar todos los datos que la alimenta. Por lo tanto, si tiene dos clientes, tendrán la misma clave secreta y, por lo tanto, alguien que haya obtenido la clave podrá descifrar toda la base de datos.

Segundo: Laravel almacenó la clave normalmente en el archivo /.env en laravels root dir en el servidor. Eso significa: si alguien puede acceder a los archivos de los servidores (y, lo que es peor, si la db de SQL está en el mismo servidor), el cifrado es inútil.

¿Qué hacer? Hay varias formas de evitarlo. Mi opción preferida es usar el cifrado asimétrico utilizando OpenPGP. Ya existe una implementación adecuada que puedes usar e incluso un proyecto de referencia muy bueno que te invito a echar un vistazo a: Pass

  

Los datos deben estar sincronizados entre dispositivos, y no deben ser accesibles sin descifrado desde el cliente (al igual que los almacenes LastPass no pueden descifrarlos por sí mismos).

Eso es algo que puedes lograr de varias maneras. Pero afaik, no hay forma de almacenar (al menos) las claves de descifrado en el cliente (y solo en el cliente) y, por lo tanto, solo transferir encriptado desde el cliente a cualquier servidor o "nube" que eventualmente decida usar. El cifrado y el descifrado deben realizarse en el cliente.

Si decides tener una aplicación web, probablemente haya alguna forma de hacerlo utilizando JavaScript y almacenando un secreto en el navegador, pero realmente no tengo un buen ejemplo de cajero automático.

Si se apega a los pares de claves públicas / privadas, también puede usar la clave pública para cifrar la información de todas partes pero descifrarla solo en el cliente (donde se almacena la clave privada). Sin embargo, recuerde: si alguna información de texto simple se procesa en el servidor, puede ser capturada por alguien que acceda a ella antes del cifrado.

Espero que responda a tu pregunta al menos a grandes rasgos.

    
respondido por el Ben 28.09.2017 - 15:15
fuente
0

¿Por qué la necesidad de usar el cifrado de laravel? Como dice Elias (+1 Elias) si rtfm la clave se almacena en un archivo en el servidor, se anula el beneficio de cifrar los datos.

Las funciones de Laravel son una envoltura delgada alrededor de la extensión openssl en php. Hay muchos documentos en Internet sobre cómo usarlo.

Es realmente importante decidir si las contraseñas se compartirán entre los usuarios. Si ese es el caso, entonces necesita mirar el cifrado asimétrico (con las claves públicas de los usuarios en el servidor).

Lo ideal sería descifrar en el cliente. A menos que use un cliente grueso (en lugar de un navegador) con las claves de descifrado guardadas en un archivo, entonces, si su servidor está comprometido, puede mostrar javascript para volver a leer los datos / claves descifrados. Hasta cierto punto, esto podría mitigarse empaquetando e implementando una aplicación html5 en el sistema de archivos local ( no cargándola desde el servidor) y haciendo que jax [a | s] solicite los datos, pero uno querría probar una configuración de este tipo extensivamente.

    
respondido por el symcbean 05.10.2017 - 01:34
fuente

Lea otras preguntas en las etiquetas