LINUX.ORG.RU

Хочу сделать регистрацию без email, посоветуйте вычислительную задачку для браузера

 


3

1

Возникла идея сделать один мелкий сайтик с юзерами, а там регистрация. В силу того, что я не понял, зачем мне для регистрации просить email, да ещё гонять трафик и снюхиваться со всякими email-серверами, то емейла/телефона при регистрации не будет.

Но минимально защититься от спама хочется. Самодельный генератор капчи есть, написанный на крестах, который генерит капчу за 1..2 мсек, но всё же простейший ДДОС с кучей запросов на эту капчу быстро ушатает генератор и исчерпает запасы качп в базе, а завязываться на доступность гугловых рекапч не хочется, да и лишние коннекты ваять, когда генератор уже есть. Неважно насколько он крутой, важно что нейросеть у атакующего тяжелее этого генератора.

Поэтому возникла идея поставить капчу позже, а сначала попросить юзера доказать, что он выдержал некий proof-of-time алгоритм (и возможно proof-of-memory с микрокодом типа как в RandomX, но похрен). Proof-of-time - это, короче, пруф того, что ты регался не менее 5 секунд. Реализуется как 5 обменов с браузерным JS, между которыми не может быть менее секунды, причём сервер не утруждает себя хранением состояния, чтобы выдерживать SYN-flood-атаки (запустили регистрацию 100500 раз и свалили).

Посылаем браузеру структуру данных, с прошитым в ней миллисекундным timestamp, изменить который без разрушения структуры невозможно, просим прислать нам структуру обратно через секунду и забываем про факт посылки. Когда через секунду браузер присылает эту структуру назад, мы смотрим на прошитый в ней timestamp и понимаем, прошло ли достаточно времени для её возврата нам или юзер читерит. Далее генерим аналогичную структуру для второго состояния и так далее, пока не получим возврат на последнюю посылку. То есть, нужен алгоритм генерации такой структуры данных, валидность которой наступает в будущем.

На экране юзера такая регистрация будет выглядеть как прогресс-бар, который тупо доходит до 100% за 5 секунд.

Простейший вариант - тупо зашифровать своим секретным ключом AES128 строчку вида <256-bit-random-salt> и на входе расшифровывать обратно, сверяя timestamp. Но может есть чё попроще или наоборот поумнее, понадёжнее или «так же надёжно, но вычислительно сильно дешевле»?

А ещё были такие идеи на тему proof-of-memory: генерим на сервере 512 байт данных и запоминаем, а юзеру отправляем 1 МБ, где в случайных местах замешаны эти 512 байт. Потом посылаем юзеру 10 запросов в рандомные места этого 1 МБ куска, ответы на большинство из которых нас не волнуют. Пара запросов, которые попадают в «наши данные» мы проверяем, но юзер вынужден помнить весь 1 МБ, не зная где среди них лежат наши данные. Потом я прочитал про RandomX и понял, что это содомия, а нормальные чуваки просто генерят какой-то псевдомашинный код на тему перемещения блоков в памяти, который (код) юзер физически состоянии исполнить только имея, скажем, 4 гига оперативы - короче надо ещё про это почитать! Жаба конечно задушит каждому дебилу по 1 МБ рассылать. Нужно, чтобы псевдокод для исполнения у жертвы не мог вернуть верный результат без использования настоящих 16 мегабайт памяти, но чтобы результат работы кода был мизерным и был известен серверу прямо в момент генерации этого рандомного дьявольского псевдокода.



Последнее исправление: igloev (всего исправлений: 4)

Посылаем браузеру структуру данных, с прошитым в ней миллисекундным timestamp

Это шифрованная кука. На уровне сессии решается.

vvn_black ★★★★★
()
Последнее исправление: vvn_black (всего исправлений: 1)
Ответ на: комментарий от vvn_black

Это шифрованная кука.

Сей вариант описан, да. Видимо единственный нормальный?

igloev
() автор топика

Для спама достаточно одного аккаунта. С каким-то бредом про 5 секунд он будет зарегистрирован за 5 секунд, с каким-то бредом про память он будет зарегистрирован за 0 секунд, зато у кого-то не получится зарегистрироваться с телефона. Может нормально сделать, просто на вопрос ответить в качестве капчи и/или премодерация для первого сообщения.

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

Спам с 1 аккаунта не взлетит при наличии кармы (админской - как на реддите) и лимитов на частоту постинга.

igloev
() автор топика

псевдомашинный код на тему перемещения блоков в памяти, который (код) юзер физически состоянии исполнить только имея, скажем, 4 гига оперативы

Это конечно здорово, но как на сервере ты узнаешь результат, если его физически нельзя вычислить без насилования памяти? Что-то тут не сходится.

Как вариант можно взять какое-то рекуррентное вычисление, а на сервере считать по нерекуррентной формуле. Но это же всё ломается при большом желании. ИМХО тот же proof-of-memory вид сбоку, только слабее, т.к. пользователь видит алгоритм генерации.

no-such-file ★★★★★
()

Вот один из примеров proof of work, но балансировать его сложность - сама по себе сложная задача.

anonymous
()

Неужели капчи-хренапчи и прочие прогресс-бары для пользователя лучше, чем тупо ввести email?

hobbit ★★★★★
()

Первым вариантом я бы попробовал бы прикрутить генерацию биткоинов при регистрации(какой-нибудь редкий вариант который не погенеришь на GPU), как никак последние тренды. Нагенерил нужное количество валюты получил регистрацию, тут даже ботам рады если будут окупаться =).

Вторым и более реальным способом это какая-то хеш функция или даже набор этих хеш функций, генеришь число/строку на сервере, прогоняешь через хеш/хеши и отдаешь клиенту хеш и алгоритм генерации. Клиент должен перебором найти число которому соответствует хеш и отправить это число не позже определенного промежутка времени на сервер. На сервере сверяешь число и время и все. Пары число-хеш вообще можно заранее генерировать и в промежутки простоя. Сложность алгоритма подбираешь количеством итераций хеша.
Тут можно пойти еще дальше и генерировать алгоритмы генераций, чтоб еще больше усложнить если вдруг кто-то решит оптимизировать брутфорс.

V1KT0P ★★
()

пруф того, что ты регался не менее 5 секунд

За сутки так сможет нарегаться 17280 ботов.

static_lab ★★★★★
()

Майнинг FraudCoin карандашом на салфетке уже предлагали?

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

Неужели капчи-хренапчи и прочие прогресс-бары для пользователя лучше, чем тупо ввести email?

Очевидно да.

igloev
() автор топика
Ответ на: комментарий от V1KT0P

Клиент должен перебором найти число которому соответствует хеш и отправить это число не позже определенного промежутка времени на сервер.

Не взлетит, потому что юзеров с тормозным процессором z80 нельзя отсекать.

igloev
() автор топика

А как насчет резать ддос инструментами, для этого предназначенными (cloudflare, fail2ban) а не изобретать сомнительные велосипеды на JS?

anonymous
()

Нагородил прикольно, но:

  • Решать proof of work в каком нибудь облаке дешевле, чем решать капчу
  • Таймаут бесполезен – какиру пофиг, послать 1000 запросов и получить 1000 учёток сразу или послать 1000 запросов и получить 1000 учёток через пять секунд
anonymous
()
Ответ на: комментарий от anonymous

Решать proof of work в каком нибудь облаке дешевле, чем решать капчу

Можно сделать proof of work, который будет дороже чем капча, но для нормальных человеков регистрация будет непомерно долгой.

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

Не взлетит, потому что юзеров с тормозным процессором z80 нельзя отсекать.

Если тебя не устраивает проверка через вычисления, тогда просто сделай интеллектуальные задачи типа:

  • Исключить лишний предмет из списка слов или на картинке.
  • Дана карта, позиция и описание перемещения по карте, назвать пункт назначения.
  • Ребусы разные.
  • Задание требующие на основе прочитанного выбрать ответ.

Да много чего можно придумать.
А сделать такую вычислительную задачу которая будет быстро работать на слабом компе но при этом не будет параллелиться на мощном невозможно.
Лучше сделай гибкую настройку сложности проверки через вычисления, боты все равно будут лезть с определенного списка адресов вот для этих адресов повышай сложность.
Можно комбинировать, если слабый комп то пусть вместо проверки через вычисления будет интеллектуальная проверка.

