WOW !! MUCH LOVE ! SO WORLD PEACE !
Fond bitcoin pour l'amélioration du site: 1memzGeKS7CB3ECNkzSn2qHwxU6NZoJ8o
  Dogecoin (tips/pourboires): DCLoo9Dd4qECqpMLurdgGnaoqbftj16Nvp


Home | Publier un mémoire | Une page au hasard

 > 

La stéganographie par les images pour la sécurisation du transfert des messages

( Télécharger le fichier original )
par Richard ISHARA
Institut Superieur Pedagogique - Graduat 2008
  

Disponible en mode multipage

Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy

REPUBLIQUE DEMOCRATIQUE DU CONGO

Année académique 2007-2008

Dirigé par Assistant Martin NYONGOLO Luwawa

Travail présenté et défendu pour l'obtention du diplôme de gradué en Informatique de Gestion

Présenté par Richard ISHARA Kibasomba

ENSEIGNEMENT SUPERIEUR, UNIVERSITAIRE ET RECHERCHE SCIENTIFIQUUE

INSTITUT SUPERIEUR PEDAGOGIQUE DE BUKAVU

ISP/BUKAVU

B.P: 854 BUKAVU

LA STEGANOGRAPHIE PAR LES IMAGES POUR LA SECURISATION DU TRANSFERT DES MESSAGES

DEPARTEMENT D'INFORMATIQUE DE GESTION

SECTION DES SCIENCES COMMERCIALES ADMINISTRATIVES ET INFORMATIQUE

PRELUDE

« Lance ton pain sur la sur LA SURFace des eaux, car au cours de nombreux jours tu le retrouveras.»

ECCLESIASTES 11 :1

EPIGRAPHE

« Notre peur vient, non pas de ne pas être à la hauteur; notre peur vient, du fait que notre pouvoir est presque sans bornes.

