Blockchain - Architektur Konzepte und Use Cases

Blockchain - Architektur Konzepte und Use Cases

Die Blockchain-Technologie hat in den letzten Jahren enorm an Bedeutung gewonnen und zeigt vielfältige Anwendungsmöglichkeiten in verschiedenen Bereichen. In diesem Artikel werfen wir einen Blick auf die Architekturkonzepte und einige Anwendungsfälle dieser faszinierenden Technologie.

Vorwort / Kurzfassung

  • Kurz gesagt ist eine Blockchain ein dezentrales Array (Kette / engl. chain) von Daten (Blöcken / engl. block), das durch verschiedene Kryptografiemethoden gesichert ist
  • Jeder in einem Netzwerk öffentlicher Knoten ( Server / engl. public nodes) kann dem Array zusätzliche Daten hinzufügen, indem er ein Krypto-Rätsel (engl. crypto riddle) löst
  • Jeder im Netzwerk validiert kontinuierlich die Kette (Datenarray/Blöcke) und aktualisiert seine eigene Version der Blockchain
  • Das Vertrauen in die Daten wird hauptsächlich durch die Tatsache gewährleistet, dass die Berechnung der Blockchain höhere CPU-Kosten verursacht, als das gesamte Netzwerk im Laufe der Zeit bereitstellen kann

Blockchain Ursprung und Aufbau

Die Geschichte der Blockchain reicht zurück bis in das Jahr 2008, als eine Person oder Gruppe unter dem Pseudonym Satoshi Nakamoto das Whitepaper "Bitcoin: A Peer-to-Peer Electronic Cash System" veröffentlichte. Dieses Whitepaper legte den Grundstein für die Entwicklung der ersten Blockchain und Kryptowährung, dem Bitcoin. Nakamoto's Idee bestand darin, eine dezentrale digitale Währung zu schaffen, die ohne die Notwendigkeit einer zentralen Behörde oder Bank auskommt.

Die Blockchain-Architektur basiert auf einer verteilten und dezentralen Datenbank, bzw. dezentralen Servern (den sog. Knoten). Sie besteht aus einer Kette von Blöcken, die jeweils Transaktionsdaten enthalten. Jeder Block ist mit dem vorherigen Block verknüpft, wodurch eine unveränderliche und sichere Abfolge von Transaktionen entsteht. Die Aufzeichnungen in einer Blockchain sind kryptografisch gesichert, was Manipulationen nahezu unmöglich macht.

Verteilen von Daten im Netzwerk

Sobald ein "Knoten" im Netzwerk einen Block „minded“ (das Rätsel gelöst) hat, sendet er seine „Version“ der Blockchain an alle anderen Knoten. Andere Knoten überprüfen die Gültigkeit dieser Version der Blockchain und akzeptieren sie als neuen Master (@siehe auch "Proof of Work"). Sobald die Mehrheit der Knoten die neue Blockchain akzeptiert, wird mit allen Knoten im Netzwerk ein Konsens erzielt, diese Version der Blockchain zu akzeptieren.

Zeitlicher Ablauf der Datenverteilung im dezentralen Netzwerk

Programmier-Beispiel

Ein Beispiel für den Aufbau einer Blockchain kann in Typescript illustriert werden. Der Code für den Aufbau eines einfachen Blocks könnte folgendermaßen aussehen:

class Block {
    constructor(index, timestamp, data, previousHash) {
        this.index = index;
        this.timestamp = timestamp;
        this.data = data;
        this.previousHash = previousHash;
        this.hash = this.calculateHash();
    }

    calculateHash() {
        // Hier wird eine kryptografische Hash-Funktion angewendet, um den Hashwert des Blocks zu berechnen.
    }
}

const genesisBlock = new Block(0, "2023-08-25", "Genesis Block", "0");
const blockchain = [genesisBlock];

const newBlock = new Block(1, "2023-08-26", "Transaktionsdaten", blockchain[blockchain.length - 1].hash);

Dieses Beispiel veranschaulicht den grundlegenden Aufbau eines Blocks in einer Blockchain und wie Blöcke miteinander verknüpft sind.

Vollständiger Aufbau inkl. Komplexität (Siehe Mining und Proof of Work)

Mining und Proof of Work

