Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 7 - Krátké pojednání o digitální steganografii

V minulé lekci, Transformace souřadnic v rovině pomocí transformačních matic, jsme si ukázali algoritmus pro transformaci souřadnic v rovině.

Na úvod si odcitujme pojem Steganografie z Wikipedie:

„Steganografie (řečtina. steganós-schovaný, gráphein-psát) je vědní disciplína (podobor kryptografie) 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á. Síla této komunikace stojí a padá na jejím utajení (jedná se o takzvanou bezpečnost skrze utajení – security through obscurity), a proto zachycení skryté zprávy tak prakticky znamená její prolomení. Aby ani v tom případě nedošlo k prozrazení obsahu zprávy, zpravidla se kombinuje s dalšími metodami šifrování.“

Z historického hlediska lze konstatovat, že principy steganografie se objevují v zabezpečené komunikaci již od starověku. Již v antickém Řecku se používaly k přenosu skrytých zpráv nejrůznější principy. Kuriózním příkladem může být zpráva napsaná na holou lebku posla, která byla následně ukryta porostem vlasů.

My se však budeme bavit o současné digitální steganografii. Tajná zpráva může být zakódována na místo nepodstatného šumu v souborech se zvuky, obrázky, videem a podobně. V tomto pojednání se zaměřím jen na ukrývání textu do obrázku. Ze známých principů jsem zvolil princip ukládání textu do obrázku s využitím nejméně významného bitu LSB (Least Sgnificant Bit) v pixelu obrázku. Do každého pixelu obrázku mohu do složek R G B uložit 3 bity. Pro pokrytí české znakové sady potřebuji 10 bitů na jeden znak textu. Jeden znak tak uložím do 4 pixelů. Z toho lze vyvodit potřebnou velikost bitové mapy obrázku pro uložení daného textu.

Na příklad do obrázku 800 * 600 pixelů mohu uložit text o velikosti 120 000 znaků. Pro ověření principu jsem vytvořil program SteganoLSB v C# .NET.

Algoritmus

Nyní se pokusím komentovat algoritmus programu v části ukládání textu do obrázku a výběru textu z obrázku.

Proměnné a konstanty:

private double xRed; // redukovaná šířka obrázku
private double yRed; // redukovaná výška obrázku
private int[] maska = new int[] { 512,256,128, 64, 32, 16, 8, 4, 2, 1 };
private int pZapisTxtX = 0;  // pozice x počátku zápisu textu
private int pZapisTxtY = 0;  // pozice y počátku zápisu textu
private string kod = "0000";
private const int posunX = 10; // prostor pro zápis délky textu
private bool nápověda = true;

Pole maska umožňuje výběr bitů znaku, proměnné pZapisTxtX a pZapisTxtY určují pozici x a y v bitové mapě obrázku (jsou nastaveny bezpečnostním kódem). Zápis textu do obrázku začíná z této pozice. Informace o délce textu je uložena před tuto pozici na ose x s distanci posunX.

Ukládání bitů znaku do pixelu:

for (int x = sPosX; x < MyImage.Width; x++)
{
    for (int y = sPosY; y < MyImage.Height; y++)
    {
        if (pos > delka - 1) break;

        chardec = Convert.ToInt16(FullText[pos]);
        if (id == 1)
        {
            SD.Color pixel = MyImage.GetPixel(x, y);
            pxr = Convert.ToByte(pixel.R) & maska[9];
            pxg = Convert.ToByte(pixel.G) & maska[9];
            pxb = Convert.ToByte(pixel.B) & maska[9];
            pr = chardec & maska[0]; if (pr == 512) pr = 1; else pr = 0;
            pg = chardec & maska[1]; if (pg == 256) pg = 1; else pg = 0;
            pb = chardec & maska[2]; if (pb == 128) pb = 1; else pb = 0;
            if (pr != pxr)
            {
                R = Math.Abs(pixel.R - 1);
            }
            else R = pixel.R;

Protože se jedná o část metody, které jsou pozice x, y a délka textu předány voláním metody, text je ukládán do obrázku dle lokálních proměnných z pozice PosX a PosY. Text je převeden do pole znaků a dekadická prezentace znaku spolu s maskou vytvoří bitovou prezentaci. Jednotlivé bity jsou potom porovnány s nejnižším bitem bytu R G B pixelu a ten je posléze modifikován. Pro jeden znak se tato činnost opakuje následně ve 4 pixelech (v posledním je využit jen byte R).

Výběr textu z obrázku:

for (int x = sPosX; x < MyImage.Width; x++)
{
    for (int y = sPosY; y < MyImage.Height; y++)
    {
        if (pos > delkaTxt - 1) break;

            if (id == 1)
            {
                SD.Color pixel = MyImage.GetPixel(x, y);
                pxr = Convert.ToByte(pixel.R) & maska[9];
                pxg = Convert.ToByte(pixel.G) & maska[9];
                pxb = Convert.ToByte(pixel.B) & maska[9];
                charbin = pxr.ToString() + pxg.ToString() + pxb.ToString();
                id =2;
            }

Výběr textu z obrázku se děje opačným postupem. Pomocí masky je testován nejnižší bit bajtů R G B a postupně je skládána bitová presentace znaku. Po transformaci je znak zobrazen v textBoxu.

Algoritmus programu je jednoduchý, vytvoření vlastního testovacího programu byla potom rutinní záležitost. Na konci článku je program SteganoLSB přiložen k stažení. Program slouží nejen ke skrytí textu do obrázku, ale je také přístupovým kódem chráněn vstup pro výběr textu z obrázku. Toto zabezpečení lze ještě kombinovat kryptografickým zabezpečením textu. Lze např. použít můj program AES crypto Editor.

SteganoLSB – Ukrytí textu do obrázku - Grafické algoritmy

Doporučení

Pro testování používejte obrázky bitmap s příponou *.bmp nebo *.tif. Obrázky s příponou *.jpg nejsou vhodné, protože pro ukládání používají kompresi. Pro vytvoření bitmapy doporučuji můj program PictureViewer. Další se dozvíte v textu ukrytém v přiloženém obrázku. Kód pro vyjmutí textu je 1573.

Literatura

  • [1] Zpracování obrazu a algoritmy v C#, Dobeš Michal, 2008
  • [2] Výuková demonstrace digitální steganografie, Marek Bartík, 2013, Bakalářská práce
  • [3] Steganografie a stegoanalýza, Roman Žilka, 2008, Diplomová práce

V další lekci, Skrývání dat do obrazu, si ukážeme steganografické metody ukrývání textu do obrázku, obrázku do obrázku a zvukové stopy do obrázku.


 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 863x (1.18 MB)

 

Předchozí článek
Transformace souřadnic v rovině pomocí transformačních matic
Všechny články v sekci
Grafické algoritmy
Přeskočit článek
(nedoporučujeme)
Skrývání dat do obrazu
Článek pro vás napsal itnavi
Avatar
Uživatelské hodnocení:
14 hlasů
Autor se věnuje tvorbě a správě webových stránek a programování v C#
Aktivity