PHP / JavaScript con RSA

4

Ho alcune colonne nel database che dovrebbero essere crittografate. Mi chiedo se il modo in cui ho scelto di far funzionare questo sistema sia ok, e non vedo l'ora di sentire alcune opinioni:

Ho scelto l'algoritmo RSA (con phpseclib). I dati che ho bisogno di crittografato verranno inseriti dagli utenti, quindi la chiave privata necessaria per la crittografia sarà sul server e i dati verranno automaticamente crittografati una volta inseriti. Dato che c'è una sola persona che dovrebbe vedere questi dati, ho deciso di tenere la chiave privata sul suo computer e fare chiamate AJAX separate che decodificheranno i dati usando quella chiave una volta che la pagina di amministrazione mostra. Cosa ne pensi di questo modo? L'implementazione non è un problema, sto solo chiedendo cosa ne pensi dell'intera idea

    
posta Bernie White 06.11.2011 - 19:05
fonte

3 risposte

2

will be entered by users, so the private key needed for encrypting it will be on the server

Questo non ha alcun senso. Sicuramente vuoi dire che i dati sono crittografati usando la chiave pubblica (e decifrati usando la chiave privata). Supponendo che questo sia il caso:

Implementation is not the problem

Sì, lo è. Se la persona con la chiave privata sta accedendo ai dati tramite AJAX, ciò significa piuttosto che sarà decodificato da javascript, quindi è necessario risolvere il problema di come ottenere la chiave privata nella sandbox.

    
risposta data 07.11.2011 - 13:40
fonte
2

Il problema con l'archiviazione della chiave lato client (e accessibile tramite Javascript) è che un singolo difetto XSS può esporre comunque la chiave. In generale, è più facile per un utente malintenzionato trovare e sfruttare difetti del lato client (come XSS) piuttosto che hackerare il server ed estrarre la chiave privata da lì.

    
risposta data 07.11.2011 - 14:18
fonte
2

Avrai il seguente problema:

Che cosa succede se il mio computer originale è morto e / o voglio usare un altro computer, dove riceverò la chiave pubblica? Nessuno sarà in grado di decodificare i dati.

Ti suggerisco di fare qualcosa del genere:

  1. Ogni utente ha la sua passphrase

  2. Quando l'utente immette i dati viene crittografato con la chiave simmetrica generata da una chiave casuale + passphrase

  3. la chiave casuale viene salvata accanto ai dati nel DB (ma non nella passphrase)

  4. Quando l'utente vuole visualizzare i dati, deve fornire la passphrase e quindi i dati vengono decodificati

risposta data 07.11.2011 - 09:50
fonte

Leggi altre domande sui tag