next up previous
Next: Programme à 3 ans Up: Projet ASPIC:Algorithmes et Systèmes Previous: Algorithmes

Subsections

Système

La première partie du programme de recherche, appelée Algorithme, est principalement axée sur la recherche d'algorithmes efficaces dans le domaine de la cryptographie. La partie Système est plus applicative et s'intéresse aux protocoles cryptographiques pour la protection des codes mobiles.

Protection de Code Mobile

Le concept de code mobile naît de l'évolution de celui de système réparti. Il peut se définir d'une manière très générale comme l'ensemble des programmes capables de se déplacer pendant ou entre leurs exécutions. Comparativement à son prédécesseur, il offre une plus grande efficacité, une flexibilité accrue ainsi qu'une optimisation de la bande passante. Un code mobile est exécuté de manière séquentielle ou parallèle sur une très grande diversité d'hôtes. Les programmes mobiles sont capables de se mouvoir au sein d'un réseau d'une manière autonome.
Il existe deux types de codes mobiles : les applets et les agents. Les applets sont exécutés sur des machines hôtes à leurs demandes et pour leurs comptes. Les animations Java sur les pages web sont des exemples d'applets très utilisés. Les codes mobiles peuvent aussi être des programmes intelligents qui sont susceptibles d'effectuer un certain nombre de taches pour le compte de leur propriétaire. Ils sont alors appelés des agents mobiles. La protection de ces agents contre des hôtes malveillants représente un problème difficile. Il n'existe actuellement pas de solution pratique satisfaisante à ce problème. Deux types de problèmes peuvent donc se présenter :
L'attaque d'un programme mobile (en général un applet) à l'encontre de la machine hôte sur laquelle le programme est exécuté.
L'attaque de la machine hôte à l'encontre du code mobile (en général un agent) et des données qu'il transporte.

Protection de la machine hôte

Une solution à ce premier problème consiste à utiliser des mécanismes d'authentification et de contrôle d'accès. On peut aussi vérifier la sémantique du code mobile. Certains hôtes exécutent le code mobile dans un environnement restreint appelé sandbox et vérifient ainsi son comportement sans risque. L'approche sandbox, adoptée par Java, est toutefois assez lourde et il est quelquefois suffisant d'établir des schémas de contrôle d'accès qui limitent l'impact d'une attaque.

Protection de l'agent mobile

Ce deuxième problème nous intéresse particulièrement. Il n'a pas encore fait l'objet de nombreux travaux, conséquence probable de sa dificulté. Notons toutefois la thèse de S. Loureiro, étudiant de R. Molva (EURECOM), qui traite de ce thème. Le problème admet deux composantes.
La protection des données traite de la sécurité des données collectées et des données temporaires issues de calculs. Dans cette situation, l'intégrité des données est primordiale. Cependant, certaines applications réclament de plus la confidentialité et l'authentification des informations transportées par le code.
L'autre composante concerne la protection du code lui même. Ce problème est difficile car le code est à la merci de l'environnement d'exécution, potentiellement hostile. Une solution consiste à utiliser un noyau sécurisé, agissant pour le compte du propriétaire du code. Ce noyau sécurisé, qui dans la pratique peut être materialisé par une carte à puce, communique avec l'environnement d'exécution, afin de satisfaire la confidentialité et l'intégrité de l'exécution. Il existe aussi des solutions n'utilisant pas de noyau sécurisé. Des solutions à base de systèmes de type McEliece ou Niederreiter basés sur les codes correcteurs d'erreurs ont été récemment utilisées par S. Loureiro [7]. Concrètement, le système de McEliece utilise une matrice génératrice d'un code correcteur d'erreurs et n'admet pas de restriction sur le poids (de Hamming) du message. Il est donc d'une utilisation plus simple que le système de Niederreiter. L'avantage de ce dernier réside dans le taux de transmission, le nombre d'opérations pour encrypter le message et la taille de la clé publique. Ces deux systèmes, qui admettent une complexité équivalente pour un code donné, sont bien plus rapides que le système RSA à clé publique. Notons que la notion de rapidité lors de l'exécution d'un code mobile est très importante. De la rapidité du système dépendra l'évolution de la complexité des codes mobiles. Les codes susceptibles d'être utilisés dans le système de McEliece ou Niederreiter doivent posséder un algorithme de décodage très efficace. De plus, il doivent avoir une cardinalité grande pour éviter une énumération lors d'une attaque en force. Enfin, la matrice génératrice (ou de contrôle) d'un transformé du code ne doit donner aucune information sur le code lui-même. Les codes de Goppa répondent à ces critères et sont donc utilisés dans ces systèmes. Par ailleurs, les codes définis sur des anneaux peuvent représenter une alternative intéressante.

Applications des codes mobiles

Les applications liées aux codes mobiles sont très diverses et intéressent un grands nombres d'industriels. La recherche d'information sur des bases de données disséminées dans le réseau est l'application la plus simple envisagée par les développeurs. Dans le cadre du commerce électronique, les codes mobiles peuvent rechercher des informations, faire des achats, négocier, ou effectuer n'importe quelle action pour le compte de leur propriétaire. Ils peuvent aussi être employés comme agents de surveillance ou d'écoute sur un réseau. Un autre intêret des codes mobiles est qu'ils peuvent effectuer des opérations à distance, de manière autonome, sans dépendre de l'état du réseau.
Dans le cadre du calcul parallèle, des fragments de codes mobiles qui s'exécutent en parallèle sur différents hôtes permettent de résoudre des problèmes complexes.
Le nombre d'applications des codes mobiles parait illimité mais la complexité de ces applications dépendra de la capacité qu'aura le code mobile à se protéger efficacement des machines hôtes et du réseau.

Programme de recherche sur les codes mobiles

Notre but est d'élaborer des protocoles permettant de répondre aux divers impératifs de sécurité rencontrés. les solutions envisagées pourront s'appuyer sur les résultats de la partie Algorithme du projet. Nous comptons ainsi développer des outils cryptographiques adaptés aux besoins spécifiques des problèmes liés à la sécurité des codes mobiles et plus précisément à la sécurité de l'exécution. Notons que le modèle présenté par Loureiro est basé sur l'utilisation de fonctions booléennes qui permet de simplifier le cryptage du code. L'étape de transformation de l'exécutable en fonctions booléennes peut être vue comme une étape de compilation vers une architecture cible de type processeur booléen. La difficulté de cette étape ne doit pas être sous estimée. Nous pourrions envisager d'utiliser un autre type d'architecture cible, voire d'éliminer cette étape en compilant directement par exemple pour la java machine. Cette méthode complique l'étape de cryptage du code mais pourrait permettre d'utiliser des systèmes de cryptage à clés privées plus rapides.
next up previous
Next: Programme à 3 ans Up: Projet ASPIC:Algorithmes et Systèmes Previous: Algorithmes
Alexis Bonnecaze
2001-03-05