Większość osób zapewne słyszało o utajnianiu danych za pomocą metod kryptograficznych. Mało kto zdaje sobie jednak sprawę z istnienia steganografii – nauki o ukrywaniu informacji.
Steganografia (gr. ukryte pismo) pozwala na zapewnienie bezpieczeństwa danych w sposób odmienny niż szyfrowanie. Twórcy tego typu metod wywnioskowali, że informacji nie trzeba szyfrować, jeśli jest ona… po prostu niewidoczna. Założenie jest ze wszech miar prawidłowe i zwykle dane ukryte za pomocą steganografii są odporne na największą wadę narzędzi kryptograficznych – wzrost mocy obliczeniowej nie wymusza powstawania coraz nowszych algorytmów (chociaż pozwala na ich stosowanie).
Przecież jest kryptografia…
Kryptografia ma zasadniczą wadę – mimo że zaszyfrowane dane mogą być całkowicie bezpieczne, wiadomo, że są one zaszyfrowane (informacje są zwykle przekształcane do charakterystycznych bloków, opatrywane nagłówkami itp.). Nawet wyglądające na zupełnie losowe znaki wzbudzają uwagę, gdyż zwykle nikt nie przesyła takich informacji.
Natomiast metody steganograficzne pozwalają na zamaskowanie danych w taki sposób, by nie budziły one niczyich podejrzeń. Przykładem takiej (choć bardzo prostej i mało skutecznej) metody jest znany wszystkim atrament sympatyczny. Zwykle zamiast tuszu stosuje się sok z cytryny. Napisany tekst po chwili znika, aż do momentu podgrzania kartki – dopiero wtedy staje się ponownie widoczny. \”Zabawa\” taka znana jest wszystkim dzieciom, a w bardziej zaawansowanej wersji – chemikom i tajnym służbom. Różnica polega na tym, że zamiast soku z cytryny stosuje się związki chemiczne, które można zobaczyć dopiero w połączeniu z odpowiednią substancją.
Steganografia zapewnia poufność informacji – jest chroniona przed niepowołanymi osobami (jak się okaże w większym stopniu niż przy zastosowaniu kryptografii), jest też dostępna, nie zapewnia jednak integralności informacji. Dlaczego? Załóżmy hipotetyczną sytuację, w której Alicja chce wysłać tajny list do Boba. Alicja stosuje więc atrament sympatyczny, którym pisze ważne informacje, a na niego nanosi dodatkowo mało znaczący tekst – np. pozdrowienia z wakacji. Ewie, która bardzo interesuje się tajemnicami Alicji, udało się przechwycić list.
Jeśli uda jej się odkryć zastosowaną metodę steganograficzną, nic nie stoi na przeszkodzie, aby sfabrykowała własne informacje i tak zmieniony list wysłała do Boba. Bob nie może mieć żadnej pewności co do autora listu (i zgodnie z zasadami bezpieczeństwa nigdy nie powinien traktować takiej informacji jako prawdziwej). Przy zastosowaniu zaawansowanej kryptografii samo przechwycenie wiadomości zwykle nie daje absolutnie nic. Steganografia może być równie skuteczna – cała sztuka polega na tym, żeby informacje ukryć w sposób niezauważalny dla Ewy.
Jak to się robi?
Zwykle ukrywanie informacji polega znalezieniu odpowiedniego nośnika (zwanego kontenerem), który pozwala na przeniesienie tajnych danych przykrytych publicznymi, nic nieznaczącymi i niebudzącymi podejrzeń \”śmieciami\”. Jako kontenera można użyć długiego tekstu, obrazu, dźwięku czy nawet pakietów przesyłanych siecią.
Oczywiście nie muszą być to nośniki cyfrowe – jako dźwięk możemy rozumieć zarówno plik typu WAV, jak i nadawany sygnał radiowy, a tekst może (czasem musi) być wydrukowany. Informacje zapisane cyfrowo do odtworzenia wymagają tylko odpowiedniego programu, a analogowo (np. nadawany przez radio sygnał) specjalistycznego i bardzo czułego sprzętu. Zanim upowszechniły się komputery, popularną metodą steganograficzną było ukrywanie danych w tekście. Sztuczki tak proste, jak czytanie tylko pierwszej litery w każdym słowie, mimo że zgodne z ideą steganografii, nie okazały się skuteczne – zbyt łatwo było je odnaleźć. Wymyślono więc inny sposób.
Pisząc tekst na maszynie do pisania (lub drukując na drukarce) między wierszami zachowuje się stałą odległość (tzw. interlinię), która zależy m.in. od stopnia pisma. Jeśli chcemy ukryć dane między wierszami, możemy podnieść cały wiersz nieco w górę (i oznaczyć w ten sposób np. jedynkę) lub przesunąć w dół – oznaczając tak zero.
Aby mieć punkt odniesienia, należy zachować co drugą linię na swojej pozycji. W zrozumieniu zasady powinien pomóc rys. 1. W tym przypadku kontenerem jest cały tekst, a dwie linijki przenoszą jeden bit informacji. Możemy więc określić tzw. pojemność kontenera – jest to jeden bit na dwie linijki (zwykle ok. 80 znaków). Jak się za chwilę przekonamy, to bardzo mało.
Metoda najmłodszego bitu
W stosowanych powszechnie nośnikach cyfrowych dane zapisywane są jako ciągi bitów oznaczanych zwykle jako prawda (1) i fałsz (0). Każda informacja, taka jak liczba, obraz, film itp., jest w rzeczywistości ciągiem bitów odpowiednio interpretowanych przez programy (które również są ciągami zer i jedynek). Dane binarne przedstawia się tak samo, jak zapisane liczby dziesiętnie – cyfra po prawej stronie ma najmniejsze znaczenie, a po lewej największe (np. dwójka w liczbie 234 ma dużo większą wagę niż czwórka).
Aby zrozumieć metodę najmłodszego bitu, posłużymy się przykładem. Mając dwa odcinki, jeden o długości jednego metra (100 centymetrów), a drugi jednego metra i jednego centymetra (101 centymetrów), i widząc tylko jeden z nich, trudno gołym okiem stwierdzić, który widzimy. Zamiana mało znaczącej ostatniej cyfry praktycznie nie wpływa na wygląd odcinka, a niesie pewną informację.
Podobnie jest z ukrywaniem informacji w obrazach i dźwięku. Każdy punkt obrazu (lub krótki fragment dźwięku) reprezentowany jest przez liczbę (albo kilka liczb). Jeśli kolor przykładowego punktu określony jest liczbą 24-bitową (czyli z zakresu od 0 do ponad 16 milionów), a wiemy, że punkty podobne do siebie mają podobne wartości, możemy podmienić ostatnią cyfrę na wybraną przez siebie bez zauważalnej zmiany koloru. Wracając do przykładu, taka podmiana polegałaby na określeniu, który odcinek widzimy: mający 160 kilometrów, czy 160 kilometrów i jeden centymetr!
Jak widać, różnica jest minimalna – tak samo jest z kolorem punktu na obrazie. Ludzkie oko jest jednak znacznie mniej dokładne i przy odpowiednim wyborze podmienianych cyfr możemy zmienić aż 7 z 24 bitów opisujących każdy punkt bez widocznej (gołym okiem) zmiany. Taka informacja jest dla nas bardzo cenna – oznacza, że w każdym punkcie obrazu, np. zdjęcia, możemy zmieścić jeden znak (małą lub wielką literę alfabetu łacińskiego, cyfrę, znak interpunkcyjny itp.).
Przy wykorzystaniu plików dźwiękowych algorytm jest taki sam – znaleźć bity, które mają mały wpływ na odtwarzany dźwięk i zastąpić je tajną informacją. Pojemność kontenera wygląda w tym przypadku jeszcze lepiej, gdyż nawet kilkusekundowe pliki dźwiękowe mogą przenosić tysiące znaków tajnej informacji (dokładna ilość zależna jest od próbkowania).
A co z kompresją?
Przedstawione powyżej dane dotyczą plików nieskompresowanych, czyli takich, w których informacje przechowywane są dokładnie tak, jak zostały utworzone. Tak zapisane pliki charakteryzują się dużym rozmiarem, co zwykle jest wadą, dla nas jednak okazuje się niezwykle przydatne. Kompresja polega na usunięciu części informacji, tak aby plik skompresowany nie odbiegał zbytnio od oryginału – zwykle usuwa się informacje najmniej ważne lub niewidoczne dla człowieka… Niestety, te mało ważne informacje to dane, które specjalnie umieściliśmy.
Skompresowanie pliku zawierającego tajne dane bezpowrotnie je usunie – nie pomoże nawet ponowna konwersja do formatu nieskompresowanego (połączona z dekompresją), gdyż dodatkowe informacje zostały już bezpowrotnie utracone. Można oczywiście najpierw skompresować plik, a dopiero potem umieścić w nim tajną informację, jednak rozwiązanie takie jest nieskuteczne – do ukrycia takiej samej informacji potrzeba kilkadziesiąt razy większego pliku skompresowanego (np. w formacie JPEG lub MP3) niż nieskompresowanego (np. BMP lub WAV).
Narzędzia steganograficzne
Ręczna edycja plików graficznych i dźwiękowych w celu wstawienia w nie tajnych informacji byłaby żmudna i mało efektywna. Napisanie programu podmieniającego wskazane bity jest bardzo proste (formaty takie jak bitmapa czy plik WAV są bardzo dobrze opisane i łatwe w edycji), więc powstało wiele narzędzi służących do celów steganograficznych. Jednym z najbardziej popularnych jest rozprowadzany za darmo program S-Tools (można go pobrać ze strony http://spychecker.com).
Dzięki S-Tools w plikach graficznych i dźwiękowych możemy umieszczać dodatkowe informacje dla bezpieczeństwa, szyfrując je jednym z czterech popularnych algorytmów (IDEA, DES, 3DES, MDC). Obsługa programu jest prosta – wystarczy przeciągnąć plik mający służyć jako kontener na okno aplikacji, a następnie na wyświetlony obraz upuścić plik, który ma zostać ukryty. Ciekawą możliwością jest ukrycie pliku zawierającego już utajnione dane. Dodatkowo S-Tools na bieżąco pokazuje, ile jeszcze danych możemy \”upchnąć\” w kontenerze bez widocznych strat jakości. Oczywiście istnieje wiele innych programów o podobnym działaniu, jednak S-Tools jest darmowy, skuteczny i prosty w obsłudze.
Kryptografia a steganografia
Jak widać, użycie metod steganograficznych ma niezaprzeczalne zalety – zapewnienie poufności, niską podatność na rozwój mocy obliczeniowej (trudno sobie wyobrazić, żeby ktoś sprawdzał każdy przesyłany w internecie plik pod względem zawartości ukrytych danych, nie znając nawet algorytmu ich zapisu) oraz łatwość w implementacji.
Niestety, steganografia nie jest w stanie zagwarantować prawdziwości informacji oraz ich bezpieczeństwa w przypadku wykrycia. W tej sytuacji z pomocą przychodzi kryptografia. Dodatkowe zaszyfrowanie informacji (przed ukryciem) pozwala na pozbycie się wspomnianych wad.
Co ciekawe, rozwój techniki tworzy nowe możliwości ukrywania informacji. Jeszcze niedawno nowością było użycie niewykorzystywanych bitów pakietów przesyłanych przez publiczne sieci, a kilka miesięcy temu Polacy wykorzystali telefonię typu VoIP do ukrycia w rozmowie tajnych danych. Jak widać, steganografia nie jest bezpośrednią konkurencją dla kryptografii, ale metody te doskonale się uzupełniają.