High Mining: Die neueste Option zum Schutz der PoW-Blockchain vor einem „51% -Angriff“.

Bild

Die Entwickler der Litecoin Cash-Gabel präsentierten einen Vorabdruck des technischen Dokuments ' The Hive: Agent-based Mining in Litecoin Cash ', in dem sie ihren Vorschlag zum Schutz der Kryptowährungs-Blockchain basierend auf dem Proof-of-Work-Algorithmus vor einem „51% -Angriff“ beschrieben. Ihre Lösung kombiniert Mining mit alternden ASIC-Geräten (SHA-256) und demokratisches virtuelles Mining mit „Working Bees“ (HiveMine). Bei ordnungsgemäßer Implementierung der Blockchain wird LCC eines der größten Probleme moderner Blockchain-Projekte (von Bitcoin bis Ethereum) lösen: die Gefahr eines Angriffs, wenn mehr als die Hälfte der gesamten Netzwerkleistung in den Händen des Angreifers konzentriert ist.

51% Angriffsproblem


Diejenigen, die den Kryptowährungsmarkt überwachen, konnten den jüngsten Ausbruch von 51% Angriffen auf relativ kleine PoW-Projekte (Proof-of-Work - „Proof-of-Work-done“) nicht übersehen, als Angreifer Transaktionen umschrieben und Gelder so schnell wie möglich über Börsen transferierten. "Relativ" bedeutet in diesem Fall, dass ein kleiner Teil der Geräte, die die kryptografische Sicherheit einer großen Blockchain unterstützen (z. B. Bitcoin oder Ethereum), ausreicht, um den Konsens einer kleinen Blockchain zu brechen, die mit demselben Hash-Algorithmus arbeitet (Bitcoin Cash bzw. Bitcoin Gold). .

Bei Kryptowährungen, die den SHA-256-Algorithmus (LCC oder BCH) als Grundlage für die Verschlüsselung verwenden, wird das Risiko durch die Tatsache erhöht, dass die größte und sicherste Kryptowährung der Welt - Bitcoin (BTC) - mit demselben Algorithmus arbeitet.

In diesem Artikel konzentrieren wir uns auf das mathematische Modell des Schutzes vor 51% -Angriffen und heben oberflächlich die wichtigsten verwandten Begriffe und Konzepte hervor, die in der Kryptographie von Blockchains verwendet werden.

Einführung in den Hochbergbau


Im klassischen PoW-Blockchain-Sicherheitsschema konkurrieren Bergleute, indem sie eine große Anzahl potenzieller Block-Hashes berechnen, um einen zu finden, der die im Netzwerkkonsens festgelegten Komplexitätsbedingungen erfüllt. Wenn die Komplexität Null ist und ein Hash vom Netzwerk als gültig akzeptiert wird, funktioniert der Proof-of-Work nicht und jeder Netzwerkknoten kann problemlos Blöcke abbauen.

Auf den ersten Blick ist das nicht schlecht: Der Bergbau wird demokratisch und energiesparend. In der Praxis wird jedoch jeder billige Blöcke abbauen und in das Netzwerk einbinden, was bedeutet, dass es viele Kandidaten für die Fortsetzung der Blockkette geben wird. Da Bergleute nicht mehr verstehen, auf welchem ​​Block die Fortsetzung der Blockchain aufgebaut werden soll, werden viele verwaiste Ketten angezeigt. Es wird Chaos geben, das von PoW-Münzen mit einem unzureichenden Algorithmus zur Anpassung der Komplexität des Bergbaus beobachtet wurde.

Wenn die Komplexität Null ist und die Herstellung des Blocks keine Kosten verursacht, kann niemand bestimmen, welche Kandidatenketten mehr wert sind, was bedeutet, dass es keine Priorität gibt. Bergleute können auch an verschiedenen Ketten arbeiten, ohne etwas zu verlieren.

Dieses Gedankenexperiment zeigt lediglich, dass der Hauptzweck des Proof-of-Work-Algorithmus, des Proof-of-Stake oder des allgemeinen Proof-of-irgendetwas darin besteht, dem Netzwerk eine deterministische Methode zur Bestimmung des Rechts auf Bergbau, Prägung oder Fälschung eines Blocks bereitzustellen, mit der andere Teilnehmer einverstanden sind . Darüber hinaus besteht eine weitere wichtige Bedingung für alle Blocksucher darin, nicht ungestraft an mehreren Ketten gleichzeitig zu arbeiten. Im Proof-of-Stake-System wird ein solcher Ansatz durch den teilweisen oder vollständigen Entzug eines Einsatzes bestraft.

High Mining ist eine alternative Form des Blockkampfes, wenn das Recht, einen Block zu produzieren, von einem Agenten gesichert wird, der im Auftrag des Benutzers arbeitet. Diese Agenten - "arbeitende Bienen" - befinden sich in der Blockchain selbst. Sie sind vollständig dezentralisiert und werden erstellt, wenn ein Benutzer eine spezielle Transaktion zum Erstellen eines Agenten ausführt.

Nach der Erstellung beginnen die arbeitenden Bienen als virtuelle Geräte für den Bergbau (Rig) zu fungieren, und ihre Besitzer werden zu "Imkern". Wenn die Arbeiterinnen den Block erfolgreich erhalten, wird dem Imker eine Vergütung für den Block (einschließlich der im Block enthaltenen Provisionen) gezahlt. Arbeitsbienen benötigen sehr wenig Energie und benötigen keine spezielle Ausrüstung für die Herstellung von Blöcken. Auch ihre Lebensdauer ist begrenzt und die Schaffung einer Biene ist eine spekulative Handlung mit einem bestimmten Preis; Dies verhindert Versuche, an mehreren Ketten gleichzeitig zu arbeiten. Der Erfolg einer einzelnen Biene hängt ausschließlich von der Bienenpopulation ab, die im gesamten Netzwerk lebt. Einige Bienen werden niemals einen Block finden, während andere unverhältnismäßig viel Glück haben werden (ähnlich wie beim Solo-Bergbau).

Bild

Abb. 1: Eine arbeitende Biene wird der Blockchain durch eine Bienenerstellungstransaktion (BCT) und Minenblöcke während ihrer Lebensdauer hinzugefügt

Schaffung von Agenten (Arbeitsbienen)


Um eine funktionierende Biene zu erstellen, sendet der Benutzer die Transaktion an eine spezielle "tote" Adresse, z. B. CReateLitecoinCashWorkerBeeXYs19YQ . Beachten Sie, dass jeder dieselbe Adresse verwendet, um die Biene zu erstellen. Diese Adresse wird als vorhanden und korrekt analysiert, aber niemand hat einen privaten Schlüssel dafür. Das Dienstprogramm vanitygen bestimmt, dass die Suche nach einem privaten Schlüssel mit 24 * 2-GHz-Kernen etwa 1,7 * 10 ^ 31 Jahre dauert (mit einer 50-prozentigen Erfolgschance).

Eine Transaktion, die eine Biene erstellt, muss mindestens zwei Ausgaben haben. Die erste definiert eine feste Gebühr für die Erstellung einer Biene, die an eine unzugängliche Adresse gesendet wird. Obwohl der Preis für die Erstellung einer Biene dynamisch bestimmt wird, wird davon ausgegangen, dass er ein Prozentsatz der Blockbelohnung ist. Diese Berechnung beinhaltet die Mindestkosten, sodass es zum Zeitpunkt des Abbaus aller Münzen sinnvoll ist, High Mining zu verwenden, um Transaktionsgebühren zu erhalten.

Die zweite Schlussfolgerung hat keine Kosten, gibt jedoch die Basisadresse an, die eine Belohnung für den Block erhält, den die Biene in Zukunft gefunden hat. Sie können es "die zukünftige Adresse des Imkers" nennen. Falls gewünscht, kann der Benutzer dies selbst klären. Standardmäßig wird jedes Mal eine neue Adresse in seiner Brieftasche generiert.

Ein Beispiel:

 "vout": [ { // Bee creation fee "addr": "CReateLitecoinCashWorkerBeeXYs19YQ" "value": 1.0000000 }, { // Address to receive block rewards for any blocks this bee mines "addr": "CTrdm8YDfjmFJwFnKbvNZ9NYznhMqrNgFR" "value": 0.0000000 }, { // Change address for change from creation fee "addr": "Cd6CRuWCu6p4NLR6XG7BKyC8hzvEoYuKbn" "value": 123.5274346 } ] 

Bienen reifen und sind in der Lage, Blöcke zu produzieren, nachdem 576 Blöcke ab dem Zeitpunkt der Bienenerstellung in der Blockchain erscheinen. Dies ist die erwartete Anzahl neuer Blöcke, die innerhalb von 24 Stunden zur Litecoin Cash-Blockchain hinzugefügt wurden. Nachdem die Bienen reif sind, gibt es 4032 Blöcke (ca. 1 Woche) und suchen nach Blöcken, dann sterben sie.

Die Biene wird in einer QT-Brieftasche erstellt. So etwas sieht so aus:

Bild

Abb. 2: Layout der LCC-Brieftasche mit Arbeitsbienen

Bienen bei der Arbeit: Block Search


Nehmen wir zum Beispiel an, dass die Blockchain-Höhe = 1000 ist und das Netzwerk bestimmen sollte, welche Biene Block 1001 finden soll. Alices Imker hat jetzt 4 Bienen (erstellt zwischen 576 und 4608 Blöcken).

Wenn Block 1000 erscheint, berechnet Alices Brieftasche zwei Werte.

Der erste ist ein deterministischer Wert, der unvorhersehbar, aber leicht überprüfbar ist. Dies ist einfach zu bewerkstelligen, indem Block-Hashes in unterschiedlichen (fest codierten) Tiefen zwischen beispielsweise 0 und 500000 Blöcken hinzugefügt werden, um sicherzustellen, dass unser Zufallswert gut in der Blockchain verwurzelt ist:

 string deterministicRandString = blocks[blockHeight].hash + blocks[blockHeight-13].hash + blocks[blockHeight-173].hash + blocks[blockHeight-1363].hash + blocks[blockHeight-27363].hash + blocks[blockHeight-496393].hash; 

Als nächstes berechnet ihre Brieftasche den Ziel-Hash der Biene, beeTargetHash . Dieser Wert wird durch den exponentiellen gleitenden Durchschnitt mit einem sehr hohen Dynamikbereich bestimmt, der beeTargetHash so beeTargetHash , dass für jede beeTargetHash die Häufigkeit der während des beeTargetHash erhaltenen Blöcke bestimmt wird. Auf der positiven Seite ist, je mehr PoW-Blöcke seit dem letzten hohen beeTargetHash abgebaut wurden, desto höher (einfacher) beeTargetHash . Der Algorithmus ist wie folgt definiert; Die Werte von maxTarget , emaWindowsSize und emaDesiredSpacing werden während der Simulation ermittelt.

 beeHashTarget = previousBeeHashTarget (default to highest (easiest) target maxTarget) numPowBlocks = number of pow blocks since the previous hive mined block; emaInterval = emaWindowSize / emaDesiredSpacing; beeHashTarget *= (interval - 1) * emaDesiredSpacing + numPowBlocks + numPowBlocks; beeHashTarget /= (interval + 1) * emaDesiredSpacing; 

Sowohl deterministicRandString als auch beeHashTarget können von jedem Knoten im Netzwerk berechnet werden.

Alices Brieftasche durchläuft nun jede ihrer lebenden Bienen durch eine deterministische Zufallskette, kombiniert die BCT-Transaktionen der Bienen und hasht sie, um einen neuen Hash zu erhalten - den beeHash einer einzelnen Biene. Daher generiert jede Biene einen Hash pro Block. Dieser Hash ähnelt dem besten Hash, der von einem PoW-Mining-Rig im selben Zeitraum generiert wurde.

 hash beeHash = sha256(deterministicRandString + bee.creationTransaction.ID); 

Da in Alices Brieftasche Bienen beeHash , von denen jede beeHash berechnet, werden die besten (niedrigsten) entdeckten Hashes beeHash . Wenn der beste von Alices Brieftasche entdeckte Hash die Bedingung beeHash < beeTargetHash , erhält Alice das Recht, einen Block hinzuzufügen.

Angenommen, Alice hat eine lebende Biene, deren Hash niedriger als das Ziel ist, und die BCT-Transaktionskennung einer erfolgreichen Biene lautet wie folgt:

 0f6953f0a0816483c71ae3df45650a997e678588a315d72e9ae06e6a3f1c1841. 

In dem Wissen, dass Alices Brieftasche das Recht hat, einen Block zu signieren, erstellt das Netzwerk einen Block mit einer speziellen Transaktion mit zwei Ausgängen:

 "vout": [ { // Zero-value output identifies the bee and proves it's really minting for Alice "value": 0, "n": 0, "scriptPubKey": { "asm": "OP_RETURN OP_BEE 0f6953f0a0816483c71ae3df45650a997e678588a315d72e9ae06e6a3f1c1841 IH3Emz49KJeRbw0q4R48pD6GWPQtvHCxLeQOxxH+yv14Tn5KzUFIXBe9Td8EHudejzebMYt/XpusENzNkGM/a4I=" } }, { // Block reward (subsidy + fees) - must pay to bee's correct coinbase address "value": 250.0001125, "n": 1, "scriptPubKey": { "addresses": [ "CTrdm8YDfjmFJwFnKbvNZ9NYznhMqrNgFR" ] } } 

vout[0] ist eine Nullwertausgabe, die nicht ausgegeben werden kann. Es wird sowohl verwendet, um die Biene zu identifizieren, die den Block erhalten hat, als auch um zu beweisen, dass sie ihn für Alice erhalten hat.

vout[1] ist die Ausgabe, die Alice eine Blockbelohnung zahlt.

Blockbestätigung


Bobs Brieftasche, die Alices Block erhält, muss nun sicherstellen, dass er den Konsens erfüllt. Zunächst stellt er sicher, dass die Transaktion zwei Eingaben enthält, von denen die erste Null ist, und dass das Skript mit OP_RETURN OP_BEE beginnt. Dann ruft er Alices Bienentransaktions-ID ab:

 0f6953f0a0816483c71ae3df45650a997e678588a315d72e9ae06e6a3f1c1841. 

Exkurs: Da die Transaktion zum Erstellen einer Biene an eine unzugängliche Adresse übertragen wird, bleibt die Ausgabe nicht ausgegebener Transaktionen (UTXO) darin. Infolgedessen muss Bobs Brieftasche nicht die txindex (die alle Transaktionen aufgrund verzögerter Überprüfung und erhöhter Festplattennutzung vollständig indiziert), um die BCT-Ausgaben von Alice einfach überprüfen zu können. Aufgrund der Verwendung von UTXO benötigt die QT-Brieftasche keine Datenbanken oder Änderungen, um High Mining zu unterstützen. Die Registerkarte Bienen wird auch dynamisch integriert.


Durch die Validierung des High-Mine-Blocks implementiert Bobs Brieftasche das Äquivalent von RPC (Remote Procedure Call):

 gettxout 0f6953f0a0816483c71ae3df45650a997e678588a315d72e9ae06e6a3f1c1841 0 

Dies gibt ihm die erste BTC-Ausgabe, vout [0] , und stellt sicher, dass 1) die Transaktionstiefe im Bereich der Lebensdauer der Biene liegt; 2) für die Schaffung einer Biene wurde eine Provision gezahlt; 3) Es wurde an die richtige Sackgasse gesendet.

Wenn die Überprüfung erfolgreich ist, wird in Bobs Brieftasche Folgendes angezeigt:

 gettxout 0f6953f0a0816483c71ae3df45650a997e678588a315d72e9ae06e6a3f1c1841 1 

Somit wird die zweite Ausgabe von BCT vout [1] , was bestätigt, dass 1) der Wert Null ist; 2) Die Adresse ist dieselbe wie die Adresse für den Empfang der Überweisung von Münzen im Block (im Beispiel CTrdm8YDfjmFJwFnKbvNZ9NYznhMqrNgFR ).

