Donnerstag, 19. November 2015

Die Forellen-Simulation

In den letzten Wochen haben wir stetig weiter simuliert und wiederholen jetzt eigentlich nur noch Dinge die wir schon oft gemacht haben, deswegen werden einige der folgenden Diagramme wahrscheinlich sehr vertraut aussehen. Ich werde jetzt eine Aufgabe vorstellen, in der es um einen Forellensee im Kosovo geht.

Im ersten Szenario werden 100 Forellen in dem See mit optimalen Bedingungen ausgesetzt. Wie man schnell erkennt, handelt es sich hierbei im exponentielles Wachstum, weil die Forellen mit wachsender Bevölkerung auch immer mehr Nachkommen bekommen, das Wirkungsdiagramm sieht folgendermaßen aus:


Das exponentielle Wachstum wird noch einmal durch das eskalierende Wirkungsdiagramm deutlich.

Aufbau des ersten Szenarios in Consideo

Exponentieller Kurvenverlauf des ersten Szenarios


Im zweiten Szenario stellt sich heraus, dass die Nahrung doch nicht für unendlich viele Fische reicht, außerdem sind einige Forellen bei Revierkämpfen gestorben. Hier wird also eine Kapazitätsgrenze eingeführt, ich simuliere sie einfach einmal bei 1000. Zu dieser Aufgabe erstelle ich jetzt nicht extra noch ein Wirkungsdiagramm, es würde aber bis zum Wendepunkt der logistischen Wachstumskurve die hier vorliegt genau so wie das oben gezeigte aussehen, danach wäre der Pfeil vom Bestand zum Wachstum gegensinnig, also minus. Die Simulation für Aufgabe zwei sieht in Consideo so aus:


Hinzugekommen sind der Flussfaktor "FreieKapazität" und der Informationsfaktor "Kapazität". Kapazität hat den feste wert 1000, Die Formel für "FreieKapazität" lautet:
 ([Kapazität]-[Bestand])/[Kapazität]
Dabei kommt eine Zahl zwischen 0 und 1 heraus, die mit dem Zuwachs verrechnet wird, so dass das Wachstum irgendwann abnimmt bis es nicht mehr vorhanden ist. Die Kurve für das logistische Wachstum in Aufgabe zwei sieht folgendermaßen aus:


Wie man deutlich sieht, steigt die Population zuerst exponentiell, ab dem Wendepunkt wird das Wachstum aber immer kleiner, bis sich die Population bei der Kapazitätsgrenze von 1000 stabilisiert.

Als allgemeine Formeln für exponentielles und logistisches Wachstum in Consideo kann man diese hier benutzen:


Exponentiell:    Bestand+(Bestand*Wachstumsfaktor)



Logistisch:        Bestand+(Bestand*Wachstumsfaktor*((Kapazität-Bestand)/Kapazität)





Konkurrenz

In einer anderen Aufgabe haben wir die Konkurrenz zwischen zwei verschiedenen Arten oder Populationen kennengelernt. Diese Konkurrenz werde ich nun in diese Aufgabe einbauen und sie erklären.

Wir gehen nun davon aus, dass im See nicht nur 100 oder 10 Kosovo-Forellen, sondern auch 100 oder 10 Individuen einer anderen Forellen Art ausgesetzt wurden. Nun können sich nicht mehr beide Arten direkt bis zur Kapazitätsgrenze vermehren. Um die Angepasstheit der einzelnen Populationen zu bestimmen, wird für jede ein Nutzungsfaktor eingeführt. Sind beide Nutzungsfaktoren sowie das Wachstum gleich, wachsen beide Populationen bis auf die Hälfte der Kapazität an. Ist ein Nutzungsfaktor größer als der andere, wachsen zuerst beide Populationen, dann setzt sich jedoch die mit der besseren Angepasstheit durch und verdrängt die anderen Fische wieder, bis ihre Populationsgröße bei der Kapazität liegt. In Consideo sieht der Aufbau folgendermaßen aus:


Auf den ersten Blick sieht das ganze etwas verwirrend aus, aber eigentlich ist es sehr einfach. Die ganze Simulation besteht eigentlich aus zwei einzelnen, die miteinander verknüpft wurden. Auf der linken Seite Population 1, auf der rechten Population 2. Die beiden Seiten sind jeweils mit dem Flussfaktor FreieKapazität(1 oder2) verbunden. Denn um die Konkurrenz zwischen den beiden Populationen darzustellen muss der Nutzungsfaktor ja irgendwie mit dem Wachstum verknüpft werden. Die Formel für FreieKapazität1 sieht z.B. folgender maßen aus:

FreieKap1: ([Kapazität]-[Population1]-[Nutzungsfaktor1]*[Population2])/[Kapazität]

Auch diese Formel wirkt auf den ersten und vielleicht auch auf den zweiten Blick etwas verwirrend, deswegen werde ich ihre Funktionsweise kurz erklären. Genau genommen ist es eine leicht angepasste Form dieser Formel: (Kapazität-Population)/Kapazität. Diese hatte ich bereits vorher aufgeführt, sie ermittelt über dem Bruchstrich die Freie Kapazität und teilt diese dann durch die Kapazität, so kommt ein Faktor zwischen 0 und 1 heraus, der wunderbar mit dem Wachstum verrechnet werden kann. Den letzten Teil dieser Formel, nämlich die Kapazität, erkannt man auch in der langen Version wieder. Über dem Bruchstrich hat sich jedoch einiges verändert.

Ganz am Anfang der Formel steht auch wieder die Kapazität. Von ihr wird zuerst die Population1 abgezogen, was noch verständlich seien sollte, wenn man die Freie Kapazität ermitteln möchte. Anschließend subtrahiert man (Nutzungsfaktor1*Population2). Nun muss man sich in Erinnerung rufen, dass der Faktor, der am Ende dieser Formel herauskommt, umso größer ist, je kleiner die Zahl über dem Bruchstrich ist (z.B. 10/1000=0.01, 900/1000=0.9). Je höher also der Nutzungsfaktor ist, desto geringer ist der Faktor der freien Kapazität.

Beispiele: (1000-200-1.2*300)/1000=0.44    (1000-200-0.8*300)/1000=0.65


Diese Faktoren werden nun jeweils im Flussfaktor ÄnderungsratePop(1 und 2) mit der jeweiligen Population und dem Wachstumsfaktor verrechnet. Daraus folgt, dass die Population, die sich besser durchsetzten kann einen niedrigeren Nutzungsfaktor zugeschrieben bekommen muss. Dies klingt relativ verwirrend und könnte durch eine andere Anordnung verändert werden, dem werde ich mich eventuell im nächsten Post widmen.


Nun ist hoffentlich klar, wie man eine Konkurrenz verschiedener Populationen in Consideo modellieren kann. Die Kurve zur Konkurrenz der Kosovo-Forelle und der anderen Forellen Art sieht folgendermaßen aus:


Dienstag, 15. September 2015

15.09.2015: Wirkungsdiagramme 2 und lineares Wachstum

Wirkungsdiagramme 2


In der ersten Hälfte dieser Stunde haben wir uns noch einmal mit Wirkungsdiagrammen beschäftigt und dazu einen Zettel bearbeitet. Die Lösungen werde ich hier in möglichst einfacher Form darstellen. 

Unten befindet sich eine Grafik, die die vorhandenen Typen von Wirkungsdiagrammen in der gefragten Aufgabe darstellt. A und B sind die verschiedenen Faktoren, die ich nun in einer Liste aufzählen werde, man muss sie dann nur noch dem richtigen Diagramm zuordnen.

Aufgabe 14: 

  • a) Verzehr von Süßigkeiten (A), Übergewicht (B) --> (2)
  • b) Preis einer Ware (A), abgesetzte Menge (B) --> (1)
  • c) Übungszeit am Klavier (A), Spaß am Spiel (B) --> (1)
  • d) Grippeerkrankungen an einer Schule (A), anwesende Schüler (B) --> (1)
  • e) Anzahl Füchse (A), Anzahl Hasen(B) --> (1)
  • f) Luftwiderstand (A), Geschwindigkeit eines Radfahrers (B) --> (1)
  • g) Motorisierung in der Bundesrep. (A), Ausbau des Straßennetzes (B) --> (2)
  • h) Belastung der Umwelt (A), Touristen in einem Gebiet (B) --> (1)
  • i) = b), abgesetzte Menge (B)--(+)-->Ertrag
  • j) = a), Übergewicht (B) --(+)--> Gesundheitsbewusstsein--(-)-->Verzehr von Süßigkeiten (A), kein Pfeil von (B) zu (A)


