aufgeschlossen 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:

und jetzt den Schlüssel

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:


und jetzt das Schlüsselwort

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