Die folgende Überprüfung überprüft die Nachrichtensignatur aus dem letzten Teil von vout [0] . Die Nachricht sollte die aktuelle Blocknummer enthalten, die von der Adresse für den Empfang der Münzüberweisung signiert ist. Daher erstellt Bobs Brieftasche Folgendes:

 verifymessage CTrdm8YDfjmFJwFnKbvNZ9NYznhMqrNgFR "IH3Emz49KJeRbw0q4R48pD6GWPQtvHCxLeQOxxH+yv14Tn5KzUFIXBe9Td8EHudejzebMYt/XpusENzNkGM/a 4I=" "1001" 

Schließlich berechnet Bob deterministicRandString und beeHashTarget für den aktuellen Block, berechnet dann Alice's beeHash und vergleicht es mit beeHashTarget . Wenn alle Prüfungen bestanden sind, gilt der Block als gültig und verifiziert. Der Blockvalidierungsprozess ist schnell und erfordert keine teure Überprüfung historischer Blöcke.

Pairing von Hi-Mining und PoW Mining


Es wird davon ausgegangen, dass High Mining nicht die einzige Methode ist, um die Netzwerksicherheit zu gewährleisten. Litecoin Cash-Entwickler möchten die Mining-Community nicht nur retten, sondern auch in keiner Weise stören. High Mining muss mit PoW Mining in einer Blockchain gepaart werden.

