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.