Kryptografie ohne Computer

Neue Frage »

Dopap Auf diesen Beitrag antworten »
Kryptografie ohne Computer
für handschriftliche Kryptografie suche ich längere memorierbare Stichwörter
deren Buchstaben eine Teilmenge des Alphabets sind.

Beipiel, die Ölfirma PETRONAS

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
P  E  T  R  O  N  A  S   
80 0  1  2  3  4  5  7     
B  C  D  F  G  H  I  J
81 84 87 90 93 95 6  98
K  L  M  Q  U  V  W  X
82 85 88 91 94 96 97 99
Y  Z   .  /
83 86 89 92 
eine bijektive Abbildung

{ A B C D ... Z . / } <--> { 0 1 2 3 4 5 6 7 80 81 82 ... 99}

Mit jedem Stichwort lässt sich per Hand eine andere Zuordnung erstellen! ( Wie? )

Das Chiffrat ist eine auf ca. 1,4 Ziffern je Buchstabe komprimierte lückenlose Stromchiffre.
Häufigkeitsanalysen sind schon wegen der schwierigen Zeichenzuordnung schwierig.
Übertragung professionell in 5-er Blöcken

Was bedeutet zum Beispiel
code:
1:
52810 61027 15281 04648 25152
in obigem Code?
Finn_ Auf diesen Beitrag antworten »

Leider nichts Gutes. Alternative zur Television:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
07975 28694 04870 43960 88810 28106 15949 70110 25857 93093
04409 44949 52883 29304 70648 69493 87028 00102 78194 29397
52784 95594 02815 95476 84959 05948 49504 87886 19638 58508
88758 88090 80010 27819 42934 50950 21089 07975 27390 09484
95194 48740 81856 93875 77078 25948 80271 86941 59304 78495
60489 59478 70482 94800 09004 71024 82344 10885 44942 88618
89409 50028 20440 49757 86095 47849 52611 96388 81595 48758
88820 84951 79448 78564 82796 32940 81029 08539 38994 41028
70420 67048 70481 09054 87047 68495 59484 95738 58495 08760
39090 04815 29706 19502 82588 04594 78708 85947 85548 70869
42940 84828 20952 10487 38495 58871 50282 71049 75204 87605
81106 85087 02872 61104 82855 77081 07018 61944 87869 75296
34930 26493 02088 96385 82944 87828 50640 49307 84955 09017
85094 10487 60975 09520 48787 02458 49516 47150 87104 87604
68495 15858 58694 90024 96348 00102 78194 29385 59304 06493
07160 93049 75204 89585 85097 52047 60889 40870 94487 58193
07805 44158 58504 97520 48760 59493 04940 81024 58495 17849
59702 93097 32870 45858 50902 32049 44878 76093 07684 95102
97520 49308 58185 68495 81850 68495 96348 70290 52810 87074
08108 57872 59477 0489
HAL 9000 Auf diesen Beitrag antworten »

@Dopap

Hmm, was du da betreibst ist eher unverschlüsselte Datenkompression nach Aspekten der Informationsentropie:

Die häufigste Buchstaben werden durch nur eine Ziffer kodiert. Die noch übrig bleibenden Ziffern (8 und 9) werden durch eine angehängte zweite Ziffer für die Kodierung der Restbuchstaben genutzt. (Statt "/" hätte ich dem Code übrigens besser doch ein Leerzeichen " " spendiert, aber das mag Ansichtssache sein.)

Unter "Kryptographie" verstehe ich eher wirkliche Verschlüsselung, d.h., dass die Botschaft vor einem unbefugten Mitlesenden verborgen bleibt, aber in dem Sinne wäre dein Verfahren nur einen Hauch komplexer als die Cäsar-Verschlüsselung.

@Finn

Der Romantitel ist jetzt aber keine Anspielung auf die Qualität des Verschlüsselungsverfahrens, oder? Augenzwinkern
Dopap Auf diesen Beitrag antworten »

ja richtig, die Buchstabenmenge { a e i n o r s t } ist { 0 ...7} zugeordnet.
Diese Menge ist zu memorieren.

