Tik-76.115 Ylläpito-ohje
Stegano
http://
Viimeksi päivitetty
.
Sisällysluettelo
1. Johdanto
2. Ympäristö
3. Tukiohjelmat
4. Järjestelmän komponentit
5. Ylläpitotehtävät
6. Ohjelmiston kuvaus
Tämä dokumentti kuvaa kuinka Stegano -ohjelmisto asennetaan ja kuinka sitä
voidaan ylläpitää ja kehittää.
Ohjelmistossa käytettävä erikoissanasto.
1.1 Sovellusalueen kuvaus
Steganografisen 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.

Kuva 1: Steganograafisen systeemin ympäristö
Stegano on tiedon kätkemisen ja purkamisen 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.
Ohjelmiston tekemiseen on käytetty kahta valmista, vapaassa levityksessä olevaa
kirjastoa: Wei Dain kryptografista kirjastoa Crypto++ 2.1 ja Independent JPEG
Group'n JPEG -kirjastoa (versio 6a). Crypto++ 2.1 kirjasto sisältyy
ohjelmistoon kokonaisuudessaan, mutta JPEG -kirjastosta on jätetty pois siinä
valmiina olevat käyttäjän ohjelmat.
Stegano kirjasto toimii sekä Unix että Windows -95 käyttöjärjestelmissä.
Ohjelmistolla
ei ole mitään erityisiä laitteisto vaatimuksia. Se toimii hyvin
486 50MHz PC:ssä, jossa on 20 Mt muistia ja käyttöjärjestelmänä Linux RedHat.
Varsinkin suurien viestien kätkemiseen suositellaan kuitenkin vähintään Pentium
-prosessorilla varustettua konetta.
Ohjelmisto on tehty käyttäen C++ -ohjelmointikieltä lukuunottamatta IJG:n JPEG
-kirjastoa, joka on ohjelmoitu C -kielellä. Ohjelmisto kääntyy ainakin
GNU g++ kääntäjällä ja Visual C++ kääntäjällä.
Ohjelmisto ei tarvitse mitään erikoisia työkalu- tai muita tukiohjelmistoja.
Unixissa tarvitaan C++ kääntäjä (GNU g++ testattu) ja make -ohjelma.
Windows -95:ssä tarvitaan ohjelmiston kääntämiseksi Visual C++ kääntäjä
(saattaa toimia muillakin).
Windows -95 versio sisältää ohjelmiston mukana kuvien katseluoption.
Unix -versioon ei sisälly kuvankatseluoptiota, joten siihen tarvitaan erillinen
ohjelma esim. XView.
Ohjelmiston testaus tapahtuu yksinkertaisesti siten, että kuviin kätketään
sanoma ja se luetaan sieltä pois. Sanoman tulee säilyä täsmälleen samanlaisena
kuin alkuperäinen, kätketty sanoma. Unixissa sanomia voidaan verrata esim.
diff -komennolla. Kun kuvaan on kätketty sanoma, on hyvä tarkistaa, ettei
kuvaan tule visuaalisesti huomattavaa muutosta.
Kaikki ohjelmiston toimintaan tarvittavat osat toimitetaan yhdessä paketissa.
Siten siihen sisältyvät myös Crypto++ 2.1 ja JPEG -kirjastot.
Stegano -ohjelmistoon kuuluvat tiedostot.
- ../crypto21src
Crypto++ 2.1 kirjaston lähdekoodi.
- Cover.cpp
Peitetiedostojen abstraktiluokan metodit.
- Cover.hh
Peitetiedostojen abstraktiluokan määrittely.
- Error.cpp
Virheenkäsittelymetodien toteutukset.
- Error.hh
Virheenkäsittelyn määrittelyt.
- Makefile
Makefile koko ohjelmiston kääntämiseen Unixissa.
- Parameter.cpp
Parametrien metodien toteutukset.
- Parameter.hh
Parametrien käsittelyn määritykset.
- gif/
GIF -kuvaformaatin käsittelyyn tarvittavat rutiinit.
- GIFCover.cpp
GIF -kuvaformaatin käsittelyyn tarvittavien metodien toteutus.
- GIFCover.hh
GIF -kuvaformaatin käsittelyyn tarvittavan luokan määrittely.
- jpg/
JPEG -kuvaformaatin käsittelyyn tarvittavat rutiinit sekä IJG:n
JPEG -kirjasto.
- JPGCover.cpp
JPEG -kuvaformaatin käsittelyyn tarvittavien metodien toteutus.
- JPGCover.hh
JPEG -kuvaformaatin käsittelyyn tarvittavan luokan määrittely.
- JPEG kirjaston tiedostokuvaus.
- main.cpp
Ohjelmistoon kuuluva, steganografiselle kirjastolle
tehty Unix -käyttöliittymä.
- main.hh
Joitakin määrityksiä ohjelmiston käyttöliittymään.
- message/
Kätkettävien viestien käsittelyyn liittyvät rutiinit.
- MessageExtractor.cpp
Viestien lukemiseen tarvittavien metodien toteutus.
- MessageExtractor.hh
Viestien lukemiseen tarvittavan luokan määrittely.
- MessageHandler.cpp
Viestien lukemiseen ja kätkemiseen tarvittavien yhteisten
metodien toteutus.
- MessageHandler.hh
Viestien lukemiseen ja kätkemiseen tarvittavan yhteisen luokan
määrittely.
- MessageHider.cpp
Viestien kätkemiseen tarvittavien metodien toteutus.
- MessageHider.hh
Viestien kätkemiseen tarvittavan luokan määrittely.
- misc/
Ohjelmistoon kuuluvia sekalaisia luokkia ja metodeja.
- BitVector.cpp
- BitVector.hh
- ByteString.cpp
- ByteString.hh
- objs/
Ohjelmiston käännöksen aikana tuotettavat objektitiedostot sijoitetaan
tähän hakemistoon.
- pgm/
Tämä hakemisto sisältää tiedostot, joissa on PGM -kuvaformaatin
käsittelyyn tarvittavat rutiinit.
- PGMCover.cpp
PGM -kuvaformaatin käsittelyyn tarvittavien metodien toteutus.
- PGMCover.hh
PGM -kuvaformaatin käsittelyyn tarvittavan luokan määrittely.
- selectors/
Algoritmit, joiden avulla valitaan sopivat pikselit (tai vast.) kuvasta
sanoman kätkemistä varten.
- ArraySelector.hh
Yhteinen määrittely kaikille Array -tyyppisille
valinta-algoritmeille.
- BUSelect.cpp
- BUSelect.hh
- RandomIndex.hh
Yhteinen määrittely kaikille Random Index -tyyppisille
valinta-algoritmeille.
- RandomIndexArray.cpp
Random Index Array -valinta-algoritmin toteutus.
- RandomIndexArray.hh
Random Index Array -valinta-algoritmin määrittely.
- RandomIndexTable.cpp
Random Index Table -valinta-algoritmin toteutus.
- RandomIndexTable.hh
Random Index Table -valinta-algoritmin määrittely.
- SelectPRP.cpp
Pseudo Random Permutation -valinta-algoritmin toteutus.
- SelectPRP.hh
Pseudo Random Permutation -valinta-algoritmin määrittely.
- Selector.cpp
Kaikille valinta-algoritmeille yhteisen osan toteutus.
- Selector.hh
Kaikille valinta-algoritmeille yhteiden osan määrittely.
- TableSelector.hh
Yhteinen määrittely kaikille Table -tyyppisille
valinta-algoritmeille.
Ohjelmiston toimintoja on kuvattu toiminnallisessa määrittelyssä.
Ohjelmiston asennus:
Ohjelmiston asennus on melko helppoa. Seuraavassa kuvaus ohjelmiston
asennuksen vaiheista.
- Crypto 2.1 kirjaston konfigurointi. Hakemistosta crypto21src
löytyy tiedosto config.h. Tiedosto kannattaa käydä läpi ja valita ko.
järjestelmälle oikeat parametrit. Tärkeimmät kohdat ovat seuraavat:
käsitteleekö järjestelmä teksi- ja binaaritiedostoja eri tavalla ja
käytetäänkö LITTLE ENDIAN prosessoria.
- IJG:n JPEG -kirjaston konfigurointi.
Unixissa kannattaa yrittää ajaa
configure skripti, joka luo tarvittavan Makefilen. Mikäli skripti
ei toimi ko. järjestelmässä joudutaan Makefile konfiguroimaan käsin.
Tarkempia ohjeita löytyy ohjelmiston jpg -hakemistosta tiedostosta
install.doc. Huomaa, että myös JPEG -kirjasto tulee kääntää C++
kääntäjällä, sillä C -kääntäjällä käännetty JPEG -kirjasto ei
todennäköisimmin toimi muun ohjelmiston kanssa.
- Ohjelman kääntäminen. Ohjelmiston päähakemistossa oleva Makefile
suorittaa ohjelmiston kääntämisen. Siten ohjelman päähakemistossa tulee
antaa vain komento make. Käännetty ohjelmiston binaaritiedosto
tulee ohjelmiston päähakemistoon.
Ohjelmistoa ei jatkokehitetä työryhmän puolesta eikä ohjelmistolle anneta
minkäänlaista käyttötukea. Siten myöskään ohjelmistosta ei ole tulossa
päivityksiä. Bugeista voi kuitenkin lähettää tietoja
työryhmälle, mutta niille ei luvata
tehtävän mitään.
Stegano -kirjasto on pyritty tekemään mahdollisimman modulaariseksi. Tämän
vuoksi uusien ominaisuuksien lisääminen kirjastoon on melko helppoa. Kirjastoon
voidaan lisätä uusia salausalgoritmeja, pakkausalgoritmejä, valinta-algoritmejä
ja uusia kuvaformaatteja tekemättä muutoksia varsinaiseen kirjaston runkoon.
Lisäksi uusien toteutettujen ominaisuuksien liittäminen jo olemassa olevien
ominaisuuksien kanssa on vaivatonta.
Jotta ohjelmiston tiedostorakenne säilyisi selkeänä, kannattaa tiedostot jakaa
samalla tavalla hakemistoihin kuin ne nyt ovat. Uudet valinta-algoritmit
kannattaa laittaa selectors -hakemistoon, uudet kuvaformaatit omiin
hakemistoihinsa jne.
Ohjelman koodin pitäisi olla melko helppolukuista. Siten uusia ominaisuuksia
lisättäessä kannattaa vastaavaa koodia katsoa valmiista ohjelmasta.
Kuvaformaateille selkein esimerkki lienee PGM. Varsinkin JPEG sisältää joitakin
erikoisuuksia johtuen käytetetystä JPEG -kirjastosta, joten se ei välttämättä
anna hyvää kuvaa millainen kuvaformaatin käsittelyn periaate on.
Seuraavassa on viitteitä muiden ohjelmiston dokumenttien osiin, jotka
helpottavat ohjelmiston rakenteen ja riippuvuuksien ymmärtämistä.
Tiedon kulku eri osien välillä.
Kirjaston rakenne.
Moduli- ja prosessikuvaus.
Luokkien ja metodien kuvaus.