This post is a German translation of the blogpost ‘Preventing Sybil attacks’ by Dr. Lars Brünjes.
Sybil Attacken verhindern
Aufbauend auf dem Beitrag von Professor Aggelos Kiayias, dem Chefwissenschaftler der IOHK, von letzter Woche, möchte ich diesen Beitrag nutzen, um eine weitere Entscheidung zu diskutieren, die wir bei der Gestaltung des Belohnungsmechanismus von Cardano getroffen haben. Der Mechanismus soll den Beteiligten einen Anreiz bieten, "das Richtige zu tun" und sich so am Protokoll zu beteiligen, dass ein reibungsloser, effizienter und sicherer Betrieb gewährleistet ist.
Wie letzte Woche erläutert wurde, folgt der Belohnungsmechanismus, um Fairness und Dezentralisierung zu gewährleisten, drei Prinzipien:
- Die Gesamtausgaben für einen Stakeholder-Pool sollten proportional zur Größe des Pools sein, bis der Pool die Sättigung erreicht hat.
- Die Belohnungen innerhalb eines Pools sollten proportional zum Einsatz eines Poolmitglieds sein 3. Poolbetreiber sollten für ihre Bemühungen eine höhere Belohnung erhalten.
Eine notwendige Modifikation betrifft die Poolleistung. Wenn ein Poolbetreiber seine "Pflichten" vernachlässigt und nicht die Blöcke erstellt, die er erstellen soll, werden die Pool-Belohnungen entsprechend reduziert.
Nehmen wir das Beispiel von Alice und Bob, die Pools gleicher Größe betreiben. Beide werden als Slot-Leader mit je 100 Slots gewählt. Alice schafft pflichtbewusst alle 100 Blöcke in den 100 Slots, die sie führt, während Bob 20 Slots verpasst und nur 80 Blöcke erstellt. In diesem Fall erhält Alice’s Pool volle Belohnungen, während Bob’s Pool weniger erhält. Wie viel weniger genau wird durch einen Parameter gesteuert.
Die Herausforderung
In diesem Beitrag möchte ich mich auf eine weitere mögliche Herausforderung für die Cardano-Prinzipien konzentrieren und erklären, wie wir uns entschieden haben, sie zu überwinden. Die Herausforderung wurde Ende der letzten Woche erwähnt: Wie können wir verhindern, dass eine Person Dutzende oder gar Hunderte von kleinen Pools registriert?
Beachten Sie, dass es für sehr große Interessengruppen völlig legitim ist, ihren Anteil in mehrere Pools aufzuteilen, um einen angemessenen Anteil an den Belohnungen zu erhalten.
Beispiel einer Sybil Attacke
Nehmen wir an, wir streben 100 Pools an und setzen daher eine Obergrenze von 1% der gesamten Umlaufmenge. Nehmen wir weiter an, dass Alice einen Anteil von 3,6% hält. Wenn Alice ihren Einsatz nicht aufteilt, erhält sie nur 1% der gesamten Belohnungen. Wenn Alice jedoch ihren Anteil aufteilt und 0,9% in vier verschiedene Pools investiert, wird ihre Belohnung aus jedem Pool nicht begrenzt.
Die Herausforderung besteht darin, dass ein kleiner, aber hinterhältiger Stakeholder eine große Anzahl von Pools (möglicherweise unter angenommenen Identitäten) bilden kann. Wenn es ihm gelingt, Menschen für diese Pools zu gewinnen (z.B. indem er über seine Kosten lügt und den Poolmitgliedern hohe Belohnungen verspricht), könnte er am Ende eine Mehrheitsbeteiligung mit sehr geringem persönlichen Anteil am System kontrollieren. Wie konnte das passieren?
Stellen wir uns vor, es gibt etwa 100 legitime, ehrliche Pools. Wenn wir uns nicht davor hüten würden, könnte ein bösartiger Spieler relativ billig 100, 200 oder sogar 500 Pools unter falschen Namen erstellen und niedrige Betriebskosten und eine niedrige Gewinnmarge geltend machen. Viele ehrliche Interessenvertreter wären dann versucht, nicht mehr an einen der 100 ehrlichen Pools zu delegieren, sondern ihren Anteil an einen der thematisch gefährlichen Pools zu delegieren, der die Anzahl der ehrlichen Pools übersteigen könnte. Infolgedessen würde der Betreiber dieser bösartigen Pools für die Mehrheit der Blöcke zum Slot-Leader gewählt und so die Kontrolle über die Blockchain erlangt und sie für alle Arten von Unfug und kriminellen Aktivitäten, wie z.B. Doppelausgabenangriffe, geöffnet! Er müsste natürlich für den Betrieb von Hunderten von Knoten bezahlen, aber diese Kosten verblassen im Vergleich zu den Kosten, die er für den Erwerb einer Mehrheitsbeteiligung käuflich erwerben müsste, die in einem Bereich von Hunderten von Millionen bis Milliarden Dollar liegen würde.
Das wäre katastrophal, denn die Sicherheit eines Proof-of-Stake-Systems wie Cardano beruht auf der Idee, dass Menschen mit viel Einfluss auf das System viel Einfluss haben sollten und daher allen Grund haben, das System reibungslos zu betreiben.
Unsere Lösung
Diese Art von Angriff, bei dem der Angreifer viele Identitäten annimmt, wird als Sybil-Attacke bezeichnet, benannt nach dem Roman ‚Sybil‘ von Flora Rheta aus dem Jahre 1973. Dieser handelt von einer Frau, die an einer multiplen Persönlichkeitsstörung leidet.
Wie können wir Sybil-Attacken verhindern?
Eine Idee könnte sein, die Pool-Registrierung sehr teuer zu machen. Aber um Angriffe zu verhindern, müssten solche Gebühren extrem hoch sein und würden ehrliche Menschen daran hindern, legitime Pools zu bilden. Eine solche Hürde wäre schlecht für die Dezentralisierung; wir wollen die Mitglieder unserer Gemeinschaft ermutigen, ihre eigenen Pools zu gründen und ihren Eintritt nicht zu behindern! Es muss eine bescheidene Gebühr erhoben werden, aus dem einfachen Grund, dass jedes Registrierungszertifikat in der Blockchain gespeichert werden muss und Ressourcen verbraucht, die bezahlt werden müssen.
Unsere spieltheoretische Analyse führte uns zu einer anderen Lösung, die es den "kleinen" Stakeholdern nicht verbietet, ihre eigenen Pools zu gründen, indem sie nicht mit unerschwinglich hohen Gebühren und einem hohen finanziellen Risiko belasten.
Bei der Registrierung eines Pools kann der Poolbetreiber beschließen, einen Teil seines persönlichen Anteils an den Pool zu "verpfänden". Mehr zu verpfänden, wird die potenziellen Belohnungen seines Pools leicht erhöhen.
Das bedeutet, dass Pools, deren Betreiber viel Beteiligung zugesagt haben, etwas attraktiver werden. Wenn ein Angreifer also Dutzende von Pools schaffen will, muss er seinen persönlichen Anteil in viele Teile aufteilen, was alle seine vielen Pools weniger attraktiv macht, wodurch die Leute stattdessen in Pools delegieren werden, die von ehrlichen Interessengruppen betrieben werden.
Mit anderen Worten, ein Angreifer, der eine große Anzahl von Pools erstellt, muss seinen „verpfändeten“ Einsatz auf seine Pools stark streuen. Er kann nicht all seine vielen Pools attraktiv machen, weil er seinen Anteil in zu viele Teile zerlegen muss. Ehrliche Poolbetreiber bündeln ihren gesamten persönlichen Einsatz in einem Pool und haben so eine viel bessere Chance, Mitglieder zu gewinnen.
Der Grad des Einflusses, den die verpfändete Beteiligung eines Poolbetreibers auf die Poolbelohnungen hat, kann durch einen konfigurierbaren Parameter verfeinert werden. Als ein Haufen Mathematiker mit wenig Phantasie nannten wir diesen Parameter “a0”. (Ein Kollege schlug den griechischen Buchstaben phi vor, weil er wie ein Teil des Gesangs des bösen Riesen in ‚Jack and the Beanstalk‘ - ‘Fee-fo-fi-fum’ - klingt und wir versuchen, schädliche Stakeholder-Giganten abzuwehren. Wir wären jedem Mitglied der Community dankbar, der eine Idee für eine passendere Bezeichnung vorbringt.
Das Setzen des Parameters a0 auf den Wert Null würde bedeuten: Pool-Belohnungen hängen nicht vom verpfändeten Einsatz des Betreibers ab. Die Auswahl eines hohen Wertes für a0 würde zu einem starken Vorteil für Poolbetreiber führen, die ihren Pools viel Einsatz zusichern.
Wir haben hier einen klassischen Kompromiss, zwischen Fairness und Chancengleichheit auf der einen Seite (a0 = 0) und Sicherheit und Sybil-Angriffsschutz auf der anderen Seite (a0 ist groß).
Um die Wirkung von a0 zu demonstrieren, betrachten wir uns die drei Diagramme in Abbildung 1.
Abbildung 1: Wie sich der verpfändete Einsatz eines Poolbetreibers auf die Pool-Belohnungen auswirkt.
In den Grafiken streben wir zehn Pools an, so dass die Belohnungen auf 10% begrenzt sind. Die Größe des Pool-Einsatzes wird auf der horizontalen Achse dargestellt und die vertikale Achse zeigt die Pool-Belohnungen. Jede Grafik stellt drei hypothetische Pools dar, in denen die Betreiber 0%, 5% bzw. 8% an ihre Pools verpfändet haben (der Pfandbetrag wird in den Grafiken s genannt).*
Die erste Grafik verwendet a0 = 0, so dass der verpfändete Einsatz keinen Einfluss auf die Pool-Belohnungen hat, und die drei Pools verhalten sich genauso: Die Belohnungen steigen mit zunehmender Poolgröße weiter, bis sie gekappt sind, wenn der Pool 10% des Einsatzes kontrolliert.*
In der zweiten Grafik sehen wir den Effekt von a0 = 0,1. Die drei Pools sind vor allem bei kleinen Größen noch ähnlich, aber sie sind bei leicht unterschiedlichen Werten gekappt. Pools mit mehr verpfändeten Einsätzen erhalten etwas höhere Belohnungen, wenn sie größer werden.*
Schließlich zeigt die dritte Grafik die Wirkung von a0 = 0,5. Es ist ähnlich wie das zweite Diagramm, aber die Unterschiede zwischen den drei Pools sind stärker ausgeprägt. Wir müssen noch einen "guten" Wert für a0 wählen. Diese Wahl hängt von Faktoren wie den zu erwartenden Betriebskosten, der Gesamtentlohnung und am wichtigsten, vom gewünschten Sicherheitsniveau ab.
Wir werden a0 so klein wie möglich halten wollen, aber gleichzeitig ein hohes Maß an Sicherheit gegen Sybil-Angriffe garantieren.
Auf jeden Fall ist es wichtig zu bedenken, dass die Einführung von a0 die "kleinen" Stakeholder nicht daran hindert, erfolgreiche Pools zu betreiben, denn jemand mit einer großartigen Idee kann immer die Gemeinschaft erreichen, andere überzeugen und sie einladen, zusammenzuarbeiten und Ressourcen zu bündeln, um sich dem Pool zu verpflichten. Am Ende wird es wichtiger sein, einen soliden, zuverlässigen Pool zu betreiben und eng mit der Community zusammenzuarbeiten, als nur eine große Beteiligung an der gesamten Umlaufmenge zu besitzen.
Wir haben auch darüber nachgedacht, die Abhängigkeit der Belohnungen vom Anteil des Poolleiters durch ein Reputationssystem zu ersetzen. Dies würde es Menschen mit geringem Einsatz ermöglichen, ihre Pools attraktiver zu gestalten, indem sie ihre Pools über einen langen Zeitraum zuverlässig und effizient betreiben. Dies wird nicht in der ersten Iteration implementiert, sondern liegt für zukünftige Versionen von Cardano auf dem Tisch.