FlowingDev

AES-Verschlüsselung erklärt: Das digitale Vorhängeschloss der Welt

Erfahre, wie die symmetrische AES-Verschlüsselung einen einzigen, auf einem Passwort basierenden Schlüssel verwendet, um lesbaren Text in unleserlichen Ciphertext zu verwandeln und wieder zurück, und so moderne Daten sichert.

Tool ausprobieren: Verschlüsselung

In einem Satz

Passwortbasierte AES-Verschlüsselung ist eine Standardmethode, um Daten mit einem einzigen geheimen Schlüssel, der aus einem von dir gewählten Passwort erstellt wird, zu verschlüsseln und zu entschlüsseln.

Welches Problem es löst

Seit Menschen angefangen haben, Dinge aufzuschreiben, wollten wir auch Dinge aufschreiben, die andere Leute nicht lesen können. Von römischen Generälen, die Buchstaben in einer Nachricht verschoben (die Caesar-Verschlüsselung), bis hin zu Spionen im Kalten Krieg, die Einmal-Blöcke benutzten, war das Ziel immer dasselbe: Vertraulichkeit. Wenn die Nachricht in die falschen Hände gerät, sollte sie nur Kauderwelsch sein.

Im digitalen Zeitalter ist dieses Problem allgegenwärtig. Deine Daten fliegen durch zwielichtige öffentliche WLANs, liegen auf Servern von riesigen Konzernen und werden auf Festplatten gesichert, die am Ende auf einer Mülldeponie landen könnten. Wie stellst du sicher, dass deine private Nachricht, deine Liste von API-Keys oder dein geheimes Plätzchenrezept auch geheim bleibt?

Die alten Chiffren waren leicht zu knacken, besonders mit Computern, die Milliarden von Kombinationen pro Sekunde ausprobieren können. Wir brauchten etwas Besseres. Viel Besseres. Vorhang auf für den Advanced Encryption Standard, oder AES.

In den späten 1990er Jahren veranstaltete das US-amerikanische National Institute of Standards and Technology (NIST) einen öffentlichen Wettbewerb, um einen Ersatz für den alternden Data Encryption Standard (DES) zu finden. Sie suchten nicht nach einem geheimen Algorithmus, der in einem Regierungskeller zusammengebraut wurde; sie wollten eine transparente, öffentliche und brutal getestete Chiffre, der die ganze Welt vertrauen konnte. Nach Jahren kryptografischer Käfigkämpfe wurde 2001 ein belgischer Algorithmus namens „Rijndael“ (ein Kofferwort aus den Namen seiner Erfinder, Rijmen und Daemen) zum Sieger gekrönt.

Er war schnell, effizient und hatte vor allem einem globalen Ansturm von Versuchen, ihn zu brechen, standgehalten. Er wurde zu AES, dem Standard, den wir heute verwenden, um alles von sicheren Websites (HTTPS) über verschlüsselte Festplatten bis hin zu sensiblen Dateien zu sichern. Er löst das uralte Problem der Geheimhaltung mit moderner mathematischer Strenge.

Wie es unter der Haube funktioniert

AES wirkt wie Magie: Du murmelst ein geheimes Codewort, und dein Text verwandelt sich in ein unlesbares Durcheinander. Du murmelst es erneut, und er ist wieder da. Aber unter der Haube ist es nur eine Reihe von cleveren, wiederholbaren mathematischen Schritten.

Symmetrisch vs. Asymmetrisch

Zuerst ein Schlüsselkonzept. Verschlüsselung gibt es in zwei Hauptgeschmacksrichtungen. AES ist symmetrisch, was bedeutet, dass derselbe Schlüssel sowohl zum Verriegeln (Verschlüsseln) als auch zum Entriegeln (Entschlüsseln) der Daten verwendet wird. Das ist wie bei deinem Haustürschlüssel – er schließt die Tür ab, und genau derselbe Schlüssel schließt sie wieder auf. Das ist schnell und effizient.

Die andere Geschmacksrichtung ist die asymmetrische (oder Public-Key-) Kryptografie. Diese verwendet zwei verschiedene Schlüssel: einen öffentlichen Schlüssel zum Verriegeln der Daten und einen privaten Schlüssel zum Entriegeln. Das ist wie bei einem Briefkasten: Jeder kann einen Brief einwerfen (über den öffentlichen Schlitz), aber nur du hast den privaten Schlüssel, um ihn zu öffnen und die Post zu lesen. Das ist super, wenn man nicht vorab sicher einen geheimen Schlüssel austauschen kann, aber es ist viel langsamer als symmetrische Verschlüsselung.