Если стоит задача сделать «дружелюбную» регистрацию то лучших вариантов защиты от ботов чем SMS/белый список e-mail адресов/логин через соцсети еще не придумали.
Если стоит задача огородиться от ботов и на «дружелюбность» плевать, то можно установить денежную стену. Например через подтверждение владением домена второго уровня из белого списка доменов первого уровня. Тут каждая регистрация бота будет выливаться в стоимость домена, при чем нижняя стоимость ограничивается белым списком разрешенных доменов.

V1KT0P ★★
()

Возникла идея ты опять выходишь на связь? вот тебе реальная идея: заведи блог и сри туда.

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

Ещё можно почитать его прошлые треды

Спасибо мы почитали, треды норм, нас всё в них устроило.

igloev
() автор топика
Ответ на: комментарий от no-such-file

Это конечно здорово, но как на сервере ты узнаешь результат, если его физически нельзя вычислить без насилования памяти?

Например так же, как я узнаю ответ на задачу о факторизации большого числа на 2 простых числа в случае, когда я сам эти 2 числа и придумал. Или например я хеширую строку длиной 64 байта через sha1 и даю тебе задачу узнать эту строку по sha1. То есть нужен алгоритм получения задачи из готового рандомного ответа.

igloev
() автор топика
Ответ на: комментарий от igloev

а нас нет. ты определись, чего ты хочешь – защититься от спама, от флуда, от DDOS’а или ещё одну криптовалюту изобрести?

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

а нас нет. Хорошо, что моё мнение здесь приоритетнее.

ты определись, чего ты хочешь – защититься от спама, от флуда, от DDOS’а или ещё одну криптовалюту изобрести?

Давай ты сам провернёшь этот процесс определения, я тебе доверяю.

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

Не спасет от пюпитра и зенопостера, у клиентов ресурсов больше.

Аргументов не увидел. Значит спасёт.

igloev
() автор топика
Ответ на: комментарий от igloev

Ты решаешь невыполнимую задачу, либо у тебя ресурсов должно быть очень много (но их нет, очевидно). Если что, мы разные анонимы (но похоже оба в теме).

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

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

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

Или Гуглу или клаудфларе расскажи как капчу делать или ботов лочить, ну. Беда в том, что у них очень много данных для анализа, а у тебя их нет.

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

Ты решаешь невыполнимую задачу, либо у тебя ресурсов должно быть очень много (но их нет, очевидно).

Аргументов нет как обычно, ок.

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

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

Никто пока не понял, что твоё воспалённое тело пытается тут нам донести.

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

Или Гуглу или клаудфларе расскажи как капчу делать или ботов лочить, ну.

Не увидел в своих требованиях «ботов лочить».

igloev
() автор топика

Тебе все это не нужно. Ты думаешь не в ту степь.

Тебе нужно строить хэширование пользователей на основе фингерпринтинга браузера (чтобы подделать браузерное окружение целиком нужно сильно заморочиться, и зачем это нужно если у тебя мелкий сайтик) и фингерпринтинга поведения пользователя на сайте - сотсавляешь инвариативные карты кликов\движений мыши\переходов\скорллов учитывая их не хаотичность и прочие параметры, и на основе этого делашеь выводы живой человек или нет. при этом весь алгоритм на сервереной стороне, а клиентский лишь собирает все воможные данные).

anonymous
()

То что ты описываешь это по сути попытка определить наличие юзера без собственно контакта с юзером. Это изначально провальная задача, если Неважно насколько он крутой, важно что нейросеть у атакующего тяжелее этого генератора. Забей на изобретение велосипеда и используй гугл капчу. Ну или сделай генератор математической капчи. Тип картинкой рендерить математические уравнения. Это не сложно в генерации и, вроде как, они еще не так хорошо взламываются как простые распознавания картинки. Правда, есть риск что у тебя отвалится часть пользователей, которые вообще не умеют в математику. Кароч, используй гугл капчу.

Aswed ★★★★★
()

Весь задор, подобного отказа от мэйла, заканчивается на хныканье «я забыл пароль»

никакие капчи, вопросы, задачки и стампы не помогают от ботоводов, рано или поздно, ботовод приходит лично и смотрит что ты нагородил, оптимизируя свой ботнет

