Einstieg - Signiersysteme
Ein neues Kryptosystem
Alice will eine Nachricht an Bob schicken. Sie beschließt, den Nachrichttext doppelt zu verschicken - einmal als Klartext und zusätzlich in einer verschlüsselten Form. Zum Verschlüsseln benutzt sie ihren privaten Schlüssel.
Aufgabe 1
(a) Wie kann Bob jetzt feststellen, ob jemand die Nachricht (bestehend aus den beiden Textteilen) verändert hat?
(b) Kann Bob auch feststellen, ob die Nachricht von Alice stammt?
Ein verbessertes Kryptosystem
Muss Alice wirklich den gesamten Text verschlüsseln? Würde es nicht reichen, wenn Alice eine Art Fingerabdruck des Textes erzeugen würde und diesen Fingerabdruck in verschlüsselter Form mitverschicken würde?
Aufgabe 2
Wir spielen ein solches Kryptosystem mit einem Python-Programm durch.
Lade die Dateien chiffriersystemModularPotenz.py und erzeugungFingerabdruck.py herunter.
(a) Teste erst einmal die Erzeugung der Fingerabdrücke. Wie werden sie hier berechnet?
>>> fingerabdruck('HEUTE HITZEFREI') 3
(b) Das oben beschriebene Kryptosystem lässt sich z.B. so simulieren:
>>> abc = ' ABCDEFGHIJKLMNOPQRSTUVWXYZ' >>> block = 1 >>> oeffentlicherSchluesselAlice = (13, 77) >>> privaterSchluesselAlice = (37, 77) >>> quelltext = 'HEUTE HITZEFREI' >>> fingerabdruckQuelltext = fingerabdruck(quelltext) >>> fingerabdruckQuelltext 3 >>> fingerabdruckVerschluesselt = verschluesselteZahl(fingerabdruckQuelltext, privaterSchluesselAlice) >>> fingerabdruckVerschluesselt 31 >>> nachricht = (quelltext, fingerabdruckVerschluesselt) >>> nachricht ('HEUTE HITZEFREI', 31) >>> quelltextVeraendert = 'HEUTE KEIN HITZEFREI' >>> nachrichtEmpfangen = (quelltextVeraendert, fingerabdruckVerschluesselt) >>> nachrichtEmpfangen ('HEUTE KEIN HITZEFREI', 31) # ...
Wie könnte der Empfänger jetzt herausfinden, ob die Nachricht verändert wurde?
(c) Angenommen, ein Angreifer kennt das Verfahren zur Erzeugung des Fingerabdrucks. Manipuliere die Nachricht so, dass der Empfänger das nicht feststellen kann. Beurteile auch das Verfahren zur Erzeugung des Fingerabdrucks.