Digitale Signaturen (Teil 1)

Dieses Thema ist mir persönlich sehr wichtig da darüber sehr viel Unwissen herrscht. Rein theoretisch könnten digitale Signaturen dafür sorgen, das unsere E-Mail Postfächer fast spamfrei bleiben. In der Praxis werden Sie jedoch leider (auch aus Kostengründen) nicht dafür verwendet. Dafür gibt es andere gute Anwendungsmöglichkeiten die ich auch präsentieren möchte.

Im ersten Teil jedoch, will ich eine kurze Einführung in die Technik „dahinter“ geben um im zweiten Teil das organisatorische, also PKI (Public-Key-Infrastruktur), zu erklären.

Wie funktionieren überhaupt diese digitalen Unterschriften? In der realen Welt stellen wir mit einer persönlichen Unterschrift Verbindlichkeit zwischen dem Text auf dem Papier und dessen Inhalt her. Wenn ich also etwas unterschreibe, nehme ich den Text (inhaltlich) zur Kenntnis. Dies hat auch eine gewisse Beweiskraft, da die Authentizität der Unterschrift geprüft werden kann.

Im Gegensatz zum realen Leben, lässt sich im Internet allerdings alles „kopieren“. Ich könnte eine Unterschrift also einfach irgendwo ausschneiden und unter einen anderen Text kleben. Ob das nun auch in der wirklichen Welt möglich ist lasse ich einfach mal offen. Sicher ist jedoch, das es auf dem Computer viel einfacher geht.

Also muss die digitale Unterschrift in Zusammenhang mit dem Text stehen, so das ein Verändern des Textes auch gleich die Unterschrift zerstört. Und genau so funktioniert das auch. Kommen wir also zu den Details.

Zunächst der Text:

Hiermit nehme ich Ihr Angebot auf Abschluss eines Kaufvertrags vom 25.06.2008 bzgl. drei Gläser Weizenbier schriftlich an.

Dies ist also der Text (z.B. in einer E-Mail) der zu unterschreiben ist. Der erste Schritt besteht nun darin, aus diesem Text ein Fingerabdruck zu erstellen. Wie wir bereits wissen, ist dies mit Hashfunktionen wie z.B. MD5 oder SHA möglich. Der Grund dafür ist eigentlich nur, die Länge der Signatur möglichst klein zu halten.

Hash(Text) = f998fb1e1a73549287404a43a2506801

Ich habe aus meinem Text also nun einen kompakten Hash (MD5) erstellt. Weiter geht es…

… und zwar mit dem RSA Verfahren. Ja, es taucht überall auf und das ist auch Grund warum dieses System so wichtig ist. Ich möchte nicht nochmal im Detail darauf eingehen wie damit ver- und entschlüsselt wird denn dies ist in den Grundlagen schon hinreichend beschrieben. Diese komplett im Detail zu verstanden haben ist allerdings auch nicht so unbedingt notwendig. Sehr wichtig dagegen ist folgendes:

Sei E( text ) die Funktion zum verschüsseln (RSA), sei D( text ) die Funktion zum entschüsseln (RSA), jeweils mit dem gleichen Schlüssel.

1) E ( Klartext ) = Chiffretext
2) D ( Chiffretext ) = Klartext
3) D ( E ( Klartext ) ) = Klartext
4) E ( D ( Klartext ) ) = Klartext

Zeile 1 und 2 sind denke ich recht offensichtlich. Ich verschlüssel einen Text und erhalte den verschlüsselten Chiffretext und umgekehrt. In Zeile 3 wird das beschrieben, was im Internet so geläufig ist: ich verschlüssel einen Text (mit E), sende ihn und erhalte (durch D) den Klartext zurück. Wichtig ist also die Zeile 4: wenn ich einen Text entschlüssel, also D anwende, erhalte ich auch eine Art von Chiffretext. Und wenn ich diesen entschlüsselten Text wieder verschlüssel, erhalte ich den Klartext.

Dieses Verfahren wird auch bei den digitalen Signaturen eingesetzt. Ich bilde (wie oben beschrieben) einen Hash aus dem Text und entschlüssel ihn mit meinem (geheimen) privaten Schlüssel. Niemandem (außer mir) ist der private Schlüssel bekannt und daher kann auch nur ich diese Signatur leisten. Der „entschlüsselte“ Text wird einfach an die E-Mail angehangen.

Die Validierung der Signatur ist jedem möglich, indem er den „entschlüsselten“ Text mit dem öffentlichen Schlüssel des E-Mail Absenders verschlüsselt. Dadurch erhält er den Hashcode und kann diesen abgleichen. Das ganze nochmal mit Beispiel:

Hash(Text) = f998fb1e1a73549287404a43a2506801

hatten wir eben ausgerechnet. Nun wird der Hashcode mit dem privaten Schlüssel entschlüsselt.

DECRYPT ( privatekey , „f998fb1e1a73549287404a43a2506801“ )
= dfmkomogerglmmerfohgnjutrihdmfkosemvgtjngrmakofrjlsgnhbhrgnamghktmhkke
(nur Beispielhaft)

Dieser wird an die E-Mail einfach angehangen

Hiermit nehme ich Ihr Angebot auf Abschluss eines Kaufvertrags vom 25.06.2008 bzgl. drei Gläser Weizenbier schriftlich an.
dfmkomogerglmmerfohgnjutrihdmfkosemvgtjngrmakofrjlsgnhbhrgnamghktmhkke

Die E-Mail wird versendet. Die andere Seite verwendet den öffentlichen (allen bekannt da veröffentlicht) des Absenders und verschlüsselt

ENCRYPT ( publickey , „dfmkomogerglmmerfohgnjutrihdmfkosemvgtjngrmakofrjlsgnhbhrgnamghktmhkke“)
=
f998fb1e1a73549287404a43a2506801

Nun bildet der Empfänger einfach den Hashcode vom Text und gleicht die 2 Werte ab:

Hash(Text) =?= f998fb1e1a73549287404a43a2506801

Wenn beide Werte identisch sind, ist die Signatur gültig.

Angenommen ein böser Mensch würde nun den Inhalt ändern wollen, also folgende Änderung durchführen:

Hiermit nehme ich Ihr Angebot auf Abschluss eines Kaufvertrags vom 25.06.2008 bzgl. zehn Gläser Weizenbier schriftlich an.

würde sich folgender neuer Hashwert ergeben:

Hash(neuerText) = cc8bfa6863caafd65d3476c390ece04a 

und der Abgleich mit der Signatur (f998fb1e1a73549287404a43a2506801) schlägt fehl.

Die Funktionsweise sollte damit klar sein. Irgendwie muss jedoch auch beweisbar sein, das die Unterschrift auch wirklich von DIESER Person kommt und nicht von einer anderen… (Cliffhanger)

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert