Zum Inhalt springen
buybitcoinsmart

Glossar / Nodes und Software

Nachrichten-Header

Was ist der Nachrichten-Header?
Der Nachrichten-Header von Bitcoin ist ein fester Umschlag von 24 Bytes um jede Peer-to-Peer-Nachricht: eine Startzeichenfolge für das Netzwerk, ein Befehlsname, eine Nutzlastlänge und eine Prüfsumme.

Nichts im Peer-Protokoll beschreibt sich selbst, daher muss der Umschlag diese Aufgabe übernehmen. Seine vier Felder ändern nie ihre Größe oder Reihenfolge, sodass ein Node genau 24 Bytes lesen, erfahren kann, wie viel noch kommt, und jede Verbindung trennen kann, die mehr als die 4.000.000 Bytes ankündigt, die Bitcoin Core akzeptiert. Sie werden nie einen sehen, aber ein fehlerhafter Header ist der Grund, warum eine Peer-Verbindung manchmal ohne Erklärung verschwindet.

So funktioniert es

Die vier Felder des Headers werden in fester Reihenfolge gelesen, und jedes bestimmt, was als Nächstes passiert.

Die Bytes 0 bis 3 enthalten die Startzeichenfolge, die das Netzwerk identifiziert. Die Bytes 4 bis 15 enthalten den Befehl: einen ASCII-Namen in Kleinbuchstaben, der mit Nullbytes auf zwölf Zeichen aufgefüllt wird, weshalb jeder Nachrichtentyp in Bitcoin einen knappen Namen hat und weshalb cmpctblock mit zehn Zeichen nahe an der Obergrenze liegt. Die Bytes 16 bis 19 enthalten die Nutzlastlänge als vorzeichenlose Ganzzahl in Little-Endian. Die Bytes 20 bis 23 enthalten eine Prüfsumme, die ersten vier Bytes eines doppelten SHA-256 über die Nutzlast.

Die Länge vor der Nutzlast zu platzieren ist die eigentliche Sicherheitsfunktion des Designs. Ein Node, der 24 Bytes gelesen hat, weiß bereits, ob der Absender etwas Absurdes ankündigt, und Bitcoin Core lehnt alles über 4.000.000 Bytes ab und trennt die Verbindung, ohne einen Puffer zuzuweisen oder auf Daten zu warten, die möglicherweise nie kommen. Stünde die Länge nach dem Inhalt, würde man darauf vertrauen, dass der Absender aufhört.

Die Prüfsumme verdient weniger Vertrauen, als sie üblicherweise erhält. Vier Bytes Hash erkennen ein gekipptes Bit auf einer fehlerhaften Verbindung, und gegen einen Peer, der lügt, richten sie nichts aus, da ein feindseliger Absender die Prüfsumme einfach über das berechnet, was er zu senden beschlossen hat. Integrität entsteht in Bitcoin durch die Validierung des Inhalts gegen die Konsensregeln, nie durch dieses Feld.

In neuerer Software ist die gesamte Struktur optional. Der Transport der BIP324-Version 2 verschlüsselt die Verbindung und ersetzt den Klartext-Umschlag durch eine verschleierte Längenrahmung plus einen Ein-Byte-Kurzbezeichner für die häufigsten Nachrichtentypen, sodass ein passiver Beobachter Befehlsnamen nicht mehr aus dem Datenstrom lesen kann. Bitcoin Core lieferte ihn in Version 26.0 als optionale Einstellung aus und aktivierte ihn in einer späteren Version standardmäßig.

Wo er auftritt

Nachrichten-Header erscheinen in Paketmitschnitten und in der Diagnose eines Nodes selbst.

Führen Sie Bitcoin Core mit -debug=net aus, und das Protokoll verzeichnet Nachrichtentypen und Größen für jeden Peer, was die praktische Methode ist, um zu beobachten, was eine Verbindung tatsächlich tut. Einträge mit PROCESSMESSAGE: INVALID MESSAGESTART bedeuten, dass ein Peer Bytes gesendet hat, die nicht mit der Startzeichenfolge dieses Netzwerks begannen, was fast immer auf eine Fehlkonfiguration am anderen Ende und nicht auf einen Angriff hindeutet. Der Bitcoin-Dissektor von Wireshark analysiert dieselben 24 Bytes, um jeden Frame zu kennzeichnen.

Nachrichten-Header vs. Block-Header

Ein Nachrichten-Header ist Transportverpackung; ein Block-Header ist Konsensdaten, und sie teilen nichts außer dem Wort. Der Nachrichten-Header ist 24 Bytes groß, existiert nur für die Dauer einer Übermittlung und wird verworfen, sobald die Nutzlast gelesen wurde. Der Block-Header ist 80 Bytes groß, enthält die Version, den Hash des vorherigen Blocks, die Merkle-Root, den Zeitstempel, das Schwierigkeitsziel und den Nonce und wird gehasht, um den Proof of Work zu erzeugen, der diesen Block dauerhaft benennt. Einer ist das Adressetikett auf einem Paket; der andere ist das, was darin steckt.

Nicht zu verwechseln mit

Häufig gestellte Fragen

Wie groß ist ein Nachrichten-Header von Bitcoin?

Genau 24 Bytes: vier für die Startzeichenfolge des Netzwerks, zwölf für den mit Nullbytes aufgefüllten Befehlsnamen, vier für die Nutzlastlänge und vier für eine Prüfsumme aus den ersten Bytes eines doppelten SHA-256 über die Nutzlast.

Macht die Prüfsumme des Nachrichten-Headers die Verbindung sicher?

Nein. Sie erkennt nur versehentliche Beschädigung. Ein feindseliger Peer berechnet die Prüfsumme über das, was er sendet, neu, sodass Sicherheit aus der Validierung der Nutzlast gegen die Konsensregeln kommt oder aus dem verschlüsselten BIP324-Transport, der den Klartext-Header vollständig ersetzt.

Verwandte Begriffe

Mehr zum Thema Nodes und Software

Diese Seite auf Englisch lesen