MuPAD Education Group: Kostenlose Materialen für MuPAD Pro:
www.sciface.com/education, schule.mupad.de, studium.mupad.de, mupad.zum.de.

________________________________________________________________________________

 

Inhalt....: Cäsar-Verschlüsselung

Kategorie.: Arbeitsblatt

Mathematik: Kryptographie, Zahlentheorie

MuPAD.....: 3.0.0

Datum.....: 2003-06-23

Autoren...: Julia Faflek <faflek@mupad.de>

Funktionen: numlib::toAscii, numlib::fromAscii, mod

________________________________________________________________________________

 

Ver- und Entschlüsselung beliebig langer Texte

mittels der Cäsar-Methode

 

Die Cäsar-Methode ist ein sehr altes Verschlüsselungsverfahren, das zu Zeiten des römischen

Kaisers Julius Cäsar benutzt wurde. Hier wird das Verfahren vorgestellt und gezeigt, wie leicht

es in der heutigen Zeit zu brechen ist.

 

 

Cäsar verschlüsselte seine Nachrichten, indem er jeden Buchstaben z.B. um

3 Stellen im Alphabet verschob, d.h. aus einem A wurde ein D, aus B ein E,

aus X ein A, usw. Der Empfänger der codierten Nachricht musste nur wissen,

um wie viele Plätze verschoben worden war, und konnte dann entsprechend

"zurückschieben", um die Nachricht zu entschlüsseln.

 

In der Praxis ist es natürlich handlicher, jeden Buchstaben durch eine Zahl zu

repräsentieren und dann mit diesen Zahlen zu rechnen. Am einfachsten können

wir dies in MuPAD mittels der Umwandlung in das ASCII-Format durchführen:

 

Nachricht1:= "Mit MuPAD kann man tolle und lustige Sachen machen!"

math

Umwandlung:= numlib::toAscii(Nachricht1)

math

Jedes Textzeichen wird nun durch eine Zahl zwischen 0 und 127 repräsentiert.

Analog können wir eine Liste im ASCII-Format wieder in einen Textstring zu-

rückwandeln:

 

numlib::fromAscii(Umwandlung)

math

Wir sind also in der Lage mittels nur eines Funktionsaufrufs, eine Textnachricht

in die gewünschte Zahlendarstellung zu bringen. Zur Verschlüsselung addieren

wir zu jedem Eintrag der ASCII-Liste den Schlüssel (eine ganze Zahl) und

rechnen dabei modulo 127, damit jede Zahl zwischen 0 und 127 wieder auf

eine Zahl in dem gleichen Intervall abgebildet wird:

 

Caesar := (Buchstabe, Schluessel) -> (Buchstabe + Schluessel) mod 127

math

 

Mit dieser kleinen Prozedur ist es uns nun möglich, die umgewandelte Text-

nachricht von oben zu verschlüsseln. Dazu muss die Prozedur auf jeden Eintrag

der Liste angewandt werden. Dies realisieren wir mit dem map-Befehl und

benutzen den Schlüssel 17:

 

verschluesselteUmwandlung := map(Umwandlung, Caesar, 17)

math

Diese Liste schicken wir nun dem Empfänger. Dieser kennt natürlich den ge-

heimen Schlüssel und weiß, dass er nun 17 von jeder Zahl abziehen muss.

Dazu verwendet er die gleiche Prozedur wie zum Verschlüsseln. Deswegen

nennt man solche Verfahren auch symmetrische Verschlüsselungsverfahren.

 

entschluesselteUmwandlung :=

   map(verschluesselteUmwandlung, Caesar, -17)

math

Zu guter Letzt wird wieder in einen Textstring zurückgewandelt:

 

entschluesselteNachricht :=

   numlib::fromAscii(entschluesselteUmwandlung)

math

Nun stellt sich hier aber ein Problem. Was passiert, wenn wir dem Empfänger die

verschlüsselte Nachricht in Textform schicken?

 

verschluesselteNachricht :=

   numlib::fromAscii(verschluesselteUmwandlung)

math

Schon hier sehen wir, dass dieser Text viel zu kurz ist. Also was macht jetzt der

Empfänger?

 

verschluesselteUmwandlung2 :=

   numlib::toAscii(verschluesselteNachricht)

math

entschluesselteUmwandlung2 :=

   map(verschluesselteUmwandlung2, Caesar, -17)

math

entschluesselteNachricht2 :=

   numlib::fromAscii(entschluesselteUmwandlung2)

math

Nanu? Was ist denn jetzt passiert? Das Problem ist folgendes: Die Großbuch-

