Considere el siguiente caso de usuario:
- Tengo algunos datos confidenciales (por ejemplo: número de tarjeta de crédito)
- Encripto estos datos y los almaceno en la base de datos
-
Ahora quiero enviar estos datos a un usuario X, pero no quiero:
- Descifra estos datos antes de enviarlos
- Proporcione al usuario X mi clave utilizada para descifrar los datos almacenados
Me gustaría darle al usuario X su propia clave privada y usar una ronda de cifrado más en los datos encriptados antes de que se la envíe.
¿Existe un algoritmo de cifrado que cambie la clave de descifrado con cada ronda de cifrado subsiguiente? Algo que se parece a esto:
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 esto, puedo crear diferentes textos cifrados para cada usuario, impidiéndoles compartir claves. Esto también significa que los datos nunca estarían en formato de texto simple en el servidor.
El caso de uso es solo teórico y sé que hay diferentes soluciones apropiadas para tal situación.