Является ли PHP.net надежным источником «любых» справочников по PHP?

Пересматривая свой "вопрос", чтобы не шуметь аборигенов.

Кажется, что в наши дни в Интернете так много ресурсов (включая SO), что найти «» ответ на вопрос может быть легко, но как определить, действителен ли этот ответ или даже актуален?

В частности, одна область, о которой часто спрашивают, - это как правильно справиться с хешированием и шифрованием с помощью PHP для подготовки в хранилище базы данных. Один из распространенных ответов на SO всегда выглядит так: «Вы уже были на php.net?». Хотя я понимаю, что обычно возникает вопрос, в котором кто-то задает простейшие вопросы, я начал обнаруживать, что некоторые описания кажутся противоречащими друг другу, и, что более важно, пользовательские примеры устарели (многие из них относятся к 2008-2009 гг.).

Например: при поиске того, почему и как использовать хеширование паролей: http://www.php.net/manual/en/faq.passwords.php#faq.passwords.fasthash

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

Когда вы узнаете больше о crypt () и, в частности, о хешировании blowfish, правила, изложенные на странице, следующие:

http://www.php.net/manual/en/function.crypt.php

  • начни мою соль с $ 2a $
  • продолжить с двумя числовыми значениями (пользователь ниже указал важность этого, тогда как php.net - нет)
  • следовать с $
  • введите 22 буквенно-цифровых символа

Дальнейшее чтение дает пример:

<?php

    if (CRYPT_BLOWFISH == 1) {
        echo 'Blowfish:     ' . crypt('rasmuslerdorf', '$2a$07$usesomesillystringforsalt$') . "\n";

    }
?>