Dass der erzeugte Code via Matrix nur marginal besser als der Cäsar ist möchte ich aber bezweifeln. Eine von 26 Drehungen des Alphabets liefert dort den Klartext.
Wie soll man hier Häufigkeitsanalyse durchführen. Vor allem wenn das Chiffrat kurz ist
und man die verwendeten Mengen und deren Zuordnung nicht kennt. Für den Außenstehenden können 5-Blöcke alles mögliche bedeuten bis hin zu einer jener Radio number-stations der DDR mit 1-time-pads gefunkten Nachrichten. Die Zahlensender erfreuen sich zur Zeit weltweit wieder wachsender Beliebtheit.
Auch wenn die einmal-pads der Agenten im Schuhabsatz oder einer Walnuss versteckt waren , ist das sehr gefährlich. Eventuell war das auch 1974 bei "Affaire" Guillome der Fall.

hier z.B nochmals ein schlichter, einfacher Text mit einem anderen Stichwort erstellt:

code:
1:
2:
3:
  42925 78388 51034 98560 80988 29283 37822 41082
 38088 34106 31796 13034 05379 534

Meine Idee zur Erzeugung von 7 Stichwörtern wäre die eine zufällige Wahl des ersten Blocks modulo 7 und die Zuordnung der Wochentage
0=Montag, 1= Dienstag ..6 = Sonntag. Der Besitz einer Liste kann entfallen.
Mehrfache Buchstaben im Stichwort sind beim Erstellen der Matrix zu berücksichtigen.
Finn_ Auf diesen Beitrag antworten »

Die Entzifferung kurzer monoalphabetischer Substitutionen stellt eigentlich schon ein nichttriviales Problem dar. Ein wenig Literatur:

Thomas Jakobsen: A fast method for cryptanalysis of substitution ciphers. In: Cryptologia. Band 19, Nr. 3, 1995.
doi:10.1080/0161-119591883944.

Rod Hilton: Automated Cryptanalysis of Monoalphabetic Substitution Ciphers Using Stochastic Optimization Algorithms. University of Colorado Denver, 2012.
https://cse.ucdenver.edu/~rhilton/

George Lasry: A Methodology for the Cryptanalysis of Classical Ciphers with Search Metaheuristics. Dissertation. Kassel university press, Kassel 2018.
doi:10.19211/KUP9783737604598.
HAL 9000 Auf diesen Beitrag antworten »

Zitat:
Original von Finn_
Die Entzifferung kurzer monoalphabetischer Substitutionen stellt eigentlich schon ein nichttriviales Problem dar.

Das ist sicherlich so. Dein Dostojewski dürfte allerdings lang genug sein, dass er auch bei anderer monoalphabetischer Substitution knackbar ist.
 
 
Finn_ Auf diesen Beitrag antworten »

Englischsprachiges Buch aus dem 20. Jhd. Monoalphabetische Substitution des Alphabets.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
mdmcp ihcbj baqtm eghum jbtmc vermq vcjmy chhie bykhs byiec
vteub mmljb asrhb vtmtm ecvto sjlyj batmc kjcmm dmcpi hcbjb
aqtme vmtmc ocmeu keqvj bvtmb scqmc pgtjx tteyb hvtjb aeisq
jbajb jveby ekvmc mexto cmeuk eqvqt maenm yhsvh kvtmg jbyhg
exchq qvhvt mtsam ihhcg tjxtq mmimy vhqrc meyhs vhbel lqjym
qebyx ljios rvhvt mqupe byekv mcqtm teyqv ecmyk hcegt jlmqt
mcmel jnmyv tevjk qtmyj ybhva hhsvq tmghs lyted mvhqv epjbe
byyhb hvtjb aebyq hqtmg mbvhs vqtmy jybhv ubhgv tevvt jqgeq
vtmom qvvtj baqtm xhsly tedmy hbmeb yqtmy jybhv ubhgv tevgt
mbqtm omaeb vhgel uzsjx ulphc mdmbc sbelh bavtm revtq ebyyh
gbvtm edmbs mqtmg eqqvj ccjba tmcql hgolh hyeby ieujb atmcq
mlkqv chbam copkj atvjb agjvt vtmgj bygtj xtqgm rvyhg bkchi
vtmih hcqtm cebhb lpvhi eumtm cqmlk gecie byqtm tevmy vtmgj
bygtj xtcsq tmyev tmcke xmeby checm yebyt mlytm coexu eqjkj
vgmcm qhima jebvq tmxhs lybhv qmmos vvtmo jaocm evtqh kchsa
tkcmq tejco lhgbh dmcvt mtmev tmckj llmyt mclsb aqgjv tqhim
vtjba gtjxt geqah hykhc tmcgt hlmvt jbohy pebyg tjrrm yqhim
cmyxh lhcjb vhtmc xtmmu qebyo cjatv mbmyt mcysl lmpmq gtmbq
tmyjy bhvub hgebp vtjba eohsv jv
HAL 9000 Auf diesen Beitrag antworten »

