E07/ELO/02 Diepenbeek, 2007

Steganografische systemen gebaseerd op levende talen, met menselijke interactie

rapport over het eindwerk van

Alexander ALDERWEIRELDT en Tim THAENS

kandidaten voor de graad van Industrieel Ingenieur in de elektronica

Promotoren: prof. dr. ir. B. Preneel dr. ir. P. Valckenaers Abstract

Het onderwerp van deze masterproef werd uitgeschreven door COSIC (COmputer Secu- rity and Industrial Cryptography), een onderzoeksgroep binnen de K.U.Leuven, die zich toespitst op cryptografie en netwerkbeveiliging. Een typisch probleem met lingu¨ıstische steganografie is dat het moeilijk is om aandacht aan de semantische samenhang van het resultaat te besteden. Indien geautomatiseerd, kunnen zinnen onnatuurlijk gaan lijken of op subtiele manier wijzigen in betekenis, waardoor ze niet meer in hun oorspronke- lijke context passen. Dit rapport stelt een oplossing voor die menselijke interactie aan de steganografische engine toevoegt.

Dit werd gerealiseerd in een IRC-module voor X-Chat, ontwikkeld in de programmeer- taal . De menselijke interactie wordt voorzien door middel van een grafische pop-up. In deze pop-up kan de gebruiker een keuze maken tussen verschillende voorgestelde syno- niemen. Dit resulteert in zinnen die volkomen in de context van het IRC-gesprek passen. Eerst wordt een sessiesleutel vastgelegd tussen beide gebruikers. Vervolgens wordt aan ieder synoniem een binaire representatie toegekend die afhankelijk is van de verkregen sessiesleutel. Alle synoniemen met hun bijhorende representatie worden bijgehouden in een codetabel. Ten slotte wordt het over te brengen bericht gecodeerd met een stroom- cijfer. Deze codering zorgt voor een extra beveiliging en laat een ononderbroken stroom van data toe.

In deze masterproef werd een werkende implementatie ontwikkeld die een stego-engine bevat. Deze stego-engine stelt voor elk woord een aanvaardbaar aantal synoniemen voor, zodat de met elkaar communicerende gebruikers synoniemen kunnen kiezen die geloofwaardige zinnen produceren, passend in de context. Ook zijn er enkele voorstellen besproken voor verdere ontwikkeling, zoals het verhogen van de payload en het com- primeren van de data. Voorwoord

Graag willen wij alle mensen bedanken die hebben bijgedragen aan het goede verloop van deze thesis.

Allereerst willen wij de promotor van de onderzoeksgroep Prof. Dr. Ir. Bart Preneel bedanken, die ons de kans heeft gegeven deze thesis te mogen uitwerken.

Verder willen wij de promotor van onze school Dr. Ir. Paul Valckenaers bedanken voor de deskundige begeleiding en het beantwoorden van onze vragen.

Wij bedanken eveneens onze dagelijkse begeleiders Lic. Karel Wouters en Lic. Brecht Wyseur, die steeds voor ons klaar stonden met hun deskundige begeleiding. Niet enkel hebben ze ons geholpen met een inleiding tot cryptografie en steganografie, maar ook met druk te leggen op het schrijven van de tekst. Eveneens hebben ze ons op iedere vlotte en plezante vergadering in de goede richting gestuurd. Verder zijn ze ook steeds een bron van vele leerrijke veranderingen en boeiende idee¨en voor ons geweest.

Verder willen wij onze ouders bedanken. Zonder hen was het niet mogelijk om deze opleiding te volgen.

Als laatste willen wij iedereen bedanken die interesse getoond heeft in deze thesis.

Ik, Alexander, zou graag mijn vriendin Leen bedanken voor de steun en de nodige ontspanning die ze mij gaf gedurende mijn studies en de uitvoering van deze thesis.

Alderweireldt Alexander Thaens Tim 29 mei 2007 Inhoudsopgave

Abstract 2

Voorwoord 3

Inhoudsopgave 5

Lijst van figuren 7

Lijst van tabellen 8

1 Inleiding 9 1.1 COSIC ...... 10 1.2 Probleemstelling ...... 11 1.3 Overzicht van de tekst ...... 11

2 Achtergrondinformatie 13 2.1 Cryptografie ...... 13 2.1.1 Symmetrische algoritmes ...... 14 2.1.2 Asymmetrische algoritmes ...... 16 2.1.3 Combinatie van asymmetrische en symmetrische algoritmes . . . . 18 2.1.4 Hashfuncties ...... 19 2.1.5 MAC: Message Authentication Code ...... 20 2.2 Steganografie ...... 20 2.2.1 Steganografische systemen ...... 20 2.2.2 Steganografische schuilobjecten ...... 22 2.2.3 Lingu¨ıstische steganografie ...... 27 2.3 IRC ...... 28 2.3.1 Introductie ...... 28 2.3.2 Uitbreiden van een IRC-implementatie: plugin vs. script ...... 30 2.3.3 Keuze van de IRC-cli¨ent ...... 31 2.4 Programmeeromgeving ...... 33 2.4.1 Besturingssystemen ...... 33 2.4.2 Gebruikte bibliotheken ...... 33 2.4.3 Documentatie ...... 34

3 Theoretisch model 35 3.1 Architectuur ...... 35 3.1.1 Systeembeschrijving ...... 35 3.1.2 Stego-engine ...... 36 3.1.3 Data-structuur ...... 38 3.1.4 Menselijke interactie ...... 39 3.2 Cryptografische primitieven ...... 39 3.2.1 Vastleggen van de sessiesleutel ...... 40 3.2.2 Sleutelafleidingen ...... 42 3.3 Codetabel ...... 44 3.3.1 Situering ...... 44 3.3.2 Codetabel generatie ...... 45 3.3.3 Codetabel optimalisatie ...... 46 3.3.4 Eventuele uitbreidingen ...... 50

4 Implementatie 52 4.1 Plugin ...... 52 4.1.1 Minimumvereisten ...... 52 4.1.2 Installatie ...... 53 4.1.3 Initialisatie ...... 53 4.1.4 Aanmaken van het data-bestand ...... 55 4.2 Gebruik ...... 56 4.3 Technische gegevens ...... 61

5 Besluit 63

Referenties 66

Bijlagen 70 Lijst van figuren

Figuur 1 Voorbeeld van een steganografisch coderingsproces ...... 11 Figuur 2 ECB-mode van blokvercijfering ...... 15 Figuur 3 CBC-mode van blokvercijfering ...... 15 Figuur 4 De werking van een DES iteratie ...... 16 Figuur 5 De werking van stroomvercijfering ...... 17 Figuur 6 Aanmaken van een asymmetrisch sleutelpaar en de werking van asymmetrische algoritmes ...... 17 Figuur 7 Diffie-Hellman sleutelovereenkomst ...... 19 Figuur 8 De geheime informatie: een foto van een luchthaven ...... 23 Figuur 9 Een gif afbeelding ...... 23 Figuur 10 De steganografische gif afbeelding ...... 23 Figuur 11 Een jpeg afbeelding ...... 23 Figuur 12 De steganografische jpeg afbeelding ...... 23 Figuur 13 Een uitvergroting van de rechterbovenhoek van de originele en de steganografische jpeg afbeelding ...... 24 Figuur 14 Een afbeelding van een kaart ...... 25 Figuur 15 Bovenaan het origineel audiosignaal en onderaan het steganografi- sche audiosignaal ...... 25 Figuur 16 Een voorbeeld van opmaak-gebaseerde steganografie ...... 26 Figuur 17 Een voorbeeld van opmaak-gebaseerde steganografie ...... 26 Figuur 18 Een voorbeeld van een IRC spanning tree model ...... 29 Figuur 19 Werking van het ontworpen systeem ...... 35 Figuur 20 Werking van het ontworpen systeem met cryptografische primitieven 36 Figuur 21 Het construeren en decoderen van een stego-tekst door de stego- engine ...... 37 Figuur 22 De data-structuur van de geheugenopslag ...... 38 Figuur 23 Een voorbeeld van een pop-up venster ...... 40 Figuur 24 De generatie van de deterministische random bitstroom β . . . . . 43 Figuur 25 De RC4 sleutelafleiding ...... 44 Figuur 26 Een voorstelling van de codetabel ...... 45 Figuur 27 De generatie van de codetabel ...... 46 Figuur 28 De spreiding van de synoniemen na het genereren van een codetabel, zonder optimalisatiestappen ...... 47 Figuur 29 Een goede spreiding van de synoniemen ...... 47 Figuur 30 De spreiding van de synoniemen na een eerste optimalisatiestap . . 48 Figuur 31 De spreiding van de synoniemen na een tweede optimalisatiestap . 49 Figuur 32 De spreiding van de synoniemen na een tweede optimalisatiestap met het vastzetten van de gewijzigde synoniemen ...... 49 Figuur 33 De spreiding van de synoniemen na het herhalen van de twee opti- malisatie stappen ...... 50 Figuur 34 De spreiding van de synoniemen na het verlagen van het minimum aantal NULL-synoniemen ...... 50 Figuur 35 Vergelijking tussen de originele en de uitgebreide codetabel . . . . . 51 Figuur 36 Bits toekennen aan synoniemen met behulp van de methode met Huffman-code ...... 51 Figuur 37 Het pop-upvenster bij het inladen van de plugin ...... 57 Figuur 38 De zender typt een zin in ...... 57 Figuur 39 Een pop-up na het typen van een zin ...... 58 Figuur 40 De keuze van de synoniemen, de geschikte en NULL-synoniemen zijn gescheiden ...... 58 Figuur 41 De vooruitgang aan de zijde van de zender na het typen van een zin 59 Figuur 42 De vooruitgang aan de zijde van de ontvanger na het ontvangen van een zin ...... 59 Figuur 43 Het voltooien van het zenden van het bericht ...... 60 Figuur 44 Het voltooien van het ontvangen van het bericht ...... 60 Lijst van tabellen

Tabel 1 Een overzicht van de bestudeerde IRC-cli¨enten ...... 32 Tabel 2 Een overzicht van data van de gebruikte thesaurus en het gegenereerde data-bestand ...... 61 Tabel 3 Effi¨entietest van de plugin ...... 61 1 Inleiding

Doorheen alle tijden en voor uiteenlopende behoeften is de mens bedreven geweest in het uitwisselen van geheime berichten. Zo hielden vroegere veldheren hun aan- valsplannen geheim voor hun tegenstanders, en vercijferde Caesar op een eenvoudige manier zijn berichten naar zijn generaals, omdat hij zijn boodschappers niet vertrouwde. Kahn [1] heeft zelfs sporen van vercijfering terug gevonden tot 4000 jaar geleden, bij de Egyptenaren. Zelfs kinderen sturen onschuldige geheime berichten door, zodat andere kinderen en leerkrachten ze niet kunnen lezen.

Tegenwoordig gebeurt het uitwisselen van geheime boodschappen steeds vaker via een elektronisch medium, bijvoorbeeld het internet. Deze evolutie zorgt voor enkele nieuwe risico’s. Computersystemen kunnen aangevallen worden door hackers of kwaadaardige software, zoals computervirussen, -wormen of Trojaanse paarden. Een gevolg hiervan is een grote vraag naar betere technieken om geheime informatie te beschermen. Enerzijds worden cryptografische technieken toegepast op de informatie, zodat deze niet interpre- teerbaar is voor de indringer. Anderzijds kan de informatie ook beschermd worden tegen wijzigingen, door het toevoegen van redundanties [2]. Het verhaal van Alice en Bob [3] wordt vaak gebruikt om deze technieken te verduidelijken. Alice wil een geheime bood- schap (de klaartekst) naar Bob sturen, maar Eve1 luistert alle berichten af. Hiervoor vercijfert Alice de klaartekst tot de vercijferde tekst (de cijfertekst) met behulp van een wiskundige transformatie. Deze cijfertekst verstuurt Alice naar Bob, die de cijfertekst ontcijfert naar de klaartekst met behulp van de inverse transformatie. Eve bekomt de cijfertekst, maar zal hieruit niets leren over de inhoud van de klaartekst. Om in dit voorbeeld het bericht te beveiligen tegen wijzigingen, zal Alice een authentiseringscode van het bericht berekenen en toevoegen aan het bericht. Deze authentiseringscode is het resultaat van een ingewikkelde functie met als invoer het bericht en een geheime sleutel, die Alice en Bob bezitten. Bob berekent eveneens de authentiseringscode van het ontvangen bericht, met dezelfde geheime sleutel, en zal deze vergelijken met de mee- gestuurde authentiseringscode van Alice. Eve kan onderweg het bericht wel veranderen, maar kan geen geldige authentiseringscode bij het bericht voegen, omdat ze niet beschikt over de geheime sleutel van Alice en Bob. Op deze manier kan Bob met grote zekerheid iedere wijziging van het bericht detecteren. De authentiseringscode kan hier worden bekomen met een MAC of HMAC (zie 2.1.5).

In sommige gevallen is het niet enkel gewenst om de boodschap op een veilige manier, maar ook op een onopgemerkte manier door te sturen. Om een boodschap onopgemerkt door te sturen, zal vaak een publiek medium gebruikt worden, zoals het internet. Het probleem hierbij is dat deze publieke media vaak onveilig zijn, omdat de afgelegde weg

1Eve (eavesdropper) = afluisteren 1.1 COSIC 1 INLEIDING van de informatie niet gekend of gedefinieerd is. Dit kan ook verduidelijkt worden met het voorbeeld van Alice en Bob. Alice en Bob zitten in de gevangenis. De bewaker Wendy2 controleert alle communicatie tussen beiden. Als Alice nu een verdacht bericht naar Bob wil sturen, zeker als dit vercijferd is, zal Wendy alarm slaan. Om dit probleem op te lossen, zullen Alice en Bob gebruik moeten maken van steganografie. Hierbij verbergen ze de gevoelige informatie in onschuldig ogende objecten (de schuilobjecten), zodat Wendy niets vermoedt. Een voorbeeld hiervan is het gebruik van micropunten. Een foto of tekening met geheime informatie op wordt verkleind tot deze slechts een afmeting heeft van de grootte van een punt. In een onschuldige tekst wordt een punt achter een zin vervangen door deze verkleinde foto, en wordt de tekst verspreid. De ontvanger kan dit punt weer uitvergroten tot normale grootte, en zo alle informatie zien. Omdat de foto zo sterk verkleind wordt, kan het blote oog geen verschil zien tussen deze foto en een echt punt. Iemand die deze tekst leest, zal dus niets opmerken van deze informatieoverdracht.

1.1 COSIC

De onderzoeksgroep COSIC (COmputer Security and Industrial Cryptography) maakt deel uit van het departement Elektrotechniek-ESAT van de Katholieke Universiteit Leuven en wordt geleid door de professoren Bart Preneel, Ingrid Verbauwhede en Joos Vandewalle.

Het doel van het onderzoek binnen COSIC is het cre¨eren van veilige elektronische equiva- lenten voor informatiebeveiligingsconcepten in de fysische wereld zoals vertrouwelijkheid, handtekeningen, identificatie, anonimiteit, notari¨ele bekrachtigingen en betalingen. Om dit doel te bereiken spitst de onderzoeksgroep zich toe op het ontwerp, de evaluatie en implementatie van cryptografische primitieven en protocollen, alsook hun toepassing in telecommunicatie, computernetwerken en embedded systemen. COSIC heeft bijgedra- gen tot het ontwerp en de evaluatie van de beveiliging in een groot aantal praktische systemen (onder meer de elektronische idententiteitskaart, elektronisch bankieren, elek- tronische verkiezingen, UMTS3).

E´envan de bekende successen is het Rijndael-algoritme, dat door NIST4 werd gese- lecteerd als de AES (Advanced Encryption Standard) [4]. Dit algoritme werd ontwikkeld door Dr. Vincent Rijmen (doctoraat in COSIC in 1997) en Dr. Joan Daemen (docto- raat in COSIC in 1995). Momenteel wordt AES gebruikt door miljoenen gebruikers in

2Wendy (warden) = afluisteren en controleren 3UMTS of Universal Mobile Telecommunications System, wordt ook de derde generatie (3G) mobiele communicatie genoemd.UMTS biedt zowel circuitgeschakelde als pakketgeschakelde communicatiedien- sten aan. 4National Institute of Standards and Technology

10 1.2 Probleemstelling 1 INLEIDING meer dan duizend producten, zoals de bescherming van de overheidsinformatie van de Verenigde Staten.

