Kryptografie: Symmetrisch geheim

RC4

Die Stromchiffre RC4 wurde 1987 von RSA Security entwickelt und gilt bis heute als Geschäftsgeheimnis. Allerdings fand sich 1994 eine Beschreibung des Quellcodes auf einer Mailingliste, die den Nachbau des Algorithmus ermöglicht. Durch Vergleiche mit durch die offizielle Bibliothek verarbeiteten Chiffraten konnte die Authentizität des Algorithmus bewiesen werden. Er ist – trotz bekannter Schwachstellen – in diversen offenen Protokollen wie BitTorrent, TLS und sogar WPA im Einsatz. In Wikipedia findet sich eine Beispielimplementierung, die uns bei der Erklärung des Konzepts gute Dienste leisten wird (Listing 5).

Listing 5
unsigned char S[256];
unsigned int i, j;
 
void swap(unsigned char *s, unsigned int i, unsigned int j) {
    unsigned char temp = s[i];
    s[i] = s[j];
    s[j] = temp;
}
 
/* KSA */
void rc4_init(unsigned char *key, unsigned int key_length) {
    for (i = 0; i 

Die Funktion KSA ist hier für die Initialisierung der Schlüsseldaten erforderlich. Nach der Initialisierung liefert jeder Aufruf der Funktion rc4_output ein Byte, das mit einem Byte der Nutznachricht „verXORt“ wird. Bei der Entschlüsselung erfolgt der gleiche Prozess in umgekehrter Reihenfolge. Der Nachteil einer Stromchiffre wie RC4 ist, dass man nicht ohne Weiteres auf Teile des Chiffrats zugreifen kann. Befindet sich das gesuchte Datenwort beispielsweise im Byte 1024 des Chiffrats, muss man rc4_output 1024 Mal aufrufen, um das gewünschte XOR-Byte zur Entschlüsselung zu erhalten.

Block Ciphers auf Steroiden

Aufgrund dieser – bei der Verarbeitung großer Datenmengen enorm lästigen – Eigenschaft von Strom-Ciphern wurde schon bald nach Methoden gesucht, die die Verwundbarkeit von Block-Ciphern gegen statistische Angriffe reduzieren können. Im Laufe der Zeit wurde eine Unzahl von Methoden entwickelt [2], die alle auf dem gleichen Prinzip basieren: Der zu verschlüsselnde Block wird vor der eigentlichen Verschlüsselung mit einem zweiten Wert „gesalzen“, der von irgendetwas anderem (nicht jedoch dem Wert des Blocks) abhängig ist.

Abb. 1: Vor der eigentlichen Verschlüsselung werden „Salz“ und Nutzdaten verbunden

Am Beispiel der Abbildung 1 sieht man, dass dadurch identische Blöcke des Eingangstexts zu verschiedenen Chiffratblöcken führen. Denn Chiffrat (A + Salz A) ist in den seltensten Fällen gleich Chiffrat (B + SalzB) – unterschiedliche „Salze“ werden hier vorausgesetzt.

CBC

Ein in der Praxis sehr populärer Prozess ist Cipher Block Chaining, besser bekannt als CBC (Abb. 2).

Abb. 2: CBC – grafisch erklärt

Vor der Verarbeitung des ersten Datenblocks wird ein als Initialization Vector bezeichneter Wert ermittelt (Zeitstempel, Zufallszahl etc). Dieser wird vor der Verschlüsselung des ersten Datenblocks mit diesem „geXORt“. Das Ergebnis der Verschlüsselung wird mit dem nächsten Datenblock „geXORt“ und so weiter. Dadurch wird eine statistische Analyse erschwert, die stellenweise Entschlüsselung allerdings nicht signifikant behindert – jeder Datenblock ist nur von seinem verschlüsselten Vorgängerblock abhängig.

Wenn man den CBC-verschlüsselten Wert des letzen Nachrichtenblocks an eine Nutznachricht anhängt und mit ihr gemeinsam überträgt, kann der Algorithmus sogar zur Integritätssicherung (CBC-MAC-Verfahren) dienen. Das funktioniert, da der Empfänger den CBC-Wert seines Klartexts berechnet – stimmt der gesendete Restwert nicht mit dem aus den übertragenen Nutzdaten berechneten überein, ist ein Übertragungsfehler aufgetreten.

Allgemein gilt es als höchst empfehlenswert, Blockchiffren immer in CBC oder einem anderen derartigen Modus zu verwenden. Die „unverzahnte“ Anwendungsmethode nennt man ECB (Electronic Code Book) – als Anspielung darauf, dass der Verschlüsselungsalgorithmus zu einer Lookup-Tabelle „lobotomiert“ wird.

Fazit

Symmetrische Algorithmen sind aus gutem Grund die meistverwendete Verschlüsselungsmethode: Sie arbeiten schnell, sind simpel zu implementieren und trotzdem sehr sicher. Ihre Schwäche liegt im zwangsweise erforderlichen Schlüsselaustausch: Wenn man den Schlüssel austauschen muss, könnte man bei dieser Gelegenheit auch gleich die ganze Botschaft austauschen. Hier setzen symmetrische Verschlüsselungsalgorithmen an: Sie verwenden einen öffentlichen Schlüssel zur Verschlüsselung der Daten. Wer das Chiffrat entschlüsseln will, braucht einen separaten privaten Schlüssel. Doch mehr zu diesem Thema im nächsten Teil der Serie.

Tam Hanna befasst sich seit der Zeit des Palm IIIc mit Programmierung und Anwendung von Handcomputern. Er entwickelt Programme für diverse Plattformen und betreibt außerdem mehrere populäre Onlinenewsdienste zum Thema.
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.