Biuletyn WAT Vol. LXIV, Nr 4, 2015 Algorytm steganograficzny PM1 wykorzystujący trójkowy kod Hamminga KAMIL KACZYŃSKI Wojskowa Akademia Techniczna, Wydział Cybernetyki, Instytut Matematyki i Kryptologii, 00-908 Warszawa, ul. gen. S. Kaliskiego 2 kkaczynski@wat.edu.pl Streszczenie. Algorytm PM1 jest rozwinięciem algorytmu LSB, cechującym się nie tylko zwiększoną odpornością na ataki stegoanalityczne, lecz także wysoką pojemnością steganograficzną. Algorytm PM1 dzięki swojej unikalności pozwala na wykorzystanie szerszego alfabetu symboli, co umożliwia dodatkowe zwiększenie pojemności steganograficznej nośnika. W niniejszym artykule przedstawiony zostanie zmodyfikowany algorytm PM1, w którym zastosowano tzw. kodowanie syndromami poprzez wykorzystanie trójkowego kodu Hamminga. Zabieg ten pozwolił na zmniejszenie liczby wprowadzanych do nośnika zmian, przy jednoczesnym zwiększeniu jego pojemności. Słowa kluczowe: steganografia, kody liniowe, PM1, LSB, trójkowy kod Hamminga DOI: 10.5604/12345865.1186417 1. Wstęp W 1998 roku R. Crandall opublikował wpis [1] na steganography mailing list, wskazując na możliwość poprawienia efektywności algorytmów steganograficznych poprzez wykorzystanie kodów korekcyjnych w procesie osadzania wiadomości. W szczególności poprzez wykorzystanie kodów liniowych istnieje możliwość skonstruowania systemu steganograficznego opartego o tzw. osadzanie macierzowe (z ang. matrix embedding). W systemie takim wiadomość jest przekazywana z wykorzystaniem syndromu wybranego kodu korekcji błędów.
258 K. Kaczyński Niech C będzie kodem o długości n i o k elementach informacyjnych, posiadającym macierz kontroli parzystości H i zdolność korekcyjną t. Niech x będzie wektorem uzyskanym po zastosowaniu funkcji przypisywania symboli do elementów nośnika i s Fq n k oznacza tajną wiadomość. Poniższy schemat pozwala na osadzenie n k symboli, dokonując przy tym co najwyżej t zmian w każdym bloku składającym się z n symboli. Emb(x, s) = x e L = y Ext(y) = Hy, gdzie e L oznacza wybrany wektor z klasy wektorów w F n q, których syndrom jest równy Hx s. Wykonanie funkcji wyodrębniającej powoduje wydobycie przekazywanej tajnej wiadomości s, Ext(Emb(x, s)) = Hx He L = = Hx Hx + s = s. Waga Hamminga wektora e L bezpośrednio wskazuje na liczbę zmian wprowadzanych do wektora x. Z powyższego wynika, że maksymalne wprowadzone zniekształcenie danej metody steganograficznej jest równe zdolności korekcyjnej t kodu C. 2. Algorytm steganograficzny Podstawowymi parametrami pozwalającymi na dokonanie porównań pomiędzy algorytmami steganograficznymi są średnie zniekształcenie (average distortion) oraz współczynnik osadzania (embedding rate). Przyjmijmy, że nośnik składa się z N symboli, wtedy średnie zniekształcenie jest zdefiniowane następująco: D = R N (zmian/symbol), gdzie R oznacza oczekiwaną liczbę zmian wprowadzonych poprzez wiadomości o rozkładzie jednostajnym. Poprzez współczynnik osadzania rozumiemy liczbę bitów t, które mogą być ukryte w nośniku: E = t N (bitów/symbol). Wyróżnia się także ostatni parametr, tzw. sprawność osadzania (embedding efficiency). Jest to wartość wynikająca z powyższych dwóch, która wskazuje na średnią liczbę osadzonych bitów na jedną zmianę wprowadzoną do nośnika. Miara ta została wprowadzona w [2] i od tego czasu jest szeroko wykorzystywana.
Algorytm steganograficzny PM1 wykorzystujący trójkowy kod Hamminga 259 W niniejszej pracy skupimy się na rozwinięciu algorytmu PM1 (plus minus 1) operującego na symbolach z Z 3. Operacja osadzania wiadomości w pikselu obrazu x i wymaga wykonania operacji x i + c, gdzie c {0, +1, 1}, co oznacza że wiadomość jest przenoszona przez dwa najmniej znaczące bity piksela obrazu, w odróżnieniu od algorytmu LSB, w którym zmianie ulega jedynie najmniej znaczący bit piksela. Postać funkcji osadzającej w naturalny sposób wskazuje, że optymalne jest wykorzystanie symboli z Z 3, gdzie funkcja wyodrębniająca ma postać: Ext(y i ) = y i mod 3. Jeżeli wiadomość w {0, 1, 2} ma zostać umieszczona w pikselu x i, wtedy funkcja osadzająca powinna w taki sposób dobrać nową wartość piksela y i, aby spełniona została zależność w = y i mod 3. Poniższe tabele prezentują sposób dobierania nowych wartości pikseli oraz zmianę D wprowadzoną do piksela. Działanie algorytmu PM1 Tabela 1 x i w = 0 1 2 w = 0 1 2 9 9 10 8 0 1 1 10 y i = 9 10 11 D = 1 0 1 11 12 10 11 1 1 0 Algorytm ten cechuje się współczynnikiem osadzania E = log 2 3 1,585 i średnim zniekształceniem D = 2/3. Sprawność osadzania może zostać obliczona jako iloraz współczynnika osadzania i średniego zniekształcenia E D = 3 log 2 3 2 2,3374. Oznacza to, że wprowadzając jedną zmianę do nośnika, możliwe staje się ukrycie 2,3374 bitów wiadomości, co jest bardzo dobrym wynikiem. Rozważmy algorytm z wykorzystaniem trójkowego kodu Hamminga. Niech C będzie trójkowym kodem Hamminga o długości N = 3m 1 2. Kod ten posiada 3 m warstw, zatem istnieje możliwość ukrycia 3 m różnych wiadomości trójkowych w {0, 1,..., 3 m 1}. Wektor kodowy składa się z 3m 1 2 symboli. Ukrywając wiadomość w, należy w taki sposób zmodyfikować wektor kodowy, aby jego syndrom był równy wiadomości w. Wymaga to zmiany wartości jednej lub zera współrzędnych wektora kodowego. Prawdopodobieństwo tego, że syndrom będzie równy ukrywanej wiadomości, jest równe 1 3, natomiast prawdopodobieństwo zdarzenia przeciwnego to 3m 1 m 3. Ocze- m kiwana liczba wprowadzonych zmian jest zatem równa: R = 1 3 m 0 + 3m 1 3 m 1 = 3m 1 3 m.
260 K. Kaczyński Zatem średnie zniekształcenie może zostać obliczone jako: D = 3 m 1 3 m 3 m 1 2 = 2 3 m. Natomiast współczynnik osadzania jest równy: E = log 2 3 m 3 m 1 2 = 2 log 2 3 m 3 m 1. Sprawność osadzania wyznaczona jako iloraz współczynnika osadzania i średniego zniekształcenia jest dana poniższą formułą: 2 log 2 3 m E D = 3 m 1 3 m log = 2 3 m 2 3 m 1. 3 m Na potrzeby niniejszej pracy zastosujemy trójkowy kod Hamminga (13, 10). Macierz generująca G ma postać: 1 1 1 0 0 0 0 0 0 0 0 0 0 2 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 2 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 0 G = 1 1 0 0 1 0 0 0 1 0 0 0 0 2 1 0 0 1 0 0 0 0 1 0 0 0 0 2 0 0 1 0 0 0 0 0 1 0 0 1 2 0 0 1 0 0 0 0 0 0 1 0 2 2 0 0 1 0 0 0 0 0 0 0 1 Odpowiednio macierz kontroli parzystości H jest dana poniżej: H = 0 0 1 1 1 1 1 1 1 1 1 0 0 1 1 0 0 1 1 1 2 2 2 0 1 0 1 2 1 2 0 1 2 0 1 2 0 0 1 Ukrywając wiadomość z wykorzystaniem syndromów kodu Hamminga (13, 10), istotne jest, aby tak zmienić wybrany symbol wektora kodowego, aby syndrom był równy ukrywanej wiadomości: w = s = s 1 s 2 = Hc T, s 3
Algorytm steganograficzny PM1 wykorzystujący trójkowy kod Hamminga 261 co odpowiada układowi równań: s 1 = c 3 + c 4 + c 5 + c 6 + c 7 + c 8 + c 9 + c 10 + c 11 mod 3 s 2 = c 1 + c 2 + c 5 + c 6 + c 7 + 2c 8 + 2c 9 + 2c 10 + c 12 mod 3 s 3 = c 1 + 2c 2 + c 3 + 2c 4 + c 6 + 2c 7 + c 9 + 2c 10 + c 13 mod 3 Algorytm PM1 oparty na takim kodzie Hamminga cechuje się średnim zniekształceniem równym D = 2 27 i współczynnikiem osadzania E = = 2 log 2 27 26 0,366, co daje sprawność osadzania równą 27 log 2 27 26 4,938. Jest to wartość ponad dwa razy większa, niż w przypadku standardowego algorytmu PM1. Porównajmy algorytm oparty na trójkowym kodzie Hamminga (13, 10) z algorytmem z [3] opartym na binarnym kodzie Hamminga (7, 4). W algorytmie tym istnieje możliwość ukrycia 2 3 = 8 różnych wiadomości binarnych w {0, 1,..., 7}. Wektor kodowy składa się z siedmiu symboli. Ukrywając wiadomość w, należy w taki sposób zmodyfikować wektor kodowy, aby jego syndrom był równy wiadomości w. Wymaga to zmiany wartości jednej lub zera współrzędnych wektora kodowego. Prawdopodobieństwo tego, że syndrom będzie równy ukrywanej wiadomości, jest równe 1 8, natomiast prawdopodobieństwo zdarzenia przeciwnego to 7 8. Oczekiwana liczba wprowadzonych zmian jest zatem równa: R = 1 8 0 + 7 8 1 = 7 8. Zatem średnie zniekształcenie może zostać obliczone jako: D = 7 8 7 = 1 8. Natomiast współczynnik osadzania jest równy: E = 3 7. Sprawność osadzania wyznaczona jako iloraz współczynnika osadzania i średniego zniekształcenia jest dana poniższą formułą: E D = 3 7 1 8 = 24 7 3,429.
262 K. Kaczyński Z powyższego wynika, że zaproponowany algorytm PM1 oparty na trójkowym kodzie Hamminga (13, 10) przewyższa algorytm z [3] oparty na binarnym kodzie Hamminga (7, 4) zarówno pod względem niższego średniego zniekształcenia, jak i większego współczynnika osadzania. Sprawność osadzania zaproponowanego algorytmu jest zatem o blisko 44% większa. 3. Implementacja Zaproponowany w niniejszej pracy algorytm został zaimplementowany z wykorzystaniem języka programowania C# i środowiska projektowego Microsoft Visual Studio 2015. Podstawową funkcjonalnością programu jest wstawianie wiadomości do plików graficznych w formacie BMP. Aplikacja wykorzystuje do tego dwa algorytmy zaproponowany algorytm PM1 wykorzystujący trójkowy kod Hamminga, a także dla celów porównawczych klasyczny algorytm LSB. Dla tych dwóch algorytmów możliwe jest odczytanie danych ukrytych we wskazanym pliku formatu BMP. Rys. 1. Aplikacja Ternary Hamming PM1 Źródło: opracowanie własne Ukrywana przez aplikację wiadomość może być dowolnym ciągiem binarnym/trójkowym, jednakże na potrzeby testowania aplikacji przyjęto, że będzie to tekst kodowany zgodnie ze standardem UTF-8.
Algorytm steganograficzny PM1 wykorzystujący trójkowy kod Hamminga 263 4. Stegoanaliza Zaproponowany algorytm steganograficzny cechuje się wysoką sprawnością osadzania, co powinno przełożyć się na zmniejszenie możliwości wykrycia obrazów przenoszących ukrytą treść. W celu zbadania odporności algorytmu wykorzystane zostaną obrazy pozyskane z bazy SIPI, każdy o wymiarach 256 256 pikseli. Do każdego z obrazów wprowadzono wiadomość o długości 3000 bajtów, co oznacza niemal całkowite wykorzystanie pojemności nośnika przy wykorzystaniu tylko jednej składowej koloru danego piksela. Wykorzystane do testów aplikacji oraz algorytmu obrazy będą nazywane odpowiednio f16, girl, house oraz pepper. Obrazy, do których zostanie dodana wiadomość, będą oznaczane jako nazwa stego. Rys. 2, 3, 4, 5. Obrazy f16, girl, house oraz pepper Źródło: Baza SIPI: http://sipi.usc.edu/database/database.php?volume=misc&image=10#top Ataki wizualne pozwalają na wykrycie faktu zastosowania algorytmu wprowadzającego duże zmiany do nośnika. Jeżeli wykorzystany nośnik posiada duże obszary jednolitych barw bądź też obszary o skrajnym nasyceniu kolorów, w takich miejscach możliwe jest pojawienie się widocznych artefaktów. Ataki tego typu są szczególnie skuteczne w stosunku do obrazów, które są oparte na ustalonej palecie barw, takich jak np. GIF. W przypadku algorytmów o wysokiej sprawności osadzania, takich jak zaproponowany, czy też algorytm z [3], ataki wizualne nie mają zastosowania. Poniżej znajdują się obrazy będące porównaniem najmniej znaczących bitów obrazu oryginalnego i obrazu z wbudowaną wiadomością. Widoczny jest brak jakichkolwiek artefaktów w zmodyfikowanym obrazie. Obrazy z wiadomością ukrytą z wykorzystaniem zaproponowanego algorytmu PM1 poddano także stegoanalizie metodą chi-kwadrat. Idea ataku została przedstawiona w [5]. Wyznaczenie prawdopodobieństwa wprowadzenia danych do obrazu oraz oszacowanie przybliżonego rozmiaru wprowadzonych danych zostało wykonane z wykorzystaniem oprogramowania
264 K. Kaczyński Rys. 6. LSB obrazu girl stego Źródło: opracowanie własne Rys. 7. LSB obrazu girl StegSecret [6]. Do każdego z obrazów wprowadzono 3000 bajtów wiadomości. Poniższa tabela zawiera zestawienie uzyskanych wyników. Oszacowanie długości wbudowanej wiadomości Tabela 2 Obraz oryginalny [kb] Stegogram [kb] f16 1,6 1,6 girl 0,0 0,0 house 3,1 3,1 pepper 1,5 1,5 Z analizy powyższej tabeli jasno wynika, że wykorzystany algorytm wprowadza tak niewielkie zmiany w obrazie, że metoda Chi-kwadrat daje identyczne wartości oszacowania zarówno dla obrazu oryginalnego, jak i stegogramu. Poniżej przedstawiono porównanie prawdopodobieństwa osadzenia wiadomości dla obrazu house. Ostatnim z przeprowadzonych ataków będzie zaproponowana w [7] i [8] stegoanaliza RS. Do przeprowadzenia ataku ponownie wykorzystane zostało oprogramowanie StegSecret, a do obrazów testowych wprowadzono wiadomość o długości 3000 bajtów. Wiadomość była osadzona jedynie w składowych koloru niebieskiego, dlatego też dane obecne w poniższej tabeli będą odnosiły się jedynie do tej składowej każdego piksela. Dla obrazu f16 atak RS wskazał na zmianę 3,28% pikseli barwy niebieskiej, podczas gdy dla obrazu f16 stego zaledwie 1,62%. Dla obrazu girl było to 2,14% pikseli, zaś dla obrazu girl stego 2,13%. W przypadku obrazów house i house stego, wartości te wynoszą odpowiednio 0,91% i 0,95%. Obraz pepper, ze względu na swoją specyficzną strukturę, wskazał na 8,31%
Algorytm steganograficzny PM1 wykorzystujący trójkowy kod Hamminga 265 Rys. 8, 9. Prawdopodobieństwo osadzenia wiadomości o określonej długości dla obrazów house i house stego Źródło: opracowanie własne Wyniki analizy algorytmem RS Tabela 3 Obraz oryginalny [kb] Stegogram [kb] f16 3,28% 1,62% girl 2,14% 2,13% house 0,91% 0,95% pepper 8,31% 13,37% zmienionych pikseli, podczas gdy pepper stego na 13,37%. Próg, przy którym można określić, że dany obraz przenosi ukrytą treść, jest zawarty w przedziale 5 10%. W przypadku obrazów testowych wyniki były porównywalne bądź niższe od obrazu oryginalnego, jedynie w przypadku obrazu pepper stego wartość przekroczyła próg wykrywalności. Odpowiedni dobór obrazów pozwoli zatem na brak wykrywalności tak prowadzonej komunikacji. 5. Wnioski Przedstawiony w niniejszej pracy algorytm w procesie osadzania wiadomości wykorzystuje symbole z Z 3 oraz trójkowy kod Hamminga (13, 10). Zastosowanie kodowania macierzowego pozwoliło na znaczące poprawienie podstawowych parametrów algorytmu PM1, takich jak średnie zniekształcenie i współczynnik osadzania, co w efekcie pozwoliło także na uzyskanie wysokiej sprawności osadzania, blisko o 44% większej niż w przypadku al-
266 K. Kaczyński gorytmu zmodyfikowanego w oparciu o binarny kod Hamminga (7, 4) [3]. Zmniejszenie liczby zmian wprowadzanych do nośnika spowodowało znaczące zmniejszenie wrażliwości algorytmu na podstawowe ataki stegoanalityczne, takie jak stegoanaliza RS czy też atak Chi-kwadrat. Zastosowany w algorytmie trójkowy kod Hamminga może zostać także użyty do modyfikacji innych algorytmów steganograficznych, pozwalając na poprawę ich głównych parametrów i jednoczesne zwiększenie osiąganej przez nie sprawności osadzania. Praca finansowana z działalności statutowej uczelni praca RMN nr 764/2015 Zastosowanie macierzy kontroli parzystości w tworzeniu algorytmów steganograficznych. Artykuł opracowany na podstawie referatu wygłoszonego na XLIV Konferencji Zastosowań Matematyki, Zakopane-Kościelisko 19.09.2015 r. Artykuł wpłynął do redakcji 27.10.2015 r. Zweryfikowaną wersję po recenzjach otrzymano 13.11.2015 r. LITERATURA [1] Crandall R., Some notes on steganography, Steganography mailing list, 1998. [2] Westfeld A., High capacity despite better steganalysis (F5 a steganographic algorithm), Information Hiding, 4th International Workshop, vol. 2137, Lecture Notes on Computer Science, Berlin Heidelberg, Springer-Verlag, 2001, 289-302. [3] Kaczyński K., Steganografia z wykorzystaniem optymalnych kodów liniowych. [w:] Nowe techniki badań kryminalistycznych a bezpieczeństwo informacji, red. nauk. B. Hołyst, J. Pomykała, P. Potejko, Wyd. PWN, 2014, 110 120. [4] Marcal A.R.S., Pereira P.R., A Steganographic Method for Digital Images Robust to RS Steganalysis, Second International Conference, ICIAR 2005, Toronto, Canada, Proceedings, September 2005, 28 30. [5] Westfeld A., Pfitzmann A., Attacks on Steganographic Systems, Third International Workshop, IH99, Dresden, Germany, September 29 October 1, 1999 Proceedings, 2000, 61 76. [6] http://stegsecret.sourceforge.net/ dostęp 11.07.2014 [7] Fridrich J., Goljan M., Rui Du, Detecting LSB steganography in color, and gray-scale images, IEEE Multimedia 8, 2001, 22-28. [8] Fridrich J., Goljan M., Hogea D., Soukal D., Quantitative steganalysis of digital images: estimating the secret message length, Multimedia Systems 9, 2003, 288 302. [9] Gawinecki J., Matematyka dla informatyków, WAT, Warszawa, 2006. [10] Mochnacki W., Kody korekcyjne i kryptografia, Oficyna Wydawnicza Politechniki Wrocławskiej, Wrocław, 2000. [11] Cox I.J., Miller M.L., Bloom J.A, Fridrich J., Kalker T., Digital Watermarking and Steganography (Second Edition), Morgan Kaufmann, 2008. [12] Gawinecki J., Kaczyński K., Stegodroid aplikacja mobilna do prowadzenia ukrytej komunikacji, Studia Bezpieczeństwa Narodowego, rok IV, nr 6, Warszawa, 2014, 139 150.
Algorytm steganograficzny PM1 wykorzystujący trójkowy kod Hamminga 267 K. KACZYŃSKI PM1 steganographic algorithm using ternary Hamming Code Abstract. PM1 algorithm is a modification of well-known LSB steganographic algorithm. It has increased resistance to selected steganalytic attacks and increased embedding efficiency. Due to its uniqueness, PM1 algorithm allows us to use of larger alphabet of symbols, making it possible to further increase steganographic capacity. In this paper, we present the modified PM1 algorithm which utilizies so-called syndrome coding and ternary Hamming code. The modified algorithm has increased embedding efficiency, which means fewer changes introduced to carrier and increased capacity. Keywords: steganography, linear codes, PM1, LSB, ternary Hamming code DOI: 10.5604/12345865.1186417