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

 > 

Intégration de protocoles de sécurité pour la communication inter-agents dans la plate-forme Aglets

( Télécharger le fichier original )
par Manel Sekma
Institut Supérieur d'Informatique et de Mathématiques de Monastir - Maitrise 2007
  

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

Table des matières

1
I

Introduction Générale

Etat de l'Art

7

9

2

Notions de base de Système multi agents

10

 

2.1

Introduction

10

 

2.2

Définitions générales

10

 
 

2.2.1 Agent

10

 
 

2.2.2 Agent stationnaire

11

 
 

2.2.3 Mobilité

11

 
 

2.2.4 Agent mobile

12

 

2.3

Agent stationnaire vs Agent mobile

12

 

2.4

Système multi agent

17

 
 

2.4.1 Définition

17

 
 

2.4.2 Caractéristiques principales

17

 
 

2.4.3 Les domaines d'application

18

 
 

2.4.4 Problématiques des SMA

18

 

2.5

Les plateformes

19

 
 

2.5.1 Agent TCl

19

 
 

2.5.2 Aglets

20

 
 

2.5.3 Concordia

20

 
 

2.5.4 Mole

20

 
 

2.5.5 Telescript

20

 
 

2.5.6 Odyssey

20

 
 

2.5.7 Voyager

21

 

2.6

Conclusion

21

3

4

Solution de sécurité des agents Mobiles

3.1 Introduction

3.2 La nécessité de la sécurité des agents mobiles

3.2.1 La confidentialité

3.2.2 L'authentification

3.2.3 L'intégrité

3.2.4 La disponibilité

3.2.5 La non répudiation

3.2.6 Le contrôle d'accès

3.2.7 Le secret du flux

3.2.8 Le confinement

3.3 Les politiques de sécurité

3.3.1 Définition

3.3.2 Les approches de sécurisation des agents mobiles

3.4 Les cas de sécurisation

3.4.1 Sécurité entre deux agents

3.4.2 Sécurité des agents contre les hôtes

3.4.3 Sécurité de l'hôte contre les agents

3.4.4 Sécurité des agents contre intervenant externe

3.4.5 La sécurité pendant le transfert d'un agent

3.5 Conclusion

La plateforme Aglets

4.1 Introduction

4.2 Aglets

4.2.1 Définitions

4.2.2 Cycle de vie d'un aglet

4.2.3 La création de l'aglet

4.2.4 Le modèle événementiel de l'aglet

4.2.5 Communication des aglets

4.2.6 Les Serveurs d'aglets

4.3 Conclusion

22

22

22

23

23

23

23

23

24

24

24

24

24

25

30

31

32

33

33

34

34

36 36 36 36 38

40

41

42

43

44

II

5

Spécification et réalisation Communication inter Aglets

45

46

 

5.1

Introduction

46

 

5.2

Types de communication

46

 
 

5.2.1 Communication simple

47

 
 

5.2.2 Communication synchrone

47

 
 

5.2.3 Communication asynchrone

48

 

5.3

Protection de la communication

49

 
 

5.3.1 Approches de protection

49

 
 

5.3.2 Contrôle d'intégrité

55

 

5.4

Les failles dans Aglets au niveau de la communication entre les agents

56

 
 

5.4.1 La confidentialité

57

 
 

5.4.2 L'authentification et L'intégrité

58

 
 

5.4.3 La disponibilité

59

 

5.5

Conclusion

60

6

Spécification de domaine

61

 

6.1

Introduction

61

 

6.2

Environnement de travail

61

 
 

6.2.1 Langage de programmation : Java

61

 
 

6.2.2 Environnement Matériel

61

 
 

6.2.3 Environnement Logiciel

62

 

6.3

Configuration du serveur Tahiti

63

 
 

6.3.1 Installation de la plateforme

63

 

6.4

Le diagramme des cas d'utilisation de Tahiti

65

 
 

6.4.1 Description du système

65

 

6.5

Conclusion

66

7

Conception et réalisation

67

 

7.1

Introduction

67

 

7.2

Spécification de la solution

67

 
 

7.2.1 Etapes de travail

67

 
 

7.2.2 Description de la solution

68

 

7.3

Conception de la solution

70

 
 

7.3.1 Diagramme de classes

70

7.3.2 Diagramme de cas d'utilisation 71

7.3.3 Diagramme de séquence 72

7.4 Implémentation de la solution 73

7.4.1 Cryptage/Décryptage 73

7.4.2 Contrôle d'intégrité 75

7.4.3 Assurer l'authentification 76

7.5 Conclusion 77

8 Conclusion générale 78

A Annexes 82

Table des figures

Scientific WorkPlace 5.0 10

11 INteration ....11

1.2hjytyjuu ....3

1.3Essai 4

1.1 Interaction à travers le réseau 12

1.2 Migration (phase 1) 12

1.3 Migration (phase 2) 13

1.4 Migration (phase 3) 13

1.5 Migration (phase 4) 14

1.6 Migration (phase 5) 14

1.7 Graphique1 : Agents statiques vs. agents mobiles (a = 5000) 15

1.8 Graphique 2 : Agents statiques vs. agents mobiles (a = 25000) 15

2.1 Sécurisation à base de cartes à puces 25

2.2 Génération de variables à noms non significatifs 26

2.3 sécurité entre deux agents 30

2.3 sécurité entre deux agents 32

2.4 Sécurité des agents contre les hôtes 33

3.1 Relation entre un aglet et son Proxy 36

3. 2 Évolution des Aglets dans un Contexte 37

3.3 Relations entre hôte, moteur et contexte 37

3.4 Modèle du cycle de vie d'un aglet 38

3.5 Transfert d'un aglet 39

3.6 Diagramme de Collaboration pour la création de l'Aglet 40

4.1 L'environnement Aglet 46

4.2 Communications synchrones 47

4.3 Communications Asynchrones 47

4.4 Système de cryptographie symétrique 50

4.5 Système de cryptographie asymétrique 52

4.6 Principe de fonctionnement de l'algorithme RSA 53

4.7 Résultat d'une capture de trafic par le sniffer(1) 55

4.8 Résultat d'une capture de trafic par le sniffer (2) 56

4.9 Faille au niveau de la disponibilité 57

5.1 IRISv4.06.4 59

5.2 Phase d'identification/authentification 61

5.3 Serveur Tahiti 61

5.4 Diagramme des cas d'utilisation du serveur Tahiti 62

6.1 Etapes de travail 65

6.2 Cryptage/Décryptage 66

6.3 Compression/Décompression 66

6.4 Diagramme de la solution 67

6.5 Diagramme de classes 68

6.6 Diagramme de cas d'utilisation 69

6.7 Diagramme de séquence 70

6.8 Processus de l'agent de cryptage A 71

6.9 Processus de l'agent de décryptage B 72

Chapitre 1

Introduction Générale

Suite à l'évolution technologique, l'utilisation de l'outil informatique s'avère de plus en plus nécessaire dans tous les domaines. Pour cela, les sociétés publiques cherchent à améliorer la qualité de leurs services en introduisant cet outil dans leurs processus de fonctionnement et de traitement de données. Le domaine de la médecine comme la plupart des domaines, exploite l'informatique pour le développement des logiciels de traitement d'informations qui facilitent aux médecins entre autres, le travail en groupe, mais les échanges des données et la répartition des tâches d'une application distribuée nécessites l'interaction entre différentes entités à travers le réseau.

Pour ces raisons les dirigeants s'orientent vers l'implémentation des agents mobiles dans les systèmes informatiques qui donnent à leurs entreprises un avantage face aux besoins accrus.

Aujourd'hui, la technologie "agent mobile" est de plus en plus attractive vu les avantages qu'elle offre pour la réalisation des tâches complexes et répétitives dans des systèmes ouverts et dynamiques. Cette approche a un grand intérêt pour la mise en oeuvre d'applications dont les performances varient en fonction de la disponibilité, de la qualité des services et des ressources et du volume des données déplacées. Elle permet aux concepteurs et aux développeurs de systèmes distribués d'utiliser des approches informatiques autonomes non seulement au niveau de leurs comportements, mais aussi dans l'espace et dans le temps.

Les particularités des agents mobiles liées à la mobilité sont, sans être exhaustif : leur
création (locale ou à distance), leur migration (forte/faible), leur aptitude à accéder à des
ressources locales, leurs traces et enfin le plus important le mode de communication entre eux.
Le modèle à agents mobiles en particulier la plateforme Aglets, qui représente le cadre
général de notre projet, étant un domaine récent de recherche, des travaux y ont été effectués
dans le but d'avoir un système qui emploie des agents mobiles coopératifs afin d'améliorer la
qualité de service. Par la suite, les chercheurs ont trouvé que la communication inter agents

pose des limitations surtout dans le cas où on cherche à implémenter les propriétés de sécurité dans le système. Pour cette raison, ce type d'applications devient de moins en moins adopté par des domaines qui nécessitent la confidentialité des données tel que le domaine médical.

Comment doit-on alors intégrer des protocoles de sécurité pour la communication inter agents dans la plate-forme Aglets pour rendre ce type d'applications adaptable en particulier au domaine médical?

Afin de résoudre les problèmes relatifs à la sécurité des agents mobiles Aglets, nous avons adopté une méthodologie de recherche basé sur une études bibliographique des Systèmes multi agents, dont le résultat est porté dans le chapitre1, l'étude des solutions existantes de sécurité des agents Mobiles dans le chapitre 2 et enfin une étude sur la plateforme Aglets porté dans le 3ieme chapitre.

En second lieu les chapitres 4,5 et 6 Concerneront le cas pratique où on met en pratique notre solution apportée au problème de sécurité des agents mobiles.

Première partie

Etat de l'Art

Chapitre 2

Notions de base de Système multi

agents

2.1 Introduction

L'informatique devient de plus en plus diffusée et distribuée. La décentralisation et la coopération entre modules logiciels sont donc des besoins pour améliorer la qualité de service d'un système. De plus, avec la croissance de la taille et de la complexité des nouvelles applications informatiques, la vision centralisée et assez statique atteint ses limites. On est ainsi naturellement conduit à chercher une façon de donner plus d'autonomie et d'initiative aux différents modules logiciels. Le concept des systèmes multi agents (SMA) propose un cadre de réponse à ces enjeux.

A partir de 1995, le monde des agents a été enrichi d'un nouveau type : l'agent mobile. Un agent mobile est un agent capable de se déplacer d'un site physique à un autre. Dès sa naissance, le concept n'a pas arrêté de susciter l'intérêt des chercheurs et des ingénieurs. Nous pouvons dire que les agents mobiles jouent déjà un rôle crucial et le joueront dans l'avenir de l'Internet et de l'informatique en général.

Dans ce chapitre, nous allons citer quelques définitions générales qui présentent les notions de base de ce domaine, une petite étude comparative entre agent stationnaire et agent mobile ainsi qu'une étude sur les Système multi Agents et on finit par les différentes plateformes existantes.

2.2 Définitions générales

2.2.1 Agent

Définition 1

Un agent est une entité autonome, réelle ou abstraite, qui est capable d'agir sur elle-même et sur son environnement, qui, dans un univers multi agent, peut communiquer avec d'autres agents, et dont le comportement est la conséquence de ses observations, de ses connaissances et de ses interactions avec les autres agents.

Définition 2

Un agent est un système informatique, situé dans un environnement, et qui agit d'une façon autonome et flexible pour atteindre les objectifs pour lesquels il a été conçu.

- situé : l'agent est capable d'agir sur son environnement à partir des entrées qu'il reçoit de ce même environnement (systèmes de contrôle de processus, systèmes embarqués, etc.);

- autonome : l'agent est capable d'agir sans l'intervention d'un tiers (humain ou agent) et contrôle ses propres actions ainsi que son état interne,

- flexible : l'agent dans ce cas est :

· capable de répondre à temps: l'agent doit être capable de percevoir son environnement et d'élaborer une réponse dans les temps requis,

· proactif: l'agent doit exhiber un comportement proactif et opportuniste, tout en étant capable de prendre l'initiative au bon moment,

· social: l'agent doit être capable d'interagir avec les autres agents (logiciels et humains) quand la situation l'exige afin d'accomplir ses tâches.

2.2.2 Agent stationnaire

Un agent stationnaire ou statique est un agent mobile qui n'exécute en général qu'une seule migration. Cette migration s'effectue depuis la station de départ vers un noeud bien défini au lancement. A l'arrivée sur le noeud, l'agent mobile ne migre plus mais exécute une tâche prédéfinie.

Il peut s'agir d'un calcul de longue durée (par exemple vérifier périodiquement le nombre de requêtes exécutées sur une base de données), de la supervision de l'interface réseau, de la supervision de l'espace disque du système hôte.

Une autre utilisation d'un agent stationnaire serait de fournir une ou plusieurs listes d'éléments qui correspondraient à des itinéraires pour les agents mobiles de la plateforme.

2.2.3 Mobilité

La mobilité se manifeste par la faculté de se déplacer dans un environnement. On distingue quatre éléments informatiques différents relatifs à la mobilité : les données, le code, les objets, et les agents. Dans un système informatique composé de plusieurs ordinateurs, ces éléments peuvent être statiques ou mobiles. Donc, nous pouvons identifier huit types différents. Le tableau

ci dessous montre des exemples de tous ces types.

Eléments informatiques, statiques et mobiles.

Il existe une vaste littérature dédiée aux éléments du tableau, même aux éléments mobiles seuls. Mais, dans le cadre de notre mémoire, nous nous concentrons sur les agents mobiles dont l'exemple est mis en gras dans le tableau.

2.2.4 Agent mobile

Les agents mobiles sont des entités logicielles autonomes qui peuvent suspendre leur exécution sur une machine et migrer avec leur code, variables et état vers une autre machine où ils reprennent leur exécution.

Caractéristiques des agents mobiles

Les principales caractéristiques d'un agent mobile sont :

Réduction de la charge Réseau : Il est généralement plus avantageux, en terme des performances, de faire voyager du code plutôt que des informations puisque le premier est moins volumineux et offre la possibilité de poursuivre l'exécution dans d'autres cites.

- Déplacer le Code vers les données: Les serveurs contenants des données procurent un ensemble fixe d'opérations. Un agent peut étendre cet ensemble pour les besoins particuliers d'un traitement.

- Plus sûr et meilleure tolérance : La vie d'un programme classique est liée à la machine ou il s'exécute. Un agent mobile peut se déplacer pour éviter une erreur matérielle ou logicielle ou tout simplement un arrêt de la machine.

2.3 Agent stationnaire vs Agent mobile

Notons bien que l'agent stationnaire s'exécute seulement sur la machine où il est créé. Si jamais il a besoin d'informations supplémentaires inexistantes localement ou d'interagir avec

d'autres agents dans différents systèmes, alors il utilise typiquement le mécanisme RPC (Remote Procedure Calling) qui est une méthode appliquée dans le modèle client serveur.

Par contre, Un agent mobile est un processus autonome contenant du code et des données, capables de se déplacer d'une machine à une autre afin de réaliser une tâche précise. Ce code représente l'ensemble des instructions du programme, et les données sont constituées soit du véritable contexte d'exécution du programme, soit de variables émulant ce contexte. Un contexte d'exécution est composé de la pile de récursivité, du tas et des registres. Ce contexte évolue au cours de la vie de l'agent.

Le choix d'employer des agents stationnaires ou mobiles dans un système, dépend non seulement de la nature technique et conceptuelle de l'agent mais aussi du contexte où il est prévu d'être employé.

Dans le cas d'un système à agents stationnaires, on se pose qu'un agent veut accéder à une base de données distante, dans ce cas l'interaction avec la base se fait à travers le réseau comme il est indiqué dans la figure 1.1.

Utilisateur A