Lineares Wachstum

Im zweiten Teil der Stunde haben wir zwei Aufgaben bekommen, die erste werde ich jetzt vorstellen, die zweite folgt im nächsten Post. Die Aufgabe lautete: Zwei Hasen bekommen jeden Monat zwei Babys, wie viele Babys haben sie nach 100 Monaten? Diese Aufgabe sollten wir zuerst in einem Wirkunsgdiagramm darstellen und dann in iModeler simulieren.

Das Wirkungsdiagramm ist sehr einfach, es besteht aus einem Block Geburten, der durch einen Pluspfeil mit dem Block Hasenbabys verbunden ist. Je mehr Geburten, desto mehr Hasenbabys. 

Auch der Aufbau in iModeler ist denkbar einfach:

Die Zeiteinheit wird auf Monate umgestellt, so werden exakt 2 Geburten pro Monat simuliert. hierbei entsteht wie erwartet eine lineare Funktion, wie sich auch in der Gerade der Hasenbabys zeigt.




Nach 100 Monaten haben die Haseneltern also genau 200 Babys. 

Donnerstag, 10. September 2015

8.09.2015: Die Kaffeetassen-Simulation und Wirkungsdiagramme

Die Kaffeetasse


In den letzten beiden Posts hatte ich bereits über unsere Kaffetassen-Simulation berichtet und im letzten Post außerdem eine eigene Grafik zur Veranschaulichung eingestellt. Auch hatte ich berichtet, dass wir noch Probleme hatten, da der Temperaturabfall nach der Formel deutlich zu gering war. In dieser Stunde haben wir uns noch einmal kurz damit beschäftigt und sind nun zu einer Lösung gekommen: Die Formel die wir von unserer Lehrerin bekommen hatten (siehe Grafik aus vorherigem Post), war tatsächlich nicht ganz richtig. Die Abkühlungsfaktor war dort nämlich mit 1 beschrieben, dabei muss er deutlich höher liegen. Wie hoch er liegt, ist allerdings bei jedem mal anders, basierend auf Faktoren wie: Starttemperatur, Raumtemperatur, Material und Form der Tasse usw. In unserem Beispiel haben wir 30 als Faktor benutzt. Diese Zahl, den Abkühlungsfaktor, weiß man nicht vorher, man kann ihn lediglich durch einen Versuch herausfinden. Bei unserem Versuch lag die durchschnittliche Abkühlung des Kaffees pro Minute bei etwa 0,3. Daraus ergibt sich der Faktor 30. Wäre unser Kaffee aber von Anfang an heißer gewesen, wäre auch die durchschnittliche Abkühlung und somit auch der Faktor ein anderer. Man kann diese Simulation also nur eingeschränkt für andere Szenarien einsetzten, weil wichtige Werte erst im Versuch herausgefunden werden müssen. 



Wirkungsdiagramme

In der zweiten Hälfte der Stunde haben wir uns mit sogenannten Wirkungsdiagrammen beschäftigt. Ein Wirkungsdiagramm ist eine Veranschaulichung eines Systems, in dem sich verschiedene Faktoren gegenseitig beeinflussen. Zur Erklärung hier ein einfaches Wirkungsdiagramm:


Hier sieht man Faktor A und B und zwischen den beiden einen Pfeil, der von A nach B zeigt. An dem Pfeil steht immer entweder + oder -, nie wie in diesem Beispiel, beides zusammen. Die Pfeilrichtung bestimmt, welcher Faktor welchen bestimmt, hier bestimmt A B, es wäre aber auch andersherum möglich, oder auch so, dass sich beide Faktoren gegenseitig beeinflussen. Das Vorzeichen bestimmt, in welcher Weise ein Faktor einen anderen bestimmt. 

+ = gleichsinnige Wirkung: Je mehr A, desto mehr B, je weniger A, desto weniger B.
- = gegensinnige Wirkung: Je mehr A, desto weniger B. Je weniger A, desto mehr B.

Darüber hinaus gibt es stabilisierende und eskalierende Systeme. Ein stabilisierendes System besitzt mindestens zwei sich gegenseitig beeinflussende Faktoren und ist nicht rein gleichsinnig. Dadurch beeinflussen sich die Faktoren im System so, dass über längere Zeit gesehen stabil gleich bleibt. Dazu ein einfaches Beispiel:



