Ciekawe czy ktoś to jeszcze pamięta ;) (bo mnie technika deko kurzem zarosła). Dla niewtajemniczonych i tych których szare komórki zawierające informacje na ten temat poumierały z takich czy innych powodów, słów kilka.
Steganografia jest nauką o komunikacji w taki sposób by obecność komunikatu nie mogła zostać wykryta, czyli deko inaczej niż w kryptografii (gdzie fakt zaistnienia informacji jest jawny, ale treść już nie).
Za Wikipedią:
Klasyfikacja systemów steganograficznych:
steganografia czysta (pure steganography) – siła techniki opiera się na nieznajomości metody przez stronę atakującą. Systemy te nie spełniają Zasady Kerckhoffsa dlatego nie są polecane
steganografia z kluczem prywatnym (private key steganography) – metoda jest jawna i powszechnie dostępna, przez rozpoczęciem komunikacji strony uwzględniają klucz steganograficzny wykorzystywany w sposób zależny od metody, istnieje jednek problem przekazania klucza w bezpieczny sposób
steganografia z kluczem publicznym (public key steganography) – podobnie jak w asymetrycznych systemach kryptograficznych używane są dwa klucze – publiczny i prywatny. Klucz publiczny (jawny) wykorzystywany jest przy osadzaniu wiadomości w nośnej, natomiast klucz prywatny przy jej wyodrębnianiu
Metoda modyfikacji najmniej znaczącego bitu:
Modyfikacja najmniej znaczącego bitu jest klasycznym przedstawicielem metod zastępujących. Wykorzystuje nadmiarowość w nośnej. Ostatni bit (np. wartości składowych piksela) zastępowany jest bitem (lub bitami) z wiadomości. Metoda ta daje się zastosować dla plików grafiki rastrowej oraz cyfrowo zapisanego dźwięku. Większość komercyjnego oprogramowania korzysta właśnie z niej (np. CryptArkan). Przy wykorzystaniu tej metody bardzo łatwo jest wykryć obecność komunikatu. Proste jest także zniszczenie zapisanego komunikatu (wystarczy np. wyzerować najmniej znaczące bity).
O tej ostatniej w ujęciu PHP
W prosty sposób można wykorzystać modyfikację najmniej znaczącego bitu w PHP ot tak dla zabawy.
Zapisujemy dane do otwaretgo wcześniej pliku graficznego:
{
$bits=$this->_asc2bin($data);
$lenbit=strlen($bits);
$nx=imagesx($this->img_object);
$ny=imagesy($this->img_object);
for($x=0,$bit=0; $x<$nx; $x++)
{
for($y=0; $y<$ny; $y++)
{
$pix=$this->_getcolor($this->img_object,$x,$y);
foreach(array('R','G','B') as $C)
$col[$C]=$bit<$lenbit?($pix[$C]|$bits[$bit])&(254|$bits[$bit++]):$pix[$C];
imagesetpixel($this->img_object,$x,$y,$this->_setcolor($this->img_object,$col['R'],$col['G'],$col['B']));
}
}
imagepng($this->img_object,$this->img_path);
}
A jak chcemy odczytać zapisane dane możemy zrobić tak:
Powyższe odświerzyło mi moją pamięć i odkurzyło stare rozwiązania tworzone jeszcze na gentoo. Wtedy człowiek miał wiecej czasu na tzw. „pierdoły”.
Zainteresowanych tematem i samą klasą PHP odsyłam do PHPClasses: