Considera il seguente caso utente:
- Ho alcuni dati sensibili (es: numero di carta di credito)
- Cifrò questi dati e li memorizzerò nel database
-
Ora voglio inviare questi dati a un utente X, ma io non voglio:
- Decifra questi dati prima di inviare
- Fornisci all'utente X la mia chiave utilizzata per decodificare i dati memorizzati
Vorrei dare all'utente X la sua chiave privata e utilizzare un altro giro di crittografia sui dati crittografati prima di inviarlo a lui.
Esiste un algoritmo di crittografia che modifica la chiave di decodifica con ogni successivo ciclo di crittografia? Qualcosa che assomiglia a questo:
Ct = Encrypt(KeyA, Pt) # I store Ct in the database
CtB = Encrypt(KeyB, Ct) # I now encrypt it with different key and
# send CtB along with a private key KeyC to the user
# KeyC is derived from KeyB
Pt = Decrypt(KeyC, CtB) # the user can now use this KeyC to get the original data
Con questo, posso creare diversi ciphertexts per ogni utente, impedendogli di condividere le chiavi. Ciò significa anche che i dati non saranno mai in formato testo normale sul server.
Il caso d'uso è solo teorico e so che ci sono diverse soluzioni appropriate per tale situazione.