staben werden im ASCII-Format durch die Zahlen 65 bis 90 repräsentiert, die

Kleinbuchstaben durch 97 bis 122. Alle anderen Zahlen stehen für Sonder-

zeichen. 

 

Daher kann es passieren, dass Leerzeichen bei der Umwandlung von ASCII in

Text einfach weggelassen werden. Um dieses Problem zu umgehen, schreiben

wir eine Prozedur, die nur die Buchstaben wieder auf Buchstaben abbildet und

die Sonderzeichen unangetastet lässt.

 

Caesar2 := proc(Buchstabe, Schluessel)

   local Hilfe;

begin

   Hilfe := Buchstabe:

   if Hilfe > 64 then

      if Hilfe < 91 then

         Hilfe := 65 + ((Hilfe - 65 + Schluessel) mod 26):

      end_if:

   end_if:

   if Hilfe > 96 then

      if Hilfe < 123 then

         Hilfe := 97 + ((Hilfe - 97 + Schluessel) mod 26):

      end_if:

   end_if:

   Hilfe:

end_proc:

 

Nun können wir dem Empfänger die verschlüsselte Nachricht in Textform zu-

kommen lassen:

 

verschluesselteUmwandlung := map(Umwandlung, Caesar2, 17)

math

verschluesselteNachricht :=

   numlib::fromAscii(verschluesselteUmwandlung)

math

 

Der Empfänger entschlüsselt wie folgt:

 

verschluesselteUmwandlung2 :=

   numlib::toAscii(verschluesselteNachricht);

entschluesselteUmwandlung2 :=

   map(verschluesselteUmwandlung2, Caesar2, -17);

entschluesselteNachricht2 :=

   numlib::fromAscii(entschluesselteUmwandlung2)

math

math

math

Jetzt klappt alles reibungslos!

 

Zu guter Letzt schreiben wir eine Verschlüsselungs- und Entschlüsselungs-

prozedur, die die vorherigen Aufrufe enthält. Wir brauchen dafür nur eine

Prozedur, da die Caesar-Methode symmetrisch ist.

CaesarVer_Entschluesselung := proc(Nachricht, Schluessel)

   local Hilfe1, Hilfe2;

begin

   Hilfe1 := numlib::toAscii(Nachricht):

   Hilfe2 := map(Hilfe1, Caesar2, Schluessel):

   return(numlib::fromAscii(Hilfe2)):

end_proc:

 

Mittels dieser Prozedur sieht das ganze dann so aus:

 

1) Wir verschlüsseln die Nachricht:

 

Verschluesselung :=

   CaesarVer_Entschluesselung(Nachricht1, 17)

math

2) Der Empfänger entschlüsselt die erhaltene Nachricht:

 

Entschluesselung :=

   CaesarVer_Entschluesselung(Verschluesselung, -17)

math

Nun ist es an der Zeit, sich über die Sicherheit der Cäsar-Methode Ge-

danken zu machen. Es gibt doch nur 26 verschiedene Möglichkeiten für

den Schlüssel, nämlich 0 bis 25, da modulo 26 gerechnet wird. Wobei der

Schlüssel 0 keine Verschlüsselung bewirkt und daher auch in der Praxis

nicht verwendet wird.

 

Also probieren wir einfach alle möglichen Verschiebungen von 1 bis 25 aus:

 

Angriff := proc(Nachricht)

   local Hilfe, Schluessel;

begin

   for Schluessel from 1 to 25 do

      Hilfe :=

         CaesarVer_Entschluesselung(Nachricht, -Schluessel):

      print(Unquoted, " Mit Schlüssel " .Schluessel.

            " lautet die entschlüsselte Nachricht: \n" .Hilfe):

   end_for:

end_proc:

Angriff(Verschluesselung)

Mit Schlüssel 1 lautet die entschlüsselte Nachricht:

Cyj CkFQT aqdd cqd jebbu kdt bkijywu Iqsxud cqsxud!

Mit Schlüssel 2 lautet die entschlüsselte Nachricht:

Bxi BjEPS zpcc bpc idaat jcs ajhixvt Hprwtc bprwtc!

Mit Schlüssel 3 lautet die entschlüsselte Nachricht:

Awh AiDOR yobb aob hczzs ibr zighwus Goqvsb aoqvsb!

Mit Schlüssel 4 lautet die entschlüsselte Nachricht:

Zvg ZhCNQ xnaa zna gbyyr haq yhfgvtr Fnpura znpura!

Mit Schlüssel 5 lautet die entschlüsselte Nachricht:

Yuf YgBMP wmzz ymz faxxq gzp xgefusq Emotqz ymotqz!

Mit Schlüssel 6 lautet die entschlüsselte Nachricht:

Xte XfALO vlyy xly ezwwp fyo wfdetrp Dlnspy xlnspy!

Mit Schlüssel 7 lautet die entschlüsselte Nachricht:

Wsd WeZKN ukxx wkx dyvvo exn vecdsqo Ckmrox wkmrox!

Mit Schlüssel 8 lautet die entschlüsselte Nachricht:

Vrc VdYJM tjww vjw cxuun dwm udbcrpn Bjlqnw vjlqnw!

Mit Schlüssel 9 lautet die entschlüsselte Nachricht:

Uqb UcXIL sivv uiv bwttm cvl tcabqom Aikpmv uikpmv!

Mit Schlüssel 10 lautet die entschlüsselte Nachricht:

Tpa TbWHK rhuu thu avssl buk sbzapnl Zhjolu thjolu!

Mit Schlüssel 11 lautet die entschlüsselte Nachricht:

Soz SaVGJ qgtt sgt zurrk atj rayzomk Yginkt sginkt!

Mit Schlüssel 12 lautet die entschlüsselte Nachricht:

Rny RzUFI pfss rfs ytqqj zsi qzxynlj Xfhmjs rfhmjs!

Mit Schlüssel 13 lautet die entschlüsselte Nachricht:

Qmx QyTEH oerr qer xsppi yrh pywxmki Weglir qeglir!

Mit Schlüssel 14 lautet die entschlüsselte Nachricht:

Plw PxSDG ndqq pdq wrooh xqg oxvwljh Vdfkhq pdfkhq!

Mit Schlüssel 15 lautet die entschlüsselte Nachricht:

Okv OwRCF mcpp ocp vqnng wpf nwuvkig Ucejgp ocejgp!

Mit Schlüssel 16 lautet die entschlüsselte Nachricht:

Nju NvQBE lboo nbo upmmf voe mvtujhf Tbdifo nbdifo!

Mit Schlüssel 17 lautet die entschlüsselte Nachricht:

Mit MuPAD kann man tolle und lustige Sachen machen!

Mit Schlüssel 18 lautet die entschlüsselte Nachricht:

Lhs LtOZC jzmm lzm snkkd tmc ktrshfd Rzbgdm lzbgdm!

Mit Schlüssel 19 lautet die entschlüsselte Nachricht:

Kgr KsNYB iyll kyl rmjjc slb jsqrgec Qyafcl kyafcl!

Mit Schlüssel 20 lautet die entschlüsselte Nachricht:

Jfq JrMXA hxkk jxk qliib rka irpqfdb Pxzebk jxzebk!

Mit Schlüssel 21 lautet die entschlüsselte Nachricht:

Iep IqLWZ gwjj iwj pkhha qjz hqopeca Owydaj iwydaj!

Mit Schlüssel 22 lautet die entschlüsselte Nachricht:

Hdo HpKVY fvii hvi ojggz piy gpnodbz Nvxczi hvxczi!

Mit Schlüssel 23 lautet die entschlüsselte Nachricht:

Gcn GoJUX euhh guh niffy ohx fomncay Muwbyh guwbyh!

Mit Schlüssel 24 lautet die entschlüsselte Nachricht:

Fbm FnITW dtgg ftg mheex ngw enlmbzx Ltvaxg ftvaxg!

Mit Schlüssel 25 lautet die entschlüsselte Nachricht:

Eal EmHSV csff esf lgddw mfv dmklayw Ksuzwf esuzwf!

 

Die einzige Nachricht, die Sinn macht, ist die, die mit Schlüssel 17 entschlüsselt

wurde. Wir haben also gesehen, dass dieses System sehr schnell und leicht zu

brechen ist.

 

_____________________________________________________________________________________

 

Übungen:

1. Entschlüsseln Sie die Nachricht: "Cvggj HpKVY-Amzpiyz! Hvxco yvn Qzmnxcgpznnzgi hdo Xvznvm

    idxco bmjnnzi Nkvnn? Qjmvggzh rzdg hvi zn nj gzdxco fivxfzi fvii ;-)"!

_____________________________________________________________________________________

 

Anmerkungen:

 

1.  Weitere Anregungen finden Sie unter: http://schule.mupad.de bzw. http://studium.mupad.de

 

_____________________________________________________________________________________

 

 

 

MuPAD Education Group: Kostenlose Materialen für MuPAD Pro:
www.sciface.com/education, schule.mupad.de, studium.mupad.de, mupad.zum.de.