про черные списки и их api уже неоднократно обсуждали на лоре, пожалуй это единственный способ выжить, если ты попал в спам базы

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

Весь задор, подобного отказа от мэйла, заканчивается на хныканье «я забыл пароль»

Многое зависит от позиционирования ресурса и её аудитории. Например для игрового сайта дополнительным барьером может стать игра-капча. Достаточно простой игры требующей 10-15 минут времени на прохождение и все боты просто отвалятся, разве что кто-то решит специализированный написать, но внести изменения в игру что усложнит бота проще чем противодействие этому в боте. А посетителям такая капча даже понравится если толково реализовать.
Тут нужно нащупывать баланс между стоимостью регистрации ботом аккаунта и доходом от использования такого аккаунта.

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

когда я сам эти 2 числа и придумал

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

хеширую строку длиной 64 байта через sha1 и даю тебе задачу узнать эту строку по sha1

Аналогично, берём словарь.

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

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 2)
Ответ на: комментарий от Aswed

То что ты описываешь это по сути попытка определить наличие юзера без собственно контакта с юзером.

Не совсем. Я лишь минимизирую затраты ресурсов на сервере на регистрацию так, чтобы юзер тратил их больше чем я.

igloev
() автор топика
Ответ на: комментарий от no-such-file

Аналогично, берём словарь.

Словарь всех 64 байтных строк ты устанешь хранить даже если ты АНБ.

igloev
() автор топика
Ответ на: комментарий от Morin

Весь задор, подобного отказа от мэйла, заканчивается на хныканье «я забыл пароль»

Неудачники идут лесом. А серьёзно: я прошу юзера ставить в профиле main-пароль и пару дополнительных. А если у него почту угонят, а если телефон, а если… Бегать за каждой разявой не будем. Потерял пароль - ну соси брансбойт, регай новый акк.

igloev
() автор топика
Ответ на: комментарий от igloev

ты устанешь хранить даже если ты АНБ.

Искать 64-байтную строку по хэшу без словаря ты устанешь ещё быстрее. Клиент как бы задачу должен мочь решить… Если он может перебрать все варианты в разумное время, то он может их и хранить.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 2)
Ответ на: комментарий от Morin

так и вижу статистику посещений подобного ресурса :) вот прям стремящейся к нулю

На самом деле это зависит от специфики ресурса, лимитировать и усложнять регистрацию иногда может принести хорошие плоды. Взять как пример раньше на habr надо было статью достойную написать или по инвайту регистрироваться.
Например для сайта/форума радиоэлектронщиков можно отсеивать левых людей а не просто ботов на основе решения капчи требующих минимальных знаний радиоэлектроники.

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

инвайты давно провалились, всегда скатывается в тусу маргиналов, притом весьма посредственных.

капчи - полумеры, прошибаются кожаными мешками за деньги, или нейро за большие деньги

я не теоретизирую, это факты полученные почти за два десятка лет

и да, не надо тыкать в рекапчу два, прошибается как и любая другая, чтоб не мучать себя гугло аками, давно сменил на обычный генератор картинок, нихрена не поменялось в плане отлова ботов

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

капчи - полумеры, прошибаются кожаными мешками за деньги, или нейро за большие деньги

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

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

да нет никаких малоизвестных сайтов) понимаешь, НЕТ

есть ботнеты, которым насрать где срать :) есть куча азиатов, гадающих капчу, есть нейросети гадающие капчу по подписке, есть самописки гадающие капчу и им всем фиолетово откуда эта капча к ним приплыла

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

Очевидно да.

Так же плохо как и эмейл.

Тебе надо спамеров отсекать не на уровне регистрации, а на уровне получения прав на постинг, например сделать премодерацию на несколько первых сообщений и польователь с стандартными фразами спамеров просто отсекать, высылая им список спамерских фраз(спамеру этот список побоку, а реальный человек простоне будет использовать те или иные буквосочетания.

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

Так же плохо как и эмейл.

Почему «минус одно движение» - это «так же»?

Тебе надо спамеров отсекать не на уровне регистрации, а на уровне получения прав на постинг,

И как рега без мыла к этому относится?

igloev
() автор топика
Ответ на: комментарий от Morin

инвайты давно провалились, всегда скатывается в тусу маргиналов, притом весьма посредственных.

Дико плюсую.

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