Pseudo-Node wird hier auf Reddits /r/Bitcoin diskutiert
Im Wesentlichen funktioniert es, um Anrufe von verbundenen Knoten auf zufällige Weise weiterzuleiten.
Dies war ein Experiment, wie einfach vollständige Knoten "gefälscht" werden können. Fazit: ganz einfach.
Eine Proof-of-Concept-Implementierung (& Dokumentation) ist hier verfügbar:
https://github.com/basil00/PseudoNode
Für das Netzwerk erscheint PseudoNode wie ein normaler vollständiger Knoten. Es leitet Invs, TXs, Blöcke usw. weiter, genau wie ein vollständiger Knoten. In Wirklichkeit ist PseudoNode eine Art P2P-Proxy-Server. Es leitet lediglich alle Anfragen weiter, die es nicht verarbeiten kann (getdata, getheaders usw.) an benachbarte Knoten. Weitere Informationen finden Sie unter den obigen Links.
PseudoNode verwendet keine Festplatte (kein Blockchain-Download erforderlich), verwendet wenig CPU/RAM und verbraucht weniger Netzwerkressourcen (Bandbreite) als ein normaler vollständiger Knoten. Ein PseudoNode kann sich innerhalb von Sekunden mit dem Netzwerk „synchronisieren“.
PseudoNode demonstriert einige der Probleme mit incentivierten Full Nodes (einschließlich des „Bitnodes Incentive Program“). Es ist schwierig zu beweisen, dass ein Full Node wirklich ein Full Node ist.
Die Implementierung hat meistens Neuheits-/Proof-of-Concept-Wert. Es ist nicht als „Produktions“-Software gedacht.
Und die FAQ :
Schadet PseudoNode dem Netzwerk?
Kurze Antwort: Nein.
Lange Antwort: Es sei denn, die Anzahl der PseudoNodes übersteigt die Anzahl der normalen Full Nodes deutlich. Andernfalls, wenn PseudoNode eine Verbindung zu mindestens einigen guten Knoten herstellen kann (Standard 2), verhält sich PseudoNode wie ein normaler Knoten und trägt zur Netzwerkbandbreite bei.
Kann PseudoNode dazu führen, dass sich das Netzwerk verzweigt?
Nein, PseudoNode folgt einfach dem, was andere Knoten tun.
Kann PseudoNode Münzen stehlen?
NEIN.
Können PseudoNodes aus dem Netzwerk verbannt werden?
Nicht einfach. Anfragen, die PseudoNode nicht direkt bearbeiten kann, können jederzeit an andere (kooperative) Full Nodes weitergeleitet werden.
Dies erscheint mir in Bezug auf Angriffsvektoren unglaublich rücksichtslos. Offensichtlich muss ein Gleichgewicht zwischen den Vor- und Nachteilen bewertet werden, und da sein Wert "Neuheit" ist (vom Entwickler selbst beschrieben), scheinen mehrere Nachteile sofort offensichtlich:
new latency = original latency * performance decrease %
throttled latency
~> cutoff latency
).2 verwandte Fragen:
Eine große Anzahl miteinander verbundener Pseudo-Knoten macht das Starten eines Bandbreiten-Erschöpfungsangriffs viel einfacher. Bitcoin Core validiert die meisten Informationen, bevor er sie weiterleitet, aber Pseudo-Knoten validieren nicht – wenn Sie also einige Pseudo-Knoten miteinander verbinden können, ist es wahrscheinlich einfach, sie dazu zu bringen, Tonnen von Bandbreite zu verschwenden, indem sie Junk-Daten aneinander weiterleiten und dann zu ihren Kollegen.
Wenn beispielsweise 101 Pseudo-Knoten (PNs) miteinander verbunden sind, können Sie PN1 ein gültig aussehendes inv
Paket senden , das eine einzelne gefälschte Transaktion ankündigt (etwa 61 Byte plus TCP-Paket-Overhead). Jeder PN gibt das inv
für mindestens 6100 verschwendete Upload-Bytes weiter.
Aber diese PNs sind auch mit echten Knoten verbunden. Nehmen wir an, 500 echte Knoten, also beträgt die verschwendete PN-Upload-Bandbreite jetzt 36.600 Byte (plus TCP-Overhead) – alles, weil ein Angreifer eine einzelne 61-Byte-Datei erstellt hat inv
. Schlimmer noch, die realen Knoten werden die Transaktion mit einem 61-Byte- getdata
Paket anfordern , wodurch 30.500 Bytes Upload-Bandbreite der realen Knoten verschwendet werden.
Wenn der Angreifer einen ganzen Tag lang 1 MB gefälschte Daten pro Sekunde sendet, verwendet er 86 Gigabyte seiner eigenen Bandbreite, verschwendet aber 52 Terabyte an aggregierter PN-Upload-Bandbreite und möglicherweise 43 Terabyte an echter Knoten-Upload-Bandbreite.
(Je nachdem, wie die PNs geschrieben sind, verschwenden sie möglicherweise noch mehr Bandbreite, um das getdata
Paket weiterzuleiten.)
Vergleichen Sie dies mit den Kosten für die Ausführung des Angriffs gegen einen einzelnen echten Knoten. Für jedes 61-Byte inv
-Paket, das der Angreifer hochlädt, antwortet der echte Knoten mit dem Hochladen einer einzelnen 61-Byte- getdata
. Ein Bandbreitenauslastungsangriff gegen einen echten Knoten erfordert also ungefähr 1:1 an verschwendeter Bandbreite. Der reale Knoten leitet die nicht weiter, inv
bis er die Transaktion, auf die er sich bezieht, empfängt und validiert, sodass kein anderer Knoten Bandbreite verschwendet.
Gibt es machbare Eventualitäten im Protokoll, um zwischen einem PN und einem Knoten abzugrenzen? Würden beispielsweise verschiedene Bitcoincore-Versionen PNs identifizieren (oder eine einfache Änderung des Protokolls)?
Das Protokoll hat bereits die Vorstellung eines DoS-Ban-Scores, bei dem jeder Bitcoin Core-Knoten jedem seiner Peers einen privaten Score für jedes schlechte Verhalten zuweist, das sie ausführen. Sobald der DoS-Ban-Score für einen bestimmten Peer einen Schwellenwert erreicht (standardmäßig 100), trennt der Knoten die Verbindung zum Peer und verweigert für eine gewisse Zeit (standardmäßig einen Tag) weitere Verbindungen von seiner IP-Adresse. Zu schlechtem Verhalten gehört das Senden ungültiger Transaktionen und Blöcke.
Da PNs keine Daten validieren, leiten sie gerne ungültige Daten weiter. Wenn sie üblich werden, könnte sich jemand, der PNs trauern möchte, einfach mit einem beliebigen beworbenen Knoten verbinden und ihm einen Haufen ungültiger Daten senden. Wenn es sich um einen echten Full Node handelte, wird er die Verbindung trennen (DoS-Verbot). Wenn es ein PN wäre, würde es diese Daten an echte Full Nodes weiterleiten, was dazu führen würde, dass die echten Full Nodes sie per DoS verbieten. Dies würde den PN nutzlos machen und es dem Griefer ermöglichen, zu erkennen, welche Knoten PNs sind – der Griefer könnte dann (eine nicht authentifizierbare) Datenbank mit PN-IP-Adressen veröffentlichen.
Diese Methode funktioniert am besten bei Langzeit-PNs. Um die Ausführung kurzfristiger Sybil-Angriffe von vielen leichten PNs aus zu erschweren, könnte etwas wie Greg Maxwells Proof of Storage verwendet werden, um den Verbrauch verteilter Ressourcen kostspielig zu machen.
inv
Ich schätze, es ist immer noch einfach, einen PN zu erkennen, indem man einem Knoten fehlerhafte Daten sendet, wie z tx
.
Nick Odell
This seems incredibly reckless in terms of attack vectors
meinen Sie damit, dass Pseudo-Knoten anfällig für Angriffe wären, die der Bitcoin-Client nicht ist, oder dass der Autor nicht an alle Angriffe gedacht hat, die durchgeführt werden könnten?Zauberer von Ozzie
Basilikum