Next: Programme à 3 ans
Up: Projet ASPIC:Algorithmes et Systèmes
Previous: Algorithmes
Subsections
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.
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.
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.
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.
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.
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: Programme à 3 ans
Up: Projet ASPIC:Algorithmes et Systèmes
Previous: Algorithmes
Alexis Bonnecaze
2001-03-05