• Aucun résultat trouvé

Exemple d’un prototype HSM sur une carte ZedBoard à base de FPGA Zynq

Type de ressource Utilisation Logique (LUTs) 59,69 % Registres 3,67 % Mémoire (Blocs RAMs) 6,29 %

DSPs 0 %

TABLE5.5 – Résumé de l’utilisation des ressources matérielles.

5.3.3

Augmentation de l’empreinte mémoire

La flexibilité de protection fournit par le HSM, la capacité d’affiner et de le contrôler par le logiciel a un prix : les structures de données utilisées par le contrôle sont stockées dans la mémoire externe. De plus, les MAC utilisés pour protéger l’intégrité des pages mémoires sont également stockés dans la mémoire externe.

Le Master Block occupe 1/256 (0,39 %) de l’espace total de mémoire à protéger. Par exemple, la protection d’un espace de 4 Gio de mémoire nécessite 16 Mio pour stocker le Master Block(qui contient les SP, les PSPE et le MMT).

Avec les hypothèses présentées précédemment, protéger l’intégrité d’une page mémoire en lecture seule (via des MAC) nécessite un quart de page supplémentaire (25 %) pour y stocker les MAC calculés. De même, protéger une page en lecture-écriture (via un arbre) nécessite un

tiers de page supplémentaire (33 %).

À titre d’exemple, un système disposant d’une mémoire externe de 4 Gio avec 256 Mio de mémoire en lecture-écriture protégée en intégrité et 1 Gio de mémoire en lecture seule protégée en intégrité, consacrerait 16 + 256/3 + 1024/4 = 357 Mio (8,7 %) de sa mémoire externe aux structures de données nécessaires pour la protection (Master Block, MAC et MT).

5.3.4

Configurations et résultats

5.3.4.1 Configurations

Dans le but d’estimer l’impact sur les performances introduit par le module HSM, plusieurs expériences ont été menées dans diverses configurations. Une de ces configurations est utilisée comme référence et est nommée HD (HSM Disabled). Dans cette configuration le HSM est désactivé : tous les accès de la mémoire externe passent par le HSM mais aucune politique de sécurité n’est appliquée, le HSM est transparent. Cette référence est utilisée pour tenir compte de la dégradation de performances introduite par le routage de toutes les transactions par la partie FPGA qui tourne à une fréquence beaucoup plus faible que la partie PS.

Les autres configurations diffèrent par la politique de sécurité appliquée de façon identique à tout l’espace mémoire de la pile logicielle (le noyau Linux et des applications). Elles se distinguent aussi par la granularité de la protection : le HSM fonctionne sur les pages mémoire et prend en charge plusieurs tailles de page (4 kio, 64 kio, 1 Mio et 16 Mio). Ces configurations sont notées Gs_ci où :

— s ∈ {4K, 64K, 1M, 16M } indique la granularité de la protection. — c ∈ {N, O, C} représente la protection de confidentialité appliquée :

— N pour None : la page mémoire n’est pas chiffrée.

— O pour One-time pad (OTP) : la page mémoire en lecture seule est chiffrée en utili- sant le mode compteur du chiffrement par bloc.

— C pour Cipher Block Chaining (CBC) : la page mémoire en lecture-écriture est chiffrée en utilisant le mode CBC du chiffrement par bloc.

— i ∈ {N, M, T }. s représente la protection d’intégrité appliquée : — N pour None : la page mémoire n’est pas protégée en intégrité.

— M pour ensemble de MAC (Mac set) : la page mémoire est protégée par des en- sembles de MAC classiques, calculés sur des blocs de données en utilisant le mode CBC-MAC du chiffrement par bloc. Ce mode de protection est appliqué sur des pages en lecture seule.

— T pour arbres de MAC (MAC Tree) : la page mémoire en lecture-écriture est pro- tégée par un arbre de Merkle dont les nœuds sont des MAC calculés en utilisant le mode CBC-MAC du chiffrement par bloc.

Par exemple, la configuration G1M_CT signifie que l’espace mémoire de la pile logicielle est divisé en pages de 1 Mio et chaque page est chiffrée par le mode CBC et protégée en intégrité par des arbres de MAC. Un deuxième exemple d’une configuration est G4K_NN pour lequel l’espace mémoire est divisé en pages de 4 Kio et sans protection.

