LINUX.ORG.RU

Изобрёл алгоритм защиты от флуда. Покритикуйте.

 


1

2

Велосипед скорее всего.

Алгоритм повышения стоимости операций для клиента с сохранением низкой стоимости для сервера.

Пример где это нужно: хочется зарегать учётную запись без sms, email и т.п., но надо избежать флуда регистраций.

  1. В начале процедуры регистрации генерим на сервере 64КБ рандома.
  2. Запоминаем 8 случайных кусков по 8 байт из этих 64кб рандома и смещения до них.
  3. Отправляем юзеру данные 64кб и забываем эти 64 кб.
  4. Далее с интервалом в секунду посылаем юзеру запросы «дай 8 байт со смещения N», где очередное N - какое-то из запомненных нами на шаге (2).
  5. Юзер не знает что мы запомнили на шаге (2) и, таким образом, что сервер может спросить и вынужден хранить всё.
  6. Серверу нужно хранить только 8*8 байт.
  7. «с интервалом в секунду» - чтобы инициатива о длительности процедуры была полностью в руках сервера. Если клиент ответил раньше - отпинываем его совсем.

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

Хочется узнать:

  1. Как называется велосипед, который я только что изобрёл, у нормальных людей.
  2. Что можно улучшить.
  3. Альтернативы этому подходу.

Алгоритм повышения стоимости операций для клиента с сохранением низкой стоимости для сервера.

но по факту всё наоборот, генерить 64кб настоящего рандома на каждого клиента это очень затратная операция без аппаратного генератора, а клиенту хранить 64кб ничего не стоит

Harald ★★★★★
()
Ответ на: комментарий от Harald

генерить 64кб настоящего рандома

Что вы привязались к этому «настоящему рандому»? Вроде ТС об этом не педалировал.

vodz ★★★★★
()
Ответ на: комментарий от Harald

Ненастоящий рандом можно предсказать

предскажы :D

var iv = [Math.random(), Math.random(), Math.random()];
var a = 4;
var x = iv[0];
var xn = () => x = a * x * (1 - x);
var seq = Array(30).fill().map(xn);
var secret = [iv, seq[Math.trunc(iv[1] * seq.length)], seq[Math.trunc(iv[1] * seq.length)]]

console.log('lob:', seq);
console.log('q1', Math.trunc(iv[1] * seq.length));
console.log('q2', Math.trunc(iv[2] * seq.length));
drsm ★★
()
Последнее исправление: drsm (всего исправлений: 1)
11 февраля 2021 г.
Ответ на: комментарий от Harald

Можно генерировать в фоне и сохранять в какой-нибудь Redis для дальнейшего использования.

anonymous
()
Ответ на: комментарий от Harald

Я сейчас сгенерирую на основе Пи uuid и дам тебе, через сколько лет ты скажешь мне какой uuid будет следующим? )))))

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.