Passwortbasierte Verschlüsselung verwendet das symmetrische Modell, weil du und jeder, der die Daten entschlüsseln muss, dasselbe Passwort teilen werdet.

Vom Passwort zum Schlüssel: Die KDF

Hier ist ein entscheidendes Detail: Dein Passwort, „SuperGeheimesP@ssw0rt123“, ist nicht der Verschlüsselungsschlüssel. Passwörter, die sich Menschen merken können, sind nicht zufällig oder lang genug, um sichere kryptografische Schlüssel zu sein.

Stattdessen wird dein Passwort in eine Key Derivation Function (KDF) eingespeist. Stell dir eine KDF als einen speziellen Algorithmus vor, der dazu dient, aus einem Passwort einen starken kryptografischen Schlüssel fester Größe zu machen. Moderne KDFs wie PBKDF2 (Password-Based Key Derivation Function 2) oder Argon2 tun drei wichtige Dinge:

  1. Ein Salt hinzufügen: Ein Salt ist ein zufälliges Datenelement, das für jede neue Verschlüsselung generiert wird. Es wird mit deinem Passwort vermischt, bevor es verarbeitet wird. Das bedeutet, dass selbst wenn zwei Benutzer dasselbe Passwort haben, die resultierenden Verschlüsselungsschlüssel völlig unterschiedlich sind. Das allein wehrt „Rainbow-Table“-Angriffe ab, bei denen Hacker vorberechnete Tabellen gängiger Passwörter und ihrer resultierenden Hashes verwenden. Das Salt wird zusammen mit den verschlüsselten Daten gespeichert; es ist kein Geheimnis, nur eine einzigartige Zutat.
  2. Den Schlüssel strecken: Die KDF jagt das Passwort und das Salt nicht nur einmal, sondern tausende oder sogar millionenfach durch einen Hashing-Algorithmus (wie SHA-256). Das nennt man „Iterationen“ oder „Arbeitsaufwand“. Es macht den Prozess absichtlich langsam. Für dich ist es keine große Sache, ein paar hundert Millisekunden zu warten. Für einen Angreifer, der versucht, dein Passwort per Brute-Force zu knacken, ist das ein Albtraum, da es rechenintensiv wird, Milliarden von Vermutungen auszuprobieren.
  3. Den Schlüssel erzeugen: Nach all dieser Arbeit spuckt die KDF einen Schlüssel der gewünschten Länge (z. B. 256 Bit) aus, der wie reines zufälliges Rauschen aussieht. Das ist der eigentliche Schlüssel, den AES verwendet.
Dein Passwort + Zufälliges Salt + Viele Iterationen -> Starker Verschlüsselungsschlüssel
("geheim123" + "a3f9d..."   + 100.000 Runden)  -> 256-Bit-AES-Schlüssel

Die AES-Chiffre selbst: Zustand und Runden

Jetzt zum Hauptereignis. AES arbeitet auf Datenblöcken fester Größe – immer 128 Bit (16 Bytes) auf einmal. Deine Klartextnachricht wird in diese 16-Byte-Blöcke zerhackt. Jeder Block wird in ein 4x4-Gitter aus Bytes geladen, das als State-Matrix (Zustandsmatrix) bezeichnet wird.

Dieser Zustand durchläuft dann eine Reihe identischer Transformationen, die Runden genannt werden. Die Anzahl der Runden hängt von der Schlüssellänge ab:

  • AES-128: 10 Runden
  • AES-192: 12 Runden
  • AES-256: 14 Runden

Jede Runde (außer der letzten) besteht aus vier Schritten:

  1. SubBytes: Jedes Byte in der State-Matrix wird durch ein anderes aus einer Standard-Nachschlagetabelle (der „Rijndael-S-Box“) ersetzt. Dies ist der wichtigste nicht-lineare Schritt, der für Konfusion sorgt.
  2. ShiftRows: Die Bytes in jeder Zeile der Matrix werden zyklisch verschoben. Die erste Zeile wird nicht verschoben, die zweite um eins, die dritte um zwei und die vierte um drei. Dies mischt die Daten durcheinander.
  3. MixColumns: Eine mathematische Operation wird auf jede Spalte angewendet, wodurch die Bytes miteinander vermischt werden. Dies sorgt für Diffusion, indem der Einfluss eines einzelnen Klartext-Bytes über den gesamten Block verteilt wird.
  4. AddRoundKey: Ein Teil des Hauptverschlüsselungsschlüssels (ein für diese Runde spezifischer „Rundenschlüssel“) wird mit dem Zustand XOR-verknüpft. Hier wird der geheime Schlüssel tatsächlich in deine Daten eingemischt.

