Jak ukrýt tajná data do obrázku aneb steganografie v praxi

30. 4. 2010
Doba čtení: 4 minuty

Sdílet

Jistě už víte, jak je možné data šifrovat, aby je nenašel nikdo cizí. Co ale s daty, u kterých nesmí cizí osoba ani zjistit, že existují? Co v zemích, kde po vás budou chtít k zašifrovaným datům heslo? Řešením je steganografie, která umí data uchovat v obrázcích tak, že je není možné objevit. Jak na to?

Pravděpodobně jste někdy slyšeli o šifrování a o tom, jak přibližně funguje. V Linuxu (a nejen v něm) k němu můžete v praxi využívat třeba velmi silný nástroj TrueCrypt nebo třeba klasické GnuPG. Existují ale situace, ve kterých není možné vůbec existenci dat prozradit. Ta totiž sama o sobě může vyvolat podezření a stále existují na světě oblasti, kde se z vás mohou pokusit heslo doslova vymlátit.

Řešením je steganografie. Obecný princip vysvětlí nejlépe encyklopedie:

Steganografie je věda zabývající se utajením komunikace prostřednictvím ukrytí zprávy. Zpráva je ukryta tak, aby si pozorovatel neuvědomil, že komunikace vůbec probíhá. Zachycení zprávy se rovná prolomení steganografie.
(Zdroj: Wikipedie)

V případě počítačové steganografie se tedy jedná o ukrytí dat uvnitř jiných dat. Ta musí být dostatečně proměnlivá, aby byla stále platná i ve chvíli, kdy se do nich zamíchají naše ukrývané informace. Pro tyto účely jsou nejvhodnější multimediální informace jako je obrázek, video či zvuková nahrávka. Mírná obměna dat u nich nehraje žádnou roli a nedochází ke znehodnocení dat. Nejčastěji se používají obrázky jpeg. Ty jsou dnes naprosto běžné a můžete je v klidu nosit třeba v digitálním fotoaparátu. Ten vše zobrazí a nikdo nepojme podezření.

Našim cílem je ukázat si, jaké nástroje je možné pro steganografii využít v Linuxu. Nástrojů je k dispozici celá řada, my si řekneme o těch nejznámějších. Jako zdrojový obrázek použijeme obrázek serveru, který má téměř jeden megabajt. Do něj ukryjeme soubor Tajne.jpg, který má 40 KB. Obecně se může jednat o libovolná data, nemusí jít o obrázek v obrázku. Stejně tak to může být třeba soubor Moje_hesla.odt.

originál
Originální obrázek
tajný
Obrázek obsahující tajná data

Jak vidíte, na pohled se obrázky nijak neliší, přesto jsou v tom druhém utajené informace. Pokud s nimi budete pracovat (samozřejmě se pokuste získat ukrytá data – stojí to za to), pracujte s originální verzí – klikněte si.

Pár rad na začátek: Ukrývaný soubor musí být menší než ten, ve kterém ukrýváme. Čím větší je rozdíl, tím složitější je v souboru objevit nižší entropii a získat podezření na utajená data. Pokud si chcete být jisti, že se k datům nikdo nedostane, určitě je ještě (před procesem nebo během něho) nechejte zašifrovat.

Steghide

Steghide je řádková utilita, která sice není pro běžného uživatele nejpříjemnější, ale hodí se při dávkovém zpracování souborů. Pokud potřebujete ukrýt větší množství souborů, je poměrně jednoduché napsat skript, který vše provede dávkově.

Základní práce s programem vypadá takto:

$ steghide embed -cf Server.jpg -ef Tajne.jpg

Do souboru Server.jpg ukrýváme obsah souboru Tajne.jpg. Program se ještě zeptá na passhphrase, která bude použita pro rozprostření tajných dat a jejich zamíchání do krycího souboru. Bez tohoto hesla není možné informace ze souboru získat.

Enter passphrase:
Re-Enter passphrase:
embedding "Tajne.jpg" in "Server.jpg"... done

Výsledkem je pozměněný soubor Server.jpg. Ten je přibližně stejně velký jako originál, ale už obsahuje naše tajná data. Tímto způsobem také vznikl pravý obrázek nahoře.

O obrázku si můžeme nechat zjistit nějaké informace:

$ steghide info Server.jpg
"Server.jpg":
  format: jpeg
  capacity: 56,7 KB
Try to get information about embedded data ? (y/n) y
Enter passphrase:
  embedded file "Tajne.jpg":
    size: 39,0 KB
    encrypted: rijndael-128, cbc
    compressed: yes

Vidíte, že program oznámil, kolik informací je možné do souboru uložit (56,7 KB) a zeptal se nás na tajné heslo. Podle něj zjistil, že uvnitř jsou skutečně data a vypsal o nich další údaje. My se nyní můžeme pokusit data získat zpět:

$ steghide extract -sf Server.jpg
Enter passphrase:
wrote extracted data to "Tajne.jpg".

Opět jsme byli dotázáni na heslo a data se opět vykopírovala do souboru s původním názvem.

(Mimochodem heslo k příkladovému obrázku zní „stojitozato“. Můžete si zkusit původní soubor získat a prohlédnout.)

Další možnosti

Pokud máte rádi grafická klikátka, můžete zkusit program SteGUI, který umí kromě obrázků steganografii také nad audio soubory (WAV a AU). Bohužel obvykle není součástí distribucí, takže si jej budete muset nainstalovat ručně. Jeho rozhraní je sice trochu strohé, ale zřejmě poslouží dobře.

Velmi zajímavě vypadá také steganografický souborový systém StegFS. Ten funguje pod FUSE a je schopen vám nabídnout kompletní diskovou strukturu ukrytou pomocí steganografie. Práce s diskem by podle informací z webu měla být stejná jako práce s běžným souborovým systémem.

Dalšími nástroji, které můžete vyzkoušet jsou řádkové utility z balíku Stegtools nebo program OutGuess. Jeho výhodou je multiplatformnost a můžete jej používat v systémech Linux, *BSD, Solaris, AIX, HP-UX, Mac OS X a MS Windows.

Čím to detekovat a lámat

Možná vás také při čtení tohoto článku napadlo, jak je možné informace ze souboru vylámat násilím. I k tomu existuje několik nástrojů. Pro detekci můžete využít nástroje Stegdetect, který umí v obrázcích detekovat několik různých steganografických metod. Na odkazovaném webu je stručně popsán i princip funkce.

bitcoin školení listopad 24

Pro útok hrubou silou pak můžete nasadit stegbreak. Ten využívá klasický slovníkový útok a pokud se mu podaří odhalit heslo, získá data z originálního obrázku.

(Obrázek serveru vyfotil Rodzilla a je k dispozici pod licencí CC-BY-2.5.)

Autor článku

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.