PMG2426 1/Einführung/Tim

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<!DOCTYPE html>
<html lang="de">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Hashfunktionen: Grundlagen und Anwendungen</title>
    <style>
        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            line-height: 1.6;
            margin: 0;
            padding: 0;
            color: #333;
            background-color: #f5f5f5;
        }
        header {
            background: linear-gradient(135deg, #3a7bd5, #00d2ff);
            color: white;
            padding: 2rem 0;
            text-align: center;
        }
        .container {
            width: 80%;
            max-width: 1200px;
            margin: 0 auto;
            padding: 1rem;
        }
        nav {
            background-color: #333;
            color: white;
            padding: 1rem 0;
        }
        nav ul {
            list-style-type: none;
            padding: 0;
            margin: 0;
            display: flex;
            justify-content: center;
        }
        nav ul li {
            margin: 0 1rem;
        }
        nav ul li a {
            color: white;
            text-decoration: none;
            padding: 0.5rem 1rem;
            border-radius: 4px;
            transition: background-color 0.3s;
        }
        nav ul li a:hover {
            background-color: #444;
        }
        .section {
            background-color: white;
            margin: 2rem 0;
            padding: 2rem;
            border-radius: 8px;
            box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
        }
        .grid {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
            gap: 2rem;
        }
        .card {
            background-color: #f9f9f9;
            padding: 1.5rem;
            border-radius: 8px;
            box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05);
        }
        code {
            background-color: #f5f5f5;
            padding: 0.2rem 0.5rem;
            border-radius: 4px;
            font-family: 'Courier New', Courier, monospace;
        }
        .code-block {
            background-color: #f5f5f5;
            padding: 1rem;
            border-radius: 4px;
            overflow-x: auto;
            font-family: 'Courier New', Courier, monospace;
        }
        table {
            width: 100%;
            border-collapse: collapse;
            margin: 1rem 0;
        }
        th, td {
            padding: 0.75rem;
            text-align: left;
            border-bottom: 1px solid #ddd;
        }
        th {
            background-color: #f2f2f2;
        }
        .highlight {
            background-color: #fffde7;
            padding: 1rem;
            border-left: 4px solid #ffd600;
            margin: 1.5rem 0;
        }
        footer {
            background-color: #333;
            color: white;
            text-align: center;
            padding: 2rem 0;
            margin-top: 2rem;
        }
        .hash-visualization {
            text-align: center;
            margin: 2rem 0;
        }
        @media (max-width: 768px) {
            .grid {
                grid-template-columns: 1fr;
            }
            nav ul {
                flex-direction: column;
                align-items: center;
            }
            nav ul li {
                margin: 0.5rem 0;
            }
        }
    </style>
