Является ли bcrypt жизнеспособным для больших веб-сайтов? - PullRequest
12 голосов
/ 14 марта 2012

Я уже некоторое время участвую в bcrypt, но у меня возникают проблемы с ответом на простой вопрос.

Представьте, что у меня есть достаточно успешный веб-сайт в США ... около 100 000 активныхпользователи, каждый из которых имеет шаблоны активности, требующие в среднем от 2 до 3 попыток аутентификации в течение типичного американского рабочего дня (12 часов с учетом часовых поясов).Это 250 000 запросов на аутентификацию в день, или около 5,8 аутентификаций в секунду.

Одна из замечательных особенностей bcrypt заключается в том, что вы настраиваете его, чтобы со временем он масштабировался, как аппаратное обеспечение, чтобы опередить взломщиков.Обычная настройка состоит в том, чтобы заставить его занимать чуть более 1/10 секунды на создание хеша ... допустим, я получаю его на .173 секунды на хеш.Я выбрал это число, потому что так получилось, что 173 секунды на хеш работают примерно до 5,8 хешей в секунду.Другими словами, мой гипотетический веб-сервер буквально тратит все свое время, ничего не делая, кроме аутентификации пользователей.Не берите в голову какую-либо полезную работу.

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

Как я вижу это сейчас, это одна из тех проблем, которые было бы неплохо иметь, и bcryptвсе еще стоит потраченных усилий.Но я хотел бы знать, упускаю ли я что-то здесь очевидное?Что-то тонкое?Или кто-то может на самом деле указать на известный веб-сайт, на котором запущена целая ферма серверов только для части аутентификации их сайта?

1 Ответ

5 голосов
/ 14 марта 2012

Даже если вы настроите bcrypt на, скажем, 1/1000 секунды, это все равно будет немного медленнее, чем простое хеширование & mdash; быстрый и грязный тест Perl говорит, что мой не очень новый компьютер может вычислять около 300 000 хэшей SHA-256 в секунду.

Да, разница между 1000 и 300 000 составляет всего около 8 бит, но это все равно 8 битов запаса прочности, которых у вас не было бы иначе, и эта разница будет только увеличиваться по мере ускорения процессоров.

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

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