In diesem Beispiel beeinflussen sich Katze und Maus. Je mehr Mäuse es gibt, desto mehr Katzen gibt es auch. Je mehr Katzen es wiederum gibt, desto weniger Mäuse gibt es. Zwischendurch werden mal die Mäuse mal die Katzen mehr, zeitweise dominiert also meistens ein Faktor, auch lange Sicht gesehen stabilisiert sich das System aber.

Eine weitere Möglichkeit ist ein eskalierendes System. Bei diesem System sind in der einfachsten Form alle Vorzeichen gleich, das heißt, dass sich das System immer mehr in eine Richtung entwickelt und keine stabilisierenden Faktoren besitzt.


Ein Beispiel dafür ist das sehr stark vereinfachte Bevölkerungswachstum. Je mehr Menschen es gibt, desto mehr Geburten gibt es. Je mehr Geburten es gibt, desto mehr Bevölkerung. Werden diesem System keine stabilisierenden Faktoren hinzugefügt, würde die Bevölkerungszahl immer weiter steigen. Das ist ein eskalierendes System.



Samstag, 5. September 2015

4.09.2015: Die Kaffee Simulation

Die Kaffeetasse

Wie bereits im letzten Blogpost berichtet, beschäftigen wir uns gerade mit der Simulation des Temperaturabfalls in einer Kaffeetasse. In Excel hatten wir den Abfall bereits simuliert, in dieser Stunde haben wir uns nun mit der Simulation in iModeler beschäftigt. Zu beginn haben wir den Temperaturabfall als linear simuliert, um eine erste, einfache Grundlage zu haben. Dies funktioniert sehr einfach, indem man in iModeler zwei "Kästchen" anlegt. Das eine nennt man z.B "Abkühlungfaktor", die Formel hierfür war in unserem Fall: 0,45. Das andere Kästchen haben wir "Kaffeetemperatur" genannt, hier lautet die Formel dann: valuebefore(65)-[Abkühlungsfaktor]. 0,45 ist die ungefähre Abkühlung pro Minute, 65 ist die Ausgangstemperatur in °C. Es werden also jede Minute 45% der Temperatur abgezogen. So lässt sich die Abkühlung sehr leicht als lineare Funktion darstellen. 

Da der Kaffee in der Tasse aber natürlich nicht linear, sondern in Form einer begrenzten Abnahme an Temperatur verliert, braucht man eine andere Herangehensweise. Wir haben recht lange an einer Lösung herumprobiert und zeitweise über eine komplizierte Mathematische Gleichung dritten Grades gedacht, die Lösung ist jedoch um einiges leichter. Unsere Lehrerin hat gegen Ende der Stunde den Aufbau an die Tafel geschrieben, den wir umsetzten müssen um den Temperaturabfall in deiner schönen, geschwungen Kurve simulieren zu können. Diese Lösung habe ich zum besseren Verständnis grafisch umgesetzt:



Die linke Spalte zeigt die Anordnung der "Kästchen" in iModeler, sowie deren Namen und Verbindungen, die auch über die Zu- und Abnahme entscheiden. In der rechten Spalte sieht man die jeweiligen Formeln, die im "Formula" Tab der "Kästchen" eingetragen werden müssen. Idealerweise kommt beim ausführen dieser Formel folgender Graph raus:


Hier wird deutlich, welche Anfangstemperatur der Kaffee hat, und wie er sich zuerst sehr schnell und dann immer langsamer der Raumtemperatur annähert. Wir hatten allerdings beim Verwenden der oben aufgeführten Anordnung das Problem, dass die Kaffeetemperatur extrem langsam gesunken ist, deswegen haben wir in der Formel für "Temperaturabnahme" die 1 versuchshalber durch eine 50 ersetzt, was der Realität deutlich nähert kommt, aber natürlich so trotzdem keine realistische Simulation darstellt. Eventuell liegt der Fehler auch bei uns, falls wir z.B. eine Klammer falls gesetzt haben. Diese Schwachstelle werden wir in der nächsten Stunde versuchen zu beheben, die Lösung werde ich natürlich auch wieder hier mitteilen. 


Donnerstag, 3. September 2015

1.09.2015: Simulation in iModeler

Die Badewanne


Bereits im letzten Post hatte Ich erklärt, wie wir den Zulauf von Wasser in eine Badewanne in Ecxel simuliert hatten. In dieser Stunde haben wir uns daran gemacht, den gleichen Versuch in einem neuen Programm, iModeler, zu simulieren. iModeler ist ein sehr umfangreiches Programm, das hauptsächlich zur Veranschaulichung komplexer Inhalte konzipiert wurde, sich aber auch für unsere Simulation benutzen lässt. In iModeler geht man anders vor als in Excel, man gibt hier nicht für verschiedene Zeitintervalle die errechneten Werte ein, sondern legt am Anfang alles fest. In unserem Beispiel hatten wir drei "Bausteine", die miteinander agiert haben und so das richtige Ergebnis geliefert haben. 


Ratio bestimmt, wie weit der Wasserhahn aufgedreht ist, angegeben durch eine Zahl zwischen 0 und 1, also 0=0% und 1=100%. In dieser Simulation liegt der Wert bei 1. Wasserzulauf bestimmt, wie viel Wasser pro Minute in die Wanne läuft. In unserem Fall sollen es 5 Liter pro Minute sein, deswegen ist die Formel für Wasserzulauf: [Ratio]*5 , also 1*5=5l/min


Wasserstand beschreibt wie nicht anders zu erwarten den jeweiligen Wasserstand in der Wanne. Die Formel hierfür lautet: valuebefore(0)+[Wasserzulauf]. Es wird also am Anfang von einer leeren Wanne (0) ausgegangen und dann minütlich der Wasserzulauf, also 5 l addiert.

Sind alle diese Werte eingeben, kann man sich in der sogenannten Cockpit Ansicht einen Graphen ansehen, der den Wasserzufluss visualisiert. 


Das lineare Wachstum des Wassers in der Wanne ist klar zu erkennen, allerdings hatten wir das Problem, das die Simulation nicht bei 0 l, sondern bei 5 l begonnen hat. Dieses Problem konnten wir bis jetzt noch nicht lösen.

