I am interested in the issue of establishing the security of data of users of a web application in the event of a database leak.
It was decided to use the following encryption chain:
- User data is encrypted with a user symmetric key (AES)
- The user symmetric key is encrypted with the user's RSA public key
- The user's private RSA key is encrypted with a key derived from the user's password (PBKDF2)
This approach is described in https://stackoverflow.com/questions/7529582/how-to-store-private-encrypted-user-data-in-the-database-but-make-them-availabl
Our system provides a superuser who can view the data of all users, as well as help them recover access to the account in case of a password loss. For this, the user's RSA private keys must also be encrypted using some additional key that is available to this superuser. The protection of a cryptographic system is determined by the security of its weakest link, and therefore the security of this entire encryption system is reduced to the cryptographic strength of the superuser's password (and from what I've read, one PBKDF2 key can be brute-forced relatively easily, https://stackoverflow.com/a/16279280/7646189)
The question is how, without removing the concept of superuser, to strengthen the security of the superuser's encryption keys in the database.
The first thing that comes to my mind is for the administrator to use yet another encryption key INSTEAD of a password. But I don't understand how it can be used in this scheme, and how the superuser should store this key then and present it to the database for deciphering.