Sind Bitcoin-ASICs für Nachrichten mit fester Länge optimiert?

Bitcoin-Block-Header sind 80 Bytes groß.

int32_t nVersion;       // 4 bytes
uint256 hashPrevBlock;  // 32 bytes
uint256 hashMerkleRoot; // 32 bytes
uint32_t nTime;         // 4 bytes
uint32_t nBits;         // 4 bytes
uint32_t nNonce;        // 4 bytes
                        // total: 80 bytes

Ein SHA256-ASIC wurde speziell entwickelt, um diese Felder immer wieder (doppelt) zu hashen, bis der resultierende Wert unter dem Schwierigkeitsgrad liegt, der durch codiert ist nBits.

Da es sich um einen doppelten Hash handelt, muss der ASIC in der Lage sein, anfängliche Nachrichten der Länge 80 und 32 zu hashen. Nach dem für SHA256 erforderlichen Padding haben die zu hashenden Byte-Strings die Längen 128 bzw. 64. Bitcoin-ASICs müssen also offensichtlich in der Lage sein, Nachrichten der Länge 128 und 64 zu hashen.

Angenommen, ich habe eine Datei auf meinem Computer, die erheblich länger ist (10.000-mal länger). Könnte ich es mit einem SHA256-Bitcoin-ASIC hashen?

Unterscheidet es sich von SHA256-ASIC zu SHA256-ASIC, je nachdem, wie sie hergestellt werden?

Antworten (2)

Sind Bitcoin-ASICs für Nachrichten mit fester Länge optimiert?

Es würde mich wirklich überraschen, wenn sie es nicht wären. Wenn Sie Ihre Kerne um 10 % kleiner machen können, indem Sie die verfügbare Speichermenge reduzieren, dann ist das ein Kinderspiel.

Angenommen, ich habe eine Datei auf meinem Computer, die erheblich länger ist (10.000-mal länger). Könnte ich es mit einem SHA256-Bitcoin-ASIC hashen?

Theoretisch wäre es möglich, aber es hat keinen Sinn. Bevor der ASIC Ihre 800-KB-Datei hashen kann, muss sie auf den ASIC übertragen werden. Das ist nicht so schlimm, wenn der ASIC einen USB- oder Ethernet-Treiber hat, aber viele nicht; Es ist billiger, seriell zu verwenden und einen Seriell-zu-USB-Konverter von FTDI zu kaufen. Diese Schnittstellen erreichen im Allgemeinen 192 Kilobaud, sodass die Übertragung der Datei etwa 33 Sekunden dauern würde.

Die meisten ASICs unterstützen jedoch einen „Midstate“, der den internen Zustand der Hash-Funktion auf halbem Weg durch die Eingabe darstellt. Das praktische Ergebnis davon ist, dass Sie die ersten 800 KB der Datei mit Ihrer CPU hashen und dann Ihren ASIC verwenden könnten, um die letzten 4 Bytes der Datei zu variieren, um nach einer Nonce unterhalb des Ziels zu suchen.

Abschließend möchte ich darauf hinweisen, dass keiner dieser ASICs SHA256 berechnet. Sie berechnen SHA256d.

Das ist ein guter Punkt in Bezug auf den Mittelzustand, sodass Bitcoin-ASICs möglicherweise nur für die Verwendung eines beliebigen Mittelzustands und nur Nachrichten von 64 Bytes optimiert sind. In diesem Fall bedeutet dies jedoch, dass sie beliebig lange Nachrichten hashen können, solange es einen Feed gibt, der die zu hashenden Daten liefert.

Was meinst du mit "wirklich lange"? Wenn es größer als (2 ^ 64-1) / 8 Bytes (~ 2.097.152 Terabytes) ist, wird es sowieso nicht funktionieren, da dies die theoretische Grenze von SHA256 ist und es darüber hinaus sehr viel Zeit in Anspruch nehmen würde. aber andererseits kenne ich nicht viele Computer, die so große Datenmengen speichern können.

Bei deutlich kleineren Eingaben hängt alles davon ab, wie die SHA256-Engine des ASIC implementiert ist, wie groß der Nachrichtenblock (Eingabe) in Bits ist, wie viel Speicher pro Kern in Ihrem SHA256-ASIC verfügbar ist usw. Gemäß Marktstandard, diese Kerne sind in der Regel mit 128 Kilobyte Speicher ausgestattet. Natürlich hindert Sie nichts daran, externe Einheiten von DRAM-Speicherchips über speicherbusfähige ASICs hinweg einzusetzen, aber dies wird sowieso die Verarbeitungsgeschwindigkeit beeinträchtigen.

Danke für die Information. Ist die Antwort also ja, vorhandene SHA256-ASICs können alles mit einer Länge von weniger als 128 Kilobyte hashen?
@ StephenM347 Wenn die SHA256-Engine-Implementierung des ASIC intelligent genug ist, um blockbasiertes Hashing von Nachrichten zu unterstützen (die meisten tun dies), liegt die theoretische Grenze bei (2 ^ 64-1) / 8 Bytes. Mehr Speicher pro Prozessorkern ermöglicht größere Blöcke und somit eine schnellere Verarbeitung.