COSIC geeft advies op het gebied van computerveiligheid en cryptografie en werkt wereldwijd samen met zowel universiteiten als bedrijven en organisaties. COSIC is tevens co¨ordinator van het Europese project ECRYPT, een “Network of Excellence” in cryptografie dat 32 instellingen uit de academische en bedrijfswereld vertegenwoordigt.

1.2 Probleemstelling

Steganografische technieken (stego-technieken) worden gebruikt om klaartekst te verber- gen in schuilobjecten. R. Bergmair [5] stelde een techniek voor om met levende talen een geheime boodschap te verbergen in een gewone tekst, door een juiste keuze van syno- niemen te gebruiken. Een voorbeeld hiervan wordt in figuur 1 weergegeven. Afhankelijk van het gekozen synoniem wordt een bepaald deel van een geheime boodschap verstuurd.

Figuur 1: Voorbeeld van een steganografisch coderingsproces

De doelstelling van deze masterproef bestaat erin een module voor een IRC-cli¨ent te ontwikkelen. In deze module wordt gebruik gemaakt van bovenstaande techniek in com- binatie met menselijke interactie om de context en het persoonsgebonden karakter van de schuilobjecten zoveel mogelijk te behouden. De twee gebruikers zullen een geheime sleutel vastleggen. Met deze sleutel wordt een sessie-afhankelijke “codetabel” opgesteld. De verborgen boodschap die de gebruiker wil doorsturen, zal vercijferd worden tot een bitstroom. Deze bitstroom zal de gebruiker doorsturen door op een IRC-kanaal te chat- ten en gewoon mee discussi¨eren over het onderwerp dat dan aan de orde is.

1.3 Overzicht van de tekst

In hoofdstuk 2 wordt achtergrondinformatie meegegeven. Hierin wordt een inleiding tot de cryptografie en de steganografie gegeven. Verder wordt besproken wat IRC is, de keuzes die op gebied van IRC gemaakt zijn en de programmeeromgeving waarin de plugin ontwikkeld is. In hoofdstuk 3 wordt het ontwerp van de plugin besproken. Allereerst wordt de architectuur van de plugin nader toegelicht. Vervolgens worden ook de gebruikte cryptografische primitieven besproken, gevolgd door een uiteenzetting

11 1.3 Overzicht van de tekst 1 INLEIDING over de codetabel. Hoofdstuk 4 behandelt de implementatie van de plugin. De mini- mumvereisten, alsook de installatie, initialisatie en het gebruik van de plugin worden hier besproken. Dit wordt gevolgd door voorstellen voor verdere ontwikkeling. Hoofdstuk 5 geeft een algemeen besluit.

12 2 ACHTERGRONDINFORMATIE

2 Achtergrondinformatie

In dit hoofdstuk wordt een inleiding tot de cryptografie en de steganografie gegeven. Verder wordt besproken wat IRC is, welke keuzes op gebied van IRC zijn gemaakt en in welke omgeving de plugin ontwikkeld is.

2.1 Cryptografie

“Cryptografie is de studie die zich bezig houdt met wiskundige technieken, verbonden met beveiliging van informatie, zoals vertrouwelijkheid, data-integriteit en onweerleg- baarheid van de data.” [6] Zoals deze definitie weergeeft wordt cryptografie gebruikt met 3 doeleinden [7]:

• Vertrouwelijkheid: Enkel de ontvanger mag het oorspronkelijke bericht lezen, niet de afluisteraar die de boodschap onderschept. Hiervoor wordt de klaartekst vercijferd tot een cijfertekst door middel van wiskundige berekeningen en een geheime sleutel.

• Onweerlegbaarheid: De ontvanger kan bewijzen dat de verzender het bericht werkelijk heeft verzonden. Bij het verzenden zal Alice (zie hoofdstuk 1) het bericht omvormen met haar private sleutel. Door gebruik te maken van haar publieke sleutel weet Bob dat het bericht afkomstig is van Alice. Als Eve, of andere afluisteraars, het bericht wijzigen, zal de verificatie met de publieke sleutel van Alice falen.

• Data-integriteit: De ontvanger is zeker dat de boodschap onderweg niet veranderd is. Alice en Bob beschikken over eenzelfde geheime sleutel K. Alice berekent een authentise- ringscode (MAC of HMAC: zie 2.1.5) van de boodschap en voegt deze toe aan de boodschap. Bob zal eveneens de authentiseringscode berekenen van de ontvangen boodschap. Als deze overeenkomt met de authentiseringscode van Alice weet Bob dat de boodschap onderweg niet veranderd is.

Vercijferingsalgoritmes kunnen opgedeeld worden in twee methodes, namelijk symme- trische en asymmetrische algoritmes. Het verschil tussen de twee methodes ligt in de aard van de sleutel om de informatie te vercijferen en te ontcijferen. De twee methodes kunnen ook gecombineerd worden.

In 1883 formuleerde Auguste Kerckhoffs het fundamentele principe dat zelfs als een deel van de communicatiemiddelen in handen van een afluisteraar valt, het nog steeds mogelijk moet zijn om veilig te communiceren [8]. Een modernere formulering luidt dat de veiligheid afhangt van de kwaliteit (en de geheimhouding) van de sleutel en niet van het geheimhouden van het gebruikte cryptografische algoritme. Tegenwoordig wordt

13 2.1 Cryptografie 2 ACHTERGRONDINFORMATIE

Kerckhoffs’ principe wat algemener ge¨ınterpreteerd, namelijk dat bij het ontwerp van een beveiligingssysteem ervan uitgegaan moet worden dat de afluisteraar dit ontwerp kent. Zelfs met volledige kennis van het ontwerp van een systeem moet het onmogelijk blijven om binnen redelijke tijd de veiligheid van het systeem te breken [9].

Met behulp van de voorgaande uiteenzetting kunnen we ook een definitie voor een veilig steganografisch systeem (stego-systeem) formuleren, met name als een afluisteraar het volledige stego-systeem kent, maar de sleutel niet bezit, kan hij niet bewijzen (of zelfs vermoeden) dat er een geheime communicatie plaatsvindt. Verdergaand op het voor- beeld van Alice en Bob wil dit zeggen dat er vanuit gegaan moet worden dat de bewaker Wendy het algoritme kent dat Alice en Bob gebruiken om hun klaartekst uit te wisselen met elkaar. Wendy kan informatie halen uit elk gecommuniceerd stego-object, maar zonder de geheime sleutel die Alice en Bob gebruiken voor hun stego-systeem, kan zij nooit de klaartekst achterhalen die Alice en Bob uitwisselen met elkaar. Wendy zal dus geen geheime communicatie tussen Alice en Bob kunnen bewijzen of zelfs vermoeden.

2.1.1 Symmetrische algoritmes

Bij symmetrische algoritmes wordt dezelfde sleutel gebruikt om de informatie te ver- cijferen en te ontcijferen. Het voordeel hierbij is dat vercijfering en ontcijfering re- latief snel kunnen worden uitgevoerd. Het nadeel hierbij is dat zowel zender als ont- vanger over dezelfde sleutel moeten beschikken. Deze sleutel moet op zijn beurt dus op een vertrouwelijke manier uitgewisseld worden. Vercijfering van de informatie met behulp van symmetrische cryptografie kan op zijn beurt op twee verschillende manieren gebeuren: door gebruik te maken van blokvercijfering, ofwel door gebruik te maken van een stroomvercijfering.

Bij blokvercijfering wordt de informatie eerst in verschillende blokken verdeeld en daarna ieder blok vercijferd met de sleutel. Hoe ieder blok vercijferd wordt, hangt af van de gebruikte methode. E´enmogelijke methode (ECB: Electronic Codebook [6]) is dat ieder blok onafhankelijk van elkaar verwerkt wordt. Op een blok van de klaartekst wordt een wiskundige berekening uitgevoerd met de sleutel. Het resultaat hiervan is de overeenkomstige cijferblok. Dit wordt voorgesteld in figuur 2. Het nadeel hierbij is dat de cijferblok enkel afhankelijk is van de klaartekst en de sleutel, niet van de vorige cij- ferblokken. Eenzelfde waarde van een blok van de klaartekst, zal dus dezelfde cijferblok geven. Een betere methode (CBC: Cipher Block Chaining [6]) XORd5 eerst de vorige cijferblok op met de huidige blok van de klaartekst, en voert daarna de wiskundige be- werking uit met de sleutel. Een voorbeeld hiervan wordt voorgesteld in figuur 3. Hierbij

5XOR of exclusieve disjunctie is een puntgewijze handeling op twee logische waardes, die een 1 teruggeeft indien ´e´enen juist ´e´envan de twee logische waardes een 1 is.

14 2.1 Cryptografie 2 ACHTERGRONDINFORMATIE is de cijferblok afhankelijk van de vorige cijferblokken, en niet enkel van de klaartekst en de sleutel. Andere vaak gebruikte methodes zijn OFB [6] en CTR [6]. De verwerking van ieder blok is afhankelijk van het gebruikte cryptografische algoritme, vaak gebruikte algoritmes zijn AES en DES.

Figuur 2: ECB-mode van blokvercijfering Figuur 3: CBC-mode van blokvercijfering

DES of Data Encryption Standard [10] vercijfert de data in blokken van 64-bits tot 64-bits cijferblokken met een geheime sleutel K van 56-bits. De geheime sleutel wordt ingegeven als 64-bits, waarvan 8 bits gebruikt worden als pariteitsbits. De vercijfering verloopt in 18 stadia, een beginpermutatie, 16 identieke iteraties en een eindpermutatie. De beginpermutatie zorgt ervoor dat de data niet rechtstreeks naar de eerste iteratie gestuurd wordt, maar wordt eerst volgens een permutatietabel omgevormd. Het voor- deel hierbij is dat een eventuele concentratie van enen en nullen gespreid wordt. Van de geheime sleutel K worden 16 subsleutels Ki gegenereerd met een lengte van 48 bits,

´e´en voor iedere iteratie. Ieder blok wordt opgedeeld in twee delen: de linkerhelft Li en de rechterhelft Ri. De rechterhelft Ri en de subsleutel Ki worden vermengd met een functie f. Het resultaat van deze functie f wordt geXORd met de linkerhelft Li. Het resultaat van deze XOR vormt de volgende rechterhelft Ri+1. De rechterhelft Ri wordt de volgende linkerhelft Li+1. Zo een iteratie wordt weergegeven in figuur 4, nadat alle 16 iteraties doorlopen zijn, wordt de eindpermutatie uitgevoerd. Deze permutatie is de inverse van de beginpermutatie, zodat de twee permutaties geen invloed hebben op de vercijfering. Hierna de data terug samengevoegd om zo de cijferblok te bekomen.

AES of Advanced Encryption Standard [4] vercijfert de data in blokken van 128-bits tot 128-bits cijferblokken met een geheime sleutel K van 128, 192 of 256 bits. De vercijfering verloopt in 10 tot 14 identieke iteraties, afhankelijk van de sleutellengte. De geheime sleutel K wordt ook hier opgedeeld in een aantal subsleutels Ki, afhankelijk van het aantal iteraties. AES is een bytege¨orienteerd algoritme, waarbij de data voorgesteld wordt in een matrix. De grootte van deze matrix is afhankelijk van het aantal bytes6 van ´e´enblok en van het aantal bytes van de sleutel. Iedere iteratie is opgedeeld in vier

61 byte = 8 bits

15 2.1 Cryptografie 2 ACHTERGRONDINFORMATIE

Figuur 4: De werking van een DES iteratie

afzonderlijke stappen:

• De bytesubstitutie: Een niet lineaire-substitutie waarbij iedere byte van de matrix vervangen wordt door een andere byte, afhankelijk van een opzoektabel.

• De rijrotatie: Een transformatiestap waarbij iedere rij van de matrix geroteerd wordt over een aantal posities, afhankelijk van de rij waarin de byte zich bevindt en de blokgrootte.

• De kolomvermenigvuldiging: Een lineaire transformatie waarbij iedere kolom van de matrix vermenigvuldigd wordt met een vaste veelterm.

• De sleuteltoevoeging: Iedere byte van de matrix wordt geXORd met de overeenkom- stige subsleutel.

Bij stroomvercijfering wordt iedere eenheid (letter, bit of byte) van de informatie apart vercijferd. Ook hier kan de waarde van de vercijfering afhankelijk zijn van de vorige waardes. Een voorbeeld hiervan is beschreven in figuur 5. Het voordeel van stroomvercijfering is dat de ontvanger het ontvangen deel van de boodschap al helemaal kan ontcijferen. Bij blokvercijfering kan dit pas iedere keer als een blok ontvangen is. Een voorbeeld van stroomvercijfering, die ook in deze thesis wordt toegepast, is RC4 [11].

2.1.2 Asymmetrische algoritmes

Bij asymmetrische algoritmes worden twee verschillende sleutels gebruikt, die wiskundig in verbinding staan met elkaar. In een eerste fase genereert Alice een cryptografisch sleutelpaar, bestaande uit een publieke en private sleutel. De private sleutel houdt Alice geheim, terwijl ze de publieke sleutel kenbaar maakt voor iedereen, dus ook voor Bob. Bob zal dan zijn boodschap vercijferen met de publieke sleutel van Alice. Enkel Alice, die de private sleutel kent, kan de cijfertekst terug ontcijferen tot de klaartekst. Dit voorbeeld wordt verduidelijkt in figuur 6. Het voordeel hiervan is dat men zich geen zorgen moet maken over het uitwisselen van de sleutel. Het nadeel is echter dat er heel

16 2.1 Cryptografie 2 ACHTERGRONDINFORMATIE

Figuur 5: De werking van stroomvercijfering

wat meer rekenkracht nodig is voor de vercijfering en ontcijfering van de boodschap.

Figuur 6: Aanmaken van een asymmetrisch sleutelpaar en de werking van asymmetrische algo- ritmes

RSA [12] is een asymmetrisch algoritme, dat gebaseerd is op de factorisatie van een product van grote priemgetallen. Het aanmaken van een asymmetrisch sleutelpaar met behulp van RSA gebeurt in de volgende stappen:

• Kies twee grote, willekeurige priemgetallen p 6= q willekeurig.

• Bereken N = p · q.

• Kies een geheel getal 1 < d < N, dat relatief priem7 is t.o.v. (p − 1)(q − 1).

• Bereken e zodat d · e mod (p − 1)(q − 1) = 1.

• Vernietig alle sporen van p en q.

7a is relatief priem t.o.v. b als a en b geen gemene delers hebben.

17 2.1 Cryptografie 2 ACHTERGRONDINFORMATIE

Hierbij vormen e en N de publieke sleutel en d en N de private sleutel. Alice zal dus e en N publiek verspreiden, en d geheim houden. Bob kan zijn geheime boodschap m nu vercijferen tot de cijfertekst c met de publieke sleutel van Alice, e en N.

c = me mod N

Alice ontvangt c van Bob, en kan hieruit de geheime boodschap m halen met behulp van haar private sleutel, d en N. m = cd mod N

Eve die de boodschap c afluistert en ook de private sleutel van Alice, e en N, bezit, kan onmogelijk de geheime boodschap m berekenen. Ze kan wel alle mogelijke waarden van m invullen, en controleren of dit overeenstemt met de cijfertekst c. Bij RSA kan N verschillende lengtes aannemen, zoals 256, 512, 1024 en zelfs 2048 bits. Met zulke grote getallen is het bijna onmogelijk om de geheime boodschap te raden.

2.1.3 Combinatie van asymmetrische en symmetrische algoritmes

Om praktische redenen kan een combinatie van deze twee methoden gebruikt worden. Hierbij zal het asymmetrisch algoritme gebruikt worden om een symmetrische sleutel uit te wisselen. Met deze symmetrische sleutel kan nadien een symmetrisch algoritme gebruikt worden om de informatie zelf te vercijferen. In een variatie hierop, wordt een geheime sleutel voor een symmetrisch cryptografie overeengekomen met behulp van een asymmetrisch algoritme. Diffie-Hellman algoritme [13] is hier een voorbeeld van.

Diffie-Hellman

Het Diffie-Hellman protocol zorgt ervoor dat Alice en Bob over een onveilig kanaal een geheime sleutel kunnen afspreken zonder dat een derde, Eve, deze geheime sleu- tel kan vinden. Dit protocol werd in 1976 door Whitfield Diffie en Martin Hellman voorgesteld [14].

Figuur 7 geeft de eenvoudige werking van de Diffie-Hellman sleutelovereenkomst weer. Het protocol bestaat uit drie opeenvolgende stappen waarin beide partijen, Alice en Bob, informatie uitwisselen over een onveilig kanaal. Na de derde stap delen Alice en Bob dezelfde geheime sleutel. In de eerste stap kiest Alice de drie waarden p, g en a :

• p : een groot priemgetal;

• g : een willekeurig getal tussen 1 en p;

• a : Alice haar geheime waarde, een willekeurig getal.

18 2.1 Cryptografie 2 ACHTERGRONDINFORMATIE

Figuur 7: Diffie-Hellman sleutelovereenkomst

Uit deze drie waarden construeert Alice haar publieke sleutel A (A = ga mod p). Alice zendt vervolgens p, g en haar publieke sleutel A naar Bob. Ze houdt haar geheime waarde a geheim. In de tweede stap herhaalt Bob dezelfde berekening. Hij neemt het priemgetal p, het getal g die hij ontvangen heeft van Alice, kiest een eigen geheime waarde b en berekent zijn publieke sleutel B (B = gb mod p). Bob zendt op zijn beurt zijn publieke sleutel door naar Alice. Ook hij houdt zijn waarde b geheim. In de derde en laatste stap berekenen zowel Alice als Bob elk afzonderlijk dezelfde sessiesleutel S. Zonder S ooit over het onveilige kanaal gestuurd te hebben, kennen enkel Alice en Bob na de drie stappen van het Diffe-Hellman protocol de sessiesleutel S. Enkel Alice en Bob kunnen namelijk met hun eigen geheime waarde a en b en de publieke B en A de sessiesleutel S berekenen.

Alice : Ba mod p = (gb mod p)a mod p = gab mod p = S

Bob : Ab mod p = (ga mod p)b mod p = gab mod p = S

De veiligheid van het Diffie-Hellman protocol is gebaseerd op een wiskundig moeilijk probleem, namelijk het discrete logaritme probleem8. Eve kan enkel de waarden A, B, g en p onderscheppen maar door het discrete logaritme probleem moeilijk het getal gab achterhalen. Eve : ga · gb = ga+b 6= gab

2.1.4 Hashfuncties

”Een hashfunctie is een functie in de informatica die invoer uit een breed domein van waarden omzet in een (meestal) kleiner bereik, meestal een deelverzameling van de gehele

8Het probleem om vanuit een element a en g een geheel getal y te berekenen zodat gy = a, noemt men ”het discrete logaritme probleem”.

19 2.2 Steganografie 2 ACHTERGRONDINFORMATIE getallen. Het woord hash komt uit het Engels en betekent hier hakken.”[15]. Een goede hashfunctie moet voldoen aan enkele belangrijke voorwaarden:

• Zorgen voor een onomkeerbare uitvoer (hashwaarde). Als de hashwaarde gekend is, mag het in geen enkel geval mogelijk zijn om hieruit de originele invoer terug uit te halen.

• Weinig botsingen veroorzaken. De kans dat twee verschillende invoeren eenzelfde hashwaarde als uitvoer hebben moet zeer klein zijn.

• Een evenredig aantal enen en nullen produceren.

SHA1 of Secure Hash Algoritm [16] is een voorbeeld van hashfunctie die in deze thesis gebruikt wordt. SHA1 levert een hashwaarde van 160 bit voor een bericht met een maximumgrootte van 264.

2.1.5 MAC: Message Authentication Code

Een MAC [17] is een kleine hoeveelheid cryptografische informatie die aan bericht wordt toegevoegd om het bericht te beveiligen tegen wijzigingen. Een MAC heeft als invoer een bericht dat beveiligd moet worden en een geheime sleutel, en heeft een uitvoer (MAC- waarde) die geverificeerd kan worden door iedereen die de geheime sleutel bezit. Met deze verificatie kan gecontroleerd worden of het bericht al dan niet gewijzigd is. De veiligheid van een MAC zit in het feit dat een aanvaller geen geldige MAC-waarde kan genereren op een bericht dat nooit door de oorspronkelijke zender aangemaakt is.

Een HMAC [18] maakt gebruik van zowel een geheime sleutel als van een cryptografische hashfunctie om de MAC-waarde te genereren. Dit zorgt voor een sterkere beveiliging van de MAC-waarde.

2.2 Steganografie

Cryptografie beveiligt een klaartekst door deze te vervormen tot een onverstaanbare boodschap (cijfertekst). Een nadeel hiervan is dat dit cryptogram makkelijk detecteer- baar is en onderworpen kan worden aan een crypto-analyse. Steganografie daarentegen beveiligt de klaartekst door deze volledig te verbergen in een schuilobject. Eerder in deze tekst werd het voorbeeld van Alice, Bob en de bewaker Wendy al aangehaald om het nut van steganografie te verduidelijken.

2.2.1 Steganografische systemen

Een onschuldig ogend object waarin klaartekst kan verborgen worden, werd eerder al gedefinieerd als een schuilobject. Een schuilobject waarin een klaartekst verwerkt zit, defini¨eren we als een stego-object. Een steganografisch systeem (stego-systeem) heeft

20 2.2 Steganografie 2 ACHTERGRONDINFORMATIE als doel het aanmaken van deze stego-objecten. Een veilig stego-systeem genereert deze stego-objecten zo, dat het stego-object niet onderscheiden kan worden in de verzameling van schuilobjecten. Een stego-systeem is gebroken als Wendy op basis van een stego- object vermoedt dat er een geheime boodschap verzonden wordt. Kenmerken van een stego-systeem zijn:

• Payload: De verhouding klaartekst tot het schuilobject.

• Robuustheid: Het vermogen van het stego-systeem om veranderingen te weerstaan aan het schuilobject zonder dat de interne boodschap gewijzigd wordt.

• Ononderscheidbaarheid: Het potentieel van het stego-systeem om stego-objecten te maken die niet te onderscheiden zijn van andere schuilobjecten in dezelfde ca- tegorie.

Ook het principe van Kerckhoffs [8] kunnen we toepassen op steganografische systemen. Dit principe zegt namelijk dat als Alice en Bob elkaar een stego-object versturen, ze er vanuit moeten gaan dat een mogelijke afluisteraar Wendy weet welk stego-systeem ze ge- bruiken. Op basis van het principe van Kerckhoffs kunnen we drie soorten steganografie onderscheiden, namelijk pure steganografie, geheime sleutel steganografie en publieke sleutel steganografie [19].

Pure steganografie

Bij dit stego-systeem gebeurt er geen voorafgaande uitwisseling of vastlegging van een geheime sleutel. Zowel zender als ontvanger hebben toegang tot hetzelfde stego-systeem. De veiligheid hangt bij deze steganografische methode af van het geheim van het stego- systeem. Het principe van Kerckhoffs wordt dus genegeerd.

Geheime sleutel steganografie

Geheime sleutel steganografie vereist het uitwisselen van een geheime sleutel. Met behulp van deze geheime sleutel verwerkt het stego-systeem de klaartekst in het schuilobject. De klaartekst kan enkel worden berekend uit het stego-object met behulp van de geheime sleutel. In dit soort steganografie wordt het principe van Kerckhoffs toegepast. Er wordt hier met een een gedeeld geheim gewerkt.

Publieke sleutel steganografie

Publieke sleutel steganografie vereist het gebruik van een publieke en een private sleutel. Met behulp van de publieke sleutel van de ontvanger wordt de klaartekst door het stego- systeem in het stego-object verwerkt. Enkel de persoon van de gebruikte publieke sleutel kan de geheime informatie uit het stego-object ontleden met behulp van zijn private

21 2.2 Steganografie 2 ACHTERGRONDINFORMATIE sleutel. Dit soort steganografie past ook het principe van Kerckhoffs toe. Er wordt hier gewerkt met een geheim bij ´e´epartij.

2.2.2 Steganografische schuilobjecten

Digitale technologie maakt heel wat nieuwe toepassingen van steganografische technieken mogelijk. Steganografie kan gebruikt worden om intellectueel eigendom te beveiligen. Door bijvoorbeeld het aanbrengen van een unieke digitale handtekening (watermerk) in een afbeelding of geluidsfragment, kan de auteur zijn auteursrechten beschermen. Daarnaast wordt steganografie ook gebruikt om geheime informatie te verzenden. Enkele gekende systemen gebruiken als schuilobjecten foto’s [20, 21], audio [22, 23], tekst [5], video [22], TCP-IP pakketten [24] en programma’s [25].

Foto’s

De keuze voor foto’s als schuilobject berust op het gegeven dat het menselijke zicht ongevoelig is voor kleine veranderingen in kleurenintensiteit. Een afbeelding bestaat uit beeldpunten (pixels) met een bepaalde kleur. Deze kleur wordt voorgesteld door RGB- waardes, namelijk voor iedere grondkleur (rood, groen en blauw) een representatie van 8 bits. Er zijn verschillende mogelijkheden om informatie in een afbeelding te verstoppen. De makkelijkste manier is het gebruiken van de minst beduidende bit van de RGB- kleuren van de pixels, om een geheime boodschap te verbergen [20]. Het menselijke oog kan namelijk geen onderscheid maken tussen bijvoorbeeld de blauwtinten #0000F7 en #0000F8 (hexadecimale voorstelling RGB). In de onderstaande voorbeelden vertrekken we van een geheime foto van een luchthaven (figuur 8). Deze afbeelding heeft een be- standsgrootte van 58 kB9. In het eerste voorbeeld wordt de foto van de luchthaven in een afbeelding van het compressieformaat gif verborgen door middel van het steganografisch programma Hide-in-picture [26] van Davi Figueiredo. De originele afbeelding met een bestandsgrootte van 1253 kB wordt in figuur 9 weergegeven. Het resulterende stego- object (stego-foto) wordt weergeven in figuur 10. In het tweede voorbeeld wordt de foto van de luchthaven in een afbeelding van het compressieformaat jpeg verborgen, namelijk in figuur 11 met een bestandsgrootte van 385 kB met figuur 12 als resultaat. Dit wordt gerealiseerd met het steganografisch programma CryptoBola JPEG [27].

Als de originele afbeelding met de stego-foto wordt vergeleken, merken we een zeer klein kwaliteitsverlies van de kleurensamenstelling op. Tussen figuur 9 en 10 is er nauwelijks een verschil waarneembaar. Dit is te verklaren door de verhouding van de bestands- grootte van deze afbeelding tot de bestandsgrootte van de geheime afbeelding. Er is voldoende redundantie aanwezig in het schuilobject (schuilfoto) om de geheime foto in

9kB = kilobytes = 1024 bytes

22 2.2 Steganografie 2 ACHTERGRONDINFORMATIE

Figuur 8: De geheime informatie: een foto van een luchthaven

Figuur 9: Een gif afbeelding Figuur 10: De steganografische gif afbeelding

Figuur 11: Een jpeg afbeelding Figuur 12: De steganografische jpeg afbeelding de schuilfoto te verwerken en het stego-object, voor het menselijke oog, ononderscheid- baar te houden van het schuilobject. De verhouding van de bestandsgrootte van de schuilfoto 11 tot die van de geheime foto 8 is veel kleiner dan de verhouding van voor- beeld 1. Dit resulteert in een stego-foto met een grotere kleuren degradatie. In figuur 13 wordt de rechterbovenhoek van afbeelding 11 en 12 uitvergroot weergegeven. Hierin is

23 2.2 Steganografie 2 ACHTERGRONDINFORMATIE het kwaliteitsverlies van de kleurensamenstelling duidelijker waar te nemen.

Figuur 13: Een uitvergroting van de rechterbovenhoek van de originele en de steganografische jpeg afbeelding

Audio

Dit type steganografie maakt gebruik van de onvolmaaktheid van het menselijk gehoor. Hoewel ons menselijk gehoor een groot dynamisch bereik heeft, heeft het een redelijk klein differentieel bereik. Een gevolg hiervan is dat we bij de aanwezigheid van luide to- nen, stille tonen niet meer goed kunnen waarnemen. Bovendien kan het menselijk gehoor ook moeilijk de absolute fase van een audiosignaal waarnemen. Enkel de relatieve fase is goed waarneembaar. Tenslotte is er altijd een geringe vervorming op het audiosignaal afkomstig van de omgeving, die zo normaal is dat hij door de luisteraar niet opgemerkt wordt [23]. Net zoals bij afbeeldingen bestaan ook hier verschillende technieken die deze onvolmaaktheden benutten om een geheime boodschap in een audiosignaal te verbergen. In onderstaand voorbeeld is figuur 14 door middel van het steganografisch programma S-Tools van Andy Brown [28] in een geluidsfragment verwerkt. In figuur 15 wordt res- pectievelijk (van boven naar onder) het originele geluidsfragment en het geluidsfragment met de kaart in verwerkt (stego-object) weergeven. De afbeelding heeft een bestands- grootte van 10.8 kB en het geluidsfragment is een wav-bestand met een bestandsgrootte van 175 kB.

24 2.2 Steganografie 2 ACHTERGRONDINFORMATIE

Figuur 14: Een afbeelding van een kaart

Figuur 15: Bovenaan het origineel audiosignaal en onderaan het steganografische audiosignaal

Als beide geluidsfragmenten gevisualiseerd en met elkaar vergeleken worden, merken we een klein verschil op tussen beiden. Vooral aan het begin en aan het einde van het geluidsfragment, tijdens de stiltes, is er een verschil tussen beide waarneembaar.

25 2.2 Steganografie 2 ACHTERGRONDINFORMATIE

Tekst

Een ander type schuilobject is geschreven tekst. In tegenstelling tot multimedia schuil- objecten, bevat geschreven tekst weinig redundantie waarin geheime informatie verbor- gen kan worden. Bij het gebruik van tekst als schuilobject kunnen we drie verschil- lende aanpakken onderscheiden: opmaak-gebaseerd, random en statistische generatie, en lingu¨ıstische steganografie [29].

Opmaak-gebaseerde steganografie introduceert wijzigingen in de opmaak van een schuiltekst. Enkele voorbeelden hiervan zijn de afstand tussen twee regels aanpassen, woorden- of regels verschuiven, het plaatsen van een karakter dat niet weergegeven wor- den, het toevoegen van spaties tussen woorden of op het einde van een regel. Figuur 16 en figuur 17 geven hiervan een voorbeeld. In figuur 16 maakt men gebruik van de ruimte tussen twee woorden om een klaartekst te verstoppen. De combinatie “´e´en spatie - twee spaties” komt overeen met de bit nul, terwijl de combinatie “twee spaties - ´e´en spatie” overeenkomt met de bit ´e´en.In figuur 17 wordt een klaartekst in de schuiltekst gecodeerd door het toevoegen van spaties achteraan elke regel.

Figuur 16: Een voorbeeld van opmaak-gebaseerde steganografie

Figuur 17: Een voorbeeld van opmaak-gebaseerde steganografie

De resulterende stego-tekst kan gemakkelijk onderscheiden worden van niet gemanipu- leerde tekst door programma’s die op zinsbouw controleren of door menselijke controle. Aangezien opmaak-gebaseerde steganografie doorgaans bestaande tekst gebruikt om in- formatie in te verbergen bestaat er ook een kans dat de stego-tekst vergeleken wordt met

26 2.2 Steganografie 2 ACHTERGRONDINFORMATIE de originele schuiltekst. Om de vergelijking van de stego-tekst met een andere tekst te voorkomen, wordt er ook vaak een eigen tekst gecre¨eerd.

Met random en statistische generatie technieken wordt er geprobeerd enkele karak- teristieken van een normale tekst na te bootsten. Wayner beschrijft in zijn paper “Mimic Functions” [30] en later ook in zijn boek “Information Hiding: Steganography and Wa- termarking” [31] hoe statistische profielen kunnen gebruikt worden om tekst te gene- reren. Met de toenemende rekenkracht van computers en het toenemende aanbod van geavanceerde grammatica en spelling controlerende programma’s, neigt ook deze ste- ganografische techniek te falen voor automatische detectie. Omdat de inhoud of de zinsbouw van de gegenereerde tekst meestal niet logisch is, is deze steganografische tech- niek ook gemakkelijk detecteerbaar door het menselijk oog.

Lingu¨ıstische steganografie gaat verder dan enkel syntactische10 veranderingen. De tekst wordt taalkundig verwerkt en aangepast. Een zekere schuiltekst kan aanzien- lijk aangepast worden door bijvoorbeeld het toepassen van woordsubstitutie. Deze se- mantische11 aanpassingen kunnen zo gedaan worden dat de betekenis en dus ook de ononderscheidbaarheid van de schuiltekst behouden wordt. Daarnaast is automatische taalanalyse nog steeds een complex probleem hetgeen automatische aanvallen of controle moeilijk maakt.

