Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Kryptoanalyse - Mustersuche (Patternsearch) Program zur Entschlüsselung von monoalphabetisch Substituiertem Text

Mitglied: lowbyte1

lowbyte1 (Level 2) - Jetzt verbinden

24.02.2010, aktualisiert 24.08.2010, 11441 Aufrufe, 1 Kommentar, 3 Danke

XOR-BASE
http://vpn23.homelinux.org

Musteranalyse Programm Mustersuche.c v.1.0.4 beta


Als Mustersuche wird in der Kryptologie eine klassische Methode zur Entzifferung von Geheimtexten bezeichnet. Sie wird auch „Methode des Wahrscheinlichen Wortes“ genannt. Die Mustersuche wird zum brechen von monoalphabetischem Substituiertem Text verwendet. Sie ist auch dan noch effizient wen die Häufigkeitsanalyse nicht mehr funktioniert, aufgrund zu kurzer länge des Textes.
Dabei weiß, vermutet oder errät der Codeknacker, dass im zu entziffernden Geheimtext eine bestimmte Phrase (Crib) auftritt. Gelingt es, die genaue Lage (Position) dieser Phrase im Text zu ermitteln, dann ist bei einigen Verschlüsselungsverfahren ein Einbruch erzielt, der häufig ausreicht, um die Verschlüsselung vollständig zu brechen.




Mein Program ist in C geschrieben, und wurde mit einem VC++08 Compiler getestet.



Ein kleines Example:

Plaintext : "DIE MONOALPHABETISCHE SUBSTITUTION IST SEHR UNSICHER UND KANN MIT DER MUSTERSUCHE GEKNACKT WERDEN"

Key : "XWYZVUTLSMRQPONGHKJIFEDCAB"

Cyphertext : "ZSV PNONXQGLXWVISJYLV JFWJISIFISNO SJI JVLK FOJSYLVK FOZ RXOO PSI ZVK PFJIVKJFYLV TVROXYRI DVKZVO"



Program Ablauf :

01.
- Pattern search - Crypto breaking system - v.1.0.1 
02.
 
03.
 
04.
Filename of plaintext :test.txt 
05.
 
06.
 
07.
Ciphertext : 
08.
 
09.
ZSV PNONXQGLXWVISJYLV JFWJISIFISNO SJI JVLK FOJSYLVK FOZ RXOO PSI ZVK PFJIVKJFYLV TVROXYRI DVKZVO 
10.
 
11.
 
12.
 
13.
Input "crib" max 20 byte :SUBSTITUTION 
14.
 
15.
 
16.
Crib pattern :1,2,3,1,4,5,4,2,4,5,6,7, 
17.
 
18.
 
19.
 
20.
Total gibt es 86 Muster f³r den Text 
21.
 
22.
 
23.
01. 1,2,3,4,5,6,7,6,8,9,10,11, 
24.
02. 1,2,3,4,5,6,5,7,8,9,10,7, 
25.
03. 1,2,3,4,5,4,6,7,8,9,6,10, 
26.
04. 1,2,3,4,3,5,6,7,8,5,9,10, 
27.
05. 1,2,3,2,4,5,6,7,4,8,9,10, 
28.
86. ..... 
29.
 
30.
Muster / Crib gefunden bei Position -> 23 
31.
 
32.
 
33.
 
34.
Crib bei Textposition ersetzen ? <y/n> :y 
35.
 
36.
 
37.
Text anzeigen ? <y/n> :y 
38.
 
39.
 
40.
ZSV PNONXQGLXWVISJYLV SUBSTITUTION SJI JVLK FOJSYLVK FOZ RXOO PSI ZVK PFJIVKJFYLV TVROXYRI DVKZVO 
41.
 
42.
 
43.
 
44.
Text wiederherstellen ? <y/n> :n 
45.
 
46.
 
47.
Equ Zeichen ersetzen ? <y/n>:y 
48.
 
49.
 
50.
Text anzeigen ? <y/n> :y 
51.
 
52.
 
53.
ZIV PONOXQGLXBVTISYLV SUBSTITUTION IST SVLK UNSIYLVK UNZ RXNN PIT ZVK PUSTVKSUYLV TVRNXYRT DVKZVN 
54.
 
55.
 
56.
 
57.
Analyse dieses crib abbrechen <y> ? / Weitere Positionen im Text, auf crib-muster pr³fen <w> ? : 
58.
 
Danach kann mit weiteren "Crib" probiert werden bis schlussendlich der Klartext ersichtlich ist.

Source code :

01.
//========================================================================= 
02.
// 
03.
// File    : muster_suche.c Crypto-analyse (pattern search) v.1.0.4 
04.
// 
05.
// Author  : Lowbyte 
06.
//                            
07.
// Create  : 22.02.2009, 03:27,  Long****** 
08.
// 
09.
// Last Up : 26.02.2009, 05:01,  Long****** 
10.
// 
11.
// Prog.L  : C 
12.
// 
13.
// Project : 0004K 
14.
// 
15.
//========================================================================= 
16.
 
17.
#include <stdio.h> 
18.
#include <stdlib.h> 
19.
#include <string.h> 
20.
 
21.
int make_sig_of_crib(unsigned char *crib_buf); 
22.
int make_sig_of_ptext(unsigned char *filename ,int flen ,int criblen); 
23.
int char_exchange(unsigned char *ptext ,unsigned char *orgptext ,unsigned char *crib ,int cribpos); 
24.
int savepos(int pos ,int len); 
25.
 
26.
/* Muster struktur */ 
27.
typedef struct { 
28.
 
29.
	unsigned char ptext_pattern[10000][20]; 
30.
	unsigned char crib_pattern[20]; 
31.
 
32.
} Pattern; 
33.
 
34.
/* Positionen schützen */ 
35.
typedef struct { 
36.
 
37.
	int stack[10000]; 
38.
	int count; 
39.
 
40.
} ProtectedField; 
41.
 
42.
 
43.
Pattern ctx; 
44.
ProtectedField pfctx = {0,0}; 
45.
 
46.
int main() 
47.
48.
	FILE *file; // Filepointer 
49.
	unsigned char *p ,*orgp; // Heap 
50.
	unsigned char filename[100]; // Filename 
51.
	unsigned char crib[22]; // Crib 
52.
	char yn[3]; 
53.
	int x=0 ,rc=0 ,clen=0 ,flen=0 ,flag=0 ,choice=0 ,i=0; 
54.
	errno_t er; 
55.
 
56.
 
57.
	printf_s("- Pattern search - Crypto breaking system - v.1.0.1\n\n"); 
58.
 
59.
 
60.
	/* Input filename */ 
61.
	printf_s("\nFilename of plaintext :"); 
62.
	fgets(&filename[0] ,100 ,stdin); 
63.
	filename[strlen(filename)-1]='\0'; 
64.
 
65.
	/* File öffnen */ 
66.
	er = fopen_s(&file ,filename ,"r+b"); 