Falls das eine Herausforderung sein soll: Ich hab nicht gesagt, dass ich es kann. Augenzwinkern
Dopap Auf diesen Beitrag antworten »

der Vollständigkeit halber sei erwähnt, dass der Klartet zu meinem letzten Chiffrat

RolandKaiserhatSchuldenundBorisBeckeristeinmieserSaenger


lautet.
Lopez Jazlyn Auf diesen Beitrag antworten »

Kryptografie existiert seit Jahrhunderten und wurde weit vor der Erfindung von Computern praktiziert. Historische Methoden wie die Caesar-Verschlüsselung, bei der jeder Buchstabe im Text um eine feste Anzahl von Stellen im Alphabet verschoben wird, sind frühe Beispiele. Eine andere bekannte Methode ist die Vigenère-Chiffre, die eine Folge von verschiedenen Caesar-Verschlüsselungen verwendet, basierend auf einem Schlüsselwort.
hawe Auf diesen Beitrag antworten »

Hm,

wenn es um "von hand" anwendbare Verschlüsselung geht wäre auch der "Doppelwürfel" einen Blick wert.
Ist ein historisches Verfahren und nicht "unknackbar"...

https://www.geogebra.org/m/gwm7fbzu

Bekannt?
Finn_ Auf diesen Beitrag antworten »

Vor weniger als zwei Jahren rubrizierte Alena Buyx die damaligen Transformer noch ungläubig unter den stochastischen Papageien. Mittlerweile darf man sich da wohl nicht mehr so sicher sein. Auf die Anfrage

Mir liegt ein Chiffretext zu einem englischsprachigen Text vor. Es handelt sich um eine monoalphabetische Substitution des Alphabets durch ein permutiertes Alphabet. Sonderzeichen wurden entfernt, der Text auf kleine Buchstaben normalisiert. Schreibe bitte ein Python-Programm, das versucht, den Chiffretext zu entschlüsseln.

erzeugte mir OpenAI o3-mini (medium compute) heute das folgende Programm, an dem ich lediglich eine kurze Änderung an der Eingabeschnittstelle vornahm, damit es aus der Datei input.txt statt von der Kommandozeile einliest. Die Datei english-quadgrams.txt (3.14 MB) mit den Häufigkeiten der Tetragramme im Englischen entnahm ich https://github.com/gibsjose/statistical-attack/tree/master – das war der erste Eintrag, den die Suchmaschine ausspuckte. Vor geraumer Zeit versuchte ich selbst mal, so ein Programm auf Basis des Bergsteigeralgorithmus mit Häufigkeitsanalyse bzgl. Di- und Trigrammen abzufassen, bin damit allerdings gescheitert. Ich nahm an, der Raum wäre zu zerklüftet für eine simple Optimierung.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
#!/usr/bin/env python3
import math
import random

class QuadgramScorer:
    """
    Diese Klasse lädt Quadgramm-Frequenzen aus einer Datei und
    stellt eine Methode zur Verfügung, um einen Text zu bewerten.
    """
    def __init__(self, filename):
        self.quadgrams = {}
        with open(filename, 'r') as f:
            for line in f:
                parts = line.split()
                if len(parts) != 2:
                    continue
                quad, count = parts[0], int(parts[1])
                self.quadgrams[quad.upper()] = count
        self.N = sum(self.quadgrams.values())
        # Logwahrscheinlichkeiten berechnen
        for quad in self.quadgrams:
            self.quadgrams[quad] = math.log10(float(self.quadgrams[quad]) / self.N)
        # Falls ein Quadgram nicht gefunden wird, verwende einen minimalen Score
        self.floor = math.log10(0.01 / self.N)

    def score(self, text):
        """Berechnet den Gesamt-Log-Score für den Text anhand der Quadgramm-Frequenzen."""
        score = 0
        text = text.upper()
        for i in range(len(text) - 3):
            quad = text[i:i+4]
            score += self.quadgrams.get(quad, self.floor)
        return score

def decrypt(ciphertext, key):
    """
    Übersetzt den Chiffretext mithilfe des gegebenen Substitutions-Schlüssels.
    Hierbei ist 'key' eine Permutation der 26 Buchstaben, wobei der i-te Buchstabe
    des Keys für den Buchstaben 'abcdefghijklmnopqrstuvwxyz'[i] steht.
    """
    plain = ""
    alphabet = "abcdefghijklmnopqrstuvwxyz"
    mapping = { cipher: plain for cipher, plain in zip(key, alphabet) }
    for char in ciphertext:
        plain += mapping.get(char, char)
    return plain

def random_key():
    """Erzeugt einen zufälligen Permutationsschlüssel der 26 Buchstaben."""
    letters = list("abcdefghijklmnopqrstuvwxyz")
    random.shuffle(letters)
    return "".join(letters)

def hill_climb(ciphertext, scorer, max_iterations=10000):
    """
    Versucht mittels Hill-Climbing, den passenden Schlüssel zu finden.
    Dabei wird in jedem Schritt zufällig zwei Buchstaben des Schlüssels vertauscht.
    """
    current_key = random_key()
    current_plain = decrypt(ciphertext, current_key)
    current_score = scorer.score(current_plain)
    best_score = current_score
    best_key = current_key

    for _ in range(max_iterations):
        # Erzeuge einen Kandidaten durch zufälligen Tausch zweier Buchstaben im Schlüssel
        candidate_key_list = list(current_key)
        i, j = random.sample(range(26), 2)
        candidate_key_list[i], candidate_key_list[j] = candidate_key_list[j], candidate_key_list[i]
        candidate_key = "".join(candidate_key_list)
        candidate_plain = decrypt(ciphertext, candidate_key)
        candidate_score = scorer.score(candidate_plain)
        
        # Akzeptiere den neuen Schlüssel, wenn der Score steigt oder mit einer gewissen
        # Wahrscheinlichkeit auch bei Score-Verschlechterung (simulated annealing)
        if candidate_score > current_score or math.exp(candidate_score - current_score) > random.random():
            current_key = candidate_key
            current_score = candidate_score
            if current_score > best_score:
                best_score = current_score
                best_key = current_key
    return best_key, decrypt(ciphertext, best_key)

def read_all(path):
    with open(path, 'r') as f:
        text = f.read()
        return "".join(text.strip().split())

def main():
    # Lies den Chiffretext ein
    ciphertext = read_all("input.txt")
    
    # Initialisiere den Quadgram-Scorer.
    # (Stelle sicher, dass 'english-quadgrams.txt' im selben Verzeichnis liegt.)
    scorer = QuadgramScorer("english-quadgrams.txt")
    
    print("Entschlüsselung wird durchgeführt ...")
    best_key, plaintext = hill_climb(ciphertext, scorer, max_iterations=10000)
    
    print("\nGefundener Schlüssel:")
    print(best_key)
    print("\nDechiffrierter Text:")
    print(plaintext)

if __name__ == '__main__':
    main()

Lokal auf meinem Computer ausgeführt kam zum obigen Chiffrat "mdmcp ihcbj [...]" nach kurzer Rechenzeit die Ausgabe:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
Gefundener Schlüssel:
eoxymkatjfulibhrzcqvsdgwpn

Dechiffrierter Text:
everymorningsheawokeinhertapestriedroomandfoundmarthakneelinguponthehe
arthbuildingherfireeverymorningsheateherbreakfastinthenurserywhichhadn
othingamusinginitandaftereachbreakfastshegazedoutofthewindowacrosstoth
ehugemoorwhichseemedtospreadoutonallsidesandclimbuptotheskyandaftershe
hadstaredforawhilesherealizedthatifshedidnotgooutshewouldhavetostayina
nddonothingandsoshewentoutshedidnotknowthatthiswasthebestthingshecould
havedoneandshedidnotknowthatwhenshebegantowalkquicklyorevenrunalongthe
pathsanddowntheavenueshewasstirringherslowbloodandmakingherselfstronge
rbyfightingwiththewindwhichsweptdownfromthemoorsheranonlytomakeherself
warmandshehatedthewindwhichrushedatherfaceandroaredandheldherbackasifi
tweresomegiantshecouldnotseebutthebigbreathsofroughfreshairblownoverth
eheatherfilledherlungswithsomethingwhichwasgoodforherwholethinbodyandw
hippedsomeredcolorintohercheeksandbrightenedherdulleyeswhenshedidnotkn
owanythingaboutit
HAL 9000 Auf diesen Beitrag antworten »

Ja, ziemlich beeindruckend. Vor allem dass die KI selber den Lösungsweg "Simulated Annealing basierend auf der Häufigkeit der 4-Buchstaben-Sequenzen der englischen Sprache" gefunden hat.

Etwas stutzen musste ich bei math.exp(candidate_score - current_score) > random.random():

