In diesem Exposé geht es um eine kleine Einführung in die Grundlagen der praxisnahen Kryptographie. Hierzu werden keine Verschlüsselungsalgorithmen beschrieben oder mathematisch aufbereitet. Dazu gibt es schon hunderte und tausende Papers/Artikel/Skripte im Internet zum Durchlesen. Es gibt höchstens mal Verweise auf andere Verfahren. Vielmehr soll ein Gefühl entwickelt werden, sich mit den Hintergründen von Verschlüsselungen auseinanderzusetzen und verschiedene Algorithmen zu bewerten.
Dazu schauen wir uns drei fiktive Kommunikationswege mit verschiedenen einfachen Verschlüsselungsverfahren an. Alle drei Verschlüsselungsverfahren in diesen Beispielen funktionieren nach dem Prinzip des mehrfachen Schlosssystems. Was damit gemeint ist, wird am Beispiel besser erkennbar.
Angenommen wir haben einen Sender und einen Empfänger, die miteinander kommunizieren wollen. Diese Mehrfachschlossverfahren funktionieren nach dem Three-Way-Handshake-Prinzip. Im Prinzip legt der Sender eine Nachricht in einen Tresor und hängt ein Vorhängeschloss davor. Dann schickt er diesen Tresor an den Empfänger. Dieser hängt ein weiteres Schloss an den Tresor und schickt ihn zurück an den Sender. Dieser entfernt dann sein eigenes Schloss wieder vom Tresor und schickt es zurück an den Empfänger, welcher dann ebenfalls sein eigenes Schloss entfernt und die Nachricht herausnehmen kann. Während der Übertragungen ist zu jeder Zeit sichergestellt, dass der Tresor verschlossen ist.
Verfahren-Nummer 1:
Bei diesem Verfahren verschlüsselt der Sender seine Nachricht m durch Multiplikation seines geheimen Schlüssels k1, den außer ihm niemand kennt. Dann schickt dieser verschlüsselte Nachricht d1 an den Empfänger. Der Empfänger versucht gar nicht erst das Empfängnis zu lesen und multipliziert d1 mit seinem eigenen privaten Schlüssel k2. Das Ergebnis d2 schickt der Empfänger wieder an den Sender zurück. Dieser nimmt die Nachricht d2 und multipliziert mit dem Kehrwert seines Schlüssels k1. Danach schickt der Sender das Ergebnis d3 an den Empfänger zurück. Dieser muss nun nur noch d3 mit dem Kehrwert seines eigenen Schlüssels k2 multiplizieren und erhält somit die Nachricht.
Bei all diesen Größen (m,k1,k2) handelt es sich um natürliche Zahlen. Also muss man seine Textnachricht entsprechend kodieren (z.B. A=0, B=1, C=2, …), damit dieses Protokoll/Verfahren funktioniert. Eine weitere Voraussetzung ist, dass beide Kommunikationspartner das Protkoll kennen (logisch, sonst funktioniert es nicht). Aber für dieses Verfahren müssen keine Schlüssel/Passwörter vorher ausgetauscht werden. Es kann einfach drauflos gesendet werden. Klingt doch erst einmal toll. Doch, wo ist der Haken?
Ich nehme an, bei diesem Verfahren ist für jeden Leser mit ein zwei Proben leicht zu erkennen, dass dieses Verfahren äußerst unsicher ist. Stellen wir uns einmal eine weitere Person vor, die alle drei Nachrichten d1,d2,d3 abfängt, aber weder k1,k2 noch m kennt. Diese Person hat also eine passive Attacke durchgeführt (Lauschangriff). Kann sie mithilfe dieser drei abgefangenen Daten auf die Nachricht m schließen?
Empfehlung: Wer etwas rätseln möchte, sollte hier kurz aufhören weiterzulesen. Sonst erfolgt als nächstes die Auflösung.
In diesem Fall hat die lauschende Person Glück. Aus der Kombination der drei Daten d_{1},d_{2},d_{3} lassen sich die Nachricht und sogar die Schlüssel und
errechnen. Denn es gilt
und
und damit
.
Dieses Verfahren ist somit leider absolut ungeeignet für eine sichere Kommunikation zwischen zwei Partnern.
Verfahren-Nummer 2:
Dieses Verfahren funktioniert sehr ähnlich zu dem ersten Verfahren mit dem Unterschied, dass jede übertragene Zahl nun noch mit einem Modulo-Operator reduziert wird. Für alle, die nicht mehr ganz mit dem Modulo Operator vertraut sind folgt eine kurze Wiederholung. Für alle anderen gilt es, diesen Abschnitt zu überspringen.
Der Modul ist ganz einfach ausgedrückt ein Operator, der den Rest einer Division von zwei Zahlen ausgibt.
Beispiel: .
Also ist (% ist der Modulo-Operator in der Informaik).
Damit ist am Moduloperator so besonders, da er im Gegensatz zu herkömmlichen Operationen wie Addition und Multiplikation mehrere Lösungen für eine Gleichung liefern kann.
Beispiel:
. Das gilt immer und die erste Zahl kann nicht anders als
sein, sodass die Gleichung immer noch gelten würde.
, aber auch
oder
. Es gibt also mehrere Zahlen für die, diese Gleichung gilt (alle diese Zahlen, für die diese Gleichung gilt vereinigt man in einer Menge
, aber das nur als Zusatzinfo).
Für den Moduloperator gelten genauso Rechengesetze wir für Additionen, Subtraktion etc. Genaueres kann in der entsprechenden Literatur darüber gelesen werden. Wichtig ist nur, dass die Notation dazu verständlich ist.
Die erste Schreibweise ist: , wobei „mod“ als Operator fungiert. Eine alternative Schreibweise ist:
. Gelesen wird das ganze: Eins kongruent zehn bezüglich des Moduls drei. Dabei ist die Kongruenz kein Operator, sondern eine Relation bezüglich des Moduls, welches gekennzeichnet wird durch einen geklammerten Ausdruck am Ende der Zeile.
Für die Addition existiert unter den natürlichen Zahlen das neutrale Element 0. Das bedeutet, egal welche Zahl mit dem neutralen Element addiert wird, es kommt wieder genau diese Zahl wieder heraus. Für Multiplikation existiert auch ein neutralen Element, nämlich die 1. Zudem gibt es bei der Addition zu jeder natürlichen Zahl eine Inverszahl aus der Menge der ganzen Zahlen, sodass ihre Addition das neutrale Element 0 ergibt. Genauso gibt es bezüglich der Multiplikation für jede natürliche Zahl eine Inverszahl aus den rationalen Zahlen, sodass ihre Multiplikation das neutrale Element 1 ergibt.
Beispiele:
. Demnach ist
die Inverszahl zu
bezüglich des Additionsoperators.
. Demnach ist
die Inverszahl zu
bezüglich des Multiplikationsoperators.
Beim Modul-Operator gibt es zu jeder natürlichen Zahl eine Inverszahl bezüglich Addition zu einem beliebigen Modul m. Es gibt jedoch nicht immer eine Inverszahl bezüglich Multiplikation zu einem beliebigen Modul m.
Beispiele:
Finde die Inverszahl zum Ausdruck
.
, da die Addition aus den beiden Zahlen das neutrale Element 0 bezüglich des Moduls 7 ergeben muss. Ein weiteres Beispiel ist
. Hierfür ist
mit der gleichen Begründung.
Für die Multiplikation im Bezug auf eine Modulkongruenz gibt es leider nicht für jede Zahl eine Inverszahl. Es existiert für die Multiplikation nur unter bestimmten Voraussetzungen eine Inverszahl mit
.
Die Voraussetzung ist, dass die Zahl zu der Zahl
teilerfremd sein muss, sodass es keinen größten gemeinsamen Teiler geben kann (
). Wenn das der Fall ist, dann existiert auch ein Multiplikatives Inverses
.
Beispiel:
. Der größte gemeinsame Teiler für
und
ist
(
), da es keinen Divisor über 1 gibt, sodass
und
geteilt würden und eine natürliche Zahl dabei herauskäme. Also lässt sich ein multiplikatives Inverses für
berechnen (zur Info:
).
Aber bei , kann es kein x geben, sodass diese Kongruenz gültig wird, da gilt:
. Sollte der Modul eine Primzahl sein, so gibt es immer für jede Zahl ein multiplikatives Inverses. Sie dürfen darüber nachgrübeln, wieso 😀
Das additive und multiplikative Inverse kann dazu verwendet werden bei Gleichungen einzelne Summanden oder Faktoren auf die andere Seite zu bringen. Rechnet man beispielsweise bei den „normalen“ Gleichungen , benutzt man das additive Inverse von
, nämlich
um das
auf die andere Seite zu bekommen, also:
. Analog dazu bei Faktoren und der Multiplikation:
. Die Inversen werden allgemein mit dem Exponenten
, also
gekennzeichnet, das bedeutet also hierbei nicht, dass die Zahl hoch
gerechnet werden soll. Diesen Sachverhalt also nicht verwechseln.
und
.
Das Berechnen des additiven Inversen beim Modul-Operator
Das Berechnen des additiven Inversen ist einfach, da man sich nur eine Zahl überlegen muss, die addiert mit der ersten Zahl kongruent 0 ist bezüglich des Moduls m.
Beispiel:
. Dann gilt:
. Aber da man bei der Modulorechnung lieber mit positiven ganzen Zahlen rechnet, nimmt man einfach den Modul und subtrahiert diesen mit der ersten Zahl und erhält automatisch das positive additve Inverse:
.
Das Berechnen des multiplikativen Inversen beim Modul-Operator
Das Berechnen des multiplikativen Inversen zu einer Zahl und einem bestimmten Modul, sofern es denn existiert, lässt sich mit dem erweiterten euklidschen Algorithmus in effektiver Zeit berechnen. Dazu gibt es genug Quellen im Internet oder Literatur.
Auch in diesem Fall hat die lauschende Person Glück. Aus der Kombination der drei Daten lassen sich wieder die Nachricht und sogar die Schlüssel
und
errechnen. Denn es gilt:
Hier wurden einfach das auf die andere Seite gebracht mithilfe des multiplikativen Inversen vom
. Danach noch
und
in
einsetzen und nach
umstellen.
Dieses Verfahren ist somit leider auch absolut ungeeignet für eine sichere Kommunikation zwischen zwei Partnern. Und sollte es kein multiplikatives Inverses für den Modul geben, so kann die Nachricht nicht entschlüsselt werden, aber dann kann auch der Empfänger die Nachricht nicht entschlüsseln.
Verfahren-Nummer 3:
Dieses Verfahren funktioniert sehr ähnlich zu dem zweiten Verfahren mit dem Unterschied, dass die übertragenen Nachrichten jetzt nicht nur mit den Schlüssel multipliziert sondern potentiert werden. Da man bei der Grafik mit der Interpretationsfähigkeit der mathematischen Zeichen an die Grenzen kommt, werden hier nochmals alle drei Werte sauber aufgeschrieben.
Zudem nehmen wir jetzt einmal an, dass dem Angreifer sogar die Schlüssel und
bekannt sind. Kann er mit diesen Informationen an die Nachricht
gelangen? Und wenn ja, ist es dabei egal, wie groß der Modul
wird?
In diesem Fall hat die lauschende Person leider Pech gehabt, wenn der Modul groß wird. Selbst mit den bekannten Schlüsseln wird es uns nicht gelingen die Nachricht in effektiver Zeit zu berechnen. Aber warum ist das so?
Dadurch, dass und
bekannt sind, kann man immerhin folgende Gleichung betrachten:
Also errinern wir uns an einen Satz beim RSA-Verfahren. Das bedeutet, dass wir das Problem der unbekannten Basis auf das Problem des multiplikativen Inversen aus dem zweiten Verfahren umwandeln können, wenn wir das Ergebnis der Phi-Funktion des Moduls
in effektiver Zeit berechnen können.
Diese Idee können wir adaptieren auf unsere Kongruenz mit d_{1}.
Demnach muss für k_{1} nur das multiplikative Inverse zum Modul berechnet werden. Wenn
keine Primzahl ist, ist das Berechnen von
nicht einfach. Generell ist bisher kein effizientes Faktorisierungsverfahren bekannt. Daher wird dieser Angriff für große, zusammengesetzte Zahlen tatsächlich auch bei bekannten Schlüsseln
und
schwierig bis laufzeittechnisch unpraktikabel (auch für Primzahlen, da auch nur ein bekannter Algorithmus existiert, der in effektiver Zeit prüft, ob eine natürliche Zahl eine Primzahl ist oder nicht, aber mit einer polynomialen Komplexität und einer sehr großen Konstante). Bei kleinen Zahlen ist aber eine Berechnung kein Problem, das hängt dann von der Rechenleistung der Maschine ab. Ist der Modul eine Primzahl, ist das ganze einfach, da für Primzahlen gilt:
.
Dieses Verfahren ist also bei richtiger Wahl des Moduls durchaus sicher und das gilt auch noch, solange kein effektiver Faktorisierungsalgorithmus existiert, der auch auf die Phi-Funktion übertragbar ist.
Hinterlasse einen Kommentar