\mnb150ÿ{\rtf1\ansi\deff0\deftab720{\fonttbl{\f0\fswiss MS Sans Serif;}{\f1\froman\fcharset2 Symbol;}{\f2\fswiss\fprq2 System;}{\f3\fmodern\fprq1 Courier New;}{\f4\fswiss\fprq2 Arial;}{\f5\fmodern\fprq1\fcharset1 Courier New;}{\f6\fswiss\fprq2\fcharset1 Arial;}{\f7\fswiss\fprq2 Helvetica;}} {\colortbl\red0\green0\blue0;\red255\green0\blue0;\red0\green0\blue255;\red0\green128\blue0;\red255\green255\blue255;} \deflang1031\pard\ri4\plain\f3\fs20\cf0\b ________________________________________________________________________________ \par \par \plain\f3\fs20\cf0 Inhalt....: C\'e4sar-Verschl\'fcsselung \par Kategorie.: Arbeitsblatt \par Mathematik: Kryptographie, Zahlentheorie \par MuPAD.....: 3.0.0 \par Datum.....: 2003-06-23 \par Autoren...: Julia Faflek \par Funktionen: numlib::toAscii, numlib::fromAscii, mod \par \plain\f3\fs20\cf0\b ________________________________________________________________________________ \par \plain\f4\fs36\cf0\b \par \plain\f4\fs40\cf0\b Ver- und Entschl\'fcsselung beliebig langer Texte \par mittels der C\'e4sar-Methode\plain\f4\fs36\cf0\b \par \plain\f4\fs22\cf0 \par \plain\f4\fs24\cf3 Die C\'e4sar-Methode ist ein sehr altes Verschl\'fcsselungsverfahren, das zu Zeiten des r\'f6mischen \par Kaisers Julius C\'e4sar benutzt wurde. Hier wird das Verfahren vorgestellt und gezeigt, wie leicht \par es in der heutigen Zeit zu brechen ist. \par \plain\f3\fs22\cf2 \par \par \plain\f4\fs28\cf0 C\'e4sar verschl\'fcsselte seine Nachrichten, indem er jeden Buchstaben z.B. um \par 3 Stellen im Alphabet verschob, d.h. aus einem A wurde ein D, aus B ein E, \par aus X ein A, usw. Der Empf\'e4nger der codierten Nachricht musste nur wissen, \par um wie viele Pl\'e4tze verschoben worden war, und konnte dann entsprechend \par "zur\'fcckschieben", um die Nachricht zu entschl\'fcsseln. \par \par In der Praxis ist es nat\'fcrlich handlicher, jeden Buchstaben durch eine Zahl zu \par repr\'e4sentieren und dann mit diesen Zahlen zu rechnen. Am einfachsten k\'f6nnen \par wir dies in MuPAD mittels der Umwandlung in das ASCII-Format durchf\'fchren: \par \plain\f4\fs22\cf0 \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f3\fs28\cf1 {\pntext\f1\'b7\tab}Nachricht1:= "Mit MuPAD kann man tolle und lustige Sachen machen!"\plain\f4\fs28\cf1 \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f3\fs28\cf1 {\pntext\f1\'b7\tab}Umwandlung:= numlib::toAscii(Nachricht1) \par \pard\ri4\plain\f4\fs28\cf0 \par Jedes Textzeichen wird nun durch eine Zahl zwischen 0 und 127 repr\'e4sentiert. \par Analog k\'f6nnen wir eine Liste im ASCII-Format wieder in einen Textstring zu- \par r\'fcckwandeln: \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f3\fs28\cf1 {\pntext\f1\'b7\tab}numlib::fromAscii(Umwandlung) \par \pard\ri4\plain\f4\fs28\cf0 \par Wir sind also in der Lage mittels nur eines Funktionsaufrufs, eine Textnachricht \par in die gew\'fcnschte Zahlendarstellung zu bringen. Zur Verschl\'fcsselung addieren \par wir zu jedem Eintrag der ASCII-Liste den Schl\'fcssel (eine ganze Zahl) und \par rechnen dabei modulo 127, damit jede Zahl zwischen 0 und 127 wieder auf \par eine Zahl in dem gleichen Intervall abgebildet wird: \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f3\fs28\cf1 {\pntext\f1\'b7\tab}Caesar := proc(Buchstabe, Schluessel) \par \pard\li600\ri1\fi-300\plain\f3\fs28\cf1 begin \par (Buchstabe + Schluessel) mod 127; \par end_proc: \par \pard\ri4\plain\f6\fs28\cf0 \par Mit dieser kleinen Prozedur ist es uns nun m\'f6glich, die umgewandelte Text- \par nachricht von oben zu verschl\'fcsseln. Dazu muss die Prozedur auf jeden Eintrag \par der Liste angewandt werden. Dies realisieren wir mit dem \plain\f5\fs28\cf1 map\plain\f6\fs28\cf0 -Befehl und \par benutzen den Schl\'fcssel 17: \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f3\fs28\cf1 {\pntext\f1\'b7\tab}verschluesselteUmwandlung := map(Umwandlung, Caesar, 17) \par \pard\ri4\plain\f6\fs28\cf0 \par Diese Liste schicken wir nun dem Empf\'e4nger. Dieser kennt nat\'fcrlich den ge- \par heimen Schl\'fcssel und wei\'df, dass er nun 17 von jeder Zahl abziehen muss. \par Dazu verwendet er die gleiche Prozedur wie zum Verschl\'fcsseln. Deswegen \par nennt man solche Verfahren auch symmetrische Verschl\'fcsselungsverfahren.\plain\f4\fs28\cf0 \par \plain\f3\fs22\cf1 \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f3\fs28\cf1 {\pntext\f1\'b7\tab}entschluesselteUmwandlung := \par \pard\li600\ri1\fi-300\plain\f3\fs28\cf1 map(verschluesselteUmwandlung, Caesar, -17) \par \pard\ri4\plain\f4\fs28\cf0 \par Zu guter Letzt wird wieder in einen Textstring zur\'fcckgewandelt: \par \plain\f3\fs22\cf2 \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f3\fs28\cf1 {\pntext\f1\'b7\tab}entschluesselteNachricht := \par \pard\li600\ri1\fi-300\plain\f3\fs28\cf1 numlib::fromAscii(entschluesselteUmwandlung) \par \pard\ri4\plain\f3\fs20\cf0\b \par \plain\f4\fs28\cf0 Nun stellt sich hier aber ein Problem. Was passiert, wenn wir dem Empf\'e4nger die \par verschl\'fcsselte Nachricht in Textform schicken? \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f3\fs28\cf1 {\pntext\f1\'b7\tab}verschluesselteNachricht := \par \pard\li600\ri1\fi-300\plain\f3\fs28\cf1 numlib::fromAscii(verschluesselteUmwandlung) \par \pard\ri4\plain\f6\fs28\cf0 \par Schon hier sehen wir, dass dieser Text viel zu kurz ist. Also was macht jetzt der \par Empf\'e4nger? \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f3\fs28\cf1 {\pntext\f1\'b7\tab}verschluesselteUmwandlung2 := \par \pard\li600\ri1\fi-300\plain\f3\fs28\cf1 numlib::toAscii(verschluesselteNachricht) \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f3\fs28\cf1 {\pntext\f1\'b7\tab}entschluesselteUmwandlung2 := \par \pard\li600\ri1\fi-300\plain\f3\fs28\cf1 map(verschluesselteUmwandlung2, Caesar, -17) \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f3\fs28\cf1 {\pntext\f1\'b7\tab}entschluesselteNachricht2 := \par \pard\li600\ri1\fi-300\plain\f3\fs28\cf1 numlib::fromAscii(entschluesselteUmwandlung2) \par \pard\ri4\plain\f6\fs28\cf0 \par Nanu? Was ist denn jetzt passiert? Das Problem ist folgendes: Die Gro\'dfbuch- \par staben werden im ASCII-Format durch die Zahlen 65 bis 90 repr\'e4sentiert, die \par Kleinbuchstaben durch 97 bis 122. Alle anderen Zahlen stehen f\'fcr Sonder- \par zeichen. \par \par Daher kann es passieren, dass Leerzeichen bei der Umwandlung von ASCII in \par Text einfach weggelassen werden. Um dieses Problem zu umgehen, schreiben \par wir eine Prozedur, die nur die Buchstaben wieder auf Buchstaben abbildet und \par die Sonderzeichen unangetastet l\'e4sst. \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f3\fs28\cf1 {\pntext\f1\'b7\tab}Caesar2 := proc(Buchstabe, Schluessel) \par \pard\li600\ri1\fi-300\plain\f3\fs28\cf1 local Hilfe; \par begin \par Hilfe := Buchstabe: \par if Hilfe > 64 then \par if Hilfe < 91 then \par Hilfe := 65 + ((Hilfe - 65 + Schluessel) mod 26): \par end_if: \par end_if: \par if Hilfe > 96 then \par if Hilfe < 123 then \par Hilfe := 97 + ((Hilfe - 97 + Schluessel) mod 26): \par end_if: \par end_if: \par Hilfe: \par end_proc: \par \pard\ri4\plain\f4\fs28\cf0 \par Nun k\'f6nnen wir dem Empf\'e4nger die verschl\'fcsselte Nachricht in Textform zu- \par kommen lassen: \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f3\fs28\cf1 {\pntext\f1\'b7\tab}verschluesselteUmwandlung := map(Umwandlung, Caesar2, 17) \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f3\fs28\cf1 {\pntext\f1\'b7\tab}verschluesselteNachricht := \par \pard\li600\ri1\fi-300\plain\f3\fs28\cf1 numlib::fromAscii(verschluesselteUmwandlung) \par \pard\ri4\plain\f6\fs28\cf0 \par Der Empf\'e4nger entschl\'fcsselt wie folgt: \par \plain\f3\fs22\cf2 \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f3\fs28\cf1 {\pntext\f1\'b7\tab}verschluesselteUmwandlung2 := \par \pard\li600\ri1\fi-300\plain\f3\fs28\cf1 numlib::toAscii(verschluesselteNachricht); \par entschluesselteUmwandlung2 := \par map(verschluesselteUmwandlung2, Caesar2, -17); \par entschluesselteNachricht2 := \par numlib::fromAscii(entschluesselteUmwandlung2) \par \pard\ri4\plain\f4\fs28\cf0 \par Jetzt klappt alles reibungslos! \par \par Zu guter Letzt schreiben wir eine Verschl\'fcsselungs- und Entschl\'fcsselungs- \par prozedur, die die vorherigen Aufrufe enth\'e4lt. Wir brauchen daf\'fcr nur eine \par Prozedur, da die Caesar-Methode symmetrisch ist. \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f3\fs28\cf1 {\pntext\f1\'b7\tab}CaesarVer_Entschluesselung := proc(Nachricht, Schluessel) \par \pard\li600\ri1\fi-300\plain\f3\fs28\cf1 local Hilfe1, Hilfe2; \par begin \par Hilfe1 := numlib::toAscii(Nachricht): \par Hilfe2 := map(Hilfe1, Caesar2, Schluessel): \par return(numlib::fromAscii(Hilfe2)): \par end_proc: \par \pard\ri4\plain\f4\fs28\cf0 \par Mittels dieser Prozedur sieht das ganze dann so aus: \par \par 1) Wir verschl\'fcsseln die Nachricht: \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f3\fs28\cf1 {\pntext\f1\'b7\tab}Verschluesselung := \par \pard\li600\ri1\fi-300\plain\f3\fs28\cf1 CaesarVer_Entschluesselung(Nachricht1, 17) \par \pard\ri4\plain\f4\fs28\cf0 \par 2) Der Empf\'e4nger entschl\'fcsselt die erhaltene Nachricht: \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f3\fs28\cf1 {\pntext\f1\'b7\tab}Entschluesselung := \par \pard\li600\ri1\fi-300\plain\f3\fs28\cf1 CaesarVer_Entschluesselung(Verschluesselung, -17) \par \pard\ri4\plain\f4\fs28\cf0 \par Nun ist es an der Zeit, sich \'fcber die Sicherheit der C\'e4sar-Methode Ge- \par danken zu machen. Es gibt doch nur 26 verschiedene M\'f6glichkeiten f\'fcr \par den Schl\'fcssel, n\'e4mlich 0 bis 25, da modulo 26 gerechnet wird. Wobei der \par Schl\'fcssel 0 keine Verschl\'fcsselung bewirkt und daher auch in der Praxis \par nicht verwendet wird. \par \par Also probieren wir einfach alle m\'f6glichen Verschiebungen von 1 bis 25 aus: \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f3\fs28\cf1 {\pntext\f1\'b7\tab}Angriff := proc(Nachricht) \par \pard\li600\ri1\fi-300\plain\f3\fs28\cf1 local Hilfe, Schluessel; \par begin \par for Schluessel from 1 to 25 do \par Hilfe := \par CaesarVer_Entschluesselung(Nachricht, -Schluessel): \par print(Unquoted, " Mit Schl\'fcssel " .Schluessel. \par " lautet die entschl\'fcsselte Nachricht: \\n" .Hilfe): \par end_for: \par end_proc: \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f3\fs28\cf1 {\pntext\f1\'b7\tab}Angriff(Verschluesselung) \par \pard\ri4\plain\f4\fs28\cf0 \par Die einzige Nachricht, die Sinn macht, ist die, die mit Schl\'fcssel 17 entschl\'fcsselt \par wurde. Wir haben also gesehen, dass dieses System sehr schnell und leicht zu \par brechen ist. \par \plain\f3\fs22\cf2 \par \plain\f3\fs20\cf0\b _____________________________________________________________________________________\plain\f3\fs22\cf1 \par \plain\f3\fs22\cf2 \par \plain\f4\fs22\cf2\b \'dcbungen: \par \plain\f4\fs20\cf2\b 1.\plain\f4\fs20\cf2 Entschl\'fcsseln Sie die Nachricht: "Cvggj HpKVY-Amzpiyz! Hvxco yvn Qzmnxcgpznnzgi hdo Xvznvm \par \plain\f4\fs20\cf4 \plain\f4\fs20\cf2 idxco bmjnnzi Nkvnn? Qjmvggzh rzdg hvi zn nj gzdxco fivxfzi fvii ;-)"! \par \plain\f3\fs20\cf0\b _____________________________________________________________________________________ \par \plain\f4\fs22\cf0 \par \plain\f4\fs22\cf3\b Anmerkungen:\plain\f4\fs22\cf3 \par \plain\f4\fs20\cf3\b 1. \plain\f4\fs20\cf3 Unter \plain\f4\fs20\cf3\b\i www.mupad.de/schule+studium/material/\plain\f4\fs20\cf3 befinden sich Notebooks, die sich ebenfalls mit Kryptographie \par \plain\f4\fs20\cf4 ss\plain\f4\fs20\cf3 besch\'e4ftigen. \par \par \plain\f4\fs20\cf3\b 2. \plain\f4\fs20\cf3 Weitere Anregungen finden Sie in der Buchreihe \plain\f4\fs20\cf1 Mathematik 1 x anders\plain\f4\fs20\cf3 . In dieser Reihe wird eine Vielzahl \par \plain\f4\fs20\cf4 ss\plain\f4\fs20\cf3 unterschiedlichster mathematischer Probleme mit MuPAD gel\'f6st. Die B\'fccher k\'f6nnen unter \par \plain\f4\fs20\cf4 ss\plain\f7\fs20\cf2 www.schule.mupad.de/literatur\plain\f4\fs20\cf3 kostenfrei kopiert werden. \par \plain\f4\fs20\cf1 \par \plain\f3\fs20\cf0\b _____________________________________________________________________________________ \par \par \par }