Das Fundament der Dezentralisierung
Kryptographie ist das „Crypto“ in Kryptowährung. Sie bietet die mathematischen Garantien für Sicherheit, Eigentum und Unveränderlichkeit, die es dezentralen Netzwerken ermöglichen, ohne eine zentrale Instanz zu funktionieren.
In diesem Leitfaden werden wir die spezifischen kryptographischen Algorithmen untersuchen, die von großen Blockchains wie Bitcoin und Ethereum verwendet werden. Wir werden untersuchen, warum bestimmte Entscheidungen getroffen wurden, wie sie sich von der Standard-Web-Kryptographie unterscheiden und wie sie zusammenarbeiten, um Vermögenswerte im Wert von Milliarden von Dollar abzusichern.
1. Hashing-Strategien: Bitcoins Doppel-Hash und HASH160
Bitcoin verwendet Hashing für alles, vom Mining bis zur Adressgenerierung. Es verwendet jedoch selten einen einzelnen SHA-256-Hash.
Doppel-SHA-256 (SHA-256d)
Die meisten Operationen in Bitcoin, einschließlich des Proof of Work und der Konstruktion von Block-IDs, verwenden SHA-256 zweimal.
- Formel:
SHA256(SHA256(Daten)) - Begründung: Satoshi Nakamoto implementierte dies primär als Verteidigung gegen Length-Extension-Angriffe, die zu dieser Zeit ein theoretisches Problem für die Merkle-Damgård-Konstruktion darstellten.
HASH160: Platzeffizienz
Zur Generierung von Adressen verwendet Bitcoin HASH160.
- Formel:
RIPEMD160(SHA256(PublicKey)) - Begründung: RIPEMD-160 erzeugt einen 20-Byte (160-Bit) Hash, der kürzer als SHA-256 (32 Byte) ist. Dies spart wertvollen Platz im UTXO-Set und auf der Blockchain, während ein für die Adressidentifizierung geeignetes Sicherheitsniveau beibehalten wird.
2. Ethereums Keccak-256: Das „echte“ SHA-3
Ethereum hat Keccak-256 als primäre Hash-Funktion gewählt. Dies ist oft eine Quelle der Verwirrung, da Keccak-256 der Gewinner des NIST SHA-3-Wettbewerbs ist, aber nicht exakt identisch mit dem endgültigen FIPS 202 SHA-3-256-Standard ist.
Keccak-256 vs. NIST SHA-3-256
Während des Standardisierungsprozesses nahm das NIST geringfügige Änderungen am Padding von Keccak vor.
- Keccak-256: Verwendet Padding
0x01. - NIST SHA-3-256: Verwendet Padding
0x06.
Da Ethereum gebaut wurde, während sich Keccak noch im Standardisierungsprozess befand, verwendet es das ursprüngliche Keccak-256. Dies bedeutet, dass ein Standard-SHA-3-256-Hash-Generator ein anderes Ergebnis liefert als ein Keccak-256-Hash-Generator. Für Ethereum-Entwickler ist die Verwendung der korrekten Version für die Berechnung von Funktionssignaturen und Merkle-Roots von entscheidender Bedeutung.
3. Die secp256k1-Kurve und ECDSA-Signaturen
Sowohl Bitcoin als auch Ethereum verwenden den Elliptic Curve Digital Signature Algorithm (ECDSA) zum Signieren von Transaktionen, speziell auf der secp256k1-Kurve.
Warum secp256k1?
Während die meisten Webstandards (wie TLS) NIST-Kurven (z. B. P-256) verwenden, bevorzugt die Blockchain-Community secp256k1.
- Koblitz-Kurve: Es handelt sich um eine „Koblitz“-Kurve, die eine effizientere Berechnung (Skalarmultiplikation) als Nicht-Koblitz-Kurven ermöglicht.
- Keine „Backdoors“: Es gibt Bedenken, dass NIST-Kurven aufgrund der Art und Weise, wie ihre Parameter gewählt wurden, versteckte „Backdoors“ enthalten könnten. Die Parameter von secp256k1 wurden auf transparentere, deterministische Weise gewählt.
Wenn Sie eine Transaktion signieren, verwenden Sie Ihren privaten Schlüssel und ECDSA, um eine Signatur $(r, s)$ zu erstellen. Das Netzwerk verwendet die secp256k1-Kurve und Ihren öffentlichen Schlüssel, um zu verifizieren, dass die Signatur gültig ist.
4. Merkle-Bäume und Merkle-Roots
Ein Merkle-Baum (oder Hash-Baum) ist eine Struktur, die verwendet wird, um die Integrität großer Datensätze effizient zusammenzufassen und zu verifizieren.
Wie es funktioniert
- Blätter: Jede Transaktion in einem Block wird gehasht.
- Knoten: Hashes werden paarweise zusammengefasst und rekursiv erneut gehasht.
- Root: Der letzte einzelne Hash an der Spitze ist der Merkle-Root.
Der Merkle-Root im Block-Header
Der Merkle-Root ist im Block-Header enthalten. Wenn auch nur ein einziges Bit in einer einzigen Transaktion geändert wird, ändert sich der gesamte Merkle-Baum, was zu einem anderen Merkle-Root führt. Dies ermöglicht es „Simplified Payment Verification“ (SPV)-Clients zu verifizieren, dass eine Transaktion Teil eines Blocks ist, ohne die gesamte Blockchain herunterzuladen.
Ein Merkle-Baum-Rechner ist unerlässlich für die Validierung von Block-Headern und den Nachweis der Einbeziehung von Transaktionen.
5. Vergleich: Hashing- und Signatur-Algorithmen
| Protokoll | Primärer Hash | Signatur-Kurve | Adress-Hash |
|---|---|---|---|
| Bitcoin | SHA-256d | secp256k1 | HASH160 |
| Ethereum | Keccak-256 | secp256k1 | Keccak-256 (letzte 20 Bytes) |
| Solana | SHA-256 | Ed25519 | Base58 Public Key |
| Polkadot | Blake2b | Ed25519/sr25519 | SS58 |
FAQ: Blockchain-Kryptographie
F: Ist Keccak-256 sicherer als SHA-256?
A: Beide gelten als kryptographisch sicher. Keccak (Sponge-Konstruktion) ist von Natur aus resistent gegen Length-Extension-Angriffe, während SHA-256 (Merkle-Damgård) den „Doppel-Hashing“-Trick benötigt, um eine ähnliche Resistenz zu erreichen.
F: Warum nicht Ed25519 für alles verwenden?
A: Ed25519 ist schneller und sicherer als ECDSA/secp256k1. Als Bitcoin und Ethereum geschaffen wurden, war Ed25519 jedoch relativ neu und nicht so weit verbreitet geprüft oder in Hardware unterstützt wie ECDSA. Neuere Chains wie Solana und Cardano verwenden Ed25519.
F: Was ist eine „Kollision“?
A: Eine Kollision tritt auf, wenn zwei verschiedene Eingaben denselben Hash-Output erzeugen. Für Keccak-256 oder SHA-256 ist es mit aktueller Technologie rechnerisch unmöglich, eine Kollision zu finden.
F: Wie wird ein Transaktions-Hash berechnet?
A: Normalerweise durch Hashing der serialisierten Transaktionsdaten. Bei Bitcoin ist es SHA256d(tx_data). Bei Ethereum ist es Keccak256(rlp_encoded_tx).
Fazit
Blockchain-Kryptographie ist eine sorgfältig ausgewählte Suite von Algorithmen, die auf hohe Sicherheit, Effizienz und Transparenz ausgelegt sind. Von der Effizienz von secp256k1 bis zur einzigartigen Sponge-Konstruktion von Keccak-256 sind diese Primitive das, was dezentrales Vertrauen erst möglich macht. Für jeden Entwickler, der in diesem Bereich arbeitet, ist das Verständnis dieser Grundlagen nicht nur eine akademische Übung – es ist der Schlüssel zum Aufbau sicherer und kompatibler dezentraler Anwendungen.