Vielen Dank an Marius van der Wijden für die Erstellung des Testfalls und des Statetests und für die Unterstützung des FRU -Teams, das das Problem bestätigt. Auch ein großes Lob an das Besu -Team, das EF -Sicherheitsteam und Kevaundray Wedderburn. Darüber hinaus dank Justin Traglia, Marius van der Wijden, Benedict Wagner und Kevaundray Wedderburn zum Korrekturlesen. Wenn Sie andere Fragen/Kommentare haben, finden Sie mich auf Twitter unter @Asanso
Tl; Dr.: Besu Ethereum Execution Client Version 25.2.2 litt unter a Konsensproblem im Zusammenhang mit dem EIP-196/EIP-197 Vorkompilierter Vertragsbehandlung für die elliptische Kurve ALT_BN128 (AKA BN254). Das Problem wurde in der Veröffentlichung behoben 25.3.0.
Hier ist der vollständige CVE -Bericht.
NB: Ein Teil dieses Beitrags erfordert einige Kenntnisse über elliptische Kurven (Kryptographie).
Einführung
Der BN254 Kurve (auch bekannt als ALT_BN128) ist eine elliptische Kurve, die in Ethereum für kryptografische Operationen verwendet wird. Es unterstützt Operationen wie die Kryptographie der elliptischen Kurve, wodurch sie für verschiedene Ethereum -Merkmale von entscheidender Bedeutung ist. Vor EIP-2537 und die jüngste Pectra -Veröffentlichung, BN254 war die einzige Paarungskurve, die von der Virtual Machine (EVM) von Ethereum unterstützt wurde. EIP-196 Und EIP-197 Definieren Sie Vorkompilierverträge für eine effiziente Berechnung dieser Kurve. Für weitere Details zu BN254Sie können lesen Hier.
Eine signifikante Sicherheitsanfälligkeit in der Kryptographie der elliptischen Kurve ist die Ungültiger Kurvenangriffzuerst in das Papier eingeführt “Differentiale Fehlerangriffe auf elliptische Kurven -Kryptosysteme”. Dieser Angriff zielt auf die Verwendung von Punkten ab, die nicht auf der richtigen elliptischen Kurve liegen, was zu potenziellen Sicherheitsproblemen in kryptografischen Protokollen führt. Für nicht primäre Order-Kurven (wie diejenigen, die in der pairing-basierten Kryptographie und in erscheinen für BN254) Es ist besonders wichtig, dass der Punkt ist in der richtigen Untergruppe. Wenn der Punkt nicht zur korrekten Untergruppe gehört, kann der kryptografische Betrieb manipuliert werden, was möglicherweise die Sicherheit von Systemen beeinträchtigt, die sich auf die Kryptographie der elliptischen Kurve stützen.
Um zu überprüfen, ob ein Punkt P ist in der kryptografischen elliptischen Kurve gültig, es muss überprüft werden, dass der Punkt auf der Kurve liegt und zur richtigen Untergruppe gehört. Dies ist besonders kritisch, wenn der Punkt P stammt aus einer nicht vertrauenswürdigen oder potenziell böswilligen Quelle, da ungültige oder speziell gefertigte Punkte zu Sicherheitslücken führen können. Unten ist Pseudocode, der diesen Prozess demonstriert:
# Pseudocode for checking if point P is valid def is_valid_point(P): if not is_on_curve(P): return False if not is_in_subgroup(P): return False return True
Mitgliederprüfungen der Untergruppe
Wie oben erwähnt, ist es bei der Arbeit mit unbekanntem Ursprung von entscheidender Bedeutung zu überprüfen, ob es zur richtigen Untergruppe gehört, und zu bestätigen, dass der Punkt auf der richtigen Kurve liegt. Für BN254Dies ist nur notwendig für Weil ist von erstklassig. Eine einfache Methode zum Beesten der Mitgliedschaft in ist einen Punkt mit zu multiplizieren Wo ist das Cofaktor der Kurve, was das Verhältnis zwischen der Reihenfolge der Kurve und der Größenordnung des Basispunkts ist.
Diese Methode kann jedoch in der Praxis aufgrund der großen Größe der Prime teuer sein besonders für . Im Jahr 2021, Scott schlug vor Eine schnellere Methode für die Teilgruppen -Mitgliedschaftstests auf BLS12 -Kurven unter Verwendung eines leicht berechneten Endomorphismusden Prozess 2 ×, 4 × und 4 × schneller für verschiedene Gruppen (schneller (Diese Technik ist die in angegebene in EIP-2537 Für schnelle Untergruppenprüfungen, wie in detailliert in Dieses Dokument). Später haben Dai et al. Generalisierte Scotts Technik Um für eine breitere Reihe von Kurven zu arbeiten, einschließlich BN -Kurven, reduzieren Sie die Anzahl der für die Teilgruppen -Mitgliedschaftskontrollen erforderlichen Operationen. In einigen Fällen kann der Prozess nahezu kostenlos sein. Koselev führte auch eine Methode für nicht paarende Kurven ein Verwenden der Tate -Paarungwas schließlich weiter war verallgemeinert auf pairing-freundliche Kurven.
Der echte schlanke schattige
Wie Sie am Ende dieses Beitrags aus der Zeitachse sehen können, haben wir einen Bericht über einen Fehler erhalten, der sich auswirkte Pectra EIP-2537 auf Beu, eingereicht über die Pectra Audit -Wettbewerb. Wir berühren hier nur leicht zu diesem Thema, falls der ursprüngliche Reporter es genauer behandeln möchte. Dieser Beitrag konzentriert sich speziell auf den BN254 EIP-196/EIP-197 Verwundbarkeit.
Der ursprüngliche Reporter beobachtete, dass in fern die, die, die, die is_in_subgroup Der Scheck wurde vor dem durchgeführt is_on_curve überprüfen. Hier ist ein Beispiel dafür, wie das aussehen könnte:
# Pseudocode for checking if point P is valid def is_valid_point(P): if not is_in_subgroup(P): if not is_on_curve(P): return False return False return True
In der obigen Frage der BLS -Kurve fasziniert wir uns, einen Blick auf den Entu -Code für die BN -Kurve zu werfen. Zu meiner großen Überraschung fanden wir etwas so was:
# Pseudocode for checking if point P is valid def is_valid_point(P): if not is_in_subgroup(P): return False return True
Warten Sie, was? Wo ist das is_on_curve überprüfen? Genau-Es gibt keine !!!
Nun, um die möglicherweise umzugehen is_valid_point Funktion, lediglich, was Sie tun müssen, ist einen Punkt zu geben Das liegt in der richtigen Untergruppe, aber nicht tatsächlich auf der Kurve.
Aber warten Sie – ist das überhaupt möglich?
Ja, aber nur für bestimmte, gut ausgewählte Kurven. Insbesondere, wenn zwei Kurven sind isomorphSie teilen die gleiche Gruppenstruktur, was bedeutet, dass Sie einen Punkt aus der isomorphen Kurve anstellen können, die die Untergruppenüberprüfungen durchläuft, aber nicht auf der beabsichtigten Kurve liegt.
Hinterhältig, richtig?
Hast du Isomorpshism gesagt?
Überspringen Sie diesen Abschnitt, wenn Sie nicht an den Details interessiert sind – wir sind ein bisschen tiefer in die Mathematik.
Lassen ein endliches Feld mit charakteristischer Unterscheidung von 2 und 3 sein, was bedeutet für einige Prime und Ganzzahl . Wir betrachten elliptische Kurven über gegeben durch die kurze Weierstraßgleichung:
\ begin {Gleichung} \ tag {1} y^2 = x^3 + a x + b
\ end {Gleichung}
Wo Und sind Konstanten zufriedenstellend .^[This condition ensures the curve is non-singular; if it were violated, the equation would define a singular point lacking a well-defined tangent, making it impossible to perform meaningful self-addition. In such cases, the object is not technically an elliptic curve.]
Kurve isomorphismen
Zwei elliptische Kurven werden berücksichtigt isomorph^[To exploit the vulnerabilities described here, we really want isomorphic curves, not just isogenous curves.] Wenn sie durch eine affine Änderung der Variablen in Verbindung gebracht werden können. Solche Transformationen bewahren die Gruppenstruktur und stellen sicher, dass die Punktabdition konsistent bleibt. Es kann gezeigt werden, dass die einzigen möglichen Transformationen zwischen zwei Kurven in kurzer Weiserstraßenform die Form annehmen:
\ begin {Gleichung} \ tag {2} (x, y) \ mapsto (e^2 x, e^3 y) \ end {Gleichung}
für etwas ungleich Null . Die Anwendung dieser Transformation auf die Kurvengleichung führt zu:
\ begin {Gleichung} \ tag {3} y^2 = x^3 + a e^{4} x + b e^{6} \ end {Gleichung}}
Der -invariante einer Kurve ist definiert als:
\ begin {Gleichung} \ tag {4} j = 1728 \ frac {4a^3} {4a^3 + 27b^2} \ end {Gleichung}
Jedes Element von Kann möglich sein -invariante.^[Both BLS and BN curves have a j-invariant equal to 0, which is really special.] Wenn zwei elliptische Kurven gleich teilen -Invariant sind sie entweder isomorph (im oben beschriebenen Sinne) oder sie sind Wendungen voneinander.^[We omit the discussion about twists here, as they are not relevant to this case.]
Ausnutzbarkeit
Zu diesem Zeitpunkt ist nur noch übrig, einen geeigneten Punkt für eine sorgfältig ausgewählte Kurve zu schaffen, und voilà –Das Spiel ist fertig.
Sie können den Testvektor verwenden Dieser Link und genieße die Fahrt.
Abschluss
In diesem Beitrag haben wir die Sicherheitsanfälligkeit bei der Umsetzung von elliptischen Kurvenprüfungen durch die FRU durchgesehen. Dieser Fehler könnte es einem Angreifer ermöglichen, einen Punkt zu schaffen, an dem die Teilgruppen -Mitgliedschaftsprüfungen bestehen, aber nicht auf der tatsächlichen Kurve liegen. Das Besu -Team hat dieses Problem in Veröffentlichung 25.3.0 seitdem angesprochen. Während das Problem auf Beu isoliert war und andere Kunden nicht beeinflusste, machen solche Diskrepanzen wie diese wichtige Bedenken hinsichtlich mehrerer Ökosysteme wie Ethereum auf. Eine Nichtübereinstimmung in kryptografischen Überprüfungen zwischen Kunden kann zu unterschiedlichem Verhalten führen – bei dem ein Kunde eine Transaktion oder eine Blockierung akzeptiert, die ein anderer ablehnt. Diese Art von Inkonsistenz kann den Konsens gefährden und das Vertrauen in die Einheitlichkeit des Netzwerks untergraben, insbesondere wenn subtile Fehler bei Implementierungen unbemerkt bleiben. Dieser Vorfall zeigt, warum strenge Tests und robuste Sicherheitspraktiken absolut wesentlich sind – insbesondere in Blockchain -Systemen, in denen selbst geringfügige kryptografische Fehltritte sich in wichtige systemische Schwachstellen eintreffen können. Initiativen wie der Pectra Audit -Wettbewerb spielen eine entscheidende Rolle bei der proaktiven Flucht, bevor sie die Produktion erreichen. Durch die Ermutigung verschiedener Augen, den Code zu überprüfen, stärken solche Bemühungen die allgemeine Widerstandsfähigkeit des Ökosystems.
Zeitleiste
- 15-03-2025-Fehler, der Pectra EIP-2537 auf FRU über die gemeldet hat Pectra Audit -Wettbewerb.
- 17-03-2025-Entdeckt und berichtete die EIP-196/EIP-197-Ausgabe dem FRU-Team.
- 17-03-2025-Marius van der Wijden hat einen Testfall und einen Statetest erstellt, um das Problem zu reproduzieren.
- 17-03-2025-Das Besu-Team bestätigte sofort und behoben Das Problem.