</head>
<body>
    <header>
        <div class="container">
            <h1>Hashfunktionen</h1>
            <p>Grundlagen, Anwendungen und kryptografische Sicherheit</p>
        </div>
    </header>
    
    <nav>
        <div class="container">
            <ul>
                <li><a href="#grundlagen">Grundlagen</a></li>
                <li><a href="#eigenschaften">Eigenschaften</a></li>
                <li><a href="#algorithmen">Algorithmen</a></li>
                <li><a href="#anwendungen">Anwendungen</a></li>
                <li><a href="#sicherheit">Sicherheit</a></li>
            </ul>
        </div>
    </nav>
    
    <div class="container">
        <section id="grundlagen" class="section">
            <h2>Was sind Hashfunktionen?</h2>
            <p>
                Hashfunktionen sind mathematische Algorithmen, die eine Eingabe beliebiger Länge (Daten, Texte, Dateien) in einen Ausgabewert fester Länge umwandeln. 
                Dieser Ausgabewert wird als <strong>Hashwert</strong>, <strong>Hash</strong>, <strong>Digest</strong> oder <strong>Fingerabdruck</strong> bezeichnet.
            </p>
            
            <div class="hash-visualization">
                <img src="/api/placeholder/600/300" alt="Hashfunktion Visualisierung" />
                <p><em>Visualisierung: Eine Hashfunktion wandelt Eingaben verschiedener Länge in Ausgaben fester Länge um</em></p>
            </div>
            
            <p>
                Die Grundidee einer Hashfunktion besteht darin, dass selbst kleine Änderungen an der Eingabe zu einem völlig anderen Hashwert führen.
                Dies macht Hashfunktionen besonders nützlich für kryptografische Anwendungen, Datenintegritätsprüfungen und effiziente Datenstrukturen.
            </p>
            
            <div class="highlight">
                <h3>Wichtig zu wissen:</h3>
                <p>
                    Hashfunktionen sind <strong>Einwegfunktionen</strong>. Das bedeutet, es ist praktisch unmöglich, aus einem Hashwert die ursprüngliche Eingabe zu rekonstruieren.
                    Diese Eigenschaft ist entscheidend für ihre Sicherheitsanwendungen.
                </p>
            </div>
        </section>
        
        <section id="eigenschaften" class="section">
            <h2>Eigenschaften von Hashfunktionen</h2>
            
            <p>Gute kryptografische Hashfunktionen sollten folgende Eigenschaften aufweisen:</p>
            
            <div class="grid">
                <div class="card">
                    <h3>Deterministisch</h3>
                    <p>Dieselbe Eingabe erzeugt immer denselben Hashwert. Dies ist eine grundlegende Anforderung für die Konsistenz.</p>
                </div>
                
                <div class="card">
                    <h3>Kollisionsresistenz</h3>
                    <p>Es sollte rechnerisch unmöglich sein, zwei unterschiedliche Eingaben zu finden, die den gleichen Hashwert erzeugen.</p>
                </div>
                
                <div class="card">
                    <h3>Lawineneneffekt</h3>
                    <p>Eine kleine Änderung der Eingabe führt zu einer großen Änderung des resultierenden Hashwerts (etwa 50% der Bits ändern sich).</p>
                </div>
                
                <div class="card">
                    <h3>Vorbildresistenz</h3>
                    <p>Bei gegebenem Hashwert sollte es unmöglich sein, eine Eingabe zu finden, die diesen Hashwert erzeugt.</p>
                </div>
                
                <div class="card">
                    <h3>Zweites Urbild-Resistenz</h3>
                    <p>Bei gegebener Eingabe ist es unmöglich, eine andere Eingabe zu finden, die denselben Hashwert erzeugt.</p>
                </div>
                
                <div class="card">
                    <h3>Schnelle Berechnung</h3>
                    <p>Die Hashfunktion sollte effizient sein und den Hashwert schnell berechnen können.</p>
                </div>
            </div>
        </section>
        
        <section id="algorithmen" class="section">
            <h2>Wichtige Hash-Algorithmen</h2>
            
            <table>
                <thead>
                    <tr>
                        <th>Algorithmus</th>
                        <th>Ausgabelänge</th>
                        <th>Entwickelt</th>
                        <th>Status</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>MD5</td>
                        <td>128 Bit</td>
                        <td>1991</td>
                        <td>Unsicher, nicht mehr für Sicherheitsanwendungen empfohlen</td>
                    </tr>
                    <tr>
                        <td>SHA-1</td>
                        <td>160 Bit</td>
                        <td>1995</td>
                        <td>Veraltet, Kollisionen gefunden</td>
                    </tr>
                    <tr>
                        <td>SHA-256</td>
                        <td>256 Bit</td>
                        <td>2001</td>
                        <td>Sicher, weit verbreitet</td>
                    </tr>
                    <tr>
                        <td>SHA-3</td>
                        <td>224-512 Bit</td>
                        <td>2015</td>
                        <td>Sicher, neuerer Standard</td>
                    </tr>
                    <tr>
                        <td>BLAKE2</td>
                        <td>bis zu 512 Bit</td>
                        <td>2012</td>
                        <td>Sicher und sehr schnell</td>
                    </tr>
                    <tr>
                        <td>Argon2</td>
                        <td>variabel</td>
                        <td>2015</td>
                        <td>Spezifisch für Passwortspeicherung optimiert</td>
                    </tr>
                </tbody>
            </table>
            
            <h3>SHA-256 Beispiel</h3>
            <p>Der folgende Code zeigt ein Beispiel für SHA-256 Hashing in Python:</p>
            
            <div class="code-block">
import hashlib

# Text zum Hashen
text = "Hallo, Welt!"

# SHA-256 Hash erzeugen
hash_object = hashlib.sha256(text.encode())
hex_dig = hash_object.hexdigest()

print(f"Text: {text}")
print(f"SHA-256 Hash: {hex_dig}")