On se dit souvent ` qui suis-je moi pour être brillant, talentueux, fantastique ? '

A vrai dire qui est-on pour ne pas l'être ?

Nous sommes sur terre pour témoigner de la gloire de Jéhovah Dieu qui se trouve en nous, en nous autorisant à rayonner permettant aux autres de faire autant »

DEDICACE

A notre père François MASUMBUKO Samba Lutete pour nous avoir donné naissance et a aimé ;

A notre mère Julienne MAWAZO Chakupewa pour nous avoir tendrement aimé depuis son sein, a notre naissance, de nous avoir éduqué et acheminé à l'école.

A notre grand frère Hector MUKAMBA Byemba pour nous avoir suffisamment soutenu.

A la future Mère de nos enfants si pas dans ce système des choses, dans le monde nouveau, qu'elle se réjouisse de nos efforts.

Richard ISHARA Kibasomba

REMERCIEMENTS

Au Dieu tout puissant Jéhovah pour nous avoir donné cette opportunité de réaliser ce travail ;

A notre père François MASUMBUKO Samba lutete et notre mère Julienne MAWAZO Chakupewa pour nous avoir éduqué qu'ils reçoivent par cet oeuvre le talent de leur fils cadet ;

Nous remercions notre Directeur L'assistant Martin NYONGOLO Luwawa Kimbwe pour avoir été le premier à nous former en des recherches aussi significatives ; son savoir peut construire une muraille contre toute une armée ;

A tous les assistants et chefs des travaux qui nous ont aidés à assimiler les notions essentielles de la programmation : Diedonné KYENDA Sulika, Tasho KASONGO, Manix LUNANGA, Anicet ITONGWA KABIONA, Samamba TONY, Freddy MUKUPI, Demas BULUBULA Kizungu;

C'est un énorme crime si nous pouvons passer sans nous souvenir de notre cher Papa Ernest MAHAMBA Ndegey pour ses soutiens et ses conseils pleins de sagesse ; que Jéhovah lui donne une longue vie ;

A notre grand frère Hector MUKAMBA Byemba pour nous avoir financièrement aidé dans notre parcours académique. Puisse Jéhovah être avec lui dans tous ses projets.

A nos soeurs Isabel BASUBI, Furaha TAKUBUSOKA BITONDO, Zawadi BASUBI et SANGANYI ;

A Kennedy, Ndambi et Jean-Jacques MWENE MAHAMBA, Riziki KABILONGO, Ange LUNANGA, notre oncle Barthélemy LUNANGA, Janvier LUNANGA, Jessica ZAWADI et Son Bébé.

A nos frères dans le seigneur  Christ jésus: Prosper CHIRUZA, Saidi BUSSOLE Amani, Jean-Marie ZIHALIRWA, Prince KALALIZI, Alain NGOY, Isaac MAKUVUNINA, Ahadi, Sikilizeni, Mamy et Neema BYAMUNGU, Edith, Biringanine BULAKALI, Benjamin MUSIKIMI, Etienne MUKUMO, Alimasi AKSANTI, Léon MASHAURI, et Chiza ;

A nos camarades : jean-mari MUNGUAKONKWA, Mutumay KABAMBA, Didier MUTIKI, Kossi DJAKE, Matongo KAWAYA, Léon BYAMUNGU, Bulongo TUKILINABO, Alain NAMUJIMBO Olivier MULONGESHA, Oswald MATTHIEU, Negro SIERRA, à vous,

Nous disons Merci beaucoup !

SIGLES ET ABREVIATIONS

IBM: International Business Machine

Pixel: Picture Element

Bmp: Bitmap

ppp: Points Par Pouce

DPI: Dots Per Inches.

RVB: Rouge Vert Bleu

RGB: Red Green Blue

RLE: Run Leigh Encoding

LAN: Local Area Network

MAN: Metropolitan Area Network

ASCII: American Standard Code for Instruction Interchange.

RESUME

La stéganographie, c'est l'art de dissimuler des données dans d'autres données. En effet, l'envoie d'un message secret avec sécurité pose des énormes difficultés tant dans les domaines sociaux-économique qu'informatique.

Le présent travail examine une image bitmap en vue d'y coucher un message et envoyer l'image à la place du message. A l'arrivé, le message peut être tiré de l'image pour de sa lecture.

Le programme procédera par la dissimulation d'un fichier d'extension « .txt » c'est-à-dire un fichier texte dans une image bitmap 24 bits.

Il utilise les 3 bits de poids faible de deux premières couleurs et 2 bits du poids faible de la dernière couleur pour en totaliser 8, cela dit le changement entre l'image d'origine et l'image contenant le fichier caché est très léger.

Le résultat que nous avions eu en cachant un texte derrière une image a prouvé que nous avions réalisé les objectifs, ceux de cacher et lire le message dans une et de l'image.

O. INTRODUCTION

Lorsqu'on veut envoyer une lettre commerciale ou un document quelconque, on a tendance à l'envelopper ; non pas pour éviter les saletés liées au transfert de la lettre ou du document, mais aussi et surtout, pour éviter que le message ne soit lu sans effort par une tierce personne.

Aujourd'hui avec l'évolution et la rapidité des réseaux informatiques, des millions des messages sont envoyés par jour.

Ainsi, les messages électroniques (e-mail), les fichiers et autres documents qu'on peut s'envoyer à travers le réseau internet ou local, ont commencé à être protégés soit par mot de passe ou soit par cryptage du contenu.

Mais à présent, l'expéditeur d'un message devrait faire très attention parce que d'une part, au niveau du serveur l'on peut parvenir à déchiffrer le mot de passe et /ou décrypter le message codé afin de lire son contenu. Ce qui est périlleux est que Les messages véhiculés sur Internet ont une structure bien déterminée : tout message commence par un en-tête indiquant l'adresse du destinataire, l'adresse de l'émetteur, la date et l'objet du message ; viennent ensuite le corps du message et la signature. De cette façon si votre message contient un secret, un plan quelconque important ou des écritures comptables que vous ne voulez révéler qu'à celui à qui vous vous adressez, ceux-ci seraient plus vite à la merci de vos adversaires qui n'hésiteront pas de dévoiler votre fort intérieur, voler votre plan et le publier ou même vous agresser et vous tuer. D'autres parts les gouvernements interdisent cette pratique visible de la cryptographie.

Face à ces situations, les questions suivantes peuvent être posées :

· Il y a - t - il moyen de cacher une information et la transférer sans craindre toutes représailles ?

· La stéganographie par les images permettra - t - elle de cacher une information au sein d'un fichier image ?

· L'image contenant le message caché peut - elle être visualisée, gardée ou transférée sans faire voire ni perdre les informations ou le message lui contenu?

· Les informations cachées et envoyées, peuvent-elles être tirées de l'image et comprises par leur destinataire ?

Celles-là sont les questions principales auxquelles nous nous forcerons de répondre et donner satisfaction tout au long de notre travail.

Dans une certaine mesure, une question d'intégralité et de confidentialité s'impose dans les affaires commerciales et pourquoi pas pour la bonne gestion.

En vue du transfert sécuritaire des informations et leur intégralité à la lecture ; un logiciel stéganographique que nous aurons à construire pourra permettre que ces informations Soient dissimilées au sein du codage d'un fichier image de format Bitmap.

Une image contenant le message secret peut être alors visualisée et transférée dans un réseau local ou par internet sans que la curiosité ou l'attention des tierces personnes y soit attirée. Cela sera possible d'autant plus que l'image contenant le message en son sein gardera ses qualités et sa taille primitives.

Le nombre de fois d'ouverture ou d'accès à ce fichier n'altérera pas le message ni les opérations d'impression pourront être assurées à l'image sans imprimer le message ou affecter les bits du message le comportant.

Ce logiciel que nous construirons sera capable de déduire le message caché dans le codage de l'image sans modifier l'état de celle-ci.

Le message caché et extrait sera lu avec toute intégralité comme au départ.

La stegenographie par les images dont nous allons parler tout au long de ce travail est d'une grande importance pour des messages secrets que l'on peut s'envoyer via un réseau ; qu'on peut garder avec le maximum de précision et sureté, cela pendant longtemps dans un emplacement bien connu du PC et généralement fréquenté par d'autres personnes.

Actuellement les images sont utilisées dans plusieurs branches de l'informatique : leurs utilisations dans des pages Web devient de plus en plus exagérées et leur envoie sur le réseau internet n'est pas aussi à négliger. Ces images partent souvent avec elles des nombreux virus informatiques et s'affichent quand il ya exécution du virus en question. Nous avons comme exemple le virus communément appelé « Raila Odinga ». D'autres images sont utilisées en vue de tromper la vigilance des jeunes gens et autres personnes qui aiment s'amuser, pourtant comporte beaucoup d'autres fichiers s'exécutant automatiquement à consultation de l'image, etc.

C'est pour cette raison d'une part que nous avions voulu traiter les images en vue de savoir comment elles se comportent avec des objets étrangers comme un message texte.

D'autres parts, nous savons que nous ne sommes pas le premier à élaborer un travail de fin d'étude sur les images, mais dans le domaine de la stéganographie, nous voulons que les étudiants qui viennent après nous trouvent un champ vide et non exploité.

De toute évidence nous devons signaler que nous allons recourir à la technique documentaire afin d'aborder les différents ouvrages et articles traités par nos prédécesseurs et ayant un marquage au problème auquel nous voulons porter solution. En vue de bien comprendre des notions aussi globalisantes, nous allons utiliser la méthode déductive qui nous aidera à partir du particulier au général en vue de partir d'un élément de l'image à son ensemble.

La bibliothèque universelle présentement riche en documentation et renseignement : l'internet nous a permis de renforcer la théorie sur les images et sur et a enrichi nos connaissances en vue d'élaborer ce travail.

La stéganographie faite dans le temps s'est agit de cacher les messages dans des objets dans but de le faire arriver ce message en destination en passant par des barrières de fouilles des ennemies.

La stéganographie que nous allons faire dans notre travail va se limiter par les images. Nous allons cacher du texte derrière une image et allons nous limiter à tirer en destination ce message du code de l'image (fichier image).

Notre travaille va s'étendre sur quatre chapitres respectivement intitulés et détaillés comme suit :

Au chapitre premier nous allons parler des l'étude des images bitmap ;

Dans cette première partie nous allons épingler la spécialité des images Bitmap ; leur format, leur et en fin leur taille format.

Au chapitre deuxième nous aborderons les notions de la steganographie par les images. C'est un chapitre dans lequel nous allons parlerons d'abords de comment la transmission des messages secrets s'est fait dans le temps, nous verrons aussi les différents problèmes de la transmission des messages secrets a travers un réseau informatique. Nous parlerons aussi de la cryptographie et ensuite de la stéganographie.

Le dernier point de ce chapitre montrera comment convertir un message en une suite des bits.

Au chapitre trois nous donnerons un algorithme capable de stéganographier un message texte derrière une image du type bitmap et après nous montrerons un autre algorithme susceptible de récupérer le message caché au départ et de l'afficher.

Au dernier et quatrième chapitre nous allons smiller notre algorithme donné au chapitre trois par un logiciel informatique.

CHAPITRE I : ETUDE DES IMAGES BITMAP

I.1 DEFINITION

Une image matricielle (image en mode point, ou en anglais une « bitmap » ou «  raster ») est une image numérique dans un format de données qui se compose d'un tableau de pixels ou de points de couleur, généralement rectangulaire, qui peut se visualiser sur un moniteur d'ordinateur, tout autre dispositif d'affichage, ou simplement sur une feuille de papier1(*).

Elle est composée d'une matrice ou un tableau de points à plusieurs dimensions de tailles fixes; l'intersection des lignes et colonnes de ce tableau donne une cellule qu'on appelle pixel, qui veut dire « Picture element » en Anglais, et « élément d'image » en français. Ces éléments ou points doivent être disposés de manière à ce que leur union donne l'image globale dont la qualité dépend d'une part du nombre de pixels, et d'autre part du nombre de valeurs possibles pour l'intensité par pixel.

Une ligne est constituée par des pixels qui se suivent horizontalement et une colonne par des pixels qui se suivent verticalement.

Pixel

Figure 1 Figure 2 Figure 3


(Image

Pour que les appareils photos numériques ou les capteurs prennent une image réelle (Figure 1) et la rendent compréhensible par l'ordinateur ils la partitionnent : (discrétisation : Figure 2), puis en fin la numérisent (Figure 3).

L'image passe ainsi du monde réel vers le monde discret, le monde des entiers.

Ainsi, l'image réelle dévient-elle numérisée et compréhensible par l'ordinateur.

Une image numérique peut être traitée sous divers formats comme nous allons le voir après; mais dans le cadre de notre travail nous allons utiliser le format qu'on appelle BITMAP qui est un des produits du Microsoft et IBM.

Une image appelée bitmap est donc un fichier image d'extension «. Bmp » et une image numérique. L'ordinateur ne traitant que des nombres entiers binaires, il fallait découper l'image réelle en une matrice des pixels dont chacun est codé en base deux (par une suite des 1 et des 0 qui sont un à un des bits). Cette opération s'appelle la numérisation de l'image.

Il faut signaler que le pixel n'est pas uniquement utilisé pour les images graphiques, il l'est aussi pour dans le cadre des matériels et les logiciels d'impression et/ou d'affichage des textes.

Images 2D2(*)2

Dans le cas des images à deux dimensions (le plus courant), les points sont appelés pixels. D'un point de vue mathématique, on considère l'image comme une fonction de dans , où le couplet d'entrée est considéré comme une position spatiale, le singleton de sortie comme un codage

Images 2D + t (vidéo), images 3D, images multi-résolution

· Lorsqu' une image possède une composante temporelle, on parle d'animation

· Dans le cas des images à trois dimensions les points sont appelés des voxels. Ils représentent un volume.

· Ces cas sont une généralisation du cas 2D, la dimension supplémentaire représentant respectivement le temps, une dimension spatiale ou une échelle de résolution.

D'un point de vue mathématique, il s'agit d'une fonction de dans.

Nous verrons plus tard qu'un pixel peut donc contenir un nombre quelconque qui déterminera sa coloration, mais à présent nous devons savoir que les images bitmap ne sont pas seules images numériques ; il existe en plus des images pixélisées des images non pixellisées : les images vectorielles.

Nous venons de décrire ce qu'on appelle image matricielle, est en fait une matrice (tableau des pixels).

Il existe un autre type d'images numériques que nous avions appelé les images vectorielles, dont le principe est de représenter les données de l'image par des formes géométriques, qui vont pouvoir être décrite d'un point de vue mathématique :

A partir de deux points (x1, x2) et (y1, y2) l'on puisse tracer une droite ;

A partir d'un rayon et d'un centre, l'on puisse tracer un cercle.

En informatique graphique, on parle aussi de bitmap ou de pixmap, un type d'organisation de mémoire ou un format du fichier image qui est utilisé pour stocker les images numériques.

Le terme BITMAP vient de la terminologie «  sciences de programmation »en anglais computer programming, qui désigne une carte des bits, spécialement appelé « tableau des bits ».A propos de Pixmap, il vient se référer au similaire concept spécialement appelé tableau des pixels. Les images se réfèrent peut être généralement aux bitmap ou aux pixmap soit synthétique ou photographiques pour être stocker dans les fichiers ou en mémoire.

I.2 DEFINITION ET RESOLUTION D'UNE IMAGE

1) la définition

Les images numériques peuvent être aussi distinguées par leurs définitions et leur résolution ; la définition étant le nombre de pixels en hauteur (axe vertical) et en largeur (axe horizontal), 360 pixels par 600pixels par exemple représenteraient une image qui a 360 pixels en hauteur et 600 pixels en largeur.

Cela donne la même chose que quand on représente de la sorte : (360 X600).

2) la résolution

La résolution quand à elle est le nombre des pixels par unité de longueur.

L'unité de la résolution est le «  ppp » c'est-à-dire Points Par Pouce en anglais « dpi », dots per inches.

La résolution est définie lors du passage de l'image réelle sous la forme binaire, c'est-à-dire lors de la transformation de l'image en une suite des bits et leurs spécifications par pixel, c'est l'étape de la numérisation dont on a parlé précédemment que dépend principalement la résolution.

La résolution dépend aussi des caractéristiques du matériel utilisé lors de cette numérisation.

Plus le nombre de pixels est élevé par unité de longueur, plus la quantité d'information est importante et plus la résolution est élevée.

Etant donné que l'image bitmap est constituée des lignes et des colonnes, on trouve un certain nombre de pixels non seulement en auteur mais aussi en largueur :

Pour une même dimension d'image, plus la résolution s'élevé, plus le nombre de pixels composant l'image est grand. Le nombre de pixels est proportionnel au carré de la résolution, étant donné le caractère bidimensionnel de l'image : si la résolution est multipliée par deux, le nombre de pixels est multiplié par quatre. Augmenter la résolution peut entraîner des temps de visualisation et d'impression plus longs, et conduire à une taille trop importante du fichier contenant l'image et à de la place excessive occupée en mémoire.

L'on doit savoir que si l'on zoome sur l'image, l'on perdra bien entendu sa qualité.

(La résolution utilisées pour les Web est le plus souvent de 72 dpi et est la même pour les écrans informatiques, les imprimantes, elles atteignent 300 dpi aujourd'hui).

I.3 TAILLE ET FORMAT D'UNE IMAGES BITMAP

I.3.1 la taille d'une image en octet

La taille en octet d'une ligne doit être un multiple de quatre, si non, un complément d'octets s'impose pour qu'elle puisse l'être.

Ce complément dont il est question, peut contenir n'importe quoi, à condition bien entendu de respecter le principe.2(*)3 Il contient par défaut des 0(zéros).

Pour savoir la taille de l'image, il faut alors compter le la taille de la ligne (complément inclus s'il existe), multiplié par le nombre total des colonnes.

De ce nombre doit être augmenté la taille de l'en-tête de l'image qui est généralement de 54 octets.

Signalons seulement que dans cet entête sont prédéfinies la talle de l'image, sa hauteur et sa largueur, etcetera.

I.3.2 Taille de l'image en pixels

Le poids d'une image est tout d'abord lié à sa taille en pixels, et par conséquent (ou par extension) à la résolution qui a été utilisée lors de la numérisation (et ceci par les équations (X*résolution) = x pixels et (Y*résolution) =y pixels).
Le poids d'une image peut être connu de façon théorique à partir du nombre de pixels qui compose l'image.

I.3.3 Représentation des couleurs

En informatique existe plusieurs mode de codage de couleur pour les images, le plus courant et le plus utilisé est l'espace calorimétrique Rouge, Vert, Bleu ( RVB ou en anglais RGB - Red green Blue). Cet espace est basé sur une synthèse de l'adition des couleurs, c'est-à-dire que le mélange des trois composantes primaires R, V, et B à leur valeur maximum donne du blanc, alors que leurs valeurs minimales donnent la couleur noire.

Toutes les autres couleurs que peut prendre ce mélange sont à l'intermédiaire de ces deux couleurs de la présence de trois couleurs de base ou de leur absence.

Cette couleur que donne le mélange de trois composantes R.V.B. n'est pas celle que contient toute l'image, mais plutôt celle que contient un seul pixel.

C'est l'ensemble de tous les pixels peints de différentes couleurs qui donne une image.

Les images bitmap en couleurs peuvent donc être représentées soit par une image dans laquelle la valeur du pixel est une combinaison linéaire des valeurs des trois composantes couleurs, soit par trois images représentant chacune une composante couleur. Dans le premier cas, selon le nombre de bits alloués pour le stockage d'une couleur de pixel, on distingue généralement les différents types d'images suivants :

1. Images 24 bits

Surnommées (true color), Ces images ont une appellation trompeuse : (images à couleurs vraies). Le monde numérique fini ne peut pas rendre compte intégralement de la réalité, toutes les couleurs que comportent réellement les images. Le codage de la couleur étant réalisé sur trois octets, chaque octet représentant la valeur d'une composante couleur par un entier de 0 à 255. Ces trois valeurs codent généralement la couleur dans l'espace RVB. Le nombre de couleurs différentes pouvant être ainsi représenté est de 256 x 256 x 256 possibilités, soit à peu près de 16,7 millions de couleurs. L'oeil humain étant capable de discerner que près de 2 millions des couleurs, la différence de nuance entre deux couleurs très proches pour les 16,7 millions ne sera pas perceptible facilement. Considérant que les couleurs restituées par ce mode de codage sont visiblement parlant exactes, on en parle alors de « couleurs vraies ».

Le codage se faisant en binaire les trois octets R.V.B. sont codés à leurs valeurs maximales.

Les images bitmap basées sur cette représentation peuvent rapidement occuper un espace de stockage considérable, chaque pixel nécessitant trois octets pour coder sa couleur.

A présent penchons-nous aux images qui utilisent d'autres couleurs qu'on n'appelle pas des couleurs vraies, mais cette fois -ci indexées

2. Images à palettes, images en 256 couleurs (8 bits)

Pour les images vues précédemment, l'information couleur de chaque pixel est codée par 3 octets, ce qui fait des images en vraies couleurs des images très "lourdes".

L'utilisant d'une palette de couleur appelé look-up table ou LUT en anglais "attachée" à l'image fera que l'information couleur soit codée sur 1 octet (pour gagner de la place), au lieu de trois.
Chaque pixel va non plus véhiculer le code couleur RVB qui lui est affecté, mais simplement un chiffre compris entre 0 et 255. A chacun de ces chiffres va correspondre une couleur, définie par son code RVB et stockée dans une palette avec les données de l'image (on parle de couleurs indexées). Lors de la visualisation de l'image, la correspondance se fait entre le numéro de la couleur affecté à chaque pixel (compris entre 0 et 255) et le code couleur RVB correspondant.

Une autre méthode existante consiste à se passer de palette, et de coder directement les trois couleurs en utilisant un octet : chaque composante couleur est codée sur deux bits, le bit restant peut servir soit à gérer plus de couleurs sur une des composantes, soit à gérer la transparence du pixel. Avec cette méthode, on obtient des images bitmap avec un codage couleur effectivement limité à 8 bits, bien que la plage des couleurs possibles soit très réduite par rapport à celle qu'offre la méthode utilisant une palette.

Dans le cas des images en couleurs indexées, il est possible de spécifier que les pixels utilisant une des couleurs de la palette ne soient pas affichés lors de la lecture des données de l'image. Cette propriété de transparence est très utilisée (et utile) pour les images des pages web, afin que la couleur de fond de l'image n'empêche pas la visualisation de l'arrière-plan de la page.

La palette est optionnelle. Lorsqu'une palette est définie, elle contient successivement 4 octets pour chacune de ses entrées représentant :

· La composante bleue (sur un octet)

· La composante verte (sur un octet)

· La composante rouge (sur un octet)

· Un champ réservé (sur un octet).

Ces octets réservés peuvent contenir n'importe quoi, a condition bien entendu de respecter certaines conditions, ces notions seront largement traitées au chapitre troisième. Mais à présent traitons d'abord les autres types d'images.

Le mode indexé permet de coder les images avec 2, 4, 6 ou 8 bits par pixel, soit 4, 16, 64 ou 256 couleurs.

3. Images 32 bits

Si on se contente de 32 niveaux d'intensité par couleur, il ne faut plus que 3*5=15 bits pour stocker chaque pixel. On obtient alors 32768 couleurs différentes, ce qui est généralement suffisant. Ce mode est appelé le mode High Color.

Remarquons qu'une variante codée sur 16 bits est plus souvent utilisée. Elle permet d'obtenir 65536 couleurs en assignant 64 niveaux d'intensité à une des couleurs - généralement vert ou bleu -, et 32 aux deux autres en partant du principe que l'oeil humain est plus sensible au vert et au bleu qu'au rouge. Cette variante est utilisée car les architectures des ordinateurs sont généralement prévues pour manipuler des nombres de bits multiples de 8, les octets.

4. Images en teintes (ou niveaux) de gris

On ne code ici plus que le niveau de l'intensité lumineuse, généralement sur un octet (256 valeurs). Par convention, la valeur zéro représente le noir (intensité lumineuse nulle) et la valeur 255 le blanc (intensité lumineuse maximale) :

000

008

016

024

032

040

048

056

064

072

080

088

096

104

112

120

128

 

255

248

240

232

224

216

208

200

192

184

176

168

160

152

144

136

(Tableau 2)

Ce procédé est fréquemment utilisé pour reproduire des photos en noir et blanc ou du texte dans certaines conditions (avec utilisation d'un filtre pour adoucir les contours afin d'obtenir des caractères plus lisses).

Ce codage de la simple intensité lumineuse est également utilisé pour le codage d'images couleurs : l'image est représentée par trois images d'intensité lumineuses, chacune se situant dans une composante distincte de l'espace colorimétrique (par exemple, intensité de rouge, de vert et de bleu).

5. Images avec gestion de la translucidité

On peut attribuer à une image un canal supplémentaire, appelé canal alpha, qui définit le degré de transparence de l'image. Il s'agit d'un canal similaire aux canaux traditionnels définissant les composantes de couleur, codé sur un nombre fixe de bits par pixel (en général 8 ou 16). On échelonne ainsi linéairement la translucidité d'un pixel, de l'opacité complète à la transparence.

I.4 FORMAT D'IMAGES BITMAP

Un format d'image est une représentation informatique de l'image, associée à des informations sur la façon dont l'image est codée et fournissant éventuellement des indications sur la manière de la décoder et de la manipuler.

Le format bitmap est un des formats non compressé, il est composé d'un en-tête contenant des attributs (dimensions de l'image, type de codage, palette de couleurs, etc.), etc., suivi des données proprement dites de l'image. La structuration des attributs et des données diffère pour chaque format d'image. La plupart des formats sont composés d'un en-tête contenant des attributs De plus, les formats actuels intègrent souvent une zone de métadonnées (metadata en anglais) servant à préciser les informations concernant l'image comme :

· la date, l'heure et le lieu de la prise de vue,

· les caractéristiques physiques de la photographie ( sensibilité ISO, vitesse d'obturation, usage du flash...)

Ces métadonnées sont par exemple largement utilisées dans le format Exif (extension du format JPEG), qui est le format le plus utilisé dans les appareils photo numériques.

I.5 L'EN-TETE D'UN FICHIER BITMAP (en anglais file header)

Elle fournit des informations sur le type de fichier (bitmap), sa taille et indique le commencement où commencent les informations concernant l'image à proprement parlé.

L'entête est ainsi structuré :2(*)6

· la signature (sur 2 octets), indiquant qu'il s' agit d'un fichier BMP à l'aide de deux caractères :

o BM, 424D en hexadécimal, indique qu'il s'agit d'un Bitmap Windows.

o BA, indique qu'il s'agit d'un bitmap OS/2.

o CI, indique q'il s'agit d'une icône couleur OS/2.

o CP, indique qu'il s'agit d'un pointeur de couleur OS/2.

o IC, indique qu'il s'agit d'une icône OS/2.

o PT, indique qu'il s'agit d'un pointeur OS/2.

· La largueur de l'image (sur 4 octets), c'est-à-dire le nombre de pixels horizontalement (an anglais width).

· La hauteur de l'image (sue 4 octets), c'est-à-dire le nombre de pixels verticalement (en anglais height).

· Le nombre de plan (sur 2 octets). Cette valeur vaut toujours 1.

· La profondeur de codage de la couleur (sur 2 octets), c'est-à-dire le nombre de bit utilisé pour coder la couleur. Cette valeur peut être égale à 1, 4, 8, 16, 24 ou 32.

La méthode de compression (sur 4 octets). Cette valeur vaut 0 lorsque l'image n'est pas compressée, ou bien 1, 2 ou 3 suivant le type de compression utilisé :

o 1 pour le codage RLE de 8 bits par pixel

o 2 pour un codage RLE de 4 bits par pixel

o 3 pour un codage bitfield, signifiant que la couleur est codée par un triple masque représenté par la palette.

· La taille totale de l'image en octet (sur 4 octets).

· La résolution horizontale (sur 4 octets), c'est-à-dire le nombre de pixels par mètre horizontalement.

· La résolution verticale (sur 4 octets) c'est-à-dire le nombre de pixels par mètre verticalement.

· Le nombre des couleurs de la palette (sur 4 octets).

· Le nombre des couleurs importantes de la palette (sur 4 octets). Ce champ peut être égal à 0 lorsque chaque couleur a son importance.

Signalons qu'après les six premiers octets qui continent la signature appelé identifiant et la taille du fichier, viennent immédiatement octets non utilisés, mais réservés pour l'usage future. Ces octets peuvent contenir sans problème n'importe quoi, suffisant qu'on respecte certaines normes. Cette place vide nous intéressera dans notre travail et sera encore traitée dans le deuxième chapitre.

Voila que les images bitmap étant plus utilisées actuellement dans le monde digital, posent moins de problèmes par leur simplicité et leur portabilité. Le codage du format bitmap permet d'autres astuces importantes qui suffisent d'être raisonnable : ainsi au chapitre deux, nous allons traiter l'une des grandes sorcelleries informatiques que peuvent permettre les images bitmap.

CHAPITRE II : LA STEGANOGRAPHIE PAR LES IMAGES

II.1 TRANSMISSION DES MESSAGES SECRETS DANS LE TEMPS

Dans les temps anciens, les ancêtres voulant se communiquer leurs secrets, ils ont cherché tous les moyens possibles pour cacher ces messages avant de les envoyer dans la clandestinité aux autres. Mais cela a eu des temps à autres des problèmes sur les expéditeurs même des messages, car leurs secrets étaient découverts et mis au porté de tous et surtout celle de leurs ennemis.

Ils ont cherché à cacher les messages dans des objets a fin de les faire passe pour authentiques bien que comportant un secret.

Beaucoup d'astuces ont été utilisés pour cacher la messagerie contre une classe bien définie de personnes : prenons un exemple d'un certain Histiée qui se trouvait à la cours de Perse et voulait prendre contact avec son gendre (le tyran Aristagoras de Milet). Il choisit un serviteur dévoué, lui rasa la tête, y tatoua le message et attendit la repousse des cheveux. Histiée envoya alors CE serviteur à Aristogoras avec instruction de lui raser le crâne. L'ayant fait, celui-ci put lire le message.

En dehors de cet exemple, les messages ont continué à être camouflés en vue d'être envoyés. Avec l'évolution de l'informatique, on a essayé de le faire mais souvent sans succès.

II.2 PROBLEME DE LA TRANSMISSION DES MESSAGES SECRETS A

TRAVERS UN RESEAU

Aujourd'hui à travers l'internet (réseau appelé wide area network), des millions des messages sont envoyés par jour dans le monde ; les personnes s'expédient les e-mails, pas seulement parce que c'est rapide, mais surtout parce que ceux-ci constituent un secret dont personne ne peut se rendra compte que, son destinateur. Il est à signaler que, certaines sociétés surveillent activement tous les envois de fichiers joints transitant leurs réseaux informatiques internes (LAN, MAN,...), avec comme objectif d'empêcher qu'un secret ne sorte. Pour cela, au niveau du serveur ils lisent des messages avant de les envoyer aux destinateurs, si bien entendu l'on suspecte l'un des correspondants ou le message lui même.

II.3 DE LA CRYPTOGRAPHIE

Les informaticiens pensèrent directement à la méthode cryptographique. Cette méthode consiste à remplacer un ensemble de signe d'un texte par un autre : il faut par exemple remplacer tous les `a' contenu dans le message par `f', tous les `b' par 'g'(substitution mono-alphabétique: procédé de remplacement d'une lettre en clair en une seule cryptée).soit encore remplacer une seule lettre par une suite d'autres lettres(substitution polyalphabétique: procédé de remplacement d'une lettre en clair en plusieurs cryptées).L'utilisation de la transposition: les lettres sont mélangées, leur ordre normal est bouleversé.

Il deviendra alors difficile de lire le message cryptographié (par clé unique ou par clé publique); la lisibilité a été compliquée, il faut décrypter pour lire le contenu, chose qui n'est pas facile.

Nous connaissons dire un secret de notre histoire

Nous connaissons que la suite est difficile

Stay htssfnyytry inwj as

Yjhwjz ij stzwj mnyztnwj

Stay htssfnyytry vaj qf

Yanzj jyz inkknhnqj

Figure 4. Figure 5.

Nul ne peut voire un tel message (figure 1.), lui être remis pour transmission à quelqu'un sans pour autant chercher à découvrir ce que cela signifie.

Si alors l'homme ne peut pas réussir à décrypter le message, il faudra savoir que les ordinateurs puissants le peuvent dans moins d'une seconde en testant des milliards de possibilités et combinaisons pour arriver à trouver la clé du décryptage et lire le contenu du message. Voici le message décrypté à la figure 2.

Les fichiers protégés par mot de passe peuvent aujourd'hui être ouverts par des ordinateurs puissants, ce qui prouve qu'il Apparait alors vain de crypter ou de protéger un message par mot de passe.

Il importe de savoir que certains gouvernements traitent de coupables les personnes qui s'envoient des messages cryptés. Nous pouvons alors dire sans tors que les messages cryptés et envoyés à travers un réseau sont visibles à l'oeil nu au niveau du serveur mais c'est leur lecture directe qui est impossible. Est-il alors impossible de faire passer un message inaperçu même au niveau du serveur ? Les phrases qui suivent donneront satisfaction à cette question.

II.4 LA STEGANOGRAPHIE

II.4.1 NOTION

La stéganographie (un mot qui vint du grec steganos, couvert et graphein, écriture)3(*) 7c'est l'art de cacher un message au sein d'un autre message de caractère anodin, de sorte que l'existence même du secret en soit dissimulée. Alors qu'avec la cryptographie habituelle, la sécurité repose sur le fait que le message ne sera sans doute pas compris, avec la stéganographie, la sécurité repose sur le fait que le message ne sera pas sans doute pas détecté.

Parmi les astuces historiques, on note les encres invisibles, les messages cachés dans des oeufs durs (en écrivant sur la coquille à l'aide d'une solution de vinaigre et d'alun), les minuscules trous d'épingle dans des caractères sélectionnés, les infimes changements dans l'écriture manuelle des caractères ou dans leur espacement, les marques au crayon sur un texte tapé à la machine, les micropoints (une page de texte photographiée et réduite à un point de moins d'un millimètre de diamètre, lequel sera ensuite posé sur une lettre apparemment anodine) etcaetera.

En effet, La majeure partie des fichiers informatiques (images, sons, texte, disquettes) contiennent des zones de données non utilisées ou insignifiantes. La stéganographie informatique consistera à les remplace par des informations.

La visualisation de l'image, l'audition du son, la lecture du texte ou l'ouverture de la disquette ne laissera pas voire ni entendre les informations cachées. Il faudra envisager d'examiner le codage de cette image, de ce son, etc. pour se rendre compte de ces informations dissimulées, codées en binaire comme le fichier lui- même, Ce qui est aussi complexe et pourquoi pas incroyable.

Une image étant aussi une information, on peut donc arriver à cacher une image dans une autre.

Dans la suite de notre travail nous appellerons au terme de « message » toute information ou texte à cacher.

II.4.2 TECHNIQUE DE LA STEGANOGRAPHIE

Nous allons nous limiter sur la stéganographie par les images et nous faisons spécialement attention aux images BITMAP.

Il importe de transformer le message en une longue suite de bits qui seront camouflés parmi les bits d'un autre fichier image. La méthode que nous allons utiliser consistera à camoufler les huit bits du message dans les trois derniers bits significatifs de chaque point d'une image. On cachera donc selon les octets : les trois premiers bits de huit du message seront couchés à la place de trois bits du poids le plus faible de premier octet d'un point de l'image.les trois deuxièmes octets du message dans les trois bits du poids le plus faibles et en fin les deux derniers bits du message seront insérés dans les deux bits du poids le plus faible du dernier octet de l'image. Voici l'exemple où nous cachons la lettre « a » dans un pixel de couleur blanche :

Pour coder la couleur blanche nous avons par octet les valeurs 255, 255, 255

« a » est représenté par son code ASCII : 97 ce qui donnera en binaire 01100001 étant donné que notre programme interprétera les nombres binaires en sens inverse, ce nombre sera comme suit : 10000110. Les octets codant le point seront aussi convertis en binaire :

On aura donc : 11111111, 11111111, 11111111 correspondant aux octets rouge vert et bleu : 255, 255, 255. Ces nombres binaires seront aussi interprétés en sens inverse c'est-à-dire de droite vers la gauche, ce qui signifie que le poids le plus faible sera alors au côté le plus à droite possible :

· a =97 en décimal =10000110 en binaire (suivant l'interprétation de notre logiciel stéganographique).

· Les octets codant le pixel=255, 255, 255=11111111, 11111111, 11111111 en binaire.

· Après traitement par ce logiciel on aura :

10011111, 00111111, 10111111 des nombres binaires qui contiennent les bits du message. Leurs correspondants décimaux sont 249, 252, 253

Ce sont ces trois valeurs 249, 252, 253 qui feront le codage du pixel de l'image qui compostera le message. Ces nombres donneront toujours la couleur blanche comme à l'image précédente, pourtant les valeurs ont été changées.

Et détiennent les bits du message. Le fichier peut être consulté de toute manière sans qu'une tierce personne ne sache son codage interprété par la seconde partie du logiciel de la lecture peut tirer les bits du message et les transformer en message caché au départ.

Pour la lecture du message « a » en destination, il nous suffira de tirer ces bits que nous venons d'insérer en les copiant et les transformer en décimal avant de les convertir en leur symbole caractères, en vue de le lire à la sortie comme primitivement entré : «a ».

L'exemple que nous venons de montrer n'est que d'un seul caractère pour un pixel. Une image de grande taille nécessitera tout de même un le nombre des caractères identique que celui des pixels. Si le message est de petite taille que le nombre des point constituant le corps de l'image, il y aura manque des valeurs à écrire pour le reste des pixels ; une erreur sera alors constaté car la boucle qui parcourra toute l'image manquera des valeurs à insérer dans des pixels d'excédents ; et si au contraire, e nombre des caractères du message est supérieur à celui des pixels disponibles, alors le reste des caractères ne sera pas considérés, et par conséquent, il ne sera pas écrit dans l'image.

Soulignons que l'image graphique ne changera pas de manière appréciable - la plupart des standards graphiques étant spécifiés pour plus de variations de couleurs que l'oeil humain ne peut en en saisir - et le destinataire peut récupérer le message. On peut stocker de cette façon un message de 64 Ko dans une image 1024 par 1024 à niveaux de gris.

Il suffira après transfert du message que l'utilisateur puisse ne fit ce qu'entrer le nom d'un fichier du type bitmap vide. si ce dernier n'existe pas il sera directement crée et s'il existe, alors il faudra que le codage des pixels contenu dans le message caché remplacent ceux de l'image ouvert en dernier lieu.

De ce fait, nous aurons notre image cachée au départ dont Les qualités, l'intensité restent les mêmes. On aura ainsi caché une image derrière une autre.

CHAPITRE III : L'ELABORATION D'UN ALGORITHME DE

MARQUAGE DE TEXTE AU SEIN D'UNE IMAGE

BITMAP

III.1 LE MESSAGE A CODER

Dans le chapitre premier nous avons expliqué que les octets de l'image bitmap peuvent être codés en binaire, et dans le chapitre précédent nous venons de montrer comment le message en vue d'être camouflé derrière une image doit être converti en binaire, étant donné que l'image est constitué des pixels codés sur des octets et octets composés des bits.

De ce fait, le message ne laissera plus voir une distinction de ses caractères qu'une suite des bits car, même les espaces seront eux aussi convertis en binaire. Il suffit de découper le message caractère par caractères et mettre ceux-ci dans un tableau des entiers dont la taille doit être supérieur ou égale au nombre des pixels de l'image.

La méthode suivante nous aidera à faire cela :

static int[] messageAcoder(){

char[] t=new char[multiplicateur];

int[] Tableaumess=new int[multiplicateur];

for(int p=0;p<multiplicateur;p++){

t[p]=phrase.charAt(p);

Tableaumess[p]=(int)t[p];

}

return Tableaumess;

}

Le tableau qui est retourné ici, renvoi le code ASCII de chaque caractère les espaces inclus.

Pour bien illustrer cette méthode, Prenons l'exemple d'un petit message comme « Est tu là? Non» le tableau qui sera retourné quand l'utilisateur entre un tel message contiendra les nombres correspondants au code ASCII des caractères suivants:

32

69

115

116

32

116

117

32

108

224

63

32

78

111

110

(Tableau 4)

III. 2 LECTURE DE L'IMAGE

Tenons à signaler que l'image contenant déjà le message sera généralement envoyé en destination, il sera important pour nous de prévoir deux fichiers du format BMP : l'un, « Image de départ » contenant une image dont le contenu sera utilisé, et lu uniquement puis sera transporté dans trois tableaux de notre logiciel ; c'est à partir de ce logiciel que nous insérerons le message dans ces tableaux avant de les copier dans une autre image appelée « Image de destination » qui peut avoir des données primitives.

NB : a défaut de la deuxième image, celle-ci sera crée dès que l'on entrera un nom quelconque.

L'image appelée de destination contiendra immédiatement le contenu de la première additionnée du message.

La méthode suivante nous a servie de lire le fichier « Image de départ »:

public static void lireImage(String adresseImage){

entete=new int[16];

tabEntete=new int[28];

int[] matrisse=new int[multiplicateur*3];

int compteur=0;

try{

FileInputStream con=new FileInputStream(adresseImage);

BufferedInputStream fid=new BufferedInputStream(con);

DataInputStream dan=new DataInputStream(fid);

int a=dan.read();int b=dan.read();

if(a!=66||b!=77)

System.out.println("le fichier "+adresseImage+" ne contient pas une image bitmap");

for(int i=0;i<16;i++)entete[i]=dan.read();

a1=dan.read();b1=dan.read();c1=dan.read();d1=dan.read();

a2=dan.read();b2=dan.read();c2=dan.read();d2=dan.read();

largeur=a1+256*(b1+256*(c1+256*d1));

hauteur=a2+256*(b2+256*(c2+256*d2));

System.out.println("la largeur est"+largeur);

System.out.println("la hauteur est"+hauteur);

prOctet=new int[hauteur][largeur];

dxOctet=new int[hauteur][largeur];

trsOctet=new int[hauteur][largeur];

complement=largeur%4;

System.out.println("le complement par ligne est de "+largeur+" octets");

multiplicateur=hauteur*largeur;

System.out.println("Cette image permet le marquage de "+multiplicateur+" caracteres, les espaces

inclus");

javax.swing.JOptionPane.showMessageDialog(null,"VOUS DEVEZ ENTRER UN MESSAGE D'AU

MOINS "+multiplicateur+" CARACTERES INCLUS LES ESPACES VIDES");

for(int i=0;i<28;i++)tabEntete[i]=dan.read();

matrix=new int [multiplicateur*3];

for (int i=hauteur-1; i>=0; i--){

for(int j=0; j<largeur; j++){

prOctet[i][j]=dan.read(); dxOctet[i][j]=dan.read();

trsOctet[i][j]=dan.read();

matrix[compteur]=prOctet[i][j];compteur++;

matrix[compteur]=dxOctet[i][j];compteur++;

matrix[compteur]=trsOctet[i][j];compteur++;

}

for(int j=0; j<complement; j++) dan.read();

}

dan.close();

}catch(IOException e) {

System.out.println("Erreur dansla lecture de l'image");

}

}

Ce sont les tableaux prOctet[i][j],dxOctet[i][j] et trsOctet[i][j] qui contiennent les données relatives a l'image Initiale. Ceux-ci doivent contenir des entiers car les octets lus de l'image ont des valeurs entières.

Etant donné que le message à été traduit en une suite des valeurs entières et que les données lues de l'image sont entières, pourtant le camouflage doit se passer bit par bit, nous nous trouvons n'est-ce pas devant un problème ? Il nous faut donc travailler avec des nombres binaires. Le point suivant traitera comment résoudre ce problème.

III.3 CONVERSION DES NOMBRES DECIMAUX EN BINAIRES

Dans le calcul de la conversion d'un nombre décimal en binaire par une suite de division euclidienne par deux, il est connu que le premier reste sera le nombre binaire du poids le plus faible, car il se placera le plus à droite possible du correspondant binaire.

Le tableau des binaires qui sera retourné par la méthode ici-bas quant à lui sera lue de droite à gauche car il est rempli peu à peu par les premiers restes de la divisions euclidienne par 2.

La méthode suivante nous a aidé à convertir un nombre entré en argument de décimal un tableau de huit bits :

static int[] converDecimalBinaire(int nombre){

int[] Tconversion=new int[8];

int a=nombre;

for(int i=0;i<8;i++){

int h=a%2;

Tconversion[i]=h;

a/=2;

if(a==0)Tconversion[i]=0;

if(h==1)Tconversion[i]=1;

}

return Tconversion;

}

Le tableau retourné par cette méthode est toujours constitué par huit bits d'autant plus que le chiffre maximal 255 correspondant à ÿ est représenté au moins et suffisamment par huit bits. Quant aux chiffres qui ne totalisent pas 8 bits en leurs correspondants binaires, celui-ci sera complété par des 0 à son côté droit.

Cette méthode sera appelée tant pour convertir le message en binaire que les octets lus du message et insérés dans des tableaux.

Cette méthode sera encore appelée lorsqu'il faudra copier les bits du message de l'image. Des que les bits du message seront insérés dans ceux de trois tableaux, il restera alors de transformer chaque suite des bits en des nombres décimaux en vue d'être écrits dans l'Image de destination. La suite de montrera comment il faudra-t-il remettre les listes des binaires en des nombres entiers.

III.4 CONVERSION DES TABLEAUX BINAIRES (UN BIT) EN DES NOMBRES

ENTIERS

Le terme bit (b avec une minuscule dans les notations) signifie « binary digit », c'est-à-dire 0 ou 1 en numérotation binaire. Il s'agit de la plus petite unité d'information manipulable par une machine numérique. Il est possible de représenter physiquement cette information binaire.4(*)8

Quand on convertie un nombre de la base 2 en base 10, il est connu qu'il faut y aller en multipliant le chiffre significatifs par deux, exposant le nombre des chiffres significatifs se trouvant directement à droite. Tout en sachant que 2 exposant zéro donne un. Voici la méthode qui nous a servi de correspondre un tableau de huit chiffres binaires en un chiffre décimal :

static int coBinaireDdec(int[] tab){

int k=0;

int decimal=0;

CacherTexte od=new CacherTexte();

for(int j=0;j<8;j++){

k=tab[j]*od.deuxExposantN(2,j);

decimal+=k;

}

return decimal;

}

Remarquez qu'à la cinquième ligne, l'instruction : k=tab[j]*deuxExposantN(2,j)

Comporte l'identifiant `deuxExposantN' qui ne figure pas entre les mots clés du langage java. Celui-ci est un nom d'une autre méthode que nous avions conçu, méthode qui calcule pour toute tournure de la boucle : 2 exposant le nombre des chiffres significatifs se trouvant à droite du multiplicateur en cours.

C'est pourquoi cette méthode reçoit dans la liste de ses arguments 2 et j, le compteur des nombres se trouvant après le chiffre multiplicateur, significatif en cours. Voici le corps de la méthode deuxExposantN :

static int deuxExposantN(int coeff,int exposant){

int m,n;

m=1;

n=0;

do{

if(exposant==0)m=1;

else

m=m*coeff;

n+=1;

}while(n<exposant);

return m;

}

Cette méthode recevra en argument deux nombres: un coefficient qui est généralement 2 et un exposant qui doit être entre 7 et 0 tout en sachant que 20=1. Toutes les méthodes que nous venons de montrer n'ont pas explicité comment les bits du message seront insérés dans ceux de l'image. L'intertitre suivant expliquera comment nous pouvons à partir d'une méthode qui sera appelée pour chaque pixel, cacher les bits du message dans ceux des octets de l'image.

III.5 INSERTION DES BITS DU MESSAGE EN VUE DU MARQUAGE

Au chapitre deux, nous avions donné un exemple englobant les opérations d'insertion du message dans une image (II.4 LA STEGANOGRAPHIE).

Ici-bas se trouve la méthode qui nous a servi de faire cette tache aussi importante de notre logiciel stéganographique :

public static int[] ecriturebin(int temp1,int temp2,int temp3,int tmess){

int[] Ttemp1=converDecimalBinaire(temp1);

int[] Ttemp2=converDecimalBinaire(temp2);

int[] Ttemp3=converDecimalBinaire(temp3);

int[] mess=converDecimalBinaire(tmess);

int z=0;

for(int t=0;t<3;t++){

Ttemp1[t]=mess[z];

z++;

}

for(int q=0;q<3;q++){

Ttemp2[q]=mess[z];

z++;

}

for(int n=0;n<2;n++){

Ttemp3[n]=mess[z];

z++;

}

tableauret=new int[3];

tableauret[0]=coBinaireDdec(Ttemp1);

tableauret[1]=coBinaireDdec(Ttemp2);

tableauret[2]=coBinaireDdec(Ttemp3);

return tableauret;

}

