Tik-76.115 Toiminnallinen määrittely
Stegano
http://
Viimeksi päivitetty
.
Sisällysluettelo
1. Johdanto
2. Yleiskuvaus
3. Tiedot
3.1. Tietovuokaavio
3.2. Otsikko
4. Toiminnot
5. Ulkoiset liittymät
5.1 Unix -käyttöliittymä
5.2 Windows -käyttöliittymä
6. Muut ominaisuudet
Yhteenveto
Ohjelmistolla on kaksi päätoimintoa: kätkeä tietoa peitetiedostoon
ja purkaa salattu tieto kätköviestistä. Piilotettaessa tietoa
peitetiedostoon käyttäjä antaa ohjelmistolle avaimen, jonka avulla
kätkentäbitit valitaan. Salattu tieto saadaan ulos kätköviestistä
vain samalla avaimella. Käyttäjä voi halutessaan valita
kompressio-algoritmin, salausalgoritmin ja kätkemisalgoritmin ja
kätköbittien valinta-algoritmin, mutta ohjelmisto osaa valita nämä
automaattisestikin.
Salaisen viestin lisäksi peitetiedostoon pitää laittaa tietoa viestistä
(nimi, pituus) ja sen esikäsittelytavoista. Tämän vuoksi salaiseen
viestiin liitetään tarkoin määritelty otsikko-kenttä joka sisältää
tarvittavat tiedot.
Käyttöliittymät toteutetaan UNIX- ja Windows-ympäristöihin.
UNIX-käyttöliittymä on yksinkertainen komentorivipohjainen liittymä,
kun taas Windows-liittymä on graafinen.
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 "Yleiskuvaus"
kuvataan lyhyesti järjestelmän käyttöympäristö ja yleiset rajoitteet.
Luvussa 3 "Tiedot"
kuvataan järjestelmän käsittelemän tiedon kulkua ja tietosisältöä.
Luvussa 4 "Toiminnot"
kuvataan kaikki käyttäjän valittavissa olevat toiminnot.
Luvussa 5 "Ulkoiset liittymät"
kuvataan käyttöliittymät:
Unix -käyttöliittymä ja
Windows -käyttöliittymä
Luvussa 6 "Muut ominaisuudet"
kuvataan ohjelmiston ei-toiminnallisia ominaisuuksia.
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öliittymä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
- Kätkentäbitti (hiding bit)
Sellainen peitetiedoston kohinainen bitti, johon salainen viesti
kätketään. Kaikki kohinaiset bitit eivät ole välttämättä
kätkentäbittejä.
- Peitetiedosto (cover file)
Tiedosto, johon salainen viesti kätketään. Tiedoston täytyy
sisältää kohinaa, johon salainen viesti kätketään.
- Kätköviesti (stego message)
Peitetiedosto kätkennän jälkeen, eli viesti, joka kuljettaa
kätkettyä salaista viestiä.
Lähdeluettelo
- Bruce Schneier. Applied Cryptography. John Wiley & Sons, Inc. 1996.
- Tuomas Aura. Practical invisibility in digital communication, Workshop on Information Hiding, University of Cambridge, May 1995.
- Maxwell T. Sandford II, Jonathan N Bradley, and Theodore G. Handel. The data embedding method. In Proceeding of the SPIE Photonics East Conference, Philadelphia, September 1995.
- Michael Luby and Charles Rackoff. How to construct pseudorandom permutations from pseudorandom functions. SIAM Journal on Computing, 17(2):373-386, April 1988.
- Steffen Möller, Andreas Pfizmann, and Ingo Stierand. Rechnergstutzte Steganographie: Wie sie funktioniert und warum folglich jede Reglementierung von Verschlusselung unsinnig ist. Dateschultz und Datensicherung, (6):318-326, June 1994.
- gif89a.doc
- bmp.doc
- pbm.html
- jpeg
Projetissa kehitetään kirjasto, jonka avulla voidaan rakentaa
ohjelmisto sanoman kätkemiseksi peitetiedostoon. Seuraava kuva kuvaa tilanteen
jossa projektissa kehitettyä ohjelmaa voidaan käyttää.

Kuva 1: Projektin tarkoitus
Tarkempi kuvaus löytyy vaatimusmäärittelystä.
Lisäksi projektissa tehdään käyttöliittymät Unix ja Windows ympäristöihin. Unixiin tehdään komentorivipohjainen
käyttöliittymä ja Windowsiin tehdään valikko/nappi -pohjainen
käyttöliittymä. Kirjaston tekemiseen käytetään valmiita kryptografisia- ja
formaattikirjastoja. Käytettävät algoritmit ja formaatit esitellään
tarkemmin seuraavassa vaiheessa. Kirjasto toteutetaan C++ kielellä.
Kryptografisena kirjastona tullaan ensisijaisesti käyttämään Crypto++ 2.0
kirjastoa ja tiedostoformaateissa apuna käytetään kirjastoja
netpbm (bmp, gif) ja Independent JPEG Group's free JPEG software.
Käyttäjä syöttää järjestelmälle avaimen, peitetiedoston ja
salaisen sanoman (avattaessa vain avaimen ja peitetiedoston).
Kuvassa 2
on esitetty karkea tietovuokaavio kätkentävaiheesta.

Kuva 2: Kätkentävaiheen tietovuokaavio
Vuokaavio sanallisesti selitettynä:
- Käyttäjän valitsema peitetiedosto (cover file)
sisältää sekä kätkentäbittejä (cover bits)
(kuva voidaan ajatella mittausdataksi, jolloin kätkentäbitit
ovat mittausdatan vähiten merkitseviä bittejä) että muita
ei-kätkentäbittejä (non-cover bits).
- Ei-kätkentäbiteistä muodostetaan yhdessä käyttäjän antaman
mielivaltaisen pitkän salasanan (passphrase) kanssa
jollakin menetelmällä (esimerkiksi SHA-algoritmillä)
avainmateriaalia (key material), josta muut kätkennässä
käytettävät algoritmit saavat avaimensa.
- Käyttäjän antama kätkettävä viesti (plain message)
kompressoidaan niin haluttaessa ja siihen lisätään seuraavassa
alikappaleessa määriteltävä otsikkokenttä, joka kertoo mm.
viestin pituuden ja käytetyn kompressiomenetelmän.
- Kompressoitu otsikollinen viesti salataan otsikoineen jollain
symmetrisellä salausalgoritmillä (encrypt),
jolloin saadaan piilotettava viestidata (message to hide).
- Peitetiedoston kätkentäbiteistä (cover bits) valitaan
(select hiding bits) valinta-algoritmilla
(esim. pseudorandom permutation) ne bitit, joihin piilotettava
viestidata sisällytetään (substitute).
Jotta salattu sanoma voidaan purkaa oikein peitetiedostosta, täytyy sanoman
lisäksi kätkeä otsikko, joka sisältää sanomatiedoston nimen,
käytetyn kompressio-algoritmin, käytetyn viestin pituuden ja tunnuksen
algoritmille jolla sanoma on kätketty tiedostoon. Seuraavassa kuvassa on
esitetty tämän otsikon rakenne ja kenttien pituudet.

Kuva 3: Kätketyn tiedon otsikko
Information -kentän alikentän "length of the message length" arvo ilmaisee kuinka monta tavua tarvitaan viestin pituuden ilmaisemiseen. Kentän arvo 00 merkitsee että viestin pituuden ilmaisemiseen tarvitaan 1 tavu. Arvo 01 merkitsee 2
tavua, arvo 10 merkitsee 3 tavua ja arvo 11 merkitsee 4 tavua.
Alikentän "reserved for future use" bitit ovat toistaiseksi käyttämättä ja niitä voidaan käyttää esimerkiksi Steganon mahdolliseen jatkokehitykseen.
Varsinaisen tiedostonimen loppuun lisätään null -merkki, joka ilmoittaa
tiedostonimen ja koko otsikon päättymisen. Siten tiedostonimen pituus
voi olla minimissään yksi (1) tavu (tällöin lukeminen tapahtuu esim.
UNIX:ssa stdin:stä).
Otsikossa eniten merkitsevä tavu on kaikkein vasemmanpuoleisin ja
vähiten merkitsevä tavu on kaikkein oikeanpuoleisin. Tavun eniten
merkitsevä bitti on vasemmanpuoleisin ja vähiten merkitsevä bitti on
oikeanpuoleisin.
Sanoman kätkemisnopeus riippuu hyvin paljon käytetyistä
algoritmeista ja kuvaformaatista. Oletamme näiden algoritmien
olevan tehokkaita. Vaatimukseksi tehokkuuden osalta projektissa tehtävälle
ohjelmalle on asetettu, että ohjelma pyritään totettamaan mahdollisimman
optimaalisesti. Siten sen ei tulisi heikentää käytettävien algoritmien
toimintaa oleellisesti. Edellä oleva pätee myös kapasiteettivaatimuksille.
Käyttäjältä vaadittavat syötteet kunkin toiminnon aikaansaamiseksi
(molemmille käyttöliittymille) on kuvattu tarkemmin
Luvussa 5.
Ohjelmistolla on kaksi perustoimintoa:
Salaisen viestin piilottaminen peitetiedostoon ja
peitetiedostoon piilotetun salaisen viestin avaaminen
selväkieliseen muotoon. Piilotettaessa on käyttäjän annettava
avain, peitetiedoston nimi ja salainen (piilotettava) sanoma.
Avattaessa riittää peitetiedoston nimi ja avain.
Näiden lisäksi käyttäjällä on valittavissaan useita optioita:
- Kompressio-algoritmi
Ennen tiedon piilottamista salaista viestiä on mahdollista
esikäsitellä pakkaamalla sen. Pakkausta kannattaa yleensä
käyttää sillä sen avulla kuvaan voi kätkeä enemmän tietoa,
ja koska kätkettävä data on pakattu kuvaa tarvitsee muuttaa
vähemmän.
- Kätköbittien valinta-algoritmi
Algoritmi jolla kätköbitit kuvasta valitaan on myös käyttäjän
valittavissa. Mikäli käyttäjä ei tätä valintaa tee, käyttää
ohjelmisto automaattisesti oletusarvoksi valittua algoritmia.
- Salausalgoritmi
Salausalgoritmi (esim. IDEA, DES) jolla viesti kryptataan voidaan
halutessa valita tai käyttää oletusarvoista algoritmia.
Kätkemisen jälkeen ohjelma kertoo, kuinka suuri osa mahdollisista
kätkentäbiteistä tuli käytettyä.
Projektissa tehdään siis käyttöliittymät sekä UNIX:iin että
Windowsiin. Näin on tarkoitus osoittaa kirjaston siirrettävyys
sekä antaa esimerkki kirjaston käytöstä. Seuraavissa kappaleissa
on kuvattu molemmat käyttöliittymät.
5.1 Unix -käyttöliittymä
Unixin käyttöliittymä on komentorivipohjainen. Seuraavassa
manuaalisivussa on esitetty käytettävät valitsimet ja niiden tehtävä.
NAME
stegano - hide/extract messages in/from image files
SYNOPSIS
stegano -h [-v] [-q] [-f msgfile] [-r selector] [-c compression algorithm]
[-s encryption algorithm] key coverfile stegofile
stegano -e [-v] [-t] [-r selector] [-s encryption algorithm] key stegofile
stegano coverfile
DESCRIPTION
Stegano is a steganography program that hides files in images.
A secret key is used to hide the data into a cover file, extracting
(or detecting that there is any data hidden) is not possible without
the correct key.
It's possible to select which compression, encryption and selection
algorithms program will use. You can see the list of algorithms a
cover file supports by typing 'stegano coverfile'.
FLAGS
-h Encrypt and hide a file into the cover file.
-e Extract and decrypt a file hidden in the cover file.
-v Verbose mode, displays more detailed information.
-q Doesn't display hiding statistics.
-t Shows the original name and lenght of the hidden message.
-f msgfile
Read the data from file 'msgfile' instead of standard input.
The same file name will be used when extracting the data.
-s ea
Choose encryption algorithm. 'ea' is the name of the used algorithm.
If you don't use this option when extracting, Stegano will try
to decrypt file with every possible encryption algorithm. It's
not necessary to type the full name of the algorithm.
-c ca
Choose compression algorithm. 'ca' is the name of the used algorithm.
This option is not used when extracting the message. It's not necessary
to type the full name of the algorithm.
-r sa
Choose selector algorithm. 'sa' is the name of the used algorithm.
It's not necessary to type the full name of the algorithm.
PARAMETERS
key
The secret key which is used hiding/extracting the message in/from
the cover file.
coverfile
The name of the cover file where the message will be hidden.
stegofile
The name of the cover file which includes the hidden message.
EXAMPLES
1. To hide msgdile into the 'picture.gif' using IDEA encrytion
algorithm, enter:
Stegano -h -f msgfile -s ID abcdef picture.gif picture2.gif
In this example 'abcdef' is the secret key.
2. To extract the hidden message enter:
Stegano -e abcdef picture2.gif
5.2 Windows -käyttöliittymä
Windows-ympäristöön tehty käyttöliittymä on pyritty tekemään
mahdollisimman "Windowsmaisesti" siten, että jokainen, joka on aiemmin
joskus käyttänyt Windowsia, osaa käyttöliittymää käyttää.
Tässä luvussa on esitelty käyttöliittymän tyyli ja käytön
perusperiaate. Ikkunoiden lopullinen asu ja toiminnat tulevat
luultavasti jonkin verran muuttumaan ohjelmiston kehittyessä.
Kun ohjelma käynnistetään, avautuu stegano-sovelluksen
perusnäyttö. Perusnätössä käyttäjä valitsee joko viestin piilotuksen
peitetiedostoon (hide-toiminto) tai viestin purkamisen
peitetiedostosta (extract-toiminto). Näiden toimintojen lisäksi
menuvalikoissa on valittavina Windowsin yleisperiaatteen mukaisesti
ikkunoiden hallintaan liittyviä toimintoja, sekä help-toiminnot.
Kun käyttäjä valitsee viestin piilotuksen peitetiedostoon avautuu
seuraavan kuvan kaltainen ikkuna, jossa peitetiedosto valitaan.

KUVA 4: Peitetiedoston valinta hide-toiminnossa
Peitetiedosto valitaan Windowsille tyypillisen ikkunan
avulla, jolla voidaan kätevästi selailla tiedostojärjestelmään
talletettuja tiedoston nimiä.
Kun käyttäjä on valinnut peitetiedoston päästään varsinaiseen viestin
piilotusvaiheeseen, jossa käyttäjä syöttää piilotettavan viestin tai
jos käyttäjä haluaa piilottaa peitetiedostoon olemassa olevan
tiedoston, niin käyttäjä syöttää tämän tiedoston
nimen. Käyttäjä voi kirjoittaa piilotettavan tiedoston nimen suoraan
sille varattuun paikkaan tai tiedoston voi valita myös
"browse"-aputoiminnon avulla.
Lisäksi käyttäjä valitsee piilotuksessa käytettävät algoritmit
sekä luonnollisesti antaa piilotuksessa käytettävän avaimen.
Viestin kätkemisessä käytettävät algoritmivaihtoehdot sekä
oletusarvoiset algoritmit määräytyvät peitetiedoston tyypin perusteella.
Piilotusvaiheen tietojensyöttöikkunan lisäksi näyttöön avautuu ikkuna
jossa näytetään peitetiedoston sisältämä kuva. Seuraavassa kuvassa on
esitetty stegano-sovelluksen ulkoasu peitetiedoston valinnan jälkeen
viestin piilotustoiminnossa.

KUVA 5: Viestin piilotus
Kun kaikki tarvittavat tiedot on annettu, suoritetaan varsinainen
kätkeminen. Kun kätkeminen on tehty, avautuu alkuperaisen kuvan sisältävän
ikkunan viereen ikkuna, jossa on esitetty kuva, johon viesti on
kätketty. Näin voidaan tarkastella kuvien eroja ja algoritmien
toimivuutta.
Kuvien lisäksi ohjelma tulostaa käyttäjälle tilastotietoa
kätkemisestä.
Jos käyttäjä on aloitustilanteessa valinnut viestin purkamisen
peitetiedostosta, valitsee hän peitetiedoston vastaavalla tavalla kuin
viestin piilotuksessakin (Ks. Kuva 4). Peitetiedoston valinnan jälkeen
avautuu viestin purkamiseen tarvittavien tietojen syöttöikkuna sekä
ikkuna, jossa on peitetiedoston sisältämä kuva.

KUVA 6: Viestin purkaminen
Tässä ikkunassa käyttäjä syöttää kätkettäessä
käytetyt algoritmit. Algoritmivaihtoehdot sekä oletusalgoritmit
riippuvat peitetiedoston tyypistä.
Jos valitusta kuvatiedostosta löytyy viesti ja avain on oikea,
tulostetaan löydetty viesti ikkunan alalaidassa olevaan
laatikkoon. Jos viestinä oli käytetty
tiedostoa, käyttäjältä kysytään millä nimellä tiedosto talletetaan
(oletusarvona on kätketyn tiedoston nimi).
6. Muut ominaisuudet
Ohjelmiston ei-toiminnallisia ominaisuuksia ovat:
- Ohjelmakirjaston modulaarisuus
Uusien algoritmien ja peitetiedostoformaattien lisäyksen tulee
olla helppoa.
- Ohjelmakirjastoon valittavien algoritmien tulee olla parhaan saatavissa
olevan tiedon pohjalta mahdollisimman turvallisia.
Algoritmien turvallisuuden arvioi projektin asiakas.
- Ohjelmakirjastossa käytetään hyväksi mahdollisimman paljon valmiita
kryptografisia kirjastoja.
- Ohjelmakirjasto ja siten myös käyttöliittymällä varustetun ohjelmiston
suorituskyky riippuu voimakkaasti valituista algoritmeista ja
valmiista kryptografisista kirjastoista.
Ohjelmiston turvallisuutta ei vaaranneta valitsemalla
nopeampia mutta vähemmän turvallisia algoritmejä.
Ohjelmistoon itse kirjoitettavan ohjelmakoodin ei tule ratkaisevasti
huonontaa suorituskykyä.
- Ohjelmakoodin tulee olla hyvän ohjelmointitavan mukaan kirjoitettua ja
hyvin kommentoitua itse kirjoitettavan koodin osalta. Tämä
pätee erityisesti ohjelmakirjastoon.