Wie sicher ist Bitcoin im Hinblick auf einen zufälligen Adressgenerierungsangriff? [Duplikat]

Stellen Sie sich einen Angreifer vor, der so etwas wie den folgenden Pseudocode auf der schnellsten ASIC-Farm implementiert, die man für Geld kaufen kann:

attack(blockchain, my_address)
    addresses = generate_tree_of_all_nonempty_addresses(blockchain)
    while true:
        private_key = generate_random_private_key()
        public_key = generate_public_key(private_key)
        address = ripemd160(sha256(public_key))
        if is_matched(address, addresses):
            steal_bitcoins(private_key, public_key, address, my_address)

Angesichts der Tatsache, dass RIPEMD-160 Adressen auf eine Größe von 160 Bit (in binärer Form) reduziert und dass es (IIRC) über eine Million nicht leerer Adressen gibt, dauert es wirklich immer noch unpraktisch lange, Kollisionen zu finden? Ich sollte in der Lage sein, selbst zu rechnen, aber ich weiß, dass einige von Ihnen in solchen Dingen besser sind als ich ...

Oder anders ausgedrückt, ist es möglich, dass sich die Entscheidung, öffentliche Schlüssel wie Bitcoin zu hashen, in Zukunft angesichts des erhöhten Kollisionsrisikos als unklug erweisen könnte, verglichen mit der einfachen Verwendung der vollen öffentlichen ECDSA-Schlüssellänge?

Warum versuchen Sie es nicht mit Mathematik und posten Sie Ihre Berechnungen hier, damit die Leute sie überprüfen können? Fragen wie diese sind viel befriedigender, um selbst zu kalkulieren, als sich auf jemand anderen verlassen zu müssen.

Antworten (2)

Ok, ich verdirb dir den Spaß daran, es selbst auszuarbeiten, aber ich hatte zu viel Spaß daran, es selbst auszuarbeiten, um es nicht zu posten.

Um so viele Zieladressen wie möglich zu haben, nehmen wir an, dass sich alle jemals existierenden Satoshi (21e6 * 100e6 = 2,1e15 oder 2,1 Billiarden) an einer anderen Adresse befinden. Und nehmen wir an, jemand hat einen ASIC entwickelt, der mit der gleichen Rate, mit der heutige ASICs SHA256D berechnen, einen privaten Schlüssel generieren, den entsprechenden öffentlichen Schlüssel und die Adresse berechnen und ihn mit allen 2,1 Billiarden dieser Ziele vergleichen könnte. (Das ist absurd – das Generieren eines öffentlichen ECDSA-Schlüssels ist um viele Größenordnungen komplexer als ein SHA256-Hash.) Angenommen, sie haben diesen ASIC im gleichen Umfang wie das gesamte Bitcoin-Mining-Netzwerk von heute eingesetzt.

Die aktuelle Bitcoin-Schwierigkeit beträgt etwa 4e10, was bedeutet, dass das Netzwerk als Ganzes 4e10 * 2^32 = 1,7e20 Hashes pro Sekunde berechnet. Nehmen wir also an, das Netzwerk unseres imaginären Angreifers generiert 1,7e20 private Schlüssel pro Sekunde. Jeder private Schlüssel hat eine Wahrscheinlichkeit von 2,1e15 / 2^160 = 1,4e-33, dass er mit einer der Zieladressen übereinstimmt. Der Angreifer findet also eine Übereinstimmung mit einer Rate von 1,7e20 * 1,4e-33 = 2,4e-13 pro Sekunde. Im Durchschnitt dauert es 1/2,4e-13 = 4,0e12 Sekunden oder ungefähr 130.000 Jahre, um eine Übereinstimmung zu finden.

Dieser hoch engagierte Angreifer, der Millionen (wenn nicht Milliarden) von Dollar für ASICs und Elektrizität ausgibt, wird also im Durchschnitt alle 130.000 Jahre einen Satoshi stehlen können.

Man muss sich wirklich damit abfinden, wie wahnsinnig schnell eine Exponentialfunktion wächst. 160 Bit scheinen eine sehr kleine Datenmenge zu sein, aber 2^160 ist eine unglaublich große Zahl.

Diese Frage hat einige großartige Zitate von David Schwartz und anderen erhalten unter: https://bitcointalk.org/index.php?topic=24268.0

Der gesamte Adressraum beträgt 2^160

Zum Vergleich: An allen Stränden der Erde gibt es nur 2^63 Sandkörner ( http://www.hawaii.edu/suremath/jsand.html )


Es gibt knapp 2^256 private Schlüssel, knapp 2^256 öffentliche Schlüssel und 2^160 Adressen. Es gibt einige Adressen, die mehr als einen entsprechenden öffentlichen Schlüssel und somit mehr als einen entsprechenden privaten Schlüssel haben.


Der vernünftigste Weg, den Angriff zu versuchen (der immer noch verrückt ist), besteht darin, zufällige private Schlüssel zu generieren, die entsprechenden Adressen zu berechnen und dann zu sehen, ob diese Adresse einen Saldo ungleich Null hat. Ich glaube, es gibt 2^160 mögliche Adressen. Selbst wenn es also 1.000.000.000 Adressen mit Salden ungleich Null gibt, sind Ihre Chancen, bei einem einzelnen Schlüssel einen Saldo ungleich Null zu erhalten, 1 zu 2^128.

Das Brute-Force-Forcing einer einzelnen Bitcoin-Adresse mit einem Guthaben ungleich Null (vorausgesetzt, es gibt eine Milliarde davon, was großzügig ist) ist also so schwer wie beispielsweise das Brute-Force-Forcing eines bestimmten 128-Bit-AES-Schlüssels.


Mit durchschnittlich 300.000.000 Bitcoin-Adressen, die jeden Tag verbraucht werden (nur einmal verwendet), wird der 2^160-Adressraum seinen Zweck für weitere 2^131 Tage erfüllen. Die Erinnerung an uns wird für immer in dem leben, was dann die genannt wird ancient blockchain.