Diese Sequenz SubBytes -> ShiftRows -> MixColumns -> AddRoundKey wird immer und immer wieder wiederholt. Jede Runde verschlüsselt die Daten weiter, bis die State-Matrix nach der letzten Runde ein Block aus vollständig verstümmeltem Ciphertext ist. Zum Entschlüsseln führt man die Schritte einfach in umgekehrter Reihenfolge mit demselben Schlüssel aus.

Alles zusammenfügen: Betriebsmodi und Padding

AES weiß nur, wie man einen einzelnen 16-Byte-Block verschlüsselt. Was ist mit deiner 500-Byte-Nachricht? Hier kommen die Betriebsmodi ins Spiel. Ein Betriebsmodus ist ein Rezept, wie man eine Blockchiffre verwendet, um einen Datenstrom beliebiger Länge zu verschlüsseln.

Ältere Modi wie CBC (Cipher Block Chaining) hatten einige Sicherheits-Fallstricke. Der moderne, empfohlene Modus ist GCM (Galois/Counter Mode). GCM ist ein „authentifizierter Verschlüsselungsmodus“, was eine schicke Art ist zu sagen, dass er zwei Fliegen mit einer Klappe schlägt:

  • Vertraulichkeit: Er verschlüsselt deine Daten, sodass niemand sie lesen kann.
  • Authentizität: Er erzeugt einen kurzen „Authentication Tag“. Wenn auch nur ein einziges Bit des Ciphertextes während der Übertragung umgedreht oder manipuliert wird, stimmt der Tag beim Entschlüsseln nicht überein und der Prozess schlägt fehl. Das sagt dir nicht nur, dass die Daten geheim waren, sondern auch, dass sie nicht manipuliert wurden.

Geschichten aus der Praxis

Das Kunden-Geheimnis der Freelancerin

Eine UX-Designerin, Anja, musste einen Entwurf für ein neues, noch nicht angekündigtes Produkt an ihren Kunden senden. Die Entwurfsdatei enthielt sensibles Branding und strategische Informationen. Sie per E-Mail zu versenden, fühlte sich riskant an – E-Mail ist bekanntermaßen unsicher. Ein sicheres Dateiübertragungsportal einzurichten, wäre für eine einmalige Lieferung mit Kanonen auf Spatzen geschossen. Stattdessen verschlüsselte Anja die ZIP-Datei mit ihrer Arbeit mit einem Passwort. Dann rief sie den Kunden an und nannte ihm das Passwort am Telefon. Sie konnte die verschlüsselte Datei nun sicher per E-Mail versenden, da sie wusste, dass nur der Kunde sie öffnen konnte.

Lektion: Passwortbasierte Verschlüsselung ist ein fantastisches Werkzeug für den ad-hoc, sicheren Austausch sensibler Dateien zwischen zwei Personen ohne komplexe Infrastruktur.

Die Konfigurationsdatei des Entwicklers

Ben entwickelte eine Webanwendung, die sich mit einer Datenbank verband und eine Drittanbieter-Zahlungs-API verwendete. Das Datenbankpasswort und der API-Schlüssel waren in einer config.json-Datei gespeichert. Er musste seinen Code in ein gemeinsames Git-Repository committen, aber die Konfigurationsdatei mit Klartext-Geheimnissen zu committen, wäre eine katastrophale Sicherheitslücke gewesen. Also verschlüsselte er config.json zu config.json.enc. Das Passwort für die Entschlüsselung wurde nicht im Code gespeichert. In der Entwicklung entschlüsselte er die Datei einfach lokal. In der Produktion wurde das Passwort der Anwendung sicher als Umgebungsvariable übergeben, die die App beim Start zum Entschlüsseln der Konfiguration verwendete.

Lektion: Das Verschlüsseln von Konfigurationsdateien ermöglicht es dir, „Secrets at Rest“ sicher neben deinem Code zu speichern und dabei die geheimen Daten vom geheimen Schlüssel, der zum Entsperren benötigt wird, zu trennen.

Die Notizen der Journalistin in der Cloud

Maria, eine investigative Journalistin, arbeitete an einer heiklen Geschichte. Sie bewahrte ihre Interviewnotizen und Recherchen in einem Ordner auf, der mit einem beliebten Cloud-Speicherdienst synchronisiert wurde. Obwohl sie der Sicherheit des Dienstes vertraute, war sie besorgt über potenzielle Bedrohungen: einen abtrünnigen Mitarbeiter bei der Cloud-Firma, eine staatliche Vorladung oder einen größeren Datenleck. Um ihre Quellen zu schützen, verschlüsselte sie jedes Dokument mit einem starken, einzigartigen Passwort, bevor sie es im synchronisierten Ordner speicherte. Jetzt, selbst wenn ihr gesamtes Cloud-Konto kompromittiert würde, wären ihre Notizen nur unleserliches Kauderwelsch.

Lektion: Verschlüsselung bietet eine persönliche Ebene der „Zero-Trust“-Sicherheit und stellt sicher, dass deine Daten privat bleiben, auch wenn sie auf Systemen gespeichert sind, die du nicht kontrollierst.

Häufige Fehler und Fallstricke

  • Ein schwaches Passwort verwenden. AES-256 ist praktisch gesehen durch Brute-Force unknackbar. Aber die KDF, die den Schlüssel aus deinem Passwort generiert, ist angreifbar, wenn das Passwort „12345“ oder „passwort“ lautet. Die Sicherheit des gesamten Systems bricht auf die Stärke deines Passworts zusammen. Verwende eine lange, zufällige und einzigartige Passphrase.
  • Das Passwort vergessen. Bei passwortbasierter Verschlüsselung gibt es keinen „Passwort vergessen?“-Link. Das Passwort ist der Schlüssel. Wenn du es verlierst, sind die Daten für immer weg. Sie sind nicht nur verschlossen; der Schlüssel hat sich in Luft aufgelöst. Bewahre deine Passwörter sicher in einem Passwort-Manager auf.
  • Seine eigene Kryptografie basteln. Das ist die Kardinalsünde der Softwaresicherheit. Du weißt vielleicht, was AES, GCM und PBKDF2 sind, aber sie sicher zu kombinieren ist voller Tücken. Hast du einen kryptografisch sicheren Zufallszahlengenerator für das Salt verwendet? Wird dein Authentication Tag korrekt behandelt? Verwende immer eine angesehene, von Experten überprüfte kryptografische Bibliothek für deine Programmiersprache. Bau das Schloss nicht selbst; kauf eins von einem Meisterschlosser.
  • Ein Salt oder einen IV wiederverwenden. Das Salt (für die KDF) und der IV/Nonce (für den Betriebsmodus) müssen bei jeder einzelnen Verschlüsselungsoperation mit demselben Schlüssel zufällig und einzigartig sein. Ihre Wiederverwendung kann die Sicherheit der Chiffre katastrophal aushebeln. Gute Bibliotheken kümmern sich darum für dich, aber es ist eine Falle, derer man sich bewusst sein muss.

Warum du das auf dem Schirm haben solltest

Wenn du Entwickler bist, wirst du mit Geheimnissen hantieren. Das ist unvermeidlich. Ob es sich um einen Datenbank-Verbindungsstring, einen API-Schlüssel, die persönlichen Daten eines Benutzers oder nur eine sensible Log-Datei handelt, du wirst Daten haben, die nicht offengelegt werden dürfen.

Passwortbasiertes AES ist deine erste Wahl, um Vertraulichkeit für Daten im Ruhezustand (at rest) zu gewährleisten. Es ist die standardmäßige, kampferprobte Lösung für:

  • Das Verschlüsseln von Anwendungsgeheimnissen in deiner Codebasis.
  • Das Sichern von Backups, bevor sie in die Cloud geschickt werden.
  • Das Schützen sensibler Datenfelder in einer Datenbank (z. B. das Verschlüsseln einer Sozialversicherungsnummer vor dem Speichern).
  • Das Schaffen einer einfachen, sicheren Möglichkeit für einen Benutzer, dir eine sensible Datei zu senden.

Es ist der grundlegende Baustein, um Geheimnisse geheim zu halten in einer Welt, in der Daten an mehr Orten kopiert, geteilt und gespeichert werden, als wir zählen können.

Weiterführende Infos

  • FIPS PUB 197: Der offizielle Standard vom NIST, der AES (Rijndael) definiert. Er ist trocken, aber er ist die Quelle der Wahrheit.
  • Wikipedia: Advanced Encryption Standard: Ein umfassender und sehr lesenswerter Überblick über die Geschichte, das Design und die Sicherheitsanalyse von AES (auf Englisch).
  • Wikipedia: PBKDF2: Ein tiefer Einblick in die gebräuchlichste Key Derivation Function, die mit Passwörtern verwendet wird (auf Englisch).
  • NIST Special Publication 800-38D: Die offizielle Spezifikation für den GCM-Betriebsmodus.
  • Cryptography I (Coursera/Stanford): Ein kostenloser Universitätskurs von Dan Boneh, der eine grundsolide Basis in angewandter Kryptografie bietet.

Theorie erledigt. Zeit, loszulegen — 100 % in deinem Browser.

Tool ausprobieren: Verschlüsselung