Crypto Projekt - Exam
Aufgabe 1)
Angenommen, Du bist verantwortlich für die Implementierung und Sicherheitsbewertung eines Systems, das den AES-Algorithmus zur symmetrischen Verschlüsselung verwendet. Du hast dich entschieden eine Verschlüsselung mit einem 256-Bit Schlüssel zu verwenden. Betrachte folgendes Szenario, um konkrete Fragen zu beantworten.
a)
Beschreibe den Prozess des AES-Verschlüsselungsalgorithmus im Detail. Gehe dabei insbesondere auf die verschiedenen Schritte ein, die in jeder Runde des Algorithmus durchgeführt werden. Erkläre, wie diese Schritte zur Sicherheit des Verfahrens beitragen.
Lösung:
Der AES (Advanced Encryption Standard) ist ein weitverbreiteter symmetrischer Verschlüsselungsalgorithmus, der Daten in Blöcken von 128 Bits verschlüsselt. Bei einem 256-Bit Schlüssel durchläuft der AES-Algorithmus 14 Runden. Jede Runde des Algorithmus besteht aus vier grundlegenden Schritten: SubBytes, ShiftRows, MixColumns und AddRoundKey. Hier ist eine detaillierte Beschreibung der einzelnen Schritte und ihrer Beiträge zur Sicherheit:
- SubBytes: In diesem Schritt wird jedes Byte des Zustands durch ein anderes Byte ersetzt, basierend auf einer vorgegebenen S-Box (Substitution Box). Die S-Box ist eine nicht-lineare Substitutionstabelle, die vorab definiert ist. Dieser Schritt sorgt für nicht-lineare Transformationen, was die Daten weniger anfällig für lineare Kryptoanalysen macht. Mathematisch kann man dies als:
- ShiftRows: Hier werden die Reihen der Matrix, die den Block darstellt, zyklisch verschoben. Jede Reihe wird um einen anderen Offset verschoben: Die erste Reihe bleibt unverändert, die zweite Reihe wird um ein Byte nach links verschoben, die dritte um zwei Bytes und die vierte um drei Bytes. Dies erhöht die Verbreitung (Diffusion) der Bytes über den Block hinweg.
- MixColumns: In diesem Schritt werden Spalten der Block-Matrix durch multiplikatives Mischen über einem Galois-Feld transformiert. Dies sorgt dafür, dass die Modifikation eines einzelnen Bytes im Klartext sich über den gesamten Ausgabe-Block erstreckt, was zur Diffusion beiträgt. Mathematisch kann dies durch eine Matrixmultiplikation über einem Galois-Feld dargestellt werden:
- AddRoundKey: Der aktuelle Zustand wird mit dem Rundenschlüssel (der aus dem ursprünglichen Schlüssel durch einen Schlüsselableitungsprozess generiert wird) mittels bitweiser XOR-Operation kombiniert. Dies fügt die Abhängigkeit vom Schlüssel hinzu und erhöht die Komplexität der Verschlüsselung. Die Formel für die XOR-Operation ist:
Ein verschlüsselter Textblock durchläuft nacheinander diese vier Schritte in jedem der 14 Runden (bei einem 256-Bit-Schlüssel). Die ersten und letzten Runden unterscheiden sich leicht: In der ersten Runde wird kein MixColumns-Schritt durchgeführt; in der letzten Runde wird keine zusätzliche Round-Key hinzugefügt. Durch die Kombination dieser Schritte stellt AES sicher, dass jede Änderung im Klartext oder im Schlüssel eine völlig andere Chiffretext erzeugt, was die Sicherheit des Verfahrens erheblich verbessert.
c)
AES operiert in Blöcken fester Größe von 128 Bit. Erläutere die Herausforderungen und Lösungen beim Verschlüsseln von Daten, die nicht genau dieser Blockgröße entsprechen. Führe die verschiedenen Paddingschemen auf und erkläre eines davon im Detail.
Lösung:
Der AES (Advanced Encryption Standard) Algorithmus arbeitet mit einer festen Blockgröße von 128 Bit (16 Bytes). Wenn die zu verschlüsselnden Daten nicht exakt dieser Blockgröße entsprechen, müssen spezielle Maßnahmen ergriffen werden, um die Daten auf die erforderliche Blockgröße zu bringen. Diese Maßnahmen werden als Padding bezeichnet. Padding ist notwendig, um sicherzustellen, dass jeder Block exakt 128 Bit groß ist, da AES ansonsten die Verschlüsselung nicht korrekt durchführen kann.
Herausforderungen beim Verschlüsseln von Daten, die nicht der Blockgröße entsprechen:
- Ungleichmäßige Blockgrößen: Daten, die kleiner als 128 Bit sind oder deren Größe kein Vielfaches von 128 Bit ist, passen nicht in einen AES-Block.
- Sicherheitsrisiken: Unsachgemäßes Padding kann zu Sicherheitslücken führen, da bestimmte Padding-Muster von Angreifern erkannt und ausgenutzt werden können.
Lösungen:
Verschiedene Padding-Schemata wurden entwickelt, um diese Herausforderungen zu bewältigen. Hier sind einige der gängigen Padding-Schemata:
- PKCS#7 (Public-Key Cryptography Standards #7)
- ISO/IEC 7816-4
- ANSIX9.23
- Zero Padding
- One and Zero Padding (Bit Padding)
Erklärung des PKCS#7 Paddings:
PKCS#7 ist eines der bekanntesten und am häufigsten verwendeten Padding-Schemata. Es wird wie folgt durchgeführt:
- Jedes Byte im Padding-Block hat den gleichen Wert, der der Anzahl der hinzugefügten Padding-Bytes entspricht.
- Zum Beispiel, wenn 4 Bytes benötigt werden, um einen Block zu füllen, würde das Padding aussehen wie: 04 04 04 04.
Hier ist ein detaillierter Ablauf:
- Bestimme die Anzahl der Bytes, die für das Padding benötigt werden, um den Block auf 128 Bit (16 Bytes) zu füllen. Das wird durch \(\text{Padding-Bytes} = 16 - (\text{Länge der Daten} \% 16)\) berechnet.
- Füge die Berechnete Anzahl an Padding-Bytes hinzu. Jeder dieser Bytes hat den gleichen Wert, der der Anzahl der hinzugefügten Bytes entspricht.
Beispiel:
Angenommen, die Datenlänge beträgt 13 Bytes:
- Berechne die Anzahl der benötigten Padding-Bytes: \(\text{Padding-Bytes} = 16 - (13 \% 16) = 3\).
- Füge 3 Padding-Bytes hinzu, wobei jeder Byte den Wert 3 (in hexadezimal 0x03 oder Dezimal 3) hat: 03 03 03.
Die gepaddeten Daten sehen also folgendermaßen aus: [Daten, 03 03 03]
.
Durch die Verwendung von PKCS#7 Padding kann sichergestellt werden, dass die Daten immer auf eine Blockgröße von 128 Bit aufgefüllt werden, und es erlaubt AES, die Daten korrekt und sicher zu verschlüsseln.
d)
Stelle Schritt für Schritt dar, wie ein Datenblock mithilfe des AES-Algorithmus und eines 256-Bit Schlüssels entschlüsselt wird. Erläutere, wie sich der Entschlüsselungsprozess vom Verschlüsselungsprozess unterscheidet und wie sich dies auf die Sicherheit des Systems auswirkt.
Lösung:
Die Entschlüsselung eines Datenblocks mit dem AES-Algorithmus und einem 256-Bit-Schlüssel erfolgt in mehreren Schritten. Der Entschlüsselungsprozess ist der Umkehrprozess der Verschlüsselung und nutzt die gleichen Schlüssel und Transformationen, jedoch in umgekehrter Reihenfolge und unter Verwendung inverser Operationen.
Hier ist eine Schritt-für-Schritt-Darstellung des Entschlüsselungsprozesses:
- Schlüsselableitung: Der 256-Bit-Schlüssel wird durch eine Schlüsselableitungsroutine in eine Serie von Rundenschlüsseln umgewandelt. Für einen 256-Bit-Schlüssel werden 15 Rundenschlüssel erzeugt (einer für die Initialisierung und 14 für die Entschlüsselungsrunden).
- Initiale AddRoundKey: Der Chiffretext wird durch eine XOR-Operation mit dem letzten Rundenschlüssel (abgeleitet aus dem 256-Bit-Hauptschlüssel) kombiniert.
- Runden 1 bis 13 (umgekehrte Reihenfolge): Diese 13 Runden erfolgen in umgekehrter Reihenfolge der Verschlüsselungsrunden und bestehen aus den folgenden Schritten:
- InvShiftRows: Die Byte-Reihen der Blockmatrix werden zyklisch nach rechts verschoben, was die Verschiebungen im Schritt ShiftRows während der Verschlüsselung rückgängig macht.
- InvSubBytes: Jedes Byte des Zustands wird durch das entsprechende Byte in der inversen S-Box ersetzt, was die Substitutionen im Schritt SubBytes rückgängig macht.
- InvMixColumns: Die Spalten der Blockmatrix werden mit der inversen MixColumns-Transformation gemischt, um die Operation MixColumns während der Verschlüsselung rückgängig zu machen.
- AddRoundKey: Der aktuelle Zustand wird mit dem entsprechenden Rundenschlüssel durch eine XOR-Operation kombiniert.
- Letzte Runde (14. Runde): Die letzte Runde unterscheidet sich leicht, da der Schritt InvMixColumns hier nicht durchgeführt wird. Sie besteht aus den Schritten InvShiftRows, InvSubBytes und AddRoundKey.
- Extraktion des Klartexts: Nach Abschluss der letzten Runde erhält man den ursprünglichen Klartext.
Unterschiede zum Verschlüsselungsprozess:
- Die Reihenfolge der Rundenschlüssel: Bei der Entschlüsselung werden die Rundenschlüssel in umgekehrter Reihenfolge der Verschlüsselungsrunden verwendet.
- Inversion der Operationen: Jede Transformation im Entschlüsselungsprozess ist die inverse Operation der entsprechenden Verschlüsselungstransformation (z.B. InvShiftRows statt ShiftRows, InvSubBytes statt SubBytes, etc.).
Auswirkungen auf die Sicherheit:
- Symmetrie der Operationen: Da die gleichen Rundenschlüssel in umgekehrter Reihenfolge verwendet werden und die inverse Operationen durchgeführt werden, bleibt die Sicherheit des Algorithmus gleich groß. Die inversen Operationen sind aufgrund ihrer komplizierten Natur und der Verwendung der S-Box sowie ihrer Inversen genauso sicher wie im Verschlüsselungsprozess.
- Robustheit des AES-Algorithmus: Die strukturelle Stärke des AES-Algorithmus, wie beispielsweise die nicht-linearen Substitutionen und die komplexen Schlüssel- und Inversionsoperationen, garantiert, dass die Daten sicher verschlüsselt und entschlüsselt werden können.
- Unpraktikabilität der rückwärtsgerichteten Kryptoanalyse: Der Entschlüsselungsprozess ist so gestaltet, dass eine einfache Umkehrung der Schritte ohne Kenntnisse des Schlüssels nicht möglich ist. Dies erhöht die Sicherheit und schützt vor Rückwärtskryptoanalyse.
Zusammenfassend ist der Entschlüsselungsprozess des AES-Algorithmus der inversen und umgekehrten Version des Verschlüsselungsprozesses, was eine sichere und zuverlässige Entschlüsselung gewährleistet, ohne die Sicherheit des Systems zu beeinträchtigen.
Aufgabe 2)
RSA: Asymmetrische Verschlüsselung und AnwendungenRSA ist ein asymmetrisches Kryptosystem, das zur sicheren Datenübertragung genutzt wird.
- Verwendet ein Schlüsselpaar: öffentlicher Schlüssel (für Verschlüsselung), privater Schlüssel (für Entschlüsselung).
- Sicherheit basiert auf der Faktorisierung großer Primzahlen.
- Schlüsselerzeugung: Wähle zwei große Primzahlen p und q, berechne das Produkt n = pq und die Eulersche Phi-Funktion \(\phi(n) = (p-1)(q-1)\).
- Öffentlicher Schlüssel: \((e, n)\), wobei der Exponent e ein Wert ist, der teilerfremd zu \(\phi(n)\) ist.
- Privater Schlüssel: \(d\), berechnet durch \((e \cdot d \equiv 1 \mod \phi(n))\).
- Verschlüsselung: \(c = m^e \mod n\), wobei \(m\) die Nachricht ist.
- Entschlüsselung: \(m = c^d \mod n\).
- Anwendungen: Digitale Signaturen, sicherer Schlüsselaustausch, Authentifizierung.
a)
Wähle zwei Primzahlen p = 61 und q = 53. Führe die RSA-Schlüsselerzeugung durch, um den öffentlichen und privaten Schlüssel zu bestimmen. Gib den vollständigen Schlüssel an und zeige jeden Schritt der Berechnungen.
Lösung:
RSA-Schlüsselerzeugung
- Schritt 1: Wähle zwei große Primzahlen:p = 61, q = 53
- Schritt 2: Berechne das Produkt n:
n = p \times q = 61 \times 53 = 3233
- Schritt 3: Berechne die Eulersche Phi-Funktion \(\phi(n) \):
\phi(n) = (p - 1)(q - 1) = (61 - 1)(53 - 1) = 60 \times 52 = 3120
- Schritt 4: Wähle einen öffentlichen Exponenten e:Ein häufiger Wert für e ist 65537, da es oft gut für Sicherheits- und Effizienzgründe ist. Wir müssen sicherstellen, dass e teilerfremd zu \(\phi(n)\) ist. Da 65537 und 3120 teilerfremd sind, wählen wir e = 65537.
- Schritt 5: Berechne den privaten Schlüssel d:d wird berechnet, indem man das modulare Inverse von e modulo \(\phi(n)\) berechnet. Das bedeutet, wir müssen d finden, so dass:
(e \times d) \equiv 1 \mod \phi(n)
Eine Methode, um diesen Wert zu finden, ist der erweiterte euklidische Algorithmus.Zwischenschritte zur Berechnung von d:- 65537 = 21 ⋅ 3120 + 17
- 3120 = 183 ⋅ 17 + 9
- 17 = 1 ⋅ 17 + 0
- 9 = 1 ⋅ 9 + 8
- 8 = 1 ⋅ 8 + 1
- 1 = 1 ⋅ 1 + 0
Mit dem erweiterten euklidischen Algorithmus erhalten wir schließlich d:d = 2753
Bestätigung:(65537 ⋅ 2753) mod 3120 = 1
- Endresultate:Öffentlicher Schlüssel (e, n): (65537, 3233)Privater Schlüssel (d, n): (2753, 3233)
Zusammenfassung:- Öffentlicher Schlüssel: (e, n) = (65537, 3233)
- Privater Schlüssel: (d, n) = (2753, 3233)
b)
Angenommen, Du möchtest die Nachricht m = 42 mit dem öffentlichen Schlüssel aus dem vorherigen Schritt verschlüsseln. Zeige den Verschlüsselungsprozess und berechne den verschlüsselten Text c.
Lösung:
RSA-VerschlüsselungsprozessKontext:RSA ist ein asymmetrisches Kryptosystem, das zur sicheren Datenübertragung genutzt wird.
- Verwendet ein Schlüsselpaar: öffentlicher Schlüssel (für Verschlüsselung), privater Schlüssel (für Entschlüsselung).
- Sicherheit basiert auf der Faktorisierung großer Primzahlen.
- Schlüsselerzeugung: Wähle zwei große Primzahlen p und q, berechne das Produkt n = pq und die Eulersche Phi-Funktion \(\phi(n) = (p-1)(q-1)\).
- Öffentlicher Schlüssel: \((e, n)\), wobei der Exponent e ein Wert ist, der teilerfremd zu \(\phi(n)\) ist.
- Privater Schlüssel: \(d\), berechnet durch \((e \cdot d \equiv 1 \mod \phi(n))\).
- Verschlüsselung: \(c = m^e \mod n\), wobei \(m\) die Nachricht ist.
- Entschlüsselung: \(m = c^d \mod n\).
- Anwendungen: Digitale Signaturen, sicherer Schlüsselaustausch, Authentifizierung.
Subexercise Lösungsschritte zur Verschlüsselung:Angenommen, Du möchtest die Nachricht m = 42 mit dem öffentlichen Schlüssel aus dem vorherigen Schritt verschlüsseln. Der öffentliche Schlüssel (e, n) = (65537, 3233).
Zusammenfassung:- Die verschlüsselte Nachricht c lautet: 2557
c)
Entschlüssel die verschlüsselte Nachricht c aus dem vorherigen Schritt mit dem privaten Schlüssel, den Du im ersten Schritt berechnet hast. Zeige den Entschlüsselungsprozess im Detail.
Lösung:
RSA-EntschlüsselungsprozessKontext:RSA ist ein asymmetrisches Kryptosystem, das zur sicheren Datenübertragung genutzt wird.
- Verwendet ein Schlüsselpaar: öffentlicher Schlüssel (für Verschlüsselung), privater Schlüssel (für Entschlüsselung).
- Sicherheit basiert auf der Faktorisierung großer Primzahlen.
- Schlüsselerzeugung: Wähle zwei große Primzahlen p und q, berechne das Produkt n = pq und die Eulersche Phi-Funktion \( \phi(n) = (p-1)(q-1) \).
- Öffentlicher Schlüssel: \((e, n)\), wobei der Exponent e ein Wert ist, der teilerfremd zu \( \phi(n) \) ist.
- Privater Schlüssel: \(d\), berechnet durch \(( e \cdot d \equiv 1 \mod \phi(n) )\).
- Verschlüsselung: \( c = m^e \mod n \), wobei \( m \) die Nachricht ist.
- Entschlüsselung: \( m = c^d \mod n \).
- Anwendungen: Digitale Signaturen, sicherer Schlüsselaustausch, Authentifizierung.
Subexercise Lösungsschritte zur Entschlüsselung:Entschlüssele die verschlüsselte Nachricht c aus dem vorherigen Schritt mit dem privaten Schlüssel, den Du im ersten Schritt berechnet hast. Der private Schlüssel (d, n) = (2753, 3233).
Zusammenfassung:- Die entschlüsselte Nachricht m lautet: 42
Aufgabe 3)
Hintergrund: Du bist beauftragt worden, eine sichere Kommunikationsverbindung zwischen zwei Parteien, Alice und Bob, einzurichten. Hierzu wollen die beiden das Diffie-Hellman-Schlüsselaustauschverfahren verwenden. Für das Verfahren wählen sie die Primzahl p = 23 und die Basis g = 5. Alice wählt als ihre private Zufallszahl a = 6 und Bob wählt b = 15.
a)
Berechne die öffentlichen Werte, die Alice und Bob aneinander schicken. Gib an, was Alice an Bob und Bob an Alice schickt.
Lösung:
- Hintergrund: Du bist beauftragt worden, eine sichere Kommunikationsverbindung zwischen zwei Parteien, Alice und Bob, einzurichten. Hierzu wollen die beiden das Diffie-Hellman-Schlüsselaustauschverfahren verwenden. Für das Verfahren wählen sie die Primzahl p = 23 und die Basis g = 5. Alice wählt als ihre private Zufallszahl a = 6 und Bob wählt b = 15.
Um die öffentlichen Werte zu berechnen, die sie aneinander schicken, führen wir die folgenden Berechnungen durch. Das Diffie-Hellman-Schlüsselaustauschverfahren verwendet die Formel:
- Öffentlicher Wert von Alice (A): A = g^a mod p
- Öffentlicher Wert von Bob (B): B = g^b mod p
- Berechnung des öffentlichen Wertes von Alice (A):g = 5, a = 6, p = 23
- Schritt 1: Erhöhe g auf die Potenz a:
- 5^6 = 15625
- Schritt 2: Berechne den Modulo p von 15625:
- 15625 mod 23 = 8
Ergebnis: Alice schickt an Bob den öffentlichen Wert A = 8 - Berechnung des öffentlichen Wertes von Bob (B):g = 5, b = 15, p = 23
- Schritt 1: Erhöhe g auf die Potenz b:
- 5^15 = 30517578125
- Schritt 2: Berechne den Modulo p von 30517578125:
- 30517578125 mod 23 = 19
Ergebnis: Bob schickt an Alice den öffentlichen Wert B = 19
b)
Empfange die öffentlichen Werte und berechne den gemeinsamen Schlüssel, den Alice und Bob unabhängig voneinander berechnen. Zeige jeden Schritt der Berechnung für sowohl Alice als auch Bob.
Lösung:
- Hintergrund: Du bist beauftragt worden, eine sichere Kommunikationsverbindung zwischen zwei Parteien, Alice und Bob, einzurichten. Hierzu wollen die beiden das Diffie-Hellman-Schlüsselaustauschverfahren verwenden. Für das Verfahren wählen sie die Primzahl p = 23 und die Basis g = 5. Alice wählt als ihre private Zufallszahl a = 6 und Bob wählt b = 15.
Um den gemeinsamen Schlüssel zu berechnen, den Alice und Bob unabhängig voneinander berechnen, müssen beide Parteien die folgenden Schritte durchführen:
- Öffentliche Werte:Von der vorherigen Berechnung wissen wir: - Alice sendet Bob den öffentlichen Wert A = 8 - Bob sendet Alice den öffentlichen Wert B = 19
- Schritte zur Berechnung des gemeinsamen Schlüssels:
- Alice (verwendet Bobs öffentlichen Wert B):
- Schritt 1: Erhalte B = 19 von Bob.
- Schritt 2: Berechne den gemeinsamen Schlüssel S: S = B^a mod p
- - Werte für Alice: B = 19, a = 6, p = 23
- Schritt 3: Berechnung:
- (1) Erhöhe B auf die Potenz a: 19^6 = 4704270176
- (2) Berechne den Modulo p von 4704270176: 4704270176 mod 23 = 2
- - Ergebnis: Der gemeinsame Schlüssel, den Alice berechnet, ist S = 2
- Bob (verwendet Alices öffentlichen Wert A):
- Schritt 1: Erhalte A = 8 von Alice.
- Schritt 2: Berechne den gemeinsamen Schlüssel S: S = A^b mod p
- - Werte für Bob: A = 8, b = 15, p = 23
- Schritt 3: Berechnung:
- (1) Erhöhe A auf die Potenz b: 8^15 = 35184372088832
- (2) Berechne den Modulo p von 35184372088832: 35184372088832 mod 23 = 2
- - Ergebnis: Der gemeinsame Schlüssel, den Bob berechnet, ist S = 2
- Schlussfolgerung: Beide, Alice und Bob, haben unabhängig voneinander denselben gemeinsamen Schlüssel S = 2 berechnet. Dieser gemeinsame Schlüssel kann nun für die sichere Kommunikation zwischen Alice und Bob verwendet werden.
c)
Erläutere, warum das Diffie-Hellman-Verfahren als sicher gilt. Diskutiere mögliche Schwachstellen und wie diese behoben werden können. Beziehe dich dabei auch auf mathematische Konzepte wie die Schwierigkeit des diskreten Logarithmusproblems.
Lösung:
- Hintergrund: Du bist beauftragt worden, eine sichere Kommunikationsverbindung zwischen zwei Parteien, Alice und Bob, einzurichten. Hierzu wollen die beiden das Diffie-Hellman-Schlüsselaustauschverfahren verwenden. Für das Verfahren wählen sie die Primzahl p = 23 und die Basis g = 5. Alice wählt als ihre private Zufallszahl a = 6 und Bob wählt b = 15.
Warum das Diffie-Hellman-Verfahren als sicher gilt:
- Schwer zu lösende mathematische Probleme: Die Sicherheit des Diffie-Hellman-Schlüsselaustauschs basiert auf der Schwierigkeit des diskreten Logarithmusproblems. - Diskretes Logarithmusproblem: Gegeben eine Primzahl p, eine Basis g und ein Resultat A = g^a \bmod p, ist es sehr schwierig, a herauszufinden. Das bedeutet, dass auch wenn ein Angreifer p, g und A (oder B) kennt, es für ihn praktisch unmöglich ist, den privaten Schlüssel a (oder b) zu berechnen.- Geheimsphäre: Die privaten Zufallszahlen a und b werden nie über die Internetverbindung übertragen. Nur die berechneten öffentlichen Werte A und B werden ausgetauscht.
- Kombination öffentlicher und privater Schlüsselaustausch: Selbst wenn ein Angreifer die öffentlichen Werte A und B abfängt, kann er den gemeinsamen geheimen Schlüssel nicht berechnen, ohne die privaten Werte a oder b zu kennen.
Mögliche Schwachstellen und Lösungen:
- Man-in-the-Middle-Angriffe: Ein Angreifer könnte sich zwischen Alice und Bob einklinken und deren Kommunikation abfangen und manipulieren.
- Lösung: Um MITM-Angriffe zu verhindern, ist es möglich, zusätzliche Authentifizierungsmaßnahmen wie digitale Signaturen oder Zertifikate zu verwenden. Diese Maßnahmen stellen sicher, dass die gesendeten Werte tatsächlich von den beabsichtigten Parteien stammen.
- Schwache Zufallszahlen: Wenn die privaten Zufallszahlen a und b schwach (d. h. leicht zu erraten) sind, könnte ein Angreifer diese erraten und den geheimen Schlüssel berechnen.
- Lösung: Starke, ausreichend lange Zufallszahlen sollten verwendet werden, um die Schwierigkeit des Erratens zu erhöhen.
- Rechenleistung: Moderne Computer und spezialisierte Algorithmen können in der Lage sein, diskrete Logarithmen für kleinere Primzahlen effizient zu lösen.
- Lösung: Die Verwendung von genügend großen Primzahlen (üblicherweise mindestens 2048 Bit), um sicherzustellen, dass selbst fortschrittliche Algorithmen und Hardware die Berechnungen nicht realistisch in nützlicher Zeit durchführen können.
Zusammenfassend beruht die Sicherheit des Diffie-Hellman-Verfahrens auf der Schwierigkeit des diskreten Logarithmusproblems und der geheimen Zufallszahlen, die nicht über die Internetverbindung übertragen werden. Mithilfe zusätzlicher Sicherheitsmaßnahmen wie Authentifizierung und starker Schlüssellängen kann das Verfahren weiter gesichert werden.
Aufgabe 4)
SSL/TLS-Protokolle und ihre ImplementierungSSL und TLS sind Kryptographieprotokolle, die sichere Kommunikation über Computernetzwerke gewährleisten. Werden verwendet, um Datenintegrität, Authentizität und Vertraulichkeit zu gewährleisten.
a)
Erkläre den Ablauf des TLS-Handshakes und beschreibe detailliert die Schritte, die zur Authentifizierung und zum Schlüsselaustausch zwischen Server und Client notwendig sind. Gehe dabei auch auf die verwendeten Algorithmen ein.
Lösung:
Der Ablauf des TLS-HandshakesDer TLS-Handshake ist ein vierphasiger Prozess, der auf sichere Weise eine Verbindung zwischen einem Client und einem Server herstellt. Hier ist eine detaillierte Beschreibung der Schritte, die zur Authentifizierung und zum Schlüsselaustausch notwendig sind, sowie der verwendeten Algorithmen:
- Schritt 1: Client HelloDer Client sendet eine Client-Hello-Nachricht an den Server. Diese Nachricht enthält:
- Die SSL/TLS-Version, die der Client unterstützt.
- Eine Liste der vom Client unterstützten Verschlüsselungssuiten (Cipher Suites).
- Die vom Client unterstützten Kompressionsmethoden.
- Eine zufällige Zahl (Random Number), die später im Schlüsselaustausch verwendet wird.
- Schritt 2: Server HelloDer Server antwortet mit einer Server-Hello-Nachricht. Diese enthält:
- Die SSL/TLS-Version, die verwendet wird (basierend auf der höchsten Version, die beide Seiten unterstützen).
- Die ausgewählte Verschlüsselungssuite.
- Die ausgewählte Kompressionsmethode.
- Eine zufällige Zahl (Random Number), die vom Server generiert wird.
- Schritt 3: Server Certificate und Schlüssel-AustauschDer Server sendet dem Client:
- Ein Zertifikat, das seine Identität bestätigt (typischerweise ein X.509-Zertifikat). Dieses Zertifikat enthält den öffentlichen Schlüssel des Servers.
- Optional: Eine Server Key Exchange-Nachricht (abhängig von der gewählten Verschlüsselungssuite und Schlüsselaustauschmethode).
- Optional: Eine Certificate Request-Nachricht, falls der Server den Client authentifizieren möchte.
- Eine Server-Hello-Done-Nachricht, die signalisiert, dass der Server mit seiner Initialisierung fertig ist.
- Schritt 4: Client Key Exchange und AbschlussDer Client reagiert mit:
- Ein optionales Zertifikat, das seine Identität bestätigt, wenn der Server dies angefordert hat.
- Eine Client Key Exchange-Nachricht, die den Pre-Master-Secret enthält, das mit dem öffentlichen Schlüssel des Servers verschlüsselt ist oder ein Diffie-Hellman-Schlüsselpaar enthält.
- Eine Change Cipher Spec-Nachricht, die signalisiert, dass alle nachfolgenden Nachrichten mit der vereinbarten Verschlüsselung und Kompression gesendet werden.
- Eine Finished-Nachricht, die eine Integritätsüberprüfung der gesamten Handshake-Nachrichten enthält.
- Schritt 5: Server-Finale und sichere KommunikationDer Server empfängt die Nachrichten des Clients und reagiert mit:
- Ein Change Cipher Spec-Nachricht, um zu signalisieren, dass alle nachfolgenden Nachrichten mit der vereinbarten Verschlüsselung und Kompression gesendet werden.
- Eine Finished-Nachricht, die eine Integritätsüberprüfung der gesamten Handshake-Nachrichten enthält.
- Verschlüsselung und AuthentifizierungsalgorithmenZu den gängigen Algorithmen gehören:
- RSA: Für den Schlüsselaustausch und die Authentifizierung.
- Diffie-Hellman (DH/ECDH): Für sicheren Schlüsselaustausch.
- Elliptic Curve Digital Signature Algorithm (ECDSA): Für digitale Signaturen und Authentifizierung.
- AES, ChaCha20: Für die symmetrische Verschlüsselung der Daten.
- SHA-256, SHA-3: Für Hashing und Integritätssicherung.
Somit wird durch den TLS-Handshake eine sichere, authentifizierte Verbindung initiiert, die anschließend für die verschlüsselte Kommunikation zwischen Client und Server genutzt wird.b)
Zu den bekannten Implementierungen von TLS gehören OpenSSL, GnuTLS und BoringSSL. Vergleiche diese Implementierungen hinsichtlich ihrer Stärken und Schwächen, insbesondere unter Berücksichtigung von Sicherheitslücken wie Heartbleed.
Lösung:
Vergleich der TLS-Implementierungen: OpenSSL, GnuTLS und BoringSSLHier ist eine detaillierte Analyse der drei bekannten Implementierungen von TLS: OpenSSL, GnuTLS und BoringSSL. Dabei werden deren Stärken und Schwächen, insbesondere im Hinblick auf Sicherheitslücken wie Heartbleed, verglichen.
- OpenSSL
- StärkenOpenSSL ist eine der am weitesten verbreiteten TLS-Implementierungen. Es bietet umfassende Unterstützung für eine Vielzahl von Verschlüsselungsalgorithmen und Protokollen. OpenSSL ist auch sehr flexibel und konfigurierbar, was es für viele Anwendungen geeignet macht. Es hat eine große Nutzerbasis und umfassende Dokumentation.
- SchwächenDie Flexibilität und der Umfang von OpenSSL bringen auch eine größere Komplexität mit sich, was die Fehleranfälligkeit erhöhen kann. Ein bekanntes Beispiel ist die Heartbleed-Sicherheitslücke, bei der eine Schwachstelle im OpenSSL-Heartbeat-Erweiterungscode ausgenutzt wurde, um sensible Daten aus dem Speicher auszulesen. OpenSSL hat seitdem wichtige Schritte unternommen, um seinen Code zu überprüfen und Sicherheitsaudits durchzuführen.
- GnuTLS
- StärkenGnuTLS ist eine alternative TLS-Implementierung, die besonderen Wert auf Sicherheit und Standardeinhaltung legt. GnuTLS bietet eine einfachere und sicherere API im Vergleich zu OpenSSL und wurde von Anfang an mit dem Fokus auf Sicherheit entwickelt. Es wird häufig in Open-Source-Projekten verwendet und ist vollständig GPL-lizenziert.
- SchwächenGnuTLS hat im Vergleich zu OpenSSL eine kleinere Nutzerbasis und weniger umfassende Unterstützung für ältere Protokolle und Algorithmen. Es hat auch in der Vergangenheit Sicherheitslücken aufgewiesen, wie z.B. die „GnuTLS Hello Buffer Overflow“-Schwachstelle, obwohl weniger gravierend als Heartbleed.
- BoringSSL
- StärkenBoringSSL wurde von Google als Abspaltung von OpenSSL entwickelt, um dessen Sicherheit und Leistung zu verbessern. Es hat keine binäre Kompatibilität zu OpenSSL und ist speziell auf die Bedürfnisse von Google-Diensten und -Produkten zugeschnitten. BoringSSL legt großen Wert auf Code-Sicherheit und einfache Wartung, indem überflüssige Features und veraltete Protokolle entfernt wurden. Es hat auch eine umfangreiche Testinfrastruktur und regelmäßige Sicherheitsaudits.
- SchwächenDa BoringSSL sich auf interne Google-Anforderungen konzentriert, ist es möglicherweise nicht immer die beste Wahl für allgemeine Anwendungen. Es unterstützt nicht alle Funktionen und Features, die OpenSSL bietet, und ist weniger flexibel anpassbar. Da es speziell auf Googles Infrastruktur angepasst ist, könnte es für andere Organisationen weniger geeignet sein.
FazitBei der Auswahl einer TLS-Implementierung sollte man die spezifischen Anforderungen und Sicherheitsbedenken berücksichtigen. OpenSSL bietet eine breite Unterstützung und Flexibilität, birgt jedoch aufgrund seiner Komplexität potenzielle Risiken. GnuTLS bietet eine sicherheitsorientierte Alternative mit einer saubereren API, hat aber eine kleinere Funktionspalette. BoringSSL bietet eine sicherheitsgehärtete Implementierung, schränkt jedoch Anpassungsfähigkeiten ein und ist stark auf die Bedürfnisse von Google zugeschnitten.c)
TLS setzt häufig eine Kombination von asymmetrischen und symmetrischen Verschlüsselungsalgorithmen ein. Gegeben seien die Public-Key-Verschlüsselung (RSA) und die symmetrische Verschlüsselung (AES).
- Beschreibe, wie die beiden Algorithmen im Rahmen von TLS zusammenarbeiten, um eine sichere Kommunikation zu gewährleisten.
- Berechne den Aufwand (in Bezug auf Zeitkomplexität) für die Verschlüsselung und Entschlüsselung beider Algorithmen und diskutiere, warum in TLS normalerweise die symmetrische Verschlüsselung für die Datenübertragung und die asymmetrische Verschlüsselung für den Schlüsselaustausch verwendet wird.
Lösung:
Kombination von asymmetrischen und symmetrischen Verschlüsselungsalgorithmen in TLSTLS verwendet eine Kombination aus asymmetrischer (Public-Key) und symmetrischer Verschlüsselung, um eine sichere Kommunikation aufzubauen. Hier ist eine detaillierte Beschreibung, wie RSA und AES in TLS zusammenarbeiten und eine Analyse ihres Aufwands.
- Zusammenarbeit von RSA und AES in TLSDie beiden Algorithmen spielen unterschiedliche Rollen im TLS-Protokoll, um Sicherheit zu gewährleisten:
- RSA (Asymmetrische Verschlüsselung):Während des TLS-Handshakes verwendet der Client den öffentlichen Schlüssel des Servers (wenn RSA als Schlüsselaustauschmethode verwendet wird), um ein Pre-Master-Secret zu verschlüsseln und an den Server zu senden. Der Server entschlüsselt dieses Pre-Master-Secret mit seinem privaten Schlüssel. Das Pre-Master-Secret wird dann von beiden Parteien verwendet, um den symmetrischen Sitzungsschlüssel (Master Secret) zu generieren, der für die folgende Kommunikation verwendet wird.
- AES (Symmetrische Verschlüsselung):Sobald der symmetrische Sitzungsschlüssel (Master Secret) vereinbart ist, wird er für die symmetrische Verschlüsselung von Nachrichten während der gesamten Sitzung verwendet. AES ist ein schneller und effizienter symmetrischer Algorithmus, der in TLS häufig für die tatsächliche Verschlüsselung von Daten verwendet wird.
- Berechnung des AufwandsVergleichen wir die Zeitkomplexität von RSA und AES:
- RSA:Die Zeitkomplexität von RSA hängt von der Größe der Schlüssel ab und umfasst meist die Exponentiation großer Zahlen. Typischerweise hat die Verschlüsselung/Entschlüsselung eine Zeitkomplexität von \(O(n^3)\) für die Multiplikation von \(n\)-Bit-Zahlen, wobei \(n\) die Bit-Länge des Schlüssels ist. RSA ist daher rechnerisch aufwendig.
- AES:Im Gegensatz dazu ist AES ein blockbasierter symmetrischer Algorithmus, der in Software und Hardware sehr effizient implementiert werden kann. Die Zeitkomplexität von AES hängt von der Größe des Blockes (normalerweise 128 Bit) und der Anzahl der Runden (abhängig von der Schlüssellänge, z.B. 10, 12 oder 14 Runden) ab. AES hat eine konstante Zeitkomplexität von \(O(1)\) pro Block.
- Warum symmetrische Verschlüsselung für die Datenübertragung und asymmetrische Verschlüsselung für den Schlüsselaustausch verwendet wird:
- Die asymmetrische Verschlüsselung (wie RSA) ist aufgrund ihrer hohen Rechenkomplexität und längeren Schlüssel längsamen und weniger effizient für den kontinuierlichen Datenfluss. Zudem erfordert sie erhebliche Rechenressourcen für die Ver- und Entschlüsselung.
- Symmetrische Verschlüsselung (wie AES) hingegen ist wesentlich schneller und effizienter für die Verschlüsselung großer Datenmengen. Sie benötigt weniger Rechenressourcen und kann die Daten in nahezu Echtzeit verschlüsseln und entschlüsseln.
- Daher verwendet TLS die asymmetrische Verschlüsselung für den sicheren Austausch des Sitzungsschlüssels (Master Secret) und wechselt danach zur symmetrischen Verschlüsselung, um die eigentliche Datenübertragung effizient und sicher durchzuführen.