Подтвердить что ты не робот

Является ли bcrypt жизнеспособным для больших веб-сайтов?

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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