Псевдоузел обсуждается здесь, на Reddit /r/Bitcoin.
По сути, он работает для ретрансляции вызовов от подключенных узлов случайным образом.
Это был эксперимент того, как легко можно «подделать» полные узлы. В заключение: очень легко.
Проверочная реализация концепции (и документация) доступна здесь:
https://github.com/basil00/Псевдоузел
В сети PseudoNode кажется обычным полным узлом. Он передает запросы, транзакции, блоки и т. д., как полный узел. На самом деле PseudoNode — это тип прокси-сервера p2p. Он просто пересылает любой запрос, который не может обработать (getdata, getheaders и т. д.), соседним узлам. Для получения дополнительной информации см. приведенные выше ссылки.
PseudoNode не использует диск (загрузка блокчейна не требуется), использует мало ЦП/ОЗУ и использует меньше сетевых ресурсов (пропускную способность), чем обычный полный узел. Псевдоузел может «синхронизироваться» с сетью в течение нескольких секунд.
PseudoNode демонстрирует некоторые проблемы с поощрительными полными узлами (включая «Программу поощрения битнодов»). Трудно доказать, что полный узел действительно является полным узлом.
Реализация в основном имеет ценность новизны/доказательства концепции. Оно не предназначено для использования в качестве «производственного» программного обеспечения.
И FAQ :
Вредит ли PseudoNode сети?
Краткий ответ: Нет.
Длинный ответ: нет, если количество псевдоузлов значительно превышает количество обычных полных узлов. В противном случае, если PseudoNode может подключиться хотя бы к нескольким хорошим узлам (по умолчанию 2), то PseudoNode будет действовать как обычный узел и будет способствовать пропускной способности сети.
Может ли PseudoNode вызвать разветвление сети?
Нет, PseudoNode просто следует тому, что делают другие узлы.
Может ли PseudoNode украсть монеты?
Нет.
Можно ли запретить псевдоузлы в сети?
Не легко. Запросы, которые PseudoNode не может обработать напрямую, всегда могут быть перенаправлены на другие (сотрудничающие) полные узлы.
Мне это кажется невероятно безрассудным с точки зрения векторов атаки. Очевидно, что баланс между плюсами и минусами требует оценки, и, поскольку его значение является «новизна» (самоописание разработчика), несколько минусов кажутся очевидными:
new latency = original latency * performance decrease %
throttled latency
~> cutoff latency
)2 связанных вопроса:
Большое количество взаимосвязанных псевдоузлов значительно упрощает запуск атаки с исчерпанием полосы пропускания. Bitcoin Core проверяет большую часть информации перед ее передачей, но псевдо-узлы не проверяют ее, поэтому, если вы можете соединить несколько псевдо-узлов вместе, вероятно, легко заставить их тратить тонны полосы пропускания, ретранслируя ненужные данные друг другу. а потом и своим сверстникам.
Например, если имеется 101 псевдоузел (PN), соединенных вместе, вы можете отправить PN1 действительно выглядящий inv
пакет , объявляющий об одной поддельной транзакции (около 61 байта плюс служебные данные TCP-пакета). Каждый PN ретранслирует это inv
как минимум на 6100 потерянных байтов загрузки.
Но эти PN также подключены к реальным узлам. Допустим, 500 реальных узлов, так что теперь потерянная пропускная способность загрузки PN составляет 36 600 байт (плюс накладные расходы TCP) — и все потому, что злоумышленник создал один 61-байтовый файл inv
. Хуже того, настоящие узлы будут запрашивать транзакцию, используя 61-байтовый getdata
пакет , что приведет к потере 30 500 байт пропускной способности загрузки реального узла.
Если злоумышленник отправляет 1 МБ поддельных данных в секунду в течение всего дня, он использует 86 гигабайт собственной пропускной способности, но теряет 52 терабайта совокупной пропускной способности загрузки PN и, возможно, 43 терабайта пропускной способности загрузки реального узла.
(В зависимости от того, как написаны PN, они могут тратить еще больше пропускной способности на ретрансляцию getdata
пакета.)
Сравните это со стоимостью проведения атаки на один реальный узел. На каждый 61-байтовый inv
пакет, загружаемый злоумышленником, реальный узел отвечает, загружая один 61-байтовый файл getdata
. Таким образом, атака с исчерпанием полосы пропускания против реального узла требует примерно 1:1 потерянной полосы пропускания. Реальный узел не ретранслирует дальше, inv
пока не получит и не подтвердит транзакцию, на которую он ссылается, поэтому никакой другой узел не теряет пропускную способность.
Есть ли в протоколе возможные непредвиденные обстоятельства для разграничения между PN и узлом? Например, будут ли разные версии Bitcoincore идентифицировать PN (или простую модификацию протокола)?
В протоколе уже есть понятие оценки блокировки DoS, в которой каждый узел Bitcoin Core присваивает частную оценку каждому из своих пиров за любое плохое поведение, которое они совершают. Как только оценка запрета DoS для определенного узла достигает порогового значения (по умолчанию 100), узел отключается от узла и отказывается от дальнейших подключений со своего IP-адреса на некоторое время (один день по умолчанию). Плохое поведение включает в себя отправку недопустимых транзакций и блоков.
Поскольку PN не проверяют данные, они с радостью передают неверные данные. Если они станут обычным явлением, кто-то, кто хочет навредить PN, может просто подключиться к любому объявленному узлу и отправить ему кучу неверных данных. Если это был настоящий полный узел, он отключится (DoS-бан). Если бы это был PN, он передал бы эти данные на настоящие полные узлы, в результате чего настоящие полные узлы запретили бы их DoS. Это сделало бы PN бесполезным и позволило бы гриферу определить, какие узлы являются PN — грифер мог бы затем опубликовать (неаутентифицируемую) базу данных IP-адресов PN.
Этот метод лучше всего работает против долгосрочных PN. Чтобы затруднить выполнение краткосрочных атак Sybil из множества облегченных PN, можно использовать что-то вроде доказательства хранилища Грега Максвелла, чтобы сделать потребление распределенных ресурсов дорогостоящим .
inv
сообщении tx
(способ, которым BitcoinJ отправляет транзакции в режиме SPV), а затем ожидая, не отключится ли узел.
Ник Оделл
This seems incredibly reckless in terms of attack vectors
вы имеете в виду, что псевдоузлы будут уязвимы для атак, которых нет у биткойн-клиента, или что автор не предусмотрел все возможные атаки?Волшебник Оззи
Бэзил