• Aucun résultat trouvé

Implantation et fonctionnement des cœurs cryptographiques

4.3

Implantation des cœurs cryptographiques

4.3.1

L’architecture d’un cœur cryptographique est illustrée en Figure 41. Sur cette figure, les flèches en pointillés correspondent aux signaux de contrôle tandis que les flèches en trait plein correspondent à des bus de données/adresses. Chaque cœur cryptographique est constitué de divers composants. Tout d’abord, les services cryptographiques (AES-CTR, CBC-MAC, CCM et GCM) sont fournis par l’unité cryptographique dont la gestion est déléguée au contrôleur 8 bits embarqué dans le cœur. Ce dernier est programmé de manière à générer un flot d’instructions destiné à être exécuté par l’unité cryptographique. Le flot d’instruction généré par le contrôleur 8 bits est spécifique au mode de chiffrement mis en œuvre. Il est construit à partir du jeu d’instruction de l’unité cryptographique, celui-ci est étudié plus en détail dans la partie suivante. Ensuite, le cache de clés permet le stockage des clés de round AES nécessaires au chiffrement et déchiffrement des paquets. Pour finir, les cœurs communiquent avec le processeur hôte et les autres cœurs cryptographiques par l’intermédiaire de quatre ports de données différents : deux ports pour les opérations d’E/S vers le processeur hôte (en haut de la figure) et deux ports de communication inter-cœur pour les opérations d’E/S vers les cœurs adjacents (à gauche et à droite de la figure). Le caractère asynchrone des communications entre un cœur cryptographique et le reste du système est rendu possible par l’utilisation de deux FIFO (512 x 32 bits) et d’un registre à décalage (4 x 32 bits). start done rd/wr mask equ_flag Unité cryptographique Contrôleur 8 bits Cache de clés @ 32 32 32 32 Registre à décalage Inst @ 32 6 6 FIFO de sortie FFIO d’entrée Mémoire d’inst. partagée Depuis le cœur N-1 Générateur de sous clés Crypto cœur N+1 Contrôleur principal Mémoire partagée @ @ @ 32 in out Depuis/Vers le crossbar 8 start, done @ Vers contrôleur suivant Figure 41 : Architecture d’un cœur cryptographique

Les ports de communication inter-cœur rendent possible le transfert de données entre un cœur cryptographique et le cœur cryptographique situé directement à sa droite. Ces ports rendent possible le traitement d’un même paquet par plusieurs cœurs. Ce mode de fonctionnement est particulièrement utile lors de l’exécution du mode de chiffrement CCM (cf. Annexe C) lorsque chaque unité cryptographique n’embarque qu’une seule primitive de

chiffrement AES. En effet, lorsqu’un paquet a besoin d’être chiffré à l’aide du mode de chiffrement CCM, l’exécution du mode CBC-MAC peut être attribuée au premier cœur tandis que l’exécution du mode CTR est attribuée au second. Le port de communication

inter-cœur est alors utilisé pour le transfert, depuis le inter-cœur CBC-MAC vers le inter-cœur CTR, des

données du paquet et de la valeur MAC. Le débit total se trouve alors doublé par rapport au cas où une seule primitive de chiffrement AES est utilisée (mais deux cœurs sont alors utilisés). Il est à noter que les ports de communication inter-cœur perdent une partie de leur intérêt lorsque l’on considère la possibilité de reconfigurer dynamiquement l’unité

cryptographique dans le but d’y embarquer deux primitives de chiffrement. En effet, il est

alors possible d’exécuter le mode chiffrement CCM sur un seul cœur cryptographique tout en profitant d’un débit équivalent à celui de la solution basée sur l’utilisation de deux cœurs cryptographiques. Les temps de reconfiguration dynamique pouvant toutefois être pénalisant, nous avons fait le choix de conserver ces ports de communication.

Comme dit précédemment, les cœurs cryptographiques doivent être compatibles avec plusieurs modes de chiffrement (CTR, CBC-MAC, CCM et GCM). Or, l’utilisation d’une machine d’état pour le contrôle de ces cœurs mènerait à l’implantation de circuits multimodes excessivement complexes. Afin de réduire la complexité des cœurs tout en améliorant leur interopérabilité, il a été décidé d’implanter leur logique de contrôle sous la forme d’un contrôleur programmable. Ce dernier est chargé de générer un flot d’instructions exécutable par l’unité cryptographique. En outre, il est aussi chargé de gérer les communications entre le cœur et le contrôleur principal du MCCP. L’utilisation d’un contrôleur programmable à la place d’une machine d’état permet de simplifier la mise en œuvre des boucles et des structures de contrôle (ex. if-else, for, etc.) nécessaires à l’implantation des modes de chiffrement.

