CCZwei

Aktuelles

Allgemeines

Priv@tes

Unterhaltung

Lallus

Visual Basic

PDA/PPC2002

Navigation

Mischmasch

Chat / Webcam

 

| impressum | feedback | gästebuch | home |  

 

KRYPTOLOGIE

Auf dieser Seite soll es kryptisch hergehen. Die Kryptologie ist eines der spannendsten Themen der Mathematik. Der Einfallsreichtum, mit dem man hier Ideen und Verfahren entwickelt hat, ist immens. Es scheint daher zu den Grundbedürfnissen des Menschen zu gehören, Gedanken und Ideen zu verstecken, so dass nicht jeder mitlesen kann.

Hier beginnen wir mit einem recht einfachen Verfahren und dennoch muss man auf die Lösung erst einmal kommen. In einem normalen Text mit normalen Buchstaben ist eine zusätzliche Botschaft versteckt. Das kann man auf verschiedene Weise machen: wenn man festlegt, dass man den 3., den 11., den 17. usw. Buchstaben meint, so muss man lediglich den Text danach ausrichten.

So ist es bei diesem Beispiel nicht. Hier kann ein beliebiger Text genommen werden, der dann quasi unsichtbar mit einer zusätzlichen Botschaft versehen wird.

Nicht zu viel der vielen Worte - Taten müssen her:
Unter dem Link befindet sich ein Basicprogramm in VB6. Es muss die MSVBVM60.DLL auf dem Rechner installiert sein (entweder im Programmverzeichnis oder im WINDOWS\SYSTEM - Verzeichnis.

Das kleine Programm mit dem verschlüsselten Text laden (30 KB)
Die Runtimebibliothek MSVBVM60.DLL laden (1.4 MB)

Was ist zu tun? Wer herausfindet, welches Wort in dem Text versteckt ist (6 Buchstaben, alle Buchstaben groß geschrieben), der kann dieses Wort in das Codefenster eingeben. Dann werden die Knöpfe verschlüsseln und entschlüsseln aktiv. Man kann dann auch andere Worte zur Verschlüsselung eingeben.

Wer es nicht herausfindet, der muss warten. Irgendwann in den nächsten Tagen gebe ich das Codewort frei und man kann dann mit dem Programm spielen. Vielleicht staunen Sie ja, wie blöd die Lösung letztendlich ist.

___________________________________________

So, es ist so weit. Zwei Leser haben mir die Lösung geschickt und das versteckte Wort gefunden. Es lautet: KRYPTO. Doch wie kommt es zustande?

Ausgenutzt habe ich hier, dass bei im Windowszeichensatz ein zweites Leerzeichen vorhanden ist. Das normale Leerzeichen (Space) hat ja bekanntlich den ASCII-Wert 32. Bei ASCII 160 gibt es ein zweites Leerzeichen, das sich im Aussehen zum ersten nicht unterscheidet.

Will man also geheime Texte in einem harmlos aussehenden Normaltext verstecken, so kann man beide Leerzeichen zur Codierung nutzen. Das erste Zeichen (Chr(32)) ist dann die binäre 0, das zweite Zeichen (Chr(160)) entspricht dann der binären 1. Es könnte natürlich genausogut andersherum sein.

Zur Verdeutlichung habe ich unten einmal den Text aus der Aufgabe in einen Hexeditor eingeladen:

Jetzt kann man den Trick erkennen. In der ersten Reihe erkennen wir, dass das Leerzeichen hinter dem Das einen Hexwert von 20 besitzt. Hex 20 ist 32 dezimal. Hinter dem war entdecken wir ein Leerzeichen mit hex A0 oder dezimal 160. Das entspricht dem zweiten angesprochenen Leerzeichen. Und so geht es jetzt weiter.
Hinter dem heute wieder ein 32 usw. usw.

Alles, was einer binären 0 entspricht ist 32, alles, was einer binären 1 entspricht ist 160.

Natürlich könnte man in der Raffinesse noch weitergehen: das Lösungswort könnte weiter verschlüsselt werden. Das soll aber hier nicht Bestandteil des Rätsels sein.

Es soll hier nur gezeigt werden, dass man in harmlose Texte geheime Botschaften einschmuggeln kann, die ein Unbedarfter nicht als manipulierten Text erkennt.

Andererseits sollte man nicht darauf hoffen, dass niemand diese Verschlüsselungsmethode zurückverfolgen kann. Profis können sehr schnell solche Manipulationen entdecken - wie auch das Beispiel zeigt, dass ich immerhin zwei Lösungen von Lesern erhielt.

Ich nehme an, dass diese Lösungen nicht vom Geheimdienst stammten.

Mit dem Lösungswort KRYPTO können Sie jetzt auch das kleine Basicprogramm beddienen. Gegen Sie dieses Wort in das Codefenster ein und die beiden Knöpfe 'Verschlüsseln' und 'Entschlüsseln' werden aktiv.

Sie können dann auch einen eigenen Text eingeben und ihn mit einem eigenen Codetext verschlüsseln lassen. Aber denken Sie an das Prnzip: Es müssen genügend Leerzeichen vorhanden sein. Es müssen mindestens 8 mal so viele Leerzeichen im Text sein, da jeder Buchstabe des Codewortes 8 Bit hat. Muss auch nicht sein, werden jetzt einige sagen: wenn ich KRYPTO nehme, so sind dies ja nur Grossbuchstaben, die man mit 7 Bit darstellen kann.

Richtig! Gut gespart.

Diese Methode der Verschlüsselungstechnik - auch wenn sie wohl kaum einen praktischen Wert besitzt, gehört zu den sogenannten steganografischen Methoden. Darunter zählt man alle Verfahren, die nach aussen öffentlich zugänglich sind und denen man die Art der Verschlüsselung nicht ansehen kann.

Interessanter wird es dann in den nächsten Etappen: In Bildern und Tönen lassen sich steganografisch relativ grosse Datenmengen verstecken. Es wird dann z.T. auch für den Geheimdienst problematisch, solche Verschlüsselungsmethoden zu erkennen und zu dekodieren.

___________________________________________

Doch bevor wir zu den steganografischen Raffinessen kommen, möchte ich noch ein paar historische Schmankerl erzählen.

Die ersten Steganografen sollen die alten Römer gewesen sein, die sich offenbar vieles ausdachten, um Botschaften in ihrem großen Reich geheim hin und her transportieren zu können.

Wenn man von den verrückten Ideen erfährt, so muß man wirklich davon ausgehen, dass noch mehr Zeit bei den Leuten vorhanden war. Aber kommen wir zu einem Beispiel, das ich frei erfunden habe:

Der römische Kaiser will seinem Statthalter in Colonia agrippina (Köln) mitteilen, dass er 5000 neue Soldaten in den nächsten Monaten bekommt, um den Schutz gegen die Germanen zu perfektionieren. Dieses darf natürlich niemand wissen. Vor allem der Feind sollte nichts mitkriegen.

Was machte man damals? ein Fax schicken? einen Reiter mit einem Brief losjagen? Einem Boten die geheime Botschaft ins Ohr flüstern?

Alles viel zu gefährlich. Dem Reiter hätte man den Brief abnehmen können, den Boten hätte man mit der Folter erpressen können - und das Fax? na ja lach - lach.

Wenn die Story stimmt, so ist man tatsächlich so verfahren: einem Krieger wurden in Rom die Haare abgeschnitten und die geheime Botschaft wurde in die Kopfhaut eintätowiert. Dann ließ man die Haare wieder wachsen - man hatte ja Zeit.

Jetzt konnte der Krieger mit Marschbefehl gen Köln losgeschickt werden. Steganografie pur: jedermann konnte den Krieger betrachten und niemand ahnte etwas von seiner besonderen Verwendung.

In Köln angekommen, konnte man das Geheimnis lüften. Der Kopf wurde kahlrasiert und die Botschaft kam zum Vorschein.

Man kann sich durchaus vorstellen, dass dies eine gangbare Methode war. Zum einen gab es genügend Menschenmaterial, die man für so eine einmalige Aktion benutzen konnte, zum anderen hatte man sehr viel mehr Zeit.

Ob dieser Krieger unter seinem Federbusch eine Tätowierung trug, ist unklar.

___________________________________________

Die klassische Steganografie

Jetzt wollen wir uns den etwas raffinierteren Methoden zuwenden. In einem Bild soll eine geheime Botschaft versteckt werden.Dazu müssen wir ein klein wenig ausholen. Die Botschaft soll am Anfang nur ein Buchstabe sein, um den Überblick zu wahren. Sagen wir, wir wollen ein A verstecken.
Dieser Buchstabe wird natürlich nicht komplett als Form versteckt, sondern wir nehmen das binäre Abbild, das zu einem A gehört. Bekannterweise entspricht es einem ASCII - Wert von 65 und lässt sich binär so darstellen: 0 1 0 0 0 0 0 1

Jetzt müssen wir es schaffen, einzelne Bildpunkte so einzustellen, dass wir später:
a) die Bildpunkte (horizontal und vertikal) wiederfinden.
b) dem Bildpunkt müssen wir den Wert 0 oder 1 entnehmen können.

