Warum ist moderne Verschlüsselung sicher?

Ist sie das denn? Darauf gibt es keine zufriedenstellende Antwort, weder von mir, noch von anderen Spezialisten oder Mathematikern. Die moderne Art der Verschlüsselung ist etwas anders als die althergebrachten Methoden. Heute packen wir alles geschriebene in 0 und 1 und jagen diese Codes dann durch unsere Algorithmen. Früher ersetzte man Buchstaben mit anderen Zeichen, immer basierend auf einem System.

Kann Verschlüsselung sicher sein?

Sie ist es, bis zum Punkt des ersten Gegenbeweis. Denn am Ende ist es die Mathematik, die die gesamte Arbeit für dich leistet. Das bedingt aber, dass es Möglichkeiten gibt mit diesem Werkzeug einen Algorithmus als unsicher gelten zu lassen.

Warum gibt es 2048 oder 256 Bit Schlüssel?

Diese Schlüssellängen werden in durch unterschiedliche Algorithmen und Protokolle verwendet. Es ist wichtig zu unterscheiden zwischen zwei ganz wesentlichen Verfahren:

  1. Symmetrische Verschlüsselung
  2. Asymmetrische Verschlüsselung

Symmetrische Verschlüsselung

Schlüssel mit einer Länge von 256 Bit werden bei den meisten, uns wohlbekannten Kryptosystemen verwendet wie AES, Twofish oder Blowfish (Symmetrische Verfahren). Wenn du AES nutzt, gehst du davon aus, dass dein Partner bereits den gleichen Schlüssel, wie du hat. Dies setzt etwas sehr elementares voraus:

Der Schlüssel muss vorher über einen sicheren Weg ausgetauscht werden.

Das ist fast alles, was du wissen musst, wenn es um AES geht. Es gibt selbstverständlich Verfahren, die verwendet werden können, wie AES seine einzelnen Blöcke in einer Nachricht kodiert. Hier gibt es Unterschiedliche Herangehensweisen, von denen ich zwei kurz vorstellen möchte:

  • AES-256-CBC
  • AES-256-CTR

Der CBC Modus ist äußerst interessant, denn es umgeht folgendes Problem: Angenommen du hast eine Nachricht von vielen KBytes und möchtest diese Verschlüsseln. AES trennt alles in Blöcke auf und nehmen wir an jeder Buchstabe wird mit ein und dem selben Schlüssel umgewandelt ist ein Chiffre. Das wird zur Folge haben, dass jeder Output IMMER den gleichen Input voraussetzt. Das ist absolut nicht in Ordnung und wir mit diesem schönen Beispielfall gezeigt:

Original:

Wie oben beschrieben verschlüsselt (ECB):

Tux Tux ecb

Man erkennt sofort die Schwachstellen des beschriebenen Algorithmus. Muster werden erkennbar und dadurch ist die Verschlüsselung hinfällig.

CBC – Cipher Block Chaining

Bei diesem Modus wird ein verschlüsselter Block nicht einfach nur ausgegeben. Er wird als Teil des Schlüssels verwendet, der den nächsten Block verschlüsselt. Dadurch erreicht AES eine wesentlich höhere Entropie und damit ein viel chaotischeres Bild. Da ein Bild mehr als 1000 Worte spricht, hier die beispielhafte Darstellung:
CBC encryption

CTR – Counter Mode Encryption

In diesem Fall leidet die Entropie ein klein wenig. Dafür ist der CTR Modus hochgradig skalierbar. Wieso? Ganz einfach: Die Verschlüsselung der fortlaufenden Blöcke hängt nicht von den vorherigen mehr ab. Stattdessen fügt man einen Counter hinzu, also einen Blockzähler als Eingangsvariable und den sogenannten Nonce Wert. Dieser muss zwingend zufällig gewählt werden und das für jeden Veschlüsselungsvorgang.

CTR encryption 2

Es gibt noch weitere Formen, auf die ich aber nicht näher eingehe. Wichtiger als die vielen anderen Möglichkeiten ist die Sicherheit von AES an dieser Stelle. Das was in den Boxen block cipher encryption passiert, ist bei richtiger Verwendung sicher. Bis heute ist es niemandem gelungen AES in seiner Gänze zu brechen. Das heißt:

Niemand kann aus einer Chiffre die originale Botschaft wiederherstellen ohne den verwendeten Schlüssel.

Für alle hier interessieren empfehle ich folgenden Link zu Google Schoolar. Hier gibt es regelmäßig die neuesten wissenschaftlichen Veröffentlichungen, darunter auch neue Angriffe auf AES.

Blog aktiv unterstützen

Asymmetrische Verschlüsselung

Die asymmetrische Verschlüsselung ist zwar ein eigener Bereich der Kryptographie, liefert dir aber die Lösung für und ein großes Problem der symmetrischen Verschlüsselung.

Der sichere Austausch eines Schlüssels zwischen Kommunikationspartnern.

Algorithmen wie RSA oder ElGamal (beides asymmetrische Kryptographieverfahren) können auch selbstständig verschlüsseln und brauchen AES oder andere Systeme nicht. Allerdings, und das ist ihr Nachteil, sind sie wesentlich langsamer. Ich gehe deshalb nicht darauf ein wie man mit diesen Algorithmen verschlüsselt, sondern wähle den praxisnahen Weg.

RSA’s Sicherheit basiert einzig und allein auf der Tatsache, dass es keinen Algorithmus gibt, der eine Zahl, in annehmbarer Zeit, in zwei Primfaktoren zerlegt. Als Ausgangszahlen werden zwei Primzahlen p und q zufällig durch einen Kommunikationsteilnehmer gewählt. Die Multiplikation daraus ergibt:

N = p * q

Multiplizierst du nun zwei große Primzahlen erhältst du eine gewaltige zusammengesetzte Zahl, die die Basis aller weiteren Berechnungen bildet. Wird das N in Zukunft durch Quantenprozessoren schneller in p und q umgewandelt, haben wir einige Probleme, da TLS/SSL beispielsweise gern auf diese Funktionalität setzt.

Ich möchte an dieser Stelle nicht weiter mit Mathematik langweilen, auch wenn ich diese spannend finde :-)

Mehr über die Mathematik hinter RSA findest du hier:

Zusammengefasst

Wir haben also einen Algorithmus, um über unsichere Kanäle (Internet etc.) Schlüssel aus zu tauschen. Jeder von uns erzeugt ein Paar:

  • öffentlich
  • privat

Den privaten behalten wir, mit diesem können wir Entschlüsseln. Den öffentlichen geben wir allen Freunden. Diese können damit verschlüsseln, aber sie nutzen dann nicht mehr RSA, sondern AES, damit sie schneller die großen Datenmengen verschlüsseln können. Wir erhalten die Chiffre und entschlüsseln mit dem privaten Schlüssel (wieder AES) und siehe da, die Daten sind lesbar.

Soweit die Theorie. In der Praxis wird das ganze über Protokolle wie TLS realisiert. Wie das jetzt funktioniert? Das ist ein ein eigenes Thema für sich! Aber ich möchte dir keine Informationen vorenthalten. Am besten du liest dir ein paar RFCs durch. Fange doch gleich mit diesen hier an:

Bücher zum Thema

 

Beitragsbild: Binary Code von Christiaan ColenCC BY-SA 2.0

Artikel teilen:

Kommentar verfassen