Hallo Besucher, der Thread wurde 6,7k mal aufgerufen und enthält 18 Antworten

letzter Beitrag von 0x0badc0de am

Kryptographiekurs Teil 1

  • Einführung in die klassische Kryptographie[


    Vorwort zum Kurs


    Dieser kleine Kursus beschäftigt sich mit den Grundlagen der Kryptographie. Er wendet sich an Anfänger und Interessierte in dem Bereich und hat keine Ansprüche auf Vollständigkeit. Wir verwenden als Werkzeug Cypherbasic 64, das jeder interessierte im Assembler-Thread frei herunterladen kann. Cypherbasic 64 liegt zur Startzeit dieses Kurses nicht in seiner endgültigen Fassung vor und ich bezweifle auch, dass eine endgültige Fassung jemals existieren wird. Das Basic werde ich im Laufe des Kurses notfalls um Funktionen erweitern.


    Es ist einfach ein schönes Werkzeug, um einerseits dem interessierten Nichtprogrammierer mit einfachen Basicbefehlen effizient (auf dem C=64) klassisch-Kryptographische Methoden zu ermöglichen, andererseits dem erfahrenen Assembler-Profi bei einem Blick in den Quellcode einen Blick hinter die Kulissen zu gewähren. Cypherbasic 64 steht unter GPL-Lizenz, kann also frei verwendet und kopiert werden, solange Änderungen ebenfalls frei zugänglich gemacht werden und weder Lizenz noch Autoren daraus gelöscht oder verändert werden. Das ist sinnvoll für diese Anwendung, denke ich mir.


    Das Thema Kryptographie ist derartig weitläufig, dass ich keinerlei Ansprüche auf Vollständigkeit erheben kann, nicht einmal was die klassische Kryptographie angeht, der ich mich ausschließlich widmen möchte.


    Soweit klar? Dann möchte ich gleich einmal anfangen.


    Klassische Kryptographie


    Die klassische Kryptographie ist die Methode einen Text mit einem Mechanismus oder einem Codewort so zu verändern, dass er nur für denjenigen lesbar ist, der das entsprechende Schlüsselwort besitzt, für einen dritten jedoch nicht. Die klassische Kryptographie behandelt nur Buchstaben, manchmal kodiert sie Buchstaben in Zahlencodes, aber letztendlich geht es immer um lesbaren Text.


    Die Methoden der klassischen Kryptographie sind meistens auch mit handschriftlichen Verfahren zu meistern und reichen von den Zeiten der alten Griechen, Mayas bis in die Zeit des zweiten Weltkriegs, wo sie mit den Rotormaschinen in etwa ein Ende fand.


    Alle klassischen Methoden betrachtet die Kryptographie als "gebrochen", wobei mir zumindest eine Methode bekannt ist, die auch gegen Angriffe mit Rechnern sicher sein soll. Wir werden damit im Laufe des Kurses experimentieren.


    Ein Code ist gebrochen wenn Teile auch ohne Kenntnis des Schlüsselcodes für den dritten mit Verfahren lesbar gemacht werden können.


    Verfahren: einfache Substitution


    Bei einer Substitution wird jeder Buchstabe des Klartextes gegen einen anderen Buchstaben ersetzt. Daraus ergibt sich dann der Schlüsseltext.


    Eines der ersten Verfahren dieser Art ist


    Der Cäsar-Chiffre


    Beim Cäsar-Chiffre ersetzt man jeden Buchstaben mit dem Buchstaben, der 13 Plätze weiter im Alphabet steht. Also A mit N, B mit O usw., ist man bei Z angelangt, beginnt man wieder bei A.


    Etwas einfacher ist es anhand einer Tabelle:

    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    NOPQRSTUVWXYZABCDEFGHIJKLM

    Hier sieht man sehr schön, dass das Code-Alphabet einfach um 13 Zeichen verschoben (rotiert) unter dem Ausgangsalphabet steht. Das A steht über dem N, das B über dem O usw.


    Für eine Verschlüsselung mit dem Cäsar-Chiffre ersetzt man nun einfach alle Zeichen von oben nach unten. für die Entschlüsselung von unten nach oben. Da der Cäsar-Chiffre symetrisch ist, ergibt es ausnahmsweise in beide Richtungen das selbe Ergebnis. Sprich ein N ergibt ein A, ein A ergibt ein N, egal von welcher Seite man kommt.


    Das muss nicht so sein.


    Probieren wir das im Basic:


    Erst laden wir das Cypherbasic mit LOAD "CYPHERBASIC",8,1
    dann starten wir es mit SYS9*4096 und löschen den Speicher mit NEW.


    Nun tippen wir:

    10 TE$="VARUSWOSINDMEINELEGIONEN"
    20 AL$="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    30 CO$=ROTATE$(AL$,13)
    40 PRINT SUBST$(TE$,AL$,CO$)
    RUN
    INEHFJBFVAQZRVARYRTVBARA


    In der klassischen Kryptographie druckt man die Texte gern in Fünferblöcken aus, der besseren Lesbarkeit halber und auch weil die Funker (Morsecode) diese besser und fehlerfreier übertragen können.


    Dazu dient der Befehl BLOCK, der die Nachricht schön blockweise ausdruckt, wie wir es gern haben in der Kryptographie. Außerdem wollen wir nicht nur unseren Text verschlüsseln, sondern auch noch entschlüsseln können, also erweitern wir das kleine Programm entsprechend.



    100 TE$="VARUSWOSINDMEINELEGIONEN"
    110 AL$="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    120 CO$=ROTATE$(AL$,13)
    130 BLOCK 5,5
    140 CT$=SUBST$(TE$,AL$,CO$)
    150 PRINT CT$
    160 BLOCK 0
    170 PRINT
    180 DT$=SUBST$(CT$, CO$, AL$)
    190 BLOCK 5
    200 PRINT DT$
    210 BLOCK 0


    RUN
    INEHF JBFVA QZRVA RYRTV BARA
    VARUS WOSIN DMEIN ELEGI ONEN


    Und ein kleines Kryptogramm am Schluss, also ein kleiner mit dem obigen Verfahren verschlüsselter Text. Aber aufgepasst! Ganz so einfach ist es dann doch nicht.


    Übrigens lassen sich Leerzeichen prima mit dem FILTER$-Befehl aus einem Text entfernen. Schaut dazu ruhig einmal in den Thread in der Assemblerecke, wie der Filter-Befehl funktioniert. Postet ruhig eurer Programm, wenn ihr es geschafft habt.

    XUHPB YSXUD WBKSA MKDIS XTKXQ
    IJTUD UHIJU DJUYB TYUIU IAKHI
    UILUH IJQDT UD

  • Einfache Kryptoanalyse des Cäsar Chiffre


    Warum werden heute Texte nicht mit solchen Chiffren wie dem Cäsar-Code chiffriert - natürlich weiss es jedes Kind: diese Codes sind viel zu leicht zu knacken. Und zwar aus zweierlei Gründen:


    Zum einen besteht der Cäsar-Code aus keinem Schlüsselwort, sondern nur aus einem Algorithmus. Und in der Kryptographie geht man davon aus, dass der Algorithmus ("drehe das Codealphabet um 13 Stellen und substituiere") dem Gegner immer bekannt ist.


    Ist es nicht?


    Nun, selbst die kleinste Winzigkeit der Schlüsselmaschine Enigma wurde im zweiten Weltkrieg der allierten Seite bekannt, so dass am Ende nur noch der Code die Nachrichten schützte, nicht aber der Schlüssel - einer der Gründe warum diese Maschine so jämmerlich versagte.


    Also ist ein Schlüsselalgorithmus für sich allein erstmal nicht wert, wenn allein durch seine Kenntnis die Nachricht von dritten entschlüsselt werden kann.


    Verbessern wir also den oben gezeigten Cäsar-Algorithmus durch einen Schlüssel. Wir nehmen als sehr primitiven Schlüssel einfach mal an, dass die Verschiebungsweite unser Code sein soll. Also wir rotieren das Code-Alphabet nicht nur um 13, sondern um 10, um 5 oder um 23 Stellen. Damit haben wir 25 mögliche Schlüsselwörter. Die 0 entfällt, da mit der 0 das A auf ein A abgebildet wird und somit keinerlei Chiffrierung stattfindet.


    Das ist natürlich lächerlich wenig, selbst mit der Hand hätte man so einen Code schnell geknackt. Mit einer Maschine jedoch... Aber dafür war ja die Aufgabe aus dem letzten Teil.


    Schauen wir uns einmal einen mit einem beliebigen

    mrnbl qjcdu unurn pcdwc namnv
    wxamu rlqnw kadlt nwyon runa


    Selbst ohne ein Schlüsselwort oder ein Programm, das alle Schlüssel durchprobiert, kann man diesen Code ohne Probleme von Hand dechiffrieren.


    Der häufigste Buchstabe im Deutschen ist ENISRATD. Also E, gefolgt von N, I, usw.


    Zählen wir die Buchstaben:

    10 CH$="MRNBLQJCDUUNURNPCDWCNAMNVWXAMURLQNWKADLTNWYONRUNA"
    100 FOR I=1 TO LEN(CH$)
    110 A(ASC(MID$(CH$,I,1))-ASC("A"))=A(ASC(MID$(CH$,I,1))-ASC("A"))+1
    120 NEXT
    130 FOR I=0 TO 25
    140 PRINT CHR$(I+ASC("A"))"="A(I),
    150 NEXT


    RUN
    MRNBL QJCDU UNURN PCDWC NAMNV
    WXAMU RLQNW KADLT NWYON RUNA


    A= 4 B= 1 C= 3 D= 3 E= 0 F= 0 G= 0 H= 0 I= 0 J= 1 K= 1 L= 3 M= 3 N= 9 O= 1 P= 1 Q= 2 R= 4 S= 0 T= 1 U= 5 V= 1 W= 4 X= 1 Y= 1 Z= 0


    Hiernach ist der häufigste Buchstabe ein N. Setzen wir das N=E, dann ergibt sich eine Verschiebung von 17.



    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    JKLMNOPQRSTUVWXYZABCDEFGHI


    Probiert es selbst aus, was dabei heraus kommt.
    Wie wir sehen, ist der Cäsarchiffre wirklich leicht zu knacken, dabei sei allerdings angemerkt, dass dem Cäsar nachfolgende Kaiser befand, dass der Cäsarschlüssel zu schwierig sei und bestimmte, dass fortan A=B, B=C, .. und Z=ZZ sei. Rotation? Ging ihm nicht ein. Genau genommen gab es das Z nicht im römischen Alphabet, aber lassen wir es beim Prinzip.


    Wäre eigentlich nicht schlecht, Cypherbasic eine diesbetreffende Funktion beizubringen, oder? Okay, mal sehen, was ich machen kann. Aber es schadet eigentlich nicht, wenn man die notwendige Statistik einmal per Hand programmiert hat, bevor man auf fertige Funktionen zurückgreift.



    Aufgabe: schreibt ein kleines Programm, das einen auf Diskette gepeicherten chiffrierten Text Häufigkeitsanalysiert. Also für jeden auftauchenden Buchstaben die Anzahl zählt und sie anzeigt. Dafür solltet ihr natürlich die eingelesenen Zeichen mit FILTER$ von unerwünschten Zeichen befreien und wenn ihr mit REPEAT .. UNTIL {Bedingung} arbeitet, dann könnt ihr eine Leseschleife ohne den Gebrauch von GOTOs programmieren. Cypherbasic beherrscht bereits das REPEAT .. UNTIL.


    Ladet eure Programme hier ruhig herauf.

  • Vigenère Chiffre, polyalphabetische Substitution


    Wir hatten festgestellt, dass ein Algorithmus ohne Schlüsselwort nichts wert ist, denn in der Kryptographie geht man davon aus, dass der Algorithmus dem Feind bekannt wird. Der Mathematiker Vigenère erfand diese Verschlüsselungsmethode, die bis in die Mitte des 19ten Jahrhunderts noch als unknackbar galt. Und in gewisser Weise sind die im zweiten Weltkrieg verbreiteten Rotormaschinen nichts weiter als Verbesserungen und Automatisierungen seiner Methode.


    Polyalphabetisch bedeutet, dass nicht nur mit einem Schlüsselalphabet verschlüsselt wird, sondern (nach einer vereinbarten Methode) mit mehreren, sich nach einem ausgemachten Verfahren wechselnden, im Gegensatz zu monoalphabetischen Verfahren wie dem Cäsar-Chiffre oder einem Chiffre mit nicht aufeinanderfolgenden Zeichen, zum Beispiel: "ABCDEFG.." -> "DFZYERGIJ..."


    Statt die Zeichen eines Textes immer mit der selben Substitutionstabelle zu verschlüsseln, schlug Vigenère vor, die Tabellen anhand eines Schlüsselwortes zu ändern. Hieße das Schlüsselwort "SCHLUSSEL", so würde der erste Buchstabe mit der Tabelle für "S", der nächste mit der für "C", dann für "H" und so weiter verschlüsselt werden. Vigenère schlug nicht vor, dass diese Schlüsseltabellen jedesmal ein Cäsarchiffre wären, wie vielfach angenommen. Aber das ist natürlich am einfachsten umzusetzen.


    Ein "S" würde also in ein "A" gewandelt werden usw.



    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    ZABCDEFGHIJKLMNOPQRSTUVWXY
    YZABCDEFGHIJKLMNOPQRSTUVWX
    XYZABCDEFGHIJKLMNOPQRSTUVW
    WXYZABCDEFGHIJKLMNOPQRSTUV
    ...


    Hier das dazugehörige Programm:



    100 REM OPEN1,8,2,"VIGENERE.TXT,W,P"
    110 REM CMD1
    120 PA$="BLUCHER"
    130 TE$="DIETRUPPENNAPOLEONSSAMMELNSICHINDERNAHEVONWATEROO"
    140 AL$="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    150 BLOCK 5
    160 FOR I=1 TO LEN(TE$)
    170 GOSUB 1000
    180 PRINT CT$
    190 OU$=OU$+CT$
    200 NEXT
    210 BLOCK 0
    220 PRINT : PRINT
    230 REM DECHIFFRIERUNG
    240 TE$=OU$
    250 BLOCK 5
    260 FOR I=1 TO LEN(OU$)
    270 GOSUB 2000
    280 PRINT CT$
    290 NEXT
    300 BLOCK 0
    310 END
    1000 REM VIGENERE SUBSTITUTION
    1010 A$=MID$(PA$,1+I-LEN(PA$)*INT(I/LEN(PA$)),1)
    1020 X$=MID$(TE$,I,1)
    1030 CO$=ROTATE$(AL$,ASC(A$)-ASC("A"))
    1040 CT$=SUBST$(X$,AL$,CO$)
    1050 RETURN
    2000 REM VIGENERE DECHIFFRE
    2010 A$=MID$(PA$,1+I-LEN(PA$)*INT(I/LEN(PA$)),1)
    2020 X$=MID$(TE$,I,1)
    2030 CO$=ROTATE$(AL$,ASC(A$)-ASC("A"))
    2040 CT$=SUBST$(X$,CO$,AL$)
    2050 RETURN
    READY.
    RUN
    SOCMN DOEKL GWYNA KMGOB ZBSCE
    JBHRN GGZNQ CGFXR XMLGR XNXN


    DIETR UPPEN NAPOL EONSS AMMEL
    NSICH INDER NAHEV ONWAT EROO


    Das Programm ist eigentlich ziemlich geradlinig und braucht nur eine Erklärung, nämlich vom Ausdruck in Zeile 1010, respektive 2010.

    1+I-LEN(PA$)*INT(I/LEN(PA$))


    Was genau genommen nicht mehr heißt, als MODULO(I,LEN(PA$))+1. Dieser Ausdruck läuft immer von 1 bis zur Länge des Passworts und fängt dann wieder von vorn an. Es ist der Bruch-Rest oder auch Modulo genannt. Da es in Basic V2 diese Funktion nicht gibt, muss sie mühseelig zusammen gesetzt werden.


    Das bedeutet, dass die Zeichen des Passwortes in PA$ immer wieder und wieder zur Verschlüsselung des Textes genommen werden sollen.


    Der in Zeile 1030 sowie 2030 verwendete ASC(A$)-ASC("A") sorgt ebenfalls nur dafür, dass das zu verschlüsselnde Zeichen in eine Zahl von 0 ("A") bis 25 ("Z") gewandelt wird, um die Rotation des Alphabets zu bestimmen.


    In der Kryptographie mit Computern wird gern mit Modulo und Additionen gearbeitet. Letztendlich ist eine Rotation wie um den Cäsar-Chiffre eine Addition Modulo 26.


    ("A"+13) mod 26


    bedeutet das Zeichen wird gegen eins ausgetauscht, das 13 Zeichen weiter das Alphabet herunter kommt, erreicht es das Ende, schlägt der Modulo zu und fängt wieder von vorn an. Diese Formel zeigt auch, warum Mehrfachverschlüsselung oftmals nicht mehr Sicherheit bringt. Denn verschlüsseln wir um 13 und dann um 5 ist es nach dieser Formel das selbe, als wenn wir gleich um 18 chiffrieren würden.


    Cypherbasic arbeitet nicht nach dem Additions-Prinzip, sondern symbolisch. Die symbolische Verarbeitung beschränkt sich nicht auf Zeichenfolgen, die verwendeten Zeichen müssen im ASCII nicht hintereinander liegen und so weiter. Es spricht nichts dagegen, das vorgestellte Verfahren von A..Z auf A..Z0..9 zu erweitern und erlaubt im Prinzip den Gebrauch von beliebigen Zeichen und Substitutionen.


    Das gilt damit natürlich auch für Vigenère. Es bringt nichts, nach der selben Methode mehrfach zu verschlüsseln. Übrigens, ein weiterer Hinweis. Wie ihr seht, ersetze ich die Umlaute ÄÜÖß nicht gegen AE UE OE und SZ. Warum? Das zu tun wäre ein sogenannter Chiffrierfehler. Also ein Fehler des Verschlüsselers, der einem Angreifer unbeabsichtigt zusätzliche Angriffspunkte auf die Chiffrierung bietet. So wie schlechte oder zu einfach gewählte Passworte etwa. Warum? Die "E" in den ausgeschriebenen Umlauten verstärken den statistischen Wert des E noch zusätzlich in der deutschen Sprache. Das macht es einem statistisch basierendem Angriff auf den Schlüssel noch einfacher.


    Im zweiten Weltkrieg hatte die Unsitte der deutschen Funker unter anderem zu einer zusätzlichen Angriffstelle auf den Enigmacode geführt, zusammen mit miesen "Passwörtern" wie AAA, BBB, ... usw. und wiederkehrenden Floskeln, wie dem unvermeidlichen HEILHITLER und ähnlichem, sinnlosen Gedöns. Ein guter Chiffrier versucht seine Nachricht auf das wesentliche zu beschränken. Höflichkeitsfloskeln sind etwas für die Schreibstube, nicht für Chiffrierungen.


    Das gilt für den zweiten Weltkrieg genauso wie für moderne Verschlüsselungen, wenn Leute meinen, unbedingt ihre Header, ihre Briefköpfe mit verschlüsseln zu müssen. Sowas ist unbedingt zu vermeiden. Das gilt genauso für Footer unter Emails oder andere, offensichtliche Anreden. Beispiel: "mailto: hubert.kah@ndw.de Lieber Hubert, deine..."


    Aufgabe: probiert es einmal, den Vigenère Chiffre Algorithmus so zu verändern, dass er statt Zeichen aus einem String Zeichen aus einer Datei ausliest. Probiert auch einmal die Version, dass das Programm gedrückte Tasten chiffriert und probiert einmal aus, was passiert, wenn ihr wiederkehrenden Text, beispielsweise "AAAAAAAAAAA" tippt. Ihr werdet einen Eindruck von der Schwachstelle dieser Chiffrierung bekommen.

  • Auf dem Weg zur Rotormaschine - Tricks um Vigenère zu stärken


    Der übliche Weg, Vigenère zu brechen ist, die Länge des Passworts herauszukriegen und somit die Wiederholung der Verschlüsselungsfolge. Nach bekanntwerden der Lauflänge des Passwortes braucht der Kryptoanalyst dann die Buchstaben nur in Mengen aufzuteilen (alle ersten Buchstaben, alle zweiten, alle dritten, usw.) und dann eine Häufigkeitsanalyse auszuführen und die chiffrierten Texte so zu brechen, wie er es bei verwürfelten monoalphabetischen Verfahren getan hätte.


    Das läuft im Prinzip darauf hinaus, dass man schlussfolgert, welche Buchstaben auf einen gefundenen (oder vermuteten) überhaupt folgen können in der Sprache, ob die auftauchende Häufigkeit in der Gruppe der Vermutung entspricht und so weiter. Allerdings will ich an dieser Stelle noch nicht auf die Feinheiten der Kryptoanalyse eingehen, sondern wir wollen erst einmal sehen, wie wir dieser Methode von vorn herein das Leben etwas schwerer machen.


    Die übliche Methode vor der Erfindung der Rotormaschine war, dem Schlüssel einfach den Klartext hinten anzuhängen. Das hat den Vorteil, dass die Schlüssellänge steigt, Wiederholungen nicht mehr vorkommen und Verfahren, die nach solchen Wiederholungen suchen scheitern müssen. Nun, die Kryptoanalysten waren schlau genug, auch gegen diese Methode ein Mittel zu finden. Aber das wird schon schwieriger.


    Der Weg, die Schlüssellänge bei Vigenère heraufzusetzen war seinerzeit als die geniale Kur angesehen, um die Schwachstelle von Vigenère zu schließen.


    Der Nachteil des oben genannten Verfahrens ist, dass bei einem fehlerhaft übertragenen Zeichen alle folgenden Zeichen womöglich unentzifferbar werden, bei einer fehlenden Übertragung ebenso. Das ist natürlich im Zeitalter der Morsegeber und zusammengeflickten Draht- und Funk-Übertrager kein anwendbarer Ansatz.


    Deshalb kam bald die Idee auf, den Schlüssel nicht vom übertragenen Text abhängig zu machen, sondern von seiner Position. Im einfachsten Falle etwa den Schlüsselcode bei jeder fortschreitenden Position zusätzlich eine Stelle zu rotieren (die Position zu "addieren modulo Alphabetlänge), wie im obigen Teil schon vorgestellt.


    Aufgabe: modifiziert das oben vorgestellte Vigenère-Chiffreprogramm so, dass der Schlüsselcode mit jedem weiteren Zeichen um eine zusätzliche Stelle rotiert wird. Dann schreibt eine Version, die nach dem ersten Durchlauf des Passwortes den Text mit sich selbst verschlüsselt.

    PASSWORTHIERBEGINNTDERTEXT...
    HIERBEGINNTDERTEXT...


    Und hier beginnen wir auch schon, eine erste eigene Rotormaschine zu entwickeln. Denn genau das, was wir eben in unserer Aufgabe getan haben, macht die Enigma und andere Rotormaschinen. Sie verlängern den Vigenère-Schlüssel abhängig von der Position im Text durch weiterrotieren der Verschlüsselungs"walze", die nichts anderes ist, als unsere uns schon bekannten Substitutionen.



    Erste Walze:
    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    HZTREGMSN...


    Zweite Walze:
    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    UIOBVEDAQWYCP...


    Mit jedem neuen Zeichen verdreht sich die erste Walze, nach 26 Umdrehungen dreht sich die zweite eine Stelle weiter und so weiter. Natürlich ist die Grundstellung der Walzen nicht immer die selbe ("AAA"), sondern die Walzen beginnen an einer beliebigen Position. Das ist dann praktisch unser Schlüssel.
    Zusammen mit der Position und der Drehrichtung der Walzen oder sonstigen Maßnahmen die Funktion der Maschine zu beeinflussen. Denn zum Beispiel bei der (ursprünglichen) Enigma konnten die Walzen beliebig eingesetzt werden, drei aus einer Auswahl von 5.


    Wir nähern uns jetzt mit raschem Schritt unserer ersten Rotormaschine, nachdem wir die Funktion verstanden haben.

  • Zitat

    Das läuft im Prinzip darauf hinaus, dass man schlussfolgert, welche Buchstaben auf einen gefundenen (oder vermuteten) überhaupt folgen können in der Sprache, ob die auftauchende Häufigkeit in der Gruppe der Vermutung entspricht und so weiter.


    das geht recht geil und (nicht unbedingt auf dem c64) auch relativ einfach wenn man den chiffrierten text nicht nur mittels eines histograms, sondern auch mit markov-chains bewertet.die lernt man einfach mit text aus der zielsprache an, und kriegt dann schicke tabellen an denen man die häufigkeitsverteilung von aufeinanderfolgenden buchstaben/silben/worten usw ablesen kann.


    (achtung, wikipedia artikel dazu sind nur was für hartgesottene :) lieber nach beispielprogrammen in <lieblingsprogrammiersprache> suchen, das ist aus programmierersich echt keine raketentechnik.)

  • Zitat

    Original von sauhund
    das geht recht geil und (nicht unbedingt auf dem c64) auch relativ einfach wenn man den chiffrierten text nicht nur mittels eines histograms, sondern auch mit markov-chains bewertet.die lernt man einfach mit text aus der zielsprache an, und kriegt dann schicke tabellen an denen man die häufigkeitsverteilung von aufeinanderfolgenden buchstaben/silben/worten usw ablesen kann.


    Das stimmt allerdings.Ich habe das in den 90ern schon auf dem Amiga gemacht, nach einem Artikel im Scientific American, wo überlegt wurde, ob wenn genügend Affen auf Tastaturen hämmern am Ende nicht doch sinnvolle Texte herauskommen. Der Gedanke lief weiter, ob die Affen dabei nicht zumindest die Buchstabenhäufigkeit von Bi-, Tri-, Quadgrammen usw. berücksichtigen wir die Chancen nicht verbessern könnten? Jedenfalls fütterte ich diesem Programm große Mengen an Text, es hat diese nach oben genannter Methode analysiert und dann Zufallstexte daraus erzeugt.


    Egal wieviel Text ich der Maschine als Input gegeben habe (Mega- um Megabyte), wenn ich über die Quadgramme hinaus bin, hat er immer ganze Textpassagen des Originals zitiert. Für den C64 wäre das aber ein totaler Overkill sowohl vom Speicher- als auch vom Rechenaufwand her. Auf so einer Maschine "moderne" Algorithmen zu programmieren ist ein Kreuz. Der C64 hat im Prinzip keinen Stackspeicher. Also nichts, mit dem man wirklich etwas anfangen kann. Er hat keinen Hauptspeicher und die Geschwindigkeit der IO ist auch sehr zaghaft.


    Deshalb empfehle ich unbedingt für den C=64 Abkürzungen in den Algorithmen zu nehmen anstatt mit voller Brachialität die Original-Algorithmen zu verwenden. Statt also mit "riesigen" Markov-Chains arbeiten lieber die wichtigsten 10, 20 Bi- und Trigramme füttern und so weiter.


    Diese Abkürzungen sind übrigens einer der Gründe, warum ich das überhaupt auf dem C=64 mache.


    Ich denke, das ist eine Herausforderung. Wenn übrigens einer von euch mir etwas Arbeit abnehmen will und die eine oder andere Routine gern beisteuern. Eine Häufigkeitsanalyse für Cypherbasic würde im Prinzip so ausssehen wie ein DIM-Befehl. Also DISTRIBUTION(A%,ALPHABET$,TEXT$). Wenn A(x) nicht exisitert, wird es angelegt. Aber lasst die Einbindung ins Basic meine Sorge sein, mir wäre es schon recht, wenn ich nicht jeden Algorithmus selbst programmieren müsste.

    Zitat


    (achtung, wikipedia artikel dazu sind nur was für hartgesottene :) lieber nach beispielprogrammen in <lieblingsprogrammiersprache> suchen, das ist aus programmierersich echt keine raketentechnik.)


    Auch da stimme ich zu. Die Wikipediaartikel zu diesen Themen sind schwer mit Uni-Bluff überfrachtet und sehr theoretisch. Sprich hochtrabend aber bringen es nicht auf den Punkt. Meiner Meinung nach ist eine Wissenschaft erst dann zu gebrauchen, wenn der Wissenschaftler die Dinge auch dem Schlachter vom Spar-Laden mit normalen Worten erklären kann, so etwa wie Einstein die Relativitätstheorie Fabrikarbeitern erklärt hat. Ist das nicht möglich, haben die Wissenschafler selbst die Dinge manchmal noch nicht richtig kapiert, denke ich.

  • Die Schlüsselmaschine ENIGMA I


    Die deutsche Wehrmacht benutzte im zweiten Weltkrieg die berüchtigte Schlüsselmaschine Enigma, um den Funkverkehr zu verschlüsseln. Wir wollen uns einmal ansehen, wie die Maschine seinerzeit funktioniert hat.


    Die Wehrmacht hatte dazu fünf Walzen, von denen sie drei auswählen konnte und in die Maschine stecken. Dazu kam das Steckerbrett, mit dem sich Vertauschungen vornehmen ließen und die vom Funker ausgewählte Stellung der drei Walzen. Insgesamt scheinbar unknackbar, dennoch hatte sie eine Anzahl Schwachpunkte, die sie letztendlich angreifbar machten.



    100 REM ENIGMA CHIFFRIERMASCHINE
    110 GOSUB 10000:REM WALZEN LESEN
    190 BLOCK 5
    200 GOSUB 11000:REM ZEICHEN HOLEN
    210 GOSUB 13000:REM ZEICHEN ERSETZEN
    220 GOSUB 12000:REM ZEICHEN AUSGEBEN
    300 GOTO 200
    9000 REM BEENDEN DER ENIGMA
    9010 BLOCK 0
    9999 END
    10000 REM WALZEN EINLESEN NACH WA$() RA$() UND W
    10010 OPEN 1,8,2,"WALZEN1.TXT,R,P"
    10020 DIM WA$(11),RA$(11),AL$(11)
    10025 AL$="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    10026 TA$="PQAYWSXEDCRFVTGBZHNUJMIKLO"
    10030 W=0
    10040 REPEAT
    10050 INPUT#1,W$,CO$,RA$
    10060 IF CO$<>"" THEN WA$(W)=CO$:RA$(W)=RA$:AL$(W)=AL$:W=W+1
    10070 UNTIL ST<>0
    10080 W=W-1
    10090 CLOSE 1
    10130 PRINT"WALZEN EINGELESEN"CHR$(13)
    10140 RETURN
    11000 REM ZEICHEN EINLESEN IN K$
    11005 POKE 204,0:REM CURSOR EIN
    11010 REPEAT
    11020 GET K$
    11030 IF K$="!" THEN POKE 204,1: PRINT" ":GOTO 9000
    11040 K$=FILTER$(K$,$81)
    11050 UNTIL K$<>""
    11060 POKE 204,1:REM CURSOR AUS
    11070 RETURN
    12000 REM ZEICHEN AUSGEBEN Z$
    12010 PRINT Z$;
    12020 RETURN
    13000 REM ZEICHEN UEBERSETZEN K$ NACH Z$
    13005 GOSUB 14000:REM WEITERSCHALTEN
    13010 Z$=SUBST$(K$,TA$,AL$)
    13020 Z$=SUBST$(Z$,AL$,WA$(0))
    13029 Z$=SUBST$(Z$,AL$(1),AL$)
    13030 Z$=SUBST$(Z$,AL$,WA$(1))
    13031 Z$=SUBST$(Z$,AL$,AL$(1))
    13039 Z$=SUBST$(Z$,AL$(2),AL$)
    13040 Z$=SUBST$(Z$,AL$,WA$(2))
    13041 Z$=SUBST$(Z$,AL$,AL$(2))
    13049 Z$=SUBST$(Z$,AL$(3),AL$)
    13050 Z$=SUBST$(Z$,AL$,WA$(3))
    13051 Z$=SUBST$(Z$,AL$,AL$(3))
    13060 Z$=SUBST$(Z$,AL$,WA$(10))
    13069 Z$=SUBST$(Z$,AL$(3),AL$)
    13070 Z$=SUBST$(Z$,WA$(3),AL$)
    13071 Z$=SUBST$(Z$,AL$,AL$(3))
    13079 Z$=SUBST$(Z$,AL$(2),AL$)
    13080 Z$=SUBST$(Z$,WA$(2),AL$)
    13081 Z$=SUBST$(Z$,AL$,AL$(2))
    13089 Z$=SUBST$(Z$,AL$(1),AL$)
    13090 Z$=SUBST$(Z$,WA$(1),AL$)
    13091 Z$=SUBST$(Z$,AL$,AL$(1))
    13100 Z$=SUBST$(Z$,AL$,TA$)
    13200 RETURN
    14000 REM WALZEN WEITERSCHALTEN
    14020 REM WA$(1)=ROTATE$(WA$(1),1)
    14030 AL$(1)=ROTATE$(AL$(1),25)
    14040 FOR W=1 TO 2
    14050 FOR I=1 TO LEN(RA$(W))
    14060 IF MID$(RA$(W),I,1)<>LEFT$(AL$(W),1) THEN 14090
    14070 REM WA$(W+1)=ROTATE$(WA$(W+1),1)
    14080 AL$(W+1)=ROTATE$(AL$(W+1),25)
    14090 NEXT I
    14100 NEXT W
    14110 RETURN
    READY.


    WALZEN1.TXT

    E,ABCDEFGHIJKLMNOPQRSTUVWXYZ,
    1,EKMFLGDQVZNTOWYHXUSPAIBRCJ,Q
    2,AJDKSIRUXBLHWTMCQGZNPYFVOE,E
    3,BDFHJLCPRTXVZNYEIWGAKMUSQO,V
    4,ESOVPZJAYQUIRHXLNFTGKDCMWB,J
    5,VZBRGITYUPSDNHLXAWMJQOFECK,Z
    6,JPGVOUMFYQBENHZRDKASXLICTW,MZ
    7,NZJHGRCXMYSWBOUFAIVLPEKQDT,MZ
    8,FKQHTLXOCBJSPDZRAMEWNIUYGV,MZ
    A,EJMZALYXVBWFCRQUONTSPIKHGD,
    B,YRUHQSLDPXNGOKMIEBFZCWVJAT,
    C,FVPJIAOYEDRZXWGCTKUQSBNMHL,


    Da das Programm noch nicht auf Herz und Nieren geprüft wurde, ist es noch nicht sicher, dass diese Version fehlerfrei ist. Es soll einige bauliche Fehler in der Enigma geben, deren Besonderheiten ich noch nicht beherzigt habe, aber Testläuft zeigten ein sauberes Verschlüsseln, Entschlüsseln und Weiterschalten der Walzen in Übereinstimmung mit den mir zur Verfügung stehenden Enigma-Simulatoren.


    In dieser Version wurde auf einige Möglichkeiten verzichtet, unter anderem das Steckerbrett, sowie die Auswahl anderer Walzen als den ersten drei, da diese Dinge als Programmieraufgabe auf dich warten.


    Der Aufbau der Schlüsselmaschine ist recht einfach:
    Die Zeilen im 10xxx-Bereich lesen die in der Textdatei WALZEN1.TXT gespeicherten original Verschaltungspläne von der Diskette ein,
    die Zeilen 11xxx lesen ein Zeichen ein, es ist vorgesehen hier später Lesefunktionen für Dateieingabe einzubauen etwa auf Taste "!" stoppt das Programm zur Zeit,
    die Zeilen 12xxx geben das verschlüsselte Zeichen aus, auch hier können zusätzliche Ausgabekanäle programmiert werden,
    die Zeilen 13xxx verschlüsseln ein Zeichen in Variable K$ zur Variable Z$ und ruft gleichzeitig
    die Zeilen 14xxx auf, die die korrekte Weiterschaltung der Walzen erledigen soll.


    Die Enigma ist zur Zeit so gestellt, dass die Walzen 1,2,3 einliegen und die Startposition "AAA" der Walzen lautet.


    Um eine Vorstellung von der Funktion zu bekommen, die eine Rotormaschine ausführt, ist diese etwas abgespeckte Funktionsweise übersichtlicher. In den Zeilen 13010-13100 wird dann die schrittweise Substitution des eingegebenen Zeichens vorgenommen, erst von der Tastaturmatrix in die Eingangsbuchstaben, dann eine Berücksichtigung der Drehung der Walze, eine Substitution innerhalb der Walze, die Rücknahme der Drehung der Walze und diese Schritte wiederholt für Walze 2 und 3, bis das Zeichen im Reflektor (13060) ankommt, zurückgeworfen wird und die drei Walzen wieder zurückwandert, bis in die Tastaturmatrix und ausgegeben wird.


    In den Zeilen 200-300 findet sich die Hauptschleife des Zeichen holens, übersetzens und ausgebens.


    An sich findet sich in diesem Programm nichts neues, nur die Umsetzung des bisher gelernten.


    Aufgabe:

    • Teste das Eingeben eines Textes, danach gib die Verschlüsselte Nachricht ein und sieh, wie die Enigma den Text wieder ins Original wandelt
    • Erweitere das Programm so, dass in drei Variablen W1, W2, W3 die Nummer der verwendeten Walze für die Position 1, 2 und 3 der Enigma gespeichert ist und diese Einstellung zu Start des Programmes vorgenommen werden kann. Berücksichtige dabei unbedingt auch die RA$()-Arrays, in denen die Positionen der Schaltstifte für jede Walze vermerkt sind
    • füge eine zusätzliche Substituion ein, die das Steckbrett repräsentiert. Die Vertauschungen am Steckbrett sind immer involutorisch, also jedes Zeichen wird zu sich selbst gespiegelt z.B. A->X und X->A. Vorgeschrieben waren 10 Steckungen, 6 Steckplätze blieben frei.
    • ermögliche das Eingeben der Startposition der Walzen (momentan AAA) und die Eingabe bei Start des Programmes
    • ermögliche zusätzlich zur Ausgabe am Bildschirm das Speichern des Textes
    • ermögliche das Lesen von Texten von einer Datei anstatt durch Einlesen der Tasten


    Ladet eure Programmversionen ruhig hoch und teilt sie mit den anderen.

  • Die Schwächen der Enigma


    Nachdem wir im letzten Kapitel die Enigma gebaut haben, hier eine etwas kompliziertere Version, die einige der in im letzten Kurs gestellten Aufgaben löst und die diesem Abschnitt beigelegt wurde.


    Die Enigma hatte einige schwerwiegende Fehler, ohne auf die Details an dieser Stelle eingehen zu wollen, ist einer der furchtbarsten Fehler der Maschine kryptographisch gesehen die Verschlimmbesserung durch den Reflektor. Zwar war es dank des Reflektors sehr bequem, da man keinen Hebel umlegen musste, um die Maschine von Chiffrierung auf Dechiffrierung zu schalten, aber dafür verlor sie sehr viele ihrer möglichen Chiffrierungen. In einem sehr schönen Wikipedia-Artikel wird darauf im Näheren eingegangen, weshalb ich nur das wichtigste zusammenfassen möchte:


    • involutorische Verschlüsselung kostet die Enigma extrem viele ihrer möglichen Alphabete
    • zu wenig Walzen, ein frühes Modell hatte bereits 8, bei einer Auswahl aus 10 etwa, wäre eine sehr viel stärkere Verschlüsselung möglich gewesen
    • Walzen schalten an unterschiedlichen Stellen und zu langsam, mehr Mitnehmer hätten die "Crabs" und "Lobster" schwieriger auffindbar gemacht, besser noch wären flexible Transportwalzen gewesen
    • keine Chiffrierung von Zahlen, so dass die ausgeschriebenen Zahlen leicht für Angriffe genutzt werden konnten "ZWODR EIAXH T"
    • Buchstaben konnten durch den Reflektor niemals in sich selbst abgebildet werden, weswegen Negativsuchen möglich wurden
    • das Steckbrett war symetrisch und ließ daher Angriffe über das Diagonalboard zu
    • statt Steckbrett hätte eine veränderbare, sich ebenfalls drehende Walze eine immense Verstärkung des Verfahrens dargestellt - ein entsprechendes Modell hatte es sogar gegeben
    • Verbote des Gebrauchs von Walzen in bestimmten Positionen durch die Dienstanweisungen und Chiffrierfehler taten ein übriges


    Trotz all dieser Fehler und Unzulänglichkeiten ist der kryptoanalytische Angriff auf die Enigma eine Meisterleistung, die in der Geschichte ihresgleichen sucht. Und wir können sehr viel aus ihr lernen.


    Doch bevor wir anfangen, uns eine eigene, "sichere" Rotormaschine zu basteln (sicher? das muss sich erst zeigen...), sollten wir an dieser Stelle einmal zurücktreten und betrachten, wo wir stehen. Wir haben die Kryptographie von den alten Griechen bis in den zweiten Weltkrieg zurückgelegt und das in nur sechs einfachen Kursen! Mit Sicherheit nicht. Und ich werde das auch nicht schaffen.


    Doch die schlimmsten Lücken will ich in den folgenden Kapiteln versuchen zu schließen.


    Aufgabe: Diskutiert über eine mögliche Verbesserung unserer Enigma-Chiffriermaschine, versucht das in kleinen Programmen umzusetzen. Denkt darüber nach, wie man den Zustand der Maschine in das Schlüsselwort mit einbauen könnte, anstatt komplizierte (und verräterische) Anweisungen zu übertragen. Wie würdet ihr eine Rotormaschine für Computer bauen, die nicht mechanischen Bedingungen unterworfen ist? Wo kann man den Code unserer Enigma vereinfachen? Macht es Sinn, die Enigma als zusätzlichen Befehl in unser Basic zu integrieren? Wie müsste dieser aussehen?

  • Wegen mangelndem Interesse schläfere ich den Kryptokurs an dieser Stelle erst einmal ein und kümmere mich um Projekte, die vielleicht mehr Leute interessieren, wie mein Krypto-Projekt in Java, die Programmierung von GPU basierten Dechiffrierprogrammen (Vektorrechnern) sowie Integration von mathematischen Dechiffrierungen mit Hilfe von maxima, welches alles unter dem Projekt Jathene vereinigt wird. Wen das Thema also interessiert, kann sich hier umorientieren.


    Die Planung dieses Kurses umfasste vom Rahmen her den grundsätzlichen Aufbau von klassischen Substitutionschiffren von Cäsar bis Enigma. Es fehlt die Vorstellung von (bereits implementierten) Transpositionschiffren und das gesamte Kapitel Kryptoanalyse der vorgestellten Techniken. Diese Techniken dann von einfachen Häufigkeitsanalysen bis zur Turing-Bombe, automatischem Diagonalbord und einer handvoll von klassischen Kryptoanalysetechniken, brechen von Vignère, Kasiski-Test, Friedman-Testi und dergleichen.


    Zwischen die Kapitel waren Erläuterungen von Coderoutinen und dergleichen geplant, um das Verständnis zu stärken. Schließlich hätte ich dann noch meine Routinen für das Verarbeiten von überlangen Integers eingearbeitet und exemplarisch ein paar Beispiele zu Kryptotechniken, die auf der Zahlentheorie basieren eingeflochten. Da wäre RSA gewesen als Beispiel für Publickey-Systeme. Denkbar wäre noch ein kleiner AES-Chiffre gewesen. Das kostet natürlich unendliche Mühe, das in 6502 zu coden. Der geplante Platz war $9000-$CFFF, davon habe ich jetzt den $9000er-Bereich halb verbraucht. Vielleicht wäre ich bei einigen Subroutinen auf C ausgewichen. Komplexe Algorithmen in 6502... Igitt.


    Aber ich sehe keinen Sinn darin in das Projekt Stunden um Stunden zu versenken und niemanden interessierts. Das ist etwas schade und überrascht mich auch ein wenig (vielleicht nicht so sehr, ich weiss dass Kryptographie eine Freakwissenschaft ist, genauso C=64 Programmierung obergeekig und die Schnittmenge daraus ist wohl zu klein. Ich muss ein unglaublicher Freak sein, denn auch in englischsprachigen Foren gibt es keinerlei Echo zum Thema Krypto+C=64), aber vielleicht ändert sich die Welt, die Szene, die Mode irgendwann nochmal und dann nehme ich den Faden wieder auf. Im nächsten System-Krieg vielleicht. :D


    Wettbewerbe zum Thema Krypto auf dem C=64 fand ich eigentlich insofern interessant, weil die Leute mit der Maschine eine definierte Hardware vor sich haben, mit der sie die Effizienz ihrer Routinen sehr schön vergleichen können und man mit dem 6502 eigentlich eine fast nackte Von-Neumann-Maschine vor sich hat, ohne Extras, ohne Dekadenz - "no frills" wie es im englischen heißt.


    Solange ich mich also zurückziehe, übergebe ich Cypherbasic 64 und diesen Kurs hiermit der Community. Falls jemand das in meiner Abwesenheit fortsetzen möchte, werde ich mich darüber freuen, ebenso an Erweiterungen von Cypherbasic 64, wenn diese veröffntlicht werden. Ich bitte um Benachrichtigung, falls dieses geschieht.


    Den geplanten Rahmen für diesen Kurs und Cypherbasic habe ich hiermit gesteckt. Hat Spaß gemacht, Leute.

  • Ich habe ja schon im anderen Faden geschrieben, dass ich es schade finde hier und jetzt aufzuhören. Die Geschichte mit der Enigma fand ich höchst spannend (hat mich ganz schön Zeit gekostet zusammen mit den Folgerecherchen auf Wikipedia etc.). Ich kann mich also nur wiederholen: daraus läßt sich was machen (CeVi aktuell / Hobbytronic).


    Gruß WTE

  • Spannend zu lesen war's ja, aber mal ehrlich: Wenn Hanno das alleine macht und sonst keiner anspringt und mitmacht verstehe ich auch voll, wenn der Spaß verloren geht. Ich für meinen Teil hab jedenfalls nix mit dem Enigma-Programm gemacht, und sonst wohl auch niemand.

  • Ich muss sagen, dass ich den Einsatz, den Du hier gezweigt hast äußerst bewundernswert finde, jedoch war leider absehbar, dass sich kaum Leute damit beschäftigen werden, weil Kryptographie, so spannend sie auch ist, für die meisten Leute eher ein Buch mit sieben Siegeln darstellt, und wahrscheinlich deshalb keine Motivation haben, sich in die Materie einzulesen. Sehr schade, denn Dein Beitrag ist äußerst verständlich geschrieben, daher eigentlich auch für den Laien nicht schwer zu verstehen, und die Materialen, die Du Dabei gelegt hast (Cypherbasic) sind im Rahmen dieses Forums eine wirkliche spitzen Leistung. Man merkt, dass Du sehr viel Spass an dem Thema hast. Daher ist es eigentlich sehr schade, dass weiteren keine Reaktionen gekommen sind. Ich hoffe Du bist nicht allzusehr enttäuscht, und konntest wenigstens von Deiner Seite etwas Spass aus der Sache ziehen!

  • Nein, ich bin nicht enttäuscht. Kein Problem. Aber ohne Leute, die da mitziehen (und ihre eigenen Programme einstreuen) ist das schwer durchziehbar. Die Algorithmen, die nach den Transpositionen kämen, wären zeitaufwändig auf 6502 zu programmieren. Und wenn kein Interesse vorhanden ist, macht das keinen Sinn. Hätte Spaß gemacht, die Engima mit dem C=64 zu knacken.


    Ich kann mit 6502-Programmierung auch International bei den Cryptoleuten nicht Punkten. Interessiert keinen dort. Ich persönlich finde, dass der C=64 ein optimales Übungsfeld darstellt für Crypto; alles sehr reduziert, einfacher Prozessor, einfache Umgebung. No frills. Und daher gut zu verstehen. Im Gegensatz zur wissenschaftlichen Crypto, die vor allem durch mathematische Ausdrucksweise geprägt ist. Mir ist diese Ausdrucksweise zwar nicht fremd und komme damit ganz gut klar, aber ich fand es immer leichter, Dinge anhand von aufgeschriebenen Programmen und Algorithmen zu verstehen, als anhand von abstrakten Gleichungen, die vollgepackt mit griechischen Zeichen und abstrakten Symbolen sind. Uni-Bluff (fand ich immer).


    Und das wäre jetzt die Möglichkeit gewesen einzusteigen. Naja. Eingefroren heißt ja nicht beendet. Irgendwann taut es wieder.

  • Und das wäre jetzt die Möglichkeit gewesen einzusteigen. Naja. Eingefroren heißt ja nicht beendet. Irgendwann taut es wieder.


    Das wäre zu hoffen. Bin gerade erst auf den Thread gestoßen und finde das hochinteressant, vor allem weil's nicht so mathelastig rüberkommt. Allerdings werd ich wohl erstmal die bisherigen Artikel und dieses Kryptodingsda ne Weile ausprobieren müssen, bevor ich für neue Lektionen aufnahmebereit bin.


    Wie dem auch sei, hab vor zig Jahren mal in völliger Unkenntnis jeglicher Theorie irgendwas Umständliches programmiert, um komplette Programme mit Codewörtern zu verschlüsseln und somit für sog. "Unbefugte" unausführbar zu machen. Mal kucken ob ich das wiederfinde, vielleicht kann man das ja hier bei Gelegenheit als Beispiel für unsinnige Verschlüsselungsansätze auseinander nehmen...

  • Ist schon witzig, wir hatten diese Woche die Aufgabe 3 Texte zu entschlüsseln. Als Verschlüsselungen kamen Cäsar-Chiffre, Vigenere Chiffre und eine art Vigenere Chiffre bei dem Schlüssel und Text XOR't wurden zum Einsatz. Theoretisch hätte ich die Texte mit dem c64 entschlüsseln können.


    Muss aber leider sagen das ich Text3 überhaupt nicht und Text2 eher durch ausprobieren (Annahme: 3Buchstaben - > muss 'der', 'die' oder 'das' sein) gelöst habe. Es ist aber interessant wie einem Häufigkeitsverteilung und Autokorrelation helfen können den Schlüssel bei einfachen Verschlüsselungsalgorithmen zu knacken.


    Gruß
    marco

  • Hallo erstmal...
    Wirklich schade wird es aber erst, wenn man im Internet nach Schwachstellen von allgemeinen Rotor-Verschlüsselungsmaschinen sucht und dabei ständig auf jene Schwachstellen der Enigma stösst, welche sich dann grösstenteils auch noch aus der falschen Handhabung der Maschine ergaben.


    Was einen hier zum Weitermachen animieren sollte, ist dann wohl die Tatsache, das dieser Thread bei dem (für mich) interessantesten Thema eingefroren wurde.


    Der eigentliche Grund für diese späte Antwort ist, dass ich gerade an einer Java-Implementierung einer allgemeinen Rotor-Maschine arbeite und genau deswegen die Enigma-Schwachstellen (bis auf den Reflektor) bereits als kalkulierbar ansehe. Bei Interesse kann ich dazu ja mal ein wenig in einem neuen Thread posten. Leider passt diese Implementierung rein objektiv schon nicht in einen normalen C=64 (> 64kB). Meine C=64-Zeit ist liegt aber auch schon ein halbes Leben (ca. 20 Jahre) zurück.


    Fragen die ich noch bezüglich Rotormaschinen zu stellen hätte:
    1. Wie sicher sind diese Maschinen, wenn dessen innerer Aufbau (anders als bei der Enigma z.B.) nicht bekannt ist.
    2. Was bleibt von dieser Sicherheit, wenn Anzahl der verwendeten Rotoren sowie Anzahl der kodierbaren Zeichen, nicht aber die eigentliche Verdrahtung der Rotoren bekannt werden?
    3. Welche Wirkung hätte ein sich drehender, zufällig verdrahteter Reflektor (mit oder ohne Fixpunkt => siehe Wikipedia)?


    mfg 0x0badc0de