Zobaczyć niewidzialne Ukryty świat steganografii

Piotr Listosz
plistosz@nafta.net.pl

Wojna informacyjna to termin, który po ataku
terrorystycznym na budynki World Trade Center nabrał całkiem realnych kształtów.
Eksperci od spraw bezpieczeństwa musieli zadać sobie pytanie, w jaki sposób
Al-Qaeda zdołała przez kilka lat ukrywać fakt przygotowywania zamachu? Jak
grupie fanatyków udało się ominąć systemy zabezpieczeń największego
mocarstwa na świecie? W wojnie informacyjnej – tak jak i w każdej innej
– szyfrowanie i przekazywanie informacji odgrywa zasadniczą rolę. Fakt
korzystania z komputerów czyni tę informację trudniejszą do rozszyfrowania,
a powszechny chaos jaki panuje w Internecie – łatwiejszą do ukrycia. Setki
tysięcy witryn, często zmieniające się adresy, strony bezustannie pojawiające
się i znikające. Wydawać by się mogło, że w tym gąszczu przemycić nawet
niezaszyfrowaną informację jest całkiem nietrudno. Jednak z drugiej strony
istnieją systemy (takie jak słynny już Echelon), mające za zadanie
wyszukiwanie w Sieci podejrzanych treści, przy pomocy których mogliby
kontaktować się terroryści. Z tego powodu Ci ostatni muszą uciekać się do
metod ukrywania informacji w sposób wiarygodnie zaprzeczający ich istnieniu.
Jedną z takich metod jest steganografia.

Metoda stara jak świat

Wywodzące się z greki słowo „steganografia” można
przetłumaczyć jako „ukryty zapis”. Jest to metoda ochrony
informacji, polegająca na ukrywaniu jej w tle innej, mało istotnej informacji.
Rolę tej drugiej mogą pełnić pliki graficzne, dźwiękowe, pliki binarne, a
także zwykłe wiadomości tekstowe. Słowo „pliki” mogłoby
sugerować, że steganografia pojawiła się wraz z rozwojem technik
komputerowych. Nie jest to prawdą. Mimo iż metoda ta dzięki komputerom została
bardzo upowszechniona i udoskonalona, to jej początki przypadają na V wiek
przed naszą erą, kiedy to grecki historyk Herodot odnotował skuteczne ukrycie
informacji, w sposób zaprzeczający jej istnieniu (wykorzystano do tego tatuaż
wykonany na ogolonej na łyso głowie niewolnika; po odrośnięciu włosów
informacja stała się niewidoczna). Wiele technik steganograficznych rozwinęło
się i upowszechniło podczas II Wojny Światowej. Stosowanie atramentu
sympatycznego, przesyłanie listów w których treści ukrywane były ważne
informacje, czy posługiwanie się mikrokropkami (wynaleziona przez Niemców
metoda zmniejszania zdjęć do niewiarygodnie małych rozmiarów i wstawiania
ich do maszynopisów zamiast kropek), to tylko niektóre z nich.

Dzisiejsza steganografia wykorzystuje do przesłania
informacji publiczne, ogólnodostępne media, takie jak radio, telewizja, czy
Internet. Publikowane przez katarską telewizję wypowiedzi przywódcy terrorystów
Bin Ladena, stanowiły nie lada zagadkę dla amerykańskich służb specjalnych.
Zastanawiano się, czy jest to zwykły przekaz telewizyjny, czy jedynie nośnik
ukrytej informacji. Jeszcze przed zamachami na WTC podejrzewano, że Al-Qaeda
posługuje się technikami steganograficznymi, wykorzystując w tym celu
powszechne w Internecie zdjęcia pornograficzne.
Ze względu na pewne ułomności ludzkiego oka, zdjęcie stanowi idealny materiał
do ukrycia informacji.

Nośnik informacji

Plik graficzny jest tablicą liczb, reprezentujących barwy
poszczególnych jego punktów zwanych pikselami. Typowy rysunek ma rozmiar 640 x
480 pikseli, z których każdy może występować w jednym z 256 kolorów.
Wynika z tego, że kolor pojedynczego punktu obrazu można przedstawić przy
pomocy ośmiu bitów. Rysunek taki zajmuje około 300 KB. W tzw. trybie true
color
kolor jednego piksela przedstawiony jest w postaci liczby 24-bitowej.
W tak dużej liczbie, oprócz informacji o kolorze, można w sposób niezauważalny
dla oka ukryć „obce” dane.

Wszystkie kolory jakie mogą być użyte w pliku graficznym
wywodzą się z trzech kolorów podstawowych: czerwonego, zielonego i
niebieskiego (RGB). Każdy kolor podstawowy reprezentowany jest przez 1 bajt (8
bitów). W obrazach korzystających z zapisu 24-bitowego, każdy piksel opisany
jest przy pomocy 3 bajtów, które mogą występować w postaci szesnastkowej,
dziesiętnej lub binarnej. Postać heksadecymalna jest często wykorzystywana
przez twórców stron WWW. Tło strony można przedstawić w postaci sześcioznakowej
liczby szesnastkowej, której każde dwa znaki reprezentują nasycenie kolorami,
odpowiednio: czerwonym, zielonym i niebieskim. Na przykład białe tło można
przedstawić jako liczbę szesnastkową FFFFFF. Każda z barw składowych występuje
tutaj w pełnym nasyceniu FF (100% koloru czerwonego, 100% koloru zielonego i
100% koloru niebieskiego). Te trzy bajty koloru można zapisać w postaci dziesiętnej
(255, 255, 255) lub binarnej (11111111, 11111111, 11111111).

Taka definicja tła stanowi analogię definicji koloru
pojedynczego piksela pliku graficznego. Im większy jest rozmiar i ilość kolorów
obrazu, tym więcej informacji można w nim ukryć. Z drugiej strony oczywistym
jest, iż taka dokładność wpłynie na wielkość pamięci dyskowej zajmowanej
przez obraz. Przykładowo rozmiar 24-bitowej grafiki o wielkości 1024 x 768
pikseli przekroczy wielkość 2 MB. Tak duże pliki nie dość, że sprawiają kłopoty
podczas przesyłania ich w Internecie, to mogą również przyciągać uwagę służb
zajmujących się wykrywaniem przemycanych treści. Rozwiązaniem tego problemu
okazała się kompresja danych.

Kompresja plików graficznych

Dwa rodzaje kompresji jakie stosuje się w celu zmniejszenia
plików graficznych to kompresja stratna i bezstratna. Obie metody
pozwalają zaoszczędzić miejsce w pamięci masowej, lecz rezultaty ich działania
są odmienne. Do zastosowań steganograficznych nadaje się jedynie kompresja
bezstratna, która w żaden sposób nie zniekształca oryginalnego obrazu. Taka
kompresja stosowana jest w plikach GIF oraz 8-bitowym formacie BMP.
Wykorzystywana w plikach JPEG kompresja stratna daje co prawda obrazy o
stosunkowo dobrej jakości, lecz nie są one wierną kopią plików oryginalnych
(uzyskanie oryginału na podstawie tak skompresowanego obrazu jest niemożliwe).

Mechanika steganografii

Chcąc ukryć dane w obrazie, należy dysponować dwoma
plikami. Pierwszy z nich, to niewinnie wyglądająca grafika, stanowiąca tzw. nośnik
informacji
, drugi – informacja przeznaczona do ukrycia, którą może być
praktycznie wszystko co da się umieścić w strumieniu bitów: zwykły tekst,
nagrany przekaz słowny, grafika, itp. W wyniku połączenia nośnika z tajną
informacją powstaje tzw. stego-obraz.

Większość programów steganograficznych, jako nośnika
informacji używa obrazów 24-bitowych (na przykład plików zapisanych w
formacie BMP), są też takie, które korzystają z powszechnego w Internecie
formatu GIF, przechowującego grafikę w 256 kolorach (8-bitową) lub rysunki w
odcieniach szarości.

Poszczególne piksele składające się na kolorową grafikę
8-bitową, reprezentowane są przez jeden bajt. Za pomocą jednego bajtu można
zapisać 256 kolorów, a zatem numeryczna wartość każdego piksela jest liczbą
z przedziału od 0 do 255. Wizualna różnica pomiędzy określonym kolorem w
256-bitowej palecie, a kolorem o jeden mniejszym lub większym jest nie do
uchwycenia. Tę właśnie ułomność oka wykorzystuje steganografia.

Wielu ekspertów od steganografii poleca używanie obrazów
składających się z 256 odcieni szarości. Poszczególne bity palety odcieni
szarości zmieniają się bardzo nieznacznie, a im mniejsze są wizualne różnice
pomiędzy leżącymi obok siebie elementami palety, tym lepiej można ukryć
informację.