Ich hätte erwartet, dass noch ein positiver Steuerungsparameter param in der Weise math.exp(param * (candidate_score - current_score)) > random.random() nötig wäre, aber es scheint ja auch gleich mit param = 1 zu klappen.



Na mal sehen, ob ich es noch bis zur Rente schaffe, oder doch vorher von einer KI ersetzt werde. Augenzwinkern

P.S.: Von der Threadüberschrift "Kryptografie ohne Computer" haben wir uns inzwischen ein wenig entfernt.

EDIT: Hab's mal ausprobiert - nur ca. jeder zweite Durchlauf hat Erfolg. Vielleicht muss man doch mit dem "param" experimentieren - beim Simulated Annealing senkt man ja im Prozessverlauf die Temperatur (was hier einer Erhöhung von param entspricht).
Conny_1729 Auf diesen Beitrag antworten »

Zitat:
Original von Finn_... Auf die Anfrage

Mir liegt ein Chiffretext zu einem englischsprachigen Text vor. Es handelt sich um eine monoalphabetische Substitution des Alphabets durch ein permutiertes Alphabet. Sonderzeichen wurden entfernt, der Text auf kleine Buchstaben normalisiert. Schreibe bitte ein Python-Programm, das versucht, den Chiffretext zu entschlüsseln.

erzeugte mir OpenAI o3-mini (medium compute) heute das folgende Programm.
...


Das Programm funktioniert ja wirklich vorzüglich, sofern man keine Großbuchstaben verwendet. Da muss man schon sehr darauf achten, dass man bei diesen einfachen Verschlüsselungstechniken nicht zu lange Botschaften rausgibt. In der Kürze liegt die Würze!

Kleine Scherzfrage am Rande: (zum chiffrierten Text in meiner Anlage)
Im entschlüsselten Text gibt es eine besondere Stelle, die sechsmal in Folge denselben Begriff verlauten lässt. Wie bezeichnet man dieses "begriffliche Merkmal"?

Gruß Conny.
HAL 9000 Auf diesen Beitrag antworten »

[attach]58100[/attach]
Conny_1729 Auf diesen Beitrag antworten »

Zitat:
Original von HAL 9000
[attach]58100[/attach]


Der Code ist noch nicht ganz entschlüsselt ...

Gruß Conny.
HAL 9000 Auf diesen Beitrag antworten »

Der Code ist schon entschlüsselt, nur deine nebulös formulierte Frage nicht. Augenzwinkern

Es geht dir um eine bestimmte Stelle in diesem Pilish-Pamphlet, nun gut. Da ich mir unter "begriffliches Merkmal" nichts vorstellen kann, weiß ich auch nicht, was das in dem Zusammenhang bedeuten soll. unglücklich
Conny_1729 Auf diesen Beitrag antworten »

Zitat:
Original von HAL 9000
Der Code ist schon entschlüsselt, nur deine nebulös formulierte Frage nicht. Augenzwinkern

Es geht dir um eine bestimmte Stelle in diesem Pilish-Pamphlet, nun gut. Da ich mir unter "begriffliches Merkmal" nichts vorstellen kann, weiß ich auch nicht, was das in dem Zusammenhang bedeuten soll. unglücklich


Mit "nevermore" hast du ja das von mir kryptisch umschriebene Merkmal ja schon gefunden, und da "nevermore" 6-mal hintereinander vorkommt, ist es eine Besonderheit (in bestimmten Kreisen). Für diese markante Stelle wurde offiziell ein Name zugeordnet und nach diesem war letztendlich gesucht. Mehr steckt da auch nicht dahinter.

Gruß Conny.
HAL 9000 Auf diesen Beitrag antworten »

Na dann musst du auf jemand aus diesen "bestimmten Kreisen" warten.

Wenn die Frage stattdessen lauten würde "Im entschlüsselten Text gibt es eine besondere Stelle, die sechsmal in Folge denselben Begriff verlauten lässt. Wie bezeichnet man dieses Stelle?", dann hätte ich schon eher eine Antwort (Feynman-Punkt).
Conny_1729 Auf diesen Beitrag antworten »

Zitat:
Original von HAL 9000
Na dann musst du auf jemand aus diesen "bestimmten Kreisen" warten.

Wenn die Frage stattdessen lauten würde "Im entschlüsselten Text gibt es eine besondere Stelle, die sechsmal in Folge denselben Begriff verlauten lässt. Wie bezeichnet man dieses Stelle?", dann hätte ich schon eher eine Antwort (Feynman-Punkt).


