Creerò un'applicazione client-server che memorizza le informazioni finanziarie sensibili di un utente sul server. Vorrei crittografare questi dati in modo che anche se un hacker ottiene l'accesso al server non è in grado di leggere le informazioni finanziarie dell'utente. I dati verranno decrittografati dal client con la password dell'utente.
Per ulteriori difficoltà, a un utente può essere concesso l'accesso ai dati di un altro utente.
È fattibile? In tal caso, esiste una guida in linea che fornisce un esempio dei tipi di crittografia da utilizzare?
Ad esempio, penso che ogni utente debba avere una chiave privata derivata dalla sua password e una chiave pubblica corrispondente che viene utilizzata per crittografare i suoi dati sul server. Questa chiave pubblica è anche memorizzata sul server, in modo che se Alice volesse dare a Bob l'accesso ai suoi dati, lei annullerebbe la crittografia dei suoi dati usando la sua chiave privata, quindi la ricodificherà usando sia la chiave pubblica che quella di Bob. Un problema con questo approccio è che se un hacker ottiene l'accesso ai dati crittografati, potrebbe utilizzare la "forza bruta" provando ogni combinazione di, diciamo, 8 caratteri come password per vedere se tale combinazione non codifica i dati. Pertanto, desidero rendere il processo di decrittazione così lento che non è pratico utilizzare la forza bruta. Esiste un algoritmo di chiave pubblica-privata?
Modifica: Ok, dopo un po 'di ricerche ho scoperto che ci sono un sacco di algoritmi di hash (come PBKDF2) progettati per essere lenti perché prendono un parametro di iterazione che può essere grande quanto vuoi.