iModeler ist meiner Meinung nach zur Simulation besser geeignet als Excel, weil deutlich mehr Faktoren eingerechnet werden können, allerdings finde ich das Programm selber sehr schlecht gestaltet. Wir mussten uns die Simulation von der Lehrerin erklären lassen, weil das Tutorial zu nichts nützt, generell ist das Programm äußerst unübersichtlich und sehr kompliziert. 



Die Kaffeetasse

Unsere zweite Simulation beschäftigt sich mit der Temperaturveränderung von Kaffee. Wie warm ist mein Kaffee nachdem er 5/10/60 Minuten stand. Dazu haben wir schon in der letzten Stunde alle 5 Minuten Messungen an heißem Wasser durchgeführt und dazu eine Simulation in Excel erstellt. 



Die Funktionsweise von Excel Simulationen sollte inzwischen bekannt sein, die einzigen Unterschiede zur Badewannesimulation bestehen darin, dass es sich hier nicht um lineares, sonder um exponentielles Wachstum handelt und, dass wir es mit einer Ab-, statt einer Zunahme zu tun haben. Im nächsten Blogeintrag wird höchstwahrscheinlich diese Simulation in iModeler sowie ausführliche Erklärungen folgen.




Sonntag, 30. August 2015

28.08.2015: Semsterthema Simulation

Einführung in die Simulation

Unser neues Semesterthema für das S3 ist die Simulation. Simulationen kommen in vielen verschiedenen Gebieten zum Einsatz. So gibt es eine Vielzahl an Simulationen, die zur Unterhaltung dienen, wie Flug-, Bahn-, oder Landwirtschaftssimulationen. Darüber hinaus werden Simulationen aber auch zum wirtschaftlichen und wissenschaftlichen Nutzen eingesetzt. 

Grundsätzlich ist eine Simulation ein Abbild der Realität, in dem verschiedenste Szenarien durchgerechnet werden können. Durch eine Simulation lässt sich ein Ereignis in der Zukunft oft sehr genau vorhersagen, so können beispielsweise Kosten antizipiert, oder ein Sturm vorhergesagt werden. Darüber hinaus gibt es eine Vielzahl weiterer Gründe, die für die Verwendung einer Simulation sprechen. So ist es z.B. möglich Versuche durchzuführen, die nicht einmal im Mikroskop erkennbar sind oder solche, die unser gesamtes Universum betreffen. Außerdem ist es häufig günstiger ein Programm zu entwickeln, als ein echtes Modell zu bauen, oder einen komplizierten Versuch durchzuführen. Darüber hinaus ist ein weiterer wichtiger Faktor, dass bei einer Simulation niemand in Gefahr gerät, so können beispielsweise Auto- oder Zugunfälle sicher simuliert werden, um Sicherheitsvorrichtungen zu verbessern. 

Um eine möglichst realitätsgetreue Simulation zu erstellen, braucht man alle wichtigen Daten. So müssen bei einer Simulation der Statik eines Hauses Faktoren wie das Baumaterial, Wetterkonditionen, die Bodenqualität und vieles mehr eingerechnet werden. Je mehr Faktoren man mit einbezieht, desto genauer wird auch das Ergebnis. Um die Funktionsweise eines Simulationsprogramms aber tatsächlich festzustellen benötigt man fundierte Daten mit denen man die Simulationsergebnisse vergleichen kann. So bietet es sich beim Statik Simulator an, bei einem baugleichen Haus Messungen der Statik an möglichst vielen verschiedenen Stellen vorzunehmen und diese dann mit den Ergebnissen des Simulator zu vergleichen. Erst dann kann man mit ziemlicher Sicherheit Prognosen für weitere Häuser abgeben. 


Die erste Simulation

Unsere aller erste Simulation simuliert das Einlaufen von Wasser in eine 100l fassende Badewanne. Die Aufgabe war in Excel eine Tabelle und eine passende Grafik zu erstellen. Die Fließgeschwindigkeit sollte 5 l/min betragen.


Wir haben also eine Tabelle mit zwei Spalten, eine für die Minuten, die andere für den Füllstand in Liter, angelegt. Die Grafik rechts daneben veranschaulicht den ansteigenden Füllstand der Badewanne. Wie erwartet ist die Badewanne nach 20 Minuten vollgelaufen. 

Dies ist die wohl simpelste Form einer Simulation, ist jedoch trotzdem ein gutes Beispiel da es den Verlauf des Füllstands detailliert simuliert, solange die Fließgeschwindigkeit gleichmäßig ist, und zwischendurch kein Wasser aus der Wanne entnommen und keins hinzugefügt wird. Ab da macht Excel als Simulationsprogramm keinen großen Sinn mehr. Im nächsten Blogeintrag wird deshalb eine Simulation des gleichen Problems in einem anderen Programm gezeigt werden.

Samstag, 20. Juni 2015

Verschlüsselung mit RSA

Nachdem wir nun mit Caesar und Vigenere zwei verschiedene Verschlüsselungen kennen gelernt haben, haben wir uns über die Probleme unterhalten, die diese beiden mit sich bringen. Das gravierendste ist das sogenannte Schlüsselproblem. Um eine mit Caesar oder Vigenere verschlüsselte Nachricht wieder entschlüsseln zu können, braucht der Empfänger natürlich ebenfalls den Schlüssel, den der Absender zum Verschlüsseln benutzt hat. Da der Schlüssel also auch übermittelt werden kann, kann er z.B. von einem Hacker ganz einfach abgefangen werden, der dann ganz problemlos die Nachricht entschlüsseln kann. Die Art der Verschlüsselung, bei der man mit dem gleichen Schlüssel ver- und auch wieder entschlüsseln kann, wird symmetrische Verschlüsselung genannt.Eine andere Form ist die asymmetrische Verschlüsselung, bei der es einen Schlüssel zum ver- und einen anderen um entschlüsseln gibt. RSA ist solch eine Verschlüsselung.

Das RSA-Kryptosystem ist ein sogenanntes asymmetrisches kryptographisches Verschlüsselungsverfahren. Es wurde nach den Mathematikern Ronald L. Rivest, Adi Shamir und Leonard Adleman benannt, die 1977 nach jahrelanger Forschung auf Basis einer Theorie zur "Public-Key-Kryptografie" RSA veröffentlichten.