zu a) ist es relativ einfach eine Lösung zu finden: wir ziehen aus einem Angebot von Punkten die notwendigen (horizontal und vertikal) Pärchen. Natürlich dürfen die Werte nur einmal vorkommen. Dafür wird der Randomizer bemüht. Er zieht zufällig die Wertepärchen. Danach wird auf Einmaligkeit geprüft. Der Randomizer wird am Anfang auf einen bestimmten Wert gestellt, hier auf schluessel

Wer selbst programmiert, der freut sich vielleicht über den Quellcode, der diese Pärchen zieht.

randomize schluessel
anzahl = Len(Text2) * 8
For i = 1 To anzahl
ReDim Preserve hor(i)
ReDim Preserve ver(i)
nochmals:
hor(i) = Int(Rnd * breit)
ver(i) = Int(Rnd * hoch)
For j = 1 To i - 1
If hor(j) = hor(i) And ver(j) = ver(i) Then GoTo nochmals
Next j
List1.AddItem Format(hor(i), "00#") & " " & Format(ver(i), "00#")
Next i

Jetzt existieren zum Verschlüsseln des Buchstabens A 8 Positionspärchen. Etwas komplizierter wird es mit dem Verstecken der Information 0 oder 1. Bei einem monochronem Bild (nur Schwarz-weiss) wäre es nicht möglich, die Information einzubringen, ohne dass ein Betrachter etwas davon mitkriegen würde. Plötzlich wären weiße Punkte dort, die vielleicht eine binäre 1 repräsentieren sollen, wo sie absolut nicht hingehören.

Wir müssen uns andere Bilder nehmen, bei denen die Manipulation nicht auffällt. Das Programm, da anschließend angeboten wird, benötigt sogar eine Einstellung der Grafikkarte auf 32 Bit. Daran denken, wenn Sie das Programm ausprobieren wollen.

Bewegt man sich mit den Bildern in solchen Kategorien, so kann man unglaublich viel fuschen, ohne dass es nach aussen sichtbar wird. Wenn Sie sich ein bisschen in der Farbtheorie auskennen, so können Sie sich dies vor Augen führen: Arbeitet mit den sogenannten RGB (rot-grün-blau) - Werten, so wird die Farbe weiß=RGB(255,255,255) dargestellt.

Es ist für das Auge nicht erkennbar, wenn ich im Rotbereich oder in den anderen Farbbereichen aus der 255 eine 254 mache. Ein Wert RGB=(254,255,255) ist für unser Auge genauso weiß wie der Wert RGB(255,255,255).

Dieses kann man bei der Steganografie nutzen, um die Daten zu verstecken. Folgendes Verfahren wird eingehalten:

Welchen binären Wert will ich verstecken? Eine 1 oder eine 0? Sagen wir eine 1. An der Position wird die Farbe gemessen. Wie sieht der Rotwert aus? Wie sieht das letzte Bit des Rotwerts aus? Ist er 1, so bleibt es so, ist er 0, so wird auf den Rotwert eine 1 addiert. Jetzt ist der rote Positionswert 1 und repräsentiert die geforderte binäre 1.

So geht es weiter mit den binären Nullen und Einsen. Bei dem Programm geht das ruckzuck. Es ist jedoch 240 KByte gross, da ein hochaufgelöstes Bild mit abgespeichert ist.

32 Bit Grafiktiefe einstellen !!!

Das Programm laden (240 KB VB6 - File)

Das Programm ist in VB6 geschrieben und benötigt die Runtimebiliothek MSVBVM60.DLL (1.4 MB). Ladbar unter Visual Basic.

Ich gehe davon aus, dass einige mehr wissen wollen, wie man so etwas programmiert. Deshalb sind hier die wichtigsten Routinen einmal herausgeschrieben:

Zunächst die Routine zum Verschlüsseln.

Private Sub M_Text_verschluesseln_Click()
For i = 1 To Len(Text2)
zeichen = Asc(Mid(Text2, i, 1))

For j = 0 To 7
zaehler = zaehler + 1
farbe = 0
farbe = Picture2.Point(hor(zaehler), ver(zaehler))
rot = (farbe And vbRed)
gruen = (farbe And vbGreen) \ 256
blau = (farbe \ 256) \ 256

Select Case (zeichen And (2 ^ (7 - j)))
Case 0
If (rot And 1) Then rot = rot - 1
Picture2.PSet (hor(zaehler), ver(zaehler)), RGB(rot, gruen, blau)
Case Is <> 0
If (rot And 1) = 0 Then rot = rot + 1
Picture2.PSet (hor(zaehler), ver(zaehler)), RGB(rot, gruen, blau)
End Select

Next j
Next i

End Sub

Und jetzt die Routine zum Entschlüsseln:

Private Sub M_Bild_entschluesseln_Click()
For i = 1 To Len(Text2) * 8
farbe = Picture2.Point(hor(i), ver(i))
rot = (farbe And vbRed)
'gruen = (farbe And vbGreen) \ 256
'blau = (farbe \ 256) \ 256
If (rot And 1) = 1 Then binaer = binaer + "1" Else binaer = binaer + "0"
Next i
For i = 1 To Len(binaer) - 1 Step 8
For j = 0 To 7
If Mid(binaer, i + j, 1) = "1" Then zeichen = zeichen + 2 ^ (7 - j)
Next j
ent = ent + Chr(zeichen): zeichen = 0
Next i
Text3 = ent
End Sub

___________________________________________

Cäsar und seine Offsetmethode

Julius Cäsar war sicherlich ein grosser Feldherr vergangener Tage. Neben seinen militärischen Arbeiten kümmerte er sich auch um andere Dinge, die nur mittelbar mit der Kriegsführung zu tun hatten.

Seine Verschlüsselungsmethode ist bekanntgeworden und sie gilt als eine elementare Methode des Altertums. Heute wäre sie überhaupt nicht mehr zu gebrauchen, da jeder Hacker die Methode in Sekundenschnelle durchschauen würde.

Für die damalige Zeit, in der kaum jemand lesen konnte, mag die einfache Verschlüsselung per Verschieben von Buchstaben absolut sicher gewesen sein.

Das Prinzip ist einfach: man nehme einen Buchstaben, z.B. A. Man zähle 3 Stellen des Alphabets hinzu und man erhält den Buchstaben D. Entsprechend stellt sich ein B als E dar. Bei einem X wären dann Y,A,B an der Reihe.

Offensichtlich war dieses Verschlüsselungssystem so gut, dass die Nachfolger den Offset gar auf 1 verringert haben sollen. Meinte man ein A, so hat man ein B geschrieben usw..

Es ist eigentlich unglaublich, dass man mit solchen Methoden im Altertum noch Erfolg haben konnte. Um einmal das Aussehen so verschlüsselter Texte anzuschauen zu können, ist das untenstehende Programm ladbar.

Das Programm caesar_offset.exe laden (24 KB VB6 - File)

 
   

   © 2003 by Wolfgang Back •  info@wolfgang-back.com