Какой принцип шифрования данных использовать в базе данных?
Задача - шифрование данных пользователя таким образом, чтобы даже имея доступ к базе прочитать данные было бы невозможно. С другой стороны нужно предусмотреть возможность, когда пользователь забыл или потерял свой ключ шифрования и данные ему нужно восстановить, т.е. как-то дублировать этот ключ или что-то подобное.
Как, с теоретической точки зрения, лучше это реализовать ?
Депонируйте все ключи пользователей асимметричным шифрованием на открытом мастер-ключе.
Закрытый ключ (лучше 2 его копии) держите на носителе, который подключаете только к устройству, не имеющему доступ в интернет, и используемому только для дешифрования "забытых" ключей пользователей (передача в обе стороны через флешку).
Если система серьезная, то носители закрытого ключа можно хранить в банковских ячейках - для объектов такого объема стоит недорого.
Наибольший риск в этом случае - подмена Вашего открытого мастер-ключа ключом злоумышленника (man-in-the-middle).