Я думаю, что следующий способ - это хороший способ полностью и полностью предотвратить ddos на моем сервере.Моя идея состоит в том, чтобы использовать тот же механизм майнинга криптовалюты (биткойн, с sha256 или любым другим хэшем) для предотвращения DDOS.
Примечание: я не предлагаю добывать криптовалюту как таковую.Я предлагаю использовать тот же механизм, чтобы избежать Сибил-атак .
Почему идея выглядит привлекательной для меня? Поскольку создание заминированного хеша стоит дорого, но проверкаэто супер-дешево.вычисление хеша стоит только один раз.
Что в двух словах означает майнинг? Это означает, что есть определенный кусок данных (скажем, идентификатор сеанса или токен JWT, чтоможет храниться на сервере в быстродействующем сервере NoSQL), а пользователь (или майнер в криптовалюте) должен создать хеш, который соответствует определенным критериям.Например, если мы используем SHA256, мы можем определить сложность как необходимое количество начальных нулей в 256-битном результирующем числе из хеша.Чем больше нулей, тем сложнее найти этот хэш.
Как это работает? : пользователь берет токен сеанса (который создается сервером) и объединяет его с nonce (число, используемое один раз)) и вычислите хеш в их интерфейсе (через WASM или иным образом с помощью javascript).Поскольку пользователь не может выполнить обратный инжиниринг SHA256, все, что он может сделать, это продолжать изменять одноразовый номер снова и снова и снова, пока он не найдет одноразовый номер, который создает хеш, удовлетворяющий требуемой сложности.1022 *
График показывает вероятность нахождения блока (нахождения правильного одноразового номера) в биткойнах, где трудность выбирается так, чтобы она составляла 10 минут.Изменение сложности сместит эту кривую и пропорционально изменит ее ширину.
Сколько времени потребуется серверу для проверки? Практически ноль.Просто рассчитайте хеш один раз и убедитесь, что он соответствует заданной сложности, и это дает пользователю право делать любые анонимные запросы.Обратите внимание, что ничего из этого не требует аутентификации с использованием имен пользователей и пароляЭто все анонимно.Прошедшие проверку пользователи не должны этого делать, поскольку их учетные данные могут быть заблокированы в системе.Это все для анонимных пользователей (и, возможно, злоумышленников).
Результат: Пользователь должен будет вычислить этот хэш с этой сложностью, прежде чем делать какие-либо запросы к серверу.Как только пользователь преуспевает, добытый токен аутентификации может быть сохранен в cookie для повторного использования пользователем.Если пользователь не сможет предоставить запрошенный хэш, его запрос на подключение будет внезапно отклонен, что предотвратит DDOS-атаку с использованием кукол-носителей.
ASIC сопротивление : использование SHA256 не рекомендуется, поскольку имеется специальное оборудование, которое может очень быстро рассчитать его, что приведет к возможной скоординированной атаке.Есть хэши, которые трудно распечатать на аппаратном уровне, такие как Scrypt и Argon2.
Выбор сложности : сложность может быть статической (что я бы не рекомендовал) или может бытьдинамически менять с нагрузкой на сеть.При высокой загрузке сети требуемая сложность возрастает.По сути, это действует как фильтр и защищает сеть во время DDOS-атак и никогда не влияет на пользователей, поскольку пользователям обычно не нужно ждать 10 секунд, чтобы создать сеанс.В случае действительно высокой нагрузки пользователи могут либо выбрать дорогой одноразовый номер, либо вернуться позже.Хостинговая компания также может принять решение о необходимости расширения инфраструктуры на основе графика сложности с течением времени.
Является ли это разумным планом защиты от DDOS в веб-сокете и аналогичных общедоступных протоколах?Я хотел бы реализовать это на моем сервере.