Tik-76.115 Tekninen määrittely

Stegano

http://
Viimeksi päivitetty .


Sisällysluettelo

1. Johdanto
2. Järjestelmän yleiskuvaus
3. Arkkitehtuurin kuvaus
4. Moduli (ja prosessi) -kuvaukset

Liite 1: The JPEG-format
Liite 2: The GIF-format


1. Johdanto

Tämä dokumentti

Luvussa 1 "Johdanto" määritellään ohjelmiston käyttäjät, tavoitteet, määritelmät ja termit sekä luetellaan lähteet.

Luvussa 2 "Järjestelmän yleiskuvaus" kuvataan lyhyesti järjestelmän käyttöympäristö ja yleiset rajoitteet.

Luvussa 3 "Arkkitehtuurin kuvaus" kuvataan ohjelmiston arkkitehtuuri ja ratkaisuperiaatteet.

Luvussa 4 "Moduli (ja prosessi)-kuvaukset" kuvataan yksityiskohtaisesti modulien rajapinnat ja sisältö.

Liittessä 1 "the JPEG-format" ja liitteessä 2 "the GIF-format" kuvataan kuvaformaattien rakennetta ja niille sopivia kätkemisalgoritmeja.

Käyttäjät

Ohjelmisto on tarkoitettu kaikille niille tietokoneen käyttäjille, joilla on jokin tarve lähettää lyhyitä sanomia kenenkään havaitsematta. Ohjelmisto soveltuu myös tutkimustyöhön.

Tavoitteet

Ohjelmiston tavoitteena on tarjota siirrettävä ohjelmakirjasto, joka tarjoaa turvallisen tavan kätkeä tietoa.

Lisäksi ohjelmakirjaston päälle rakennetaan unix- ja Windows käyttöliitttymät, joiden avulla mahdollistetaan kirjaston helppo käyttö ja joilla demonstroidaan kirjaston toimivuutta erilaisissa käyttöjärjestelmäympäristöissä.

Ohjelmiston tarkoituksena on toimia kokeiluvälineenä tutkimustyössä sekä osoittaa tiedon siirron täydellisen valvomisen olevan teknisesti mahdotonta.

Määritelmät ja termit

Lähdeluettelo

2. Järjestelmän yleiskuvaus

Sovellusalueen kuvaus

Steganograafisen systeemin ympäristö on kuvattu kuvassa 1. Lähettäjällä (sender) on jokin salainen viesti (secret message), jonka hän haluaa lähettää vastaanoottajalle (receiver) jotakin turvatonta kanavaa (insecure channel) esimerkiksi internetiä pitkin. Paitsi että lähettäjä ei tahdo kenenkään saavan tietää salaisen viestin sisältöä (tämän takaamiseksi riittäisi pelkästään viestin salaaminen jollain vahvoja kryptografisia algoritmejä käyttävällä ohjelmalla, kuten PGP:llä), vaan hän tahtoo ettei kukaan edes tiedä salaisen viestin olemassaolosta. Viestien huomaamatonta lähetystä varten salainen viesti kätketään johonkin viattomaan peitetiedostoon (cover file), kuten esimerkiksi digitoituun kuvaan.

Yleiskuva systeemistä
Kuva 1: Steganograafisen systeemin ympäristö

Tässä projektissa tehtävä ohjelmisto on itse tiedon kätkemisen suorittava ohjelmisto. Ohjelmisto soveltaa valittavia algoritmejä salaiseen viestiin ja peiteviestiin salaisen avaimen avulla tuottaen tuloksena kätköviestin. Ohjelmisto ilmenee kuvassa 1 laatikoina Hiding ja Extracting.

Käyttöympäristö

Projektin ensisijaisena tavoitteena on luoda siirrettävä ohjelmakirjasto, joka tarjoaa turvallisen tavan kätkeä tietoa. Kirjaston tulee olla mahdollisimman siirrettävä, eli käytön laitteistoympäristöstä riippumaton.

Ohjelmakirjaston päälle rakennetaan lisäksi käyttöliittymät UNIX- ja Windows95 ympäristöihin.

Yleiset rajoitteet

3. Arkkitehtuurin kuvaus

3.1 Päämodulit

Ohjelmisto koostuu kolmesta päämodulista (kuva 2): Käyttöliittymän tehtävänä on vastaanottaa käyttäjän komennot ja kutsua tarvittavia steganografisen kirjaston funktioita.

Steganografinen kirjasto suorittaa itse tiedon kätkemisen ja purkamisen. Stegografinen kirjasto toteuttaa varsinaiset steganografiset funktiot, kuten esimerkiksi tiedon kätkemiseen käytettävien bittien valinnan. Näissä se käyttää apunaan kryptografisen kirjaston tarjoamia kryptografisia perusfunktioita, kuten esimerkiksi IDEA-salausta.

Ohjelmiston päämodulit
Kuva 2: Ohjelmiston päämodulit

3.2 Päärajapinnat

Kuvan 2 kolmen päämodulin välillä on kaksi rajapintaa: Käyttöliittymän ja steganografisen kirjaston välisen rajapinnan tulisi olla sellainen että lisättäessä uusia peitetiedostoformaatteja tai kätkentäalgoritmejä steganografiseen kirjastoon käyttöliittymää tarvitsisi muuttaa mahdollisimman vähän.

Tässä työssä käytetään kryptografisena kirjastona Wei Dai:n Crypto++ 2.1:aa. Tällöin steganografisen ja kryptografisen kirjaston rajapinta on valmiiksi määritelty eli Crypto++:n ulkoinen rajapinta tarvittavin osin. Crypto++ on C++ kirjasto, joka tarjoaa kaikki tässä työssä tarvittavat kryptografiset perusfunktiot sekä monia muita. Haittapuolena tästä valinnasta on se että kirjaston käyttä rajoittaa muiden apukirjastojen kuten STL käyttöä, koska Crypto++ määrittelee osan perustietorakenteista (kuten vektorin) itse uudelleen.

4. Moduli (ja prosessi) -kuvaukset

4.1 Käyttöliittymät

Molempien käyttöliittymien (Unix ja Windows) pääasiallinen tehtävä on välittää käyttäjän komennot ohjelmistolle ja ohjelmiston viestit käyttäjälle. Yleisesti ottaen käyttöliittymä tulkkaa käyttäjän antamat komennot ja kutsuu steganografisia kirjastofunktioita oikeilla argumenteilla käyttäjän toiveiden mukaisesti. Ennen kirjastofunktiokutsuja käyttöliittymä lisäksi tarkastaa onko käyttäjän antamat argumentit yleensäkään lailliset. Lisäksi käyttöliittymä tulkkaa kirjastofuntioiden antamat vasteet ja ilmoittaa selvän ja kuvaavan ilmoituksen funktion tuloksesta.
Yksityiskohtainen kuvaus käyttöliittymän ja kirjastofunktioden välisestä kommunikaatiosta on kuvattu luvussa 4.2.1 Rajapinta käyttöliittymään.

4.2 Steganografinen kirjastomoduli

Kuva
Kuva 3: Steganografinen kirjasto

4.2.1 Rajapinta käyttöliittymään

Steganografinen kirjasto kommunikoi käyttöliittymän kanssa vain luokan CoverPool jäsenfunktion match ja luokasta Cover perittyjen ei-abstraktien luokkien julkisten jäsenfunktioiden kautta.

Luokan CoverPool tehtävänä on osaltaan mahdollistaa se, ettei käyttöliittymää tarvitse välttämättä muuttaa lisättäessä uusia peitetiedostotyyppejä. Luokka CoverPool sisältää jäsenfunktion match, jota kutsuttaessa luokka käy läpi kaikki ohjelmistoon implementoidut peitetiedostoformaatit yrittäen löytää formaatin, joka on sama kuin kutsussa annetun tiedoston.

Tyypillinen käyttöliittymän ja steganografisen kirjaston välinen kommunikaatio olisi:

  1. Käyttöliittymä kutsuu CoverPool-luokan funktiota match käyttäjän antamalla tiedoston nimellä.
  2. CoverPool-luokka antaa uuden instanssin oikeantyyppiseen Cover-luokasta perittyyn peitetiedostoluokkaan, esim. PGMCover.
  3. Käyttöliittymä avaa tiedoston kutsumalla PGMCover-luokan funktiota open.
  4. (Windows) käyttöliittymä kysyy PGMCover-luokalta, mitä algoritmejä ja metodeja se voi soveltaa viestin kätkemisessä ja näyttää nämä käyttäjälle. Kysely tapahtuu kutsumalla PGMCover-luokan funktioita compressionAlgorithms, encryptAlgorithms, selectors.
  5. Käyttäjän valittua algoritmit ja annettua salanan ja viestin käyttöliittymä kutsuu PGMCover-luokan funktiota hide, joka kätkee viestin peitetiedostoon.
  6. Käyttöliittymä tallettaa tiedoston levylle komennolla save.
Kuvassa 4 on esimerkki käyttöliittymärajapinnan tapahtumista kätkemisvaiheessa.

Esimerkki
Kuva 4: Esimerkki käyttöliittymärajapinnan tapahtumista (*)

(*) Erilaiset sovellettavien metodien/algoritmien kyselyt (esim. compressionAlgorithms) on esitetty yhdellä kyselyllä get applicaple methods.

4.2.2 Luokka CoverPool

(Cover.cpp, Cover.hh)

Julkiset jäsenfunktiot:

4.2.3 Luokka Cover

(Cover.cpp, Cover.hh)
(PGMCover.cpp, PGMCover.hh)
(GIFCover.cpp, GIFCover.hh)
(JPGCover.cpp, JPGCover.hh)

Virheiden käsittely
Ne jäsenfunktiot jotka voivat palauttaa virheen, palauttavat paluuarvonaan arvon 1 jos suoritus onnistui ja arvon 0 jos suoritus epäonnistui. Epäonnistuneen kutsun jälkeen virheen tarkempi tyyppi voidaan saada selville kutsumalla jäsenfunktiota error.
Julkiset jäsenfunktiot käyttöliitymärajapinnalla:
Huom. Virheissä ei ole erikseen mainittu sisäistä virhettä Internal error.
Suojatut jäsenfunktiot viestien bittien kirjoittamiseen ja lukemiseen
Nämä funktiot on tarkoitettu kirjoittamaan ja lukemaan peitetiedostosta kätkettyjä bittejä. Näitä kutsutaan luokista MessageHider ja MessageExtractor.
Funtio formaatin tunnistukseen
Lisäksi jokaisen peitetiedostoluokan tulee toteuttaa yksi staattinen funktio, joka tutkii onko annettu tiedosto sen formaatissa.

4.2.4 MessageHandler

(MessageHandler.cpp, MessageHandler.hh)

Tämän ja tästä johdettujen luokkien MessageHider ja MessageExtractor tehtävänä on eristää viestiin kohdistuvat toimenpiteet (pakkaus, salaus ja otsikon lisäys) omiksi luokiksi, jottei jokaisen Cover-luokasta johdetun peitetiedostoluokan tarvitsisi implementoida niitä erikseen.

4.2.5 MessageHider

(MessageHider.cpp, MessageHider.hh)

Kantaluokan MessageHandler funktioiden lisäksi:

Esimerkki siitä kuinka luokkaa MessageHider käytetään kätkentävaiheessa.

4.2.6 MessageExtractor

(MessageExtractor.cpp, MessageExtractor.hh)

Kantaluokan MessageHandler funktioiden lisäksi:

4.2.7 Kätköbittien valinta-algoritmit (Hiding bit selectors)

Näitä luokkia ei ole vielä tässä vaiheessa määritelty tarkkaan, koska erilaisilla algoritmeillä voi olla joitain omia vaatimuksiaan rajapintojen suhteen. Oletettavasti nämä kuitenkin ovat melko samanlaisia pseudosatunnaiseen permutaatioon pohjautuvan algoritmin rajapinnan kanssa.

Pseudosatunnaiseen permutaatioon pohjautuva kätköbittien valinta-algoritmi SelectPRP:

4.3 Kryptografinen kirjastomoduli

Kryptografinen kirjasto antaa steganografiselle kirjastolle useita työkaluja monimutkaisia algoritmeja vaativiin tehtäviin. Esimerkiksi peitetiedostoluokat (esim. PGMCover.cpp/ .hh) käyttävät kryptografista kirjastoa avainmateriaalin tuottamiseen kun taas MessageExtractor/ MessageHider käyttävät sitä viestin pakkaukseen/salaukseen.

Koska kryptografisen ja steganografisen kirjaston rajapinta on suoraan Crypto++ 2.1:n ulkoinen rajapinta tarvittavin osin ei sitä ole tässä erikseen määritelty.