Одним из возможных решений является создание зашифрованной версии мастер-ключа для каждого пользователя.
Таким образом, вы будете:
- Шифровать свои данные с помощью «мастер-ключа»
- Шифровать свой «мастер-ключ» с помощью «личного ключа» (по одному на каждыйuser)
Затем, когда пользователь предоставляет свой личный ключ, вы используете его для расшифровки сохраненного и зашифрованного главного ключа, а затем используете его для расшифровки данных.Таким образом, шифрование данных может выполняться всегда с одним и тем же ключом, и вы можете регулировать доступ с помощью личных ключей.
Это предполагает, что, хотя главный ключ и зашифрованные данные никогда не покидают сервер, вам придетсярасшифруйте на сервере и отправьте незашифрованному пользователю (но, конечно, используйте для этого защищенную линию от перехвата).
Нет способа сделать это, если вы хотите отправить данные пользователю в зашифрованном виде.