|
Programmieren mit JavaScript
einfache Verschlüsselung
Funktionen mit Wertübergabe
Inhalt RSA - Verfahren
|
| |
Problem
|
Wenn man eine Email verschickt, wandert der von uns geschriebene Text im Internet über mehrere Stationen (Computer), bis er auf dem Rechner landet, auf dem der Empfänger sein "Postfach" hat. Jeder, der auf einer Zwischenstation den Datenverkehr abhört oder Zugang zu dem Postfach-Rechner hat, kann den Text lesen.
Emails sind also mit Postkarten vergleichbar, die auch jeder lesen kann, der sie in die Hand bekommt, ohne dass der Empfänger das erfährt.
Um ein Mitlesen zu vermeiden (wichtige geschäftliche Mitteilung / Liebesbrief ? ), muss man den Text unleserlich machen. Da der Empfänger ihn lesen soll, muss er etwas wissen (Verfahren, "Schlüssel"), um den Text wieder in den ursprünglichen Zustand zu versetzen.
|
wichtige Verfahren
|
Ein Text kann verschlüsselt werden durch
- Vertauschung der Buchstaben.
Einfache Möglichkeit: Wir schreiben die Nachricht zeilenweise in ein Feld und schreiben es spaltenweise ab. In diesem Fall also : "DsNiitacedchsihtier."
Der Empfänger kennt Verfahren und Größe des Feldes, schreibt die Nachricht spaltenweise auf und kann sie wieder lesen. |
D |
i |
e |
s |
i |
s |
t |
d |
i |
e |
N |
a |
c |
h |
r |
i |
c |
h |
t |
. |
|
|
|
|
|
|
- Ersetzung der einzelnen Zeichen durch andere.
Schon Cäsar benutzte das Verfahren, z. B. "a" durch "d" zu ersetzen, "b" durch "e", "c" durch "f", "d" durch "g", also eine Verschiebung um 3 im Alphabet. Da es nur 26 verschiedene Verschlüsselungen gibt, ist dieses Verfahren nicht sehr sicher.
- allgemeine Substitution
Wir wollen hier als Beispiel zum Testen ein Verfahren betrachten, bei dem jeder Buchstaben durch einen beliebigen anderen Buchstaben des Alphabets ersetzt wird. Natürlich dürfen diese "Ersatzbuchstaben" nicht doppelt vorkommen, weil man sonst den Text nicht wieder entschlüsseln kann. Als Schlüssel schreiben wir also die Buchstaben des Alphabets in durcheinander gewürfelter Reihenfolge auf. Von diesen "Permutationen" der 26 Buchstaben gibt es 26! (Fakultät); das sind ca. 4 * 10 26, also eine Zahl mit 26 Stellen.
|
Beispiel
|
Den zu verschlüsselnden Text eingeben:
|
Sie können die Funktionsweise hier testen, indem Sie den Text ändern und dann auf "verschlüsseln" und "entschlüsseln" klicken.
oder
"verschluessel1.html"als neue Seite öffnen
|
|
Quelltext
|
<html><head><title>Verschlüsselung 1</title>
<script language="JavaScript">
var alleZeichen="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
wird von beiden Funktionen benutzt
function verschluessele(){
var Urtext=document.Permutation.Urtext.value;
var Schluessel=document.Permutation.Schluessel.value;
var Codiert="";
var Stelle;
Urtext = Urtext.toUpperCase();
Text in Großbuchstaben umwandeln
for (i=0; i < Urtext.length ; i++ ) {
alle Zeichen des Urtextes durchlaufen,
Nummern ab 0
Stelle = alleZeichen.indexOf(Urtext.charAt(i));
Der Buchstabe aus dem Urtext (charAt(i))
wird im Alphabet gesucht (indexOf)
if (Stelle > -1){
Wenn er gefunden wurde,
Codiert = Codiert + Schluessel.charAt(Stelle);}
nehmen wir statt dessen den Buchstaben
aus dem Schlüssel an derselben "Stelle".
}
document.Permutation.VText.value = Codiert;
}// Ende der Funktion
function entschluessele(Vt, Schl){
Man kann die Angaben aus dem Formular
auch als Parameter übergeben (s.u.)
var Vtext=Vt.value.toUpperCase();
var Schluessel=Schl.value;
var Decodiert="";
var Stelle;
for (i=0; i < Vtext.length ; i++ ) {
Stelle = Schluessel.indexOf(Vtext.charAt(i));
Jetzt suchen wir im Schlüssel
if (Stelle > -1) {
Decodiert = Decodiert + alleZeichen.charAt(Stelle);}
und nehmen wieder den entsprechenden Buchstaben
aus dem Alphabet.
}
document.Permutation.Urtext.value = Decodiert;
}// Ende der Funktion
</script></head><body >
Den zu verschlüsselnden Text eingeben:
<form name="Permutation">
<input type="text" size="30" name="Urtext"><BR>
und jetzt den Schlüssel<br>
<input type="text" size="30" name="Schluessel" value="GNUAHVOBIPWCJQXDKRYELSZFMT">
<P>
<input type="BUTTON" value="verschlüsseln" onclick="verschluessele()"><p>
<input type="text" size="30" name="VText">
<p>
<input type="BUTTON" value="entschlüsseln" onclick="entschluessele(VText,Schluessel)">
Die Namen der Input-Tags werden der Funktion
in Klammern übergeben (s.o.)
</form></body></html>
|
|
Nachteile
|
Dieses Verfahren hat zwei Nachteile:
- Der Schlüssel, den der Empfänger kennen muss, ist ziemlich lang.
- Es ist nicht sehr sicher - bei längeren Texten. Zum Entschlüsseln probiert man nämlich nicht alle Permutationen durch, sondern zählt , wie oft die einzelnen Buchstaben im Text vorkommen. In jeder Sprache gibt es für die einzelnen Buchstabe charakteristische Häufigkeiten. So ist zum Beipiel in der deutschen Sprache das "e" der häufigste Buchstabe. Wenn man nun das Vorkommen der Buchstaben im verschlüsselten Text mit den Häufigkeiten der Buchstaben vergleicht, braucht man nicht mehr sehr viel zu probieren.
|
Verschiebung mit Schlüsselwort
|
Wir verschieben die Buchstaben unterschiedlich weit. Ein Schlüsselwort, z. B. "JAVAscript", gibt an dass der erste Buchstabe um 9 Stellen (Nummer von "J" im Alphabet) verschoben wird, der zweite Buchstabe um 0 Stellen ("A"), der dritte um 21 Stellen ("V") usw. Wenn das Schlüsselwort zuende ist, fängt man vorne wieder an. Eine Statistik hilft dann nicht mehr so viel, da z.B. das "e" durch unterschiedliche Buchstaben ersetzt wird, je nachdem, welcher Buchstabe des Schlüsselwortes gerade "dran" ist.
Beispiel:
Text |
I |
N |
F |
O |
R |
M |
A |
T |
I |
K |
Schlüssel |
A |
B |
C |
D |
A |
B |
C |
D |
A |
B |
Verschiebung |
0 |
1 |
2 |
3 |
0 |
1 |
2 |
3 |
0 |
1 |
verschlüsselt |
I |
O |
H |
R |
R |
N |
C |
W |
I |
L |
|
Beispiel 2
|
Codierung mit Schlüsselwort:
Den zu verschlüsselnden Text eingeben:
|
Sie können die Funktionsweise hier testen, indem Sie Text und / oder Schlüssel ändern und dann auf "verschlüsseln" und "entschlüsseln" klicken.
oder
"verschluessel2.html"als neue Seite öffnen
|
|
Quelltext der beiden Funktionen
|
var alleZeichen="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
function verschluessele2(){
var Urtext=document.Codierung.Urtext.value;
var Schluessel=document.Codierung.Schluessel.value;
var Codiert="";
var Stelle, StelleS, Summe;
var SPosition = 0;
Urtext = Urtext.toUpperCase();
Schluessel = Schluessel.toUpperCase();
Alles in Großbuchstaben umwandeln.
while (Schluessel.length < Urtext.length) {
Schluessel = Schluessel + Schluessel; }
Das Schlüsselwort wird "verdoppelt",
bis es lang genug ist
for (i=0; i < Urtext.length ; i++ ) {
Stelle = alleZeichen.indexOf(Urtext.charAt(i));
StelleS = alleZeichen.indexOf(Schluessel.charAt(i));
if ((Stelle > -1)&& (StelleS > -1)){
Wenn beide Zeichen in "alleZeichen" gefunden wurden
Summe = Stelle + StelleS;
Verschiebung durch Addition
if (Summe >= alleZeichen.length) {
Wenn wir rechts aus "alleZeichen" herausfallen,
Summe = Summe - alleZeichen.length; }
fangen wir von links wieder an.
Codiert = Codiert + alleZeichen.charAt(Summe);}
Den gefundenen Buchstaben notieren.
}
document.Codierung.VText.value = Codiert;
}// Ende der Funktion
function entschluessele2(Vt, Schl){
var Vtext=Vt.value.toUpperCase();
var Schluessel=Schl.value;
var Decodiert="";
var Stelle, StelleS, Summe;
var SPosition = 0;
Vtext = Vtext.toUpperCase();
Schluessel = Schluessel.toUpperCase();
while (Schluessel.length < Vtext.length) {
Schluessel = Schluessel + Schluessel; }
for (i=0; i < Vtext.length ; i++ ) {
Stelle = alleZeichen.indexOf(Vtext.charAt(i));
StelleS = alleZeichen.indexOf(Schluessel.charAt(i));
if ((Stelle > -1)&& (StelleS > -1)) {
Summe = Stelle - StelleS;
Bei der Entschluesselung umgekehrt, also subtrahieren.
if (Summe < 0) {
Wenn wir links aus "alleZeichen" herauskommen,
Summe = Summe + alleZeichen.length; }
fangen wir von rechts wieder an.
Decodiert = Decodiert + alleZeichen.charAt(Summe);}
}
document.Codierung.Urtext.value = Decodiert;
}// Ende der Funktion
|
|
|
Die schlechte Nachricht: Auch diese Verschlüsselung kann geknackt werden, allerding mit wesentlich höherem Auswand als die bisher besprochenen Verfahren und : Der Aufwand steigt erheblich mit der Schlüssellänge !
Man versucht nämlich zunächst, die Schlüssellänge herauszufinden, um dann getrennte Statistiken zu machen für die Buchstaben, die mit dem jeweiligen (noch unbekannten) Schlüsselbuchstaben codiert worden sind ...
Für die Verschlüsselung privater Emails, bei denen voraussichtlich niemend einen solchen Aufwand treiben wird, reicht die Sicherheit aber aus - vorausgesetzt, man vermeidet die üblichen Fehler im Zusammenhang mit Kennwörtern: zu kurz ("123", "ABCD"), naheliegende Begriffe ("Informatik"), eigener Name, Namen von nahestehenden Personen, mangelnde Geheimhaltung (PIN auf der Kreditkarte notieren).
|
Verschlüsseln Sie Ihre Emails |
Unter "verschluessel3.html" finden Sie eine erweiterte Version mit Textfeldern für die Ein- und Ausgabe; der Zeichensatz enthält auch kleine Buchstaben, Ziffern, deutsche Umlaute und Satzzeichen. Einzige Einschränkung ist, dass systembedingt Zeilenwechsel und die doppelten Anführungszeichen nicht übertragen werden.
Arbeitsweise: Den geschriebenen Urtext im jeweiligen Programm (EMail, Word) markieren und in die Zwischenablage kopieren (rechte Maustaste, kopieren). Über dem Eingabefeld von "Verschluessel3" mit der rechten Maustaste / Einfügen den Text aus der Zwischenablage einfügen. Mit dem codierten Text verfährt man dann genau so.
|
aktuelles Verfahren |
DES(Data Encryption Standard) war der offizielle amerikanische Verschlüsselungstandard. Er arbeitete bis vor wenigen Jahren mit Schlüsseln von 56 Bit Länge; das entspricht 7 Zeichen. Der Urtext wird in Blöcke zu je 64 Bit aufgeteilt. In vielen Schritten werden nacheinander immer wieder Vertauschungen (auch im Schlüssel) und Substitutionen vorgenommen, die beim Entschlüsseln rückwärts durchlaufen werden. Mittlerweile gilt eine Verschlüsselung mit einer Schlüssellänge von 128 Bit als sicher genug für die Übertragung kritischer Daten. Die neueren Browser beherrschen diese Verfahren.
Seit dem Jahr 2000 wird stattdessen AES verwendet mit Schlüssellängen von 128, 192 und 256 Bit.
Da AES/DES auf Bitebene arbeiten, ist eine Nachbildung mit Javascript schwierig und schlecht nachvollziehbar.
|
Links |
- Erläuterungen zum RSA - Verfahren ("Public Key") auf den nächsten Seite
- Kryptologiei. Eine Abhandlung über Geschichte und moderne Verfahren für Oberstufenkurse finden Sie im "www.Informatiktreff.de" unter "Materialien / SII"
- Eine Internetseite, auf der mit Javascript automatisch Schlüssel für das RSA - Verfahren erzeugt werden, findet man unter "http://travistidwell.com/jsencrypt/demo/"
|
|
Funktionen mit Wertübergabe
Seitenanfang RSA - Verfahren
|