Site A

Agent A

Site B

BD

Figure 1.1 : Interaction à travers le réseau.

Autrement, dans le cas des agents mobiles, supposons que l'utilisateur A veuille récupérer des informations sur un certain sujet. En interagissant avec son agent personnel, la requête est formellement spécifiée. Ceci est illustré par la figure1.2.

Site A

Utilisateur A

Agent A

Site B

BD

Figure 1.2 Migration (phase 1).

Puis, comme le montre la figure 1.3, l'agent migre du site A au site B sur laquelle se trouve une base de données contenant les informations recherchées.

Site A

Site B

Utilisateur A

Agent A

Agent A

BD

Figure 1.3 Migration (phase 2).

Ensuite, La figure1.4 montre l'agent interagissant avec la base de données du site distant pour récupérer les données recherchées.

Figure 1.4 Migration (phase 3).

Utilisateur A

Site A

Agent A

Site B

BD

Puis, une fois l'agent satisfait, il retourne vers le site d'origine. Ceci est illustré par la figure1.5.

Utilisateur A

Site A

Agent A

Agent A

Site B

BD

Figure 1.5 Migration (phase 4).

Finalement, comme le montre la figure1.6, l'agent rapporte - d'une manière interactive - les résultats à son utilisateur.

Site A

Utilisateur A

Agent A

Site B

BD

Figure 1.6 Migration (phase 5).

Dans le plus part des applications, les systèmes à agents mobiles semblent être plus efficaces que les systèmes classiques à agents stationnaires, car dans un système informatique, les interactions intra-site sont moins coûteuses que les interactions inter-sites, mais ceci n'est pas toujours vrai, car on peut avoir une négociation entre agents statiques et même entre agents mobiles dans un système et aussi lorsque il s'agit du coût de migration, etc.

Prenons un exemple explicatif sur les deux approches à agents mobiles et à agents statiques.

Dans la première phase de l'approche « agents mobiles » de cet exemple, l'utilisateur et l'agent établissent la requête. Supposons qu'elle ait une taille de r octets. Puis l'agent migre vers le site B. Supposons que la taille de l'agent soit fixe à a octets. L'agent interagit avec la base de données dont la taille est de b octets. Finalement, l'agent rentre pour communiquer la solution composée de s octets. Donc, la quantité totale de données transférées entre les sites différents est (a + r) + (a + s) octets. Notons qu'il n'est pas toujours nécessaire qu'un agent retourne chez son utilisateur et que - souvent - il suffit qu'il envoie le résultat. Toutefois, en général, on suppose que l'agent rentre.

Par contre dans l'approche classique de cet exemple, utilisant un agent statique, la quantité totale de données transférées peut monter jusqu'à r + b octets. En effet, dans le pire des cas, on demande le transfert de la base complète et on la traite localement.

Comparons les deux approches, en supposant que r est négligeable. Le graphique 1 (Figure 1.7) montre le nombre d'octets transférés, dans les deux approches, pour b = 100000, a = 5000

et s / b entre 0et 1. Le graphique 2 visualise la même relation, mais pour a = 25000 (Figure 1.8).

Figure 1.7 Graphique1 : Agents statiques vs. agents mobiles (a = 5000)

Figure 1.8 Graphique 2 : Agents statiques vs. agents mobiles (a = 25000).

Donc, et comme le montrent les deux graphiques, l'application des agents mobiles n'est pas toujours avantageuse. Surtout lorsque les tailles des agents et des solutions (relatives à la base de données) sont grandes, l'approche classique est préférable. Cependant, en général, la taille des agents et le ratio s / b sont modestes, et la mobilité prometteuse.

Par contre, ce raisonnement n'est valide que si la requête ne peut pas être formulée d'une

telle manière qu'elle peut être traitée directement pas le système de gestion de la base de données. Dans ce cas, il suffit d'envoyer la requête et de recevoir la solution sans impliquer des agents. Cette solution est toujours la plus économique car seulement r + s octets doivent être transférés. Donc, cette application très étudiée des agents mobiles n'apporte aucun avantage si les requêtes peuvent être normalisées pour les bases de données impliquées. Ceci est sans doute une des raisons principales pour laquelle les agents mobiles ne sont pas encore utilisés à une échelle importante ainsi que les agents statiques sont encore employés par les développeurs dans ce domaine.

Toutefois, dans un monde informatique de plus en plus sophistiqué et personnalisé, nous pouvons nous attendre à une croissance importante de requête non standard. De plus, il est possible que certains utilisateurs préféreront envoyer leurs agents personnels plutôt que faire confiance au système de gestion distant, en estimant - par exemple - que leurs agents sont plus fiables.

Pour cette raison, les chercheurs sont dirigés vers le développement des applications en intervenant des agents coopératifs stationnaires et mobiles, dont leurs tâches sont définies après avoir calculé les performances en fonction des besoins de l'application.

2.4 Système multi agent

2.4.1 Définition

Un système multi agent est un système logiciel distribué, composé d'un ensemble d'entités (de programmes) relativement indépendantes des agents dont chacun est dotés de son propre thread, de buts propres à remplir, et de moyens pour communiquer et pour négocier avec les autres afin d'accomplir leurs buts.

Les SMA sont conçus et implantés idéalement comme un ensemble d'agents interagissant selon les modes de coopération, de concurrence ou de coexistence

Les SMA peuvent être vus comme la rencontre de divers domaines :

· L'intelligence artificielle pour les aspects prise de décision de l'agent,

· L'intelligence artificielle distribuée pour la distribution de l'exécution,

· Les systèmes distribués pour les interactions,

· Le génie logiciel pour l'approche agents et l'évolution vers des composants logiciels de plus en plus autonomes.

2.4.2 Caractéristiques principales

Un SMA est généralement caractérisé ainsi :


· Chaque agent dispose d'informations ou de capacités de résolution de problèmes limités

(ainsi, chaque agent a un point de vue partiel),

· Il n'y a aucun contrôle global du système multi agent,

· Les données sont décentralisées,

· Le calcul est asynchrone.

2.4.3 Les domaines d'application

On distingue généralement trois types d'utilisation :

· La simulation des phénomènes complexes,

· La résolution de problèmes,

· la conception des programmes.

On utilise les systèmes multi agents pour simuler des interactions existantes entre agents autonomes. On cherche à déterminer l'évolution de ce système afin de prévoir l'organisation qui en résulte.

Notons bien que l'intelligence artificielle distribuée est née pour résoudre les problèmes de complexité des gros programmes monolithiques de l'intelligence artificielle : l'exécution est alors distribuée, mais le contrôle reste centralisé. Au contraire, dans les SMA, chaque agent possède un contrôle total sur son comportement. Pour résoudre un problème complexe, il est en effet parfois plus simple de concevoir des programmes relativement petits (les agents) en interaction qu'un seul gros programme monolithique. L'autonomie permet au système de s'adapter dynamiquement aux changements imprévus qui interviennent dans l'environnement. En même temps, le génie logiciel a évolué vers des composants de plus en plus autonomes. Les SMA peuvent être vus comme la rencontre du génie logiciel et de l'intelligence artificielle distribuée, avec un apport très important des systèmes distribués. Par rapport à un objet, un agent peut prendre des initiatives, peut refuser d'obéir à une requête, peut se déplacer, etc. Aussi l'autonomie permet au concepteur de se concentrer sur une partie humainement appréhendable du logiciel.

2.4.4 Problématiques des SMA

Les développeurs dans ce domaine peuvent relever cinq problématiques principales lors de la création des systèmes multi agents (SMA).

· D'abord, la problématique de l'action: comment un ensemble d'agents peut agir de manière simultanée dans un environnement partagé, et comment cet environnement interagit en retour avec les agents? Les questions sous-jacentes sont entre autres celles de la représentation de l'environnement par les agents, de la collaboration entre agent et de la planification multi agent.


· Ensuite la problématique de l'agent et de sa relation avec le système, qui est représentée

par le modèle cognitif dont dispose l'agent. Un agent dans un SMA doit être capable de mettre en oeuvre les actions qui répondent au mieux à ses objectifs. Cette capacité à la décision est liée à l'état et au comportement de l'agent.

· Les systèmes multi agents passent aussi par l'étude de la nature des interactions, comme source de possibilités d'une part et de contraintes d'autre part. La problématique de l'interaction s'intéresse aux moyens de l'interaction (quel langage? quel support ?), et à l'analyse et la conception des formes d'interactions entre agents. Les notions de collaboration et coopération sont ici centrales.

· On peut évoquer ensuite la problématique de l'adaptation en terme d'adaptation individuelle ou apprentissage d'une part et d'adaptation collective ou évolution d'autre part.

· Enfin, il reste la question de la réalisation effective et de l'implémentation des SMA, en structurant notamment les langages de programmation en plusieurs types allant du langage de formalisation et de spécification, au langage d'implémentation effective. Entre les deux, on retrouve le langage de communication entre agents, de description des lois de l'environnement et de représentation des connaissances.

2.5 Les plateformes

Plusieurs systèmes, commerciaux et autres, supportant la mobilité sont actuellement disponibles. Il existe des plateformes d'agents mobiles basées sur java, pour lesquelles il n'y a pas de problèmes de portabilité d'un système d'exploitation à l'autre, et des plateformes d'agent mobile qui ne sont pas basées sur java et qui peuvent donc poser des problèmes de portabilité. Dans cette section, nous en présentons -brièvement- les plates formes les plus répandues et les plus importantes.

2.5.1 Agent TC1

Un des premiers systèmes supportant les agents mobiles a été développé par Robert Gray, David Kotz et d'autres. A l'origine, le système n'avait pas de nom et utilisait TCP/IP, le courrier électronique et la commande UNIX « rsh » comme mécanismes de transfert. Plus tard, la même équipe a introduit « Agent Tcl », un système utilisant Tcl comme langage principal de programmation des agents.

Toutefois, à la base, le système supporte plusieurs langages, à savoir Tcl, Java et Scheme, et récemment le système a été rebaptisé « D'Agents ». Notons qu'Agent TCL est un des seuls systèmes actuels n'étant pas basé directement sur Java.

2.5.2 Aglets

Le « Aglet Workbench » d'IBM est sans doute un des systèmes les plus connus. Danny Lange, un des pionniers de la communauté, était à la base de son développement au Japon. Le système est facile à charger du Web et à installer sur tout système supportant Java. Il est assez fiable, mais la documentation en ligne n'est pas d'une qualité commerciale.

2.5.3 Concordia

Concordia est également un système basé sur Java, mais développé par le Horizon Systems Laboratory de Mitsubishi. C'est un système récent, orienté vers des applications au niveau des entreprises. Par conséquent, la sécurité du système est exceptionnellement soignée.

2.5.4 Mole

Ce système a été développé dans l'Institute of Parallel and Distributed High-Performance Systems à l'Université de Stuttgart comme il a été publié sur le web.

2.5.5 Telescript

Telescript, développé par General Magic, peut être considéré comme la référence dans le domaine.Il est parlant que son inventeur, Jim White, tient un brevet sur la notion même d'agents mobiles. Telescript était un des seuls systèmes supportant le transfert de l'état d'exécution des agents.

Toutefois, le système, conçu pour une application industrielle, exigeait des ressources importantes, était plutôt cher (5000 USD par moteur), et offrait une fonctionnalité pas encore demandée par le marché. Par conséquent, le système n'existe plus et sa valeur est surtout historique.

2.5.6 Odyssey

Le successeur de Telescript, développé également par General Magic, s'appelle Odyssey. Différent du premier, ce dernier est basé sur Java. Il est largement inspiré par Telescript, mais n'à pas exactement la même fonctionnalité. Par exemple, Odyssey ne supporte pas le transfert de l'état d'exécution. Le système n'a toujours pas dépassé la version bêta, et ne joue visiblement pas le rôle important que jouait Telescript dans la stratégie de General Magic.

2.5.7 Voyager

Voyager est un produit commercial proposé par ObjectSpace. Il s'agit d'un système « branché » incorporant plusieurs normes industrielles populaires à l'heure actuelle, notamment CORBA, DCOM et Distributed JavaBeans. Différent des autres systèmes, il ne s'agit pas d'un système dédié uniquement aux agents mobiles : toute sorte de développement distribué est supporté. Dans leur documentation, cependant, le concept d'agent mobile est explicitement présenté. Puisqu'il s'agit d'un système bien soigné, d'une nature générale, et compatible avec les normes existantes, sa popularité est croissante.

Après avoir citer les principales caractéristiques des différentes plateformes on peut juger que Aglets intègre les fonctionnalités nécessaires au développement aisé d'agent mobiles .La plateforme Aglets est complètement libre, ce qui est intéressant pour avoir accès au code source et pour utiliser les applications développées sans contraintes ce qui n'est pas le cas pour certaines plateformes qui ne sont libres que pour usage non commercial tel que Odyssey et voyager.

2.6 Conclusion

Le développement d'une application sur un environnement ouvert distribué comme l'Inter- net nécessite l'intégration des utilisateurs et de programmes qui travaillent en coopération, qui sont: le paradigme d'agents et de systèmes multi agents et en intégrant la technologie d'agents mobiles. Ces derniers peuvent être implémentés dans plusieurs domaines mais avec une conception et comportement différents, définis selon la plateforme utilisée et en fonction des besoins du système.

Parmi les plateformes existantes, Aglets, qui est le cadre de notre travail, offre une très grande simplicité d'implémentation ce qui constitue un avantage certain par rapport aux autres systèmes.

Chapitre 3

Solution de sécurité des agents

Mobiles

3.1 Introduction

Avec l'augmentation de l'utilisation des applications basées sur le réseau, dans le monde entier, tel que le partage des ressources et des informations, beaucoup de nouvelles procédures et systèmes ont été développés pour augmenter la performance et éviter la surcharge du réseau. Ces systèmes informatiques qui tendent à être de plus en plus ouverts et distribués, découvrent par la même occasion qu'ils sont de plus en plus susceptibles d'être la cible de dérèglements divers, tels que : les congestions, les accès malveillants et les attaques. A cet effet, il devient inéluctable de munir ces systèmes d'outils et de mécanismes capables d'inhiber ces dérèglements.

Par la suite, l'introduction d'agents dans ces systèmes a apporté beaucoup d'accomplissements réussis à cause de leurs caractéristiques spéciales, ainsi que beaucoup de langages à base d'Agent ont apporté ces caractéristiques dans l'implémentation. Là, ont été observés peu d'inconvénients quand les éditions de sécurité étaient exécutées.

Dans ce chapitre, nous allons parler de la nécessité de la sécurité des agents mobiles, de certaines politiques de sécurité ainsi que des différents cas de sécurisation des agents mobiles.

3.2 La nécessité de la sécurité des agents mobiles

Les agents mobiles migrent d'un hôte à un autre et peuvent être exécutés sur chacun d'entre eux. Un problème de sécurité qui se pose est que ni l'agent ni les hôtes ne sont nécessairement fidèles; l'agent pourrait essayer de faire du mal à l'hôte, les machines pourraient essayer de faire du mal à l'agent ou accéder à ses renseignements privés et ressources. La machine ou l'agent

peuvent être méchants ou mal programmés. Pourtant, cette distinction n'est pas le problème principal parce que l'effet final peut être le même. La sécurité est peut-être l'édition la plus critique dans un système d'agents.

La sécurité des agents mobiles tente de maintenir les caractéristiques principales suivantes :

3.2.1 La confidentialité

Assurer la confidentialité des données, consiste à faire en sorte que les informations restent secrètes et que seules les personnes autorisées y aient accès.

3.2.2 L'authentification

Assurer l'authentification dans le système, consiste à prouver que l'identité des différentes entités doit pouvoir être vérifiée, et que les informations reçues sont conformes à celles fournies, il faut ensuite assurer que les deux entités communicantes sont bien ce qu'elles affirment être. De plus, le service d'authentification doit montrer que la connexion ne peut être brouillée par une troisième entité essayant de se faire passer pour un des deux correspondants.

3.2.3 L'intégrité

L'intégrité permet d'éviter la corruption, l'altération et la destruction des données dans le réseau de manière non autorisée, elle reste un domaine très large couvrant à la fois les modifications, les moyens de modification mais également la cohérence des données après la modification.

3.2.4 La disponibilité

Consiste à assurer une disponibilité continue des informations, des services et des ressources dans le réseau (les temps de réponse, la tolérance aux fautes, le contrôle de concurrence, le partage équitable de ressources, etc.). D'une autre façon, c'est prévenir contre les perturbations et les interruptions de son fonctionnement et aussi contre toute utilisation abusive des services et des ressources du système.

3.2.5 La non répudiation

Consiste à assurer que lorsqu'une information est transmise entre deux entités, l'émetteur ne doit pas pouvoir nier avoir envoyé l'information, et le destinataire l'avoir reçue. Chaque partie possède ainsi la preuve de l'existence de la transaction.

3.2.6 Le contrôle d'accès

L'accès à certaines ressources (informations ou services) doit être restreint à des entités autorisées.

Lorsqu'une entité souhaite effectuer une opération sur un objet, le système transforme l'opération en une requête qu'il fait passer au moniteur de référence. Ce dernier est responsable du contrôle d'accès aux ressources. Si l'entité est autorisée à accéder à l'objet et à réaliser le type d'opération demandé alors l'accès à l'objet est accordé et l'opération peut se dérouler sans aucune ambiguïté. Dans le cas contraire, il retournera un refus catégorique à l'utilisateur. Les buts du contrôle d'accès rejoignent ceux de la disponibilité.

3.2.7 Le secret du flux

L'intérêt est d'empêcher tout utilisateur non autorisé d'avoir la possibilité d'analyser les flux des données à travers le réseau. Tout accès illégal, même en lecture, à un flux de données permet à l'utilisateur de déduire des informations utiles et qui peuvent, ultérieurement, servir ses intentions malveillantes. La taille des messages échangés, leurs sources et leurs destinations, ainsi que la fréquence des communications entre les utilisateurs sont des exemples de données à préserver pour prévenir le secret des flux dans le réseau et le rendre plus sûr.

3.2.8 Le confinement

Le principe de confinement est complémentaire à la confidentialité, s'inscrivant dans le même but du bon usage des informations.

Le confinement garantit qu'un sujet n'arrive pas à divulguer volontairement le contenu des objets auxquels il a accès à quelqu'un qui n'a pas le droit d'y accéder.

3.3 Les politiques de sécurité

3.3.1 Définition

"La politique de sécurité d'un système est l'ensemble des lois, règles et pratiques qui régissent la façon dont l'information sensible et les autres ressources sont gérées, protégées et distribuées à l'intérieur d'un système spécifique" [Com91].

La politique de sécurité décrit les objectifs de la sécurité du système et identifie les menaces auxquelles le système devra faire face.

Il est d'abord utile de faire la distinction entre politique et mécanisme de sécurité. Les politiques de sécurité définissent les autorités et les ressources, spécifient les droits et les règles

d'usage. Les mécanismes de sécurité sont des moyens pour la mise en oeuvre d'une politique de sécurité.

Donc, le terme "politique de sécurité" est associé à l'ensemble des propriétés de sécurité que l'on désire appliquer et déployer dans un système ainsi que les dispositifs pour les assurer. Les approches de sécurisation des agents mobiles sont multiples. Ces dernières peuvent être classées, suivant le moyen de sécurisation, en sécurité basée sur le matériel et sécurité basée sur le logiciel.

3.3.2 Les approches de sécurisation des agents mobiles

Sécurité basée sur le matériel :

Lorsqu'il s'agit d'une sécurité basée sur le matériel, il est nécessaire d'avoir un outil matériel. Ce dernier doit être testé par le système avant et pendant l'exécution. Certaines applications réseaux, en particulier Internet, implémentent cette approche pour la sécurisation de leurs logiciels contre le piratage.

a- Sécurisation à base d'un environnement d'exécution de confiance: Cette méthode de sécurisation consiste à utiliser un périphérique (coprocesseur) assurant l'exécution de l'agent, ce dernier s'exécute exclusivement à l'intérieur de ce périphérique et ne dialogue avec le site visité qu'à travers une interface sécurisée [Wil98]. Cette approche a été proposée par Wilhelm [Wil98] et elle est basée sur ce qu'il appelle « environnement d'exécution de confiance TPE » (Trusted Processing Envirenment). Le périphérique TPE est fabriqué sous le contrôle d'une autorité de confiance et dispose d'un certificat et d'une politique de sécurité. Dans cette approche les agents sont cryptés par la machine de leur propriétaire et ne seront plus exécutés par le site visité mais par le périphérique TPE. Ainsi les agents resteront cryptés tout au long de leurs chemins de migration et sur chaque site visité. Quand ils arrivent à leurs sites de destinations ils sont encore cryptés et accèderont au périphérique TPE où ils seront décryptés puis exécutés [Wil98].

Une telle approche présente une solution très puissante pour sécuriser les agents sur site d'exécution ainsi qu'à travers le réseau. Toutefois, le périphérique TPE n'est pas facile à fabriquer ce qui explique son coût élevé. De plus l'environnement d'exécution de confiance TPE ne présente pas les performances d'un ordinateur, ce qui réduit l'efficacité d'exécution de l'agent. De plus le problème d'exécution de plusieurs agents en parallèle reste posé.

b- Sécurisation à base de cartes à puces : Cette solution est proposée pour la première fois par Mana [Man02]

L'idée de Mana consiste à subdiviser le code de l'agent en sections dont certaines seront cryptées par la clé publique d'une carte à puces. Ces dernières seront remplacées par des appels

procéduraux vers la carte. Sur site d'exécution, on transmet à la carte comme arguments les sections cryptées qui seront décryptées puis exécutées à l'intérieur de cette dernière (Figure2. 1). La paire de clés est générée à l'intérieur de la carte à puce, la clé publique sera publiée tandis que la clé secrète résidera exclusivement à l'intérieur de la carte et ne sera jamais révélée [ManO2].

Code de l'agent

S1

S2 Crypté
S3

S4 Crypté

S5

S6

Clé publique, clé secrète

Appel

Subdivision du code

Cryptage

S1

S2

S3

S4

S5

S6

Carte à puces

Figure 2.1 Sécurisation à base de cartes à puces

De cette façon, on assure la confidentialité du code et on évite l'exécution de la totalité de l'agent sur le périphérique de sécurisation.

Sécurisation basée sur le logiciel

Dans ce type d'approches, on cherche à sécuriser les agents de façon purement logicielle ce qui réduit le coût de la sécurité et facilite sa maintenance.

Parmi les solutions de sécurisation on cite :

a- Obscurcissement : Cette approche qui est proposée par Fritz Hohl [Hoh97], consiste à produire à partir d'un agent A, un autre agent B analogue au premier dans ses fonctionnalités mais ayant un code difficile à analyser, ce code peut être assuré par le fait d'introduire un désordre au niveau du code de l'agent.

Pour cela on peut dire que cette approche présente une solution de sécurisation de l'agent par son propre code.

Hohl propose la violation totale des règles nécessaires pour avoir un code non lisible. On peut citer par exemple les règles suivantes :

- Ecrire un code modulaire.

- Attribuer des noms significatifs aux variables.

- Utiliser des structures de contrôle qui simplifient le programme.

Ces règles seront respectées au niveau de l'agent source A et pour passer à l'agent sécurisé B, tout d'abord on crée à partir des variables originelles de nouvelles variables ayant des noms non significatifs et un nombre différent. Comme indiqué dans la figure2.2, chaque nouvelle variable est composée de fragments de quelques variables originelles.

Variables originelles

Nouvelles variables ayant des noms non significatifs

Figure 2.2 Génération de variables à noms non significatifs.

Après l'étape de génération des variables, on procède à la déstructuration du code. Pour cela on élimine les variables locales et on les remplace par des variables globales, on remplace l'appel procédural par le corps des procédures et on utilise la structure de contrôle "GOTO" pour remplacer les autres structures [Hoh97]. Enfin, on pourra insérer des fragments de code mort pour améliorer la protection. Seulement il faut se méfier des mécanismes de détection de codes morts. Ces mécanismes assurent la protection de la confidentialité des agents. Pour assurer l'intégrité de ces derniers, Hohl propose l'utilisation de la signature électronique de l'agent en totalité et en association avec sa date de validité après laquelle l'agent ne sera plus accepté par aucun site et ses actions ne seront plus valides [Hoh97].

Comme il s'agit d'une sécurisation basée sur le logiciel, ceci nous a permis de réduire le coût élevé des solutions matérielles d'où on a pu retrouver une approche efficace pour sécuriser les agents, mais aussi on peut lui reprocher le manque de fondement théorique. De plus, la sécurité de l'agent est temporaire et n'est valide que pour les agents qui transportent des données à courte durée de validité. Autrement, l'agent sera enregistré et analysé lentement afin de déduire les données qu'il transporte.

b- Calcul par fonction cryptographique: Cette idée est développée par Sander et Tschudin [ST 98], l'objectif de cette approche est analogue à celui de l'approche d'Obscurcissement. Mais, le principe est plus développé et dispose d'un fondement mathématique robuste et la sécurité n'est pas liée à une durée de vie. Sander et Tschudin proposent l'idée comme suit :

Soit une fonction f matérialisée par un agent A, cette fonction sera cryptée en E(f) qui cache les fonctionnalités et les détails de f. Un programme P(E(f)) sera écrit pour implémenter E(f), ce qui produit un nouvel agent B. L'agent B migre sur un site distant où il sera exécuté sur une donnée x et retourne à son site d'origine qui exécute l'algorithme de décryptage E1 (P(E(f)))(x)=f(x). Au niveau du site distant, on exécute P(E(f))(x) qui cache les détails ce qui assure la sécurité de l'agent. Cette approche définit un homomorphisme entre l'espace des données claire et celui des données cryptées tout en se basant sur la fonction PLUS et la fonction MIXED-MULT. Ces deux fonctions sont valides uniquement sur les polynômes, ce qui représente la défaillance de l'approche de Sander sur les données ordinaires. En plus, le travail de l'agent se limite au calcul d'un résultat sur un site distant puis l'agent retourne vers son site d'origine, ce qui ne permet ni la négociation sur site ni la possibilité de signature ou de prise de décision.

c- Traces cryptographiques: Cette approche permet de vérifier l'intégrité d'exécution des agents après leur retour; chaque site visité par l'agent génère une trace d'exécution de l'agent. Cette trace contient toutes les lignes de code exécutées et toutes les valeurs externes lues par l'agent. Avant la migration de l'agent vers une nouvelle destination, en utilisant une fonction de hachage permettant de caractériser une donnée en faisant subir une suite de traitements reproductibles à une donnée fournie en entrée et génère une empreinte servant à identifier la donnée initiale, le site calcule une représentation condensée de la trace, la signe et l'accompagne à l'agent mobile lors de sa transmission vers le site suivant. Afin de réduire la taille de la trace, l'auteur divise le code de l'agent en segments blancs et segments noirs. Les segments noirs sont ceux qui résultent des interactions avec la plate-forme visitée. Et au lieu de la trace d'exécution du code entier, on génère uniquement la trace d'exécution des segments noirs.

Après retour de l'agent, son propriétaire aura une trace de l'exécution de l'agent sur le dernier site et l'adresse du premier site visité (vers lequel il a envoyé l'agent). Puis si le propriétaire a un doute envers un site donné, il pourra suivre le chemin de l'agent et avoir la trace d'exécution sur ce site. Le propriétaire de l'agent pourra simuler son exécution sur le site duquel il doute et comparer la simulation avec la trace reçue.

Cette approche permet d'assurer la non répudiation et la détection de toute manipulation de l'exécution de l'agent après son retour. Toutefois l'approche reste détective et n'évite en aucun cas l'utilisation frauduleuse de l'agent.

De plus il faut avoir un doute envers un site particulier pour lancer le mécanisme de trace, sinon l'utilisation systématique de ce mécanisme devient assez coûteuse.

d- Agents coopérants : Cette approche de sécurisation a été proposée par Roth, Schneider et al. [Sch & al 97].

La protection est assurée en faisant partager l'information par plusieurs agents analogues dits clones. La tâche demandée par l'utilisateur est réalisée par plusieurs agents qui coopèrent plutôt que par un seul agent. L'objectif principal est que l'information partagée reste protégée même si plusieurs sites d'exécution collaborent. Dans un exemple explicatif, Roth [Rot 99] définit deux sous-groupes indépendants de sites que l'agent visitera, ensuite, deux agents seront créés et envoyés chacun à l'un de ces sous groupes. Si un agent retrouve une information pertinente il l'envoie vers son clone qui la vérifie. Pour avoir plus d'efficacité, l'un des deux agents s'exécute obligatoirement sur un site de confiance.

L'inconvénient majeur de cette approche, est l'abus d'utilisation des ressources réseau pour assurer la communication entre clones. De plus l'approche se base sur l'hypothèse de non- collaboration entre les différents sites marchands ce qui n'est pas évident. Enfin, l'approche protège uniquement les données transportées et non l'agent en totalité.

e- Appréciation d'état : Cette approche permet de remédier à l'inconvénient majeur de l'approche des agents coopérants et elle est développée par Farmer et al. [FGS96a] qui définissent un mécanisme qui permet à un agent d'évaluer les privilèges dont il dispose sur un site particulier. Ce qui permet au propriétaire de l'agent de limiter les actions que l'agent peut effectuer. L'approche repose sur une fonction protégée qui permet l'évaluation de l'état de l'agent sur chaque site visité. La fonction sera exécutée une fois l'agent arrive sur un site donné et permettra de vérifier la stabilité de son état. L'existence de telle fonction protège l'agent en détectant les manipulations de son état. La fonction repose sur un calcul complexe à partir d'un ensemble de variables d'état.

Une amélioration a été proposée par Jansen [JanO1] qui consiste à séparer la structure de données définissant le comportement de l'agent de son propre code. Cette structure sera définie dans un certificat conforme à la norme X509 [ISO9594-8]. Dans le certificat, on définit les droits et les responsabilités d'un agent sur un site donné. On distingue les certificats d'attributs dans lesquels on définit le comportement de l'agent et les certificats de politique servant à définir le comportement du site envers tous les agents qu'il accueille. L'approche protège l'agent contre une utilisation illicite en fournissant une preuve des intentions réelles de son propriétaire mais n'offre aucune protection des données que l'agent transporte.

Une autre approche proposée par Magdy Sayeb [MagO2] consiste à utiliser un arbre de

diagnostic permettant la détection d'une attaque possible. Dans cette approche les auteurs associent un symptôme à chaque attaque et la combinaison de ces symptômes définit un arbre. Parmi ces symptômes nous citerons :

- La longue durée d'exécution qui informe sur une analyse du code ou des données au

cours de l'exécution,

- L'enregistrement temporaire de l'agent informe sur une analyse possible tandis qu'un

comportement anormal de l'agent informe sur la manipulation du code de l'agent.

L'approche se limite aux attaques dont l'origine ne prend pas en compte un éventuel mécanisme de détection, sinon il cherchera à masquer les symptômes et simuler un comportement normal.

f- Fonction de validation: Les approches à base de fonctions de validation ont été proposées par Blum [Blu88] afin de vérifier la fiabilité d'un code. Ces dernières peuvent être appliquées dans le but de vérifier l'intégrité d'exécution d'un agent mobile sur un site distant. L'approche se base sur la propriété de réductibilité de la fonction qu'implémente l'agent. Une approche plus récente proposée par Laurero [Lau 01] définit une fonction de vérification V comme suit :

Soient un programme P qui implémente une fonction f, Y l'ensemble des résultats possibles de f(xi ), avec xi appartient à {0,1}n et D(y') le résultat reçu après exécution à distance. La fonction V satisfait la condition suivante si (y=D(y')) n'appartient pas à Y alors P(V(y')= accept) < , où P représente la probabilité et la probabilité d'erreur.

Pour conclure, toutes les approches précédemment vues, qu'elles soient basées sur le matériel ou sur le logiciel, possèdent des avantages pour la sécurité des agents mobiles mais aussi elles pressentent certaines limites, comme par exemple : le coût élevé des solutions matérielles (carte à puces.) d'une part et la complexité des solutions logicielles et leurs limites dans des domaines d'applications précis d'une autre part.

3.4 Les cas de sécurisation

Un agent peut être la cible de plusieurs types d'attaques lors de son déplacement à travers des sites qui peuvent ne pas être de confiance et à travers un réseau qui n'est pas toujours sécurisé.

En effet, au cours de son déplacement, l'agent interagit avec d'autres agents qui peuvent analyser ou altérer son contenu. Aussi, le site visité et sur lequel l'agent s'exécute a la possibilité de manipuler l'agent ou même de le détruire. En effet, ce dernier a un accès total à l'agent et pourra l'analyser bit par bit et par suite mener tout type d'attaques. On peut classer alors les aspects de sécurité concernant un agent mobile comme suit :

- Sécurité entre deux agents,

- Sécurité des agents contre les hôtes,

- Sécurité de l'hôte contre les agents,

- Sécurité des agents contre intervenant externe, - Sécurité pendant le transfert d'un agent.

3.4.1 Sécurité entre deux agents

Ce problème de protection est semblable à sa contrepartie dans les systèmes d'exploitation, où différents domaines de protection sont spécifiés pour limiter l'accès direct d'un processus à l'état intérieur d'un autre.

On s'intéresse donc à la sécurité de l'agent contre les attaques qu'il peut subir de la part d'un autre agent (Figure2.3)

Agent Y

Agent X

Attaque
Active/Passive

Figure2.3 sécurité entre deux agents

On distingue les attaques passives, qui ne modifient pas le code de l'agent ainsi que les données qu'il transporte, et les attaques actives qui consistent à l'altération du code ou des données de l'agent.

Exemples d'attaques passives

Parmi les attaques passives, on cite :

- Eavesdropping : Le fait d'écouter de manière indiscrète.

Ce type d'attaque utilise généralement un moniteur de capture appelé par un programme spécifié. Ce moniteur peut voir les informations échangées entre les hôtes en capturant ainsi des agents et les messages qu'ils peuvent contenir.

- Traffic Analysis : Analyse de La circulation

Ce type d'attaque ne consiste pas seulement en le fait d'écouter de manière indiscrète et intelligente, mais aussi de permettre à l'attaquant d'analyser les traces d'agent entre les systèmes

visités.

Exemples d'attaques actives

L'attaque active peut consister à la modification des valeurs des variables, à l'insertion de virus ou toute modification du code.

Comme attaques actives, on cite :

-Mascarade : Bal masqué

Dans ce type d'attaque, une entité fait semblant d'être une entité différente.

Dans un exemple typique, un agent entre dans un serveur comme étant une personne fidèle

ou une organisation, s'il réussit à tromper l'hôte, il peut être capable d'utiliser un service
gratuitement ou voler des renseignements confidentiels réservés pour l'entité fidèle. -Alteration : Modification

Dans ce cas, un agent ou un message entre deux systèmes d'agent sont effacés ou changés pendant qu'ils transitent, par exemple n'importe quel hôte visité sur l'itinéraire de l'agent peut enlever des données ajoutées par les hôtes précédents. N'importe quels renseignements qui sont modifiés d'une façon inattendue peuvent transformer un agent solide en méchant où peuvent simplement rendre des résultats faux.

3.4.2 Sécurité des agents contre les hôtes

C'est le problème le plus difficile de la sécurité de système d'agent, puisque pour exécuter un agent, son hôte doit avoir accès à son code, son état et ses données.

Un agent qui s'exécute sur un site est alors exposé aux menaces de sécurité de point de vue confidentialité (un site peut exploiter ces informations pour modifier le comportement de ses services) et intégrité (un site peut rejouer l'exécution d'un agent, fausser les résultats des appels systèmes faits par l'agent et ainsi duper l'agent) de la part de son hôte. (Figure 2.4) De plus, l'environnement d'accueil d'un agent peut terminer brutalement l'exécution de celui-ci et empêcher sa migration.

Attaques

Intégrité

Confidentialité

Agent en cours
d'exécution

Hôte

Figure 2.4 Sécurité des agents contre les hôtes.

Une première solution serait que le propriétaire d'un agent limite son itinéraire à des sites de confiance. Pour ce qui est des solutions logicielles, il est possible de chiffrer les données d'agents afin de les protéger sur un itinéraire. La technique se base sur un chiffrement à clé publique des données sensibles.

3.4.3 Sécurité de l'hôte contre les agents

Un agent qui a un accès libre à un site peut violer sa confidentialité, par la simple lecture, et violer son intégrité par l'écriture. Cet agent peut aussi compromettre la disponibilité de la machine en consommant d'une manière illimitée et incontrôlée ses ressources, en se clonant indéfiniment ou en migrant sans fin. (figure 2.4)

Dans ces cas, l'authentification de l'agent avant son exécution devient le premier recours indispensable. L'environnement d'exécution, connaissant la provenance de l'agent, est capable de vérifier le niveau de confiance de l'agent reçu en fonction de son origine.

Toutefois, l'authentification est une solution nécessaire mais insuffisante, car le code issu d'un site supposé de confiance peut contenir des erreurs non intentionnelles qui peuvent nuire à la sécurité des hôtes.

3.4.4 Sécurité des agents contre intervenant externe

Cette classe de sécurité regroupe la sécurisation des agents contre les intervenants externes et contre les sites d'exécution ainsi que leur sécurisation pendant leur déplacement à travers le réseau. Au cours de son déplacement, un agent traverse des canaux de communication et des noeuds de commutation. Si ces constituants de réseau ne sont pas protégés, ils peuvent présenter un point de vulnérabilité de la plate-forme d'agents. (Figure2.5)

Noeud de commutation

H2

H4

____
____

Agent

Attaque

H1

H5

H3

Canal non sécurisé de
Commination

Figure 2.5 Protection des agents contre intervenant externe

Au cours de son voyage à travers le réseau, l'agent est inactif et sa sécurisation revient à un problème ordinaire de sécurité réseau dont plusieurs solutions existent, à savoir :

- L'architecture sécurisée pour l'Internet « IPsec »,

- La version sécurisée du protocole de transfert d'hypertexte SHTTP,

- Le protocole de canaux sécurisés SSL,

- Le protocole de messagerie sécurisée SMIME.

3.4.5 La sécurité pendant le transfert d'un agent

Pendant le transfert d'un agent vers sa destination trois types d'attaques peuvent être présents :

1- Le fait d'écouter de manière indiscrète (Eavesdropping)

2- Un article de données de communication est changé, effacé, ou substitué pendant qu'il transit. (Modification)

3- Une copie capturée d'un agent légitime auparavant envoyé est retransmise pour des buts illégitimes : Rejouer (Replay)

En conclusion, ces attaques sont très bien connues et ne posent plus problème actuellement, car beaucoup d'algorithmes de cryptage peuvent être utilisés.

3.5 Conclusion

Les agents mobiles semblent être une approche très utile dans la construction d'un grand ensemble d'applications réseaux. Pourtant, les problèmes de sécurité qui peuvent être levés en soutenant des agents, peuvent prévenir la large utilisation d'applications basées sur des agents.

Vu la nécessité de la sécurité des agents mobiles, plusieurs solutions à base de matériel ou logiciels ont été introduites dans des applications pour remédier à certaines attaques qui peuvent entraver le travail d'un agent.

Pour cela, des travaux sont en cours pour introduire les propriétés principales de sécurité (l'autorisation, l'authentification, le confidentialité, etc.) en particulier les travaux de sécurité des agents mobiles Aglets.

Chapitre 4

La plateforme Aglets

4.1 Introduction

Un aglet est la contraction de Agent et Applet. IBM a confié à une équipe japonaise le soin de développer une technologie pour les agents mobiles. Aglets est le résultat des recherches de cette équipe. Il s'agit d'une API java spécifiant un ensemble de méthodes répondant aux principes fondamentaux des agents mobiles. Dans ce chapitre nous allons nous intéresser à bien étudier Aglets en tant qu'une plateforme. Nous allons définir quelques mots clés tels que hôte, contexte, Proxy, etc. De plus, on va parler du cycle de vie, mobilité et communication des aglets.

4.2 Aglets

4.2.1 Définitions

Aglets vs Applets

Les aglets ne sont pas les premiers programmes pouvant déplacer du code java sur le réseau. Les applets le font depuis longtemps. Mais contrairement aux applets, quand un aglet migre d'un hôte à l'autre, il emmène son état avec lui. Une applet est du code migrant d'un serveur vers un client. Un aglet est un programme java en cours d'exécution qui peut se déplacer d'un hôte à l'autre via le réseau.

Les aglets sont similaires aux applets dans la mesure où ils s'exécutent au sein d'une machine virtuelle java. Un appletviewer ou un navigateur est nécessaire aux applets. Le navigateur implémente une politique de sécurité destinée à interdire au code malveillant d'accéder aux ressources sensibles du système. De la même manière, un aglet a besoin d'un hôte d'aglets pour s'exécuter sur une machine. Il s'agira en principe de Tahiti, mais pas forcément. Cet hôte doit également proposer une politique de sécurité pour restreindre les pouvoirs des aglets non dignes

de confiance.

D'une autre manière, on peut dire qu'un aglet est un objet mobile qui dispose de son propre thread de contrôle, auquel on peut envoyer des événements et qui a la possibilité de communiquer par l'intermédiaire de messages.

L'API (Agent Protocol Interface) de communication utilisée par les aglets est dérivée du standard MASIF (Mobile Agent System Interoperability Facility) du groupe OMG (Object Managment Group).

Le modèle d'objet des Aglets définit un ensemble d'abstractions et de comportements pour le développement d'agents mobiles sur Internet. Ces abstractions sont les concepts de base de l'environnement de la plateforme Aglets à savoir : l'Aglet, le Proxy, le Contexte et l'hôte.

Proxy

Les méthodes des aglets ne sont jamais invoquées directement. Ces méthodes sont invoquées au travers un objet AgletProxy (figure 3.1). Cet objet est obtenu en retour lors de la création d'un aglet ou à l'aide de l'identificateur de l'aglet.

Monde extérieur

Interactions

Proxy aglet

Figure 3.1 Relation entre un aglet et son Proxy.

Contexte

Un contexte est un objet statique qui fournit des moyens pour mettre à jour et contrôler des aglets dans un environnement uniforme d'exécution où le système hôte est immunisé contre des aglets malveillants (figure3.2). Un noeud dans un réseau informatique peut accueillir des contextes multiples.

Aglets

Contexte

Ressources

Figure 3. 2 Évolution des Aglets dans un Contexte.

Hôte

Un hôte est une machine capable d'héberger plusieurs contextes qui peuvent être gérés par un moteur (figure 3.3). Généralement, l'hôte est un noeud dans un réseau.

Contexte

Hôte

Contexte

Moteur

Contexte

Figure 3.3 Relations entre hôte, moteur et contexte.

4.2.2 Cycle de vie d'un aglet

Les types de comportement des aglets ont été implémentés de manière à répondre aux principaux besoins des agents mobiles.

Libération

Contexte A Contexte B

Clonage

Déportation

aglet aglet

Désactivation Activation

Récupération

Mémoire de
masse

Fichiers.Class

Figure 3.4 Modèle du cycle de vie d'un aglet.

Les principales opérations affectant la vie d'un aglet sont (figure 4.3) :

· Création: Se fait dans un Contexte. Un Identifiant unique est assigné. L'initialisation et l'exécution de l'aglet commencent immédiatement. Cet identifiant est globalement immuable durant le cycle de vie de l'aglet.

· Clonage : Création d'un clone dans le même contexte que l'original. Un Identifiant différent est alors attribué. A noter que les processus (thread) ne peuvent pas être clonés.

· Déportation (Dispatching) : Il s'agit ici d'extraire un aglet de son contexte d'exécution et de l'insérer dans un contexte destination. Précisément, dispatcher un aglet entraînera sa suppression de son contexte courant et son insertion dans son contexte de destination où il va reprendre son exécution; ceci via la méthode dispatch (URL destination). La destination spécifiée est de type URL. Elle inclut l'hôte, le nom du domaine et des informations contenant le protocole utilisé pour communiquer avec le serveur distant. L'appel de la méthode Dispatch() mènera immédiatement à une invocation de la méthode ondispatching() permettant de personnaliser l'envoi de l'aglet. Le protocole réseau utilisé dans le cas d'envoi d'aglet est ATP (Agent Transfer Protocol). Ce dernier est invoqué quand un agent demande de migrer vers un autre serveur agent ou quand une application crée et lance un agent à son serveur initial. Pour effectuer le transfert d'un agent, le serveur courant envoie un message ATPRequest à travers la connexion TCP déjà établie. Ce message contient des paramètres tels que le temps d'exécution estimé de l'agent à transférer, son nom, son URN (Uniform Resource Naming). Ces paramètres d'identification de l'agent qui a demandé à être transféré vont être utilisés par le serveur destination pour qu'il décide de l'établissement du transfert compte tenu de ses critères de sécurité. A titre d'exemple, une politique de sécurité relative à un serveur peut interdire l'accès à un ensemble d'agents appartenant à un propriétaire donné.

· Récupération (Rétractation) : L'aglet déporté est récupéré (tiré) dans son contexte

d'origine. Autrement dit, le retrait d'un aglet va le supprimer de son contexte courant et l'insérer dans le contexte où l'opération a été invoquée. Le retrait d'un aglet se fait via l'activation de la méthode retractAglet() qui mène à une invocation distante de la méthode onReverting. Ainsi tous les threads de l'aglet distant sont détruits. A l'arrivée de l'aglet, la méthode onArrival() est invoquée, suivie de la méthode run().

· Activation et Désactivation: La désactivation d'un aglet est une interruption temporaire de son exécution. Elle consiste à le stocker momentanément dans un espace de stockage secondaire afin de pouvoir le réactiver ultérieurement.

· Libération ou destruction (dispose) : Cette dernière opération marque la fin du cycle de vie de l'aglet en le supprimant de son contexte d'exécution courant.

La figure 5.3 représente le processus de transfert des données dans le réseau d'un hôte à un autre.

Hote 1 Hote2

Contexte d'Origine

Arrêt de l'exécution

Sérialisation

Codage Expédition ds

te1 données

Contexte de Destination

Reprise de l'exécution
Désérialisation

Décodage

Réception des données

Réseau

Figure 3.5 Transfert d'un aglet.

4.2.3 La création de l'aglet

La création d'un aglet se fait par l'appel de la méthode createAglet() du contexte. public abstract AgletProxy createAglet( URL codeBase, String code, Object init); Cette méthode retourne le proxy associé à l'aglet nouvellement crée.

CreateAgletØ

runØ

 
 

AgletØonCreationØ

Figure 3.6 Diagramme de Collaboration pour la création de l'Aglet.

L'exemple suivant montre comment un aglet peut créer un autre aglet : import agl et. *;

public class creationExample extends Aglet{

pubilc void run() {

try{

getAgletContext(). createAglet(getCodeBase(), 'CreationChild", null); }

Catch (Exception e){ System.out.println(e.getMessage()) ;}

}}

4.2.4 Le modèle événementiel de l'aglet

La programmation des aglets est basée sur la gestion des événements. Des notifications alertent l'aglet sur les actions influant sur son cycle de vie. Le programmeur a la possibilité d'implémenter des écouteurs (listeners) pour faire réagir l'aglet. Il existe trois catégories de notifications :

Notifications de clonage

Permettent la capture des événements liés au clonage de l'aglet. Cette fonctionnalité est obtenue par implémentation de l'écouteur (interface) CloneListener :

La méthode clone() permet de cloner un aglet. Elle retourne le proxy associé au clone. L'aglet qui fait l'objet du clonage reçoit alors les notifications suivantes :

public void CloneAdapter. onCloning(CloneEvent event);

Annonce de clonage de l'aglet. La surcharge de cette méthode donne la possibilité d'exécuter les actions en conséquence.

Le clonage est réalisé et nous obtenons deux aglets : Un original est un clone. L'original reçoit un événement de type :

public void CloneAdapter. onCloned(CloneEvent event);

Et l'agent cloné reçoit l'événement :

public void CloneAdapter.onClone(CloneEvent event);

Notifications de mobilité

Il existe deux façons de déplacer un aglet. La première est l'envoi vers un hôte distant; la seconde consiste à retirer un aglet d'un hôte distant. Plus précisément, il s'agit d'ordonner à l'aglet de partir où de venir.

Envoi: La méthode dispatch (URL destination) permet de demander à un aglet d'aller s'exécuter sur une autre plateforme. Dispatch (new URL ("atp :// unhote.fr"));

Le protocole utilisé est ATP : Aglet Transfer Protocol. Il est lié à l'API utilisée.

Les événements sont suivis par un MobilityListener. L'écouteur est ajouté et supprimé grâce aux méthodes addMobilityListener() et removeMobilityListener(). Un MobilityListener doit implémenter les méthodes suivantes :

public void onDispatching () : Cette méthode est appelée avant l'envoi de l'aglet. public void onArrival () : Cette méthode est appelée à la réception de l'aglet.

Retrait : Le principe de retrait est similaire au principe de l'envoi d'aglet. La méthode

retractAglet() permet de retirer un aglet de son contexte actuel.

AgletContext.retractAglet (URL contextAdress, AgletID id)

AgletID est un identifiant attribué à l'aglet. Il est obtenu à l'aide de la méthode getAgletID de la classe Aglet.

4.2.5 Communication des aglets

La communication est basée sur l'échange d'objets de la classe Message. Ce modèle de communication est indépendant de la localisation de l'aglet et peut être asynchrone ou synchrone.

Un aglet désirant envoyer un message doit obligatoirement passer par le proxy du destinataire. En fait, le proxy reste l'intermédiaire obligatoire pour tout échange.

Chaque aglet possède un gestionnaire de messagerie MessageManager qui lui permet de les traiter un à un et dans l'ordre de leurs arrivées respectives. Toutefois, cet ordre peut être changé par l'aglet en modifiant les priorités des messages dans la file d'attente. Ceci est possible grâce à la méthode setPriority().

public void MessageManager. SetPriority (String Kind, int priority) Les priorités ont des valeurs allant de 1 à 10.

D'autres mécanismes existent pour le traitement parallèle des messages. Chaque message est caractérisé par la catégorie (Kind) à laquelle il appartient. La création d'une instance message nécessite l'affectation d'une valeur à son paramètre Kind

Message msg =new Message (<î' Mon nom », A): le deuxième argument représente la valeur affectée au premier argument (kind).

Messages synchrones

La méthode sendMessage(Message msg) permet l'envoi de messages synchrones. Elle est donc bloquante car elle retourne la réponse du récepteur.

Messages asynchrones

La messagerie asynchrone est implémentée grâce à la notion de futur objet. L'envoi d'un message asynchrone retourne un lien vers la réponse même si cette dernière n'existe pas encore. Ce lien permet de tester si la réponse est arrivée ou pas. Cette technique permet à l'aglet d'envoyer un message sans être obligé d'interrompre son exécution en attente de la réponse.

4.2.6 Les Serveurs d'aglets

· Tahiti:

un gestionnaire d'agents visuel. Tahiti utilise une interface graphique unique pour suivre et contrôler l'exécution des aglets. Il est possible en utilisant le glisser-déposer de faire communiquer deux agents ou de les faire migrer vers un site particulier. Tahiti dispose d'un gestionnaire de sécurité paramétrable qui détecte toute opération non autorisée et empêche l'agent de la réaliser.

· Fiji:

un lanceur d'agent sur le Web. Fiji est une applet Java capable de créer ou de détruire un aglet sur un navigateur Web. Fiji utilise comme unique paramètre l'URL de l'agent, qui est intégré directement dans le code HTML d'une page Web.

Comme pour une applet, l'exécution d'un aglet commencera par le téléchargement du code, puis par son lancement grâce à Fiji. Si le serveur Web est complété par un démon

ATP, il devient très facile de répartir des aglets sur les sites Web.

4.3 Conclusion

Les aglets ajoutent une dimension à la programmation objet. Ils permettent d'intégrer le réseau dans la conception des systèmes et ils offrent une très grande simplicité d'implémentation. Ceci constitue un avantage certain par rapport aux autres systèmes. Grâce à java, ils sont indépendants de la plateforme et permettent d'intégrer tout type de machine dans l'environnement. Il semble néanmoins que cette technologie ne suscite pas l'engouement attendu. En ce qui concerne spécifiquement les aglets et l'équipe de développement japonaise d'IBM, les publications semblent s'être arrêtées en 1998. D'autres plateformes ont été développées depuis. Elles constituent une base prometteuse et seront peut être le prochain standard de développement de systèmes d'informations.

Deuxième partie

Spécification et réalisation

Chapitre 5

Communication inter Aglets

5.1 Introduction

La "communication" est le processus de transmission d'informations. Ce terme provient du latin « communicare » qui signifie « mettre en commun ». La communication peut donc être considérée comme un processus pour la mise en commun d'informations et de connaissances.

Une propriété importante des aglets est qu'ils peuvent communiquer entre eux via un environnement dans lequel les aglets qui ne connaissent pas peuvent échanger des messages. C'est-à- dire, un aglet doit être capable de coopérer avec des aglets développés par d'autres développeurs.

Dans cette partie, nous allons décrire les différentes techniques de communication par messages entre aglets. Plusieurs moyens de communication inter aglets sont supportés; ainsi qu'une description des failles da la plateforme Aglets au niveau de la communication sera donnée.

5.2 Types de communication

Les aglets d'IBM fournissent un modèle d'interface pour la communication plus flexible, et plus extensible que l'invocation normale de méthodes.

L'aglet supporte un environnement de communication (Figure4.1) qui est:

· extensible

· indépendant de la localisation

· synchrone / asynchrone

_
_

_
_

___
___

_
_

Message Object

Agletcontext Communication

AgletAglet
message

Figure 4.1 L'environnement Aglet.

5.2.1 Communication simple

Le principal moyen pour les aglets de communiquer est l'envoi de messages. La méthode d'appel du service de messagerie dans la classe Aglet s'appelle handleMessage(). Ce n'est pas une méthode à utiliser directement pour envoyer un message à un aglet, les méthodes sendMessage() ou sendAsyncMessage() sont utilisées à la place. Ces 2 méthodes ont l'avantage d'abstraire l'emplacement de l'aglet. Ce qui signifie que peu importe où se trouve l'aglet, l'interface (sendMessage) reste identique.

5.2.2 Communication synchrone

La communication synchrone entre aglet est assurée par la fonction getReply(). Après avoir envoyé un message, on peut attendre la réponse du destinataire par cette fonction. Cette dernière reste bloquante jusqu'à ce que la réponse soit retournée (Figure 4.2). La méthode sendMessage (Message msg) permet l'envoi de messages synchrones. Elle est bloquante car elle retourne la réponse du destinataire. Ensuite le destinataire du message doit implémenter un gestionnaire des messages reçus. Cette fonctionnalité est rendue possible par la surcharge de la méthode : Agl et.handleMessage (Message msg). Puis la méthode Message.sendReply() permet de retourner une réponse à l'émétteur. Elle supporte plusieurs constructions (Figure 4.2) :

public void Message.sendReply ()

public void Message.sendReply (boolean reply)

public void Message.sendReply (Object reply)

handleMessage(Message msg) getReplyØ handleMessage(Message msg)

sendMessage(Message msg) sendMessage(Message msg)

Figure 4.2 Communications synchrones.

5.2.3 Communication asynchrone

Dans le cas d'une communication asynchrone, après avoir envoyé le message, l'Aglet doit vérifier régulièrement s'il y a eu réponse ou non. L'envoi est non bloquant (Figure 4.3).

handleMessage(Message msg)

sendMessage(Message msg) sendMessage(Message msg)

Figure 4.3 Communications Asynchrones.

Ce type de communication est implémenté grâce à la notion de future Objet.Un ensemble de méthodes de la classe FutureReply concernent la recherche de la réponse d'un message. La transmission non bloquante ou asynchrones des messages permet de poursuivre l'exécution jusqu'à ce que la réponse soit arrivée.

public FutureReply AgletProxy. sendFutureMessage (Message msg) La classe FutureReply offre des méthodes pour la récupération des messages.

public boolean FutureReply.isAvailable() Vérifie si la réponse est arrivée ou non.

public void FutureReply. waitForReply(long duration) Attente de l'arrivée de la réponse pour la durée duration.

public void FutureReply. waitForReply() Blocage en attente de l'arrivée de la réponse. public Object FutureReply. getReply() Récupère la réponse.

Un agent peut avoir besoin de communiquer avec son propriétaire, avec d'autres agents (locaux ou distants), ou avec des services. La communication avec le propriétaire, identifiée

dans les attributs de l'agent, doit être asynchrone. Dans le cas de communication avec un agent ou un service distant, le choix entre la communication distante et la migration sur le site distant est un problème complexe (compromis entre le coût de communication et le coût de migration) dont la résolution est laissée au programmeur dans les systèmes actuels.

5.3 Protection de la communication

Protéger la communication revient à préserver la confidentialité et l'intégrité des messages qui passent à travers le réseau ainsi que le secret du flux. Quand des informations doivent être transmises entre deux systèmes surtout hétérogènes par leurs systèmes de sécurité, elles peuvent être interceptées ou altérées par un intrus.

5.3.1 Approches de protection

On distingue essentiellement trois approches de protection des messages en cours de communication

Sécurité orientée liaison

C'est la protection des messages qui circulent à travers un lien de communication individuel entre deux noeuds (qu'il soit des noeuds intermédiaires ou finaux) indépendamment de la source et de la destination. Etant donné que l'information est protégée sur les liaisons et pas au sein des noeuds qu'elles relient, les noeuds eux-mêmes doivent être protégées physiquement; d'ailleurs cette approche pose plusieurs problèmes.

Sécurité de bout en bout

Le but de cette approche est de protéger le message pendant sa transmission entre source et destination de façon à ce que la subversion de n'importe quel lien de communication ne peut altérer le du message.

Sécurité orientée association

C'est un raffinement de l'approche de protection de bout en bout qui offre aux utilisateurs une grande flexibilité dans le choix des noeuds intermédiaires de communication.

Les méthodes de protection des messages se basent sur l'idée de brouiller le message de manière à le rendre incompréhensible et inintelligible pour l'attaquant. Pour ce faire, il existe deux techniques différentes :

La stéganographie C'est un mot issu du grec Stéganô, signifiant Je couvre et Graphô, signifiant J'écris. Il s'agit de se servir d'un grand message pour cacher un autre beaucoup plus petit. L'exemple le plus courant est de cacher le message dans une image en utilisant les bits les moins significatifs de chaque pixel comme bit de message. Ainsi, le message passe en clair dans le réseau, sans personne en puisse trouver la composition du vrai message, sauf les personnes concernées.

L'idée est de prendre un message et de le modifier de manière aussi discrète que possible afin d'y dissimuler l'information à transmettre. Le message original est le plus souvent une image. La technique de base dite LSB pour Least Significant Bit consiste à modifier le bit de poids faible des pixels codant l'image : une image numérique est une suite de points, que l'on appelle pixel, et dont on code la couleur à l'aide d'un triplet d'octets par exemple pour une couleur RGB sur 24 bits. Chaque octet indique l'intensité de la couleur correspondante rouge, vert ou bleu (Red Green Blue) par un niveau parmi 256. Passer d'un niveau n au niveau immédiatement supérieur (n+1) ou inférieur (n-1) ne modifie que peu la teinte du pixel, or c'est ce que l'on fait en modifiant le bit de poids faible de l'octet, l'annexe 6.1 contient un exemple explicatif.

Toutefois, la stéganographie s'avère peut utilisée à cause du surcoût de communication qu'elle engendre pour cacher le message. A cet effet, on s'intéresse spécialement à la deuxième technique qui est la cryptographie.

La cryptographie La cryptographie est l'étude des méthodes permettant de transmettre des données de manière confidentielle. Afin de protéger un message, on lui applique une transformation qui le rend incompréhensible; c'est ce qu'on appelle le chiffrement, qui, à partir d'un texte en clair, donne un texte chiffré. Inversement, le déchiffrement est l'action qui permet de reconstruire le texte en clair à partir du texte chiffré en utilisant une clé particulière et un algorithme de déchiffrement.

On distingue deux catégories de systèmes cryptographiques:


· Systèmes de cryptographie symétrique:

Les algorithmes de chiffrement symétrique se fondent sur une même clé pour chiffrer et déchiffrer un message (Figure 4.4). Le problème de cette technique est que la clé, qui doit rester totalement confidentielle, doit être transmise au correspondant de façon sûre.

Figure 4.4 Système de cryptographie symétrique.

Le principe de fonctionnement du système d'authentification à clés symétriques est le suivant :

Soit 'M' un ensemble de messages vérifiant une propriété particulière (définie à l'avance par les deux interlocuteurs) et soit 'm', appartenant à 'M', le message à échanger. L'émetteur chiffre 'm' avec la clé secrète 's' et envoie le résultat Es(m) au destinataire, ce dernier déchiffre le message Ds(Es(m))= m et vérifie si le message déchiffré appartient à 'M', si c'est le cas alors l'authenticité du message est prouvée, sinon le message est rejeté.

Parmi les algorithmes de cryptographie symétrique les plus connus on cite :

a- DES (Data Encryption Standard) : C'est-à-dire Standard de Chiffrement de Données est un standard mondial depuis plus de 15 ans. Bien qu'il soit un peu vieux, il résiste toujours très bien à la cryptanalyse et reste un algorithme très sûr.

Au début des années 70, le développement des communications entre ordinateurs a nécessité la mise en place d'un standard de chiffrement de données pour limiter la prolifération d'algorithmes différents ne pouvant pas communiquer entre eux. Pour résoudre ce problème, L'Agence Nationale de Sécurité américaine (N.S.A.) a lancé des appels d'offres. La société I.B.M. a développé alors un algorithme nommé Lucifer, relativement complexe et sophistiqué. Après quelques années de discussions et de modifications, cet algorithme est devenu alors D.E.S.

Le D.E.S. est un système de chiffrement par blocs, c'est a dire il ne chiffre pas les données à la volée quand les caractères arrivent, mais il découpe virtuellement le texte clair en blocs de 64 bits qu'il code séparément, puis qu'il concatène. Un bloc de 64 bits du texte clair entre par un coté de l'algorithme et un bloc de 64 bits de texte chiffré sort de l'autre coté. L'algorithme est assez simple puisqu'il ne combine en fait que des permutations et des substitutions. On parle en cryptologie de techniques de confusion et de diffusion.

C'est un algorithme de cryptage à clef secrète. La clef sert donc à la fois à crypter et à décrypter le message. Cette clef a ici une longueur de 64 bits, c'est-à-dire 8 caractères, mais seulement 56 bits sont utilisés. On peut donc éventuellement imaginer un programme testant l'intégrité de la clef en exploitant ces bits inutilisés comme bits de contrôle de parité.

L'entière sécurité de l'algorithme repose sur les clefs puisque l'algorithme est parfaitement connu de tous. La clef de 64 bits est utilisée pour générer 16 autres clefs de 48 bits chacune qu'on utilisera lors de chacune des 16 itérations du D.E.S. Ces clefs sont les mêmes quel que soit le bloc qu'on code dans un message.

En effet la sécurité du D.E.S. avec ses 16 rondes est grande et résiste à l'heure actuelle à toutes les attaques linéaires, différentielles ou par clefs corrélées, effectuées avec des moyens financiers et temporels raisonnables (i.e. moins de 10 millions de dollars et moins d'un mois). La grande sécurité repose sur ses tables de substitutions non linéaires très efficaces pour diluer les informations. De plus le nombre de clefs est élevé (256=7,2*1016) et peut être facilement augmenté en changeant le nombre de bits pris en compte. D'autres avantages plus techniques au niveau cryptanalyse existent. De plus, cet algorithme est relativement facile à réaliser matériellement et certaines puces chiffrent jusqu'à 1 Go de données par seconde ce qui est énorme : c'est plus que ce qu'est capable de lire un disque dur normal.

b-IDEA (International Data Encryption Algorithm) : Cet algorithme a été conçu dans les années 90. C'est un algorithme de chiffrement symétrique par blocs utilisé pour chiffrer et déchiffrer des données. Il manipule des blocs de texte en clair de 64 bits. Une clé de chiffrement longue de 128 bits (qui doit être choisie aléatoirement) est utilisée pour le chiffrement des données, et on a besoin de la même clé secrète pour les déchiffrer. Comme tous les algorithmes de chiffrement par blocs, IDEA utilise à la fois la confusion et la diffusion. L'algorithme est basé sur le mélange d'opérations de différents groupes algébriques(voir Annexe 6.1).


· Des systèmes de cryptographie asymétrique

Ces systèmes ont été proposés par Whitfield Diffie et Martin Hellman en 1976 marquant ainsi la naissance de la cryptographie moderne. La cryptographie asymétrique (appelée aussi

cryptoraphie à clé publique) utilise deux clés : une clé publique et une clé privée. Les clés publique et privée sont mathématiquement liées par l'algorithme de cryptage de telle manière qu'un message crypté avec une clé publique ne puisse être décrypté qu'avec la clé privée correspondante. Mais ces clés ont la propriété que si l'on connaît la clé publique, il est impossible de trouver par calcul la clé privée. Dans un système cryptographique à clé publique, chaque partie communicante possède sa propre paire de clés publique/privée. Comme son nom l'indique, la clé publique est mise à la disposition de quiconque désire chiffrer un message. Ce dernier ne pourra être déchiffré qu'avec la clé privée, qui doit être confidentielle.

Voici comment un tel système peut assurer la confidentialité des communications : deux sujets, Paul et Pierre, désirent échanger des informations qu'il tiennent à garder secrètes et intègres. Pierre va chiffrer l'information avec la clé publique de Paul. La confidentialité de l'information est maintenue, car seul Paul peut la déchiffrer au moyen de sa clé privée (Figure 4.5).

Figure 4.5 Système de cryptographie asymétrique.

Quelques algorithmes de cryptographie asymétrique très utilisés :

a- RSA (Rivest, Shamir et Adleman) :

Cet algorithme est très largement utilisé, par exemple dans les navigateurs pour les sites sécurisés et pour chiffrer les emails. Il est dans le domaine public (Figure 4.5).

L'algorithme est remarquable par sa simplicité. Il est basé sur les nombres premiers. Pour encrypter un message, on fait : c = m^e mod n

Pour décrypter : m = c'd mod n

m = message en clair

c = message encrypté

(e,n) constitue la clé publique

(d,n) constitue la clé privée

n est le produit de 2 nombres premiers

^est l'opération de mise à la puissance (a'b : a puissance b)

mod est l'opération de modulo (reste de la division entière)

Créer une paire de clés : C'est très simple, mais il ne faut pas choisir n'importe comment e, d et n. Et le calcul de ces trois nombres est tout de même délicat (figure 4.6).

e n d n

Texte en clair

Texte codé

Décryptage

Texte en clair

Cryptage

n m

m c = m^e mod n c m = c^d mod

Figure 4.6 Principe de fonctionnement de l'algorithme RSA.

Voici comment procéder :

1. Prendre deux nombres premiers p et q (de taille à peu près égale). Calculer n = pq.

2. Prendre un nombre e qui n'a aucun facteur en commun avec (p-1)(q-1).

3. Calculer d tel que ed mod (p-1) (q-1) = 1

Le couple (e,n) constitue la clé publique. (d,n) est la clé privée.

l'annexe6.2 contient un exemple bien detaillé de cet algorithme.

b- DSA (Digital Signature Algorithm) :

Plus connu sous le sigle DSA, est un algorithme de signature numérique standardisé par le NIST aux États-Unis, du temps où le RSA était encore breveté. Le processus de cet algorithme se fait en trois étapes :

1. Génération des clés

Leur sécurité repose sur la difficulté du problème du logarithme discret dans un groupe fini.

· Choisir un nombre premier p de L-bit, avec 512 < L < 1024, et L est divisible par 64

· Choisir un nombre premier q de 160 bits, de telle façon que p - 1 = qz, avec z un entier

· Choisir h, avec 1 <h < p - 1 de manière à ce que g = h^z mod p> 1

· Générer aléatoirement un x, avec 0 <x < q

· Calculer y = g^x mod p

· La clé publique est (p, q, g, y). La clé privée est x

2. Signature

· Choisir un nombre aléatoire s, 1 <s < q

· Calculer s1 = (g's mod p) mod q

· Calculer s2 = (11(m) + s1xx)s'-1 mod q, où 11(m) est le résultat d'un hachage cryptographique

· La signature est (s1,s2)

3. Vérification

· Rejeter la signature si 0<s1<q ou 0<s2<q n'est pas verifié


· Calculer w = (s2) -1 (mod q)

· Calculer u1 = H(m)xw (mod q)

· Calculer u2 = s1 xw (mod q)

· Calculer v = [g^u1xy^u2 mod p] mod q

· La signature est valide si v = s1

5.3.2 Contrôle d'intégrité

Pour le contrôle d'intégrité des données on peut utiliser la fonctions de hachage.

Une fonction de hachage calcule le résumé d'un texte, ce résumé est très sensible au texte initial (une petite modification du texte provoque une grande modification du résumé). Les 2 algorithmes de hachage les plus utilisés sont le SHA (Secure Hash Algorithm) qui calcule un résumé de 160 bits, et le MD5 (Message Digest version 5), qui calcule un résumé de 128 bits. Nous présentons ce dernier algorithme, qui se déroule en plusieurs étapes (Figure 4.7) .

· Etape 1 : Complétion

Le message est constitué de b bits m1. ..mb. On complète le message par un 1, et suffisamment de 0 pour que le message étendu ait une longueur congruente à 448, modulo 512. Puis on ajoute à ce message la valeur de b, codée en binaire sur 64 bits (on a donc b qui peut valoir jusque 264... ce qui est énorme). On obtient donc un message dont la longueur totale est un multiple de 512 bits. On va travailler itérativement sur chacun des blocs de 512 bits.

· Etape 2 : Initialisation

On définit 4 buffers de 32 bits A, B, C et D, initialisés ainsi (les chiffres sont hexadécimaux, ie a=10, b=11...).

A=0 1234567

B=89abcdef

C=fedcba98

D=76543210

On définit aussi 4 fonctions F, G, H et I, qui prennent des arguments codés sur 32 bits, et renvoie une valeur sur 32 bits, les opérations se faisant bit à bit.

F(X,Y,Z) = (X AND Y) OR (not(X) AND Z)

G(X,Y,Z) = (X AND Z) OR (Y AND not(Z))

H(X,Y,Z) = X xor Y xor Z

I(X,Y,Z) = Y xor (X OR not(Z))

Ce qu'il y a d'important avec ces 4 fonctions et que si les bits de leurs arguments X,Y et Z sont indépendants, les bits du résultat le sont aussi.

· Etape 3 : Calcul itératif

Pour chaque bloc de 512 bits du texte, on fait les opérations suivantes :

1. on sauvegarde les valeurs des registres dans AA,BB,CC,DD.

2. on calcule de nouvelles valeurs pour A,B,C,D à partir de leurs anciennes valeurs, à partir des bits du bloc qu'on étudie, et à partir des 4 fonctions F,G,H,I.

3. on fait A=AA+A, B=BB+B, C=CC+C, D=DD+D.

Le détail des calculs se trouve en annexe 4.4

. Etape 4 : Ecriture du résumé

Le résumé sur 128 bits est obtenu en mettant bout à bout les 4 buffers A, B , C et D de 32 bits.

Figure 4.7 Description du fonctionnement du MD5

5.4 Les failles dans Aglets au niveau de la communication entre les agents

Malgré que la plateforme Aglets possède un Package qui contient des classes assurant la sécurité des aglets ça ne suffit pas de dire que la communication entre aglets est bien sécurisée.

Dans cette partie de ce chapitre, nous mettons l'accent sur les failles existantes dans la plateforme Aglets au niveau de la communication entre les agents. Nous allons nous baser sur des tests, pour cela nous allons utiliser un outil d'écoute dans le réseau qui est une sorte de logiciel qui peut récupérer les données transitant par le biais d'un réseau local, et il permet une consultation aisée des données non chiffrées et peut ainsi servir à intercepter des mots de passe qui transitent en clair ou toute autre information non-chiffrée, cet outil est appelé « sniffer ».

Le principal moyen pour les aglets de communiquer, est l'envoi de messages et comme il a été déja énoncé au début de ce chapitre que la communication peut être asynchrone ou synchrone et dans les deux cas il y a un manque de sécurité des données à envoyer.

On va prendre à titre d'exemple deux aglets A et B qui communiquent entre eux par envoie des messages.

A: connecter sur le port 4434 et sur la machine d' IP : 192.168.10.37

B : connecte sur le port 4435 et sur la machine d' IP : 192.168.10.192

Nous avons classé les failles en fonction de quelques propriétés de sécurité des agents mobiles.

5.4.1 La confidentialité

On suppose que l'Aglet A va envoyer des données confidentielles vers B. Dans ce cas les données ne sont pas secrètes et il se peut que des personnes non autorisées y aient accès.

Cela peut être expliqué par la figure 4.7, qui représente l'écran d'une capture faite par le sniffer pendant le transfert du message de A vers B.

Comme il est indiqué le message est en clair et n'importe quel hôte dans le réseau peut l'observer.

Figure 4.7 Résultat d'une capture de trafic par le sniffer(1).

5.4.2 L'authentification et L'intégrité

Par le même exemple, et à partir de la même figure, on suppose qu'un autre aglet accède au message et modifie ou efface son contenu pendant sa transmission. Ainsi les informations reçues par B ne seront pas conformes à celles fournies par A. Le service d'authentification doit montrer que la connexion ne peut être brouillée par une troisième entité cela veut dire que n'importe quel hôte visité sur l'itinéraire de l'agent n'a pas le droit d'enlever des données ajoutées par les hôtes précédents car à la suite n'importe quels renseignements qui sont modifiés d'une façon inattendue peuvent rendre les résultats faux ou rendre les données incohérentes après la modification.

Le sniffer détecte les informations des hôtes connectés dans le réseau, tel que les adresses IP et MAC, ainsi que le temps précis de passage ou d'envoi des messages, sous la forme suivante: 13 :56 :17 :421. (Figure 4.8).

Avec ce degré de précision et par le calcul de temps de transfert d'un message à envoyer de A vers B en savant leurs adresses on peut détecter l'attaque sur le message.

Prenons l'exemple suivant :

Soit le message MSG1 qui est transmit par A vers B avec un temps de transfert de 10ms

au pires de cas. Ensuite on suppose qu'il y a un autre hôte C n'est autorisé que a transmettre le message et n'est pas autoriser ni a lire ni a modifier son contenu.

Dans ce niveau, et à l'aide de sniffer IRIS on peut prouver que C occupe le message pendant un temps de 100ms (par exemple) dans lequel il procède à le modifier ça qui ne convient pas avec l'authentification et l'intégrité des données dans le réseau. Et puisque le sniffer détecte les informations des hôtes, ça nous a permis de bien localiser l'hôte malveillant.

Figure 4.8 Résultat d'une capture de trafic par le sniffer (2).

5.4.3 La disponibilité

La disponibilité peut être non vérifiée. Par exemple dans le cas suivant :

Si l'Aglet A transmet un paramètre (donnée, ressource, etc.) vers B qui l'utilise pour effectuer son travail et réaliser un service (calcul, test, etc.) et que pendant son transit, ce paramètre sera capturé par d'autres hôtes, alors que B, à un temps bien précis, a besoin de ce paramètre qui est indisponible, donc le temps de travail de B va se prolonger grâce au retard et parfois son travail peut échouer (Figure 4.9).

Noeud de commutation

A 1-13

Paramètre

1-1 1

Vers

t B t+1

t+2

1-12 B

Canalde Communication non sécurisé

Retard

Figure 4.9 Faille au niveau de la disponibilité.

Et par le même outil, nous avons pu découvrir ce type d'attaque, puisque le sniffer nous donne le temps d'occupation de message par un hôte avec précision (Figure 4.8).

5.5 Conclusion

Les solutions déployées pour la protection des ressources et de la communication entre les aglets au sein d'un réseau s'acharne pour défendre l'armature de la sécurité informatique formée de quatre buts différents mais complémentaires et indissociables, qui sont : la confidentialité, l'intégrité, l'authentification et la disponibilité.

Mais, malgré toutes ces techniques utilisées pour décliner les menaces et les attaques sur le réseau ainsi que toutes les approches de protection de la communication inter aglets, sur lesquelles nous avons mis l'accent dans ce chapitre, un système n'est jamais totalement sûr. L'implémentation de la cryptographie dans les systèmes informatiques offre de bons résultats au niveau de la sécurité des données.

Chapitre 6

Spécification de domaine

6.1 Introduction

Dans ce chapitre, nous allons décrire l'environnement (matériel et logiciel) dont lequel nous avons travaillé. Ensuite, nous allons présenter les étapes de la configuration du serveur Tahiti dans une machine.

6.2 Environnement de travail

6.2.1 Langage de programmation Java

Dans le cadre de notre travail nous avons utilisé le langage Java qui est favorable au développement des applications distribuées à base d'agents mobiles ainsi que la plateforme Aglets d'IBM. Alors il suffit que le JDK1.4 au minimum soit installé sur nos machines.

6.2.2 Environnement Matériel

Comme matériel, nous avons besoin d'au moins deux machines qui doivent être dotées d'un serveur d'agents pour pouvoir tester le bon fonctionnement des agents mobiles « aglets » sous un système d'exploitation Windows ou Linux.

- Machine1 : Toshiba Intel Pentium, Dual-coreT2O8O 1,73Ghz ,1GO de RAM - Machine2 : Versus Céléron, 1,73Ghz ,512MO de RAM

- Un réseau Local pour tester l'application.

6.2.3 Environnement Logiciel

NetBeans

Nous allons utiliser ce logiciel pour la programmation et le développement des classes en Java pour avoir les testes. C'est un outil de développement puissant, qui se distingue par sa facilité d'utilisation due à son ergonomie qui utilise toutes les technologies possibles d'aide au développement. NetBeans est un environnement complet incluant toutes les fonctionnalités de développement et toutes les technologies liées à Java permettant un développement rapide et visuel des applications java.

Serveur Tahiti

Tahiti est le serveur propre aux aglets, il est simple à configurer et facile à manipuler. Nous l'utiliserons pour faire les tests de manipulation des Aglets développés sous NetBeans.

Sniffer IRISv4.06.4

Nous avons utiliser ce logiciel dans nos tests, il est simple a manipulé (figure 5.1). Il permet de récupérer les données transitant par le biais d'un réseau local. et il permet une consultation aisée des données non-chiffrées et peuvent ainsi servir à intercepter des mots de passe qui transitent en clair ou toute autre information non-chiffrée, à résoudre des problèmes réseaux en visualisant ce qui passe à travers l'interface réseau, ou à effectuer de la rétro-ingénierie réseau à des buts d'interopérabilité, de sécurité ou de résolution de problème.

Figure 5.1 IRISv4.06.4

6.3 Configuration du serveur Tahiti

6.3.1 Installation de la plateforme

La version 2.0.2 d'Aglets est considérée comme la version la plus stable. Pour pouvoir l'installer, il faut d'abord installer JDK1.4 au minimum comme on a dit.

Les étapes suivantes décrivent la procédure d'installation de la plateforme Aglets 2.0.2 à partir du fichier archive aglets-2.0.2.jar que nous avons téléchargé gratuitement à partir du site de sourceforge.net : http : // sourceforge.net/projects/aglets/

1. Décompresser le fichier aglets-2.0.2.jar à l'aide d'un utilitaire de compression/décompression tels que Winzip et Winrar ou bien à l'aide de la commande:

Jar xvf aglets-2.0.2.jar

2. Après avoir décompressé ce fichier, les répertoires suivants apparaîtront à l'emplacement de la décompression:

o Bin contient des programmes exécutables pour le lancement et la configuration du serveur Tahiti.

o Cnf contient les fichiers de configuration de la plateforme Aglets.

o Public contient des exemples d'aglets et sera considéré comme répertoire racine pour les aglets créés par la suite.

o Lib contient les classes java nécessaires pour l'exécution de la plateforme.

3. Pour installer le serveur, il suffit de lancer l'execution du fichier « ant » se trouvant dans le répertoire bin et qui est un outil pour la compilation et l'installation des applications JAVA.

4. Exécuter la commande « ant install-home » qui permet de génèrer deux entée dans le magasin de clés créé par la plateforme JAVA qui servent pour l'authentification au lancement du serveur Tahiti.

5. Créer les variables d'environnement.

6. La dernière étape est le démarrage du serveur Tahiti par la commande agletsd.

Configuration des variables d'environnement

Pour démarrer le serveur Tahiti, nous devons ajouter deux nouvelles variables d'environnement AGLET _HOME et AGLET_PATH

o Sous Unix ou Linux avec bash

export AGLETS_HOME=/java/aglets-2.0.2

export AGLETS_PATH=$AGLETS_HOME

export PATH=$PATH :$AGLETS_HOME/bin

export CLASSPATH=$CLASSPATH :$AGLET_HOME/lib

o Sous Microsoft Windows

set AGLETS_HOME=c : \java\ aglets-2.0. 2

set AGLETS_PATH=%AGLETS_HOME%

set PATH=%PATH% ;\% AGLETS _HOME %\bin

set CLASSPATH=%CLASSPATH% ;\%AGLET_HOME%\lib

Démarrage du serveur Tahiti

Après avoir configuré la machine, on peut à ce stage lancer le serveur par la commande agletsd. On obtient une fenêtre d'authentification (Figure 5.2, Figure5.3)

Figure 5.2 Phase
d'identification/authentification.

Comme nous avons indiqué ci-dessus, le fichier .keystore contient deux utilisateurs par défaut:

- anonymous avec le mot de passe aglets.

- aglet_key avec le mot de passe aglets.

Figure 5.3 Serveur Tahiti.

6.4 Le diagramme des cas d'utilisation de Tahiti

Les diagrammes de cas d'utilisation sont des diagrammes UML utilisés pour donner une vision globale du comportement fonctionnel d'un système logiciel. Un cas d'utilisation représente une unité discrète d'interaction entre un utilisateur (humain ou machine) et un système. Il est une unité significative de travail. Dans un diagramme de cas d'utilisation, les utilisateurs sont appelés acteurs (actors), ils interagissent avec les cas d'utilisation (use cases).

6.4.1 Description du système

Le serveur Tahiti de la plateforme Aglets permet de manipuler nos agents. Dans nos test nous avons utilisé un réseau local pour ce là il est nécessaire d'avoir un serveur distant. Alors on peut distinguer trois acteurs externes au serveur :

L'utilisateur, Les agents mobiles Aglets et le serveur distant (avec un port différent de celle de serveur local).

Description des cas d'utilisations

· Configurer

-Manipuler les options de configuration de Tahiti tel que; general preference, network preference, security preference et server preference, etc.

-Modifier les fichier .policy et .props du serveur.

· Identifier/authentifier

- Ca ce fait avec la commande agletsd ensuite donner un login et un mot de passe de compte à ouvrir. (on peut aussi s'authentifier et identifier à travers le fichier .props qui contient les informations de compte par défaut par la commande suivante :agletsd --f.. \cnf\aglets.props

· Crée

- Lancer un aglet déjà existant dans la liste enregistrée.

- Ajouter une classe grâce au nom de son package pour lancer l'aglet.

· Cloner

- Créer un clone dans le même serveur ou dans un serveur distant (selon le numéro de port occuper et l'URL de serveur en question).

· Activate/Deactivate

- Activation ou désactivation des aglets grâce au bouton activate/desactivate dans le menu de serveur.

· Envoyer/Rétracter

Migration ou retirer un aglet selon son URL et le numéro de port.

· Echanger des agents

- Envoyer des agents (aglets).

- Retirer des agents (aglets).


· Communication par messages

- Envoyer un message à un agent distant.

- Répondre à un message envoyé par un agent distant.

Figure 5.4 Diagramme des cas d'utilisation du serveur Tahiti.

6.5 Conclusion

Dans ce chapitre nous nous sommes intéressées à étudier notre environnement de travail matériel (machines, réseau) et logiciel (serveur Tahiti, sniffer.. .) . Cet environnement demeure très important dans l'élaboration de notre solution sujet du chapitre suivant.

Chapitre 7

Conception et réalisation

7.1 Introduction

Après avoir fixé les bases théoriques de notre système, il faut pouvoir intégrer le tout dans une application réelle afin de bien assimiler le principe de fonctionnement et de démonter la faisabilité de notre approche.

Pour sécuriser les agents mobiles aglets au cours de leurs communications, nous avons proposé une solution basée sur le logiciel qui va être appliquée dans le cadre du domaine médical. Cette solution est le sujet de ce chapitre. En premier lieu nous avons spécifié les étapes de notre solution, en deuxième lieu nous avons élaboré une conception de cette dernière pour finir par sa implémentation.

7.2 Spécification de la solution

7.2.1 Etapes de travail

Les tests des codes simples des aglets qui communiquent constituent la première étape dans notre travail, suivie de l'étude des failles de sécurité existantes dans la plateforme au niveau de la communication. En suite, nous nous sommes intéressées à faire la conception de la solution proposée afin de passer à l'étape de l'implémentation. (Figure 6.1)

Tahiti

Sniffer

Tests de code (Aglet Simple)

Détermination des failles de iti

Formulation de solution

Conception de la solution

Implémentation

NetBeans

UML

Figure 6.1 Etapes de travail.

7.2.2 Description de la solution

La plate-forme Aglets a plusieurs caractéristiques et vu que l'agent est programmé en Java et que celui ci offre des possibilités de sécurité, nous avons donc pensé à intégrer une sorte d'approche de sécurité de cet agent.

Notre but est alors de sécuriser les aglets pendant leurs communications dans un système multi agents, pour transférer ou recevoir des informations médicales par exemple image d'extension .tiff.

Notre solution consiste à implémenter un ensemble d'agents coopératifs qui travailleront et manipuleront les informations en fonction des besoins d'un utilisateur ou du type de données.

Pour échanger des informations, les agents coopératifs se comportent comme suite :

Le premier agent, appelé agent utilisateur du fait qu'il doit être lancé par l'utilisateur, va satisfaire les désires de l'utilisateur, ce qui lui permettra à son tour de choisir et de lancer l'exécution d'un autre agent .Dès lors deux cas se présentent :

1) S'il s'agit d'un fichier qui contient des données confidentielles (par exemple en teste sur l'existence des codes, des identifiants, etc.), l'agent utilisateur lancera un autre agent appelé

agent cryptage qui va crypter les données du fichier à l'aide d'un algorithme de cryptage asymétriques le RSA (Figure 6.2).

Image.tiff en clair

Cryptage

Décryptage

Image.tiff en clair

Image codée

Figure 6.2 Cryptage/Décryptage.

2) Si l'utilisateur désire contrôler l'intégrité d'un document, l'agent utilisateur lancera un autre agent appelé agent hachage. Cet agent va contenir une classe de vérification développée en java implémentant une fonction de hachage par l'approche MD5. Dans notre cas nous avons réalisé nos tests sur un simple message puis sur une image médicale d'extension .tiff

L'agent hachage va créer un hash (Digest) lors de l'envoi d'un message et la transmet avec le message afin que le récepteur puisse recalculer l'hash du message et la comparer à celui envoyé.

Dans notre solution, l'agent utilisateur est un agent stationnaire qui s'exécute seulement sur la machine où il est créé, il permet de lancer d'autres agents mobiles tel que : agent cryptage, agent hachage qui communiquent entre eux par envoi de messages afin de réaliser des tâches précises.

Si jamais l'agent utilisateur a besoin d'informations supplémentaires inexistantes localement, ou d'interagir avec d'autres agents dans différents systèmes ou encore il arrive que l'on ait besoin d'exécuter une partie du code de cet agent sur une autre machine que celle sur laquelle est lancé, alors on aura besoin d'utiliser une méthode appliquée dans le modèle client serveur qui est le protocole RPC (Remote Procedure Call).

Chaque agent mobile, lancé par l'agent utilisateur possède un traitement sur les données (cryptage, vérification) dans la source. Pour cela il est nécessaire que le code de chaque agent mobile ait des paramètres et des informations qui permettront aux agents destination de réaliser le traitement inverse sur les données pour avoir les données en claire ou pour s'assurer que les données n'ont pas été altérées.

Nous considérerons les agents mobiles comme étant des aglets qui contiennent des codes java et qui communiquent entre eux pour maintenir une sorte de sécurité de leurs données.

L'organigramme suivant explique bien le fonctionnement de notre solution(Figure 6.3)

Données à envoyer

____
____

Agent utilisateur

Agent Cryptage

 
 
 
 

Agent hachage

 
 
 

Figure 6.3 Diagramme de la solution.

7.3 Conception de la solution

____

Afin d'arriver à la phase de l'implémentation de notre solution, il est nécessaire d'abord de passer par l'étape de conception, .Nous allons utiliser la méthode UML (Unified Modeling Language) pour la modélisation des données et des traitements par des diagrammes nécessaires.

7.3.1 Diagramme de classes

Le diagramme de classe offre une vue statique du système, en représentant les classes et les relations entre les classes.

La classe aglet possède beaucoup de méthodes tel que onArrival(), onCreation(), etc. Et tout autre agent hérite toutes ces méthodes comme il est indiqué dans la figure 6.4

Figure 6.4 Diagramme de classes

7.3.2 Diagramme de cas d'utilisation

Le diagramme de cas d'utilisation donne une vision globale du comportement fonctionnel de notre solution ce qui est indiqué dans la figure 6.5.

Figure 6.5 Diagramme de cas d'utlisation

Appel Encryptage : le cas d'utilisation Appel Encryptage est déclenché par l'Agent Utilisateur après avoir choisir la tâche à réaliser : Cryptage ou bien Hachage.

Appel Hachage : Ce cas d'utilisation est déclenché par l'Agent Utilisateur si jamais ce dernier a choisit de réaliser la tâche contrôle de l'intégrité du document.

Lancer Encryptage : déclenché par l'Agent Cryptage suite à un appel par le cas d'utilisation Appel Cryptage.

Lancer Hachage : déclenché par l'Agent Hachage après réalisation de la tâche Appel Hachage. Lancer Décryptage : l'agent Décryptage déclenche le cas d'utilisation Lancer Décryptage pour décrypter le document.

Lancer Comparaison : ce cas d'utilisation est déclenché par l'Agent Comparaison, ce dernier compare les deux hashs générées pour pouvoir déterminer si le message a été altéré ou non.

7.3.3 Diagramme de séquence

Le diagramme de séquence permet de représenter des collaborations entre agents selon un point de vue temporel, on y met l'accent sur la chronologie des envois de messages.

La figure 6.6 pressente le diagramme de séquence de notre solution :

Figure 6.6 Diagramme de séquence

7.4 Implémentation de la solution

7.4.1 Cryptage/Décryptage

A ce stade là, nous avons commencé à développer des classes java propre à notre solution.

La programmation de deux aglets ;celui du cryptage dans la source et du décryptage dans un site distant, a été la première tâche. En premier lieu, Nous avons appliqué le cryptage sur un simple message et en second lieu sur une image d'extension .tiff.

Nous avons choisi l'algorithme de cryptage RSA qui fonctionne par calcule de deux clés public et privé, la première est utilisée par la source pour crypter, et la deuxième par la destination pour décrypter.

Considérons deux aglets A et B :

A va envoyer des données confidentielles (message simple ou image. tif) à B , le processus

se fait comme suit :

1) L'agent A envoi un message d'indication à B pour lui informer qu'il va commencer le transfert des données.

2) L'agent B reçoit l'indication et procède au calcule des clés public et privé et n'envoie que la clé public vers A.

3) Suite à la réception de la clé publique, l'agent A crypte les données par cette clé et les envoie vers B.

4) Enfin, B procède au décryptage des données reçues à l'aide de la clé privé pour avoir les données d'origine.

NB: Comme nous l'avons déjà indiqué, la clé privée ne circule pas dans le réseau afin de la protéger contre les attaques.

Cryptage de message simple

Nous avons testé le bon fonctionnement de notre code qui crypte le message « AgletsXX » avant son transfert ,la figure 6.7 présente le processus de l'agent de cryptage A lors de son exécution sur le serveur Tahiti et la figure 6.8 présente celui de l'agent de décryptage B, d'un serveur distant.

Figure 6.8 Processus de l'agent de cryptage A.

Figure 6.8 Processus de l'agent de décryptage B.

On peut prouver alors que même si les données sont captées par d'autres sites malveillants ça ne risque pas de nuire à la confidentialité des données.

Cryptage d'image.tiff

Aprés avoir atteindre notre objectif de cryptage d'un simple message, nous nous sommes intéressées à ce niveau à appliquer cette approche à une image médicale d'extension tiff d'un os, qui doit circuler encryptée d'un aglet source vers un autre destination.

Comme échantillon d'image, nous avons choisi une image de résolution 64*64 mais ce choix n'est pas définitif car on peut crypter n'importe quelle image de n'importe quelle résolution. Pour crypter l'image, nous avons appliqué le même processus que celui d'un simple message.

7.4.2 Contrôle d'intégrité

Le processus contrôle d'intégrité comme nous l'avons indiqué dans la phase de conception, nécessite deux aglets : le premier va calculer un hash relatif au message puis il le transmet avec ce dernier afin que le deuxième aglet puisse recalculer ce hash et le comparer à celui envoyé pour pouvoir s'assurer que le document qui a circulé dans le réseau n'a pas été altéré par une station malveillante.

L'approche contrôle d'intégrité présente une sorte de sécurité sur les données à envoyer puisque les empreintes MD5 (qui est une fonction d'hachage cryptographique) permettent de contrôler l'intégrité des fichiers. En crée une empreinte (ou résumé électronique) des fichiers et à tous moment on peut vérifier si les fichiers correspondent toujours à leurs empreintes.

Si un fichier ne correspond plus à son empreinte cela signifie soit que ce fichier a été endommagé accidentellement (support physique, transmission...) soit que ce fichier a été volontairement infecté. L'empreinte MD5 garantit sérieusement l'intégrité du document.

Trois cas se présentent :

· Si un fichier ne correspond plus à son empreinte il a forcement été modifié ou alors c'est l'empreinte qui a été modifiée.

· Si un fichier correspond à son empreinte, il y à une très forte probabilité qu'il soit intègre.

· La probabilité que deux fichiers différents présentent la même empreinte est très faible.

7.4.3 Assurer l'authentification

Pour augmenter le degré de la sécurité de la communication de nos aglets au niveau de la propriété authentification, nous avons eu l'idée d'implémenter une approche qui sert à vérifier l'identité des aglets communicants avant l'envoi ou la réception des données.

Cela veut dire, protéger la communication des deux aglets contre une troisième entité malveillante qui essayera d'apparaître comme l'un des deux en leur volant leurs identité (numéro de port ou adresse IP),ce qui lui permettra de recevoir et d'envoyer des messages et même de brouillée la communication.

Notre approche consiste en un simple test qui doit être exécuté par les aglets communicants avant de commencer l'échange de leurs données.

Considérons deux aglets A et B qui communiquent par messages et que A va commencer la transmission.

Prenons par exemple la question : « qui est tu ?»

sa réponse : « Je suis celui qui devrait te répondre »

La question et sa réponse sont encryptées (Encquestion et Encréponse) et les deux aglets A et B doivent avoir ces quatre paramètres : question, réponse, Encquestion et Encréponse

Le processus d'authentification se fait donc comme suit:

1) L'aglet A envoie à B la question encrypter «Encquestion»;

2) L'aglet B qui reçoit la question encrypter « Encquestion» la décrypte puis la compare avec la sienne si c'est la même il envoie alors à A la réponse encrypter (Encréponse).

3) Lorsque l'aglet A reçoit la réponse encrypter, il la décryptera et la comparera avec la sienne :

- Si c'est la même alors il sera sûr que l'aglet B est bien ce qu'il affirme être, si non il conclura qu'il s'agit d'un aglet malveillant qui a voler l'identité de l'aglet B.

7.5 Conclusion

Ce chapitre a été consacré pour développer notre travail, nous avons commencé par la spécification de notre solution, et nous avons passé par une phase de conception afin d'arriver à l'implémentation. La sécurité de la communication inter aglets apportée par cette solution donne la possibilité à la plateforme Aglets d'être intégrée dans des applications travaillant sur des données confidentielles.

Chapitre 8

Conclusion générale

Les aglets ajoutent une dimension à la programmation objet. Ils permettent d'intégrer le réseau dans la conception de systèmes. Grâce à java, ils sont indépendants de la plateforme et permettent d'intégrer tous type de machine dans l'environnement. Mais L'utilisation de la plateforme Aglets dans n'importe quel contexte est souvent freinée par des questions de sécurité.

Ce mémoire présente un état de l'art de l'environnement dans lequel nous nous sommes intéressées à bien étudier les concepts d'un système multi agents (SMA) et ceux des agents mobiles. De plus nous avons réalisé une étude bien détaillée qui regroupe toutes les approches actuelles pour le contrôle de la sécurité des agents mobiles.

En outre, nous avons étudié la plateforme des agents mobiles Aglets. Bien évidemment, nous avons assimilé ses caractéristiques mais bien sûr ces failles au niveau de la communication inter aglets qui représente notre principal objectif. De ce fait, nous avons proposé une approche de sécurité basée sur le logiciel qui sert à sécuriser les messages transmis entre aglets.

Finalement, l'intégration des protocoles de sécurité dans Aglets nous a permis de conclure que cette plateforme est un concept idéal pour le développement des agents mobiles sécurisés. Dans le cadre de notre travail nous avons mis l'accent sur la sécurité au niveau de la communication, nous avons pu assurer les trois propriétés de sécurité :la confidentialité par le cryptage en utilisant l'algorithme RSA, l'intégrité des documents échangés par la fonction d'hachage MD5 et enfin la propriété d'authentification par l'approche de vérification des identités des aglets. Mais la sécurité peut régner tout le processus de cette plateforme et le meilleur est encore à venir.

Ce travail nous a été la bonne occasion d'améliorer notre connaissance dans l'Intelligence Artificielle et plus précisément dans le domaine des SMA, ainsi nous nous avons approfondi

dans l'étude de la plateforme Aglets et le serveur Tahiti en plus dans la programmation java ce que nous a permis de programmer des aglets capables de sécuriser leurs messages en cours de leur communication.

Bibliographie

[Blu 88] Manuel Blum et Sampath Kanan, "Designing programs to check their work", Tech-

nical report TR-88-009, International Computer Science Institute, December 1988.

[Com91] European Comunities. Information technology security evaluation criteria, Juin

1991

[FGS96a] Farmer, William; Guttmann, Joshua; Swarup, Vipin : "Security for Mobile

Agents : Issues and Requirements", in : Proceedings of the National Information Systems Security Conference (NISSC 96), 1996.

[Hoh97] F. Hohl. Time Limited BlackBox Security Protecting Mobile Agents from Malicious

hosts. Mobile Agents and security, 1998.

[ISO9594-8] ITU-T Recommendation X.509 j ISO/IEC 9594-8 : Information Technology Open Systems Interconnection -The Directory : Public Key and Attribute Certificate Frameworks, March 2000.

[Jan01] W.A. Jansen. A privilege management scheme for mobile agent systems,Janvier

2001.

[Mag02] Magdy Saeb, Meer Hamza, Ashraf Soliman, "Protecting Mobile Agents against

Malicious Host Attacks Using Treat Diagnostic AND/OR Tree", Arab Academy for Science,

Technology & Maritime Transport Computer Engineering Department, Alexandria, Egypt, 2002.

[Man02] Antonio Mafia, Ernesto Pimentel, "An efficient software protection scheme ", Uni-

versity of Malaga, Spain, 2002.

[Rot99] V. Roth. "Mutual protection of co-operating agents". In Vitek and Jensen.

[Sch97&al] F. B. Schneider and al., "Towards fault-tolerant and secure agentry". In Proceedings of 1 1th International Workshop on Distributed Algorithms, Saarbrflcken, Germany, September 1997.

[ST98] Sander Tomas and Tshudin Christian F. "Protecting Mobile Agents Against Ma-

licious Hosts", Mobile Agent Security, LNCS Vol.1419, Springer-Verlag, 44-60, (1988).

[Wil 98] Uwe G. Wilhelm. "Cryptographically Protected Objects". http ://lsewww.ep.ch/

wilhelm/Papers/CryPO .ps.gz.

Annexe A

Annexes

- Annexe 4.1

La stéganographie

Exemple

Considérons l'image suivante :

000

000

000

000

000

001

001

000

001

111

111

111

Chaque entrée de ce tableau représente un pixel couleur, nous avons donc une toute petite image 2*2. Chaque triplet de bits (0 ou 1) code la quantité de l'une des trois couleurs primaires du pixel (une image couleur aura dans presque tous les cas des groupes de 8 bits, octets, mais on n'utilise que 3 bits pour clarifier l'exemple). Le bit le plus à droite de chaque triplet est le fameux bit de poids faible LSB. Si on souhaite cacher le message 111 111 101 111, l'image est modifiée de la façon suivante : le bit de poids faible du ie octet est mis à la valeur du ie bit du message; ici on obtient :

001

001

001

001

001

001

001

000

001

111

111

111

- Annexe 4.2

IDEA (International Data Encryption Algorithm) :

L'algorithme est basé sur le mélange d'opérations de différents groupes algébriques. Il y a trois groupes algébriques dont les opérations sont mélangées, et toutes ces opérations sont facilement réalisables à la fois en logiciel et en matériel :

· OU exclusif,

· addition modulo 216,

· multiplication modulo 216+1.

Toutes ces opérations manipulent des sous-blocs de 16 bits. Cet algorithme est ainsi efficace même sur des processeurs 16 bits.

Le bloc de données de 64 bits est divisé en 4 sous-blocs de 16 bits : X1, X2, X3 et X4. Ces quatre sous-blocs deviennent les entrées de la première ronde de l'algorithme. Il y a huit rondes au total. À chaque ronde, les 4 sous-blocs sont combinés par OU exclusif, additionnés, multipliés entre eux et avec 6 sous-blocs de 16 bits dérivés de la clé. Entre chaque ronde, le deuxième et le troisième sous-bloc sont échangés. Enfin, les quatre sous-blocs sont combinés avec les quatre sous-clefs dans une transformation finale.

A chaque ronde, la séquence d'évènements est la suivante :

1. multiplier X1 et la première sous-clef;

2. additionner X2 et la deuxième sous-clef;

3. additionner X3 et la troisième sous-clef;

4. multiplier X4 et la quatrième sous-clef;

5. combiner par OU exclusif les résultats des étapes (1) et (3);

6. combiner par OU exclusif les résultats des étapes (2) et (4);

7. multiplier le résultat de l'étape (5) avec la cinquième sous-clef;

8. additionner les résultats des étapes (6) et (7);

9. multiplier le résultat de l'étape (8) par la sixième sous-clef;

10. additionner les résultats des étapes (7) et (9);

11. combiner par OU exclusif les résultats des étapes (1) et (9);

12. combiner par OU exclusif les résultats des étapes (3) et (9);

13. combiner par OU exclusif les résultats des étapes (2) et (10);

14. combiner par OU exclusif les résultats des étapes (4) et (10);

La sortie de la ronde est constituée des 4 sous-blocs produits par les étapes (11), (13), (12) et (14). Changez les deux blocs intérieurs (sauf lors du dernier rond) et cela donne l'entrée de la ronde suivante.

Après la huitième ronde, il y a une transformation finale :

1. multiplier X1 et la première sous-clef;

2. multiplier X2 et la deuxième sous-clef;

3. multiplier X3 et la troisième sous-clef;

4. multiplier X4 et la quatrième sous-clef;

Enfin les 4 sous-blocs sont réassemblés pour former le texte chiffré.

- Annexe 4.3

RSA (Rivest, Shamir et Adleman) Exemple :

Commençons par créer notre paire de clés :

Prenons 2 nombres premiers au hasard: p = 29, q = 37

On calcule n = pq = 29 * 37 = 1073

On doit choisir e au hasard tel que e n'ai aucun facteur en commun avec (p-1)(q-1) : (p-1)(q-1) = (29-1)(37-1) = 1008

On prend e = 71

On choisit d tel que 71*d mod 1008 = 1

On trouve d = 1079

On a maintenant nos clés:

· La clé publique est (e,n) = (71,1073) (=clé d'encryptage)

· La clé privée est (d,n) = (1079,1073) (=clé de décryptage)

On va encrypter le message 'HELLO'. On va prendre le code ASCII de chaque caractère et on les met bout à bout :

Ensuite, il faut découper le message en blocs qui comportent moins de chiffres que n. n comporte 4 chiffres, on va donc découper notre message en blocs de 3 chiffres :

Ensuite on encrypte chacun de ces blocs :

726^71 mod 1073 = 436 976^71 mod 1073 = 822 767^71 mod 1073 = 825 900^71 mod 1073 = 552 Le message encrypté est 436 822 825 552. On peut le décrypter avec d :

436^ 1079 mod 1073 = 726 822^ 1079 mod 1073 = 976 825^ 1079 mod 1073 = 767 552^ 1079 mod 1073 = 900 C'est à dire la suite de chiffre 726976767900.

On retrouve notre message en clair 72 69 76 76 79 : 'HELLO'.

- Annexe 4.4

MD5 (Message Digest version 5) Notations :

Les registres sont A,B,C,D. Le bloc de 512 bits est scindé en 16 mots de 32 bits, et stockés dans M[0],...,M[15].

On définit une table T[i] de 64 éléments, à partir de la fonction sinus. T[i] vaut la partié entière de 4294967296 * abs(sin(i)).

X <<< s est la rotation à gauche de X par s bits.

Une étape de calcul:

Pour j = 0 à 15 faire

Initialiser X[j] à M[j].

Fin pour.

/* Sauvegarde des registres */

AA=A BB=B CC=C DD=D

/* Premier tour. */

/* Soit [abcd k s i] notant l'opération

a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */

/* On fait les 16 opérations. */

[ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4] [ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8] [ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12]

[ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16] /* Deuxième tour. */

/* Soit [abcd k s i] l'opération

a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */

/* On fait les 16 opérations. */

[ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20] [ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24] [ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28] [ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32] /* Etape 3. */

/* Soit [abcd k s t] l'opération

a = b + ((a + H(b,c,d) + X[k] + T[i]) <<<s). */

/* On fait les 16 opérations. */

[ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36] [ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40] [ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44] [ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48] /* Etape 4. */

/* Soit [abcd k s t] l'opération

a = b + ((a + I(b,c,d) + X[k] + T[i]) <<<s). */

/* On fait les 16 opérations. */

[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52] [ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56] [ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60] [ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64] /* On réécrit dans les registres !*/

A=A+AA

B=B+BB

C=C+CC

D=D+DD

Résumé

Le concept d'agent a été introduit dans le domaine de l'intelligence Artificielle (IA) depuis la fin des années 70. Les systèmes muli agents(SMA) sont caractérisés par l'utilisation d'agents mobiles, une sorte particulière d'agents logiciels qui peuvent voyager de façon autonome d'un noeud à un autre dans un réseau. Les Agents Mobiles peuvent être utiles dans de nombreux domaines d'applications mais ils présentent un problème de sécurité surtout avec les applications dont les données sont confidentielles. Le développement d'une application sur un environnement ouvert distribué -comme l'Internet- nécessite l'intégration des protocoles de sécurité. L'implémentation de ces protocoles dans la plateforme Aglets a été l'objectif de notre mémoire.

Nous avons d'abord donné un aperçu des caractéristiques, spécifications et implémentations de Aglets. Puis, nous nous sommes intéressés à la sécurisation de la communication inter aglets en utilisant le paradigme d'agents et de systèmes multi agents. Nous avons examiné quelques manques de propriétés en se basant sur des tests comparant cette nouvelle approche avec ce qui existe.

Mots clés :

Systèmes multi agents, agent mobile, Aglets, aglet, communication, sécurité.

Abstract

The concept of Agents dates back to late seventies when it was used in the field of Artificial intelligence (AI). Multi Agent system is a software agent that can migrate autonomously from node to node across a network. They can be used for a variety of application but they pose a potential security threat no for the applications that need necessitate confidential transport of data.

The software development on distributed open environment raises the necessity of security protocols whose implementation on Aglets platform is the topic of our thesis.

In this thesis, we will start with an overview the characteristics, realization a specification of the platform Aglets. Then, we will focus on the security of communication between Aglets systems by using agents and multi agent paradigms.

We will also investigate some missing properties on the basis of tests that compare this new approach with others existing approaches

Keywords :

Multi agent System, Mobile Agent, Aglets, aglet, communication, security.






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








"Je ne pense pas qu'un écrivain puisse avoir de profondes assises s'il n'a pas ressenti avec amertume les injustices de la société ou il vit"   Thomas Lanier dit Tennessie Williams