Как сохранить ключ шифрования?

Я слежу за многими менеджерами паролей, такими как keeper, 1password, secret-in, и я следую за менеджером паролей secret-in, чтобы создать свой собственный проект и попытаться добавить те же функции, но застрял в хранении данных пользователей, таких как его / ее секреты, платежные секреты в зашифрованном виде. Прочитал модель шифрования хранителя здесь, но так и не понял. Где хранить ключ шифрования на стороне сервера? У меня есть некоторые данные, которые симметрично зашифрованы одним ключом в моей базе данных. Вместо того, чтобы жестко кодировать его в своем коде, я ищу более безопасный способ хранения ключа шифрования. Где я могу безопасно хранить его?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
1 063
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Подход здесь достаточно простой.

Вы только отправляете зашифрованные данные на сервер для хранения/резервного копирования. Полученные зашифрованные данные не поставляются с ключом.

Вы должны убедиться, что все шифрование и дешифрование происходит локально на устройстве пользователя. Таким образом, пользователь должен предоставить ключ.

Пользователи не умеют предоставлять высококачественный ключевой материал, поэтому вместо этого требуйте, чтобы пользователь предоставил пароль, взял этот пароль и передал его через функцию получения ключа на основе хэша с параметрами, которые замедляют работу функции (большое количество операций, большое количество памяти). требования). Алгоритма, такого как pbkdf2, с сильным PRF, таким как HMAC-SHA-2, должно быть достаточно.

Обновлять: Чтобы ответить на ваши конкретные вопросы, вам необходимо выполнить следующие шаги: вам потребуется использовать криптографическую библиотеку, которая поддерживает получение ключа из пароля и симметричное шифрование, например libsodium.

  1. запрашивать пароль у пользователя при первом использовании
  2. запустите этот пароль через деривацию ключа, чтобы получить из него ключ: https://libsodium.gitbook.io/doc/key_derivation
  3. выполнить шифрование пользовательских данных ключом: https://libsodium.gitbook.io/doc/secret-key_cryptography
  4. уничтожить ключ и отправить данные на сервер для резервного копирования

не могли бы вы рассказать мне, как шифрование и дешифрование происходит локально на устройстве пользователя, если возможно, предоставьте некоторые учебные материалы, связанные с шифрованием на уровне устройства. Спасибо.

Mayur Koli 15.12.2020 08:18

@MayurKoli добавил к ответу

Woodstock 15.12.2020 10:33

Спасибо, сэр, за вашу поддержку, сэр, пожалуйста, проясните мое одно сомнение, использую ли я библиотеку libsodium на стороне клиента (в javascript) для шифрования/дешифрования данных пользователя, а затем отправки данных на сервер.

Mayur Koli 16.12.2020 08:41

да, именно @MayurKoli - вот что такое шифрование на уровне устройства. Шифрование на стороне клиента на используемом устройстве.

Woodstock 16.12.2020 18:42

Другие вопросы по теме