- Steganografie Digitální steganografie-
Pod pojmem digitální steganografie rozumíme ukrývání zpráv do datových souborů. Rozlišujeme:
plaintext – zprávu, kterou chceme ukrýt, což může být text nebo soubor
zašifrovaný plaintext (ciphertext)
covertext – nosič zprávy, tedy soubor, do nějž ukrýváme
stegotext – nosič obsahující zprávu
Jako nosiče pro steganografii slouží nejčastějji multimediální data, pro něž platí, že lidské smysly nesmí zprávu odhalit. To neznamená nutně absolutní neviditelnost, ale jen určitý stupeň nenápadnosti. Zpráva by navíc měla přežít určité manipulace (změna velikosti obrázku, filtrování, atd.). Dále se budeme zabývat ukrývání do textu, obrázků, zvuku, videa a do spustitelných souborů.
Připomeňme, že je zcela lhostejné, zda ukrýváme text nebo číslo. Vždy se může navíc jednat o vyjádření zprávy pomocí dvojkové soustavy. Budeme se proto povětšinou zabývat tím, jak ukrýt sekvenci nul a jedniček.
V případě holého textu máme k dispozici pouze jednotlivé znaky bez jakéhokoliv formátování. Jediné, co je v textu nenápadné, jsou bílé znaky. Každý znak zprávy tak můžeme nahradit posloupností mezer a tabulátorů. Tyto posloupnosti umístíme na konec řádků. Jiná metoda spočívá v náhradě podobných písmen, např. O a 0, l a 1. Další způsob je pomocí gramatiky. Například v angličtině před slovem and může a nemusí být čárka. Výskyt čárky pak kóduje 0 nebo 1. Nevýhodou této metody je poměrně málo prostoru pro uložení zprávy. Pomocí sémantiky, čili významu jednotlivých slov lze zprávu kódovat takto: Předem se dohodneme na dvojicích synonym. V každé dvojici jednomu slovu přiřadíme jedničku, druhému nulu. Např. velký = 1, značný = 0. V textu pak hledáme slova z kódové knihy, která podle potřeby nahrazujeme synonymy. Význam zprávy zůstane nezměněn. Více dvojic synonym a delší zpráva poskytuje větší prostor pro zprávu.
Formátovaný text nabízí oproti holému textu další možnosti. Pomocí různých fontů lze zprávu ukrýt např. pomocí Baconovy šifry. Jejím autorem je Francis Bacon (1561 – 1626). Platí, že Nosič zprávy musí být 5x delší než zpráva. Bacon vymyslel pětiznakový kód pro každé písmeno (dnes bychom řekli pětibitový). Nosič poté píšeme pomocí dvou různých fontů; jeden připadá na A, druhý na B.
A = AAAAA N = ABBAA
B
= AAAAB O = ABBAB
C =
AAABA P = ABBBA
D =
AAABB Q = ABBBB
E =
AABAA R = BAAAA
F =
AABAB S = BAAAB
G =
AABBA T = BAABA
H =
AABBB U + V = BAABB
I + J = ABAAA W = BABAA
K = ABAAB X = BABAB
L
= ABABA Y = BABBA
M =
ABABB Z = BABBB
NĚJAKÝCH DVACET PÍSMEN pak může ukrýt zprávu "Ahoj". V digitální steganografii lze této metody samozřejmě použít při ukrývání jedniček a nul.
Pomocí posouvání řádků lze ukrýt zprávu např. do PDF. Každý druhý řádek je posunut nahoru nebo dolů vůči své správné pozici. Posun o jeden pixel, tj. o 1/300 palce je pro lidské oko neznatelný. Směr posunutí kóduje 0 nebo 1. Výhodou této metody je její dekódovatelnost i po 10 kopiích. Analogickou metodu předstravuje posouvání slov, čili zvětšování nebo zmenšování horizontální mezislovní mezery. Tato metoda je ještě méně viditelná než posun řádků. Její variantou je pak vkládání nových mezer, což je ale poněkud nápadnější. Další metodu představuje neznatelná změna vlastností písma (výška u písmen jako b, d, h, l, řez, atd.), drobná změna barvy písma či kombinace uvedených metod.
Ukrývání do obrázků je nejčastěji užívaná metoda, neboť obrázky jsou nejčastěji přenášený typ multimediálních dat a tudí budí nejméně pozornosti. Navíc skýtají nepřeberné množství možností ukrývání.
Nejprimitivnější metodou je kódování do nejméně významného bitu, tedy LSB (Least Significant Bit). Klasické barevné schéma R,G,B, kde je pro každou barevnou složku vyhrazen 1 byte, představuje prostor pro cca 16,7 milionu barev, což je více, než dokáže lidské oko rozlišit. Použijeme-li tedy poslední bit každého n-tého bytu pro uchování zprávy, některé body se nepatrně změní, lidské oko však změnu neodhalí. Příjemce z obrázku použije jen stanovené bity. Alternativou tohoto postupu je kódování do dvou posledních bitů. Lidské oko stále není schopno zaznamenat změnu, jak je vidět na následujícím příkladu převzatém z Wikipedie:
Odstraníme-li v obrázku stromů vše až na dva LSB, získáme skoro černý obraz. Následné 85x zvýšení jasu odhalí kočku.
Ukrývání do LSB má však i svá úskalí: U grafických formátů s barevnou paletou (GIF) může změna posledního bitu znamenat značnou změnu barvy. Je proto třeba provádět změnu na základě podobnosti barev a místo jednoho bitu měnit celý byte (resp. celou trojici bytů). Výsledkem bude barva velmi podobná původní barvě. Případně můžeme použít obrázek v odstínech šedé.
Velmi zajímavvou metodou je ukrývání do barevné palety, což je využitelné u obrázků souborového formátu GIF, který má barevný prostor 256 barev. Na začátku každého souboru je definice barevné palety, která představuje přeskládání barev. Samotná obrazová data jsou pak jen indexy do palety. Při změně palety a odpovídající změně indexů zůstane obraz vizuálně identický. Počet různých palet je roven 256! = 8,5*10506 = 21683. Každé zprávě přiřadíme uspořádání barev. Do barevné palety lze ukrýt až 1683b = 210B.
Máme-li k dispozici nosič ve formátu JPEG, využijeme vlastností ztrátové komprese. Ta je u JPEGu založena na DCT (Discrete Cosine Transform). Lidské oko je citlivější na změnu jasu než na změnu odstínu. V JPEG kompresi obě složky zpracováváme zvlášť. Zprávu ukrýváme do informace o barvě na méně významné pozice v matici 8x8.
Vodoznaky, čili přidání špatně viditelné informace do obrázku v reálném světě dokazují pravost dokumentu. Vodoznak není viditelný na první pohled, obsahuje však určité informace. Jeho nevýhodou je, že jej lze většinou odhalit. Výhodou je pak rezistence vůči prakticky jakékoliv manipulaci s obrázkem. Nejedná se však o „čistou“ steganografii
Další způsob steganografie denně nevědomky každý z nás použije. Americká tajná služba je totiž dohodnutá s výrobci tiskáren, že každá vytisknutá stránka obsahuje na určitých místech mikroskopické tečky žluté barvy. Rozložení teček odpovídá místu nákupu tiskárny a dalším informacím. CIA je tak z každé stránky schopná určit místo, kde byla stránka vytisknutá, dokonce i sériové číslo tiskárny.
Při ukrývání do audiosignálu můžeme použít tzv. low bit encoding, což je analogie LSB u obrázků. Zprávu kódujeme do nejméně významných bitů v každém bytu. Odvážnější metoda, tedy kódování zprávy do dvou bitů v každém bytu je použitelná jen u málo kvalitních nahrávek, získáme však více prostoru pro ukrývání dat. Nevýhodou změn nízkých bitů je, že přenos přes analogové médium zničí zprávu šumem. Stejně tak převzorkování zničí zprávu.
Jinou metodu představuje tzv. parity coding, čili kódování pomocí bitů pro kontrolu parity. V každé části audiosignálu je totiž jeden paritní bit. Je-li příslušný bit zprávy roven paritnímu bitu, zůstane část beze změny. Je-li příslušný bit zprávy různý, změníme jeden z LSB v části audiosignálu a následně změníme i paritní bit. Kontrola parity je v pořádku, audiosignál však ukrývá zprávu. Při dekódování zprávy čteme jen paritní bity.
Velmi pěknou metodu kkódování do audiosignálu představuje kódování pomocí fázových posunů. Audiosignál je složen ze sinů, které mají různou frekvenci a různou amplitudu. Mají také různý fázový posun. Lidské ucho vnímá jen frekvenci (výška tónu) a amplitudu (intenzita tónu), nikoliv fázový posun. DFT (Diskrétní Fourierova transformace) rozloží signál na siny (jedná se analogii Talorovy řady pro polynomy). Následně upravíme fázový posun elementárních funkcí tak, aby kódoval zprávu a zrekonstruujeme audiosignál. Pro lidské ucho je změna zcela neznatelná, nový zvukový soubor je však velmi odlišný od původního. Čím složitější zvuk, tím větší prostor pro zprávu.
Metdou, která opět vychhází z reálného světa, je ukrývání do šumu. Zprávu namodulujeme na neslyšitelnou frekvenci a vzniklý signál přidáme do zvuku. Příjemce oddělí signál dané frekvence a dekóduje zprávu. De facto se jedná o princip elektromagnetického přenosu v reálném světě (např. do našeho hlasu je na neslyšitelné frekvenci ukryt signál rádia či televize, signál internetového modemu je přidán do kabelové televize, telefonní linky, atd.).
Poslední metodou ukrývání do audiosignnálu, o které se zmíníme, je ukrývání do ozvěny. K určité části signálu v audiosouboru přidáme ozvěnu, přičemž intenzita a útlum ozvěny se mění. Zpoždění kóduje 0 nebo 1. Nelze použít pro nekvalitní signál, pro signál již obsahující ozvěny, nebo pro signál s dlouhými pomlkami (ozvěna ticha je totiž opět ticho).
Video = obraz + zvuk. Máme tedy možnost použití technik pro ukrývání do obrázků i do zvuku, případně kombinace obou. Obrázků je navíc velké množství, pro zprávu tedy máme hodně prostoru. Video je však nepopulární nosič díky značnému objemu dat a skutečnosti, že se nepříliš často se přenáší po internetu.
Spustitelný soubor není nic jiného, než posloupnost instrukcí. Instrukce samozřejmě nelze měnit, tím bychom zcela změnili chod programu. Využijeme však instrukce nepodmíněného skoku a tím vytvoříme části souboru, které nikdy nebudou provedeny. Do nich pak ukryjeme zprávu. Tento způsob se sice poměrně snadno detekuje, ale kdo z nás běžně hledá ve spustitelných souborech hluchá místa? Jinou metodou je ukrývání do nepoužitých proměnných, pomocí negativni / pozitivní formulace podmínek skoku, atd.