2.2.3 Lingu¨ıstische steganografie

Omdat de focus in deze thesis op lingu¨ıstische steganografie ligt, is het belangrijk om hier wat dieper op in te gaan. Chapman omschrijft lingu¨ıstische steganografie als “De kunst om geschreven taal te gebruiken om een geheime boodschap in te verbergen.”12 [32]. In deze thesis wordt lingu¨ıstische steganografie iets specifieker gedefinieerd: het volstaat niet dat de stego-tekst syntactisch correct samengesteld is; ook de semantiek van de stego-tekst hoort in orde zijn. De betekenis van een zin mag niet veranderen door de veranderingen aan de schuiltekst.

Het doel van deze lingu¨ıstische stego-systemen is het produceren van een stego-tekst die niet te onderscheiden is van een verzameling van originele schuilteksten. Een ken- merk van deze stego-systemen is dat de originele schuiltekst niet meegeleverd wordt. Dit heeft als gevolg dat, om deze stego-teksten te ontdekken in een verzameling van schuil- objecten, er een semantische analyse nodig is van de stego-tekst. Semantische analyse is nog steeds een zeer moeilijk en ingewikkeld probleem voor een machine [5].

10syntaxis : met betrekking op de zinsbouw 11semantiek : met betrekking op de betekenis van een woord of de zin 12The art of using written natural language to conceal secret messages

27 2.3 IRC 2 ACHTERGRONDINFORMATIE

In zijn thesis [5], stelt Bergmair een constructie voor lingu¨ıstische steganografie voor. Klaartekst wordt in een schuiltekst verwerkt door woorden uit de schuiltekst te ver- vangen door ´e´envan hun synoniemen. Dit kan enkel gedetecteerd worden door het menselijke oog, dat gesubstitueerde woorden kan herkennen binnenin een context. Dit is te wijten aan de eventuele woord-dubbelzinnigheid van woorden13. Bergmairs origi- neel idee [5] wordt later verder uitgewerkt door Bergmair en Katzenbeisser [33]. Hierin worden de beperkingen van een machine ten opzichte van de mens benadrukt door mid- del van “Human Interactive Proofs”14. Verder wijst Bergmair in zijn thesis op het gebruik van binaire codetoekenning van variabele lengte aan synoniemen, gebaseerd op Huffman-code [34]. Omdat het woordgebruik in de menselijke taal niet uniform verdeeld is, kunnen stego-teksten waar woorden uniform gesubstitueerd zijn, onderworpen worden aan simpele statistische aanvallen. Bij het gebruik van Huffman-code voor het toeken- nen van binaire code aan synoniemen wordt de waarschijnlijkheid van het woordgebruik gekoppeld aan de frequentie dat een woord voorkomt in de menselijke taal.

2.3 IRC

2.3.1 Introductie

IRC () is een protocol om tekstboodschappen te verzenden over het internet. IRC is oorspronkelijk bedoeld voor groepsconversaties, maar kan ook gebruikt worden voor rechtstreekse communicatie tussen twee personen. Om te kunnen chatten over IRC moeten de gebruikers via een IRC-cli¨ent een verbinding maken met een IRC- server. Eens deze verbinding actief is, moet de gebruiker inloggen op een IRC-kanaal. Daarna kan de gebruiker chatten met de andere gebruikers die eveneens verbinding hebben gemaakt met dezelfde IRC-server, of een IRC-server in hetzelfde netwerk, en ingelogd zijn op hetzelfde IRC-kanaal [35].

IRC-Servers

De IRC-servers vormen het hart van IRC. Enerzijds maken de IRC-cli¨enten verbinding met een IRC-server om zo toegang te krijgen tot het IRC-netwerk. Anderzijds maken de IRC-servers verbinding met elkaar om zo het IRC-netwerk te vormen. Een IRC-netwerk wordt steeds gevormd in de vorm van een spanning tree model, zoals weergegeven in figuur 18. Hierbij vormt iedere IRC-server een centrale knoop voor de andere IRC- servers. Een voorwaarde hierbij is dat er maar ´e´en enkele route bestaat tussen twee servers. Op deze manier is er dus ook maar ´e´en enkele route mogelijk voor een bericht

13Volgende twee zinnen geven een voorbeeld van de woord-dubbelzinnigheid van het woord “Bank”: Ik ga naar de bank om geld af te halen. Ik ga naar de zitmeubel om geld af te halen. 14HIP’s, proeven die een machine makkelijk laten bepalen als hij interageert met een andere machine of met een mens

28 2.3 IRC 2 ACHTERGRONDINFORMATIE tussen twee IRC-cli¨enten.

Figuur 18: Een voorbeeld van een IRC spanning tree model

IRC-Cli¨enten

Een IRC-cli¨ent is een programma dat verbinding maakt met een IRC-server en dat zelf geen IRC-server is. Omdat IRC een open standaard is, kan iedereen zijn eigen IRC-cli¨ent maken, zolang het maar voldoet aan het IRC-protocol [36].

Publieke en private kanalen

Een kanaal is een verzameling van IRC-gebruikers. Binnen een kanaal kunnen alle ge- bruikers van dit kanaal met elkaar chatten, waarbij iedere gebruiker berichten ontvangt van de andere gebruikers op dit kanaal. Ieder kanaal is gekenmerkt door een naam, die uniek is binnen het IRC-netwerk. Eens een IRC-gebruiker ingelogd is op het IRC- netwerk kan deze gebruiker zich in een kanaal aanmelden. Een IRC-kanaal wordt aange- maakt wanneer de eerste gebruiker zich aanmeldt op het kanaal, en wordt verwijderd wanneer de laatste gebruiker zich afmeldt van het kanaal. Als het kanaal bestaat, kan iedere gebruiker zich aanmelden op het kanaal en mee chatten met de andere gebruikers. Hierop kan echter een uitzondering worden gemaakt door private kanalen. Om op een privaat kanaal te kunnen aanmelden moet de IRC-gebruiker beschikken over een alge- meen wachtwoord van het kanaal, dat bij de aanmaak van het kanaal gedefinieerd wordt.

Persoonlijke berichten

Een gebruiker die aangemeld is op een kanaal van een IRC-netwerk kan eventueel ook persoonlijke berichten doorsturen naar een andere gebruiker. Deze andere gebruiker moet niet aanwezig zijn op hetzelfde kanaal, maar wel in hetzelfde IRC-netwerk. Hierbij is het bericht enkel zichtbaar voor de gebruiker waarvoor het bericht bestemd is. Deze

29 2.3 IRC 2 ACHTERGRONDINFORMATIE communicatie gebeurt onbeveiligd. Het bericht wordt via de internetverbinding van de gebruiker verstuurd naar de IRC-server, die het op zijn beurt naar de bestemmeling stuurt. Hier zijn minstens drie aanvallen op dit persoonlijk bericht mogelijk, namelijk:

• Het afluisteren van de internetverbinding van de zender

• Het afluisteren van een IRC-server

• Het afluisteren van de internetverbinding van de ontvanger

Direct Client-to-Client

Direct Client-to-Client of DCC [37, 38] is een sub-protocol van IRC dat gebruikt wordt om een rechtstreekse verbinding te maken tussen twee gebruikers. Het DCC protocol maakt enkel gebruik van de IRC-server voor het opzetten van de punt-tot-punt verbin- ding. De zender stuurt namelijk een bericht naar de ontvanger met daarin een verzoek tot DCC communicatie samen met enkele bijkomende parameters. De belangrijkste parameters zijn het type DCC communicatie en het IP-adres en poortnummer van de zender. De ontvanger verbindt vervolgens met de gegeven poort en IP-adres. Eens deze verbinding actief is, gebeurt de gegevensoverdracht los van de IRC-server. De twee voor- naamste types van DCC communicatie zijn DCC Chat en DCC Send.

Bij DCC Chat chatten de gebruikers met elkaar over een DCC-verbinding, los van het IRC-netwerk, zodat de servers minder belast worden. Met DCC-chat kunnen de gebruik- ers grotere stukken tekst doorsturen, bij IRC wordt het aantal zinnen per tijdseenheid beperkt.

Bij DCC Send sturen de gebruikers bestanden naar elkaar over een rechtstreekse DCC- verbinding. Omwille van de directe verbinding kunnen hoge overdrachtssnelheden gehaald worden.

2.3.2 Uitbreiden van een IRC-implementatie: plugin vs. script

De meeste IRC-cli¨enten hebben twee mogelijkheden om modules te gebruiken, namelijk plugins en scripts. Beide mogelijkheden hebben het voordeel dat ze niet afhankelijk zijn van de ontwikkeling van de IRC-cli¨ent zelf. De IRC-cli¨ent kan verder ontwikkeld worden, zonder dat de module aangepast moet worden. Om de module van deze thesis te implementeren, moest een keuze gemaakt worden tussen een plugin of een script.

Plugin

Een plugin is zelfstandig programma, dat op voorhand gecompileerd is, en dus in zijn uiteindelijke vorm niet meer kan aangepast worden. Op zichzelf kan de plugin niets,

30 2.3 IRC 2 ACHTERGRONDINFORMATIE maar ingeladen in de IRC-cli¨ent kan de plugin verschillende taken van de IRC-cli¨ent overnemen, of een uitbreiding vormen op de IRC-cli¨ent. Het voordeel van een plugin is dat hij zeer snel werkt. Dit komt doordat de plugin al volledig gecompileerd is tot een binair bestand.

Script

Een script is ongecompileerde programma-code en blijft in zijn oorspronkelijke vorm bij het inladen in de IRC-cli¨ent. Tijdens het gebruik wordt het script regel per regel ge¨ınterpreteerd en uitgevoerd. Het voordeel hiervan is dat een script flexibeler is aangezien het script nog aangepast kan worden. Een nadeel is de snelheid, die lager ligt dan een plugin omdat het script bij uitvoer nog ge¨ınterpreteerd moet worden.

Keuze

De module voor deze thesis maakt gebruik van cryptografische functies die vaak veel rekenwerk vereisen. Ook het verwerken en inlezen van grote tekstbestanden, zoals een thesaurus, neemt veel processortijd in beslag. Om deze redenen is de module gemaakt in de vorm van een plugin. Overigens is de gemaakte plugin afhankelijk van de gebruikte IRC-cli¨ent.

2.3.3 Keuze van de IRC-cli¨ent

Aangezien IRC een open standaard is, kan iedereen een IRC-cli¨ent maken. Om deze reden zijn er veel verschillende IRC-cli¨enten beschikbaar. Vooraleer de ontwikkeling van de plugin gestart is, is een keuze gemaakt met betrekking tot de gebruikte IRC- cli¨ent. Hiervoor zijn een tiental veelgebruikte IRC-cli¨enten bestudeerd en ge¨evalueerd. De eigenschappen waaraan het meeste belang aan is besteed, zijn:

• Mogelijkheid tot gebruik van plugins en/of scripts.

• Multi-platform. De IRC-cli¨ent moet zeker te gebruiken zijn op Windows en enkele Linux distributies.

• Open-source, of desnoods freeware.

• Gebruikersomgeving. Omdat de plugin menselijke interactie vereist, is het handig als een IRC-cli¨ent gebruikt wordt die een grafische gebruikersomgeving heeft.

Elk van de bestudeerde IRC-cli¨enten hebben we op deze eigenschappen beoordeeld. Een overzicht hiervan is weergegeven in tabel 2.3.3. De bestudeerde IRC-cli¨enten zijn BitchX [39], BersIRC [40], ChatZilla [41], Gaim [42], HydraIRC [43], [44],

31 2.3 IRC 2 ACHTERGRONDINFORMATIE mIRC [45], Visual IRC [46], X-Chat [47].

Werkende Plugin in scripting Beschik- Gebruikers- platformen mogelijkheden baarheid omgeving BitchX Gedeeltelijk op Win- Scripting via IrcII en Open-source Command prompt dows, volledig op TCL, weinig infor- Linux, Unix, BSD en matie over plugins Mac OS BersIRC Niet voor Linux, wel Plugins met C++ en Open-source Grafische interface voor Windows, BSD, Pascal, geen scrip- Unix en Mac OS ting ChatZilla Voor Windows, Plugins met C++, Open-source Grafische interface Linux, Unix, BSD en scripting enkel via Mac OS JavaScript Gaim Voor Windows, Gebruik van plugins Open-source Grafische interface Linux, Unix, BSD en mogelijk Mac OS versie HydraIRC Enkel voor Windows Gebruik van plugins Open-source Grafische interface mogelijk (propri¨etair) Konversation Niet voor Windows. Gebruik van plugins Open-source Grafische interface Wel voor Linux, mogelijk Unix, BSD en Mac OS mIRC Enkel Windows ver- Scripting mogelijk Closed- Grafische interface sie via eigen scripting source taal, geen plugins mogelijk Visual IRC Enkel voor Windows Scripting mogelijk Open-source Grafische interface met Versus X-Chat Voor Windows, Plugin mogelijk Open-source Grafische interface linux, BSD en Mac via C en Python, OS scripting mogelijk via Python, Perl, JavaScript, TCL en Ruby

Tabel 1: Een overzicht van de bestudeerde IRC-cli¨enten

Na het bestuderen en testen van deze IRC-cli¨enten werden Konversation en X-Chat weerhouden. X-Chat beschikt over duidelijker en meer uitgebreide informatie voor het ontwikkelen van een plugin dan Konversation. Na uitvoerig testen van de plugin-interface van X-Chat en Konversation, is beslist met X-Chat verder te gaan. X-Chat is sinds kort

32 2.4 Programmeeromgeving 2 ACHTERGRONDINFORMATIE propri¨etair te gebruiken onder Windows en bevat een GPL15 licentie onder Linux.

2.4 Programmeeromgeving

De module die ontwikkeld is maakt gebruik van de plugin-interface die beschikbaar is gesteld door X-Chat en is geschreven in ANSI C.

2.4.1 Besturingssystemen

De module is platform-onafhankelijk geschreven om een zo breed mogelijk publiek aan te spreken. In de loop van de ontwikkeling is de module op de volgende systemen ontwikkeld en getest :

XP Home

• Microsoft Windows XP Professional

• Ubuntu 6.10 i386 (Edgy Eft)

• Ubuntu 6.10 amd64 (Edgy Eft)

• Ubuntu 7.04 i386 (Feisty Fawn)

• Slackware 11.0

Om de code te compileren op deze besturingssystemen is er gebruik gemaakt van de MinGW16 compiler voor de Microsoft besturingssystemen en de GCC17 compiler voor de Linux besturingssystemen.

2.4.2 Gebruikte bibliotheken

Naast de standaard C bibliotheken, is er voor de ontwikkeling van de module ook beroep gedaan op de hieronder beschreven externe C bibliotheken.

OpenSSL

Om de cryptografische noden van de module te voorzien, is er na een korte studie van beschikbare bibliotheken gekozen voor de cryptografische bibliotheek van OpenSSL [51]. OpenSSL is multi-platform, open-source, goed gedocumenteerd en geschikt voor de pro- grammeertaal C. Bovendien is OpenSSL gemakkelijk te installeren, zowel voor gebruik als ontwikkeling, op de verschillende besturingssystemen.

15GPL = General Public License: “Je mag met de software doen wat je wil (inclusief aanpassen en verkopen), mits je dat recht ook doorgeeft aan anderen en de auteur(s) van de software vermeldt.”[48] 16Minimalist GNU for Windows [49] 17GNU Compiler Collection [50]

33 2.4 Programmeeromgeving 2 ACHTERGRONDINFORMATIE

GTK+

Als grafische bibliotheek is er gebruik gemaakt van GTK+ [52]. GTK+ is ook de basis van de GUI18 van X-Chat. Verder wordt GTK+ ook nog gekenmerkt door zijn multi- platform en open-source karakter.

GLib

Tenslotte is er ook gebruik gemaakt van de GLib [53] bibliotheek. Deze bibliotheek biedt onder andere belangrijke functionaliteiten aan zoals threads, event loops en “portability wrappers”19.

2.4.3 Documentatie

Om de broncode van de module goed te documenteren, is naast uitvoerige commen- tari¨ering van de broncode gebruik gemaakt van het documentatiesysteem Doxygen [54]. Dit systeem doorloopt de volledige broncode van de module en produceert documen- tatie in het gewenste formaat. Doxygen biedt ondermeer de mogelijkheid om online documentatie (in HTML20) te genereren.

18Graphical user interface 19Dit zijn functies die herschreven zijn naar algemene functies die werken voor alle besturingssystemen, zodat het schrijven van de programmacode niet voor elke besturingssysteem apart hoeft te lopen. 20HyperText Markup Language

34 3 THEORETISCH MODEL

3 Theoretisch model

In dit hoofdstuk wordt het theoretisch model van het ontworpen systeem nader toegelicht. Eerst wordt de architectuur van de implementatie besproken, gevolgd door een bespre- king van de gebruikte cryptografische primitieven. Tenslotte wordt de opbouw van de codetabel aangehaald.

3.1 Architectuur

3.1.1 Systeembeschrijving

Figuur 19 geeft een overzicht van het ontworpen systeem weer. Het systeem is ge¨ımple- menteerd als een plugin voor de IRC-cli¨ent X-Chat. De plugin bestaat uit verschillende bouwblokken die de plugin uitbreiden met functionaliteiten. Zo wordt de plugin onderan- dere uitgebreid met de mogelijk tot het gebruiken van hashtabellen, gelinkte lijsten en cryptografische primitieven. Verder bevat de plugin nog een bouwblok voor het genere- ren van een synoniemenlijst van eigen formaat uit een thesaurus en een frequentielijst (het data-bestand). De belangrijkste bouwblok van de plugin is de steganografische engine (stego-engine). Het ontwerp van de stego-engine wordt in 3.1.2 besproken. De communicatie die bestemd is voor de steganografische sessie (stego-sessie) wordt door de plugin onderschept en vervolgens verwerkt door de stego-engine. De stego-engine verwerkt deze tekst dan samen met de klaartekst met behulp van menselijke interactie tot een stego-tekst. Deze stego-tekst wordt vervolgens in plaats van de originele tekst doorgezonden naar de IRC-server, zoals normale IRC-communicatie verloopt. Als de plugin van de ontvanger van de stego-sessie een bericht van de stego-zender opmerkt, verwerkt de plugin deze tekst met de stego-engine. De stego-engine haalt op zijn beurt de klaartekst terug uit de stego-tekst.

Figuur 19: Werking van het ontworpen systeem

35 3.1 Architectuur 3 THEORETISCH MODEL

Figuur 20 geeft een meer complete weergave van het ontworpen systeem. De initialisatie van de stego-sessie bestaat uit het aanmaken van het data-bestand als deze nog niet bestaat, het vastleggen van de sessie-sleutel (zie 3.2) en het aanmaken van de codetabel (zie 3.3). Uit de verkregen sessie-sleutel worden twee sleutelafleidingen gedaan, namelijk de generatie van een deterministische random bitstroom β en de afleiding van de RC4- sleutel. Als deze sessie-afhankelijke sleutels bepaald zijn, wordt de codetabel gegenereerd met behulp van β en de klaartekst vercijferd met het RC4 stroomcijfer tot een ononder- broken bitstroom (RC4-datastroom). De codetabel is een lijst van woorden met daaraan hun beschikbare synoniemen en een sessie-afhankelijk binaire representatie gekoppeld.

Figuur 20: Werking van het ontworpen systeem met cryptografische primitieven

3.1.2 Stego-engine

De stego-engine vervult de belangrijkste taken van de plugin. Tijdens de initialisatiefase verzorgt de stego-engine het inlezen van het data-bestand en het genereren en optimali- seren van de codetabel. Tijdens de stego-sessie zelf, is de stego-engine verantwoordelijk voor het construeren en het decoderen van de stego-tekst.

Nadat de sessie-sleutel is vastgelegd tussen beide gebruikers en vervolgens de twee sleutelafleidingen zijn voltooid, zal de stego-engine het data-bestand inlezen in het geheugen. Als dit data-bestand nog niet beschikbaar is, zal dit data-bestand eerst door de plugin gegenereerd worden met behulp van een thesaurus en een frequentielijst21. Na het inlezen van het data-bestand in het geheugen wordt de codetabel gegenereerd,

21De thesaurus en de frequentielijst horen aan beide zijden dezelfde te zijn. Dit is nodig om dezelfde codetabel te kunnen genereren bij de beide gebruikers.

36 3.1 Architectuur 3 THEORETISCH MODEL gevolgd door een optimalisatie van de codetabel.

Na de initialisatiefase volgt de stego-sessie. Zoals eerder vermeld zal de communicatie die bestemd is voor de stego-sessie door de plugin onderschept worden en verwerkt worden door de stego-engine. De stego-engine zal de desbetreffende zin analyseren met behulp van de codetabel. In de codetabel wordt voor elk woord naar synoniemen gezocht met een binaire representatie, die overeenkomt met de bit uit de RC4-datastroom die door dat woord moet doorgezonden worden. In de pop-up wordt de ingevoerde zin weergegeven met voor elk woord, waar synoniemen voor gevonden zijn in de vorige stap, een drop- downbox met deze synoniemen. Met deze pop-up kan de gebruiker een keuze maken tussen verschillende voorgestelde synoniemen. Dit resulteert in een zin die zijn per- soonsgebonden karakter behoudt en volkomen in de context van het IRC-gesprek past. De zin die door de gebruiker gevormd wordt, wordt vervolgens doorgezonden naar de IRC-server. Het bovenste gedeelte van figuur 21 geeft een schematische voorstelling van dit proces.

Figuur 21: Het construeren en decoderen van een stego-tekst door de stego-engine

Het onderste gedeelte van figuur 21 stelt het ontcijfering proces aan de ontvangstzijde voor. De communicatie afkomstig van de zender in de stego-sessie wordt door de plugin onderschept en verwerkt door de stego-engine. De stego-engine zal de stego-tekst ana- lyseren met behulp van de codetabel. Door de binaire representaties van elke woord op

37 3.1 Architectuur 3 THEORETISCH MODEL te zoeken in de codetabel, kan de stego-engine de RC4-datastroom reconstrueren. Door de bekomen RC4-datastroom te ontcijferen met de RC4-sleutel verkrijgt de stego-engine de originele klaartekst en toont hem aan de gebruiker. Doordat de klaartekst vercij- ferd wordt met een stroomcijfer, kan vanaf de eerste bits die binnenkomen al ontcijferd worden.

3.1.3 Data-structuur

Het data-bestand wordt volledig in het geheugen ingelezen om zo makkelijk en snel data op te vragen en bewerkingen op de data uit te voeren. Bij het ontwerpt voor de data- structuur in het geheugen is er vooral rekening gehouden met de snelheid waarmee infor- matie kan opgehaald worden, het geheugenverbruik en de complexiteit van de structuur. Aangezien C geen object-geori¨enteerde taal is, kan er geen gebruik gemaakt worden van klasses om de data-structuur uit te werken. Na een korte studie, is gekozen om met een hashtabel22 te werken in combinatie met gelinkte lijsten23. De hashtabel wordt gebruikt als opzoektabel waarbij de sleutel voor elke woord gelijk wordt genomen aan de string van het woord in kwestie. De gelinkte lijsten verzorgen het toewijzen van synoniemen aan de woorden uit de hashtabel. Als de informatie van een bepaald woord nodig is, dient enkel het woord als sleutel meegegeven te worden aan de hashtabel. Figuur 22 geeft een weergave van deze data-structuur.

Figuur 22: De data-structuur van de geheugenopslag

22Hashtabellen zijn data-structuren waarbij sleutels worden geassocieerd met bepaalde waardes. De werking van een hashtabel berust op een hashfunctie die de sleutel omzet in een hashwaarde welke gebruikt wordt om de sleutel-waarde combinatie efficint te vinden. Gemiddeld genomen levert een hashtabel de gezochte waarde in een constante tijd. 23Een gelinkte lijst is een data-structuur die bestaat uit een reeks van data-elementen, elk met een aantal datavelden en ´e´enof twee verwijzingen naar een volgend en/of vorig data-element. De gelinkte lijst die in deze thesis ontworpen is, heeft per data-element slecht ´e´en verwijzing naar een volgend data- element.

38 3.2 Cryptografische primitieven 3 THEORETISCH MODEL

3.1.4 Menselijke interactie

De menselijke interactie wordt door de stego-engine voorzien door een pop-up venster. Het pop-up venster wordt opgebouwd met behulp van de grafische bibliotheek GTK+. In dit pop-up venster wordt de originele zin die de zender wil versturen, opgebouwd met behulp van woorden en synoniemenlijsten. Woorden waarvoor geen synoniemen beschik- baar zijn in de codetabel worden afgebeeld als onaanpasbare tekst. Woorden waarvoor synoniemen beschikbaar zijn, worden vervangen door drop-downboxen.

In zo een drop-downbox worden de synoniemen van een bepaald woord weergegeven, die de binaire representatie hebben die overeenkomt met de bit die doorgestuurd moet worden. Ook worden de synoniemen weergegeven die geen bit representeren (NULL- synoniemen: zie 3.3.2). De synoniemen zijn gerangschikt op frequentie zodat de meest onwaarschijnlijke synoniemen onderaan in de lijst staan. De synoniemen met een bi- naire representatie en de NULL-synoniemen van een bepaald woord worden in de drop- downbox gescheiden van elkaar. Opdat de gebruiker dan makkelijk kan zien welke sy- noniemen bijdrage tot een gegevensoverdracht. Als er geen synoniemen beschikbaar zijn met een binaire representatie die in de context van de zin passen, kan de gebruiker ook een NULL-synoniem kiezen24.

De woorden waarvoor synoniemen beschikbaar zijn en dus voorkomen in een drop- downbox in het pop-up venster, representeren elk de volgende bit uit de RC4-datastroom. Figuur 23 geeft hier een voorbeeld van. In de drop-downbox worden de synoniemen met de juiste binaire representatie weergegeven, gevolgd door de NULL-synoniemen. Als een synoniem gekozen wordt in een drop-downbox moet de pop-up aangepast worden. Als er namelijk in een drop-downbox voor een NULL-synoniem gekozen wordt, zullen de drop-downboxen volgend op de actieve drop-downbox, synoniemen met een binaire representatie voorstellen, die niet meer overeenkomen met de volgende bit uit de RC4- datastroom. Als er in het voorbeeld uit figuur 23 voor het synoniem “little” gekozen wordt, zal de volgende drop-downbox herrekend moeten worden om de bit 0 door te sturen in plaats van de bit 1 waarvoor hij berekend was.

3.2 Cryptografische primitieven

Het stego-systeem dat in deze thesis beschreven wordt maakt gebruik van geheime sleu- tel steganografie. Met behulp van een geheime sessiesleutel, wordt een deterministi- sche random bitstroom β gegenereerd om de codetoekenning aan de woorden uit de

24Door het beschikbaar stellen van synoniemen met en zonder binaire representatie in de codetabel, wordt er verzekerd dat er steeds voldoende synoniemen beschikbaar zijn om uit te kiezen. Figuur 23 illustreert de noodzaak hiervan. De ingegeven zin is “Hey Bar, this is just a small test”. Het synoniem “minor” past hier niet in de context van de zin. Door telkens een voldoende aantal synoniemen aan te bieden, is de kans op behoud van de context van de zin groot. In deel 3.3 wordt dit uitvoerig besproken.

39 3.2 Cryptografische primitieven 3 THEORETISCH MODEL

Figuur 23: Een voorbeeld van een pop-up venster

codetabel uniek te maken voor elke sessie. Na het einde van de communicatie vervalt deze sessiesleutel.

3.2.1 Vastleggen van de sessiesleutel

Geheime sleutel steganografie vereist de kennis van een geheime sleutel tussen Alice en Bob. De moeilijkheid bestaat erin dat het uitwisselen van geheime informatie de ori- ginele bedoeling van niet detecteerbare communicatie tegenspreekt. Het communiceren van een geheime sleutel zou immers meteen door Wendy opgemerkt en verdacht gevon- den worden waardoor bewaker Wendy alarm slaat.

Bij het ontwikkelen van het stego-systeem is er vanuit gegaan dat Alice en Bob geen voorkennis hebben van een gemeenschappelijke sleutel. Er is gekozen om een sessiesleu- tel vast te leggen via het Diffie-Hellman protocol.

Overdrachtsmedium

De keuze van het overdrachtsmedium is belangrijk omdat het op geen enkele manier mag opvallen dat we een sleutelovereenkomst doen. Niet enkel het uitwisselen van grote priemgetallen kan de geheime intentie van Alice en Bob verraden, maar het over- drachtsmedium zelf moet ook een standaard medium zijn. Het gebruik van een onge-

40 3.2 Cryptografische primitieven 3 THEORETISCH MODEL bruikelijk of veilig medium zou Alice en Bob ook verraden. Een bijkomende moeilijkheid in IRC is dat niemand elkaars IP-adres kan zien. Alle berichten lopen namelijk via een server en niet rechtstreeks naar de tegenpartij. Enkel de servers kennen de IP-adressen. Dit feit elimineert ook meteen een aantal communicatiemediums. Enkele mogelijkheden voor het uitwisselen van de nodige waarden zijn onder andere :

• Sms

– Voordeel: Onopgemerkt (los van het internet); er is speciale afluisterappara- tuur nodig om een sms te onderscheppen. – Nadeel: Niet gratis; men moet al de gsm-nummer kennen van de ontvanger; extra externe hardware vereist (GSM).

• Posts op een publiek forum

– Voordeel: Er is een groot aanbod van forums, ´e´enpost valt niet op als ze anoniem gedaan wordt. – Nadeel: De juiste locatie moet op voorhand afgesproken worden waarmee we terug bij het origineel probleem terecht komen: via welk medium. Als dit een vaste locatie is kan het forum gemonitord worden.

• Instant messenger

– Voordeel: Makkelijk en snel. – Nadeel: Extra software vereist; als de internetconnectie afgeluisterd wordt, kan gemakkelijk de TCP/IP-connectie onderschept worden.

• Priv´eberichten op IRC

– Voordeel: Gemakkelijk te integreren in een plugin; gemakkelijk autonoom te maken. – Nadeel: Als de server gemonitord wordt, vallen priv´eberichten op, alsook grote priemgetallen.

• DCC-chat op IRC25

– Voordeel: Makkelijk te integreren in een plugin; makkelijk autonoom te maken. – Nadeel: Als de server gemonitord wordt, valt DCC-chat op. DCC-chat is namelijk rechtstreeks chatten via een TCP/IP-connectie. De communicatie

25Het verschil met priv´eberichten op IRC is dat bij priv´eberichten op IRC, de communicatie via een IRC-server verloopt en bij DCC-chat, de communicatie over een rechtstreekse TCP/IP-connectie tussen beide gebruikers verloopt.

41 3.2 Cryptografische primitieven 3 THEORETISCH MODEL

verloopt dus niet meer via IRC wat het gebruik van deze methode verdacht maakt. Ook is er bijkomend de mogelijkheid dat de TCP/IP-connectie on- derschept kan worden.

• DCC-bestandsoverdracht op IRC

– Voordeel: Makkelijk te integreren in plugin; makkelijk autonoom te maken; Onopvallend. – Nadeel: De implementatie hiervan is complexer dan DCC-chatten. Er is de mogelijkheid dat de TCP/IP-connectie onderschept kan worden en dus zo ook het doorgezonden bestand.

In deze thesis is er uit praktische overwegingen voor de laatste optie gekozen. De sleutelovereenkomst verloopt volledig autonoom. Er wordt namelijk een bestand aange- maakt met daarin de publieke sleutel. Dit bestand wordt automatisch gestuurd naar de gewenste persoon en dit in twee richtingen. De bestanden worden automatisch ge¨ınterpreteerd en verwerkt. Na de sleutelovereenkomst worden de bestanden ook ver- wijderd.

3.2.2 Sleutelafleidingen

Alle gebruikte sleutels worden afgeleid van de geheime sessiesleutel die overeengekomen werd bij de Diffie-Hellman uitwisseling. Allereerst wordt een deterministische random bitstroom gegenereerd. Vervolgens wordt uit de sessiesleutel een tweede sleutel afgeleid. Deze tweede sleutel wordt gebruikt voor de vercijfering van de klaartekst.

Genereren van een deterministische random bitstroom

Om de codetabel, die in deel 3.3 verder besproken wordt, op te maken is een random bit- stroom nodig. Deze bitstroom wordt gebruikt om binaire representaties aan synoniemen toe te kennen. Ook moet deze bitstroom random26 zijn om de drie binaire representaties evenredig over de synoniemen te kunnen verdelen. Een andere belangrijke eigenschap die de bitstroom moet bezitten is dat hij deterministisch moet zijn zodat de stego-engine van Alice en Bob dezelfde codetoekenningen doen aan hun synoniemenlijst. Om deze laatste reden en omdat de bitstroom sessie-afhankelijk moet zijn, wordt deze bitstroom afgeleid uit de sessie-sleutel.

Om de deterministische random bitstroom β te bekomen, wordt allereerst de SHA1 hash van de sessiesleutel berekend. Vervolgens wordt van de bekomen hashwaarde de HMAC op basis van SHA1 berekend met als geheime sleutel de sessiesleutel. De resulterende

26random is niet hetzelfde als willekeurig. Random betekend hier afhankelijk van de invoer, een herproduceerbare reeks enen en nullen genereren, die een willekeurig karakter hebben.

42 3.2 Cryptografische primitieven 3 THEORETISCH MODEL hashwaarde vormt de eerste datablok van β. Vervolgens wordt telkens de HMAC van de vorig bekomen hashwaarde berekend met als geheime sleutel de sessiesleutel totdat de gewenste lengte voor β bereikt is. Figuur 24 geeft een grafische weergave van deze bitstroomgeneratie.

Figuur 24: De generatie van de deterministische random bitstroom β

Afleiden van de RC4-sleutel

Een tweede beveiliging in het stego-systeem wordt bekomen door het vercijferen van de klaartekst. De vercijfering gebeurt met een stroomcijfer zodat de ontvangstzijde van de stego-sessie al kan starten met ontcijferen bij het ontvangen van de eerste byte. Uit praktische overwegingen werd er voor het stroomcijfer RC427 gekozen, dat als een veilig stroomcijfer beschouwd wordt. RC4 is een symmetrisch stroomcijfer met een variabele sleutellengte en werd gecre¨eerd door Ron Rivest van RSA Security Inc. in 1987. Het algoritme zelf is buitengewoon eenvoudig en kan effici¨ent ge¨ımplementeerd worden in software waardoor RC4 zeer snel28 is.

In het stego-systeem wordt de klaartekst vercijferd met de RC4-sleutel alvorens hem te verwerken in de schuiltekst. Aan de ontvangstzijde van de stego-sessie wordt de cij- fertekst door het stego-systeem uit de stego-tekst gehaald. De ontvanger bekomt de klaartekst door de cijfertekst te ontcijferen met de RC4-sleutel.

27De cryptografische bibliotheek van OpenSSL implementeert het stroomcijfer Arcfour [11] hetgeen compatibel is met RC4, een gepatenteerd cijfer van RSA Security Inc. 28Voorbeeld : voor de generatie van een RC4 sleutelstroom op een PIII-processor met het besturings- systeem Linux, zijn er slechts 7.3 klokcycli per gegenereerde byte nodig. [55]

43 3.3 Codetabel 3 THEORETISCH MODEL

De RC4-sleutel wordt tijdens de initialisatiefase uit de sessiesleutel afgeleid. Dit wordt gedaan om de vercijfering onafhankelijk te laten verlopen van de generatie van β. De 1024 bit sessiesleutel wordt opgedeeld in acht blokken van 128 bit. Er wordt met de bits van de eerste datablok een XOR-bewerking gedaan met de overeenkomstige bits van de tweede datablok. Met de resulterende datablok wordt dezelfde bewerking gedaan met de bits van de volgende datablok. Dit proces wordt herhaald tot alle acht datablokken verwerkt zijn tot een resulterende datablok, de 128 bit RC4-sleutel. Figuur 25 geeft een grafische weergave van deze RC4 sleutelafleiding.

Figuur 25: De RC4 sleutelafleiding

3.3 Codetabel

3.3.1 Situering

Zoals eerder vermeld in de probleemstelling 1.2 wordt in deze thesis een binaire bood- schap gecodeerd d.m.v. woordsubstitutie. Om dit mogelijk te maken moeten de woorden gekoppeld zijn aan een binaire representatie. Om een bericht door te sturen, moet deze binaire representatie voor ieder woord hetzelfde zijn bij de zender en ontvanger. De bi- naire representatie kan echter verschillen, telkens er een nieuwe sessie tussen gebruikers wordt opgestart. Op deze manier zal de afluisteraar, die niet dezelfde binaire repre- sentaties van de woorden kent, een heel ander bericht zien dan het werkelijk verstuurd bericht.

Om niet iedere keer uit te rekenen welke binaire representatie een gevonden woord heeft, wordt een codetabel opgemaakt. In een eerste poging worden in het begin van de sessie alle gekende woorden met hun bijhorende synoniemen ingelezen in een hash-tabel. Daarna wordt aan de hand van de β, de deterministische bitstroom, een binaire repre- sentatie toegekend aan ieder woord. Hierbij moet wel rekening gehouden worden met het gegeven dat een bepaald synoniem bij meerdere woorden kan horen. Al deze zelfde

44 3.3 Codetabel 3 THEORETISCH MODEL synoniemen moeten dus ook dezelfde binaire representatie krijgen. Omdat de bitstroom identiek is voor zender en ontvanger, zal de codetabel ook identiek zijn. Deze methode wordt schematisch weergegeven in figuur 26.

Figuur 26: Een voorstelling van de codetabel

3.3.2 Codetabel generatie

De methode die voorgesteld is in figuur 26 is niet optimaal. Bij het woord big is er maar ´e´en synoniem met een binaire representatie 0, en vier synoniemen met een binaire re- presentatie 1. Indien de zender het woord big typt, en een 0 doorgestuurd moet worden, heeft de zender geen keuze, en zal deze voor heavy moeten kiezen. Door ook gebruik te maken van NULL-synoniemen (die geen binaire representatie voorstellen), kan dit pro- bleem eenvoudig opgelost worden. De zender zal altijd tussen deze NULL-synoniemen kunnen kiezen. Samen met de synoniemen waarvan de representatie overeenstemt met het huidige, te verzenden deel van het bericht (de geschikte synoniemen) is de keuze voor de zender wat uitgebreider. In deze thesis wordt gestreefd naar een situatie waarin ongeveer 50% van de synoniemen NULL-synoniemen zijn, 25% een binaire representatie 0 (de 0-synoniemen) bevatten en 25% een binaire representatie 1 (de 1-synoniemen) bevatten. Om dit te realiseren, wordt iedere representatie van een synoniem (0, 1 of NULL) gekozen door twee bits van de bistroom. 00 stelt een 0 voor, 11 stelt een 1 voor en een 10 of 01 stelt een NULL voor.

Een tweede verschil met de eerste methode is dat het oorspronkelijk getypt woord ook bij de synoniemen lijst gevoegd wordt. Dit oorspronkelijk getypt woord moet dus ook voorzien zijn van een binaire representatie. Enerzijds is hierdoor de keuze mogelijkheid van de zender weer groter, anderzijds kan het zijn dat het oorspronkelijk getypt woord een NULL-representatie bevat, of een geschikt synoniem is. In dit geval mag het oor-

45 3.3 Codetabel 3 THEORETISCH MODEL spronkelijk getypt woord in de zin blijven staan. Deze methode om een codetabel te genereren is weergegeven in figuur 27.

Figuur 27: De generatie van de codetabel

Om een overzicht te geven van de spreiding van de synoniemen in de volledige thesaurus is een boxplot 29 opgemaakt. Deze boxplot geeft procentueel weer hoeveel van de syno- niemen ieder woord bezit met een bepaalde representatie. Figuur 28 geeft een mogelijke spreiding van de synoniemen weer na de generatie van een codetabel. Hierin valt af te leiden dat bij de generatie woorden voorkomen die geen enkel synoniem hebben met een represenatie 0, maar ook woorden waarbij alle synoniemen een represantie 0 hebben. Toch bevatten 50% van de woorden tussen 22% en 58% synoniemen met een representatie 0, op analoge manier kan dit voor de 1- en NULL-synoniemen afgeleid worden.

3.3.3 Codetabel optimalisatie

Zoals te zien is in figuur 27, is de codetabel nog niet optimaal. Bij great is er maar ´e´en 0-synoniem (16.67%), bij big en large is er zelfs geen enkel 0-synoniem. Om de codetabel beter te laten aanleunen bij de vooropgestelde eisen, ondergaat de codetabel enkele opti- malisatie stappen. Zoals vermeld wordt geprobeerd om de verhouding 25/25/50 van de representaties van de synoniemen zo goed mogelijk te benaderen. Een goede spreiding van de synoniemen is weergegeven in figuur 29. Ideaal zou immers zijn dat ieder woord precies aan de verhouding 25/25/50 voldoet, maar dit is praktisch niet haalbaar. De spreiding van de synoniemen na de codetabel generatie wordt weergegeven in figuur 28.

29In de beschrijvende statistiek is een boxplot een grafische weergave van de vijf-getallensamenvatting. Deze vijf-getallensamenvatting bestaat uit het minimum, het eerste kwartiel, de mediaan (of 2e kwartiel), het derde kwartiel en het maximum van de waargenomen data. Een boxplot is daarmee een weliswaar sterk vereenvoudigde, maar zeer bruikbare, voorstelling van de verdeling van de data [56].

46 3.3 Codetabel 3 THEORETISCH MODEL

Deze wijkt duidelijk nog veel af van de ideale spreiding. De codetabel optimalisatie probeert de binaire representatie van de synoniemen zo aan te passen dat de spreiding zo dicht mogelijk bij deze ideale spreiding aanleunt. Deze optimalisatie moet determi- nistisch zijn, zodat deze bij zender en ontvanger identiek dezelfde operaties uitvoert.

Figuur 28: De spreiding van de synoniemen na het genereren van een codetabel, zonder opti- malisatiestappen

Figuur 29: Een goede spreiding van de synoniemen

Meer dan 40% NULL-synoniemen

Zoals aangegeven in de boxplot van de goede spreiding (figuur 29) wordt een werkvoor- beeld genomen waar ieder woord minstens 40% NULL-synoniemen moet bevatten. De eerste stap van de codetabel optimalisatie zorgt hiervoor. Voor ieder woord in de tabel wordt berekend hoeveel NULL-synoniemen dit woord bevat. Bevat het woord minder dan 40% NULL-synoniemen, dan krijgen de meest frequente synoniemen een NULL- representatie. De meest frequente synoniemen zijn hiervoor gekozen, omdat deze vaak beter in de zin passen, en op deze manier altijd gebruikt kunnen worden. Zo wordt heel de codetabel doorlopen en aangepast. De spreiding na deze optimalisatiestap is

47 3.3 Codetabel 3 THEORETISCH MODEL weergegeven in figuur 30. Hierin valt op dat de meeste woorden veel meer dan 40% NULL-synoniemen bevatten. De synoniemen van de woorden die verder in de the- saurus staan worden ook later aangepast. Maar deze synoniemen komen ook voor bij woorden eerder in de thesaurus. Als deze synoniemen later in de optimalisatiestap NULL-synoniemen worden, stijgt het aantal NULL-synoniemen bij de woorden eerder in de thesaurus.

Figuur 30: De spreiding van de synoniemen na een eerste optimalisatiestap

Meer dan 40% en minder dan 60% NULL-synoniemen

De tweede optimalisatiestap beperkt het aantal NULL-synoniemen. In de eerste stap worden enkel bij de woorden met te weinig NULL-synoniemen aanpassingen gedaan. Bij deze stap worden ook bij de woorden met meer dan 60% NULL-synoniemen aanpas- singen gedaan. Bij deze woorden worden enkele NULL-synoniemen omgevormd tot een 0- of 1-synoniem. Hiervoor worden de meest frequente woorden, die in de vorige stap niet omgevormd zijn tot NULL-synoniemen, omgevormd. De keuze van de nieuwe represen- tatie is afhankelijk van het aantal 0- of 1-synoniemen bij dit woord. Het NULL-synoniem krijgt de representatie die het minst voorkomt als representatie van de synoniemen van het gegeven woord. Hierdoor daalt het percentage NULL-synoniemen, maar stijgt het aantal 0- of 1-synoniemen. De spreiding na deze optimalisatiestap is weergegeven in figuur 31.

Het nadeel hierbij is dat synoniemen die eerder tot NULL-synoniemen zijn gemaakt, door de eerste stap, nu weer een representatie kunnen worden toegekend. Dit is niet gewenst, omdat er nu weer woorden voorkomen met minder dan 40% NULL-synoniemen. Dit is opgelost door de synoniemen, die in de eerste optimalisatiestap zijn aangepast, niet meer te wijzigen. De spreiding door deze aanpassing is weergegeven in figuur 32.

48 3.3 Codetabel 3 THEORETISCH MODEL

Figuur 31: De spreiding van de synoniemen na een tweede optimalisatiestap

Figuur 32: De spreiding van de synoniemen na een tweede optimalisatiestap met het vastzetten van de gewijzigde synoniemen

Herhalen van de optimalisatie stappen

Door de codetabel slechts ´e´enkeer door beide stappen te optimaliseren, is de spreiding van de synoniemen nog steeds niet voldoende. We verbeteren de spreiding door deze stappen te herhalen totdat de synoniemen niet meer wijzigen. In onze thesaurus zijn beide stappen zes keer herhaald, om stabiel te zijn. De spreiding hierbij is weergeven in figuur 33.

Hierbij valt op dat het minimum aantal NULL-synoniemen ligt nu niet meer op 0%, maar op 40%, wat een zeer goede vooruitgang is. Dit wil zeggen dat bij ieder woord zeker 40% van de synoniemen gekozen kunnen worden. Bij de vorige stappen was dit bij enkele uitzonderingen nog 0%.

Het minimum aantal NULL-synoniemen verminderen tot 30%

Na het herhalen van de optimalisatie stappen ligt de box van de NULL-synoniemen toch te hoog. Door het verminderen van het minimum aantal NULL-synoniemen tot 30% komt deze box lager te liggen en benadert zo beter de goede spreiding van figuur 29.

49 3.3 Codetabel 3 THEORETISCH MODEL

Figuur 33: De spreiding van de synoniemen na het herhalen van de twee optimalisatie stappen

Door deze vermindering van de NULL-synomien stijgt het aantal 0- en 1-synoniemen. De kans dat zo een synoniem met betekenis wordt doorgestuurd is nu ook groter, wat voor een betere effectiviteit zorgt. Deze spreiding is weergegeven in figuur 34.

Figuur 34: De spreiding van de synoniemen na het verlagen van het minimum aantal NULL- synoniemen

3.3.4 Eventuele uitbreidingen

Om een betere payload van het stego-systeem te krijgen, kan de codetabel uitgebreid worden. Door representaties van meerdere bits te gebruiken, sturen we meerdere bits per woord door. Het nadeel hierbij is dat de gebruiker een kleinere keuze aan synoniemen zal hebben. Figuur 35 toont het verschil in payload en aantal synoniemen tussen de module zonder en met deze uitbreiding. In dit voorbeeld wordt steeds een representatie van twee bits gebruikt, ook zijn er geen NULL-synoniemen meer. Deze twee parameters kunnen nog gewijzigd worden, om veranderingen in de payload en het aantal mogelijke synoniemen te krijgen.

50 3.3 Codetabel 3 THEORETISCH MODEL

Figuur 35: Vergelijking tussen de originele en de uitgebreide codetabel

Op basis van de Huffman-code [34, 5] kan nog een tweede uitbreiding uitgewerkt wor- den. Bij deze methode krijgen niet alle representaties evenveel bits toegekend. De meest frequente synoniemen krijgen maar ´e´en bit toegekend, en worden dus in 50% van de gevallen gebruikt. Minder frequent gebruikte synoniemen krijgen meerdere bits toe- gekend, maar worden dus ook minder vaak gebruikt. De logica hierachter is dat de synoniemen die minder frequent gebruikt worden ook minder goed in de zin passen. Als ze in een zin geforceerd worden, sturen ze veel informatie door. Een voorbeeld om bits toe te kennen aan synoniemen met behulp van de methode met Huffman-code, is voorgesteld in figuur 36. V´o´orhet synoniem staat de representatie van dit synoniem. Achter het synoniem staat de kans dat dit synoniem gebruikt wordt.

Figuur 36: Bits toekennen aan synoniemen met behulp van de methode met Huffman-code

51 4 IMPLEMENTATIE

4 Implementatie

In dit hoofdstuk wordt meer informatie gegeven over de ontwikkelde plugin en het ge- bruik ervan in X-Chat. Het implementeren van de plugin in X-Chat stelt enkele mini- mumvereisten aan de gebruikte computer. Enkele van deze vereisten zijn een voldoende snelle processor, een voldoende groot geheugen, maar ook bibliotheken die nodig zijn voor een goede werking van de plugin. Het installeren van de plugin zelf behoeft ook wat ver- duidelijking, zodat de plugin kan werken en benodigde data-bestanden ter beschikking heeft. Verder worden enkele suggesties van uitbreidingen voorgesteld. Het daarop vol- gende punt verduidelijkt het gebruik van de plugin. Een laatste punt in dit hoofdstuk geeft enkele data weer van testen die met de plugin gedaan zijn.

4.1 Plugin

4.1.1 Minimumvereisten

Zoals vermeld in het begin van dit hoofdstuk zijn enkele minimumvereisten opgesteld aan de gebruikte computer:

• Een getest besturingssysteem. De ontwikkelde plugin is getest op verschillende besturingssystemen, waarvan een overzicht in 2.4.1. Andere besturingssystemen kunnen mogelijk problemen geven op de plugin.

• Voldoende snelle processor. Het is vrij moeilijk om een exacte waarde te geven voor de minimum kloksnelheid van de processor. Het verwerken van de thesaurus, frequentielijst en het data-bestand vraagt veel rekenwerk. De traagste processor waarop de plugin getest is, is een AMD64 Turion 1.6 GHz.

• Voldoende groot werkgeheugen. De thesaurus en het data-bestand zijn vrij grote bestanden, om deze te verwerken is er voldoende werkgeheugen nodig. De woor- den met hun synoniemen worden ook opgeslagen in het geheugen, hiervoor is er werkgeheugen nodig. De plugin is getest met een minimum werkgeheugen van 512 MB.

• De grafische bibliotheek GTK+. Onder Windows is het voldoende om de runtime- bibliotheek van GTK+ 2 [57] te installeren. Onder Linux is het nodig de GTK+ ontwikkelingsbibliotheek te installeren, omdat de plugin een eerste keer gecom- pileerd moet worden.

• De IRC-cli¨ent X-Chat. De plugin is ontwikkeld voor de IRC-cli¨ent X-Chat, deze moet dus ge¨ınstalleerd zijn op de gebruikte computer.

52 4.1 Plugin 4 IMPLEMENTATIE

4.1.2 Installatie

Als de gebruikte computer voldoet aan de minimumvereisten, kan de plugin ge¨ınstalleerd worden. Onder Windows is de plugin gecompileerd tot een dynamically linked of DLL. Deze DLL mag eender waar op de harde schijf staan. Onder Linux zal de plugin gecompileerd worden tot een shared library of so-bestand met het linux-commando30 make. Hierbij zullen de nodige bestanden en de plugin op de juiste plaats gecopieerd worden. Om de plugin successvol te compileren is ook de ontwikkelingsbibliotheek van OpenSSL vereist.

De plaats van de thesaurus en de frequentielijst is afhankelijk van het gebruikte com- mando. Als het data-bestaand aangemaakt wordt met het X-Chatcommando

\file moeten de thesaurus en de frequentielijst op een vaste plaats staan. Onder Windows is dit de installatiemap van X-Chat, onder Linux is dit in een aangemaakte map in de gebruikersmap, namelijk ˜/.xchat2/stego/. Eventueel mogen deze bestanden ook op een andere plaats staan, maar dan moeten deze paden opgegeven worden met het X- Chatcommando

\file .

Met behulp van de thesaurus en de frequentielijst wordt het data-bestand aangemaakt (zie 4.1.4).

4.1.3 Initialisatie

Bij het inladen in X-Chat zal de plugin beginnen met een initialisatie. In deze initialisatie behandelt de plugin enkele stappen die nodig zijn om te kunnen werken. De stappen die uitgevoerd worden zijn:

• Een nieuwe, voorlopig lege, sessie aanmaken.

• De status op inactief zetten.

• GTK+ initialiseren.

• Een nieuwe, voorlopig lege, data-structuur en code-tabel aanmaken.

• Informatie opvragen over de andere gebruiker en in geval van de zender ook het te versturen bericht. 30linux-commando: commando in een console van Linux. X-Chatcommando: commando in het tekstvenster van X-Chat.

53 4.1 Plugin 4 IMPLEMENTATIE

• Kijken of het data-bestand aanwezig is, en eventueel een melding geven dat deze aangemaakt moet worden zoals vermeld in 4.1.2. Als deze eerste initialisatiestap voltooid is, kan de zender de tweede initialisatiestap starten met het X-Chatcommando \init. Hierbij zal de zender de sleutelovereenkomst met behulp van het Diffie-Hellman algoritme starten. De zender start hierbij eerst de sessie met de functie dh start session(); In deze functie worden de publieke en private waarde aangemaakt, de publieke waarde wordt opgeslaan in een tekstbestand en doorgestuurd naar de ontvanger via DCC. De status van de zender wordt nu gezet op zender van de sleutelovereenkomst. De ontvanger ziet dat de andere gebruiker hem een bestand wil doorsturen en weet ook dat zijn status nog inactief is. Met deze informatie weet de ontvanger dat het bestand de publieke waarde van de zender bevat. De ontvanger zal het bestand ontvangen en de publieke waarde van de zender uitlezen en opslaan in het geheugen. De ontvanger zal op dezelfde manier als de zender de sessie starten en een eigen publieke en private waarde aanmaken. De ontvanger plaatst zijn publieke waarde in een tesktbestand en probeert deze door te sturen naar de zender. De status van de ontvanger is nu gezet op ontvanger van de sleutelovereenkomst. De zender merkt op dat de ontvanger een bestand wil doorsturen en weet dat het bestand de publieke waarde van de ontvanger bevat. De zender zal op zijn beurt het bestand ontvangen en de publieke waarde van de ontvanger uitlezen en opslaan in het geheugen. Op dit moment beschikken zowel de zender als ontvanger over drie waardes: • Hun eigen private waarde.

• De publieke waarde van de zender.

• De publieke waarde van de ontvanger. Met deze drie waardes kunnen beide partijen dezelfde sessie-sleutel S aanmaken. Hieruit kunnen de zender en ontvanger de RC4-sleutel en de bitstroom β afleiden. De zender zal het bericht vercijferen met deze RC4-sleutel, de ontvanger zal later het bericht terug ontcijferen met deze RC4-sleutel. Omdat het handig is dat de ontvanger weet wanneer het bericht afgelopen is, wordt vooraan de cijfertekst acht bits toegevoegd. Deze acht bits stellen de lengte van het bericht voor in aantal bytes. Zowel zender als ontvanger zullen vervolgens de data-structuur invullen met alle woorden en hun bijhorende sy- noniemen en de codetabel genereren en optimaliseren met de bitstroom β. De zender krijgt nu de status van zender en de ontvanger de status van ontvanger. Op dit moment is de initialisatie aan beide zijden afgelopen en kan de zender chatten om de geheime boodschap door te zenden.

54 4.1 Plugin 4 IMPLEMENTATIE

4.1.4 Aanmaken van het data-bestand

Het data-bestand met alle woorden en hun bijhorende synoniemen wordt aangemaakt vanuit de thesaurus en de frequentielijst. Deze bestanden zijn vrij groot en om de belas- ting voor de computer te verminderen wordt het data-bestand in verschillende stappen aangemaakt.

In de eerste stap worden enkel de woorden van thesaurus bewerkt, in de thesaurus staat achter ieder woord het aantal verschillende betekenissen van synoniemen. Aangezien in het data-bestand enkel het woord staat, wordt dit achtervoegsel verwijderd. In deze stap worden ook alle woorden met minder dan 3 letters en woorden die niet met een letter beginnen weggelaten31.

In het tweede deel worden enkel de synoniemen van de thesaurus bewerkt. In de the- saurus staan alle synoniemen met eenzelfde betekenis achter elkaar, gescheiden met een pipe-teken |. Deze stap zet ieder synoniem op een aparte regel, en verwijdert alle syno- niemen met minder dan drie letters.

De derde stap verwijdert alle generic terms en antonyms. Dit zijn synoniemen met een verwante betekenis en tegengestelde van het gegeven woord. Deze woorden zullen steeds de betekenis van de zin veranderen, en zijn dus niet geschikt voor in het data- bestand.

De volgende stap bewerkt de frequentielijst. In deze lijst staat op iedere regel een woord met extra informatie, zoals het aantal keer dit woord is voorgekomen, wat soort woord dit is, en in hoeveel bestanden dit woord is teruggevonden. Voor het aanmaken van het data-bestand is enkel het woord met zijn frequentie noodzakelijk, niet deze extra gegevens, deze worden dus uit de frequentielijst gehaald.

In de thesaurus zitten zeer veel woorden, ook exotische woorden en woorden die horen bij een bepaald thema. Deze woorden worden bijna nooit gebruikt, maar nemen wel geheugen in. In de frequentielijst staan enkel de meest frequente woorden. Door enkel de woorden en synoniemen van de thesaurus te behouden die ook voorkomen in de fre- quentielijst, wordt het data-bestand veel kleiner. Dit gebeurt in de volgende stap.

In de voorlaatste stap worden alle synoniemen per woord gesorteerd volgens frequentie. In de codetabel optimalisatie worden namelijk de meest frequente woorden gewijzigd tot NULL-synoniemen. Om dit te kunnen verwezelijken is het makkelijk om de synonie-

31Dit zijn vaak geen echte woorden, maar vaak afkortingen. Deze zorgen vaak voor verwarring: zo bevat het Engelse lidwoord ’a’ de synoniemen ’vitamin’, ’angstom’, ’ampere’ en ’atom bomb’.

55 4.2 Gebruik 4 IMPLEMENTATIE men van een woord te sorteren volgens frequentie. Een tweede voordeel hierbij is dat op deze manier de meest frequente synoniemen bovenaan in de drop-downbox staan. Deze worden het vaakst gebruikt, en zijn zo het snelste terug te vinden.

De laatste stap verwijdert alle woorden die minder dan vier synoniemen hebben. Bij deze woorden is het moeilijk om een juiste spreiding van de representaties te bekomen, maar ook zal voor iedere representatie er maar ´e´ensynoniem ter beschikking zijn. Hier- door zal de gebruiker verplicht worden om een bepaald synoniem te gebruiken, en dat is niet gewenst.

4.2 Gebruik

Een eerste stap die nodig is om de stego-module te gebruiker is het inladen van de plugin. De plugin kan ingeladen woorden door in het menu XChat te klikken op Plugin of script laden. Hierbij zal een standaard venster om bestanden te openen verschijnen, waarin gezocht kan worden naar de locatie van de plugin. Als de plugin geselecteerd is, zal wanneer op de knop openen geklikt wordt de plugin geladen worden.

Wanneer de plugin geladen is, zal automatisch een pop-up venster verschijnen, zoals in figuur 37. Hierin zal de zender de gebruikersnaam van de ontvanger moeten invullen, alsook het bericht dat hij wil verzenden. De ontvanger zal enkel de gebruikersnaam van de zender moeten invullen. Als de plugin voor de eerste keer gebruikt wordt en het data-bestand nog niet aangemaakt is, of een nieuwe thesaurus of frequentielijst gebruikt wordt, zal de gebruiker eerst het data-bestand moeten aanmaken, zoals vermeld in 4.1.4.

Eens alle informatie over de andere gebruiker en het te verzenden bericht gekend is, kan de zender de initialisatie starten met het X-Chatcommando

\init.

Hierbij zullen alle initialisatiestappen van 4.1.3 uitgevoerd worden. De enige handelingen die de gebruikers moeten uitvoeren is het accepteren van de DCC-bestandenuitwisseling. Het inladen van de woorden en hun synoniemen, het genereren en optimaliseren van de codetabel en het vercijferen van de boodschap gebeuren allemaal automatisch.

Als de initialisatie voltooid is, kunnen de gebruikers beginnen te chatten. Voor de zender zal er bij iedere zin een pop-up verschijnen waarin hij een keuze kan maken van de verschillende synoniemen voor de woorden die in het data-bestand staan. Bij de ont- vanger wordt de vooruitgang bij iedere ontvangen zin van de zender getoond, met het bericht dat hij al ontvangen heeft. Figuur 38 tot figuur 44 verduidelijken dit proces.

56 4.2 Gebruik 4 IMPLEMENTATIE

Figuur 37: Het pop-upvenster bij het inladen van de plugin

Figuur 38: De zender typt een zin in

57 4.2 Gebruik 4 IMPLEMENTATIE

Figuur 39: Een pop-up na het typen van een zin

Figuur 40: De keuze van de synoniemen, de geschikte en NULL-synoniemen zijn gescheiden

58 4.2 Gebruik 4 IMPLEMENTATIE

Figuur 41: De vooruitgang aan de zijde van de zender na het typen van een zin

Figuur 42: De vooruitgang aan de zijde van de ontvanger na het ontvangen van een zin

59 4.2 Gebruik 4 IMPLEMENTATIE

Figuur 43: Het voltooien van het zenden van het bericht

Figuur 44: Het voltooien van het ontvangen van het bericht

60 4.3 Technische gegevens 4 IMPLEMENTATIE

4.3 Technische gegevens

In dit deel worden enkele cijfers van de implementatie en enkele testen weergegeven. Later in het besluit zullen deze cijfers ook besproken worden.

Synoniemlijsten

De gebruikte thesaurus is een Engelse thesaurus afkomstig van het softwarepakket Open- Office [58]. In deze thesaurus worden naast synoniemen ook verwante termen en an- toniemen meegegeven van elke woord. Deze worden uit de thesaurus gefilterd omdat ze geen goed alternatief bieden voor het woord waaraan ze gekoppeld zijn. In tabel 4.3 wordt achtereenvolgens het totaal aantal woorden, het totaal aantal synoniemen voor alle woorden en het gemiddeld aantal synoniemen per woord weergegeven voor de originele thesaurus, de thesaurus zonder verwante termen en antoniemen en het zelf gegenereerde data-bestand. In het zelf gegenereerde data-bestand zijn de woorden met minder dan 4 synoniemen verwijderd.

Thesaurus inclusief Thesaurus exclusief verwante termen verwante termen Eigen data-bestand en antoniemen en antoniemen Aantal woorden 144812 144812 9732 Aantal synoniemen 793165 422284 69414 Synoniemen/woord 5.48 2.92 7.13

Tabel 2: Een overzicht van data van de gebruikte thesaurus en het gegenereerde data-bestand

Effici¨entietest

Voor deze effici¨entietest zijn drie verschillende personen onafhankelijk van elkaar op een willekeurige server en op een willekeurige kanalen opgevolgd. Hierbij is nagegaan hoe- veel van de woorden die zij gebruikten voorkwamen in de codetabel. Uit deze waardes kunnen we besluiten wat de payload32 is. Dit cijfer geeft weer hoeveel bits per getypt woord gemiddeld doorgestuurd worden.

Persoon 1 Persoon 2 Persoon 3 Totaal Aantal woorden 716 106 251 1073 Treffers in codetabel 145 27 39 211 Payload 0.101 0.127 0.078 0.098

Tabel 3: Effi¨entietest van de plugin

32Payload = gemiddeld aantal bits per woord (0.50) · treffers in codetabel / aantal woorden

61 4.3 Technische gegevens 4 IMPLEMENTATIE

We vergelijken de payload van het ontworpen stego-systeem met de payload van het stego-systeem CryptoBola JPEG [27], wat in sectie 2.2.2 gebruikt wordt in een voorbeeld. Er werd een afbeelding van 58 kB in een afbeelding van 385 kB verborgen. Dit komt overeen met een payload van 58/385 = 0.151, wat wil zeggen dat er ongeveer 65 bits nodig zijn om 1 bit te kunnen verbergen. De startpagina van CryptoBola leert ons het volgende voorbeeld: in een foto van 139 kB kan maximaal 31 kB aan data verborgen worden. Dit resulteert in een payload van 0.223.

62 5 BESLUIT

5 Besluit

Lingu¨ıstische steganografie is ´e´en van de meer geavanceerde methodes om data in tekst te verbergen. De betere methode om lingu¨ıstische steganografie uit te voeren, zoals Bergmair [5] in zijn thesis bespreekt, is door middel van woordsubstitutie. Enkele gekende lingu¨ıstische stego-systemen zijn onder andere: LUNABLE [59] van Vineeta Chand en C. Orhan Orgun, NICETEXT [60] van Mark T. Chapman en Tyrannosaurus Lex [61] van Keith Winstein. Al deze aangehaalde stego-systemen werken aan de hand van autonome woordsubstitutie. Een nadeel van deze stego-systemen is dat omwille van de automatisering van de woordsubstitutie, zinnen onnatuurlijk kunnen gaan lijken of semantisch niet meer in orde zijn, waardoor ze niet meer in de oorspronkelijke context van de zin passen.