Par contre, quelques configurations n’ont pas de sens et donc ne seront pas prises en compte dans nos tests. Ce sont :

— Gs_OT et Gs_CM : la combinaison entre un mode appliqué sur des pages en lecture seule avec un mode appliqué sur des pages lecture-écriture.

— Gs_cM : les configurations utilisant le mode d’intégrité M ne peuvent pas être appli- quées sur un espace mémoire de la pile logicielle qui contient des pages en lecture- écriture. Ces configurations pourraient constamment détecter des violations d’intégrité, ce qui pourrait arrêter le système. Le même problème ne se pose pas avec le mode de confidentialité O car, si on l’applique sur des pages en lecture-écriture, il fonctionne, même si dans un point de vue de sécurité n’a pas de sens. Nous utilisons ce mode uni- quement pour l’évaluation des performances.

Dans l’ensemble, nous évaluons 21 configurations : HD, Gs_NN, Gs_ON, Gs_CN, Gs_NT et Gs_CT où s ∈ {4K, 64K, 1M, 16M }.

Dans toutes ces configurations une pile logicielle complète (Linux, BusyBox, applications) a été exécutée. De plus, plusieurs benchmarks classiques ont été utilisés :

— Dhrystone qui mesure les performances de calcul sur des entiers — Whetstone qui mesure les performances de calcul flottant

— RAMSpeed et RAMSMP qui mesurent les performances des accès mémoires

Enfin, le temps d’initialisation du noyau Linux a également été mesuré en utilisant l’horo- datage des messages du noyau.

Dans l’ensemble, 12 mesures différentes ont été effectuées dans chacune des 21 configura- tions :

— Linux init start (en secondes) : temps entre l’initialisation du timer matériel et le premier message du processus init

— Linux init duration (en secondes) : durée de démarrage du processus init. — dhrystone 10000000 (en dhrystones par seconde) : benchmark de la puis-

sance de calcul entier (sortie de dhrystone 10000000)

— whetstone 10000 (en MIPS) : benchmark de la puissance de calcul en virgule flot- tante (sortie de whetstone 10000)

— RAM bandwidth (en Mio/s) mesurée avec RAMSpeed et RAMSMP. Un Gio de don- nées est lu ou écrit par un seul CPU (RAMSpeed) ou deux CPU, chacun exécutant un processus de lecture ou d’écriture (RAMSMP). La zone de 1 Gio est divisée en blocs de 1 Kio ou 32 Mio. Chaque bloc est lu ou écrit à plusieurs reprises et la durée moyenne est mesurée. Comme les blocs de 1 kio peuvent tenir dans les caches du processeur, l’utilisation de cette taille de bloc mesure principalement la bande passante entre le processeur et les caches. Les blocs de 32 Mio ne rentrent pas dans les caches et sont utilisés pour tenir compte de la latence de la mémoire externe. En total, huit tests ont été réalisés :

— RAM IW-2P-1GB-1kB : RAMSMP, Écriture, 2 processus, 1 Gio de données, blocs de 1 kio

— RAM IW-2P-1GB-32MB : RAMSMP, Écriture, 2 processus, 1 Gio de données, blocs de 32 Mio

— RAM IR-2P-1GB-1kB : RAMSMP, Lecture, 2 processus, 1 Gio de données, blocs de 1 kio

0.00 10.00 20.00 30.00 40.00 50.00 60.00 70.00

Linux init start HD

G16M_NN G16M_ON G16M_CN G16M_NT G16M_CT G1M_NN G1M_ON G1M_CN G1M_NT G1M_CT G64K_NN G64K_ON G64K_CN G64K_NT G64K_CT G4K_NN G4K_ON G4K_CN G4K_NT G4K_CT

(a) Valeurs absolues (s)

0.00 10.00 20.00 30.00 40.00 50.00 60.00

Linux init start HD

G16M_NN G16M_ON G16M_CN G16M_NT G16M_CT G1M_NN G1M_ON G1M_CN G1M_NT G1M_CT G64K_NN G64K_ON G64K_CN G64K_NT G64K_CT G4K_NN G4K_ON G4K_CN G4K_NT G4K_CT (b) Ratio (X/HD)