Я слежу за многими менеджерами паролей, такими как keeper, 1password, secret-in, и я следую за менеджером паролей secret-in, чтобы создать свой собственный проект и попытаться добавить те же функции, но застрял в хранении данных пользователей, таких как его / ее секреты, платежные секреты в зашифрованном виде. Прочитал модель шифрования хранителя здесь, но так и не понял. Где хранить ключ шифрования на стороне сервера? У меня есть некоторые данные, которые симметрично зашифрованы одним ключом в моей базе данных. Вместо того, чтобы жестко кодировать его в своем коде, я ищу более безопасный способ хранения ключа шифрования. Где я могу безопасно хранить его?
Подход здесь достаточно простой.
Вы только отправляете зашифрованные данные на сервер для хранения/резервного копирования. Полученные зашифрованные данные не поставляются с ключом.
Вы должны убедиться, что все шифрование и дешифрование происходит локально на устройстве пользователя. Таким образом, пользователь должен предоставить ключ.
Пользователи не умеют предоставлять высококачественный ключевой материал, поэтому вместо этого требуйте, чтобы пользователь предоставил пароль, взял этот пароль и передал его через функцию получения ключа на основе хэша с параметрами, которые замедляют работу функции (большое количество операций, большое количество памяти). требования). Алгоритма, такого как pbkdf2
, с сильным PRF, таким как HMAC-SHA-2
, должно быть достаточно.
Обновлять: Чтобы ответить на ваши конкретные вопросы, вам необходимо выполнить следующие шаги: вам потребуется использовать криптографическую библиотеку, которая поддерживает получение ключа из пароля и симметричное шифрование, например libsodium.
@MayurKoli добавил к ответу
Спасибо, сэр, за вашу поддержку, сэр, пожалуйста, проясните мое одно сомнение, использую ли я библиотеку libsodium на стороне клиента (в javascript) для шифрования/дешифрования данных пользователя, а затем отправки данных на сервер.
да, именно @MayurKoli - вот что такое шифрование на уровне устройства. Шифрование на стороне клиента на используемом устройстве.
не могли бы вы рассказать мне, как шифрование и дешифрование происходит локально на устройстве пользователя, если возможно, предоставьте некоторые учебные материалы, связанные с шифрованием на уровне устройства. Спасибо.