Home > Kryptographie > Authentikation & Integrität

Kryptographie

11. Authentikation & Integrität

Bis jetzt haben wir immer nur passive Angriffe auf unsere verschlüsselten Daten in Betracht gezogen; d. h., der Angreifer ist darum bemüht, die durch Verschlüsselung für ihn unkenntliche Nachricht lesen zu können. Er kann z. B. versuchen, den verwendeten kryptographischen Algorithmus (siehe Kryptoanalyse) zu attackieren. Aber was ist, wenn der Angreifer die Daten nicht nur lesen, sondern auch aktiv verändern kann? Dadurch ergeben sich ganz neue, unangenehme Probleme. Wie kann Bob dann wissen, dass die Nachricht, die er (angeblich) von Alice erhalten hat, wirklich echt ist? Oder dass sie wirklich von Alice stammt? Oder dass Alice wirklich diejenige ist, für die sie sich ausgibt, d. h. dass sie ihre Identität beweisen kann? Diesen Fragen wollen wir uns im Folgenden zuwenden.

Ein paar Begriffe

Die erste Forderung, die wir an eine kryptographische Anwendung stellen, ist die der Nachrichtenintegrität. Darunter versteht man die Frage nach der Echtheit der Nachricht – wurde sie unverfälscht übermittelt? Oder hat sie jemand heimlich verändert? Wurde sie tatsächlich verändert, können wir nur hoffen, dass der Empfänger diese Veränderung auch bemerkt.

Bei der Nachrichtenauthentikation fragen wir uns, ob die Nachricht, die der Empfänger erhalten hat, auch wirklich von dem Absender stammt, den der Empfänger erwartet hat. Kann der Absender später beweisen, dass er die Nachricht abgeschickt hat oder kann er es abstreiten und widerlegen?

Zu guter Letzt ist da noch die Benutzerauthentikation: Kann der Absender seine Identität beweisen? Ist er wirklich der, für den er sich ausgibt?

Eine kryptographische Anwendung, die mit Public-Key-Systemen arbeitet, sollte diesen drei Forderungen genügen.

Integrität und Authentizität

Um Integrität und Authentizität zu wahren, sind wir gezwungen, geeignete Maßnahmen zu treffen. Der Empfänger muss entscheiden können, ob die Nachricht, die er vom Absender erhält, unversehrt und authentisch bei ihm angekommen ist. Zu diesem Zweck gibt es eine Methode, die eine bestimmte Prüfsumme der Nachricht, den sogenannten Message Authentication Code (MAC), berechnet. Dies geschieht mit Hilfe der Verschlüsselungsfunktion f und dem Schlüssel k:

MAC = fk(m)

Übrigens wird die Nachricht hier unverschlüsselt, d. h. im Klartext, gesendet, denn das Interesse des Absenders gilt nicht dem Verheimlichen der Informationen, sondern dem Absichern der Nachricht: Mit Hilfe des MACs ist der Empfänger nämlich nun in der Lage, die Nachricht zu überprüfen: Er wendet die Verschlüsselungsfunktion auf die erhaltene Nachricht an und vergleicht beide MACs. Sind sie vollkommen identisch, ist die Nachricht mit ziemlicher Sicherheit unverändert eingetroffen. Wenn nicht, weiß der Empfänger wenigstens, dass die Nachricht verfälscht wurde. Die Sicherheit dieser Prozedur hängt natürlich auch in großem Maße von dem vereinbarten Schlüssel k ab. Wurde er schlecht gewählt, kann sich der Angreifer an einer Brute-Force-Attacke versuchen. Die Frage, welcher Algorithmus sich für das System eignen würde, ist recht leicht zu beantworten: Man nehme einfach einen gepflegten Blockalgorithmus oder dergleichen. Hier finden Sie ein paar nette Chiffrierungen.

Diese Methode hat jedoch den Nachteil, dass die zu sendende Nachricht dank MAC doppelt so lang wird. Aber ist es überhaupt vonnöten, den MAC so lang zu halten? Nein, eigentlich nicht. Und jetzt erweist sich unsere Wahl des Blockalgorithmus als außerordentlich hilfreich: Wie in Betriebsmodi beschrieben, täten wir gut daran, unser Verfahren im sog. Cipher-Block-Chaining-Modus einzusetzen. Das bedeutet, jeder Nachrichtenblock wird vor seiner Verschlüsselung mit dem vorherigen Block per xor verknüpft. Dem ersten Block wird ein Initialisierungs-Vektor (IV), der separat gespeichert werden muss, zugewiesen. Dieser bildet den Block m0. Obwohl nur der letzte Block gespeichert wird, wurden doch durch die xor-Operation alle Blöcke berücksichtigt. So kann die Gesamtlänge der Nachricht auf die Summe von Nachrichtenlänge, Blocklänge und IV-Länge reduziert werden. Da die Länge des IVs so gut wie immer der Blocklänge entspricht, ergibt sich für die Gesamtlänge:

Gesamtlänge = Nachrichtenlänge + 2 · Blocklänge

Allerdings sind nicht alle Algorithmen für den Einsatz zur MAC-Berechnung geeignet. So sollte er alle Eigenschaften einer Einweg-Hashfunktion besitzen.

Benutzerauthentikation

Heutzutage ist die verlässliche Authentikation bzw. Identifikation von Personen unerlässlich. Zu früheren Zeiten war dies ausschließlich zwischen zwei Menschen möglich, in heutigen Zeiten übernimmt oftmals ein Computer die Aufgabe des Identifizierens. Dabei kann es sehr wohl Probleme geben, denn ein Computer ist dumm und nicht im Entferntesten dazu fähig, die Intelligenz eines Menschen zu imitieren bzw. zu ersetzen. Das wirft einige Probleme auf. Die Identifikation eines Individuums im zwischenmenschlichen Bereich erfolgt z. B. über folgende Merkmale:

Bei einem Authentikationsprozess zwischen einem Menschen und einer Maschine wird das Ganze etwas vertrackter; hier ist die Identifikation über Wissen am einfachsten realisierbar, beispielsweise durch Passwörter, ebenso die Identifikation über Besitz. Ein Mechanismus, der Personen anhand ihrer Eigenschaften eindeutig zu identifizieren vermag, ist schon komplexer und kommt eher seltener zum Einsatz.

Da die Identifikation meist über Passwörter geschieht, sollten Sie bei dessen Wahl besonders Acht geben, um sowohl einfachsten Angriffen als auch Angriffen mit viel "Rechenpower" vorzubeugen. Halten Sie sich unbedingt fern von persönlichen Daten – das ist oberstes Gebot! Was Sie weiterhin beachten müssen, können Sie sich auf einer speziellen Seite zu Gemüte führen.

Wie immer existieren noch einige weitere Authentikationsmöglichkeiten. Zum Beispiel mit Hilfe von Chipkarten und bestimmten Protokollen (als Beispiel sie hier das Zero-Knowledge-Protokoll genannt), denen Primzahl-Berechnungen zugrunde liegen. Bitte konsultieren Sie dafür die gängige Literatur (Beispiele finden Sie hier).