67.
	if(er != 0){ 
68.
		printf_s("\nDateikonnte nicht geöffnet werden\n"); 
69.
		getchar(); 
70.
		return 1; 
71.
72.
	/* Grösse des text in byte ermitteln */ 
73.
	fseek(file, 0L, SEEK_END); 
74.
	flen = ftell(file); 
75.
 
76.
	/* Zeiger auf anfang der Datei */ 
77.
	rewind(file); 
78.
 
79.
	/* Nötiger Speicher vom Heap reservieren */ 
80.
	p = (unsigned char *)malloc((2+flen) * sizeof(unsigned char)); 
81.
	if(p == NULL) { 
82.
		printf_s("\n\nMemory allocation failure\n\n"); 
83.
		getchar(); 
84.
		exit(1); 
85.
86.
 
87.
	/* Text einlesen */ 
88.
	fgets(p ,flen+2, file); 
89.
	p[flen]='\0'; 
90.
 
91.
        /* File schliessen */ 
92.
        fclose(file); 
93.
 
94.
	/* Text anzeigen */ 
95.
	printf_s("\n\nCiphertext :\n\n%s\n\n", p); 
96.
 
97.
	do 
98.
99.
 
100.
		/* Input scrib max 20 byte & crib <= ptextlen*/ 
101.
		printf_s("\n\nInput \"crib\" max 20 byte :"); 
102.
		fflush(stdin); 
103.
		fgets(&crib[0] ,22 ,stdin); 
104.
		crib[strlen(crib)-1]='\0'; 
105.
 
106.
		/* Signatur des crib erstellen */ 
107.
		make_sig_of_crib(crib); 
108.
 
109.
		/* Signatur des textes berechnen */ 
110.
		make_sig_of_ptext(p ,flen ,(int)strlen(crib)); 
111.
 
112.
		/* Signaturen vergleichen */ 
113.
		for(x=0;x<((flen-(int)strlen(crib))+1);x++) { 
114.
 
115.
			if( memcmp( &ctx.crib_pattern[0] ,&ctx.ptext_pattern[x][0] ,strlen(crib) ) == 0){ 
116.
 
117.
				/* Flag setzen (Muster gefunden) */ 
118.
				flag=1; 
119.
				/* Muster gefunden */ 
120.
				printf_s("\n\nMuster / Crib gefunden bei Position -> %i \n\n",x+1); 
121.
 
122.
				/* pText zwischen speichern */ 
123.
				/* Nötiger Speicher vom Heap reservieren */ 
124.
				orgp = (unsigned char *) malloc((2+flen) * sizeof(unsigned char)); 
125.
				if(orgp == NULL) { 
126.
					printf("\nMemory allocation failure !\n\n"); 
127.
					getchar(); 
128.
					exit(1); 
129.
130.
				memcpy(orgp ,p ,flen); 
131.
				orgp[flen]='\0'; 
132.
 
133.
				/* Crib mit textposition ersetzen */ 
134.
				fflush(stdin); 
135.
				printf_s("\n\nCrib bei Textposition ersetzen \? <y/n> :"); 
136.
				fgets(yn ,2 ,stdin); 
137.
 
138.
				if(yn[0] == 'y') { 
139.
 
140.
					/* crib ersetzen */ 
141.
					memcpy(&p[x] ,&crib[0] ,strlen(crib)); 
142.
 
143.
					/* Text anzeigen */ 
144.
					fflush(stdin); 
145.
					printf_s("\n\nText anzeigen ? <y/n> :"); 
146.
					fgets(yn ,2 ,stdin); 
147.
					if(yn[0] == 'y') { 
148.
						printf_s("\n\n%s\n\n",p); 
149.
150.
 
151.
					/* Text recovery */ 
152.
					fflush(stdin); 
153.
					printf_s("\n\nText wiederherstellen ? <y/n> :"); 
154.
					fgets(yn ,2 ,stdin); 
155.
					if(yn[0] == 'y') { 
156.
 
157.
						/* Wiederherstellen */ 
158.
						memcpy(&p[0] ,&orgp[0] ,flen); 
159.
						orgp[flen]='\0'; 
160.
 
161.
					} else { 
162.
 
163.
						/* Position des crib speichern / gegen ersetzung schützen */ 
164.
						savepos( x ,(int)strlen(crib)); 
165.
 
166.
						/* Equalente Zeichen vom Crib und des Textes ersetzen */ 
167.
						fflush(stdin); 
168.
						printf_s("\n\nEqu Zeichen ersetzen ? <y/n>:"); 
169.
						fgets(yn ,2 ,stdin); 
170.
						if(yn[0] == 'y') { 
171.
							char_exchange(p ,orgp ,crib ,x); 
172.
173.
 
174.
175.
 
176.
					/* Speicher bereich freigeben */ 
177.
					free(orgp); 
178.
					 
179.
 
180.
					/* Text anzeigen */ 
181.
					fflush(stdin); 
182.
					printf_s("\n\nText anzeigen ? <y/n> :"); 
183.
					fgets(yn ,2 ,stdin); 
184.
					if(yn[0] == 'y') { 
185.
						printf_s("\n\n%s\n\n",p); 
186.
187.
 
188.
				} /* cmp end */ 
189.
 
190.
 
191.
				/* Analyse vorzeitig abbrechen und neuer crib testen ? y\n? */ 
192.
				fflush(stdin); 
193.
				printf_s("\n\nAnalyse dieses crib abbrechen <y> ? / Weitere Positionen im Text, auf crib-muster prüfen <w> ? :"); 
194.
				fgets(yn ,2 ,stdin); 
195.
				if(yn[0] == 'y') 
196.
					break;	/* Aus schleife springen */ 
197.
 
198.
199.
 
200.
			if(yn[0] == 'y') 
201.
				break;	/* Aus schleife springen */ 
202.
 
203.
204.
 
205.
		if(flag == 0) { 
206.
			/* Keine Muster gefunden */ 
207.
			printf("\n\nEs wurden keine Muster gefunden !\n\n"); 
208.
209.
		/* Flag zurücksetzen */ 
210.
		flag = 0; 
211.
 
212.
		/* Analyse vollstaendig abbrechen \\ neuer crib testen y\n? */ 
213.
		fflush(stdin); 
214.
		printf_s("\n\nAnalyse vollstaendig abbrechen <y> ? / Neuer crib testen <n> ? :"); 
215.
		fgets(yn ,2 ,stdin); 
216.
		if(yn[0] == 'y') { 
217.
			choice=0; 
218.
		} else { 
219.
			choice=1; 
220.
221.
 
222.
223.
	while(choice != 0 ); 
224.
 
225.
 
226.
	free(p); 
227.
	getchar(); 
228.
 
229.
	return 0; 
230.
231.
 
232.
 
233.
/* Muster des crib erstellen */ 
234.
 
235.
int make_sig_of_crib(unsigned char *crib_buf) 
236.
237.
 
238.
	int i, c; 
239.
	int counter=1 ,slen=0; 
240.
 
241.
	/* set var to zero */ 
242.
	memset(ctx.crib_pattern ,0 ,21); 
243.
 
244.
	slen = (int)strlen(crib_buf); 
245.
 
246.
	for(i=0 ; i<slen ; i++) { 
247.
		if(i==0){ 
248.
			ctx.crib_pattern[i] = 1; 
249.
		} else { 
250.
			for(c=0 ; c<slen && c<i ; c++) { 
251.
				if(crib_buf[i] == crib_buf[c]) { 
252.
					ctx.crib_pattern[i] = ctx.crib_pattern[c]; 
253.
254.
255.
 
256.
			if(ctx.crib_pattern[i] == 0) { 
257.
				ctx.crib_pattern[i] = ++counter; 
258.
259.
260.
 
261.
262.
 
263.
	printf_s("\n\nCrib pattern :"); 
264.
	for(i=0;i<slen;i++){ 
265.
		printf_s("%i,",ctx.crib_pattern[i]); 
266.
267.
 
268.
	getchar(); 
269.
 
270.
	return 0; 
271.
 
272.
273.
 
274.
 
275.
 
276.
/* Signatur / Muster des verschlüsselten Text erstellen */ 
277.
 
278.
int make_sig_of_ptext(unsigned char *p ,int flen ,int criblen) 
279.
280.
 
281.
	int counter=1; 
282.
	int i ,c ,s ,range; 
283.
 
284.
 
285.
 
286.
	/* Initialisiere struct var */ 
287.
	for(i=0;i<flen;i++) { 
288.
		memset(&ctx.ptext_pattern[i][0] ,0 ,21); 
289.
290.
 
291.
	/* Text range berechnen */ 
292.
	range = ((flen-criblen)+1); 
293.
 
294.
	/* Alle Muster berechnen und in struktur speichern */ 
295.
	for(s=0;s<range;s++) { 
296.
 
297.
		for(i=0 ; i<criblen ; i++) { 
298.
			if(i==0){ 
299.
				ctx.ptext_pattern[s][i] = 1; 
300.
			} else { 
301.
 
302.
				for(c=0 ; c<criblen && c<i ; c++) { 
303.
					if(p[i+s] == p[c+s]) { 
304.
						ctx.ptext_pattern[s][i] = ctx.ptext_pattern[s][c]; 
305.
306.
307.
				if(ctx.ptext_pattern[s][i] == 0) { 
308.
					ctx.ptext_pattern[s][i] = ++counter; 
309.
310.
311.
 
312.
313.
 
314.
		counter = 1; 
315.
 
316.
317.
 
318.
	printf_s("\n\n\nTotal gibt es %i Muster für den Text\n\n",range); 
319.
	for(c=0;c<range && c<5;c++) { 
320.
		printf_s("\n%.2i. ",c+1); 
321.
		for(s=0;s<criblen;s++){ 
322.
			printf("%i,",ctx.ptext_pattern[c][s]); 
323.
324.
325.
	if(range>5) { 
326.
		printf_s("\n%.2i. .....",range); 
327.
328.
 
329.
	return 0; 
330.
331.
 
332.
 
333.
/* Buchstaben austausch funktion */ 
334.
 
335.
int char_exchange(unsigned char *ptext ,unsigned char *orgptext ,unsigned char *crib ,int cribpos) 
336.
337.
 
338.
	int i ,x ,y ,flag=0; 
339.
	int criblen ,ptextlen; 
340.
 
341.
	ptextlen = (int)strlen(ptext); 
342.
	criblen = (int)strlen(crib); 
343.
 
344.
	for(i=0;i<criblen;i++) { 
345.
 
346.
		for(x=0;x<ptextlen;x++) { 
347.
 
348.
			if( orgptext[cribpos+i] == orgptext[x] ) { 
349.
				for(y=0;y<pfctx.count;y++) { 
350.
					if(pfctx.stack[y] == x) { 
351.
						flag = 1; 
352.
353.
354.
				if(flag == 0) { 
355.
					ptext[x]= crib[i]; 
356.
					/* Position schützen */ 
357.
					savepos( x ,1); 
358.
359.
				flag = 0; 
360.
361.
 
362.
363.
364.
 
365.
	return 0; 
366.
 
367.
368.
 
369.
 
370.
/* Positions schutz funktion */ 
371.
int savepos(int pos ,int len) 
372.
373.
	int i; 
374.
 
375.
	for(i=0;i<len;i++) { 
376.
		pfctx.stack[pfctx.count + i] = pos+i; 
377.
378.
 
379.
	pfctx.count += len; 
380.
 
381.
	return 0; 
382.
 
383.
}

lowbyte
Mitglied: lowbyte1
25.02.2010 um 02:13 Uhr
Hi crypto freaks

Das Program hat noch Beta status und wird erweitert.

v.1.0.1 ersetzt
v.1.0.2 ersetzt
v.1.0.3 ersetzt
Aktuelle Version v.1.0.4



lowbyte
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Powershell - Text-to-Speech (Text zu Sprache)

Tipp von colinardoBatch & Shell3 Kommentare

Für alle die in Powershell ein Text-To-Speech benötigen, hier ein Code-Beispiel wie dies damit realisiert werden kann: Beispiel mit ...

Administrator.de Feedback

Entwicklertagebuch: Zitate, Text- und Codeblöcke

Information von admtechAdministrator.de Feedback8 Kommentare

Hi, heute habe ich ein paar sehr, sehr alte Fehler auf Administrator.de behoben. Sie stammen noch aus den Anfangszeiten ...

Microsoft Office

Text in Zahlen umwandeln

Tipp von logischeMicrosoft Office

Beim Import von Daten aus anderen Anwendungen kommt es häufig vor, dass Zahlen als Textwerte in der Excel-Tabelle erscheinen. ...

Outlook & Mail

Outlook 2007-2013 Anfälligkeit bei eintreffenden Plain-Text-Mails mit XML !ENTITY Inhalt

Information von colinardoOutlook & Mail

Die o.a. Outlook-Versionen sind von einem Bug betroffen wenn eine Mail z.B. folgenden Plain-Text Inhalt hat: Auch bekannt als ...

Neue Wissensbeiträge
Windows 10
Zero-Day-Lücke in Microsoft Edge
Information von kgborn vor 2 TagenWindows 10

In Microsofts Edge-Browser klafft wohl eine nicht geschlossene (0-Day) Sicherheitslücke im Just In Time Compiler (JIT Compiler) für Javascript. ...

Sicherheit
Microsoft und Skype: Sicherheit
Information von kgborn vor 2 TagenSicherheit

Die Tage gab es ja einige Berichte zur Sicherheit des Skype-Updaters. Der Updater von Skype läuft unter dem Konto ...

Datenschutz

Behörden ignorieren Sicherheitsbedenken gegenüber Windows 10

Information von Penny.Cilin vor 3 TagenDatenschutz8 Kommentare

Hallo, passend zum Thema Ablösung LIMUX in München ein interessanter Beitrag dazu: Behörden ignorieren Sicherheitsbedenken gegenüber Windows 10 Anscheinend ...

Sicherheit
Information Security Hub Munich airport
Information von brammer vor 3 TagenSicherheit

Hallo, Neues Center für Cyber Kriminalität am Münchener Flughafen brammer

Heiß diskutierte Inhalte
Windows 10
Windows 10 (1709) Tastur und Maus wieder einschalten?
Frage von LochkartenstanzerWindows 1016 Kommentare

Moin, Ich habe von einem Kunden einen Win10-Rechner bekommen, bei dem weder Tastatur noch Maus geht. Die Hardware funktioniert ...

Humor (lol)
Was könnte man mit einem Server machen? Idee gesucht
Frage von 2SeitenHumor (lol)12 Kommentare

Hey Zusammen Ich habe einen alten HP G2 Rackserver zu Hause rumliegen. 28GB Ram, 1xAMD Prozi mit etwa 2GHz. ...

Server-Hardware
Server für Exchange 2016, Kaufberatung
Frage von MazenauerServer-Hardware10 Kommentare

Guten Tag werte Gemeinde, Vorab: Ich dachte es gab mal einen separaten Bereich für solche Anfragen, habe ich leider ...

Firewall
RB2011 Firewall Rule eine bestimmte Mac oder IP Adresse nicht zu blockieren
Frage von lightmanFirewall10 Kommentare

Hallo liebes Forum mit ihren Spezialisten. Ich habe meine Firewall so konfiguriert das kein Endgerät ohne meine Speziellen Erlaubnis ...