Hier gibt es einen sogenannten öffentlichen Schlüssel, der zum Verschlüsseln benutzt wird und einen Privaten Schlüssel, den man zum Entschlüsseln benötigt. Das Schlüsselproblem lässt sich mit dieser Verschlüsselung auf folgende Weise lösen:

Bob braucht einen neuen Computer. Er möchte ihn im Online-Shop von Alice kaufen. Deswegen schickt er Alice eine Nachricht und sagt ihr, dass er gerne einen bestimmten Rechner bei ihr erwerben möchte. Damit Bobs Bankdaten nicht für jeden abfangbar sind muss er sie Verschlüsseln, so dass nur noch Alice sie wieder entschlüsseln kann. Alice sendet Bob ihren öffentlichen Schlüssel, ihren Privaten behält sie sicher bei sich. Bob verschlüsselt nun seine wertvollen Bankdaten und schickt die Verschlüsselte Nachricht zurück an Alice. Diese braucht jetzt bloß noch mit ihrem Privaten Schlüssel die Nachricht wieder zu entschlüsseln und der Kauf kann abgewickelt werden. Bob ist glücklich, denn er hat einen neuen Computer und seine Bankdaten wurden nicht geklaut. Gleichzeitig sitzt Hacker Emil weinend im Keller seiner Eltern, denn er hat versucht Bobs Bankdaten zu klauen. Aber alles was er abgefangen hat war ein nichts sagender Schlüssel und eine Nachricht die er damit nicht entschlüsseln konnte.


So oder zumindest ähnlich funktioniert die Verschlüsselung wichtiger Daten im Internet tagtäglich. Jedes Mal wenn z.B. ein Kauf über PayPal getätigt wird, müssen sensible Informationen sicher übermittelt werden. Um das Ganze aber noch sicherer zu gestalten gibt es noch einige Anforderungen, die erfüllt werden müssen:

Verfügbarkeit, Authentizität, Vertraulichkeit und Integrität. Diese Begriffe klingen zuerst vielleicht etwas kompliziert, sie alle dienen aber ganz einfach dazu, ein wichtiges Problem, das zweite Schlüsselproblem, zu beheben. Es gibt nämlich für Emil doch eine Möglichkeit an Bobs Bankdaten zu kommen:

Bob ist zufrieden mit seinem neuen Computer, aber leider hat er vergessen sich einen passenden Monitor zu bestellen. Deshalb tritt er wieder mit seiner Lieblingshändlerin Alice in Kontakt. Emil hat davon Wind bekommen will einen Trick anwenden, um diesmal endlich an Bobs Daten zu kommen. Er fängt also Bobs Nachricht ab, in der dieser Alice dazu auffordert ihm ihren öffentlichen Schlüssel zu schicken. Emil leitet diese Nachricht an Alice weiter und fängt wiederum ihre Antwort und somit ihren öffentlichen Schlüssel ab. Dann beginnt Emils Plan erst richtig. Er lässt sich selber ein Schlüsselpaar generieren, gibt sich als Alice aus und schickt Bob dann seinen eigenen Schlüssel. Der ahnt davon nichts, verschlüsselt seine Bankdaten und schickt sie zurück an Alice, aber auch diese Nachricht fängt Emil natürlich ab. Er kann die Daten mit seinem privaten Schlüssel wieder entschlüsseln und hat nun freien Zugang zu Bobs Geld. Damit Alice davon aber nichts merkt, verschlüsselt er Bobs Daten mit ihrem öffentlichen Schlüssel, den er ja bereits abgefangen hatte und schickt diese Nachricht zurück an Alice, natürlich unter Bobs Namen. Diese entschlüsselt das Ganze wieder und wickelt unwissend den Kauf ab. So haben weder Alice noch Bob gemerkt, dass jemand sich zwischen sie geschalten und Bobs Daten geklaut hat. Emil ist stolz auf sich und kauft sich von Bobs Geld eine eigene Wohnung, damit er nicht mehr im Keller seine Eltern leben muss.

All dies hätte verhindert werden können, wenn Alice' System ausgereifter gewesen wäre. Sie hätte Bob ihre Authentizität mit Hilfe ihren elektronischen Fingerabdrucks versichern sollen, dann hätte dieser nämlich gemerkt, dass sich jemand dazwischen geschaltet hat. Dann wäre auch die Vertraulichkeit und Integrität der Nachricht gesichert gewesen. Da das aber leider nicht der Fall war und Emil seine Spuren gut verwischt hat, muss Bob jetzt in die Privatinsolvenz gehen und seinen neuen Computer plus Monitor verpfänden. 


Schlüsselgenerierung in RSA

Wie wir bereits oben gelernt haben, operiert die asymmetrische Verschlüsselung RSA mit zwei Schlüsseln, einem öffentlichen und einem privaten. Im Folgenden werde ich nun erklären, wie ein solches Schlüsselpaar generiert wird. 

Es fängt damit an, dass man sich zwei Primzahlen p und q aussucht. Also z.B. 3 und 11.
Anschließend multipliziert man diese um N zu erhalten: 

N=p*q  3*11=N  N=33

N ist also 33, das ist der erste Teil des Schlüssels. Nun möchte man \varphi \,(N) herausfinden. Die Formel dazu lautet: \varphi \,(N)= (p-1)*(q-1)

(3-1)*(11-1)=\varphi \,(N)
            2*10=\varphi \,(N)
                20=\varphi \,(N)

Im nächsten Schritt muss man eine zu \varphi \,(N) teilerfremde Zahl e herausfinden. Das funktioniert so:

20=2*2*5   Die nächst größere Primzahl ist 7, also ist 7=e

Der öffentliche Schlüssel setzt sich folgendermaßen zusammen: (N, e). Folglich ist unser öffentlicher Schlüssen also (33, 7).

Für den Privaten Schlüssel benötigt man eine Tabelle:

   e            \varphi \,(N)         x           R           a            b

   7             20            0            7

Hier schreibt man in die erste Zeile seine Werte für e und \varphi \,(N) und teilt dann nach Grundschulmanieren mit Rest. Bei 7 durch 20 kommt 0 Rest 7 raus, das schreibt man bei x und R hin.

   e            \varphi \,(N)         x           R           a            b

   7             20            0            7                  
  20             7             2            6

Nun zieht man das \varphi \,(N) aus der ersten Zeile auf die Position des e und das R auf die Position von
 \varphi \,(N). Dann führt man die Division wieder durch. Dies setzt man so lange fort, bis man Rest 0 erhält.
