Что является хорошим вариантом для двусторонней обработки пароля? - PullRequest
0 голосов
/ 28 августа 2009

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

Какие алгоритмы или библиотеки вы можете предложить? особенно в PHP?

Ответы [ 4 ]

7 голосов
/ 28 августа 2009

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

Вы должны использовать односторонние функции, такие как SHA1 или MD5 (SHA1 лучше). Когда пользователь пытается войти в систему, зашифруйте пароль, который он использовал, и сравните его с тем, что вы сохранили.

2 голосов
/ 28 августа 2009

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

0 голосов
/ 28 августа 2009

Я бы смоделировал это после любимого сайта сообщества разработчиков.

Но, если серьезно, размещение пароля на вашем бэкэнде таким образом, чтобы его можно было извлечь и отобразить конечному пользователю, открывает некоторые проблемы безопасности:

  • Те, кто имеет доступ к базе данных / ключу, имеют доступ ко всем паролям
  • Пароли могут быть прослушаны при отправке конечным пользователям для отображения

Я бы предложил однонаправленный хеш (Google для лучшего алгоритма - SHA-1 был хорош несколько лет назад, но люди всегда делают успехи в взломе алгоритмов шифрования). Вы просто применяете хеш к паролю, предоставленному конечным пользователем, и сравниваете его с хешированным паролем, который вы сохранили - если получающиеся строки совпадают, у вас есть успешная аутентификация.

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

0 голосов
/ 28 августа 2009

Для шифрования:

base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));

Для расшифровки:

rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "\0");

Тем не менее, желательно хэшировать свои пароли (с солью!) И давать пользователям ссылку для сброса, таким образом вы будете защищены даже от себя / своих возможных ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...