Intereting Posts
Выход из системы Если строка содержит только пробелы? Изменение размера изображения в php только для просмотра Исключить исключение «PDOException» с сообщением «SQLSTATE : недопустимый номер параметра ' checked checkbox останется через разбивку на страницы Предупреждение: mysql_num_rows () ожидает, что параметр 1 будет ресурсом, boolean given Как защитить веб-службу RESTful php с помощью безопасности SSL / TLS и / или уровня сообщений Избегайте ограничения времени выполнения PHP Laravel 4 построитель запросов – со сложными левыми соединениями Почему возможно иметь интерфейс без типа возврата в PHP? Как получить несколько результатов из SQL-запроса PHP-классы с пространством имен не могут быть загружены через spl_autoload_register? PHP и MySQL: преобразование сохраненного TIMESTAMP в локальный часовой пояс пользователя Laravel 4 – транзакция db при сохранении при автоматическом создании другой модели Наилучшая практика MySQL: дети SELECT рекурсивны, насколько это возможно?

Есть ли преимущество для этого хэша для обеспечения безопасности?

Есть ли какое-либо преимущество для

sha1(sha1(sha1($password. $salt))); 

В основном, имея несколько стихов sha1 только один sha1

 sha1($password. $salt); 

Не повторяйте, не повторяйте, НЕ пытайтесь сделать ваш хэш пароля более безопасным, делая «особые» вещи, делающие ваш хэш.

Прежде всего, sha1(sha1(sha1($input))) имеет только побочный эффект, чтобы увеличить вероятность столкновения * на каждой итерации. Увеличение вероятности столкновений – очень плохая вещь.

Почему бы не доверять библиотекам, созданным фактическими специалистами в этой области? Используйте портативный PHP-хеширование .

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


* Первый вызов sha1() принимает бесконечный ввод и создает один из 2 160 выходов. Вторая итерация занимает 2 160 входов и создает один из x выходов, где x <= 2 160 . Третья итерация принимает входной сигнал x и создает один из выходов y , где y <= x <= 2 160 .

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

Да, это называется укреплением ключа (но обычно это делается тысячи раз), и соль должна быть добавлена ​​на каждую итерацию для лучшей энтропии:

 $hash = sha1($password . $salt); for ($i = 1; $i <= 65000; ++$i) { $hash = sha1($hash . $salt); } 

Кроме того, прочитайте этот ужасный пост в блоге – или, по крайней мере, эту короткую цитату:

Чем лучше вы можете оптимизировать свою хэш-функцию пароля, тем быстрее будет работать хэш-функция вашего пароля, тем слабее ваша схема. MD5 и SHA1, даже обычные блок-шифры, такие как DES, предназначены для быстрой работы. MD5, SHA1 и DES – слабые хэши паролей. На современных процессорах необработанные криптоблочные блоки, такие как DES и MD5, могут быть битрейлерами, векторизованными и параллельными, чтобы сделать быстрый поиск пароля быстрым. Реализация FPGA для игр обойдется в сотни долларов.

Использование сырых хеш-функций для аутентификации паролей столь же наивно, как использование несоленых хеш-функций. Не.

Какое здесь состояние?

Во-первых, то, что уже дает вам ваша операционная система: схема паролей «оптимизирована» для дорогостоящих вычислений. Самой известной из них является схема PHK FreeBSD MD5.

Разница между схемой PHK и той, которую вы собирались использовать для приложения для социальных покупок 2.0, проста. Вы просто собираетесь запустить MD5 по соли и пароль и сохранить хеш. PHK запускает MD5 для тысяч итераций. Это называется «растяжкой».

Короткий ответ: нет. Когда вы связываете два алгоритма хеширования, все, что вы делаете, создает еще один алгоритм хеширования, который имеет неизвестные свойства (безопасно). Используйте соль (или даже лучше, HMAC).

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

Вероятно, вы должны использовать sha512 вместо sha1, что вы можете сделать с hash() как hash('sha512',$stringtobehashed); , sha512 также занимает примерно 5 раз дольше, чем sha1 для хэша.