Nie każdy plik graficzny będzie dobrym nośnikiem
informacji. Równie efektywne co pliki zawierające grafikę w odcieniach szarości,
są obrazy kolorowe o nieznacznie zmieniających się barwach. Z kolei do
zastosowań steganograficznych nie nadają się obrazy wypełnione dużymi
obszarami jednolitych barw. Ukrycie informacji w takim obrazie spowodowałoby
nieznaczne zmiany koloru w różnych częściach obszarów pierwotnie
jednolitych, co kazałoby przypuszczać, że rysunek jest bądź to uszkodzony,
bądź zawiera ukryty przekaz. Bardzo dobrymi nośnikami informacji okazują się
obrazy o rozmytych barwach, na przykład dzieła impresjonistów.

Wybranie odpowiedniego nośnika informacji to pierwszy krok
na drodze do powstania stego-obrazu. W kolejnym należy określić technikę
ukrywania informacji.

Sposób ukrywania informacji

Istnieje wiele sposobów ukrywania informacji w plikach
graficznych. Można na przykład kodować w poszczególnych bitach nośnika
kolejne bity utajnianych danych lub wstawiać je jedynie w te fragmenty nośnika,
które charakteryzują się występowaniem bardzo wielu naturalnych odmian
koloru, a zatem przyciągają najmniej niepożądanej uwagi. Ukrywana informacja
może być również losowo rozpraszana w obrazie – nośniku. Najpowszechniejszą
(i zarazem najprostszą) metodą ukrywania informacji
w grafice komputerowej jest wykorzystanie najmniej znaczącego bitu (ang. LSB – least
significant bit
).

Mając do dyspozycji 24-bitową grafikę i wykorzystując
tylko jeden bit każdego bajtu składającego się na reprezentację piksela
(kolor każdego piksela zapisany jest przy pomocy trzech bajtów), można w
obrazie o wielkości 1024 x 768 pikseli ukryć aż 2 359 296 bitów, czyli 294
912 bajtów informacji. Na przykład litera „A” może być ukryta w
zaledwie trzech pikselach (każdy znak z tabeli ASCII można przedstawić przy
pomocy ośmiu bitów). Oryginalne, przedstawione w formacie binarnym, dane
rastrowe trzech pikseli (9 bajtów) mogą wyglądać następująco:

(00100111 11101001 11001000)
(00100111 11001000 11101001)
(11001000 00100111 11101001)

Binarna reprezentacja litery „A” to 10000011.
Zastąpienie bitów LSB trzech pikseli na bity składające się na literę
„A”, spowodowałoby takie ono zmiany binarnych wartości pikseli:

(00100111 11101000 11001000)
(00100110 11001000 11101000)
(11001001 00100111 11101001)

Podkreślone bity to trzy rzeczywiście zmienione spośród ośmiu
użytych. Przedstawiona metoda średnio zmienia tylko połowę bitów LSB nośnika
informacji. Dane można ukrywać w najmniej znaczącym bicie (ostatnim) lub w
bicie leżącym bezpośrednio przed nim (przedostatnim), a i tak dla oka różnica
będzie niezauważalna.

Manipulacja bitami LSB grafiki 8-bitowej nie przynosi
rezultatów tak doskonałych, jak ma to miejsce w przypadku trybu true color.
Na ośmiu bitach można zapisać jedynie 256 kolorów, a to zbyt mało, aby
zmiana bitu LSB pozostała niezauważona. Z drugiej strony pliki takie są
stosunkowo niewielkie, a zatem byłyby idealnym nośnikiem informacji przesyłanej
w Internecie. Jednakże regułą jest, że im mniej informacji zawiera sam nośnik,
tym mniej informacji będzie można w nim ukryć w sposób niezauważalny. Rozważmy
przykładowo grafikę 2-bitową, a zatem taką, która korzysta z
czterokolorowej palety barw. Reprezentacja binarna poszczególnych elementów
tej palety odpowiada kolorom: białemu (00), czerwonemu (01), niebieskiemu (10)
oraz zielonemu (11). Niech dane rastrowe czterech przylegających pikseli wynoszą
odpowiednio 00, 00, 10, 10 (kolory biały, biały, niebieski, niebieski).
Ukrycie wartości binarnej 1010 odpowiadającej liczbie 10 (dziesięć),
spowodowałoby zmianę danych rastrowych na 01 00 11 10, co poskutkowałoby
zmianą kolorów pikseli na odpowiednio czerwony, biały, zielony, niebieski.
Taka zmiana zostałaby dostrzeżona na pierwszy rzut oka. Autorzy programów
steganograficznych wynaleźli kilka sposób rozwiązania tego problemu. Przede
wszystkim bardzo ważny jest tutaj sam wybór obrazu-nośnika. Należy tu
zastosować taką grafikę, by na podstawie stego-obrazu nie można było
stwierdzić, że zawiera on ukryty przekaz. Można też konwertować grafikę
kolorową na odcienie szarości, gdzie widzialne różnice pomiędzy odcieniami
przylegających do siebie bitów palety są niedostrzegalne. Innym rozwiązaniem
jest konwersja grafiki 8-bitowej do 24-bitowej lub redukcja ilości kolorów,
przy jednoczesnym zachowaniu jakości obrazu („uwolnione” w ten sposób
bity można wykorzystać do ukrycia informacji).

