Kryptographie und Zugriffskontrolle - Symmetrische Verfahren
Symmetrische Verfahren
Die wichtigste Eigenschaft eines symmetrischen Verfahrens ist, dass der Secret Key bei der Verschlüsselung gleich dem Key bei der Entschlüsselung ist, daher gilt . Für die Entschlüsselung, benötigt der Empfänger den Secret Key des Absenders bzw. Erstellers. Daher muss der Schlüssel über einen sicheren Kanal zwischen Sender und Empfänger ausgetauscht werden.
Symmetrische Algorithmen basieren auf einfachen Operationen wie Shifts oder Exclusive OR - Verknüpfungen (XOR) und sind somit dementsprechend schnell, da sie auch gut in Hard- und Software implementierbar sind. Sie treten entweder als Block- oder als Stromchiffren auf, die in den nachfolgenden Kapiteln 1.1 und 1.2 im Detail behandelt werden. Stromchiffren verschlüsseln jedes Bit des Plaintext Streams einzeln und kontinuierlich mit dem Key Stream. Blockchiffren hingegen verschlüsseln einen ganzen Block des Plaintextes mit dem Secret Key beziehungsweise einem Rundenschlüssel.
Stromchiffren
Bei Stromchiffren (engl. Stream Cipher) wird der Klartext als Stream kontinuierlich verschlüsselt. Das heißt, dass Klartext in der Größe von, zum Beispiel, 1-Bit, zeichenweise verschlüsselt wird. Der Klartext wird sequentiell abgearbeitet. Die Verschlüsselung geschieht anhand eines pseudozufälligen Bitstroms der mit dem Plaintext verknüpft wird (zum Beispiel durch XOR).
Nach Verschlüsselung eines Zeichens kann dieses sofort an den Empfänger weitergeleitet werden. Daher eignen sich Stromchiffren auch sehr gut für Übertragungen die in Echtzeit ablaufen müssen, wie beispielsweise Telefonie.
RC4
Die RC4-Cipher (Ron’s Code 4) wurde im Jahr 1987 von Ronald Rivest, einem Mitarbeiter von RSA Data Security, entwickelt. Die Funktionsweise von RC4 wurde lange geheimgehalten. Aufgrund dessen konnte die Sicherheit von RC4 lange nicht geprüft werden. Um RC4 verwenden zu dürfen mussten auch Lizenzkosten an RSA gezahlt werden. 1994 fand der Algorithmus über eine anonyme Veröffentlichung in einer Mailingliste seinen Weg an die Öffentlichkeit. Um Streitigkeiten mit RSA zu vermeiden wurde der veröffentlichte Algorithmus ARCFOUR genannt. RC4 ist sehr einfach implementierbar und schnell. Sie erfreute sich hoher Beliebtheit und fand früher Anwendung im SSH, SSL beziehungsweise TLS und WEP Protokoll. Sie gilt aber mittlerweile als unsicher und von ihrer Verwendung wird abgeraten .
Funktionsweise:
RC4 hat besteht aus zwei Elementen, dem Key - Scheduling Algorithm (KSA) und dem Pseudo Random Generation Algorithm (PRGA).
Der KSA befüllt ein Array von 0 bis 255. Anhand des Secret Keys mit variabler Länge (40 bis 256-Bit) wird dieses Array in eine pseudo-zufällige Reihenfolge gebracht. Dies geschieht anhand von Substitution, daher die Elemente innerhalb des Arrays werden untereinander vertauscht. Das Array wird auch als S-Box beziehungsweise Substitutions-Box bezeichnet. Ist die S-Box vollständig befüllt wird durch den PRGA eine weitere Substitution vorgenommen. Dabei werden die Elemente in der S-Box erneut mittels einem Array, das anhand des Secret Keys generiert wird, vertauscht. Als letzter Schritt wird der Cipherstream mit dem Plaintext bitweise XOR verknüpft.
Blockchiffren
Bei Blockchiffren (engl. Block Cipher) wird der Klartext vor der Verschlüsselung in Blöcke fester Größe eingeteilt. Typische Blockgrößen sind zum Beispiel 64-Bit, 128-Bit, etc. Die Größe des Blocks gibt der verwendete Algorithmus vor. Die Verschlüsselung findet dann blockweise und in mehreren Runden statt. Für eine Runde wird üblicherweise ein eigener Rundenschlüssel verwendet, um Konfusion zu erreichen. Außerdem wird innerhalb einer Runde eine Substitutions-Box (S-Box) verwendet. Dies erzeugt die gewünschte Diffusion. Der letzte Block wird dann mittels eines Füllmuster auf die entsprechende Blockgröße gefüllt. Dies wird als Padding bezeichnet. Der Paddingbereich wird durch eine definierte Bitfolge als solches gekennzeichnet, sonst gäbe es bei der Entschlüsselung Probleme. Blockchiffren können nur dann eingesetzt werden, wenn der gesamte Plaintext bereits vor der Verschlüsselung vorliegt. Anwendungsbereiche für Blockchiffren sind zum Beispiel Datei- oder E-Mail Verschlüsselung.
Betriebsmodi
Der Betriebsmodus (engl. Mode of Operation) gibt das Verfahren an, welches auf einen einzelnen Block angewendet wird. Die meisten der Betriebsmodi verwenden einen sich abwechselnden Initialisierungsvektor (IV) der in den Verschlüsselungsprozess einfließt . Damit wird sichergestellt, dass ein und der selbe Plaintext immer einen anderen Ciphertext ergibt.
Electronic Code Book (ECB): Dies ist der einfachste Modus. Jeder Block wird auf dieselbe Art und Weise verschlüsselt. Daher ergibt ein und derselbe Plaintext auch immer den selben Ciphertext. ECB ist für die kryptographische Anwendung nicht empfohlen.
Cipher Block Chaining Mode (CBC): Bei CBC wird jeder Block der Reihe nach verschlüsselt. Vor der Verschlüsselung wird jedoch noch der Plaintext mit dem Ciphertext der letzten Runde XOR verknüpft. Für den ersten Block beziehungsweise die erste Runde wird ein Initialisierungsvektor verwendet. Dieser kann aus einem Zeitstempel oder einer zufälligen Zahlenfolge generiert werden.
Output Feedback Mode (OFB): Beim OFB wird eine Blockchiffre dazu verwendet eine Stromchiffre zu erzeugen. Der Schlüsselstrom wird allerdings nicht Bit für Bit, sondern als Block generiert. Zu Beginn wird dafür ein Initialisierungsvektor mittels Blockchiffre verschlüsselt. Der Ausgabeblock dient als Stream und wird wieder als Eingangswert für die Blockchiffre verwendet (daher der Name Output Feedback). Der als Stream verwendete Block wird dann mit dem Plaintext XOR verknüpft.
Cipher-Feedback Mode (CFB): Der CFB ist wieder ein Betriebsmodus, welcher sich einer Blockchiffre zur Hilfe nimmt. Er ist sehr ähnlich dem OFB. Der wesentliche Unterschied ist, dass beim CFB der bereits verschlüsselte Block (daher der Name Cipher Feedback) als Eingabewert für den nächsten Block dient.
Counter Mode (CTR): Der CTR Modus, verwendet wie OFB und CFB eine Blockcipher als Stromchiffre. Für die Berechnung des neuen Schlüsselstroms wird ein Zähler verwendet. Für die erste Runde dient wiederum ein Initialisierungsvektor.
Galois Counter Mode (GCM): Der GCM hat neben seiner Verschlüsselungs - Funktion als Betriebsmodus auch die Möglichkeit einen MAC zu generieren (siehe Kapitel [MAC]). Mithilfe des MAC kann der Empfänger überprüfen, ob die Nachricht wirklich vom Absender stammt und ob die Nachricht manipuliert wurde. Mit anderen Worten, kann daher die Authentizität und die Integrität der Nachricht überprüft werden. Der GCM verschlüsselt die Daten nach dem Counter Mode (siehe oben). Anschließend wird der MAC berechnet. Dafür wird eine Blockgröße von 128-Bit verwendet. Somit könnte beispielsweise AES als AES-CGM verwendet werden. Der Berechnung des MAC liegt die Multiplikation im Galois Körper (endliche Körper) zugrunde.
Eine Variante von GCM wird als GMAC zur Berechnung von Hashwerten verwendet . Beim GMAC wird auf die Verschlüsselung verzichtet und nur der MAC berechnet. Durch die hohe Geschwindigkeit vom GMAC wird er oft in Bereichen eingesetzt in welchen eine schnelle Überprüfung der Datenintegrität zu gewährleisten ist, beispielsweise bei IPSec oder Fehlererkennungsverfahren.
Data Encryption Standard
Der Data Encryption Standard Algorithmus (DES) wurde in den 1970er Jahren von IBM, dem National Bureau of Standards (NBS) [1] und der NSA entwickelt . DES wurde nach seiner Veröffentlichung im Jahr 1977 zum Standard für alle US-Behörden erklärt. Durch die geringe Schlüssellänge von nur 56-Bit wurde vermutet, dass die NSA zu diesem Zeitpunkt bereits über ausreichend Rechenkapazität verfügte um DES durch einen Brute-Force Angriff zu entschlüsseln. Dazu müsste man alle möglichen (entspricht etwa 72 Billiarden) Schlüssel ausprobieren.
Funktionsweise:
DES arbeitet mit einer Blockgröße von 64-Bit. Allerdings wird jedes achte Bit als Paritätsbit verwendet. Als reale Blockgröße bleiben daher 56-Bit übrig. Der Algorithmus durchläuft insgesamt 16 Runden. Zuerst wird auf den gesamten 64-Bit Block wird eine initiale Substitution durchgeführt und anschließend der Block in zwei 32-Bit Hälfte aufgeteilt. Auf der rechten Hälfte wird die sogenannte Feistel-Funktion angewandt und anschließend mit der linken Hälfte XOR verknüpft. Das Ergebnis wird für die nächste Runde in der rechten Hälfte gespeichert. Die linke Hälfte der nächsten Runde beinhaltet die ursprüngliche rechte Hälfte. So werden alle 16 Runden durchlaufen. Nach der letzten Runde werden die beiden Hälften wieder zusammengeführt und eine finale Substitution durchgeführt. Im Jahr 1994 wurde eine theoretischer Angriff zu DES veröffentlicht, welcher auch 1998 praktisch durch Brute-Force nachgewiesen werden konnte . Dabei wurde DES in wenigen Stunden gebrochen.
3DES stellt eine Weiterentwicklung von DES dar. Bei 3DES wird DES dreimal, allerdings mit unterschiedlichen Schlüsseln durchgeführt.
Advanced Encryption Standard
DES wurde im Jahr 2001 durch den Advanced Encryption Standard (AES) durch die NIST abgelöst . Entwickelt wurde AES von den Belgiern Joan Daemon und Vincent Rijmen und wird deswegen auch als Rijndael-Cipher bezeichnet. Die Blockgrößen beziehungsweise Schlüssellängen bei AES sind variabel und voneinander unabhängig. Prinzipiell ist der Algorithmus so entworfen worden, dass die Blockgröße und die Schlüssellänge voneinander unabhängig die Werte 128, 160, 192, 224 oder 256-Bit annehmen können . Bei AES wurde die Blocklänge selbst wird auf 128-Bit beschränkt, die Schlüssellänge hingegen kann 128-, 192- oder 256-Bit lang sein.
rounds | b(128) | b(192) | b(256) |
---|---|---|---|
k(128) | 10 | 12 | 14 |
k(192) | 12 | 12 | 14 |
k(256) | 14 | 14 | 14 |
Funktionsweise:
AES basiert auf einem Prinzip, dass als Substitutions-Permutations-Netzwerk (SPN, engl. Substitution Permutation Network) bezeichnet wird . Zuerst werden die einzelnen Blöcke in zweidimensionale Tabellen mit 4 Zeilen geschrieben. Je nach Blockgröße variiert die Anzahl der Spalten von 4 (bei 128-Bit) und 8 (bei 256-Bit). In Runden werden nun Teile des Secret Keys mittels Transformationen auf den Klartextblock angewendet. Die Anzahl der Runden ist wiederum abhängig von der Schlüssellänge und der Blockgröße, siehe Tabelle 1.1. AES hat im Vergleich zu DES weniger Runden, da bei AES in jeder Runde die gesamte unterstützte Blockgröße von 128-Bit verschlüsselt wird. AES besteht aus 3 Schichten, die (mit Ausnahme der letzten, bei welcher MixColumns nicht durchgeführt wird) in jeder Runde angewendet werden.
Die Schichten die pro Runde durchlaufen werden, sind folgende:
- Key-Addition-Layer: Ein Rundenschlüssel mit 128-Bit wird mittels XOR auf die Daten angewendet. Der Rundenschlüssel wird aus dem Hauptschlüssel generiert.
- Byte-Substitution-Layer: Hierbei handelt es sich um eine Substitutions-Box. Dabei wird jedes byte über eine nicht lineare Transformation durch ein anderes ersetzt. Es entsteht dadurch die gewünschte Konfusion.
- Diffusion-Layer: Diese Schicht besteht aus zwei Elementen. Mittels ShiftRow werden die Daten permutiert. Mit MixColumn werden jeweils 4 bytes mittels einer Matrixoperation durchgewürfelt.
- ↑ dem Vorgänger des National Institutes of Standards and Technology (NIST)