Frequenzanalyse
-
Hallo, mir wurde aufgetragen, eine Frequenzanalyse von Text zu machen und ich steh ein bisschen aufm Schlauch... dabei sollen jedem Zeichen das wahrscheinlichste im jeweiligen Alphabet zugeordnet werden.
Mein Problem ist die Berechnung. Ich kann die Zeichen zählen und nachsehen, welche z.B. ersten drei am häufigsten sind und das mit einer Tabelle der häufigsten dt. Zeichen vergleichen, aber danach werden die Wahrscheinlichkeiten immer kleiner und die Ergebnisse kann man vergessen.
Ich berechne zur Zeit die Häufigkeit des Buchstabens/Gesamtanzahl aller Buchstaben und suche zu diesem Wert den Buchstaben im Alphabet mit der am nächsten liegenden Häufigkeit. Nur wie gesagt sind die Ergebnisse sehr bescheiden. Ein Bekannter meinte, bei so etwas wäre die Bayes-Formel wichtig und ich solle Buchstabentupel nehmen, diese Permutieren und dann Bayes anwenden...
Ich habe Bayes angewendet, aber die Ergebnisse sind immer noch recht schlecht... habe ich ihn falsch angewendet? Habe einen naiven Bayes-Klassifikator versucht zu nehmen; jeder Buchstabe ist eine Klasse und hat das Attribut Häufigkeit. Jedoch sind die Wahrscheinlichkeiten, dass ein Buchstabe zur Klasse x gehört, 10^-5 bis 10^-7 Bereich....
Wäre es sinnvoller, die Buchstaben mit einer hohen Häufigkeit in eine Klasse zu stecken, dann die mit weniger Häufigkeit in eine weitere und die mit ganz wenig in eine dritte? Dann wären die Erg. wohl besser, aber viel analysiert hab ich da ja immer noch nichtHelp please
-
Ich habe immer noch nicht verstanden, wasdein Ziel ist. Also das Ziel der 'Frequenzanalyse'.
Bayes-Klassifikator
Was soll er denn klassifizieren, was sollen die Klassen denn fuer Eigenschaften haben, wieviel Klassen hast du?
Das alles ist ziemlich verwirrend. Beschreibe bitte nicht das wie, sonder das was du machst.
-
möchtest du nen statistischen Angriff auf eine Verschlüsselung fahren?
dann ist Häufigkeitsanalyse das Beste was du machen kannst. danach händisch optimieren. Häufigkeitsanalyse läuft so, dass du dir ne statistik der Buchstabenhäufigkeiten der Sprache holst, dann im Text die Häufigkeiten berechnest und dann einfach Stur die Rangfolgen einander zuordnest. Also häufigster Buchstabe der Sprache=häufigster Buchstabe im text, usw.
Hidden Markov Angriffe (also das was dir mit Bayes aufgetragen wurde), klappen eh erst, wenn du ein Buch als Chiffrat hast. Bis du alleine Bigramme geschätzt hast braucht es viele 10000 Übergänge. Und da sind die Unigramme schon lange gegen die Häufigkeiten der Sprache konvergiert.
-
Hat ein bisschen gedauert die Antwort, aber es soll folgendermaßen laufen:
Zu einem ausgelesenen Text sollen den einzelnen Buchstaben/Zeichen die entsprechenden Buchstaben im jeweiligen Alphabet zugeordnet werden, meist dem deutschen.Jedoch finde ich keine zufriedenstellende Lösung... ich habe die Häufigkeiten von einzelnen Zeichen, Bigrammen und Trigrammen.
Die ersten ~5 Zeichen zuzuordnen klappt an sich immer ganz gut, danach sieht es schon schlechter aus. Das Problem ist: wenn einmal ein Buchstabe falsch zugeordnet wurde, (z.B. das Zeichen a dem b statt dem a) dann wird auch b falsch zugeordnet werden, da ja keine Doppelbelegung vorgesehen ist.Es scheint auch keine Algorithmen in der Hinsicht zu geben... wenn ich irgendwo Beispiele zur Kryptoanalyse fand, wurde das immer ziemlich ideal angegangen. (Es gab keine Fälle, bei denen die Annahmen nicht stimmten etc., immer wurde richtig geraten).
Gibt es Verfahren in der Hinsicht? Denn ich habe ungefähr 80 versch. Zeichen, die ich zuordnen kann/muss und stur direkt zuordnen kann man da spätestens nach dem 5. Buchstaben vergessen, da dann die Häufigkeiten sich zu ähnlich sind. Ich schaffe zwar immer mal richtige Zuweisungen, aber das bringt nicht viel, wenn ein Großteil des Textes dafür nicht richtig erkannt wurde.
Ich habe dazu mal eine Testausgabe erstellt. Es zeigt die absteigende Häufigkeit der einzelnen Zeichen, Bigramme und Trigramme.
i|en|en
r|er|er
t|n | de
s|ch|der
a|e |ie
d|r |ich
h| d|sch
l|de|ein
u|ei|ch
g|te|die
c|ie| di
o|in|che
m|t |den
b|ge|nd
f|s |tenIn meinem ausgelesen Text (eine komplette A4 Seite voller Text) sehen die Häufigkeiten folgendermaßen aus:
i|en|en
r|er|er
t|in|ein
s|n |ung
a| d|rai
d|ei|ich
u|t |ain
g|ch|ine
h|r | di
l|ng|ch
o|de|Tra
c|ne|ini
m|un|nin
b|e |ngs
p|st|ingZu beachten ist, dass das Leerzeichen auch dazugehört, also nicht wundern wenn Trigramme nicht lang genug zu sein scheinen.
-
Ich hab sowas noch nie gemacht, aber wie wärs mit folgendem Ansatz:
Wie wärs, wenn du noch ein richtige Wörterbuch dazu nimmst? Wenn du Zeichenketten gefunden hast, die mit einem (hinreichend langem) Wort übereinstimmen, sind die entsprechenden Zeichen vermutlich korrekt entschlüsselt. Dann kannst du bei den anderen Zeichen anfangen hin- und her zu permutieren, bis eine gewisser Prozentsatz von Teilzeichenketten mit deinem Wörterbuch übereinstimmt.
Da brauchst du nur noch ein Wörterbuch... oder jemanden, der eine tollere Idee hat.
[ Nur mal nebenbei gefragt: Hast du die Häufigkeitstabellen aus einer öffentlichen Quelle? Hast du einen Link? ]
-
Noch was: Achtest du irgendwie auf konsitenz zwischen deinen Treffern bei den einzelnen Buchstaben und Bi- und Trigrammen?
Falls z.b. "x" alleine auf "e" abgeildet wird, aber "xy" auf "in", dann kann eines von beiden nicht passen.
-
Die Häufigkeiten bekomme ich von jemanden gestellt, werde ihn fragen, ob auch ganze Wörter in die Liste aufgenommen werden können und wie er die Listen überhaupt erstellt. An die Wortüberprüfung dachte ich auch schon, hab aber die Idee aus irgendeinem Grund verworfen *g*
Die Überprüfung der Konsistenz habe ich schonmal getestet, aber die Ergebnisse waren nicht sehr befriedigend... bei Bigrammen gibt es zumindest bei den Kleinbuchstaben, mit denen ich die Analyse anfange, weil sie eine höhere Häufigkeit haben, fast alle möglichen Kombinationen. Aber stimmt, später bei den Großbuchstaben wäre es wohl eine Hilfe. Ich werde es mit Bi- und Trigrammen testen, wie es sich auswirkt.
Danke schonmal.