Как безопасно хранить ключи доступа / закрытые ключи в базе данных - PullRequest
1 голос
/ 09 апреля 2020

Таким образом, у меня есть ситуация, когда мы должны предоставлять услуги сельской местности через простые в использовании приложения, такие как чат-боты и офлайн-кошельки. Однако в бэкэнде каждый пользователь при регистрации получает новую пару ключей, которая действует как ключ доступа к используемому нами API, который предоставляет сервис. По сути, мы являемся посредниками.

Я исследовал и не смог прийти к решению, как лучше хранить эти закрытые ключи. Несколько подходов; наряду с плюсами и минусами; Я подумал:

Первый: шифр

  1. пусть шифр = (secret_salt + идентификатор чата пользователя / номер телефона)

  2. сохранить ключ pvt в базе данных как aes256 (privatekey, cipher)

Плюсы:

  • fast

  • дешево

Минусы:

  • секретная соль - единственная точка отказа

Второе: шифрование конверта

  1. Создайте ключ шифрования основного ключа, используя aws KMS

  2. Для каждого пользователя создайте ключ шифрования данных

  3. Используйте ключ шифрования данных для шифрования закрытого ключа пользователя и сохраните его в базе данных

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

Плюсы:

  • не удается получить закрытый ключ из облака KMS

  • немного медленнее

Минусы: * 10 67 *

  • если злоумышленник получит доступ к приложению, которое он все еще может имитировать, вызовы aws?

Я не уверен, что второй вариант лучше первого, или если мне следует рассмотреть различные варианты в целом.

Любая помощь будет признательна.

...