Posługiwanie się najmniej znaczącym bitem jest powszechną
i prostą metodą ukrywania informacji, jednak w żaden sposób nieodporną na
nawet najdrobniejszą manipulację obrazem. Poddanie nośnika rotacji, przycięciu,
czy – co gorsza – kompresji stratnej, spowoduje nieodwracalne
zniszczenie informacji ukrytej w bicie LSB.

Maskowanie, filtrowanie i inne transformacje

Korzystając z technik maskowania i filtrowania, jako nośnika
informacji używa się zazwyczaj obrazów 24-bitowych oraz grafiki wykonanej w
skali szarości. Ukrycie informacji odbywa się tu wskutek znakowania obrazu w
sposób wykorzystywany podczas tworzenia znaków wodnych. Metody te pozwalają
bardziej zintegrować przenoszoną informację z nośnikiem, dzięki czemu staje
się ona odporna na zniekształcenia wynikające z kompresji stratnej,
przycinania, rotacji i innych sposobów przetwarzania obrazu. Tworzenie
widzialnych znaków wodnych nie jest z definicji techniką steganograficzną.
Tradycyjna steganografia ukrywa informacje, podczas gdy technika
tworzenia cyfrowych znaków wodnych rozszerza informację, która staje
się atrybutem nośnika. W pierwszym przypadku obiektem komunikacji jest ukryta
wiadomość, w drugim zaś sam nośnik. Tym niemniej sterując jaskrawością
maskowanego obszaru, można umieścić na nim znak wodny niedostrzegalny dla
oka. Metod, o których mowa, używa się na ogół w przemyśle medialnym, do
znakowania utworów muzycznych i filmowych.

Mimo iż specjaliści od steganografii nie polecają używania
jako nośnika informacji obrazów zapisanych w formacie JPEG, to trzeba przyznać,
że ze względu na niewielkie rozmiary nadają się one idealnie do przesyłania
informacji w Internecie. Istnieją narzędzia, które radzą sobie z
ograniczeniami kompresji stratnej. Jednym z nich jest program Jpeg-Jsteg, który
tworzy stego-obraz zapisany w pliku JPEG; nośnikiem informacji musi być jednak
grafika nie poddana kompresji stratnej.

Możliwości zniszczenia stego-obrazu w wyniku jego
przetwarzania oraz odczytania ukrytej informacji przez osoby niepowołane,
wymusiły konieczność szukania metod minimalizujących te problemy. Dwie z
nich to tzw. kodowanie nadmiarowe (ang. redundant pattern encoding) oraz
szyfrowanie i rozpraszanie (ang. encrypt and scatter). Pierwsza z nich
umożliwia wstawianie pomniejszonej informacji przeznaczonej do ukrycia w różne
miejsca obrazu-nośnika. Dzięki temu nośnik staje się odporny na przycinanie
i inne techniki graficzne, nie naruszające jego integralności. Druga metoda
polega na rozpraszaniu ukrywanych danych na obszarze nośnika, przy zastosowaniu
na tyle skomplikowanego algorytmu, że nawet gdy komuś uda się wydobyć bity
ukrytej informacji, to bez znajomości owego algorytmu zostaną one potraktowane
jako nieistotny szum. Metoda ta co prawda nie zabezpiecza przed zniszczeniem
stego-obrazu, lecz skutecznie eliminuje możliwość odkrycia informacji przez
osoby niepowołane.

Sama idea ukrywania informacji w obrazach jest na tyle prosta
(zwłaszcza metoda wykorzystująca bit LSB), że napisanie odpowiedniego
programu nie powinno sprawić kłopotu nawet programiście średniej klasy. Inna
sprawa, że byłoby to wyważanie otwartych drzwi, gdyż w Internecie dostępnych
jest całkiem sporo narzędzi tego typu.

Narzędzia

Za najlepszy program do tworzenia stego-obrazów uważa się
obecnie „Steganos”, którego wersję shareware można pobrać spod
adresu http://www.demcom.com. Program ten
pracuje w systemie Windows i oprócz ukrywania informacji pozwala je również
szyfrować. Do użytkownika należy jedynie odpowiednie wybranie wielkości
obrazu nośnika.