Genau!!!
Ich war mir absolut sicher, dass du die Antwort schon längst gefunden hast und meine verklausulierte Fragestellung dich davon abgehalten hat. Ist ja eigentlich auch offensichtlich ... Immerhin hat Wolfram MathWorld diese Namensbezeichnung in der Enzyklopädie mal aufgenommen. Muss aber nicht heißen, dass es auch mathematisch interessant ist (außer in "bestimmten Kreisen") Augenzwinkern .

Gruß Conny.
HAL 9000 Auf diesen Beitrag antworten »

Zurück zum Python-Code:

Ich hatte oben ja schon die Einführung einer Steuerparameters "param" (umgekehrt proportional zur "Temperatur") für das Simulated Annealing ins Spiel gebracht. Auf den zweiten Blick fällt mir aber noch was anderes auf: Der Quadgram-Score ist, so wie er oben implementiert wurde, proportional zur analysierten Textlänge. Das scheint mir unangemessen zu sein:

Beispielsweise bewirkt das bei einem so viel längeren Text wie dem von Conny_1729, dass der Zweig math.exp(param * (candidate_score - current_score)) > random.random(), der ja eh nur im Fall candidate_score < current_score geprüft wird, de facto nie zur Geltung kommt - damit wird aus Simulated Annealing nur noch ein reiner Hill-Climbing-Algorithmus mit der Gefahr, dass man aus einem lokalen Maximum, welches kein globales ist, nicht mehr herauskommt...

Daher sollte vermutlich in Zeile 33 statt "return score" eher "return score/len(text)" stehen, allerdings dann verbunden mit einer anderen Wahl des Steuerparameters, denn param=1 würde dann bewirken, dass fast nur noch zufällig hin- und hergesucht wird, und das Hill-Climbing eine zu geringe Rolle spielt...
Finn_ Auf diesen Beitrag antworten »

Ja, damit läuft es besser. Meine genauen Ersetzungen sind diesbezüglich:
  • log10 gegen den natürlichen Logarithmus,
  • "return score" in Zeile 33 gegen "return score/(len(text) - 3)",
  • "exp(candidate_score - current_score)" in Zeile 76 gegen "exp((candidate_score - current_score)/T)" mit Temperatur T=0.1.

Das Verfahren entschlüsselt auch kürzere Texte einigermaßen gut. Ich habe auch schon eine optimierte Portierung auf Rust in der Hexenküche, die das Verfahren mehrmals wiederholt und daraus den Schlüssel mit dem besten Score wählt. Bei sehr kurzen Texten kommt trotzdem öfters ein falscher Schlüssel heraus. Man könnte hierbei zur Automatisierung mit einem Wörterbuch des Englischen prüfen, ob der Text auch längere englische Wörter enthält; dabei stellt sich allerdings das Problem in den Weg, dass der Text noch ein wenig verschmutzt sein mag, insofern der Schlüssel häufig nur näherungsweise korrekt ist.

Hier sind noch meine mit o3-mini geführten Gespräche:

https://chatgpt.com/share/67a5e02e-eae0-...45-4c67b2fd2427

https://chatgpt.com/share/67a61dc4-1bbc-...73-ffaf85e9e793
Finn_ Auf diesen Beitrag antworten »

Zuweilen stellt man den verfügbaren KI-Systemen Test-Aufgaben zur Auslotung, wo sie gerade stehen, insofern man die öffentlich zirkulierenden Benchmarks für sich allein nicht aussagekräftig genug empfinden mag. Ich bin diesbzgl. nochmals aufs Entziffern meines Kryptogramms zurückgekommen. Zu meinem Erstaunen gelingt dies Googles neustem Modell Gemini 3.0 Pro nun anscheinend durch "bloßes Denken", also ohne zusätzliche Werkzeuge bzw. Abfassung und Ausführung eines Programms. Dazu ließ ich in AI Studio alle Optionen ausgeschaltet und gab den folgenden Prompt:

Gelingt es Dir, den folgenden Chiffretext ohne Werkzeuge entschlüsseln? Es handelt sich um eine monoalphabetische Substitution des Alphabets, der Klartext ist englischsprachig.

mdmcp ihcbj [...]


Antwort des Modells
Ja, das ist ohne Werkzeuge machbar, da es sich um eine klassische Frequenzanalyse und Mustererkennung handelt. Hier ist der Lösungsweg und das Ergebnis:

### Analyse & Lösungsweg