Étant donné que ce contrôleur n’effectue aucun calcul complexe, un simple contrôleur 8 bits de type Picoblaze [Ken00] a été utilisé pour son implantation. Celui-ci embarque un banc de registre de 16 x 8 registres pour sa version Virtex 4 (et 32 x 8 pour sa version Virtex 6) et quelques opérateurs logiques et mathématiques suffisants pour notre application. Chaque instruction est exécutée en deux cycles d’horloge et le nombre d’instructions est limité, pour la version V4, à 1024 instructions stockées dans un bloc RAM du FPGA (4096 pour la version V6). Le contrôleur Picoblaze supporte aussi la gestion des interruptions. Pour finir, une instruction HALT permettant d’interrompre le fonctionnement du contrôleur jusqu’à la levée d’un signal d’interruption a été ajoutée au Picoblaze dans sa version V4 (dans sa version V6 le signal de mise en veille sleep présent de façon standard en entrée du contrôleur est utilisé). Par la suite (cf. partie 3.5), nous reviendrons plus longuement sur l’intérêt que peut avoir la mise en pause du fonctionnement du contrôleur embarqué dans les cœurs cryptographiques.

L’architecture des cœurs cryptographiques ayant été décrite, le processus de traitement des paquets et la mise en œuvre des modes de chiffrement peuvent maintenant être détaillés.

Traitement des paquets et mise en œuvre des modes de chiffrement

4.3.2

Une fois le traitement d’un paquet attribué à un cœur cryptographique, le processus de traitement est effectué de la manière suivante :

1. D’abord, le contrôleur principal lance si besoin est la génération des sous clés cryptographiques. Ensuite, il envoie au contrôleur du cœur cryptographique sélectionné les paramètres de configuration nécessaires au traitement du paquet de données. Pour finir, il envoie un signal start au cœur cryptographique.

2. Le contrôleur du cœur cryptographique commence alors les calculs préalables nécessaires à l’initialisation du mode de chiffrement sélectionné.

3. Une fois le mode de chiffrement initialisé, les données sont lues par bloc de 128 bits depuis la FIFO d’entrée avant d’être traitées par le cœur. Le résultat du traitement d’un bloc est écrit soit dans la FIFO de sortie soit dans le registre à décalage du port de communication inter-cœur.

4. Une fois que tous les blocs de données ont été traités, le contrôleur du cœur notifie, via le signal done, la fin du traitement au contrôleur principal du MCCP.

Afin de protéger le processeur hôte d’éventuelles attaques logicielles, la FIFO de sortie est réinitialisée lorsque l’authentification d’un paquet échoue. De cette façon, le processeur hôte n’est jamais exposé à un paquet corrompu.

Les étapes 2 et 3 varient en fonction du mode de chiffrement mis en œuvre et de la configuration des cœurs. Toutefois, le traitement d’un paquet suit toujours les modes de

traitement suivants :

 Les paquets en provenance d’un même canal peuvent être traités en parallèle sur différents cœurs.

 Les paquets en provenance de différents canaux peuvent être traités en parallèle sur différents cœurs.

 N’importe quel paquet peut être traité par n’importe quel cœur. Toutefois, il se peut qu’il soit au préalable nécessaire de reconfigurer dynamiquement l’unité

cryptographique. Lorsqu’une telle reconfiguration n’est pas envisageable, l’unité cryptographique doit être configurée de façon à être compatible avec l’ensemble des

modes (c'est-à-dire : AES et multiplieur de Galois). En conclusion, bien qu’étant intrinsèquement homogène, le MCCP peut être modifié de manière à se comporter comme un cryptoprocesseur multicœur homogène ou hétérogène.

 Le traitement d’un paquet nécessitant un chiffrement CCM peut être distribué sur deux cœurs cryptographiques. Lorsqu’il est possible de reconfigurer dynamiquement les cœurs cryptographiques, l’intérêt de cette pratique diminue. Le Tableau 14 page 102 récapitule l’ensemble des différents modes de fonctionnement possible et précisent leurs performances. Le mode traitement à appliquer à un paquet est

sélectionné par le contrôleur principal du MCCP lors de l’étape d’attribution du traitement d’un paquet à un cœur cryptographique.