# Ausgabe:
# Text: Hallo, Welt!
# SHA-256 Hash: dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f
            </div>
        </section>
        
        <section id="anwendungen" class="section">
            <h2>Anwendungsbereiche von Hashfunktionen</h2>
            
            <div class="grid">
                <div class="card">
                    <h3>Passwortspeicherung</h3>
                    <p>
                        Statt Passwörter im Klartext zu speichern, werden nur deren Hashwerte gespeichert. 
                        Bei der Anmeldung wird der Hash des eingegebenen Passworts mit dem gespeicherten Hash verglichen.
                    </p>
                </div>
                
                <div class="card">
                    <h3>Datenintegrität</h3>
                    <p>
                        Überprüfung, ob Daten während der Übertragung oder Speicherung unverändert geblieben sind, 
                        indem Hashwerte vor und nach der Übertragung verglichen werden.
                    </p>
                </div>
                
                <div class="card">
                    <h3>Digitale Signaturen</h3>
                    <p>
                        Hashwerte werden in Verbindung mit asymmetrischer Kryptografie verwendet, 
                        um die Authentizität und Integrität von Nachrichten zu garantieren.
                    </p>
                </div>
                
                <div class="card">
                    <h3>Blockchain & Kryptowährungen</h3>
                    <p>
                        Hashfunktionen sind ein zentraler Bestandteil der Blockchain-Technologie und dem Mining-Prozess 
                        bei Kryptowährungen wie Bitcoin (SHA-256).
                    </p>
                </div>
                
                <div class="card">
                    <h3>Datenstrukturen</h3>
                    <p>
                        Hashtabellen und HashMaps verwenden Hashfunktionen, um Daten effizient zu speichern und abzurufen, 
                        was schnelle Suchoperationen ermöglicht.
                    </p>
                </div>
                
                <div class="card">
                    <h3>Deduplizierung</h3>
                    <p>
                        Identifizieren und Entfernen doppelter Daten durch Vergleich von Hashwerten, 
                        besonders nützlich bei Backup-Systemen und Datenspeicherung.
                    </p>
                </div>
            </div>
        </section>
        
        <section id="sicherheit" class="section">
            <h2>Sicherheitsaspekte von Hashfunktionen</h2>
            
            <p>
                Die Sicherheit von Hashfunktionen wird ständig überprüft und verbessert. Im Laufe der Zeit wurden mehrere Angriffe entwickelt:
            </p>
            
            <div class="grid">
                <div class="card">
                    <h3>Brute-Force-Angriffe</h3>
                    <p>
                        Systematisches Ausprobieren aller möglichen Eingaben, um einen bestimmten Hash zu erzeugen. 
                        Die Widerstandskraft gegen solche Angriffe hängt von der Ausgabelänge der Hashfunktion ab.
                    </p>
                </div>
                
                <div class="card">
                    <h3>Rainbow Tables</h3>
                    <p>
                        Vorberechnete Tabellen mit Hashwerten und zugehörigen Eingaben. 
                        Diese können durch Salting (Hinzufügen zufälliger Daten) unwirksam gemacht werden.
                    </p>
                </div>
                
                <div class="card">
                    <h3>Kollisionsangriffe</h3>
                    <p>
                        Suche nach zwei verschiedenen Eingaben, die denselben Hashwert erzeugen. 
                        MD5 und SHA-1 sind anfällig für solche Angriffe und sollten nicht mehr verwendet werden.
                    </p>
                </div>
            </div>
            
            <div class="highlight">
                <h3>Bewährte Praktiken:</h3>
                <ul>
                    <li>Verwenden Sie moderne Hashfunktionen wie SHA-256, SHA-3 oder BLAKE2.</li>
                    <li>Fügen Sie bei der Passwortspeicherung immer ein Salt hinzu.</li>
                    <li>Verwenden Sie spezialisierte Passwort-Hashing-Funktionen wie Argon2, bcrypt oder PBKDF2.</li>
                    <li>Halten Sie Ihre kryptografischen Bibliotheken aktuell.</li>
                </ul>
            </div>
        </section>
    </div>
    
    <footer>
        <div class="container">
            <p>&copy; 2025 Hashfunktionen-Info | Eine informative Website über Hashfunktionen und ihre Anwendungen</p>
        </div>
    </footer>
</body>
</html>