Anschließend schreibt man in der untersten Zeile für a 0 und für B 1.

   e            \varphi \,(N)         x           R           a            b

   7             20            0            7                  
  20             7             2            6
   7              6             1            1
   6              1             6            0           0            1

Nun wendet man folgende Formel an: b=a-(x*b). Man nimmt das a und das b aus der letzten Zeile und das x, ganz wichtig, immer aus der Zeile darüber. Hier also: b=0-(1*1)    b=-1
Das schreibt man in der vorletzten Zeile für b auf, als a wird das b aus der darunter liegenden Zeile verwendet. Also:

   e            \varphi \,(N)         x           R           a            b

   7             20            0            7                  
  20             7             2            6
   7              6             1            1           1           -1
   6              1             6            0           0            1

Dieses Prinzip wird bis oben fortgesetzt, also: b=1-(2*(-1))  b=3


   e            \varphi \,(N)         x           R           a            b

   7             20            0            7                 
  20             7             2            6          -1            3
   7              6             1            1           1           -1
   6              1             6            0           0            1

Das b in der zweitobersten Zeile ist unser wert für d. Wir haben nun also d=3. Der private Schlüssel setzt sich folgendermaßen zusammen: (N, d). Folglich ist unser privater Schlüssel also (33, 3).

Nun wo wir beide Schlüssel, also ein vollständiges Schlüsselpaar haben, können wir auch ver- und entschlüsseln. Dazu gibt es die Formeln:

Zum Verschlüsseln: G=T^e  modN  (G=Geheimtext, T=Orginaltext)

Zum Entschlüsseln: T=G^d modN


Mit der kommenden Klausur werden wir dieses Thema wahrscheinlich abschließen und uns mit einem anderen Teil der Kryptologie beschäftigen.





Sonntag, 17. Mai 2015

Postankündigung 2

Wir haben vor einiger Zeit eine Reihe von Vorträgen zu verschiedenen Themen gehört. Dazu haben die Gruppen jeweils auch Handouts erstellt, die uns aber, aus welchen Gründen auch immer, bis heute nicht ausgeteilt wurden. Aus diesem Grund finden sich zu diesen Themen auf meinem Blog bisher keine Einträge, die werden aber natürlich folgen, sobald ich die Handouts habe.

SMTP/POP3

Kommunikationsprotokolle 

SMTP ist ein Kommunikationsprotokoll. Dieses Protokoll ist eine Vereinbarung, die die Datenübertragung zwischen mindestens zwei „Parteien“ im digitalen Datenverkehr regelt. Es Handelt sich um eine Art Regelbuch zu entscheidenden Elementen wie:·       Syntax (Reihenfolge)
·       Semantik (Bedeutung)
·       Synchronisation
 Es gibt eine riesige Anzahl an Kommunikationsprotokollen, zu den bekanntesten gehören das Internet Protocol (IP), sowie das Transmission Control Protocol (TCP). Häufig werden, vor allem in Netzwerken, Protokolle mit einander kombiniert, das nennt man dann Protokollstapel. 

SMTP 

SMTP steht für Simple Mail Transfer Protocol und ist ein textbasiertes Kommunikationsprotokoll. Es ist ein zentraler Bestandteil für die Übertragung von E-Mails. Mit SMTP können E-Mails entgegengenommen und weitergeleitet werden. Über SMTP wird eine Kommunikation zwischen einem E-Mail Client und einem SMTP-Server, oder zwischen zwei SMTP-Servern hergestellt. Das endgültige zustellen einer E-Mail ist mit SMTP aber nicht möglich, dafür kommt ein anderes Kommunikationsprotokoll zum Einsatz. 

Ablauf

 Mit SMTP werden wie bereits bekannt, E-Mails vom E-Mail Client, also dem Benutzer, zu einem Ziel-SMTP-Server geleitet. Der Genaue Ablauf beim Verschicken einer E-Mail sieht folgendermaßen aus: Vom E-Mail Client wird die Mail an einen SMTP-Server weitergeleitet. Dieser startet mit den in der E-Mail gegeben Empfängeradresse eine Anfrage an einen DNS-Server, um eine genaue Zieladresse zu bekommen. Sobald die Antwort vom DNS-Server da ist, wird die Mail über eine Zahl von Servern bis zum letztendlichen Ziel-SMTP-Server weitergeleitet. Dort liegt sie nun wie in einem Briefkasten und wartet darauf, durch ein anderes Protokoll abgeholt zu werden. Am Beginn des Prozesses herrscht eine rege Kommunikation zwischen dem E-Mail Client und dem SMTP-Server, da der Client den Server zuerst auffordern muss, seine E-Mail anzunehmen. Diese Kommunikation erfolgt durch drei-stellige Zahlencodes, so steht z.B. 250 für „Server bestätigt“. 

POP3 Ähnlich wie SMTP ist POP3 ein Übertragunsprotokoll. Es ist dafür zuständig, die E-Mails, die zuvor über SMTP bis zum „Briefkasten“ transportiert wurden, an den jeweiligen Empfänger zuzustellen. Der Nachteil von POP3 sind allerdings die stark eingeschränkten Fähigkeiten, so ist es nur möglich, E-Mails abzuholen, aufzulisten und zu löschen. Das alternative Übertragunsprotokoll IMAP biete weitaus mehr Möglichkeiten.  

Vigenère Verschlüsselung

Eine weitere Verschlüsselungstechnik ist die Vigenère Verschlüsselung, benannt nach dem frnzösischen Diplomat Laise de Vigenère. Diese Verschlüsselung ist anders als die Caesar Verschlüsselung keine monoalphabetische, sonder eine polyalphabetische. Das bedeutet, dass die Grundlage der Chiffrierung nicht nur eins, sonder mehrere, in diesem Fall 26 Alphabete sind. Diese Verschlüsselung gilt als deutlich sicherer, ist aber trotzdem nicht unknackbar. Die Grundlage bildet Das Vigenère Quadrat.