Derzeit wird der Betrieb der Schaltung wie folgt berechnet:

Bild

Das heißt, der Betrieb der Schaltung akkumuliert als Funktion der Komplexität in jedem Block der Schaltung. Die Entwickler schlagen vor, diese Definition wie folgt zu ändern:

Bild

Somit wird jeder Hive-Mine-Block in Abhängigkeit von der im vorherigen PoW-Block abgeschlossenen Arbeitsmenge belohnt, und die Konstante k wird experimentell bestimmt.

Fazit: High Mining als Abwehr gegen Angriffe 51%


Laut Jane 'Tanner' Craig, Chefentwicklerin von Litecoin Cash, besteht die Idee von HiveMine nicht nur darin, einen zuverlässigen Schutz gegen 51% ige Angriffe zu bieten, sondern auch den Bergbau zu demokratisieren und zu dezentralisieren. Im Gegensatz zu PoS-Blockchains erfordert HiveMine immer noch die Kosten für die Erstellung einer Biene, die sich möglicherweise nicht auszahlt, wenn „die Reichen reicher werden“ und ihren Anteil ansammeln. Agent-based Mining erfüllt die drei Hauptaufgaben des Teams: Die 51% ige Attacke wird erheblich verkompliziert, das Mining und die Freiheit für Bergleute mithilfe des SHA-256-Algorithmus demokratisiert, der eine hohe Sicherheit desselben Bitcoin-Netzwerks gewährleistet. Für einen erfolgreichen Angriff muss ein Angreifer 51% der Netzwerkleistung sowie 51% der Bienenpopulation im Netzwerk übernehmen. Angesichts des Prozesses der Bienenbildung wird dies sofort offensichtlich.

Laut Craig ist das HiveMine-Modell nach dem Testen und Implementieren im Litecoin Cash-Netzwerk, das nicht mit der gleichen SHA-256-Hash-Rate wie das gleiche Bitcoin Cash ausgestattet ist, dennoch schneller und zuverlässiger als das Bitcoin Cash- oder Bitcoin-Netzwerk .

Referenzen:
1. " The Hive: Agent-basierter Bergbau in Litecoin Cash ", Iain CRAIG, Sebastian CLARKE, Michał WYSZYŃSKI und Federico DE GONZÁLEZ-SOLER. (2018)

Source: https://habr.com/ru/post/de415949/


All Articles