Безопасный способ сохранить decryptable пароли

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

План состоит в том, чтобы зашифровать пароль пользователя с открытым ключом, который хранится на сервере. Аутентификация сделана путем шифрования входа и сравнения результатов. Нет НИКАКОГО сделанного дешифрования. Закрытый ключ, способный к дешифрованию, хранится удаленный для более позднего использования.

Какой алгоритм шифрования/дешифрования Вы предложили бы? Зашифрованные пароли все еще так же безопасны как хеширующий (MD5/SHA1), когда Вы полагаете, что закрытый ключ не доступен взломщику?

8
задан Jammer 16 January 2012 в 01:51
поделиться

5 ответов

Возможность расшифровывать пароли - плохая идея (и, вероятно, нет способа сделать это лучше, чем хранить их в незашифрованном виде). Похоже, ваша основная проблема заключается в возможности использовать пароли, если вы измените метод хранения. Просто делайте то, что делает Linux, храните, как вы хешируете пароль с паролем. Так, например, $ 1 $ salt $ hash - это MD5. Таким образом, если вы решите изменить способ хранения паролей, вы все равно сможете проверить их на соответствие старым паролям (и, если кто-то войдет в систему правильно, вы сможете обновить его пароль с новым хешем).

2
ответ дан 5 December 2019 в 11:23
поделиться

Не расшифровывать пароль. Если вам нужно будет изменить систему паролей в будущем, добавьте поле с именем storage_type (или что-то еще).

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

4
ответ дан 5 December 2019 в 11:23
поделиться

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

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

Итак, атаки на вашу систему сводятся к:

  1. Атакам на общее шифрование с открытым / закрытым ключом
  2. Атакам на ваше хранилище закрытых ключей.
1
ответ дан 5 December 2019 в 11:23
поделиться

Для большинства приложений более чем достаточно хранить хэши паролей SHA-1.

Да, в большинстве алгоритмов хеширования есть известные конфликты, но это не означает реального вектора атаки. Особенно когда солишь хеши.

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

0
ответ дан 5 December 2019 в 11:23
поделиться

Я перефразирую подход Джаммера -

  1. Создание пары открытого / закрытого ключей. Жестко запрограммируйте открытый ключ на своем веб-сервере. Храните закрытый ключ в физическом шкафчике банка, вне досягаемости веб-сервера / базы данных / любого разработчика.
  2. При регистрации пользователя зашифровать пароль + соль с помощью открытого ключа. Этот шаг идентичен использованию хеш-алгоритма. Сохраните зашифрованный пароль + соль в базе данных.
  3. Если вы хотите проверить пароль, снова зашифруйте его и сравните со значением, хранящимся в базе данных.

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

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

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

Я, конечно, мог ошибаться.

8
ответ дан 5 December 2019 в 11:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: