AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Angriff auf die Vegenere-Chiffre
Thema durchsuchen
Ansicht
Themen-Optionen

Angriff auf die Vegenere-Chiffre

Ein Thema von Nikolas · begonnen am 19. Apr 2006 · letzter Beitrag vom 24. Mai 2006
Antwort Antwort
Benutzerbild von Nikolas
Nikolas
Registriert seit: 28. Jul 2003
Ich habe ein Programm geschrieben mit dem man die Vigenere-Verschlüsselung knacken kann. Dieser Angriff wurde von Charles Babbage vor etwa 150 Jahren entwickelt. Heutzutage wird dieser Code wohl kaum noch benutzt. Aber weil ich nichts besseres zu tun hatte, habe ich mich mal dran gesetzt und diesen Angriff implementiert.
Dafür habe ich mir die Klasse TVegenere geschrieben, die die grundlegenden Funktionen wie Ver oder Entschlüsseln und ein paar andere benötigte Funktionen beinhaltet.

In den anderen Units werden die einzelnen Abschnitte des Angriffs bearbeitet (Suche der Schlüssellänge und dann der Angriff gegen die monoalphabetische Verschlüsselung).

Natürlich funktioniert dieses Methode nicht immer, da sie im Endeffekt auf der Häufigkeitsverteilung der Buchstaben aufbaut. Wenn also der Schlüssel also lang genug ist, wird das Entschlüsseln recht schwierig bis unmöglich.

Hier mal ein Beispiel:

Man nehme Das Lied von der Glocke und verschlüssle es mit dem Wort 'Goldhamster'. Das sollte recht einfach zu knacken sein, da die Glocke etwa 10000 Zeichen lang ist und der Schlüssel nur 11.

Der Angreifer nimmt jetzt diesen Text und klickt auf 'Wiederholungen im Text suchen' kopiert den Code in das linke Memo, klickt auf Start und geht sich einen Kaffee holen. Im Memo ganz rechts wird nun angezeigt, wie oft ein Wiederholung nach einer bestimmten Anzahl von Zeichen ergeben hat. Nach den ersten 1500 Zeichen sieht dass dann so aus:
Code:
Länge 2 --> 688
Länge 22 --> 597
Länge 3 --> 546
Länge 33 --> 487
Länge 4 --> 406
Länge 11 --> 365
Länge 44 --> 351
Länge 5 --> 348
Länge 6 --> 342
Länge 55 --> 308
Länge 7 --> 303
Länge 66 --> 301
Länge 77 --> 249
Länge 8 --> 246
Länge 9 --> 224
Länge 88 --> 216
Länge 99 --> 191 
(...)
Daraus muss man nun die richtige Schlüssellänge raussuchen. Auffallend ist hier, dass neben den kleinen Zahlen alle anderen durch 11 teilbar sind. Somit kann man hier davon ausgehen, dass der Schlüssel 11 Zeichen lang ist. Damit ist die Chiffre eigentlich schon geknackt. Denn jetzt weiss man, dass sich der Schlüssel alle 11 Zeichen wiederholt.
Nimmt man jetzt das 1, 12, 23 usw. Zeichen, weiss man, dass alle mit dem gleichen Buchstaben verschlüsselt wurden und damit die gleiche Buchstabenverteilung wie der gesamtze Text haben. Damit hat man nur noch eine einfache monoalphabetische Chiffre zu knacken. Dafür nimmt man das dritte Formular und gibt unten den verschlüsselten Text ein.
In der mittleren Trackbar stellt man nun die Schlüssellänge auf 11. Der linke Regler bleibt erst mal auf 1.
Drückt man nun den Zeichnen-Button sieht man in Schwarz die Verteilung der Buchstabenmenge bestehend aus dem 1,12.. Buchstaben. Anscheind ist hier das K am häufigsten. Aktiviert man den Schatten sieht man in Rot die Verteilung in der deutschen Sprache. Mit der Trackbar ganz recht kann man nun die schwarzen Balken so, dass sie am Besten mit den Roten in Überdeckung stehen. Über der Trackbar kann man nun den ersten Buchstaben des Codewortes ablesen.
Stellt man den linken Regler nun auf 2 wird die Menge der Buchstaben mit den Nummer 2,13,24,... angezeigt. Gleiches Spiel von vorne usw.
Nach und nach erhält man so den Schlüssel.
Einen einfach Caesar kann man somit natürlich auch knacken, in dem man die Schlüssellänge auf 1 setzt.

Der Code ist sicher nicht optimal was die Laufzeit angeht, wer will kann ihn ja verbessern.
Lizenztechnisch darf jeder mit dem Programm machen, was er will, es soll aber deutlich zu erkennen sein, wer den Code geschrieben hat.

// Neue Version: Problem mit den Trackbars gelöst
// Neue Version: Noch ein kleiner Fehler weniger.

Vielen Dank an alle, die mir bei der Trackbar geholfen haben
Angehängte Dateien
Dateityp: zip vigenere_2_496.zip (277,2 KB, 139x aufgerufen)
Erwarte das Beste und bereite dich auf das Schlimmste vor.
 
Benutzerbild von vlees91
vlees91

 
Turbo Delphi für Win32
 
#2
  Alt 25. Apr 2006, 16:10
Also für Leute die die Vigenere Verschlüsselung noch verwenden ist es sehr gut!
Aber kann es sein, dass dein Programm ineffizient arbeitet? Denn es dauert einige Zeit, bis es fertig ist. Ich kann mich noch erinnern, dass ich vor 4 Jahren soetwas mal in VB gemacht habe (nur die doppelten Vorkommen zählen), und das wesetntlich schneller ging. Leider habe ich das Programm nach einem format nicht mehr (vor der formatierung dachte ich, dass es nicht wert ist gebackeupped zu werden)
sonst ist deine vorgehensweise gut
vlees91
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

 
Delphi 2005 Personal
 
#3
  Alt 25. Apr 2006, 16:14
Hey, endlich jemand, der was dazu sagt.
Ja, der Code soll nur zeigen, wies geht und ist nicht optimiert.
Die Suche nach Mehrfachen ist recht Brute-Force mässig und könnte noch deutlich beschleunigt werden, da bis jetzt z.B. jedes Buchstabentrippel mit jedem anderen verglichen wird, womit der Ausführung natürlich mit steigender Textlänge sehr stark ansteigt.
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

 
Delphi 2005 Personal
 
#4
  Alt 11. Mai 2006, 14:27
Wie siehts aus? Hat noch jemand eine Meinung zu diesem Programm?
  Mit Zitat antworten Zitat
Pump3r

 
Delphi 7 Enterprise
 
#5
  Alt 11. Mai 2006, 15:17
wow, respekt

hmm, kannst du mir sagen, für was der schatten bei deinem FProb ist?
das versteh ich net so ganz


EDIT: Achja und beim ver und entschlüsseln, wenn ich keinen Schlüssel angeb, dann friert das Programm ein, könntest jan och ne überprüfung rein hauen.
Christian Hermann
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

 
Delphi 2005 Personal
 
#6
  Alt 11. Mai 2006, 15:27
In diesem Schritt wird ein Teil des verschlüsselten Textes mit der normalen Buchstabenverteilung verglichen. Das e ist z.B. der häufigste Buchstabe im Deutschen usw.
Wenn man die richtige Schlüssellänge hat, werden jetzt nur noch die Buchstaben aus dem Code angezeigt, die mit dem gleichen Buchstaben verschlüsselt wurden, also so wie in der Caesar-Chiffre. Durch diese Verschiebung wurde an der Wahrscheinlichkeitsverteilung nichts verändert. Wenn z.B. mit einem 'b' verschlüsselt wurde, ist jetzt statt 'e' das 'g' der häufigste Buchstabe.
Der Schatten stellt die normale Verteilung da, so dass man jetzt nur noch beide Grafiken zur Deckung bringen muss, um zu wissen, mit welchem Buchstaben verschlüsselt wurde.
  Mit Zitat antworten Zitat
MyFrag
 
#7
  Alt 24. Mai 2006, 06:36
thx
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz