Исходные данные: есть онлайн видео редактор (веб клиент)
Проблема: пользователь может спамить псевдо пустыми видосами, захламляя место на сервере
Есть ли какие-либо недостатки у следующего подхода: взять хэш-функцию, расчёт которой довольно мал (чтобы валидировать на сервере безболезненно), для target'а Proof of wark'а выбрать такие подходящие хэши, чтобы для среднего пользователя расчёт был 5-15 секунд (оно будет считаться при сохранении отредактированного видоса, и при сохранении можно показать пользователю прогресс бар с хинтами мол идёт обработка видео (а не расчёт хэша :), поэтому по UX'у не должно ударить)), скажем, на 1'000'000 раундов (то есть вероятность подходящего хэша 1/1e6), а в качестве данных хэша взять:
unix дата (валидные будут считать только +- n времени) + данные видоса + id пользователя + nonce
Ну и собственно валидным считается только тот видос, хэш (что выше) удовлетворяет условию target'а
У подхода минусов возможно и нет, потому что PoW изначально как защита от спама и задумывался, а вот с реализацией могут быть проблемы, например антивирусы могут ругаться, принимая за майнер, ОС видя 100% загрузку процесса может начать прижимать ресурсы для приложения, для пользователя 10-15 секунд это очень большое время, а для атакующего 10-15 секунд CPU может быть вполне приемлемое время, смотря какие прибыли он из этого извлекает.
>например антивирусы могут ругаться, принимая за майнер, ОС видя 100% загрузку процесса
Неужели загрузка лишь одного ядра (а сейчас их в среднем 4-6) будет сочтена за майнер? В крайнем случае можно этот хэш оффлоадить, скажем на 20% и будет высчитываться те же 10-15 секунд, правда тогда атакующему потребуется 8-12 секунд
>для пользователя 10-15 секунд это очень большое время
Ну опять же, с точки зрение UX-а он будет думать, что там видос обрабатывается, не должно испортить ему настроение. В крайнем случае можно будет снизить до 3-4 секунд, исходя из подсчётов ниже, даже хэш, где таргет в среднем вычисляется 3 сек даст колоссальную защиту
>а для атакующего 10-15 секунд CPU может быть вполне приемлемое время
Я бы так и не сказал: если за те же 10 сек он мог сделать, скажем, по 3к (зависит от внешнего прокси сервера :) ) запросов в сек, что за 10 сек было бы 30к, то с PoW это было бы не 30к, а 10 * количество ядер атакующего пользователя (хотя тут надо найти такую хэш функцию, которая не очень на GPU вычисляется, то есть вообще нет смысла считать не GPU её, только CPU)
Вот подумал ещё, можно выдавать пользователю такой токен, на каждую загрузку/обновление видоса, что после каждого такого действия (загрузки/обновление видоса) сервер выдаёт ему новый токен (при этом токен хранится в бд на сервере), в таком случае:
• unix дата не нужна, так как повторно отправить видос с таким же хэшем не выйдет, потому что для n + 1 отправления потребуется токен, который был на предоставлен на n-ом отправлении, а его очевидно нет
• данные видео тоже не нужны, так как 1 post запрос - 1 новый токен
• id пользователя не нужен, так как 1 токен - 1 юзер
Итого, хэш:
токен + nonce
>Неужели загрузка лишь одного ядра (а сейчас их в среднем 4-6) будет сочтена за майнер?
да, я не думаю что антивирус вообще будет смотреть на загрузку процессора
> Я бы так и не сказал: если за те же 10 сек он мог сделать, скажем, по 3к (зависит от внешнего прокси сервера :) ) запросов в сек, что за 10 сек было бы 30к, то с PoW это было бы не 30к, а 10 * количество ядер атакующего
атакующий может купить практически безлимитные вычислительные мощности в облаке, и, в отличие от прокси, которые можно поблочить, с этим ничего не сделать. Лучше рассчитывать именно из стоимости ресурсов, которые атакующий тратит на атаку и прибыли, которую он получает от атаки, чем выше сальдо - тем более вероятны атаки.
>>Неужели загрузка лишь одного ядра (а сейчас их в среднем 4-6) будет сочтена за майнер?
да, я не думаю что антивирус вообще будет смотреть на загрузку процессора
что же за магия там тогда
>Лучше рассчитывать именно из стоимости ресурсов, которые атакующий тратит на атаку и прибыли, которую он получает от атаки, чем выше сальдо - тем более вероятны атаки.
ну вот как раз благодаря PoW можно и сделать атаку невыгодной