Функция Python -R

Просматривая все параметры python, я обнаружил, что python содержит параметр «[включает] рандомизацию хэша, так что значения __hash__() объектов str, bytes и datetime «приправлены» непредсказуемым случайным значением. Хотя они остаются постоянными в пределах отдельного процесса Python, они непредсказуемы между повторными вызовами Python». (источник).

Официальные документы ссылаются на этот документ http://www.ocert.org/advisories/ocert-2011-003.html, который должен предоставить дополнительную информацию, однако он не предоставляет никакой информации о том, как выглядят такие «созданные HTTP-запросы». Все релевантные ссылки на сайте мертвы. Я знаю, что это можно исправить, вызвав python -R, однако меня больше интересуют подробности.
Как один HTTP-запрос может на несколько часов полностью загрузить ЦП сервера и как рандомизация хеш-значения может это исправить? Это создает какой-то мертвый замок? (Я знаю, что HTTP-запрос может занять много времени, если скрипт сломан (бесконечный цикл for/while, gotos) или выполняет очень дорогостоящую задачу, но я предполагаю, что это не так).


person Matt3o12    schedule 13.07.2014    source источник


Ответы (1)


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

Атака столкновений в одном мире — это атака, нацеленная на алгоритм хеш-таблицы, который обычно работает за O(1), но может быть обманут, чтобы работать за O(n).

Обмануть алгоритм хэш-таблицы очень просто: реализация хеш-таблицы обычно работает медленнее при хранении объектов, имеющих общее хэш-значение, это называется коллизией. Это медленнее, потому что два значения хранятся вместе, например, в связанном списке. Поэтому, если вы можете создать большое количество ключей, которые ВСЕ конфликтуют, вы заставляете хеш-таблицу хранить их все в связанном списке, что чертовски медленно и потребляет много ресурсов ЦП.

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

person Julien Palard    schedule 13.07.2014