________________________________________________________________________________
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!"
![]()
Umwandlung:= numlib::toAscii(Nachricht1)
![]()
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)
![]()
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
![]()
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)
![]()
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)
![]()
Zu guter Letzt wird wieder in einen Textstring zurückgewandelt:
entschluesselteNachricht :=
numlib::fromAscii(entschluesselteUmwandlung)
![]()
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)
![]()
Schon hier sehen wir, dass dieser Text viel zu kurz ist. Also was macht jetzt der
Empfänger?
verschluesselteUmwandlung2 :=
numlib::toAscii(verschluesselteNachricht)
![]()
entschluesselteUmwandlung2 :=
map(verschluesselteUmwandlung2, Caesar, -17)
![]()
entschluesselteNachricht2 :=
numlib::fromAscii(entschluesselteUmwandlung2)
![]()
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)
![]()
verschluesselteNachricht :=
numlib::fromAscii(verschluesselteUmwandlung)
![]()
Der Empfänger entschlüsselt wie folgt:
verschluesselteUmwandlung2 :=
numlib::toAscii(verschluesselteNachricht);
entschluesselteUmwandlung2 :=
map(verschluesselteUmwandlung2, Caesar2, -17);
entschluesselteNachricht2 :=
numlib::fromAscii(entschluesselteUmwandlung2)
![]()
![]()
![]()
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)
![]()
2) Der Empfänger entschlüsselt die erhaltene Nachricht:
Entschluesselung :=
CaesarVer_Entschluesselung(Verschluesselung, -17)
![]()
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
_____________________________________________________________________________________