Het stego-systeem dat in deze thesis is ontwikkeld, is ge¨ınspireerd door de idee¨en van Bergmair, maar met dat verschil dat we de afluisteraar en monitor Wendy niet als een geautomatiseerd proces beschouwen. De mogelijkheid dat Wendy een intelligent pro- ces of persoon is wordt ook in rekening gebracht. Het toepassen van geautomatiseerde woordsubstitutie zou betekenen dat we de stego-engine zouden moeten uitrusten met ar- tifici¨ele intelligentie, die het probleem van woord-dubbelzinnigheid bij synoniemen kan oplossen binnen elke zin. Dit is, tot op heden, nog steeds een zeer moeilijk op te lossen probleem binnen het werkgebied van artifici¨ele intelligentie.

Om deze reden wordt in deze thesis een oplossing voorgesteld die menselijke interactie aan de stego-engine toevoegt. Op deze manier wordt een half-automatische stego-engine verkregen, die het probleem van de woord-dubbelzinnigheid met behulp van menselijke interactie kan oplossen. De menselijke interactie wordt voorzien aan de stego-engine door middel van een grafisch pop-up venster. De gebruiker kiest de synoniemen zo, zodat de context en het persoonsgebonden karakter van de zin behouden blijft.

In deze thesis wordt het lingu¨ıstische stego-systeem ontworpen als een plugin voor de IRC-cli¨ent X-Chat. De plugin maakt gebruik van de externe bibliotheek GLib, de cryp- tografische bibliotheek OpenSSL en de grafische bibliotheek GTK+. De plugin beschikt onder andere over een stego-engine en enkele cryptografische primitieven. Aan de hand van de Engelse thesaurus van OpenOffice en een frequentielijst kan een thesaurus van eigen formaat gegenereerd worden. Ook maakt het algoritme van de stego-engine de codetabel afhankelijk van de sessie-sleutel. Zo bekomen we aan beide kanten een de- terministische codetabel. Door gewoon te communiceren, niet noofdzakelijk met elkaar, wordt een klaartekst overgebracht naar de ontvanger.

Uit de vergelijking van de payload van het ontworpen stego-systeem (tabel 4.3) met

63 5 BESLUIT de payload van het stego-systeem CryptoBolaJPEG [27], kunnen we opmerken dat de payload van beide stego-systemen in dezelfde grootteorde ligt. Deze vergelijking gaat echter enkel op als een woord uit de schuiltekst gelijkgesteld wordt aan een bit uit de afbeelding. Hieruit kan opgemerkt worden dat het produceren van bijvoorbeeld 139 kB33 schuiltekst veel lastiger is dan het genereren van een foto van deze bestandsgrootte. De hoeveelheid schuiltekst die nodig is om klaartekst te verbergen is redelijk veel, waardoor een lange stego-sessie met veel berichten nodig is om een kleine hoeveelheid data door te sturen. Dit maakt dat het stego-systeem, voorgesteld in deze thesis, enkel geschikt is voor het verzenden van kleine boodschappen.

Suggesties

De payload kan eventueel verhoogd worden door het gebruik van de Huffman-code zo- als in deel 3.3.4 besproken is. Er is in deze thesis bewust niet voor het toepassen van Huffman-code gekozen. Alhoewel de payload hiermee stijgt, daalt het aantal beschikbare synoniemen per woord. Hierdoor wordt de gebruiker geforceerd om bepaalde synonie- men te kiezen en ontstaan er zinnen die niet meer semantisch in orde zijn. E´en van de belangrijkste doelstelling van deze thesis was het ondetecteerbaar blijven voor mens en computer. Mensen zijn in staat semantisch incorrecte zinnen snel op te merken en aangezien een stego-systeem faalt als de steganografische communicatie opgemerkt wordt, is dit ten zeerste te vermijden.

Een andere manier om de payload te verhogen is het uitbreiden van de stego-engine, voor het herkennen en verwerken van meervouden, afkortingen, punten, komma’s en schrijf- fouten. De originele thesaurus bevat namelijk geen meervouden. Door het weglaten van een komma of een punt, die tegen een woord staat geschreven, kunnen er ook al meer woorden worden herkend, waardoor de payload stijgt.

Nog een andere methode tot het versnellen van de data-overdracht, is het aanmaken van een eigen ascii-codetabel. Elke karakter wordt in het huidige stego-systeem voorgesteld door een 8 bit tekenloos getal. Als enkel tekstberichten doorgestuurd dienen te worden, hoeven enkel de karakters a→z, A→Z en 0→9 gecodeerd te worden. Dit zijn in totaal 62 karakters. Alle karakters kunnen op deze manier dus ook enkel door 6 bits voorgesteld worden34. Dit resulteert in een comprimering van de data tot 75% van de originele datagrootte. Een methode die de payload of data-overdracht niet verandert, maar wel de duur van stego-sessie verkort, is het inlezen van een bestaande tekst in de stego-engine. Op deze manier hoeft de tekstinvoer naar de stego-engine niet zelf gemaakt worden, wat een

33139 kB = 139 · 1024 · 8 = 1138688 bit = een tekst van 1138688 woorden. 346 bit = 26 = 64 mogelijkheden

64 5 BESLUIT tijdwinst oplevert. Een nadeel van deze methode is dat als de afluisteraar de originele schuiltekst in bezit heeft of kan raadplegen, hij het verschil tussen beide kan waarnemen. Als de stego-communicatie gedetecteerd wordt, heeft het stego-systeem gefaald.

Verder onderzoek

Indien twee gebruikers vaak met elkaar chatten zonder de plugin te gebruiken, kan een frequentielijst gemaakt worden, speciaal gebaseerd op de interactie tussen deze twee personen. De codetabel zou dan met deze specifieke frequentielijst gegenereerd kunnen worden. Een zelflerende module zou ontwikkeld kunnen worden die in de stego-engine het frequentiegebruik bijhoud. De twee frequentielijsten die beide partijen gebruiken bij het starten van een stego-sessie dienen wel identiek te zijn om zo een identieke codetabel te kunnen verkrijgen aan weerszijden.

Verder kunnen er nog testen uitgevoerd worden op de effici¨entie van de huidige data- structuur en het gebruik van een database (bijvoorbeeld SQLite) in de plaats hiervan.

Voor de Windowsgebruikers kan er onderzoek gedaan worden naar het ontwikkelen en gebruik maken van een statische GTK+-bibliotheek in plaats van een dynamische. Al de nodige GTK+-functionaliteiten zouden dan in ´e´enenkele DLL gecompileerd wor- den. Het gevolg hiervan zou zijn, dat voor de Windowssystemen enkel de GTK+-DLL meegeleverd moet worden en de gebruiker niet een hele GTK+ runtime-bibliotheek moet installeren om de plugin te kunnen gebruiken.

Om het stego-systeem tegen actieve aanvallers te beschermen, kan het stego-systeem robuuster gemaakt worden door een fout-verbeterende code toe te voegen na de vercij- fering.

Het uitdenken van betere en effici¨entere manieren om de sleutelovereenkomst uit te voeren. DCC kan bijvoorbeeld gebruikt worden om het IP-adres van de zender te ont- dekken. De zender zal op hetzelfde moment een tweede connectie openen op een andere poort en op deze socket luisteren tot de ontvanger hierop connecteert. Zo wordt er een rechtreekse TCP/IP-connectie tot stand gebracht, waarover de sleutelovereenkomst kan verlopen.

65 REFERENTIES

Referenties

[1] David Kahn. Codebreakers: The Story of Secret Writing. Simon and Schuster, 1230 Avenue of the Americas, Rockefeller Center, New York City, 1996.

[2] Prof. Dr. Ir. Bart Preneel and Ir. Stefaan Seys. Cryptologie en netwerkbeveiliging: Een overizcht. Technical report, Departement Elektrotechniek-ESAT, K.U.Leuven.

[3] G. J. Simmons. The prisoners’ problem and the subliminal channel. In David Chaum, editor, Advances in Cryptology: Proceedings of Crypto 83, pages 51–67. Plenum Press, 1984.

[4] Advanced Encryption Standard. http://en.wikipedia.org/wiki/Advanced_ Encryption_Standard.

[5] Richard Bergmair. Towards linguistic steganography: A systematic investigation of approaches, systems, and issues. final year thesis, April 2004. handed in in partial fulfillment of the degree requirements for the degree “B.Sc. (Hons.) in Computer Studies” to the University of Derby.

[6] Alfred J. Menezes, Scott A. Vanstone, and Paul C. Van Oorschot. Handbook of Applied Cryptography. CRC Press, Inc., Boca Raton, FL, USA, 1997.

[7] L. Rutten. Datacommunicatie 2, 2004.

[8] Auguste Kerckhoffs. La cryptographie militaire. Journal des Sciences Militaires, IX:5–38, jan 1883.

[9] Jaap-Henk Hoepman and Bart Jacobs. Increased security through open source. Commun. ACM, 50(1):79–83, 2007.

[10] Data encryption standard. http://en.wikipedia.org/wiki/Data_Encryption_ Standard.

[11] Kalle Kaukonen and Rodney Thayer. A stream cipher encryption algorithm ”arcfour”. http://tools.ietf.org/html/draft-kaukonen-cipher-arcfour-03, July 1999.

[12] Evan Herk. RSA (cryptografie). http://nl.wikipedia.org/wiki/RSA_ (Cryptografie).

[13] E. Rescorla. Diffie-Hellman key agreement method. RFC2631, June 1999.

[14] Whitfield Diffie and Martin E. Hellman. New directions in cryptography. IEEE Transactions on Information Theory, IT-22(6):644–654, 1976.

[15] Hashfunctie. http://nl.wikipedia.org/wiki/Hashfunctie.

66 REFERENTIES

[16] Sha-familie. http://nl.wikipedia.org/wiki/SHA-familie.

[17] Message authentication code. http://en.wikipedia.org/wiki/Message_ authentication_code.

[18] Hmac. http://en.wikipedia.org/wiki/HMAC.

[19] Stefan Katzenbeisser and Fabien A. P. Petitcolas. Information Hiding Techniques for Steganography and Digital Watermarking. Artech House, Inc., Norwood, MA, USA, 2000.

[20] Rajarathnam Chandramouli and Nasir D. Memon. Analysis of LSB based image steganography techniques. In Proceedings of the 2001 International Conference on Image Processing (ICIP volume 3, 2001), pages 1019–1022, 2001.

[21] Neil F. Johnson and Sushil Jajodia. Exploring steganography: Seeing the unseen. IEEE Computer, 31(2):26–34, 1998.

[22] J. J. Chae and B. S. Manjunath. Data hiding in video. In 6th IEEE International Conference on Image Processing (ICIP’99), volume 1, pages 311–315, Oct 1999.

[23] Gopalan Kaliappan and Wenndt Stanley and Adams Scott and Haddad Darren. Audio steganography by amplitude or phase modification. In Delp Edward J. and Ping Wah Wong, editors, Security and Watermarking of Multimedia Contents V., volume 5020 of Presented at the Society of Photo-Optical Instrumentation Engineers (SPIE) Conference, pages 67–76, june 2003.

[24] Kamran Ahsan. Covert channel analysis and data hiding in TCP/IP. http:// gray-world.net/papers/ahsan02.pdf, August 2002.

[25] Eric Cole. Hiding in Plain Sight: Steganography and the Art of Covert Communi- cation. John Wiley & Sons, Inc., New York, NY, USA, 2003.

[26] Davi Figueiredo. Hide-in-picture. http://sourceforge.net/projects/ hide-in-picture.

[27] Cryptobola jpeg. http://www.cryptobola.com/.

[28] Andrew Brown. S-Tools version 4, 1996.

[29] Krista Bennett. Linguistic steganography: Survey, analysis, and robustness con- cerns for hiding information in text. Technical Report TR 2004-13, Purdue CE- RIAS, May 2004.

[30] Peter Wayner. Mimic functions. Cryptologia, XVI(3):193–214, July 1992.

67 REFERENTIES

[31] Peter Wayner. Disappearing Cryptography – Information Hiding: Steganography & Watermarking. Morgan Kaufmann Publishers, Los Altos, CA 94022, USA, second edition, 2002. Chapters 6 and 7 serve as good introductions to mimic functions.

[32] Mark Chapman, George I. Davida, and Marc Rennhard. A practical and effective approach to large-scale automated linguistic steganography. In Proceedings of the 4th International Conference on Information Security(ISC 2001), pages 156–165, London, UK, 2001. Springer-Verlag.

[33] Richard Bergmair and Stefan Katzenbeisser. Towards human interactive proofs in the text-domain. In Kan Zhang and Yuliang Zheng, editors, Proceedings of the 7th Information Security Conference, volume 3225 of Lecture Notes in Computer Science, pages 257–267. Springer Verlag, September 2004.

[34] David A. Huffman. A method for the construction of minimum redundancy codes. Proceedings of the Institute of Radio Engineers, 40(9):1098–1101, Sep 1952.

[35] J. Oikarinen and D. Reed. Internet relay chat protocol. RFC1459, May 1993.

[36] I. Eidelshtein and V. Taubkin. Data101 : IRC basics. http://www.pulsewan.com/ data101/irc_basics.htm, 2006.

[37] KVIrc. Dcc negotiation and connection. http://www.kvirc.de/docu/doc_dcc_ connection.html.

[38] Troy Rollo. A description of the DCC protocol. http://www.irchelp.org/ irchelp/rfc/dccspec.html.

[39] BitchX IRC client. http://www.bitchx.org/.

[40] BersIRC IRC client. http://bersirc.free2code.net/index.php/home.

[41] ChatZilla IRC client. http://www.mozilla.org/projects/rt-messaging/chatzilla/.

[42] Gaim IRC client. http://www.pidgin.im/.

[43] Hydra IRC client. http://www.hydrairc.com/.

[44] Konversation KDE IRC client. http://konversation.kde.org/.

[45] mIRC IRC client. http://www.mirc.com/.

[46] Visual IRC client. http://www.visualirc.net/.

[47] X-Chat IRC client. http://www.xchat.org/.

68 REFERENTIES

[48] Gpl general public license. http://nl.wikipedia.org/wiki/GNU_General_ Public_License.

[49] MinGW. http://www.mingw.org/.

[50] GCC. http://gcc.gnu.org/.

[51] The OpenSSL project. http://www.openssl.org/.

[52] GTK+ reference manual for GTK+ 2.11.0. http://developer.gnome.org/doc/API/2.0/gtk/index.html.

[53] GLib reference manual for GLib 2.13.0. http://developer.gnome.org/doc/API/2.0/glib/index.html.

[54] Doxygen. http://www.doxygen.org.

[55] Bart Preneel, Bart Van Rompay, Sidi Ben Ors,¨ Alex Biryukov, Louis Granboulan, Emmanuelle Dottax, Markus Dichtl, Markus Schafheutle, Pascale Serf, Stefan Pyka, Eli Biham, Elad Barkan, Orr Dunkelman, J. Stolin, Mathieu Ciet, Jean-Jacques Quisquater, Francesco Sica, H˚avard Raddum, and Matthew Parker. Performance of optimized implementations of the NESSIE primitives. Deliverable D21, NESSIE Project, February 2003.

[56] Bart Dewit. Boxplot. http://nl.wikipedia.org/wiki/Boxplot.

[57] The GIMP for windows. http://sourceforge.net/projects/gimp-win/.

[58] OpenOffice.org. http://www.openoffice.org/.

[59] Vineeta Chand and C. Orhan Orgun. Exploiting linguistic features in lexical steganography: Design and proof-of-concept implementation. In HICSS ’06: Pro- ceedings of the 39th Annual Hawaii International Conference on System Sciences, page 126.2, Washington, DC, USA, 2006. IEEE Computer Society.

[60] Mark T. Chapman. Hiding the hidden: A software system for concealing ciphertext in innocuous text. Master’s thesis, The University of Wisconsin-Milwaukee, May 1997.

[61] Keith Winstein. Lexical steganography through adaptive modulation of the word choice hash, January 1999.

69 BIJLAGEN

Bijlagen

Bijlage A: Inhoud van de CD-Rom 71

Bijlage B: Tijdslijn 72

70 BIJLAGEN

Bijlage A: Inhoud van de CD-Rom

71 BIJLAGEN

Bijlage B: Tijdslijn

Hier volgt een schematisch overzicht van de belangrijkste mijlpalen die gehaald zijn in verband met het ontwerpen van de plugin en het schrijven van de tekst.

72