Es lässt sich klar erkennen, dass sich jeder Buchstabe aus dem Alphabet einmal zu Beginn einer Zeile befindet. Beim Verschlüsseln geht man nun so vor, dass man jeweils einen original Text und ein beliebig langes Codewort hat. Nun Nimmt man den ersten Buchstaben aus dem original Text und den ersten Buchstaben aus der Code Wort. Man sucht jeweils außen am Vigenère Quadrat die entsprechenden Buchstaben, dort wo sich die Zeile und die Spalte treffen steht der verschlüsselte Buchstabe. An dem Beispielbild sieht man, dass der Buchstabe G mit dem Buchstaben M verschlüsselt wurde, heraus kommt S. Für die nächsten Buchstaben geht man genau so vor. Leerzeichen werden weggelassen. Wichtig ist, dass das Codewort einfach wieder von Vorne beginnt, wenn es kürzer als das Original ist. Dieses muss natürlich auch zum Empfänger gelangen, damit dieser die Nachricht wieder entschlüsseln kann. 

In BlueJ sieht das Prinzip der Verschlüsselung in etwa so aus:

(ORIGINAL (Als ASCII Zahl) - 65) + (Entsprechender CODEBUCHSTABE -65) %26 +65
Das Prinzip ist dem der Caesar Verschlüsselung also sehr ähnlich, trotzdem ist sie um einiges sicherer. In den nächsten Stunden werden wir weiter daran arbeiten, auch die Vigenère Verschlüsselung in BlueJ umzusetzten, der entsprechende Post wird dann folgen.

Ver- und Entschlüsselung mit Caesar

Verschlüsselung von Nachrichten gab es schon zu Zeiten der Römer. Sinn einer Verschlüsselung ist es z.B. geheime Informationen auch beim Übermitteln zu schützen, so dass ein Feind, die originale Nachricht nicht mehr entziffern kann. Auch heut zu Tage spielt Verschlüsselung in der Informatik eine wichtige Rolle. Einerseits werden inzwischen auch wichtige politische und geheimdienstliche Informationen mit Hilfe des Internets übermittelt, andererseits finden vor allem viele Online Bezahlvorgänge statt. In beiden Fällen, ist es wichtig, dass die Informationen nicht ungeschützt in World wide web geschickt werden. Deshalb gibt es eine Vielzahl an Verschlüsselungsmethoden, mit denen wir uns in diesem Semester beschäftigen werden.

Um mit der einfachsten anzufangen, haben als erstes die Caesar Verschlüsselung behandelt. Diese ist eine sogenannte monoalphabetische, symmetrische Verschlüsselung, die schon die Römer benutzten. Diese Chiffrierung ist deshalb so einfach, weil man ganz normal von unserem Alphabet mit 26 Buchstaben ausgeht, dann ein zweites darüber legt und dies um eine gewisse Anzahl verschiebt. So ergibt sich für jeden originalen Buchstaben ein neuer, bei der Verschlüsselung wird einfach jeder Buchstabe mit dem neuen ersetzt. Um die Verschiebung festzulegen, definiert man zuerst einen Schlüssel in Buchstabenform. Dieser Schlüsselbuchstabe gilt dann im neuen Alphabet als A.

Wenn man nun also das Wort HALLO mit dem Schlüssel C verschlüsselt sieht das ganze so aus:


Schlüssel C --> C D E  F G H I  J K L M N O P Q  R S T U V W X Y  Z A B
                          A B C D E F G H I  J  K L M N O P Q R S  T U  V W X Y Z

                                             H --> J   A--> C   L --> N  O --> Q
  
                                                                 = JCNNQ

Es wird schnell klar, warum diese Verschlüsselung so simpel ist. Unsere Aufgabe war es nun, in BlueJ ein Programm zu schreiben, mit dem man beliebige Wörter mit der Caesar Verschlüsselung verschlüsseln kann.

Das Prinzip hinter solch einem Programm ist recht simpel, trotzdem haben wir einige Zeit gebraucht, bis wir es hin bekommen haben. Man braucht Methoden zur Eingabe des Originaltextes, zur Eingabe des Schlüssels, zum Chiffrieren, sowie zur Ausgabe des Verschlüsselten Textes.
Das Prinzip beim Chiffrieren ist sehr einfach: Man nimmt den jeweiligen Buchstaben mit seiner ASCII-Code Zahl, subtrahiert 65 um die normalen Alphabet-Zahlen zu haben (0=A, 25=Z) rechnet dann den jeweiligen Schlüssel dazu und addiert wieder 65. Weil das Alphabet ja nach Z wieder bei A beginnt, muss man sein Ergebnis vor der Addition von 65 durch 26 teilen, der Rest ist dann der verschlüsselte Buchstabe. Die Rechenweise dafür heißt Modulo und wird durch ein Prozentzeichen dargestellt.

Nun zur Programmierung:



Ganz zu Beginn wird die Klasse beschrieben, anschließend werden die Variablen definiert. Dann folgt die erste Methode "setzeOriginal". Mit dieser Methode gibt man den originalen, unverschlüsselten Text als String ein, der automatisch in reine Großbuchstaben umgewandelt wird. 

In der nächsten Methode setzt man nach dem gleichen Prinzip den Schlüssel, allerdings als Einzelbuchstabe, also Char. 

Dannach folgt das gleiche für die Eingabe des Verschlüsselten Textes, denn diesem Programm kann sowahl ver- als auch entschlüsseln.



Die erste Methode hier zeigt den verschlüsselten Text an, darauf folgende den entschlüsselten. 

Die dritte Methode funktioniert ähnlich wie die letze, die beiden sind zum umwandeln der Buchstaben jeweils von original zu verschlüsselt und andersrum da. Dabei wird genau so vorgegangen, wie ich es oben bereits beschrieben habe.



Mit diesen zwei Methoden werden mit Hilfe von Schleifen jeweils die ganze Worte chiffriert bzw dechiffriert. Buchstabe für Buchstabe wird mit der Methode aus dem vorherigen Bild "umgewandelt" und dann wieder an das Wort gehängt.


Will man nun mit diesem Programm einen Text verschlüsseln:

1. gibt man seinen Text mit der Methode setzeOriginal ein

2. setzt dann den Schlüssel mit der Methode setzeSchlüssel

3. chiffiert anschließend mit der Methode chiffriere

4. und lässt sich zuletzt den verschlüsselten Text mit der Methode gibVerschluesseltes anzeigen.

Donnerstag, 9. April 2015

Eine Nachricht in Computersprache

In den letzten Stunden haben wir uns in verschiedenen Gruppen mit Themen wie Bits, Bytes, ASCII und Binär-Code beschäftigt und sollten dann schlussendlich die Nachricht "HAPPY EASTER 1234" so umwandeln, wie sie ein Computer verschicken würde. Dazu ist ein generelles Verständnis der oben genannten Themen die Voraussetzung, genauere Beschreibungen gibt es jetzt in meinem Glossar.

