Chapitre V – Implémentation et Etudes de Performances
2 Le prototype
Afin d’implémenter notre modèle de contrôle d’accès, nous avions deux choix possibles : i)
soit développer un prototype à partir de zéro, ii) soit étendre un prototype déjà existant. Nous
avons choisi la seconde approche pour les raisons suivantes : i) nous voulions montrer que
les règles d’autorisation sur les associations peuvent être intégrées facilement dans un
modèle existant quel qu’il soit ; ii) nous voulions calculer le surcoût des règles d’autorisation
par rapport aux règles d’autorisation sur les nœuds. Pour cela, nous nous sommes basés sur
le seul prototype rendu public et développé par une équipe italienne. Ce prototype appelé ici
par le nom de son concepteur Damiani [40] a été écrit en java.
de Damiani [37]. Puis dans un second temps, nous décrivons les caractéristiques de notre
algorithme supportant les règles d’autorisation sur les associations.
2.1 L’algorithme de Damiani
L’algorithme de Damiani est basé sur l’approche "Matérialisation de la vue autorisée"
(présentée dans le chapitre II) pour calculer la vue autorisée. Cet algorithme évalue les
politiques de contrôle d’accès composées uniquement des règles d’autorisation sur les
nœuds. Il fonctionne en quatre phases qui peuvent être décrites indépendamment comme
suit :
1. Phase de construction de l’arbre DOM : l’algorithme parse le document source
et en construit une représentation DOM en utilisant l’outil Xerces. Une
allocation des structures de données allouées est faite à cette étape. Ces dernières
servent pour le marquage des nœuds par les règles d’autorisations qui les
concernent. A chaque nœud n est associé un tableau de 8 cases qui correspond
aux différents types d’autorisation adoptées par le modèle de Damiani (LDH
(local hard authorization)
25> RDH (recursive hard authorization) > L (local
authorization) > R (recursive authorization) > LD (local authorization over the
DTD) > RD (recursive authorization over theDTD) > LS (local soft
authorization) > RS (recursive soft authorization)). Chaque case du tableau
contient un vecteur qui sert à stocker toutes les autorisations du même type
définies pour le nœud n. Une représentation du nœud avec sa structure de
données est schématisée ci-dessous.
Vecteur LHD RDH L R LD RD LS RS nœud Vecteur LHD RDH L R LD RD LS RS nœud nœud
2. Phase de marquage de l’arbre : cette étape identifie les autorisations qui
concernent le demandeur d’accès (un sujet donné). Les nœuds sont marqués par
les règles d’autorisation qui s’appliquent sur eux. Plus précisément, à chaque
fois qu’un nœud est ciblé par une expression XPath définie par l’objet de la règle
d’autorisation, il sera marqué par cette règle. Bien évidement, la règle
d’autorisation sera ajoutée à la case du tableau qui correspond à son type. Par
exemple, si trois règles d’autorisation ont été définies pour le noeud n, deux
règles AN1 et AN2 de type récursif (R) et une autre AN3 de type local. Le
résultat du marquage sera comme suit :
AN3
LHD RDH L R LD RD LS RS
nœud
AN1, AN2
3. Phase de résolution des conflits et de propagation : cette phase consiste à
résoudre les conflits entre les règles d’autorisation définies sur le même nœud.
Dans un premier temps, l’algorithme utilise la politique de résolution de conflit,
"le sujet le plus spécifique est plus prioritaire" pour les règles d’autorisation
conflictuelles du même type (récursives, par exemple). Dans le cas où le conflit
persiste, l’algorithme applique la politique de résolution de conflit "la règle
d’autorisation négative est plus prioritaire". Par exemple, le marquage après la
résolution de conflit peut être comme suit :
"ε" : Signifie qu’aucune règle de type (LHD) n’a été spécifiée pour ce nœud.
ε ε ε ε -+ ε ε ε + - ε ε ε ε ε LHD RDH L R LD RD LS RS nœud
Une fois les conflits résolus, les règles d’autorisation de type récursif se
propagent à tous les descendants. A la fin de la phase de propagation, chaque
nœud sera marqué par un seul signe qui détermine son accessibilité. Comme les
types de règles sont ordonnés par ordre de priorité, le premier signe (+ ou -)
l’emporte. Par rapport à l’exemple précédant, c’est le signe "+" qui l’emporte.
Dans le cas où il n’existe aucun signe explicite (c-à-d il n’existe que des signes
"ε") dans le tableau, le nœud sera marqué par le signe "-" (politique fermée par
défaut).
4. Phase de suppression des nœuds : cette phase supprime tous les noeuds marqués
négativement e n’ayant pas de descendant positif. S’il existe un descendant
positif, l’algorithme supprime uniquement les attributs du nœud en question s’ils
existent.
2.2 Notre Algorithme
L’extension de l’algorithme de Damiani par des règles d’autorisation sur les associations
peut se faire d’une manière très simple. Nous décrivons, dans ce qui suit, cette extension tout
en précisant les phases étendues et les phases propres à chaque algorithme.
5. Phase de construction de l’arbre DOM : afin de marquer les nœuds par les
règles d’autorisation sur les associations, nous avons associé à chaque nœud un
conséquent, un nouveau vecteur a été ajouté chaque nœud. En total, chaque
nœud possède un vecteur pour les règles d’autorisation sur les nœuds et un
vecteur pour les règles d’autorisation sur les associations.
6. Phase de marquage de l’arbre : cette phase est étendue par l’évaluation des
règles d’autorisation sur les associations. Chaque nœud (i.e . descendant) ciblé
par une expression XPath correspondant à la concaténation des expressions
XPATH (i.e. XPATHAnc/XPATHDesc) spécifiées dans la règle sur les
associations, est marqué par cette règle. Par exemple, si le noeud Desc (présenté
dans le schéma ci-dessous) est ciblé par deux règles AA1 et AA2, le vecteur
associé au nœud descendant contient ces deux règles d’autorisation (AA1 et
AA2).
anc
Desc AA1, AA2 anc
anc
Desc
Desc AA1, AA2
Figure 33 : Marquage de nœuds
7. Phase de résolution de conflit : cette phase est également étendue par la gestion
des conflits entre les règles d’autorisation sur les associations ciblant le même
nœud. Les politiques de résolution de conflit décrites dans le chapitre IV (section
3.4) sont appliquées ici. Après cette phase, chaque nœud est marqué par une et
une seule règle d’autorisation sur les associations. Par exemple, d’après la Figure
33, si la règle AA2 est prioritaire, le marquage devient comme suit (Figure 34) :
anc Desc AA2 anc anc Desc Desc AA2
Figure 34 : Résolution de conflit
8. Phase de reconstruction de l’arbre : représente la dernière phase, après la
suppresion des nœuds, de l’algorithme qui est responsable de la reconstruction
de la vue autorisée du demandeur d’accès. C’est une phase indispensable pour
appliquer les deux mécanismes de base "le clonage et le shuffling" (la
description de ces deux mécanismes est présentée dans la Figure 35). Dans la
Figure 35, nous supposons que le processus de reconstruction a été déjà fait pour
les nœuds n
5, n
9et n
10. Ce processus s’effectue comme suit. Dans un premier
temps, pour chaque nœud marqué (e.g, le noeud n
6) par la règle d’autorisation
sur les associations, nous identifions son ancêtre spécifié dans la règle (e.g, n
1).
Nous clonons, ensuite, le chemin entre le nœud descendant et le père de son
ancêtre. Cela consiste, tout simplement, à créer de nouveaux éléments. Le
nombre d’éléments à créer est égal au nombre de nœuds existants sur le chemin
entre le descendant et le père de son ancêtre (e.g n
0). Chaque nœud cloné est
marqué par l’attribut = "clone" pour les distinguer par la suite des nœuds
originaux. Dans notre schéma (Figure 35), nous présentons les nœuds clonés par
des nœuds hachurés. Une fois le nouveau chemin créé, nous dissocions le nœud
descendant (e.g, n
6) et nous le rattachons au chemin cloné (étape 1 de la figure).
Dans un second temps, nous rattachons le chemin cloné au père du nœud ancêtre
(n
0). La politique de rattachement spécifie que les chemins clonés sont rattachés
à la suite des nœuds-fils originaux de l’ancêtre. Afin d’éviter les problèmes
d’inférence, une position aléatoire parmi les nœuds descendants clonés (étape 2
de la figure) est calculée. Ce dernier mécanisme est appelé le shuffling. C’est
une fonction qui cherche une position aléatoire parmi les clones (ou les
nouveaux éléments) pour rattacher le nouveau chemin conduisant au nœud
descendant dissocié.
n0 n1 n4 n2 n7 n8 n5 n9 n10 n3 n6 n6 clonage du chemin et dissociation du nœud n6 n0 n1 n4 n2 n7 n8 n6 n9 n3 n5Chercher une position aléatoire entre n5 , n9et n10(les clones) pour rattacher le n6 n10 Etape 1 Etape 2 nœud à dissocier n0 n1 n4 n2 n7 n8 n5 n9 n10 n3 n6 n6 clonage du chemin et dissociation du nœud n6 n0 n1 n4 n2 n7 n8 n6 n9 n3 n5
Chercher une position aléatoire entre n5 , n9et n10(les clones) pour rattacher le n6
n10
Etape 1
Etape 2 nœud à dissocier
Figure 35 : Mécanismes de clonage et de shuffling
politiques de résolution de conflit sur la visibilité de chemin et sur les associations de
fraternité.
Les politiques de résolution de conflits implémentées sur la visibilité de chemin
sont présentées dans Figure 36 qui correspond partiellement au tableau 3 de chapitre IV.
Opérande1 Opérande2 Resolution de conflit
anc1 anc2 Si anc1 est l’ancêtre de anc2
alors anc1 qui l’emporte
sinon anc2
[ ] ∀ Opérande2
[†] ∀ [†]
[Φ] [Φ] [Φ]
Figure 36 : Politiques de résolution de conflits implémentées pour la visiblité
Pour les associations de fraternité, la seule politique de résolution de conflit
implémentée est la "dissociation de toutes les associations de fraternité de n’importe quel
autre type de lien de fraternité". Cela correspond à la première ligne du Tableau 4 de
chapitre IV.
Opérande1 Opérande2 Résolution des conflits
[⊥] ∀ [⊥]
Figure 37 : Politiques de résolution de conflits implémentées pour la fraternité