Cette méthode recevra en arguments une liste des trois valeurs représentant les trois octets codant un pixel et un, donnant le caractère du message à insérer auprès de trois octets. Le nombre des valeurs retournées par cette méthode seront égaux que le nombre des valeurs à insérer dans le fichier à envoyer. Aussi longtemps que la boucle prévue pour parcourir les trois tableaux comportant les valeurs d'octets lues n'aura pas atteint la fin, les valeurs retournées par la méthode précédente qui comportent déjà le message seront entrain d'être récupérées et insérées dans un autre tableau en vue de l'écriture dans le fichier appelé « Image destination ».

III.6 ECRITURE SUR L'IMAGE

Les valeurs qui sont traitées dans la méthode précédente sont récupérées immédiatement et mises dans un tableau afin d'être insérés simplement au sein de l'Image de destination. Voici une méthode qui nous a servi de le faire :

static void ecrireImage(String adresse){

try{

FileOutputStream stg=new FileOutputStream(adresse);

BufferedOutputStream nogra=new BufferedOutputStream(stg);

DataOutputStream phie=new DataOutputStream(nogra);

phie.write(66);

phie.write(77);

for(int i=0;i<16;i++) phie.write(entete[i]);

phie.write(a1);phie.write(b1);phie.write(c1);phie.write(d1);

phie.write(a2);phie.write(b2);phie.write(c2);phie.write(d2);

complement=largeur%4;

for(int i=0;i<28;i++)phie.write(tabEntete[i]);

CacherTexte cd=new CacherTexte();

int kiba=0;

int []rasta=cd.ecritureBinaire();

CacherTexte pm=new CacherTexte();

System.out.println("");

System.out.println("complement"+complement);

for (int i=hauteur-1; i>=0; i--){

for(int j=0; j<largeur*3; j++){

phie.write(rasta[kiba]);

System.out.println(rasta[kiba]);

kiba++;

}

System.out.println(" ");

for(int j=0; j<complement; j++){

phie.write(0);

System.out.println(0);

}

}

System.err.println("L'ECRITURE EST TERMINEE AVEC SUCCES");

phie.close();

}catch(IOException e) {

System.err.println("Erreur du camouflage dans l'image");

}

}

Le fichier « Image de destination » détenant déjà le message caché aura visiblement par l'oeil humain, les mêmes qualités que celles du fichier appelé « Image Initiale », alors qu'en réalité il y en a une différence.

III.7 EXTRACTION DU MESSAGE CACHE

Sachant que l'image que nous détenons, qui vient de nous être envoyé dans un périphérique de stockage extérieur quelconque, ou à travers un réseau contient un message caché, nous devons chercher à lire son contenu. C'est ici que nous entrons dans la deuxième partie de notre logiciel car, celui-ci ne se limite pas seulement à cacher le message dans une image, mais aussi et surtout à le retirer du fichier Bitmap.

Notons que bon nombre de méthodes qui ont été utilisées dans la partie du passage du message à l'image seront encore utilisées dans celle de retrait du message de l'image. La seule méthode spéciale qui s'augmente à la liste est celle permettant après lecture de l'image de récupérer les octets du message et de les transformer directement en des chaînes des caractères.

public static char[] lireBinaireMessage(){

LireMessage de=new LireMessage();

for(int i=0;i<(multiplicateur*3);i++){

// System.out.println(matrix[i]);

}

int comp=0;

int compt=0;

int compte=0;

int[] Ttemp1;

int[] Ttemp2;

int[] Ttemp3;

int[] mess;

leLecture=new char [multiplicateur*3];

Ttemp1=new int[8];

Ttemp2=new int[8];

Ttemp3=new int[8];

int []message=new int[8];

for(int ish=0;ish<multiplicateur;ish++){

int z=0;

Ttemp1=de.converDecimalBinaire(matrix[comp]);comp++;

Ttemp2=de.converDecimalBinaire(matrix[comp]);comp++;

Ttemp3=de.converDecimalBinaire(matrix[comp]);comp++;

for(int j=0;j<3;j++){

message[z]=Ttemp1[j];

z++;

}

for(int m=0;m<3;m++){

message[z]=Ttemp2[m];

z++;

}

for(int n=0;n<2;n++){

message[z]=Ttemp3[n];

z++;

}

int messageInt=de.coBinaireDdec(message);

char sageChar=(char)messageInt;

leLecture[ish]=sageChar;

}

return leLecture;

}

Cette méthode recevra en ses arguments les valeurs des trois octets composant un pixel, octets qui contiennent le message et retourne le caractère extrait. Parce que cette méthode sera appelée dans une boucle dépendant du nombre des pixels, elle retournera autant des fois les caractères extraits qui sera traduit en son correspondant alphanumérique : le message.

Nous venons de décrire un l'algorithme qui nous permettra de lire et de copier l'entête et le corps d'une image bitmap, de lire un message de transformer le corps de l'image et le message en binaire, d'insérer les bits du message dans ceux de l'image en en remplaçant les trois derniers. Nous avons traduit les nombres binaires tirés en décimal et en fin écrire ces nombres décimaux dans une image bitmap qui sera créée.

Nous avions en fin montré l'algorithme qui nous aidera à lire l'image contenant le message, de traduire ce message de binaire en décimal et de décimal vers l'alpha numérique.

CHAPITRE IV: SIMILATION DE LA STEGANOGRAPHIE

PAR UN LOGICIEL INFORMATIQUE

Au chapitre précédent nous avions donné un algorithme qui nous a permis de stéganographier dans une image en vue de sécuriser la transmission d'un message texte, mais remarquez que les quelques instructions contenus dans ces méthodes sont en langage Java.

Nous avions choisi le langage de programmation Java vue sa facilité dans le traitement des images et sa portabilité. Mais ce programme peut aussi être fait en langage C et en Visuel Basic.

