Kryptographie und Zugriffskontrolle - Moderne Kryptographie
Moderne Kryptographie
Mit moderner Kryptographie sind jene Methoden gemeint, welche nicht auf der Geheimhaltung des Verschlüsselungsverfahren beruhen um sicher zu sein. Sicherheit, welche durch Geheimhaltung der Funktionsweise erreicht wird, wird auch Security by Obscurity genannt. Im Gegensatz dazu steht das Kerckhoffs’sche Prinzip (engl. Kerckhoffs’ Maxime). Auguste Kerckhoff veröffentlichte im Jahr 1883 eine Arbeit über vertrauliche militärische Kommunikation (damals noch über Telegraphenleitungen), welche auch heute noch anwendbar sind. So besagt Kerckhoff’s zweite Regel:
The cipher method must not be required to be secret, and it must be able to fall into the hands of the enemy without inconvenience. [1]
Sinngemäß fordert diese Regel, dass die Sicherheit eines kryptographischen Systems nicht von der Geheimhaltung der Funktionsweise, sondern nur von der Geheimhaltung der verwendeten Schlüssel abhängen darf.
Es gibt immer wieder Diskussionen darüber ob Security by Obscurity einen validen Ansatz für ein sicheres kryptografisches System darstellt. Oft wird dies auch immer wieder so praktiziert. So konnte zum Beispiel die VoIP Software Skype aufgrund seines proprietären Protokolls und nicht zugänglichem Source Code lange seine Funktionsweise und Verschlüsselungsmethoden geheim halten. Durch Reverse Engineering gelang es aber die verwendeten Verschlüsselungsmethoden zu identifizieren. So wurde der VoIP Signaling Datenverkehr mittels einer abgewandelten RC4-Verschlüsselung versehen, die zum damaligen Zeitpunkt als nicht mehr sicher galt . Ein anderes Beispiel sind Mifare - Chipkarten, welche als kontaktloses Zahlungsmittel verwendet wurden und auf einem geheimen Algorithmus basierten. Nach Reverse-Engineering der Hardware wurden eklatante Sicherheitsmängel festgestellt .
Der bekannte Security Experte Bruce Schneier hat zum Thema Security by Obscuritybeziehungsweise Open Source / Closed Source auch folgende Argumentation:
"cryptography is hard to do right, and the only way to know if something was done right is to be able to examine it.. [..] .. Public algorithms are designed to be secure even though they are public; that’s how they’re made. So there’s no risk in making them public. If an algorithm is only secure if it remains secret, then it will only be secure until someone reverse-engineers and publishes the algorithms."
Weitere Herausforderungen der Kryptographie sind zum einen das Mooresche Gesetz (engl. Moore’s Law) und zum anderen das Problem der Zufallsgeneratoren, mit welchem sich Kapitel 1.3 befasst. Das Mooersche Gesetz besagt, dass sich die Rechenkraft von Computern (je nach Quelle) alle 12 bis 24 Monate verdoppelt. Dies wirkt sich auch auf kryptographische Systeme aus . Werden beispielsweise heute noch Jahre für die Entschlüsselung eines Verfahrens benötigt, könnte man dafür in einigen Jahren nur noch kurze Zeit benötigen. Die Bit Anzahl für Verfahren müssen demnach regelmäßig erhöht werden beziehungsweise bessere Verfahren entwickelt werden, um weiterhin sicher zu sein.
Ziele und Anforderungen moderner Verfahren
Moderne kryptographische Systeme haben 4 fundamentale Ziele, die sie zu erreichen versuchen . Nicht jedes kryptographische System erreicht alle diese Ziele. Dies ist auch oft nicht notwendig, je nachdem für welchen Zweck das kryptographische System geschaffen wurde:
- Vertraulichkeit (engl. Confidentiality): Die Information darf nur für berechtigten Personen zugänglich sein. Es soll sichergestellt sein, dass nur der die Nachricht empfangen und lesen kann, für den sie auch bestimmt war.
- Integrität (engl. Integrity): Der Empfänger einer Nachricht muss feststellen können, ob die Nachricht nach der Erzeugung verändert worden ist. Somit muss die Nachricht vor Veränderungen geschützt sein. Beispiele hierfür sind die Integrität von Backups oder die Kommunikation von zwei Parteien.
- Authentizität (engl. Authentication): Aus der Information oder Nachricht muss der Autor eindeutig hervorgehen. Dies muss für den Empfänger eindeutig nachprüfbar sein.
- Nichtabbstreitbarkeit (engl. Non-repudiation): Wird auch als Verbindlichkeit bezeichnet. Der Autor einer Nachricht soll nicht abstreiten können, dass dieser auch die Nachricht verfasst hat. Dies ist vor allem wichtig beim Abschluss von elektronischen Verträgen. So soll für eine Nachricht weder der Versand für den Sender, noch der Erhalt für den Empfänger im Nachhinein bestreitbar sein.
Das Kapitel [Grundlagen] zeigte, dass klassische Verschlüsselungsverfahren wesentliche Nachteile aufweisen. So wird der Klartext zum einen nur zeichenweise in Ciphertext transformiert. Das Problem dabei ist, dass sich bei Änderung eines Klartextzeichens auch nur das entsprechende Zeichen im Ciphertext ändert, nicht aber der ganze oder zumindest ein Teil des Ciphertextes. Zweitens, sind klassische Verfahren durch Häufigkeitsverteilungen der Buchstaben und Worte vorhersagbar, auch wenn es Techniken gibt diese zu verschleiern. Aufgrund dieser Nachteile forderte Claude Shannon im Jahr 1949, dass ein guter Verschlüsselungsalgorithmus zwei grundlegende Eigenschaften erfüllen muss:
- Diffusion: Jede noch so kleine Veränderung des Plaintext und / oder des Secret Keys sollen eine möglichst große Auswirkung auf den Ciphertext mit sich bringen. Damit verteilen sich die Redundanzen des Plaintexts über den Ciphertext.
- Konfusion: Um eine Kryptoanalyse so schwer wie möglich zu machen, sollen Plaintext, Ciphertext und der Secret Key möglichst komplex sein um Zusammenhänge schwer erkennen zu können. Dies verkompliziert die Suche nach Redundanzen und statistischen Mustern im Ciphertext.
Moderne Verfahren erfüllen beide Eigenschaften. Diffusion und Konfusion werden dabei mehrmals hintereinander ausgeführt.
kryptographische Sicherheit
Eine absolute Sicherheit bietet nur das One-Time-Pad, welches in Kapitel [vernam] vorgestellt wurde. Das OTP bietet absolute Sicherheit, durch seine zwei grundlegenden Eigenschaften:
- echte zufällig gewählte Schlüsselzeichen
- der Schlüssel hat dieselbe Länge wie der Klartext
Dies allerdings nur, wenn das OTP nicht mehrmals verwendet wird und für jede Verschlüsselung ein neuer zufälliger Secret Key verwendet wird. Dann gilt das OTP als beweisbar sicher, da jeder mögliche Schlüssel mit der selben Wahrscheinlichkeit auftreten kann. Zur beweisbaren Sicherheit schreiben Paar und Pelzl:
A cryptosystem is unconditionally or information-theoretically secure if it cannot be broken even with infinite resources
Genau dies erfüllt das One-Time-Pad mit seinen Eigenschaften. Aber auch genau aufgrund dieser Eigenschaften ist es in der Praxis nicht tauglich. Stellen Sie sich vor Sie müssten ein 1GB größes File verschlüsseln. Hierzu müssten Sie einen Secret Key erzeugen und zum Empfänger bringen, der ebenfalls 1GB groß ist. Für jeden weiteren Empfänger müsste der Vorgang wiederholt werden. Somit ist das One-Time-Pad zwar perfekt sicher, aber untauglich in der Praxis. Es wird allerdings versucht sich diesen zwei Eigenschaften anzunähern.
Zufallszahlen
Zufallszahlen spielen eine große Rolle in der Kryptographie. Sei es beispielsweise ein Key Stream einer symmetrischen Chiffre (siehe Kapitel [symmetrischeVerfahren]) oder der Initialisierungsvektor eines Algorithmus. Leider sind Zufallszahlengeneratoren oft gar nicht so zufällig wie sie sein sollten und sehr einfach zu berechnen, da diese auch nur einem Algorithmus folgen. So schreibt Bruce Schneier folgende Erklärung:
"A computer can only be in a finite number of states (a large finite number, but a finite number nonetheless), and the stuff that comes out will always be a deterministic function of the stuff that went in and the computer’s current state. That means that any random-number generator on a computer (at least, on a finite-state machine) is, by definition, periodic. Anything that is periodic is, by definition, predictable. And if something is predictable, it can’t be random. A true random-number generator requires some random input; a computer can’t provide that."
Daher werden die meisten auf Software basierten Generatoren Pseudo - Zufallszahlen Generatoren (engl. Pseudo-Random Sequence Generator oder PRNG) genannt, welche eigentlich nur die Eigenschaft haben, dass sie zufällig aussehen. Sie erfüllen die Eigenschaft, dass die produzierten Zahlen statistisch gesehen zufällig sind. Für einen Angreifer beziehungsweise Kryptoanalysten stellen diese allerdings einen möglichen Angriffsvektor dar.
Ein kryptographisch sicherer Zufallszahlen - Generator (engl. Cryptographically Secure Pseudo-Random number generator oder CSPRNG) muss zudem die Anforderung erfüllen, dass die generierten Zahlen unvorhersagbar sind . Die erzeugten Zahlen dürfen nicht vorhersagbar sein, selbst wenn Algorithmus und/oder Hardware bekannt sind auf welcher sie generiert worden sind. Nur durch den initialen Seed [2] ist ein kryptographisch sicherer Zufallsgenerator kompromittierbar.
Ein echter Zufallszahlengenerator erfüllt noch eine dritte Eigenschaft. Die generierte Zahlenfolge kann nicht reproduziert werden . Wird unter gleichen Bedingungen und Startwerten eine weitere Folge an Zufallszahlen erzeugt, muss dieser eine komplett unabhängige zweite Zahlenfolge generieren. Natürlich ist es schwer zu sagen, was genau echter Zufall ist und was nicht. Zur Überprüfung von PRNGs existieren jedenfalls standardisierte Testverfahren.
Schlüsselmanagement
Der Secret Key ist einer der wichtigsten Bestandteile eins kryptographischen Verfahrens. Im Detail werden von einem Algorithmus allerdings noch andere Schlüssel benötigt, wie beispielsweise Rundenschlüssel oder Initialisierungsvektoren. Diese werden, wie in Kapitel 1.3 beschrieben, zumeist von einem Pseudo-Zufallszahlen Generator erzeugt . Je zufälliger Zahlen von einem Generator erzeugt werden, desto sicherer ist der Algorithmus. Beispielsweise verwendet /dev/random unter Linux zum einen Teil einen PRNG. Zum anderen Teil wird das Rauschen der Gerätetreiber addiert, um echte Zufallszahlen zu erhalten. Andere Möglichkeiten für die Schlüssel Generierung sind zum Beispiel die Messung der Zeitabstände von Tastaturanschlägen oder eine Analyse von Mausbewegungen. Meist wird eine Kombination mehrerer Komponenten, in welche zum Beispiel auch die aktuelle Systemzeit oder Teile der Hardware Identifikation mit einfließen, verwendet. Über teure und spezielle Hardware könnten Zufallszahlen auch über den radioaktiven Zerfall, Widerstandsrauschen oder Entladung von Kapazitäten generiert werden
Oft von Vorteil ist auch die Verwendung von kurzlebigen Schlüsseln, welche in regelmäßigen abständen erneuert werden müssen . Solche Schlüssel werden als Sitzungsschlüssel (engl. Session Keys) oder temporäre Schlüssel (engl. Ephemeral Keys) bezeichnet. Die Verwendung von zeitlich begrenzten Schlüsseln hat den Vorteil, dass bei Verlust eines Schlüssel nur ein begrenzter Teil des Ciphertextes betroffen ist.
Viele Protokolle und Verfahren erneuern in regelmäßigen Abständen den verwendeten Schlüssel. Dies ist am besten durch eine Einwegfunktion zu realisieren. Eine wichtige Anforderung für die Schlüsselerneuerung ist, dass der neue Secret Key nicht vom alten Key abhängen darf. Dies wird als perfekte Vorwärtssicherheit (engl. Perfect Forward Secrecy) (PFS) bezeichnet. Ansonsten wäre es bei Kompromittierung eines Secret Keys möglich, alle davor verwendeten Keys zu berechnen und damit die bisher stattgefundene Kommunikation zu entschlüsseln.
Um die generierten Schlüssel mit den Kommunikationsteilnehmern auszutauschen kann natürlich der Postweg verwendet werden, was in der Praxis natürlich nicht sehr praktisch ist. Vom Problem des sicheren Schlüssel Austausches sind vor allem symmetrische Verfahren betroffen. Um das Problem zu lösen, werden Schlüsselaustausch Protokolle verwendet, wie zum Beispiel das Diffie-Hellman Verfahren, welches in Kapitel [DH] vorgestellt wird. Verwendet ein Protokoll ein asymmetrisches Verfahren für den Austausch des Secret Keys, welcher dann in weiterer Folge für eine schnellere symmetrische Verschlüsselung verwendet wird, spricht man von einem hybriden Verfahren. Eine andere Möglichkeit um Schlüssel auszutauschen beziehungsweise zu Verwalten ist die Verwendung von zentralen Schlüsselservern (engl. Key Distribution Center) (KDC). Als Beispiel sei hier Kerberos angeführt, welches in Kapitel [Kerberos] beschrieben ist.
Angriffsvektoren
Bei kryptographischen Verfahren, gibt es natürlich auch immer Angriffspunkte, die für Kryptoanalysten beziehungsweise Angreifer besonders erfolgversprechend sind. Bei der klassischen Kryptoanalyse unterscheidet man einerseits zwischen einer vollständigen Schlüsselsuche, also dem Ausprobieren aller möglichen Schlüssel im Keyspace . Diese Methode ist besser bekannt als Brute-Force Angriff. Das Angriffsziel wird dabei als Blackbox betrachtet. Zweitens, werden analytische Angriffe verwendet. Diese betrachten die interne Struktur des Algorithmus um dessen Schwachstellen auszunutzen. Bekannte Angriffe sind zum Beispiel Side-Channel Attacks, also Seitenkanal Angriffe. Bei diesen wird anhand des Stromverbrauchs oder anhand der elektromagnetischen Abstrahlung und mit Hilfe der Signalverarbeitung versucht, den Schlüssel zu berechnen.
Eines der größten Risiken ist und bleibt immer der Mensch. Dies versuchen Angreifer durch Social Engineering Angriffe auszunutzen. Es wird versucht, unter Vortäuschung falscher Tatsachen und mittels der Gutgläubigkeit des Menschen, diesen geheime Informationen zu entlocken. Zu den klassischen Methoden des Social Engineering zählen Phishing oder Baiting. Unter Baiting wird das Platzieren von manipulierten Datenträgern verstanden, mit dem Ziel, dass Personen diese an ihren Computer öffnen.
Ein anderer Angriffsvektor sind sogenannte Protokollangriffe, die besonders bei RSA interessant sind. Bei Protokollangriffen werden Schwachstellen in der Implementierung des Verfahrens ausgenutzt. Beispielsweise, wenn die RSA Implementierung zu kleine oder zu nahe aneinander liegende Primzahlen verwendet und eine Berechnung der RSA Module ermöglicht, siehe dazu Kapitel [RSA]
Ein Angriff, der vor allem asymmetrische Verfahren trifft, ist die Man-in-the-Middle Attack. Die zu Grunde liegende Idee ist, dass ein Angreifer die öffentlichen Schlüssel von einem oder zwei Teilnehmern abfängt und gegen seine(n) eigenen tauscht. Dies ist möglich, wenn die Schlüssel nicht ausreichend geschützt sind. Als Gegenmaßnahme können die Public Keys mittels digitaler Signatur geschützt werden. Der Empfänger muss daher die Signatur auf Authentizität überprüfen bevor er den Public Key seines Kommunikationspartners verwendet.
Bei Hash - Verfahren stellen Angriffe vor allem Kollisionsattacken und Urbild Angriffe (engl. Preimage Attacks) dar. Die Attacken zielen daher auf die Kollisionsresistenz des Algorithmus ab, siehe dazu Kapitel [collision-resistance]. Bei Kollisionsattacken (engl. Collision Attack) wird versucht zwei Dokumente zu finden, die denselben Hashwert bilden. Eine First Preimage Attack hingegen versucht zu einem vorgegebenen Hashwert eine Nachricht zu finden, die denselben Hashwert erzeugt. Eine Second Preimage Attack wiederum versucht zu einer gegebenen Nachricht eine zweite zu finden, die denselben Hashwert produziert. Der Vorteil den Kryptoanalysten beziehungsweise Angreifer auszunutzen zu versuchen ist das Geburtstagspradoxon aus Kapitel [geburtstagsparadoxon]. Solche Angriffe werden auch als Birthday - Attack bezeichnet.