Кажется, что пример на той же странице не соответствует правилам, которые он нам только что сказал (26 символов после «$ 2a $ 07 $».

Возврат:

Blowfish:
$ 2a $ 07 $ usesomesillystringfore2uDLvp1Ii2e. / U9C8sBjqp8I90dH6hi

по сути, сама строка действительно изменяется, но почти все мое значение SALT (первые 22 символа, упомянутые выше) остается широко открытым. Разве это не упростило бы определение моей фактической строки?

Что еще более важно, это только один пример, но, в конечном счете, насколько сильно следует полагаться на такие ресурсы, как PHP.net?

Как однажды сказал мой друг Мугату: «Я чувствую, что принимаю безумные таблетки».

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


person JM4    schedule 29.07.2011    source источник
comment
Blowfish можно расшифровать, поэтому он не подходит для хешей.   -  person sqwk    schedule 29.07.2011
comment
@sqwk - JM4 означает EksBlowfish, алгоритм одностороннего хеширования, основанный на Blowfish - это НЕ обратимый блочный шифр!   -  person Dereleased    schedule 29.07.2011
comment
@pst - Я не воспринимаю это как напыщенную речь, но называйте это так, если нужно. Я называю это заявлением для программистов и сотрудников о том, чтобы они проверяли свою работу перед публикацией в массы. Это состояние техники в целом. Люди на SO злятся, когда люди задают вопросы о том, как что-то делать правильно, называют их идиотами, когда они не ссылаются на базовые сайты, такие как php.net, а затем, в свою очередь, сайт (как я продемонстрировал выше) практически ничего не делает. смысл. Половина SO рекомендует шифрование sha1 или md5, которое, как ясно сказано на сайте, не рекомендуется, так в чем же разница?   -  person JM4    schedule 29.07.2011
comment
-1 для сравнения яблок с грушами. Хеширование! = Шифрование   -  person fyr    schedule 29.07.2011
comment
@fyr - я сравнивал эти два как равные? Хеширование является неотъемлемой частью шифрования, так что да, они связаны, и когда кто-то тупит, тогда возникают ожидания для последнего.   -  person JM4    schedule 29.07.2011
comment
@ JM4 они оба являются частью темы криптографии, а не шифрования. Но с их точки зрения у них две очень разные цели.   -  person fyr    schedule 29.07.2011
comment
@pst Отсутствие проверки? Слова написаны с ошибками? Заголовок «хеш» изначально был некорректным, но если я первый, кто сделает ошибку в написании одного или двух слов в посте, побейте меня камнями. Я верю в вопрос, как вообще это хеширование? это правильный вопрос. Если вы находите приведенный выше пример достаточным, рекомендуется ответ, указанный ниже. если вы согласны (как это сделали другие нижеперечисленные), они указали другие варианты или предложения. Ваш пост о разглагольствовании ошибочен и, с моей точки зрения, выглядит как защитник SO, расстроенный из-за того, что кто-то избил типичный, проверяли ли вы данный ответ php.net.   -  person JM4    schedule 29.07.2011
comment
@pst Я переформулировал свой вопрос исключительно для вас. Это вполне понятный вопрос, имеющий реальную цель и ценность.   -  person JM4    schedule 29.07.2011
comment
Я не уверен, за кого проголосовали «не настоящий вопрос», но как бы то ни было   -  person JM4    schedule 09.08.2011


Ответы (3)


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

Одно важное замечание, если вы не перейдете по этой ссылке. Два числа, следующие за $2a$, НЕ СЛУЧАЙНЫ. Это лог-база-2 количества раундов EksBlowfish, запускаемых на веревке; в основном, каждый раз, когда вы увеличиваете число на 1 (например, с $2a$07$ до $2a$08$), вы удваиваете время, необходимое для вычисления хеша.

Это сделано намеренно - это позволяет EksBlowfish быть чрезвычайно дорогостоящим с точки зрения вычислений, а когда аппаратное обеспечение масштабируется (закон Мура), вы можете остановить его и снова сделать его дорогим.

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

Редактировать

Что касается того, почему PHP включает прямые реализации таких вещей, как SHA-1 и MD5, это потому, что PHP не был изобретен вчера, он существует (в различных формах) в течение 20 лет. Раньше MD5 считался безопасным. Вещи меняются.

person Dereleased    schedule 29.07.2011
comment
хороший ответ. Я ценю ваше время, чтобы объяснить приведенную выше часть log-base-2 и дать ответ, отличный от того, что вы смотрели на php.net. Мое предположение относительно шквала голосов против, как раз основано на моей критике большинства плакатов SO. Однако я ценю хороший ответ. Я посмотрю твой блог. - person JM4; 29.07.2011
comment
Вы не поверите, но руководство PHP для crypt раньше было намного, намного хуже; Мне пришлось открыть сообщение об ошибке, чтобы заставить их изменить описание к точка, где это было даже умеренно пригодно. Для получения дополнительной информации ознакомьтесь с двумя моими вопросами, которые я задал, когда исследовал EksBlowfish / Crypt: stackoverflow.com/questions/2225644/ и stackoverflow .com / questions / 2225720 /; Удачи! - person Dereleased; 29.07.2011

Старые алгоритмы хеширования, такие как sha1 и md5, отлично подходят для некоторых вещей, таких как хеширование данных для быстрого поиска. Хотя они не являются криптографически безопасными (больше), они по-прежнему полезны и намного быстрее вычисляются, чем более безопасные алгоритмы, такие как sha256.

Sha1 и Md5 когда-то были относительно безопасными с точки зрения вычислений, когда было коммерчески нецелесообразно (если вы не были АНБ или КГБ) взломать их грубой силой. Теперь радужная таблица или алгоритм грубой силы с включенным графическим процессором позволяют любому отображать хэш на входе, который генерирует этот хеш за разумное время. Несколько лет назад это было не так.

person Eric J.    schedule 29.07.2011
comment
хороший анализ изменений и постоянная поддержка таких строковых функций. - person JM4; 29.07.2011
comment
@ JM4: и в основном неверно, особенно в отношении простоты вычисления атаки по прообразу на SHA1. - person President James K. Polk; 30.07.2011
comment
Sha1 показывает достаточно трещин с точки зрения атак столкновения, поэтому я бы не забыл использовать его в новом программном обеспечении (которое часто длится намного, намного дольше, чем предполагалось изначально). en.wikipedia.org/wiki/SHA-1#Attacks - person Eric J.; 05.05.2015

Проблема со многими сайтами (кроме тех, которые не понимают, о чем они говорят) в том, что те, которые БЫЛИ применимы год назад, все еще популярны, но содержат устаревшую информацию. Было время, когда MD5 и SHA1 были первоклассными алгоритмами хеширования. К сожалению, в настоящее время это не так; существует множество таблиц поиска, позволяющих просто ввести хеш и получить рабочий ключ, или можно просто перебрать их с помощью грубой силы. К сожалению, многие программные пакеты по-прежнему полагаются на них, что является одной из причин, по которым они все еще существуют.

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

PHP поддерживает широкий спектр алгоритмов хеширования. Ознакомьтесь с функцией hash(), которая также может быть расширена для поддержки новых хешей. Вы можете узнать, что поддерживает ваш сервер, используя hash_algos(). Лично я использую SHA-512 с солью, потому что большее число в имени хеша означает лучший хеш. Правильно? :)

person shmeeps    schedule 29.07.2011