мотивация:
Рассмотрим доверяющих друг другу децентрализованной сети, где каждый узел имеет некоторую конечную емкость, как P2P сети Bitcoin, в с 100000 узлов.
Злоумышленник хочет, чтобы впитать всю емкость соединения из всех узлов, чтобы направить новые сверстникам злонамеренных узлов элементов управления злоумышленником. Каждый узел может выполнять действия, чтобы сделать использование ресурсов дорогостоящим. Например, каждый узел может отказаться от дополнительных соединений от отдельных IP-адресов или подсетей, требуя от атакующего, чтобы иметь доступ к большему количеству адресного пространства (дефицитный ресурс) для того, чтобы использовать, что емкость узлов. Или же они могут приоритет коллег, которые представляют собой дорогостоящую Bitcoin связь (например, Fidelity связи / SIN).
Проблемы есть в том, что эффективность атакующих весов с числом victims- например каждый IP или связь или что-то позволяет им использовать 100k sockets-, так как узлы не доверяющих друг другу и, таким образом, не могут сотрудничать, чтобы отклонить злоумышленник, который делает одно соединение на IP для каждого узла в сети.
Сеть может ответить, требуя дефицитный ресурс, например, замыкающийся военнопленный или плата Bitcoin. Но на-Коннект плата не очень хорошо согласуются с продолжающимся использованием ресурсов. Вы можете требовать периодической платы (например, прерывистый POW), но установка скорости, так что он не жалует нападающий (например, злоумышленник может не возражает тратить половину Bitcoin атаковать всю сеть, но обычные пользователи не могли потерпят 0,0001 / за подключение стоимости).
Кроме того, большинство схем POW подвержены огромные ускорений более эффективных реализации. Например. FPGA или даже реализация GPU будет чрезвычайно быстрее, чем Java, которая используется в большинстве клиентов. Жесткая функция памяти может сократить разрыв, но общая память жестких функций так же, как память трудно подтвердить, как они должны производить (хотя это можно сделать иначе), а также увеличение использования ресурсов серверов не является отличным способом, чтобы обратиться к ресурсу истощение атака.
То, что может быть полезным является функцией POW, которая хорошо отображает в виде использования ресурсов, что проведение соединения представляет и является также менее уязвима для ускорения специализированных нападающих.
Одна из идей, которые были предложены для этого будут иметь хранение жестких функции: Некоторые функции, что заставляет вас хранить кучу данных и продолжать доказывать, что вы по-прежнему хранить его в то время как соединение вверх. Создание один, который хранение трудно для клиента, но не сервер казался довольно сложным и ускользал количество людей в течение некоторого времени. Я имел предварительное представление, что потребовало полностью homorphic шифрования, чтобы создать последовательную функцию со свойством ловушки двери, чтобы случайный доступ ... который мог бы работал, но это было настолько сложным, что ни один никогда не будет возиться с ним. К счастью, я с тех пор было лучшее представление:
Доказательство системы хранения:
Возьмите немного быстро криптостойкую функцию псевдослучайной, например, как Blake2 или другой хэш-функции H ().
Сервер предоставляет клиенту случайное зерно и размер цели. Клиент повторно применяет H () в виде дерева, например, {Left, Right} = H (семя) и так далее, чтобы создать целевой размер ценность данных. Клиент принимает конечные листья этого древовидного псевдослучайной функции и добавляет их индекс и сортирует данные (или, что то же самое, сохраняет его в виде двоичного дерева поиска).
Затем сервер может периодически выбрать случайный индекс и выполнить log2 (размер) хэш-операцию, чтобы определить значение по этому индексу, а затем может бросить вызов клиента, чтобы обеспечить соответствующий индекс для этого значения.
Структурирование дерева функции означает, что вы можете дешево LookUp значение для данного показателя, но, глядя вверх индекс для заданного значения требует вычисления все это (и хранить его, если вы хотите, чтобы эффективно выполнять несколько подстановочных).
(Есть несколько возможных оптимизаций в клиенте, как общее сжатие префикса, но они лишь небольшие оптимизации, так как функция сильно псевдослучайных)
Таблица гигабайтная не будет слишком обременительной душевнобольна для многих типов клиентов, но требует терабайта злоумышленника использовать ресурсы на 1000 узлов. Такая схема может быть предложена необязательно для клиентов (например, если вы выполняете хранение доказательства вы получаете предпочтительный слот подключения) и поэтому он может обеспечить некоторое значение в принятии некоторых атаки малоэффективны.