Как мне сохранить пароль в базе данных, который мне нужно восстановить в виде простого текста? - PullRequest
0 голосов
/ 20 сентября 2018

Привет! Я разрабатываю веб-сайт PHP, который имеет интеграцию с 3-сторонним решением, для которого мне необходимо зарегистрировать учетные данные API, чтобы сгенерировать токен для запросов.

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

Как можно безопасно сохранить этот пароль в базе данных или в файле конфигурации?
А если мне нужно использовать функции шифрования, как хранить соль для восстановления пароля?

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

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

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

Сохранение паролей создает большие проблемы с безопасностью.которые требуют существенных гарантий.

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

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

Очевидно, что ключ шифрования должен быть надежным, что обычно означает случайный симметричный ключ со 128-битным или более (256-битным - хороший выбор) паролем.не приемлемо.

0 голосов
/ 20 сентября 2018

Зашифруйте пароль, НЕ хешируйте его.

Когда вы хешируете пароль, вы теряете пароль навсегда и получаете «проекцию» самого пароля, которая не позволяет вернуться и произвестиоригинальный пароль.Хеширование, как правило, является самым безопасным вариантом аутентификации, поскольку никто не может воспроизвести исходный пароль.Но вы не можете хэшировать его, поскольку в какой-то момент вам нужен пароль обратно.

Поэтому зашифруйте его.Существует несколько классов шифрования, от самого базового до самого сильного.Я не знаю, насколько безопасно вы хотите шифрование.Вот простой (не полный) список типичных опций:

1.Кодировка

Кодировка НЕ ​​является шифрованием.Когда мы кодируем некоторые данные, мы заменяем символы другими.Вспомните о 2000-летнем ROT-13, который использовал Юлий Цезарь (не так ли?).A становится H, B становится T и т. Д. В любом случае это НЕ шифрование, а всего лишь простое преобразование, которое обманет ребенка или человека, не имеющего только технического образования.Другие наиболее типичные кодировки включают Base-64 и простое шестнадцатеричное.

2.Слабое шифрование

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

3.Среднее шифрование

Это включает в себя симметричное шифрование с большими паролями (или ключами с длиной бит 256 или более), засолкой, но внутренними паролями / ключами.Это очень полезно, и я принимал эту стратегию несколько раз.Соль хранится в виде первых 16 байтов закодированного значения.При дешифровании соль отделяется от закодированного значения (это всегда 16 байтов).

4.Надежное шифрование

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

Итог

В вашем случае я бы использовал вариант № 3 Среднее шифрование, если у вас нет веских причин для попыткиВариант № 4.Для меня # 4 излишне.

...