Kryptographische Protokolle sind Protokolle, bei denen kryptographische Transformationen der Nachrichten ausgeführt werden.
Sie müssen verwendet werden, sobald in einem offenen System eine der Grundforderungen der Verlässlichkeit verlangt wird:
[Anonymität kann als Teil der Vertraulichkeit angesehen werden (Vertraulichkeit der Identität); ebenso Authentizität als Teil der Integrität (Integrität der Identität). Nichtabstreitbarkeit ist Teil der Verbindlichkeit.]
»Vertrauen« bedeutet: Alles (oder ein spezifizierter Teil dessen) was A weiß, darf auch B wissen. Es ist ausgeschlossen, dass es hierüber zwischen den Beteiligten jemals zu einem Rechtsstreit kommen wird. -
Man sollte bei der Konstruktion eines kryptographischen Protokolls möglichst wenig Notwendigkeit für Vertrauen voraussetzen und dieses genau spezifizieren. [Vertrauen ist gut, Kontrolle ist besser. (Lenin) Verhindern ist noch besser. (K. P.)]
Schlüssel sind Informationen, mit deren Hilfe andere Informationen algorithmisch erschlossen werden können. (Das Erschließen von Informationen ist ein Spezialfall des Transformierens, also des Erzeugens.)
Beispiel: Wer k (den Schlüssel) kennt, kann m (den Klartext) bestimmen.
Alle Modellannahmen sind kritisch zu hinterfragen.
Passive Angriffe: Lauschangriff.
Aktive Angriffe: Fälschen von Nachrichten. Auch unterdrücken, erzeugen oder wiederholen (»replay«) von Nachrichten.
Angriffe durch Außenstehende (z. B. »Man in the middle«) oder Teilnehmer (»Cheater«, Mogler).
Angriffe durch Kooperation zwischen Teilnehmern untereinander oder zwischen Teilnehmern und Außenstehenden.
Mögliche Angriffsziele:
Ferner sind Angriffe auf Teilnehmer (social engineering) oder auf die Verfügbarkeit möglich (DoS = Denial of Service oder Message Blocking).
A | Alice | Teilnehmerin jedes Protokolls |
---|---|---|
B | Bob | Zweiter Teilnehmer, falls benötigt |
C | Carol | Dritte Teilnehmerin, falls benötigt |
D | Dave | Vierter Teilnehmer, falls benötigt |
... | (Weitere Teilnehmer bei Bedarf ad hoc) | |
E | Eve | Eavesdropper, passive Angreiferin |
M | Mallory | Man in the Middle, aktiver Angreifer |
N | Nancy | Notar, schwach vertrauenswürdig (bestätigt/beglaubigt, sonst ohne Macht) |
T | Trent | Treuhänder, stark vertrauenswürdiger Vermittler (Trusted Arbitrator) |
Durch die Annahme des mächtigen Treuhänders T lassen sich viele Protokolle deutlich vereinfachen, insbesondere wenn nur symmetrische Verschlüsselung verwendet wird - auf Kosten verstärker Vertrauensannahmen. (Vgl. den Ticket-Server bei Kerberos, also die Needham-Schroeder-Authentisierung).
Bei Authentisierungs- oder Zero-Knowledge-Protokollen werden Alice und Bob manchmal ersetzt durch
P | Peggy | Prover |
---|---|---|
V | Victor | Verifier, Kontrolleur |
Vorteil dieser (semi-) formalisierten Rollenbesetzung: Man übersieht nicht so leicht Angriffsmöglichkeiten auf das Protokoll.
S = Menge von Subjekten (Teilnehmern, z. B. Alice,
Bob, ...)
D = Menge von (Daten-) Objekten (Nachrichten)
Zwischen verschiedenen Objekten können Beziehungen bestehen. (Z. B.: Objekt c entsteht durch AES-Verschlüsselung aus Objekt m mit Objekt k als Schlüssel - c = AESk(m).)
T = Menge von Zeitpunkten (i. a. 0, 1, 2, ..., n, also ein Intervall natürlicher Zahlen, eine diskrete Zeitachse oder eine durchnummerierte Folge von Protokollschritten.)
Relationen (u. a.) (können auch zeitabhängig sein):
trusts | Teilmenge von S×S | »A vertraut B.« |
---|---|---|
sees | Teilmenge von S×D | »A sieht m.« |
creates | Teilmenge von S×D | »A erzeugt m.« |
transmits | Teilmenge von S×D×S | »A übermittelt m an B.« |
Die Folge von Aktionen des Protokolls ist mit T indiziert und besteht aus Instanzen der Relationen creates oder transmits.
(Zur besseren Verständlichkeit nur semiformal aufgeschrieben.)
E = Eve, die passive Angreiferin, ist gekennzeichnet durch
Es gibt kein kanonisches Modell für alle Zwecke. Und in jedem Einzelfall gibt es nicht das richtige Modell. Man sollte stets mehrere (alle?) Modelle betrachten, um möglichst viele Seiteneffekte zu erkennen. [Für Funktionsnachweise reicht, im Gegensatz zu Sicherheitsnachweisen, in der Regel ein Modell.]
»Gewöhnliche« formale Spezifikationsmethoden (aus dem Software-Engineering)