Inny warty uwagi program to OutGuess (http://www.outguess.org)
autorstwa Nielsa Provosa, programisty znanego głównie z ogromnego wkładu w
kryptograficzne bezpieczeństwo systemu OpenBSD. Program ten pozwala ukrywać
informację w plikach JPEG i – według autora – nie zmienia on żadnych
cech obrazu, możliwych do wykrycia metodami statystycznymi.

Istnieją również narzędzia działające w systemie DOS,
jak StegoDos lub White Noise Storm. Ten pierwszy, to oprogramowanie typu
public-domain, działające jedynie z obrazami o wielkości 320 x 200 pikseli,
zapisanymi w trybie 256 kolorów. Ze względu na ograniczenia wymiarów rysunku,
program nadaje się doskonale do ukrywania tekstów w obrazach, nie jest
natomiast polecany do ukrywania bardziej skomplikowanych danych (na przykład
innych obrazów). StegoDos korzysta z metody LSB, lecz daje nieco gorsze
rezultaty niż inne narzędzia (do zdekodowanej wiadomość mogą doklejać się
różne nieistotne bajty).

White Noise Storm to bardzo wydajny program steganograficzny
pod DOS. Wiadomości tekstowe ukrywane są w sposób nie wzbudzający żadnych
podejrzeń, jednak przeznaczone do ukrycia zdjęcia powodują poważne przesunięcie
palety kolorów. Wykorzystywana jest tu metoda LSB, a jako nośnik informacji
stosowane są pliki w formacie PCX.

Jedno z najbardziej wszechstronnych narzędzi
steganograficznych to program S-Tools. Pozwala on korzystać z obrazów GIF i
BMP (tak 24-bitowych jak i 8-bitowych), a także z plików audio WAV. S-Tools
umożliwia również ukrywanie informacji w nieużywanych obszarach dyskietek.
Program ten korzysta z metody LSB (zarówno w przypadku plików graficznych, jak
i dźwiękowych). Wygenerowany przez S-Tools stego-obraz wygląda niemal
identycznie jak oryginał (odróżnienie ich możliwe jest jedynie w wyniku
bezpośredniego porównania). Nośniki 8-bitowe są przed ukryciem informacji bądź
to powiększane do 24 bitów, bądź podlegają redukcji ilości kolorów. W tym
drugim przypadku różnica pomiędzy obrazem 256 kolorowym, a zredukowanym do 32
kolorów jest niezauważalna gołym okiem.

Nowe wyzwanie dla służb specjalnych

Steganografia wykracza poza proste ukrywanie tekstu w
obrazach, pozwalając na wykorzystywanie również innych mediów, takich jak głos,
nagrania video, pliki binarne oraz kanały komunikacyjne (na przykład plany
dotyczące tajnych projektów mogą być ukryte na zwykłych kasetach audio, w
sposób uniemożliwiający usłyszenie zapisu bez posłużenia się technikami
cyfrowymi). Steganografia w połączeniu z kodowaniem informacji, to
wyrafinowane narzędzie kryptograficzne. Osoba, która przechwyci zaszyfrowaną
wiadomość będzie próbowała ją rozkodować; jeśli jednak ktoś niepożądany
uzyska dostęp do stego-obrazu, nie będzie nawet wiedział, że jest w nim
zaszyta inna informacja.

Łatwość używania steganografii oraz jej dostępność
zrodziły (całkiem słuszne) obawy, że posłuży ona terrorystom do
komunikowania się przez Internet. W związku z tym służby specjalne zaangażowały
się w działania, których celem jest przeszukanie Internetu (sic!), w celu
odnalezienia i rozszyfrowania plików graficznych zawierających ukryte wiadomości.
Oprócz stron WWW przeglądane są również grupy dyskusyjne Usnetu, popularne
czaty oraz wiadomości wysyłane pocztą e-mail.

Trzeba jednak wiedzieć, że steganografia to nie tylko narzędzie
terrorystów. Dzięki niej można umieszczać na towarach znaki handlowe, czy
prawa copyright. Można też po prostu potraktować ją jako dobrą zabawę,
sprawdzając gdzie leży kres technologii.

Literatura

Exploring Steganography: Seeing the Unseen by Neil F. Johnson
and Sushil Jajodia, George Mason University, 1998
Maximum Security Fourth Edition by Anonymous, SAMS
Publishing, 2003

Steganografia, Czesław Kościelny, Biuletyn Politechniki Zielonogórskiej,
1999-2000