Steganografie

Ich versuche gerade mehr über Steganografie herauszufinden, um selber ein kleines Programm zu schreiben.
Ich find aber nicht die passenden Information, wie das funktioniert. Ich weiß, dass ich den Text in bytes umwandeln muss und dann an bestimmte Stellen im Bild.
Aber an was für welche.
Und wie kommt man von dem Bild mit der Nachricht an die Nachricht selber.
Ich muss ja wissen was an welcher Stelle steht.
Für Tipps wär ich dankbar.

Gruß
schmitti81
 
Du must dich im Format der Zieldatei auskennen, sofern du möchtest dass die eigentliche Datei immer noch brauchbar ist. Du kannst natürlich nicht irgendwo ein paar bytes mehr hineinschreiben. Must also herausfinden, an welchen Stellen deine Zusätzlichen Bytes verträglich sind.

Und dein Programm sollte die ganzen Informationen nach einer Logik in der Datei ablegen, so dass man im nachhinein das ganze auch wieder auslesen kann.
 
naja, ohne mich damit schon groß beschäftigt zu haben würde ich sagen, es gibt einige varianten.

die einfachste ist, die daten an ganz bestimmten stellen abzulegen. damit weißt du dann auch beim wiederherstellen der daten, wo du genau gucken musst.

etwas schwieriger aber sicherer wird das ganze dann, wenn du einen schlüssel verwendest. damit könntest du dann halt die stellen berechnen, an denen du die daten suchen musst.

wikipedia erklärt das ganze noch ein wenig mehr (wenn auch trotzdem sehr oberflächlich), aber das könnte dir noch gute hinweise geben.
 
Man könnte das Ganze doch einfach so machen:
Ein Farbwert, der binär auf 0 endet, steht für eine 0, die anderen für eine 1.
Die Farbwerte kann man dann entsprechend der Eingabedatei anpassen und schon enthält das Bild die versteckte Nachricht.
Wenn man will, kann man die Nachricht natürlich vorher komprimieren und verschlüsseln. Man könnte das Ganze auch so variieren, dass man immer den N-ten wert oder so überspringt (weniger Speicherkapazität, bessere Sicherheit) oder die letzen beiden Bytes nimmt (mehr Speicherkapazität, aber auffälliger).
 
Original von Eydeet
Man könnte das Ganze doch einfach so machen:
Ein Farbwert, der binär auf 0 endet, steht für eine 0, die anderen für eine 1.
Die Farbwerte kann man dann entsprechend der Eingabedatei anpassen und schon enthält das Bild die versteckte Nachricht.
Wenn man will, kann man die Nachricht natürlich vorher komprimieren und verschlüsseln. Man könnte das Ganze auch so variieren, dass man immer den N-ten wert oder so überspringt (weniger Speicherkapazität, bessere Sicherheit) oder die letzen beiden Bytes nimmt (mehr Speicherkapazität, aber auffälliger).
Da sieht man aber von blossem Auge, dass das Bild getürkt ist, oder meinst du nicht? Zumal man auch die kompression des Bildes (wenn es nicht gerade ein bmp ist) verstehen muss, um da was an den Farbwerten zu schrauben. Wenn man da gedankenlos auchnur ein Byte falsch verstellt, gibt das sehr lustige ergebnisse. Z.b. ist dann das halbe Bild in einem Pinkton.
 
Also das verwendete Format sollte erstmal auf jeden Fall .bmp sein.
Ich versteh einfach nicht ganz woher ich weiß wohin die Daten geschrieben werden. Also wo die dann stehen, um es auch wieder auslesen zu können.
Hat noch jemand ne Idee oder schon mal was damit gemacht?
Danke.

Gruß
schmitti81
 
Hallo,
es gibt da verschiedene Varianten.
Du könntest z.B. 1 Byte auf 32 Byte verteilen, d.h. jedes 4 Byte der Zieldatei enthält 1 Bit des Quellbytes.
Dafür kann man Beispielhaft das niederwertigste Bit des Ziels verwenden, sprich du hast da 32 Byte und in jedem 4 Byte steht im niederwertigsten Bit ein Bit des Quellbytes.

Dies kann man natürlich unendlich weit verfeinern, für den Anfang aber ganz leicht zu programmieren.
Einfahc Zieldatei durchlaufen, und jedes 4 Byte OR-Verknüpfen mit dem niederwertigsten Bit der Quelle.

Pseudocode:
Code:
Sei s Array welches die _Bits_ der Quelle enthält.
Sei d Byte-Array des Ziel:
for(i=0,j=0;i<d.length;i+=4,j++)
  d[i] = d[i] & s[j];
Fertig.
 
@Schmitti81
Genau das ist der Sinn der Sache, du legst das verstecken fast willkuerlich fest,
und nur ein eingeweihter kann das ohne groesseren Aufwand lesen.
Das fast willkuerlich bezieht sich auf sachen welche du nicht machen darfst,
als da waeren:
Die Dateiheader veraendern, oder z.b.die veraenderungen zu dicht beieinander zu packen, wie z.b. jeder 2 bit veraendern oder so...
mfg

sw33t
 
Original von IsNull
Da sieht man aber von blossem Auge, dass das Bild getürkt ist, oder meinst du nicht? Zumal man auch die kompression des Bildes (wenn es nicht gerade ein bmp ist) verstehen muss, um da was an den Farbwerten zu schrauben. Wenn man da gedankenlos auchnur ein Byte falsch verstellt, gibt das sehr lustige ergebnisse. Z.b. ist dann das halbe Bild in einem Pinkton.
Natürlich darf das Bild bei dem Verfahren nicht komprimiert sein. Ich hab mir das auch nicht so vorgestellt, dass man wild im Header herumeditiert, sondern ungefähr so:
Code:
Verschlüsselt wird: 010
Vorher:  Pixel 1: 255 0 0 (Rot)
Nachher: Pixel 1: 254 1 0 (Auch rot)
Dass man das mit bloßem Auge sieht, glaube ich nicht, außer vielleicht bei großen einfarbigen Flächen. Bei Fotos hat man da, denke ich, keine Chance. Die "rauschen" meist sowieso.
Ob das Ganze so wirklich funktioniert, weiß ich nicht, aber das wäre wahrscheinlich der einfachste Weg :)
 
Dass man das mit bloßem Auge sieht, glaube ich nicht, außer vielleicht bei großen einfarbigen Flächen. Bei Fotos hat man da, denke ich, keine Chance. Die "rauschen" meist sowieso.
Wie gesagt, ich habe damit schon herumgespielt (jpg) und da hat es gereicht 2-3Bytes willkürlich zu überschreiben (Hexeditor) und das halbe Bild war Pink. :) Genauso habe ich schon bis zu 20 Bytes verändert ohne wirklich viel zu sehen...
 
Wenn man sowas professionell machen will, muss man sich auch damit auskennen, wie Menschen Bilder wahrnehmen. Ich habe mal aus Spaß eine Datei in ein komplett schwarzes Bild versteckt. Mit bloßem Auge konnte ich kein Unterschied feststellen. Als ich die Farben umkehrte, fielen mir blaue und pinke Flecken am unteren Rand auf. Es ist sehr interessant, was für Wissen in Steganographie steckt. Um so schwieriger ist es.
 
Zurück
Oben