Nel mio database memorizzo informazioni che sono criptate e decodificate al volo tramite una classe PHP.Dove memorizzare la chiave privata per la crittografia in ambiente PHP
Per applicazione Uso una chiave privata aggiunta a una chiave utente per verificare che la decrittografia abbia esito positivo solo quando un utente tenta di decodificare i propri dati.
La "chiave" utente è memorizzata nel database; ma la chiave privata (livello applicazione) è memorizzata come file txt in FS. Fuori rotta 'sopra' la radice del web.
Considerazioni: - Se il database viene violato: finiscono con una parte della chiave, e dati cifrati - Se PHP-stop o è danneggiato: finiscono con una singola pagina con solo include('../private/private.php')
in esso.
- Se NGINX fallisce: la connessione è "semplicemente" interrotta.
L'unico scenario che posso pensare è la corruzione del sistema stesso. Ma il server esegue un firewall, viene aggiornato regolarmente, esegue fail2ban e vengono eseguiti solo i servizi necessari. Accesso SSH solo tramite accesso tramite chiave ecc.
Mi chiedevo se questa è la pratica "migliore". Oppure se esiste un modo migliore per eseguire questo tipo di crittografia con le specifiche sopra riportate? Quali sarebbero i diritti di accesso corretti per il file chiave?
Al momento il database e il server web sono entrambi sullo stesso server di fronte a Internet. È meglio suddividerli e creare un server Internet con solo il server web; e metti il server database e il file-chiave su un server diverso in una rete privata?
edit: la chiave privata per crittografare i dati è costruire da due componenti:
$key = $app_key . $user_key
i diritti di accesso corretti al file-chiave sarebbero '-r --------' o '400' e l'utente del webserver come proprietario. A parte questo, sembra che tu abbia fatto un buon lavoro –
* "Uso una chiave privata aggiunta con una chiave utente per assicurarmi che la decrittografia abbia esito positivo solo quando un utente prova a decrittografare i propri dati" * Non sono sicuro di cosa sia si intende. Tenete entrambe le chiavi sul server, quindi la decrittografia avrà successo ogni volta che lo vorrete. Viceversa, se il server è di proprietà, anche i dati sono di proprietà. – Jon
è un inizio capace dipende interamente dal livello di informazioni che si ha e dalla forza necessaria per la sicurezza. Per la maggior parte degli scenari comuni va bene anche se si può prendere in considerazione l'esecuzione di un controllo sui daemon in esecuzione sul sistema operativo in basso per verificare che non ci siano vettori di attacco noti su di essi, ad esempio versione ssh'd ecc. – Dave