Die Berechnung von Hash-Werten spielt eine zentrale Rolle in der Blockchain-Technologie und trägt zur Sicherheit und Integrität der Daten bei. Lassen Sie uns einen Blick auf die Hash-Berechnung, die zugrunde liegenden Algorithmen, die Rechenleistung sowie die Komplexität werfen.

In einer Blockchain wird jeder Block durch einen eindeutigen Hash-Wert identifiziert. Dieser Hash wird aus den Daten des Blocks und dem Hash-Wert des vorherigen Blocks berechnet. Dabei kommt ein kryptografischer Hash-Algorithmus wie SHA-256 (Secure Hash Algorithm 256 Bit) zum Einsatz. Dieser Algorithmus erzeugt einen festen Länge von 256 Bit (32 Byte) langen Hash-Wert, unabhängig von der Eingangsgröße.

Die Berechnung eines Hash-Wertes erfordert Rechenleistung, insbesondere bei großen Datenmengen. Dies ist bewusst so gestaltet, um Manipulationen an den Daten zu erschweren. Die Schwierigkeit der Hash-Berechnung wird durch den sogenannten "Proof of Work" (PoW) Mechanismus erhöht. Miner in einem Blockchain-Netzwerk konkurrieren darum, den nächsten Block zur Blockchain hinzuzufügen. Um dies zu tun, müssen sie eine kryptografische Aufgabe lösen, die den Hash-Wert des Blocks erfüllt, z.B. Erzeuge auf Basis der Daten und einer zu berechnenden Zufallszahl (sog. nonce) einen Hash der mit mindestens 4 Nullen beginnt. Dies erfordert eine hohe Rechenleistung, da sie verschiedene Zufallszahlen ausprobieren, um die richtige Kombination zu finden, die den geforderten Hash erzeugt.

Die Komplexität der Hash-Berechnung und des Proof-of-Work-Mechanismus sorgt dafür, dass neue Blöcke in einem bestimmten Intervall hinzugefügt werden können. In Bitcoin zum Beispiel beträgt dieses Intervall etwa 10 Minuten. Die Schwierigkeit wird regelmäßig angepasst, um sicherzustellen, dass die Zeit zwischen den Blöcken relativ konstant bleibt, unabhängig von der steigenden oder fallenden Rechenleistung im Netzwerk.

Zufallszahlen spielen eine Schlüsselrolle bei der Hash-Berechnung und beim Proof-of-Work. Da es keine einfache Möglichkeit gibt, den Hash-Wert vorherzusagen, müssen Miner viele verschiedene Zufallszahlen ausprobieren, um die richtige Kombination zu finden. Dies sorgt für eine faire Verteilung der Belohnungen und trägt zur Sicherheit der Blockchain bei.

Programmier-Beispiel

import * as crypto from 'crypto';

class Block {
    constructor(index, timestamp, data, previousHash) {
        this.index = index;
        this.timestamp = timestamp;
        this.data = data;
        this.previousHash = previousHash;
        this.nonce = 0;
        this.hash = this.calculateHash();
    }

    calculateHash() {
        return crypto
            .createHash('sha256')
            .update(this.index + this.timestamp + JSON.stringify(this.data) + this.previousHash + this.nonce)
            .digest('hex');
    }

    mineBlock(difficulty) {
        while (this.hash.substring(0, difficulty) !== Array(difficulty + 1).join('0')) {
            this.nonce++;
            this.hash = this.calculateHash();
        }
        console.log('Block mined:', this.hash);
    }
}

class Blockchain {
    constructor() {
        this.chain = [this.createGenesisBlock()];
        this.difficulty = 4; // Adjust the difficulty to control mining speed
    }

    createGenesisBlock() {
        return new Block(0, '2023-08-25', 'Genesis Block', '0');
    }

    getLatestBlock() {
        return this.chain[this.chain.length - 1];
    }

    addBlock(newBlock) {
        newBlock.previousHash = this.getLatestBlock().hash;
        newBlock.mineBlock(this.difficulty);
        this.chain.push(newBlock);
    }

    isChainValid() {
        for (let i = 1; i < this.chain.length; i++) {
            const currentBlock = this.chain[i];
            const previousBlock = this.chain[i - 1];

            if (currentBlock.hash !== currentBlock.calculateHash()) {
                return false;
            }

            if (currentBlock.previousHash !== previousBlock.hash) {
                return false;
            }
        }
        return true;
    }
}

// Testing the Proof-of-Work mechanism
const myBlockchain = new Blockchain();

console.log('Mining block 1...');
myBlockchain.addBlock(new Block(1, '2023-08-26', 'Transaction Data 1'));

console.log('Mining block 2...');
myBlockchain.addBlock(new Block(2, '2023-08-27', 'Transaction Data 2'));

// Validate blockchain integrity
console.log('Is blockchain valid?', myBlockchain.isChainValid());

In der Praxis sind Proof-of-Work-Algorithmen komplexer und es werden weitere Aspekte berücksichtigt, um die Sicherheit und Effizienz zu gewährleisten.

Blockchain Wallets

Blockchain Wallets sind wesentliche Bestandteile der Nutzung von Kryptowährungen wie Bitcoin. Sie ermöglichen es den Benutzern, ihre Krypto-Assets (sozusagen der Eigentümer-Nachweis von Daten in der Blockchain) sicher zu verwahren, Transaktionen durchzuführen und den Überblick über ihre Kontostände zu behalten.

Ein Bitcoin Wallet kann entweder in Form von Software oder Hardware existieren. Es ermöglicht den Benutzern, ihre Bitcoin-Adressen und privaten Schlüssel zu verwalten. Diese privaten Schlüssel sind erforderlich, um Transaktionen zu signieren und den Zugriff auf die Bitcoins zu sichern. Es gibt verschiedene Arten von Wallets, einschließlich Software-Wallets, Hardware-Wallets und papierbasierte Wallets.

Eine fortschrittliche Methode zur Verwaltung von Schlüsselpaaren ist die Verwendung hierarchisch deterministischer Schlüssel (HDD). Hierbei wird aus einem einzigen Seed, einer zufälligen Zeichenfolge, eine Vielzahl von Schlüsselpaaren abgeleitet. Diese Methode erleichtert die Verwaltung von Wallets erheblich.

BIP-0044 (Bitcoin Improvement Proposal 44) ist ein Standardvorschlag, der die Organisation von Hierarchisch Deterministischen Wallets beschreibt. Er definiert eine Struktur zur Ableitung von Schlüsselpaaren für verschiedene Kryptowährungen und Konten. Dieser Standard gewährleistet Interoperabilität zwischen verschiedenen Wallet-Diensten und -Anwendungen und bietet eine standardisierte Möglichkeit zur Verwaltung von Konten und Adressen.

Programmier-Beispiel

import * as bitcoinjs from 'bitcoinjs-lib';

// Seed zur Schlüsselableitung
const seed = 'your-random-seed';

// Master Node generieren
const masterNode = bitcoinjs.bip32.fromSeed(Buffer.from(seed, 'hex'));

// Ableitung eines Schlüsselpaares für Bitcoin
const bitcoinNode = masterNode.derivePath("m/44'/0'/0'/0/0");
const bitcoinPrivateKey = bitcoinNode.privateKey.toString('hex');
const bitcoinAddress = bitcoinjs.payments.p2pkh({ pubkey: bitcoinNode.publicKey }).address;

console.log('Bitcoin Private Key:', bitcoinPrivateKey);
console.log('Bitcoin Address:', bitcoinAddress);

Dieses Beispiel zeigt, wie man hierarchisch deterministische Schlüssel ableitet und einen privaten Schlüssel sowie eine Bitcoin-Adresse generiert.

Siehe auch: Einfache Bitcoin Wallet Implementierung auf Basis der BIP-Standards

GitHub - steidlereu/dart_crypto: Dart Library for Crypto Basics such as Bitcoin Wallets
Dart Library for Crypto Basics such as Bitcoin Wallets - GitHub - steidlereu/dart_crypto: Dart Library for Crypto Basics such as Bitcoin Wallets

Zusammenfassung

Insgesamt hat die Blockchain-Technologie das Potenzial, verschiedene Industrien zu revolutionieren, von Finanzen über Gesundheitswesen bis hin zu Lieferkettenmanagement. Die Unveränderlichkeit, Sicherheit und Dezentralisierung, die sie bietet, eröffnen zahlreiche Anwendungsfälle und erweiterte Möglichkeiten für Innovationen.

Quellen: