Capisco che vuoi mettere qualcosa salvato in modo sicuro in un database. Inoltre, non vuoi che sia decifrabile da qualcuno che si appropria del database.
Questo significa innanzitutto: non è possibile memorizzare la chiave sullo stesso server del database. Ma ha altre implicazioni. Se si sta utilizzando la funzione di aiuto di laravel incorporata encrypt()
, in realtà significa che il server utilizza la stessa password (segreta) per crittografare tutti i dati che gli si forniscono. Quindi se hai due clienti avranno la stessa chiave segreta e quindi qualcuno che ha ottenuto la chiave sarà in grado di decifrare l'intero database.
Secondo: Laravel memorizzava la chiave tipicamente nel file /.env
nella directory principale di laravels sul server. Ciò significa che se qualcuno può accedere ai file server (e ancor peggio se sql db si trova sullo stesso server), la crittografia è inutile.
Che cosa fare? Ci sono molti modi per aggirarlo. La mia opzione preferita è usare la crittografia asimmetrica usando OpenPGP. Esiste già una corretta implementazione che puoi utilizzare e anche un ottimo progetto di riferimento che ti incoraggio a dare un'occhiata a: Pass
The data needs to be synced between devices, and should not be accessable without decryption from the client (just like a LastPass vault is not decrypt-able by LastPass themselves).
Questo è qualcosa che puoi ottenere in diversi modi. Ma non c'è modo di archiviare (almeno) le chiavi di decrittazione sul client (e solo sul client) e quindi trasferire solo crittografato dal client a qualsiasi server o "cloud" che deciderai di utilizzare. La crittografia e la decrittografia devono essere eseguite sul client allora.
Se decidi di avere un'applicazione web probabilmente c'è un modo per farlo usando JavaScript e memorizzando un segreto nel browser, ma in realtà non ho un buon esempio di servizio.
Se ti attenti ai keypair pubblici / privati, potresti anche utilizzare la chiave pubblica per crittografare le informazioni da qualsiasi luogo, ma decifrarle solo sul client (dove è memorizzata la chiave privata). Ricorda però: se alcune informazioni in chiaro vengono elaborate sul server, possono essere scoperte da qualcuno che ha accesso ad esso prima della crittografia.
Spero che risponda alla tua domanda almeno approssimativamente.