Perché sto chiedendo?
Sono molto nuovo alla crittografia (quindi per favore sii paziente con me ...) e voglio evitare di fare errori inutili. Ho fatto molte ricerche, ma - a parte la maggior parte delle altre domande correlate alla programmazione - ho avuto difficoltà a trovare informazioni sufficienti per rendermi sicuro di me, che ora capisco come fare le cose per bene.
Qual è il contesto?
Sto lavorando su un webshop utilizzando PHP (> 7.2) e MySQL. Ho bisogno di memorizzare alcune informazioni personali. Tuttavia, questo non conterrà dati critici (come i dettagli di pagamento) - solo nomi, indirizzi e informazioni di contatto. Ciononostante, voglio crittografare questi dati, non ultimo per ottenere un po 'di esperienza. Questi dati saranno inseriti e letti dall'applicazione php, senza input da parte di un amministratore.
Sto ospitando questo sito su World4You, un fornitore austriaco. Non sono sicuro della parola corretta per questo (l'inglese non è la mia lingua madre), ma penso che chiameresti questo hosting condiviso. Tuttavia, ho letto di hosting condiviso, in cui altri utenti hanno accesso ai miei file - questo non è il caso qui.
Nelle tue risposte, considera queste circostanze come invarianti. Sono ben consapevole che c'è molto spazio per migliorare la sicurezza quando si tratta di hosting. E sono, ovviamente, felice di ogni suggerimento in merito a questo. Ma per favore aiutami anche a trovare la migliore soluzione data in queste circostanze.
Perché secretbox?
Secondo la mia ricerca, ci sono alternative di crittografia più forti a secretbox. Tuttavia, questa maggiore sicurezza può essere facilmente compromessa da una scarsa implementazione, specialmente se sei un dilettante come me. Secretbox è ancora abbastanza sicuro, ma molto più facile da usare e quindi la scelta migliore nel mio caso. Corretto?
Inoltre, libsodium ora fa parte di PHP (nelle versioni 7.2 e successive).
Le mie domande
Grazie al libsodium e-book ora so come generare una chiave e un nonce e come crittografare e decodificare i dati usando questi. Tuttavia, non sono sicuro di come memorizzare la chiave e il nonce.
Dove conservo la chiave?
La "migliore" soluzione (considerando le mie circostanze), che ho trovato finora, è quella di memorizzare la chiave in un file php, che vive al di fuori della radice del documento. È un modo accettabile di fare le cose? Ci sono opzioni migliori, che non richiedono modifiche significative alla mia configurazione?
Dove immagazzino i nonces?
Secondo me, i nonces non devono essere tenuti segreti. Quindi, dove tengo i miei nonces?
per esempio: se voglio cifrare le stringhe per le colonne-tabella "nome", "indirizzo" e "email", userei 3 nonce, giusto? Quindi, dovrei semplicemente memorizzare questi 3 nonce in tre colonne aggiuntive di questo stesso tavolo (questo in qualche modo intuitivamente "sembra" sbagliato)? O li conserverei altrove?
Quale tipo di colonna dovrei usare?
Da quello che ho raccolto, dovrei memorizzare i dati crittografati in una colonna di un tipo binario. Quindi un BLOB sarebbe la scelta giusta?
Inoltre, quale tipo di colonna dovrei usare per memorizzare nonces (se li memorizzo effettivamente in una tabella)?
Grazie mille!