IV.1 PROPRIETE DU MESSAGE

Nous devons savoir que la lecture de l'image se fait du début jusqu'à la fin c'es-à-dire de son pixel situé la ligne la plus basse et à la colonne la plus à gauche. Cela signifie l'écriture de l'image de destination se fera aussi du débit jusqu'à la fin.

Cela étant et sachant qu'un caractère du message sera caché dans un seul pixel, il faudra prévoir un message dont le nombre des caractères est supérieur ou égal à celui de pixels composant l'image. Mais ce qui est idéal est l'égalité de ces nombres pourtant aussi rare et probabiliste : car personne ne se mettre à compter le nombre des caractères du message qu'il est entrain de saisir.

Parce que l'erreur est de mettre un message contenant un nombre restreint des caractères, notre programme sera capable de compter le nombre des caractères et informer à l'utilisateur s'il a mis un petit message et le programme sera fermé en vue de permettre à l'utilisateur de redémarrer le programme et de saisir cette fois un message remplissant cette condition de taille c'est-à-dire plus long.

En vue de lutter contre les petits messages pour les grandes images il vous sera important de choisir une petite image pour des petits messages et des images de grande taille pour des grands messages parce que c'est l'utilisateur qui propose le fichier du type BITMAP dans lequel vous cacherez le message par cette boite de dialogue suivante :

Figure 6

Après que vous ayez entré le nom et l'emplacement du fichier de l'extension «.bmp» la lecture de votre fichier sera fait et le nombre des pixels qui correspond au nombre du message que vous devez entrer vous sera fournie dans la boite de dialogue suivante :

Figure 7

Dans l'exemple de la boite de dialogue ci-haut, on demande d'entrer un message d'au moins 8742 caractères. Le respect de cette instruction fera que le message qui serait entré par la suite soit dissimilé aisément dans les 8742 pixels de l'image. Le non respect de cette instruction.

Un utilisateur intelligent ayant une image de grande taille peut taper un petit texte et à la fin appuyer continuellement sur la touche d'espacement du clavier jusqu'à un certain niveau car comme nous l'avions précisé précédemment les espaces seront inclus si seulement ils se trouvent avant le curseur dans la zone de texte permettant la saisie de texte.

IV.2 INFLUENCE DU MESSAGE SUR L'IMAGE

Au commencement de ce livre vous vous aurez posé des questions de savoir si l'image qui contiendra le message en son sein ne laissera pas voir celui-ci. Comment alors visualiser une image où il y a des textes sans s'en apercevoir ?

Comment même quelqu'un d'instruit en informatique ne peut pas se estimer si dans une image traité par notre programme il y a un texte quelconque ? les phrases qui suivent répondront à ces questions :

En réalité la représentation des couleurs d'une image en informatique se fait par des nombres comme nous l'avons expliqué au chapitre premier (voir le point I.1.3. Représentation des couleurs). Les nombres qui se suivent ou qui sont proches peuvent se remplacer sans changer la coloration visuelle de limage : c'est-à-dire lorsque nous avons des nombres comme 255, 255, 255 ce qui donne la couleur blanche, nous pouvons les remplacer par 253, 254, 253 ce qui donnera toujours une couleur nuancée de blanche qui ne diffère pas visiblement à l'oeil nu de la première alors qu'informatiquement ca change.

Voici un exemple des images qu'un utilisateur a entré en vue d'y cacher un message important :

(Figure 8)

Cette image peut être confondue par celle qui suit, alors quelle cette dernière contient une un message important.

(Figure 9)

Cette image peut être envoyée à quelqu'un dans un réseau sans que le message lui contenu ne soit d'une manière ou d'une autre lu que par la partie suivante de notre programme.

Dans un réseau local ou à travers l'internet, le distributeur des messages au serveur a le pouvoir de consulter tous les fichiers à transférer. Même si notre image contenant le message est aperçue par une personne de mauvaise foi, cette dernière ne cessera qu'à jeter un coup d'oeil sur elle, la trouvant moins intéressante, passera immédiatement à autres choses ne sachant pas que des secrets aussi importants passent à son insu.

IV.3 APPLICATION DU PROGRAMME STEGANOGRAPHIQUE

Apres vous avoir longtemps parlé des astuces et procédures que nous avions utilisées pour vous faire arriver à cacher un texte derrière une image informatique et comment parvenir à tirer ce message en destination et le lire, nous voici vous présenter une recette qui concrétiser toutes ces longues théories : un simple clic pour exécuter le programme vous fera ceci devant vos yeux :

(Figure 10)

Ici vous avez le choix de continuer ou de quitter le programme en cliquant respectivement sur DEMARRER LE PROGRAMME et sur QUITTER LE PROGRAMME deux boutons que nous avons.

Nous avions dans la mesure d'efficacité prévu que les opérations de cacher et de lire un texte d'une image soient faites par un seul et notre programme. C'est pourquoi si vous choisirez de continuer vous allez vous situer à au niveau que vous devez spécifier si vous allez cacher ou lire dans une image le texte ou le message. Il s'agit d'un menu dans lequel vous avez aussi la possibilité de quitter le programme.

(figure 11)

Si vous voulez cacher le message vous devez choir la commande «  CACHER TEXTE AU SEIN DE L'IMAGE » si au contraire vous voulez lire un message dans une image contenant un message vous aller choisir « LIRE MESSAGE CACHE DANS UNE IMAGE » et aussi vous avez l'amabilité de quitter le programme.

Si vous voulez cacher le message vous vous trouverez dans la situation où vous devez vous informer sur l'état de l'image et sur la taille du message que vous serez appelé à insérer dans l'image. L'interface suivant vous permettra de saisir le message, et quand vous finirez il ne vous restera que de faire un petit clic sur le bouton « CACHER LE MESSAGE » en vue de permettre au programme de cacher ces mots que vous venez de saisir.

(Figure 12)

Vous devez savoir respecter les ordres que vous donnera le programme car l'oublie de ceux-ci serait une erreur et obstacle qui vous sera soumis.

Prenons un exemple, si par mégarde vous venez d'entrer un message inferieur à celui que vous demande le programme en ne respectant pas la taille du message

Un message vous sera fait avant que le programme ne se ferme.

(Figure 13)

Une fois que vous venez de saisir le message remplissant les conditions requises vous devez fournir l'emplacement et/ou le nom du fichier qui contiendra le l'image qui portera en son sein et le message et l'image précédente. C'est plutôt cette image qui sera envoyée en destination et qui est stéganographiée.

(Figure 14)

Les procédures que vous aurez suivies sont celles de cacher un message au sein d'une image. Si vous voulez lire un message que contient une image quelconque vous devez au menu choisir la lecture en cliquant sur « LIRE MESSAGE CACHE DANS UNE IMAGE ».

(Figure 15)

(Figure 16)

Comme précédemment vous devez fournir le nom du fichier image contenant le message et cliquer sur Ok pour que le message que contient cette image vous soit fourni. Voici un exemple du message caché et lu par notre programme :

(figure 17)

IV.4 LA REGLES A METTRE EN PRATIQUE

Avant de vous parler des règles suivantes à suivre, il importe de signaler que ces normes sont relatives au logiciel de visualisation de l'image et non ceux de notre programme stéganogramhique.

Apres que le message soit inséré dans l'image contenant le message celle-ci peut être zoomée sans une affectation du message mais les règles suivantes doivent être suivies et respectées en vue de ne pas biaiser le message lui contenu.

L'image ne doit pas être pivotée afin que les pixels lus en lignes ne soient en colonne lors de la prochaine lecture du message. le message risque d'etre perturbé. Les couleurs de l'image ne doivent pas être modifiées afin que les colorations des pixels ne soient modifiées et par conséquent leurs codages et le fichier ne doit pas être compressé.

Un redimensionnement de l'image contenant le message en son sein doit ne pas être fait (ses attributs ne doivent pas être modifiés) car une partie du message peut être perdue.

Le respect de ces quelques normes et l'utilisation de ce programme stéganographique fera que vous envoyé des correspondances aussi protégées que possibles.

Il n'est pas nécessaire d'utiliser une image contenant un message pour y cacher un autre car, plusieurs utilisations de l'image contenant le message en vue d'y cacher un autre peuvent modifier essentiellement celle-ci. Et si quelqu'un ayant une accoutumance de voir cette image l'aperçoit saura directement qu'il y a des sures modifications. Ce qui peut entrainer une doute ; mais ces doutes ne sont pas aussi importantes pour ceux qui ne sont pas informé sur cette technique de cacher un message dernière une image. Il sera donc difficile de s'accoutumer sur l'aspect de l'image n'importe laquelle utilisée par quelqu'un et de penser directement sur les insertions des messages dedans.

