Assignment Chef icon Assignment Chef
All German tutorials

Programming lesson

Praktische Netzwerksicherheit mit OpenSSL: TLS 1.3, Passwort-Hashing und Authentifizierung für dein Bibliothekssystem

Lerne in diesem Tutorial, wie du dein Netzwerk-Bibliothekssystem mit TLS 1.3, sicheren Passwörtern und SHA-512-Hashing vor unbefugtem Zugriff schützt – perfekt für die Programmieraufgabe CS447 P3.

Netzwerksicherheit OpenSSL TLS 1.3 Implementierung Passwort-Hashing SHA-512 sichere Passwortgenerierung Authentifizierungsprotokoll CS447 P3 Lösung OpenSSL Programmierung sichere Netzwerkanwendung Passwort-Salt Interleaving Pre-Shared Key Verschlüsselung Bibliothekssystem Sicherheit C++ Netzwerksicherheit OpenSSL RAND_bytes Passwortkomplexität prüfen mehrere Clients gleichzeitig

Einführung in die Netzwerksicherheit für dein Bibliothekssystem

Stell dir vor, du betreibst ein Online-Bibliothekssystem, in dem Studierende Bücher ausleihen und zurückgeben – so wie in der CS447-Aufgabe P3. Dein System muss nicht nur funktionieren, sondern auch sicher sein. In dieser Lektion zeige ich dir, wie du mit OpenSSL eine TLS 1.3-Verschlüsselung aufbaust, sichere Passwörter generierst und speicherst, und eine Authentifizierung implementierst – ganz ohne die gesamte Aufgabe zu lösen. Du lernst die Konzepte und bekommst Codebeispiele, die du anpassen kannst.

Die digitale Welt ist voller „Piraten“, die deine Daten stehlen wollen – ob beim Gaming, in sozialen Medien oder in der Uni. Mit den richtigen Sicherheitsmechanismen schützt du dein System und sammelst wertvolle Erfahrungen für deine Karriere in der IT-Sicherheit.

1. TLS 1.3 mit OpenSSL einrichten

Transport Layer Security (TLS) sorgt dafür, dass die Kommunikation zwischen Client und Server verschlüsselt ist. OpenSSL ist die Standardbibliothek unter Linux. Für TLS 1.3 konfigurierst du den SSL-Kontext mit SSL_CTX_set_min_proto_version() und SSL_CTX_set_max_proto_version(). Hier ein minimales Beispiel für den Server:

SSL_CTX *ctx = SSL_CTX_new(TLS_server_method());
SSL_CTX_set_min_proto_version(ctx, TLS1_3_VERSION);
SSL_CTX_set_max_proto_version(ctx, TLS1_3_VERSION);
SSL_CTX_set_ciphersuites(ctx, "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256");
SSL_CTX_use_certificate_file(ctx, "p3server.crt", SSL_FILETYPE_PEM);
SSL_CTX_use_PrivateKey_file(ctx, "p3server.key", SSL_FILETYPE_PEM);

Erstelle die Zertifikate mit OpenSSL-Befehlen:

openssl req -x509 -newkey rsa:2048 -keyout p3server.key -out p3server.crt -days 365 -nodes

Vergiss nicht, die Dateien p3server.key und p3server.crt zu nennen, wie in der Aufgabe gefordert.

2. Sicheres Passwort und Salt generieren

Ein starkes Passwort ist die Grundlage der Sicherheit. In der Aufgabe musst du ein 5-Zeichen-Passwort und ein 6-Zeichen-Salt generieren. Nutze RAND_bytes() von OpenSSL für echten Zufall. Achte auf die Komplexität: mindestens ein Großbuchstabe, eine Zahl und ein Sonderzeichen aus !@#$%&*. Das Passwort darf nicht mit einem Sonderzeichen beginnen. Hier ein Codeausschnitt:

unsigned char password[6]; // 5 Zeichen + Nullbyte
unsigned char salt[7];
// Generiere mit RAND_bytes und prüfe auf Komplexität
// Wiederhole, bis alle Bedingungen erfüllt sind

Das Salt interleavst du mit dem Passwort: abwechselnd Salt-Zeichen und Passwort-Zeichen, beginnend mit dem ersten Salt-Zeichen. Beispiel: Salt = „S1a2tX“, Passwort = „P4s5w“ → „SP14as25twX“. Das ist die Interleaving-Methode.

3. Passwort-Hashing mit SHA-512

Nach dem Salting hashest du das salted Passwort mit SHA-512. So wird aus dem Klartext ein Hash, der in der Datei .book_shadow gespeichert wird. Das Format ist:

username:salt:salted_password_hash

Beispiel:

maxmustermann:S1a2tX:a1b2c3d4e5f6...

SHA-512 ist resistent gegen Rainbow-Table-Angriffe, besonders in Kombination mit einem einzigartigen Salt pro Benutzer.

4. Authentifizierung mit Pre-Shared Key

Bei der Registrierung eines neuen Benutzers generiert der Server das Passwort, speichert es gehasht und sendet es verschlüsselt an den Client. Dafür verwendest du einen Pre-Shared Key (PSK). In der Aufgabe ist der PSK: F24447TG. Du kannst AES-256-CBC oder ein ähnliches Verfahren nutzen. Der Client entschlüsselt das Passwort und zeigt es an.

Bei der Anmeldung (USER/PASS) sendet der Client das Passwort mit dem PSK verschlüsselt. Der Server entschlüsselt, saltiert, hasht und vergleicht mit dem gespeicherten Hash.

5. Mehrere Clients gleichzeitig bedienen

Dein Server muss mehrere Clients gleichzeitig akzeptieren. Verwende dafür Threads oder Prozesse. Ein einfacher Ansatz ist fork() oder pthread_create(). Denk daran, die Datei .book_shadow mit Dateisperren (flock) zu schützen, wenn mehrere Prozesse darauf zugreifen.

6. Fehlerbehandlung und Testen

Fehler bei OpenSSL-Funktionen erkennst du mit ERR_print_errors_fp(stderr). Teste deine Implementierung gründlich: Melde dich mit falschen Passwörtern, sende ungültige Befehle und prüfe, ob die Verbindung sicher ist (z.B. mit Wireshark).

Fazit

Mit diesen Grundlagen bist du gut gerüstet, um die Sicherheit deines Bibliothekssystems zu erhöhen. Denk daran: Die Aufgabe verlangt viel Eigeninitiative – recherchiere, probiere aus und lerne aus Fehlern. So wirst du zum echten Cybersecurity-Profi!