Ein Computer übermittelt alle denkbaren Befehle mit Hilfe des Binärcodes, in dem es die Zahlen 0 und 1 gibt. Möchte man nun eine Textnachricht wie den Beispielsatz in Binär-Code umwandeln, sind einige Schritte nötig.

Zuerst braucht man den sogenannten ASCII Code, in dem für jeden Buchstaben und sämtliche Sonderzeichen eine Dezimalzahl steht.


Am Beispiel des Buchstaben A werde ich kurz erklären, wie die gesamte Umwandlung funktioniert:

1. Dezimalzahl zu gewünschtem Zeichen im ASCII Code suchen: A=65

2. Dezimalzahl in Hexadezimalzahl umrechnen:             65:16= 4 Rest 1
                                                                                           4:16= 0 Rest 4
                                                                                 
                                                                                       Rest zusammenschreiben: 41
                                                                                       65 in Hexadezimal=41

3. Hexadezimalzahl in Binärcode umrechnen:             4 = 0100   1 = 0001     = 01000001


Der Buchstabe A ist in Binärcode dargestellt also 01000001. So macht man es mit jedem anderen Buchstaben und Satzzeichen auch. Man kann rein theoretisch bei niedrigen Dezimalzahlen auch die Umrechnung in eine Hexadezimalzahl weglassen und versuchen sie direkt in Binärcode darzustellen, einfacher ist es aber wie beschrieben. Natürlich sind Nachrichten in der Binärschreibweise für uns deutlich länger, für den Computer ist das Umgehen mit lediglich zwei Zahlen aber wesentlich einfacher. Der Satz: "Informatik macht Spaß !" lautet in Binärcode: 

01010110011011110110110001101100001000000110010001110010011000010111010101100110001000000111001001100101011010010110111001100111011001010110011001100001011011000110110001100101011011100000000000101100001000000111001001101001011000110110100001110100011010010110011101100101001000000100110011110110011100110111010101101110011001110010000001100111011000010110111001111010001000000111010101101110011101000110010101101110001000000011101100101001




PS:

0101011101100101011011100110111000100000011011010110000101101110001000000110101001100101011101000111101001110100001000000111001101100011011010000110111101101110001000000111011101101001011100100110101101101100011010010110001101101000001000000110011101110101011101000010000001101101011010010111010000100000010010000110010101111000011000010110010001100101011110100110100101101101011000010110110001111010011000010110100001101100011001010110111000100000011101010110111001100100001000000100001001101001011011101110010001110010011000110110111101100100011001010010000001110101011011010110011101100101011010000110010101101110001000000110101101100001011011100110111000101100001000000111001101101111011011000110110001110100011001010010000001100101011100110010000001100101011010010110011101100101011011100111010001101100011010010110001101101000001000000110101101100101011010010110111000100000010100000111001001101111011000100110110001100101011011010010000001110011011001010110100101101110001011000010000001100100011010010110010101110011011001010110111000100000011010110111010101110010011110100110010101101110001000000101010001100101011110000111010000100000011010000110100101100101011100100010000001111010011101010010000001100101011011100111010001110011011000110110100001101100111111000111001101110011011001010110110001101110001011100010000001000001011011000110110001100101001000000110000101101110011001000110010101110010011001010110111000100000011101110110010101110010011001000110010101101110001000000111001101101001011000110110100000100000011010100110010101110100011110100111010000100000011101100110010101110010011110100111011101100101011010010110011001100101011011000111010000100000011001100111001001100001011001110110010101101110001011000010000001110111011000010111001100100000011001000110000101110011001000000100011101100101011101110111010101110011011001010110110000100000011000010111010101110011001000000100111001110101011011000110110001100101011011100010000001110101011011100110010000100000010001010110100101101110011100110110010101101110001000000110100001101001011001010111001000100000011101010110111001110100011001010110111000100000011100110110111101101100011011000010111000100000010000010110110001110011011011110011101000100000010010000110010101110010011110100110110001101001011000110110100001100101011011100010000001000111011011001111110001100011011010110111011101110101011011100111001101100011011010000010000001111010011101010110110100100000011001010111001001100110011011110110110001100111011100100110010101101001011000110110100001100101011011100010000001000101011011100111010001111010011010010110011001100110011001010111001001101110001011100010000001001111011001000110010101110010001000000100010001110101001000000111011101100001011100100111001101110100001000000110010101101001011011100110011001100001011000110110100000100000011100110110001101101000011011000110000101110101001000000110011101100101011011100111010101100111001000000110111101101110011011000110100101101110011001010010000001101110011000010110001101101000001000000110010101101001011011100110010101101101001000000101010101101101011100100110010101100011011010000110111001100101011100100010000001111010011101010010000001110011011101010110001101101000011001010110111000101100001000000110010001100101011011100110111000100000011100110110010101101100011000100111001101110100001000000110100101100011011010000010000001101101011000010110001101101000011001010010000001101101011010010111001000100000011011100110100101100011011010000111010000100000011001000110100101100101001000000100110111111100011010000110010100100000011100110110111101101100011000110110100000100000011001010110100101101110011001010010000001001101011001010110111001100111011001010010000001100001011011100010000001010100011001010111100001110100001000000110110101100001011011100111010101100101011011000110110000100000011101010110110101111010011101010111001001100101011000110110100001101110011001010110111000101110001000000100001001101001011100110010000001111010011101010110110100100000011011101110010001100011011010000111001101110100011001010110111000100000010100000110111101110011011101000010110000100000010100110110000101101101

01001110011000010110001101101000001000000110010001100101011011010010000001101001011000110110100000100000011011010110100101110010001000000110111101100010011001010110111000100000011001010110100101101110011001010110111000100000011010110110110001100101011010010110111001100101011011100010000001010011011100000110000111011111001000000110010101110010011011000110000101110101011000100111010000100000011010000110000101100010011001010010000001101000011010010110010101110010001000000110010001101001011001010010000001110010011010010110001101101000011101000110100101100111011001010010000001001100111101100111001101110101011011100110011100111010

0100100101101110011001100110111101110010011011010110000101110100011010010110101100100000011011010110000101100011011010000111010000100000010100110111000001100001110111110010000000100001