Ce qui rend incertaine un quelconque doute.

IV.5 LA CONCATENATION DU MESSAGE

Nous savons que suite à la concaténation le l'engage Java, le C et autres programmes qui peuvent s'exécuter en mode console ne savent pas faire un affichage des voyelles accentuées ni de certains signes génériques. il suffit tout simplement d'afficher une chaine de caractère en C ou en java en mode console, vous constaterez que les voyelles accentuées ou des lettres spéciales et signes génériques seront transformées. Cela se fait aussi dans notre programme vue que nous avions affiché le résultat en mode console. Il est donc facultatif d'omettre des accents sur le texte que vous saisirez, si non une liste des voyelles accentuées, des lettres spéciales et quelques signes génériques et leurs correspondants à la lecture du message vous sont fournis dans le tableau suivant :

Numéro

Voyelle accentuée, caractères génériques ou lettres spéciales

Correspondant concaténé dans le message à la sortie

1

é

ú

2

à

ó

3

è

p

4

ê

û

5

â

ô

6

ä

õ

7

ï

'

8

ô

 

9

ÿ

` ` (Espace vide)

10

ç

Þ

11

`(apostrophe)

!

12

?

Ne varie pas

13

!

Ne varie pas

14

_

Ne varie pas

15

-

!!

16

"

Ne varie pas

17

#

Ne varie pas

18

$

Ne varie pas

19

@

Ne varie pas

20

·

x

(Tableau 5)

CONCLUSION

Nous voici à la fin de notre travail qui portait sur la stéganographie par les images pour la sécurisation de la transmission des messages.

Tout au long de ce travail nous avions montré comment une image peut porter en son sein un message.

Il nous a suffit de transformer le message en binaire en passant par le décimal de son correspondant ASCII. La lecture et l'interprétation des nombres binaires par le programme a été faite en sens inverse ; c'est-à-dire de droite à gauche car en convertissant un nombre décimal en binaire le premier reste de la division euclidienne est le bit du poids le plus faible du correspondant binaire.

Apres que les caractères du message soient en binaire, il nous a fallu lire les octets de l'image bitmap et de les transformer aussi en binaire. L'interprétation de ces nombres binaires se fait aussi en sens inverse.

Prenons le cas concret du premier caractère du message et du premier pixel de l'image: Étant donné que les trois octets composant le pixel et le correspondant ASCII du message sont déjà traduits en une suite de huit bits chacun, il nous suffira de remplacer les trois premiers bits de poids le plus faible du premier octet de l'image par les trois premiers bits du caractère ; les trois premiers bits de poids le plus faibles du deuxième octet par les trois deuxièmes bits du message et en fin les deux premiers bits du poids le plus faibles du dernier octet de l'image par les deux derniers bits du caractère. Ce faisant, nous aurions inséré les huit bits d'un caractère du message dans les trois octets codant un pixel.il faudra reconvertir ces nouveaux octets qui sont en binaire en décimal. Parce que le message est composé de plusieurs caractères et l'image plusieurs pixels cette règle sera appliquée pour toute l'image et le résultat sera copié dans un autre fichier qu'on pourra créer qui contiendra l'image envoyer en destination parce qu'il détient le message.

Certes que les trois octets que nous aurons à la sortie ne seront plus ceux que nous avions à l'entré parce que certains de leurs bits ont été changés. C'est pourquoi ces octets auront des valeurs approximatives que les premiers. Raison pour laquelle l'oeil humain ne sera pas à même de distinguer la différence inattendue des couleurs de la deuxième image.

Si au contraire nous avons une image qui contient un message que nous voulons lire il suffira de lire l'image et de copier pour chaque pixel les trois premiers bits de ses deux premiers octets et les deux derniers bits de son dernier octet. Ces bits qui seront copiés seront convertis en décimal avant d'être rétabli en alphanumérique pour donner des caractères tirés de l'image.

Nous sommes sure que notre travail répond aux attentes et au problématique que nous nous sommes fixé des le départ ; néanmoins chaque oeuvre humaine est susceptible de contenir des imperfections et des déficiences, nous disons bienvenus à vos remarques et suggestions.

Sachant que nous ne mettons pas un point final à la stéganographie, nous portons cette oeuvre à tous nos successeurs, chercheurs et étudiants qui pourront soit améliorer soit continuer à cacher les images dans les images ou le son dans le son.

BIBLIOGRAPHIE

I.OUVRAGES

1. KYENDA SULIKA Dieudonné, cours de LOGIQUE ET CONCEPTION DES PROGRAMMES G1 I.G. /ISP BUKAVU 2006, inédit.

2. Laura LEMAY et Rogers CADERNHEAD, Java 1.2 , la source d'or, 1998.

III. MEMOIRES ET TFC

1. NYONGOLO LUWAWA Martin, Extraction d'objets dans un milieu hétérogène, 2006.

IV. WEBOGRAPHIQUE

3. 1. http://www.fr.wikipedia.org, valide le 16 novembre 2008.

4. 2. http://www.en.wikipedia.org/wiki/Bitmap, valide le 16 novembre 2008.

5. 3. http://www.commentCamarche.net, valide le 16 novembre 2008.

TABLE DE MATIERES

PRELUDE 0

EPIGRAPHE II

DEDICACE III

REMERCIEMENTS IV

SIGLES ET ABREVIATIONS VI

RESUME VII

O. INTRODUCTION 1

CHAPITRE I : ETUDE DES IMAGES BITMAP 3

I.1 DEFINITION 1

I.2 DEFINITION ET RESOLUTION D'UNE IMAGE 4

1) la définition 4

2) la résolution 4

I.3 TAILLE ET FORMAT D'UNE IMAGES BITMAP 5

I.3.1 la taille d'une image en octet 5

I.3.2 Taille de l'image en pixels 6

I.3.3 Représentation des couleurs 6

1. Images 24 bits 7

2. Images à palettes, images en 256 couleurs (8 bits) 8

3. Images 32 bits 9

4. Images en teintes (ou niveaux) de gris 10

5. Images avec gestion de la translucidité 10

I.4 FORMAT D'IMAGES BITMAP 11

CHAPITRE II : LA STEGANOGRAPHIE PAR LES IMAGES 14

II.1 TRANSMISSION DES MESSAGES SECRETS DANS LE TEMPS 14

II.2 PROBLEME DE LA TRANSMISSION DES MESSAGES SECRETS A 15

TRAVERS UN RESEAU 15

II.3 DE LA CRYPTOGRAPHIE 15

II.4 LA STEGANOGRAPHIE 17

II.4.1 NOTION 17

II.4.2 TECHNIQUE DE LA STEGANOGRAPHIE 18

Chapitre III : L'ELABORATION D'UN ALGORITHME DE 21

MARQUAGE DE TEXTE AU SEIN D'UNE IMAGE 21

BITMAP 21

III.1 LE MESSAGE A CODER 21

III. 2 LECTURE DE L'IMAGE 22

III.3 CONVERSION DES NOMBRES DECIMAUX EN BINAIRES 24

III.5 INSERTION DES BITS DU MESSAGE EN VUE DU MARQUAGE 27

III.6 ECRITURE SUR L'IMAGE 28

III.7 EXTRACTION DU MESSAGE CACHE 29

CHAPITRE IV: SIMILATION DE LA STEGANOGRAPHIE 32

PAR UN LOGICIEL INFORMATIQUE 32

IV.1 PROPRIETE DU MESSAGE 32

IV.2 INFLUENCE DU MESSAGE SUR L'IMAGE 34

IV.3 APPLICATION DU PROGRAMME STEGANOGRAPHIQUE 36

IV.4 LA REGLES A METTRE EN PRATIQUE 40

IV.5 LA CONCATENATION DU MESSAGE 40

CONCLUSION 42

BIBLIOGRAPHIE 44

TABLE DE MATIERES 45

BIOGRAPHIE..........................................................................................47

BIOGRAPHIE

Richard ISHARA Kibasomba, né le 27 Juillet 1985 à Bukavu, est un Gestionnaire, Informaticien, concepteur programmeur, Electricien Congolais, il fit ses études maternelles, primaires et secondaire a l'institut d'Ibanda de Bukavu, ses études humanitaires techniques a l'Institut technique avenir et reçu son diplôme d'Etat en Electricité Industrielle en RD Congo.

Il fut ses études supérieurs a l'ISP/Bukavu et obtenu son diplôme de licencie en informatique de Gestion dans l'année académique 2009-2010.

* 1 http://www. fr.wikipedia.org valide, le 16 Novembre 2008.

* 2 http://www. fr.wikipedia.org valide, le 16 Novembre 2008

* 3 KYENDA SULIKA Dieudonné, cours de LOGIQUE ET CONCEPTION DES PROGRAMMES G1 I.G. /ISP BUKAVU 2006, inédit.

* 2 6 NYONGOLO LUWAWA Martin, Extraction d'objets dans un milieu hétérogène, 2006.

* 37 http://www. fr.wikipedia.org, valide le 16 Novembre 2008

* 8 http://www.commentCamarche.net, valide le 16 novembre 2008.88856323

22

6323288888






Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy








"Il faudrait pour le bonheur des états que les philosophes fussent roi ou que les rois fussent philosophes"   Platon