Archiviazione sicura di password in cloud

0

Mi piacerebbe sviluppare un gestore di password. Non sono sicuro del modo più sicuro per archiviare i dati nel cloud.

Le credenziali (nomi utente, password, collegamenti di accesso) verranno archiviate in un server MySQL. Sto pianificando di memorizzare le credenziali per ogni sito nella sua stessa riga. Questi dati verranno crittografati utilizzando i metodi incorporati in Laravel: link ( AES-256-CBC )

I dati devono essere sincronizzati tra i dispositivi e non dovrebbero essere accessibili senza decrittografia dal client (proprio come un archivio LastPass non può essere decodificato da LastPass).

I dati devono essere decifrati quando vengono consegnati al dispositivo.

Prima di andare troppo avanti su questo percorso, vorrei sapere se qualcuno potrebbe darmi un feedback su questo metodo e se si utilizzano i metodi nativi di crittografia / decrittografia ( link ) è abbastanza sicuro rispetto ad es PBKDF2 SHA-256

    
posta FooBar 28.09.2017 - 14:55
fonte

3 risposte

3

Questo non funzionerà. Secondo i documenti devi impostare la chiave nella configurazione php. Ciò significa che tutti gli utenti avranno la stessa chiave e quella chiave verrà anche archiviata sul server. Non è quello che vuoi.

    
risposta data 28.09.2017 - 15:02
fonte
2

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.

    
risposta data 28.09.2017 - 15:15
fonte
0

Perché è necessario utilizzare la crittografia di laravel? Come dice Elias (+1 Elias) se rtfm la chiave è memorizzata in un file sul server, annullando il vantaggio della crittografia dei dati.

Le funzioni di Laravel sono un sottile involucro attorno all'estensione di openssl in PHP. Ci sono molti documenti su internet su come usarlo.

È veramente importante decidere se le password saranno condivise tra gli utenti. Se ciò dovesse accadere, è necessario considerare la crittografia asimmetrica (con le chiavi pubbliche degli utenti sul server).

Idealmente dovresti decifrare dal client. A meno che non si utilizzi un client spesso (anziché un browser) con le chiavi di decrittazione contenute in un file, quindi, se il server è compromesso, può servire su javascript per rileggere i dati / chiavi decrittografati. In una certa misura questo potrebbe essere mitigato dal confezionamento e dalla distribuzione di un'applicazione html5 al filesystem locale ( not caricandolo dal server) e facendo [a | s] jax richiama i dati, ma io per uno vorrebbe testare una tale configurazione in modo estensivo.

    
risposta data 05.10.2017 - 01:34
fonte

Leggi altre domande sui tag