3. Steganografie — schování jedné informace uvnitř jiné
Teď si uděláme malou odbočku od pixelů a povíme si něco o tajných zprávách. Řekneme si, co je to steganografie a jak se liší od šifrování, a podíváme se i na nějaké příklady z historie.
Úvod tématu
2. Uložení obrázků
4. Schování zprávy do obrázku
Tajné zprávy
Lidé si odjakživa chtěli posílat tajné zprávy, které by si nemohl přečíst nikdo jiný než jejich adresát. Jedním ze způsobů, jak to udělat, je použít šifru — místo srozumitelné zprávy se pošle nějaký normálně nesrozumitelný text, který je potřeba napřed rozšifrovat.
Caesarova šifra
Slavným příkladem šifry z historie je takzvaná Caesarova šifra, která se tak jmenuje proto, že ji ve své korespondenci používal starořímský vládce Julius Caesar. Princip téhle šifry je na dnešní poměry jednoduchý: každé písmeno zprávy nahradíme písmenem, které je v abecedě o tři pozice dál. Místo „A“ napíšeme „D“, místo „B“ napíšeme „E“, a tak dále (z konce abecedy se vrátíme zase na začátek, takže třeba místo „X“ napíšeme „A“ a místo „Y“ napíšeme „B“).
Takže pokud zprávu „POSILY PRIJDOU ZITRA“ zašifrujeme Caesarovou šifrou, dostaneme text „SRVLOB SULMGRX CLWUD“. Když známe princip a víme, o kolik písmen se text posunul, je rozluštění zprávy jednoduché, stačí jen postupovat opačně.
„V tomhle příkladu jsme použili jen základní abecedu s 26 písmeny, vynechávali jsme české háčky a čárky nebo Ch. Samotný Julius Caesar to měl ještě jednodušší, protože latinská abeceda za jeho časů měla písmen jen 23: nebylo v ní J, U a W. To také znamená, že Caesarovo jméno se psalo „IVLIVS“ — tak je to také vidět napsané na některých dobových mincích.“
Nevýhodou šifrované zprávy je, že pokud se k ní dostane nepřítel, hned vidí, že se odesílatel snaží adresátovi něco tajného říct. Možná zprávě nerozumíme, ale pokud třeba chceme odhadnout, jestli Caesarova vojska zaútočí spíš z východu, nebo ze západu, možná nám stačí jen vědět, jestli víc těch nesrozumitelných zpráv posílá do východního, nebo do západního vojenského tábora.
Steganografie
Jiným způsobem utajení zprávy je přímo utajení toho, že nějaká zpráva vůbec existuje. Tomu se říká „steganografie“, což je výraz pocházející ze starořeckého steganós—schovaný a gráphein—psát. A taky je to princip, který byl známý už v dobách antiky.
Když Histiaeus, starořecký vládce města Milét, potřeboval poslat utajenou zprávu, zavolal si posla, nechal mu ostříhat hlavu dohola, zprávu mu vytetoval na kůži, a teprve až poslovi zase narostly vlasy a zprávu schovaly, poslal ho vládce na cestu. Adresát nedostal žádný dopis jako takový, ale prostě poslovi opět oholil hlavu a vytetovanou zprávu si přečetl.
„Měli štěstí, že si tu zprávu nepotřebovali poslat rychle. A dovedeš si představit chudáka posla, kdyby přes něj chtěli hrát třeba korespondenční šachy?“
V historii se samozřejmě objevila i spousta jiných způsobů, jak nějakou zprávu schovat, a ne všechny zahrnovaly břitvu a holicí pěnu. Oblíbeným se stalo třeba používání různých neviditelných inkoustů, kterými se dal napsat vzkaz do zdánlivě prázdných míst mezi řádky nějakého nedůležitého, neskrývaného textu. Většinou šlo o látky jako mléko, ocet nebo citronová šťáva, které sice normálně nebyly vidět, ale například po zahřátí papíru ztmavly.
Zjisti více: Neviditelné inkousty
Tohle video ukazuje několik příkladů jednoduchých neviditelných inkoustů, pomocí kterých by šlo schovat nějakou zprávu:
Jak to souvisí s pixely?
A jak tedy schovávání zpráv souvisí s barvami a pixely, o kterých jsme si povídali v prvních dvou kapitolách? To si teď povíme, a v příští kapitole si to dokonce přímo vyzkoušíme.
Vzpomeňme si tedy, jak se obrázky ukládají: jako čtvercová mřížka pixelů, kde každý pixel je uložený jako tři čísla (jako moc červený, jak moc zelený a jak moc modrý má pixel být), každé z nich od 0 do 255. Představme si pro jednoduchost malý obrázek o velikosti pouhé 3 × 3 pixely. Vlastně si takový obrázek můžeme přímo ukázat jako takovou tabulku:
Můžeme si představit, že je to třeba nějaký hodně hodně zmenšený obrázek travnatých kopců a modré oblohy. V každém políčku tabulky vidíme ta tři čísla barvy, kterou to políčko má.
A teď se podívejme na trochu jiný obrázek:
Je okem vidět rozdíl? Moc ne, že? Když se ale podíváme na ta čísla, můžeme si všimnout, že jsme některé barvy trochu změnili — například v levém horním pixelu jsme modrou část barvy (B podle anglického „blue“) změnili z čísla 244 na 245. Levý horní pixel toho druhého obrázku je tedy o nepatrnou trošku modřejší, než ten samý pixel na prvním obrázku. A třeba u pixelu dole uprostřed jsme modrou změnili ze 79 na 78, takže ten je na druhém obrázku naopak o trochu méně modrý.
Proč jsme ale ty barvy měnili, když okem nepoznáme rozdíl? Přece abychom do obrázku mohli schovat tajnou zprávu. Protože teď můžeme zkusit následující postup: vyznačíme si ty pixely, ve kterých je hodnota modré složky sudá, tedy dělitelná dvěma:
Vidíme, že nám najednou pixely, jejichž modrá má sudou hodnotu, ukazují malý křížek nebo plus. A takovýhle postup klidně můžeme použít na větší obrázek — modré hodnoty jeho pixelů trošku pozměníme tak, aby byly sudé nebo liché právě tam, kde se nám to bude hodit. Na první pohled se obrázek skoro nezmění, ale najednou můžeme do barevného obrázku nějaké krajinky schovat úplně jiný, černo-bílý obrázek stejné velikosti. Třeba písmena nějaké zprávy.
A nezapomeňme, že nám k tomuhle stačilo měnit jen ty modré části pixelů — modré jsme vybrali proto, že zrovna na drobné rozdíly v modré barvě jsou čípky lidského oka (vzpomeň si na první kapitolu) citlivé nejméně. Zvolili jsme tedy tu část informace, jejíž změna bude pro člověka co nejméně nápadná. Pokud bychom chtěli trochu zariskovat a použít pro schování zprávy i červenou a zelenou barvu, bude to sice ve výsledku trochu nápadnější, ale zase budeme moct do jednoho barveného obrázku schovat dokonce tři různé černo-bílé… a nebo jeden barevný. Sice ten schovaný obrázek nebude zvládat tolik různých odstínů jako obyčejné obrázky (256 různých možností pro každou ze tří základních barev), ale alespoň bude moct pro každý svůj pixel nějak nakombinovat „červená: 0 nebo 1, zelená: 0 nebo 1, modrá: 0 nebo 1“.
No a jak tohle schovávání tajných obrázků může vypadat v praxi, to si vlastnoručně vyzkoušíme v příští kapitole.