1. **Häufigkeitsanalyse:** Beim Überfliegen des Textes fallen kurze, sich wiederholende Wörter auf.
* `vtm` taucht sehr oft auf. Im Englischen ist "THE" das häufigste Wort mit 3 Buchstaben.
* Hypothese: `v` = **T**, `t` = **H**, `m` = **E**.

2. **Überprüfung der Hypothese:**
* Wenn `vtm` = **THE** ist, schauen wir uns `vtmtm` (Zeile 2) an: `THE HE...`. Das macht im Englischen Sinn ("The heart...", "The heat...").
* Das Wort `eby` taucht häufig auf. Ein sehr häufiges 3-Buchstaben-Wort ist "AND".
* Hypothese: `e` = **A**, `b` = **N**, `y` = **D**.

3. **Worterkennung & Kontext:**
* Schauen wir uns das erste Wort an: `mdmcp`.
* Mit dem bisherigen Schlüssel (`m`=E, `e`=A, `v`=T...): `E _ E R _`.
* Ein sehr häufiges Wort, das passt, ist **EVERY**. Daraus folgt: `d` = **V**, `c` = **R**, `p` = **Y**.
* Zweites Wort `ihcbj`: `_ O R N I`. Wahrscheinlich **MORNI** (Morning?). `i` = **M**, `h` = **O**, `j` = **I**. (Das fehlende 'NG' könnte am Ende des Wortes oder im nächsten Block stecken).
* Drittes Wort `baqtm`: `N A _ H E`. Mit `b`=N, `e`=A, `t`=H, `m`=E. Das sieht aus wie **NASHE** (ein Name?) oder vielleicht ist das 'S' von `q`.
* Testen wir `q` = **S**. `qtm` taucht im Text auf -> **SHE**. Das passt perfekt ("THE" und "SHE" sind oft Begleiter).

4. **Ein markantes Wort entschlüsseln:**
* In der vierten Zeile steht `gjbyhg`.
* Einsetzen: `_ I N D O _`.
* Das Wort ist offensichtlich **WINDOW**.
* Daraus folgt: `g` = **W**.

5. **Zusammenfügen der Puzzleteile:**
* `eghum` -> `A W O K E`.
* `ocmeu keqv` -> `B R E A K` `F A S T` (Breakfast). Daraus folgt `o`=**B**, `u`=**K**, `k`=**F**.
* `vteub` -> `T H A N K`.

### Der entschlüsselte Text (mit Lückenfüllung)

Mit dem ermittelten Schlüssel (`a`=G, `b`=N, `c`=R, `d`=V, `e`=A, `g`=W, `h`=O, `i`=M, `j`=I, `k`=F, `m`=E, `o`=B, `p`=Y, `q`=S, `s`=U, `t`=H, `u`=K, `v`=T, `y`=D...):

*Entschlüsselung (Zeilenweise/Blockweise):*

EVERY MORNI NASHE AWOKE INHER TARES TRIED ROOM A NDFOS NDIAR THANK EELIN APRON THEHE ARTHB UILDI NGHEM FIRED...
*(Hier scheint der Klartext einige Wortgrenzen zu ignorieren oder Fehler zu enthalten, z.B. "MORNI NASHE" statt "MORNING AS HE" oder "MORNING NASHE", "ROOM AND FOUND FAMILIAR" ist versteckt)*

Liest man den Text im Fluss, ergibt sich folgender englischer Klartext (mit korrigierten Wortabständen):

**"Every morning Nashe awoke in her tares tried room and found familiar thank feeling apron the hearth burned the nursery which the sky and after she had stared for a while she realized that if she shed in bot kowt..."**

*Korrekturhinweis:* Der Text scheint an einigen Stellen etwas sinnfrei zu wirken ("Nashe", "tares tried room"), was oft bei automatisch generierten Chiffren oder Textausschnitten aus unbekannter Literatur ("Nashe" könnte ein Name sein, Thomas Nashe?) der Fall ist. Die Schlüsselzuweisung ist jedoch eindeutig.

Hier ist ein rekonstruierter, lesbarer Ausschnitt basierend auf dem Schlüssel:

**EVERY MORNING NASHE AWOKE IN HER TEARS TRIED ROOM AND FOUND FAMILIAR THANK FEELING APRON THE HEARTH BURNED THE NURSERY WHICH THE SKY AND AFTER SHE HAD STARED FOR A WHILE SHE REALIZED THAT IF SHE...**

*(Hinweis: "Tares" ist im Chiffretext `vermq` (`v`=T, `e`=A, `r`=R, `m`=E, `q`=S). Das englische Wort "Tares" existiert (Unkraut), aber "Tears" (Tränen) würde besser passen, wäre aber `TEARS`. Da `e` im Code `A` ist und `m` `E` ist, steht dort wörtlich TARES.)*


Es dachte dafür schon eine Weile nach, so ca. fünf bis sechs Minuten, und muss dabei einen recht langen Gedankengang produziert zu haben, was man aber nicht so genau weiß, da die eigentlichen Gedanken verborgen bleiben. Ich fütterte die Aufgabe samt bisheriger Antwort nochmals in einer frischen Sitzung ein, um auszuschließen, dass es den Gedankengang unnötig als Kontext einliest. Daraufhin gelang dem Modell die vollständige Entzifferung.

Bisher hast Du folgendes herausgefunden, das fast richtig ist. Das Wesentliche wäre damit geschafft. Überleg Dir nun vielleicht auch, wie der Text mehr Sinn machen würde. [...]

Antwort des Modells
Das ist eine hervorragende Vorarbeit! Du hast die wichtigsten Buchstaben (`v`=T, `m`=E, `t`=H, `e`=A, `b`=N) bereits korrekt identifiziert. Der Grund, warum der Text an manchen Stellen noch wirr erschien (z. B. "TARES TRIED" oder "BOT KOWT"), liegt daran, dass einige Wortgrenzen im Chiffretext nicht mit den tatsächlichen Wortgrenzen übereinstimmen und ein paar Buchstaben noch fehlten.

Hier ist die vollständige Lösung und die Erklärung, wie der Text Sinn ergibt.

### Der Durchbruch

Der Text ist ein Auszug aus dem Roman **"The Secret Garden" (Der geheime Garten)** von Frances Hodgson Burnett.

Die entscheidenden Korrekturen zu deinem Ansatz waren:
1. **`vermq vcjmy`**: Das ist nicht "TARES TRIED", sondern **TAPESTRIED** (mit Wandteppichen behangen). Das `r` im Chiffretext ist ein **P**.
2. **`vteub mmljb`**: Hier versteckt sich der Name **MARTHA** und das Wort **KNEELING** (Martha kneeling).
3. **`pgtjx`**: Das ist **WHICH** (`x` = C).

### Der Klartext

Hier ist der entschlüsselte Text mit korrekter Worttrennung und Interpunktion:

> "Every morning she awoke in her **tapestried room** and found **Martha kneeling** upon the hearth building her fire. Every morning she ate her breakfast in the nursery **which had nothing amusing** in it; and after each breakfast she gazed out of the window across that huge moor which seemed to spread out on all sides and climb up to the sky, and after she had stared for a while she realized that if she did not go out she would have to stay in and do nothing—and so she went out. She did not know that this was the best thing she could have done, and she did not know that, when she began to walk quickly or even run along the paths and down the avenue, she was stirring her slow blood and making herself stronger by fighting with the wind which swept down from the moor."

### Das vollständige Alphabet (Schlüssel)

Hier ist die Zuordnung, die den Text lesbar macht:

| Chiffre | Klartext | | Chiffre | Klartext |
| :--- | :--- | | :--- | :--- |
| **A** | G | | **N** | Z (in "gazed") |
| **B** | N | | **O** | B |
| **C** | R | | **P** | Y |
| **D** | V | | **Q** | S |
| **E** | A | | **R** | P |
| **F** | (fehlt) | | **S** | U |
| **G** | W | | **T** | H |
| **H** | O | | **U** | K |
| **I** | M | | **V** | T |
| **J** | I | | **W** | (fehlt) |
| **K** | F | | **X** | C |
| **L** | L | | **Y** | D |
| **M** | E | | **Z** | Q (in "quickly") |

### Analyse deiner Stolpersteine

* **"NASHE"**: Im Chiffretext stand `baqtm` (`NG SHE`). Das war das Ende von "MORNI**NG**" und der Anfang von "**SHE**".
* **"TARES TRIED"**: Das war `vermq vcjmy`. Mit `r`=P ergibt sich `TAPES` `TRIED` -> **TAPESTRIED**.
* **"BOT KOWT"**: Das war die Stelle `jybhv ubhgv`. Entschlüsselt: `I D N O T` `K N O W T` -> "**I D**ID **NOT KNOW T**HAT".

Du hattest die Frequenzanalyse perfekt angewendet, es fehlte nur noch das Erkennen der komplexeren Wörter, um den Kontext ("Secret Garden") zu erfassen. Gut gemacht!
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »