securisation/pro composants materiel securisation/protection de
Transcription
securisation/pro composants materiel securisation/protection de
Projet Systèmes Embarqués 2008/2009 SECURISATION/PROTECTION DE COMPOSANTS MATERIELS SUR ASIC & FPGA Dris AGROUR Farid AIT ACHOUR Wajdi BEN SALEM Alain TRAN Encadré par : Bertrand LEGAL Lilian BOSSUET SOMMAIRE INTRODUCTION …………………………………………………………………………………...……………………..1 1. PRESENTATION DU SUJET …………………………………………………………………….…………………………2 1.1. EXPLICATION DU CONTEXTE 1.2. OBJECTIFS ET CAHIER DES CHARGES 1.3. ENVIRONNEMENT DU SYSTEME 2. SPECIFICATIONS MATERIELLES …………………………………………………………………………………………7 2.1. ARCHITECTURE DU SYSTEME MMSC 2.2. DEFINITION DES SCENARIOS 2.3. CHOIX DES IPS DE CRYPTAGE 3. L’INTERFACE GRAPHIQUE ………………………………………………………………………………………….…18 3.1 BESOIN 3.2 LES ETAPES DE CONFIGURATION 3.3 DIAGRAMMES DES CLASSES 4. PERFORMANCES APRES SYNTHESE ……………………………………………………….…………………………20 5. SIMULATION ET TEST ……………………………………………………………………….…………………………22 5.1. SIMULATION SOUS MODELSIM 5.2. IMPLEMENTATION SOUS XILINX SPARTAN 3E 6. CONCLUSION ………………………………………………………………………………….…………………………26 ANNEXES ….………………………………………………………………………….………………………………….27 Introduction Les progrès de la technologie de fabrication des circuits intégrés permettent d'atteindre une densité telle que des systèmes complets peuvent maintenant être regroupés sur une seule puce. Les applications de téléphonie mobile, de télévision numérique ou de visiophonie sont des exemples de tels systèmes intégrés. Cela induit deux problèmes majeurs. Tous d’abord, toute la sécurité repose sur un seul et même circuit. Si celle-ci n’est pas suffisante alors cela peut engendrer une faille de sécurité importante dans le système. Ensuite, les besoins croissants de flexibilité des produits imposent l'intégration de nombreuses fonctions, ou mode de fonctionnement, complexe mais surtout couteuse envers leurs clients. Malheureusement il peut arriver que les clients ne souhaite pas payer pour l’ensemble des fonctions car ne veulent utiliser que certaines d’entres elles. Le cadre de ce projet est donc de répondre au mieux à ces deux problématiques et consiste au développement d’un contrôleur en charge des droits d'utilisation de composants matériels. Nous commencerons par présenter le cadre technique du sujet, avant de continuer sur le détail des spécifications matérielles puis logicielles, pour finalement terminer par les vérifications et les performances du système. Page | 1 I1.1. Présentation du sujet : EXPLICATION DU CONTEXTE : Pour faire face à la demande du marché, les fabricants de produits publics doit faire preuve d’innovations et d’ingéniosité. Leurs produits doivent faire face aux besoins grandissant de leurs clients et doivent donc fournir un maximum de fonctionnalités. L’on pourra prendre l’exemple du téléphone portable. Aujourd’hui, à part sa fonctionnalité principale qui est de téléphoner, celui-ci doit pouvoir fournir des services supplémentaires comme des jeux, l’accès à internet, ou le multimédia (musique, TV, photos). Ces systèmes à complexité grandissante peuvent être considérés comme des systèmes incluant des sous systèmes représentatif de chaque fonctionnalité. La complexité des systèmes oblige les concepteurs à relever le niveau d'abstraction de leur description et à réutiliser des blocs fonctionnels préconçus nommée IP (Intellectual Property). Il existe trois types d’IPs : IP HARD : Ces IP sont directement prêt à l’emploi et complètement optimisé et fixe. IP SOFT : Ce sont des algorithmes décrit avec un haut niveau d’abstraction. Ils sont utilisables dans un design particulier et complètement flexible (générique) et personnalisable. IP FIRM : Ces IP sont un mélange entre les IP Hard et Soft. Ce sont des circuits postsynthèse (ou post-compilation) pré-optimisé. L’intégration d’IP’s dans le monde industriel offrent un avantage considérable dans le temps de développement de l’application mais introduit aussi des désavantages comme : • La copie frauduleuse. • Le reverse engineering. • L’application d’attaque sous différentes formes (Hackers, Pirates….). • L’augmentation de la complexité du circuit. • L’introduction de circuits rarement utilisés. Le marché des IP’s étant en pleine expansion, ceux-ci nécessitent donc: • Des systèmes de détection et de protection contre la copie ou le reverse engineering. • L’intégration dans une IP globale (IP multi mode) pour diminuer la complexité du circuit. • Des optimisations en consommation contre les circuits non utilisés. Page | 2 1.2. OBJECTIFS ET CAHIER DES CHARGES: Le sujet faite suite à la description des différents problèmes détaillés dans le chapitre précédent et consiste à étudier et reconcevoir un contrôleur matériel en charge des droits d'utilisation de composants matériels. Le rôle de ce contrôleur est de s’assurer qu’un circuit ne peut être utilisé que par des personnes (ou autres circuits) possédant les droits nécessaires. La mise en œuvre de ce type de circuit peu apparaître : • Dans le cadre de la lutte contre le piratage des IP ou l’on désire éviter leurs contrefaçons, voir être capable d’identifier la source de la fuite • Lorsqu’un client souhaite acheter un composant pour lequel il ne souhaite pas bénéficier de l’ensemble des fonctionnalités • Dans un circuit qui peut être la cible d’attaques matérielles et ou chaque communication et chaque changement doit être sécurisée. Des travaux ont déjà été réalisé dans ce domaine au travers d’un stage l’an dernier ayant amené une version “beta” d’un tel contrôleur. L’objectif est maintenant de reconcevoir ce contrôleur en prenant en considération l’ensemble des primitives de sécurité nécessaires (algorithmes de cryptage différents, taille des clefs, sélection des opérations à sécuriser, etc.). Le travail à réaliser consiste en 6 étapes : • Comprendre les différentes protections mises en œuvre (DRM, tatouage, trames cryptées, etc.). • Comprendre et trouver des IP de cryptographie (DES, AES, TEA, etc…) sur internet. • concevoir un nouveau contrôleur matériel facilement configurable sous contrainte de surface et de consommation d’énergie. • Concevoir une interface graphique QT/Java permettant de créer/configurer des contrôleurs matériels. • Mesurer les performances du contrôleur sur différents FPGA /ASICs. • Réaliser un démonstrateur matériel sur FPGA autour d’un processeur (avec ou sans OS) Le système devra pouvoir faire face à différentes attaques : • ATTAQUES FORCE BRUTE : Pour activer une fonction ou une norme il sera demandé à l’utilisateur sa clé. Si l’utilisateur n’en possède aucune et qu’aucune protection n’est adoptée alors celui-ci pourra réaliser autant de tentatives qu’il souhaite jusqu’à tomber sur la bonne clé. Une solution est donc (comme pour les cartes bancaires) de limiter à trois essais la saisie des clés. Une seconde solution serait d’appliquer une temporisation après chaque tentative permettant ainsi d’allonger considérablement le temps de recherche de la clé. On comprend que plus cette temporisation sera élevée et plus la protection sera importante. Par exemple, dans le cas d’un chiffrement à 128 bits, il existe 2 128 possibilités. Si l’on applique une temporisation de 1 seconde alors il faudra plus d’un milliard d’année pour réaliser toutes les possibilités. Page | 3 • PROBLEME DE PLAGIA : Pour contrer les problèmes de copies frauduleuses de notre contrôleur il est important de lui spécifier une clé supplémentaire qui servira de numéro de série. Pour vérifier que le produit n’est pas une copie frauduleuse, il est donc important de pouvoir récupérer cette clé. Pour cela nous mettrons en place un mécanisme ordonné permettant de spécifier que l’on souhaite récupérer et renvoyer la valeur de cette clé. • ATTAQUE DU BUS DE TRANSMISSION : Une personne malveillante peut se débrouiller pour capter une trame diffusée dans le bus de transmission. Pour nuire au système, la personne peut donc émettre cette trame et modifier le fonctionnement du système. Pour contrer ce problème, chaque trame se verra attribuée un numéro. A chaque envoi le numéro sera incrémenté (par ex). Ainsi si l’on est arrivé au numéro 18 et que la personne malveillante envoie la trame dont le numéro est 4 alors le système pourra détecter l’erreur et agir en conséquence. • ATTAQUE PAR MANIPULATION DE BITS: Les états de chaque fonction ou mode seront contenus dans un RAM. Cependant, de nos jours, certaines techniques au laser permettent la modification de bit d’un circuit. Par exemple, dans notre cas une personne pourrait très bien manipuler les bits contenus dans la RAM. La solution que l’on adoptera ici sera de ne jamais écrire une donnée dans la RAM sur 1 bit mais au minimum sur 2 bits. Exemple : Si une variable doit avoir l’état 1 ou 0 ont codera la variable de telle sorte qu’elle valle 10 (pour 1) et 01 (pour 0). On ne prendra surtout pas 10 et 11 car la modification du deuxième bit ne permettra pas de détecter l’erreur. Selon le nombre d’erreurs consécutives détectées et l’application on pourra réagir de différentes manières : • Blocage du système. • Application d’une temporisation. • Ne rien faire. Au niveau matériel, le travail consistera donc à concevoir un nouveau contrôleur matériel. Nous réaliserons une première version contenant une entrée pour le canal crypté et une entrée pour le changement de mode. Page | 4 La seconde version consistera à n’utiliser qu’une seule entrée pour le canal crypté qui contiendra le changement de mode. Les objectifs seront de : Minimiser l’impact en consommation. Minimiser l’utilisation en surface. Augmenter la sécurité de transmission. Améliorer l’intégration au sein d’un même système. A l’état initial aucune fonctionnalité ne devra être activée car il faut attendre de vérifier si la personne à bien les droits nécessaires. Pour cela s’il existe n modes de fonctionnement, nous gérerons n+1 états. Cet état supplémentaire sera fixé à l’initialisation et consistera à mettre à 0 l’horloge ainsi : On diminuera la consommation du circuit. On évitera les failles de sécurité. Au niveau logiciel, l’idée est de concevoir une interface graphique Java permettant de créer ou configurer des contrôleurs matériels. L’interface conçue pour le développeur permettra de configurer le code VHDL générique à partir des paramètres entrés sur celle-ci. On prêtera attention au fait que le système doit être le plus configurable possible. Pour cela plusieurs paramètres devront être pris en compte comme par exemple: • • • • • • Le type de cryptage (AES, DES……). La clé de cryptage et sa longueur. Les clés d’accès aux fonctions. Le nombre de fonctions disponibles. Le numéro de série (watermark/fingerprint). Gestion des attaques (Type de réaction et à partir de combien d’attaques). 1.3. ENVIRONNEMENT DU SYSTEME: Pour avoir une idée plus claire de l’utilité du projet, nous avons détaillée en figure 1, un exemple ou un utilisateur souhaite avoir accès à certaine fonctionnalité d’une IP multi mode créée par un concepteur. En fonction de ses contraintes, le concepteur va, par l’intermédiaire de l’interface Java, modifier les fichiers VHDL préconçus pour fournir une IP MMSC (MultiMode Secure Control) adaptée aux caractéristiques du client. L’IP MMSC associée à l’IP multi mode est regroupés dans une IP globale permettant de protéger les fonctions des différents attaquants. L’interface génère également les clés d’accès aux différentes fonctions. Ainsi l’utilisateur n’a plus qu’à payer les différentes clés permettant l’accès aux différentes fonctions pour les utiliser. Page | 5 Figure 1 : Diagramme Sagittal du système Une fois les clés en possession de l’utilisateur, celui-ci celui ci peut les utiliser pour obtenir accès aux différents modes de fonctionnement de l’IP conformément à la figure 2. Figure 2 : Schéma environnemental du système Page | 6 II- Spécifications matérielles 2.1. ARCHITECTURE DU SYSTEME MMSC La solution proposée pour notre système est nommée MMSC (MultiMode Secure Control). Par la suite l’on nommera IPS (IP Secure) Le bloc comportant l’IP à protéger et la MMSC. A chaque demande d’activation de mode, l’utilisateur devra envoyer les trames correspondantes contenant les clés associées et le MMSC contrôlera les droits de cet utilisateur à propos de la configuration souhaitée. Le MMSC comporte deux types d’entrées : Mode Activation Input : à travers cette entrée, l’utilisateur envoi une trame pour activer/désactiver un mode ou plusieurs modes de l’IP. • Mode Selection Input : comme son nom l’indique, à travers cette entrée, l’utilisateur choisira le mode de l’IP qu’il souhaite faire fonctionner. • Pour protéger l’IP, les trames d’activation des différents modes seront cryptées. Ce sont ces trames que devra connaître l’utilisateur pour activer ou désactiver un mode. La trame à la forme suivante : Figure 3 : Schéma de la trame d'activation de mode Elle comporte plusieurs champs : Activation Key : la clé d’activation du mode codée sur (128 bits – la taille de l’entête). Dans un premier temps, nous avons considérés que la taille de nos trames était fixe (128 bits) même si le but final est d’avoir une taille de trame variable. Une entête codée se composant de : o Frame Number qui correspond au numéro de la trame, l’utilisateur fera en sorte d’envoyer les trames dans le bon ordre. Ce champ a été introduit pour faire face aux attaques du bus de transmission ou de BruteForce. Lorsque le pirate envoie une trame aléatoire qu’il a réussi à capter, le système réussira à le détecter. La taille attribuée à ce champ dépend du nombre de fonctions disponibles. o Mode Number qui correspond au numéro du mode à activer ou désactiver. Sa taille est attribuée selon le nombre de fonctions dont dispose le système. o Enable/Disable qui correspond à l’action choisie, activer ou désactiver. L’on utilisera au minimum 2 bits pour éviter les problèmes de manipulation de bits. Page | 7 Ci-dessous sont représentés les différents blocs du système MMSC : Figure 4 : Schéma fonctionnel du bloc MMSC FIFO : Comme le bus de données est fixé à 32 bits et que les modules de décryptage décrypte des données de taille différents (DES : 64 bits, AES : 128bits), il est nécessaire de placer une FIFO en entrée du bloc de décryptage pour palier aux problèmes de synchronisation. Il en sera de même entre sa sortie et la FSM. CONTROLEUR : Le contrôleur est le cœur du système, c’est lui qui va permettre de gérer le système. Il est en charge de contrôler les trames en entrées et de gérer les erreurs en conséquence. Figure 5 : Machine d'état du contrôleur. Page | 8 ROM : Pour permettre de contrôler l’accès à certaines fonctionnalités (ou normes) de l’IP, on associe chaque fonction à une clé de validation qui permettra de vérifier les droits d’accès. Ces clés seront donc contenues dans une ROM ou l’on considéra qu’aucun pirate ne pourra avoir accès. RAM : La ram contient l’état des différentes fonctionnalités de l’IP. A l’état initial celles-ci sont toutes initialisées à l’état inactif. Leurs états changeront en fonction des trames transmises et des droits associées par l’intermédiaire du contrôleur. DECIPHER : Ce module a pour but de décrypter les informations contenues dans la trame. Comme l’on souhaite que notre système soit le plus paramétrable possible, plusieurs algorithmes de décryptage seront adoptés. On pourra prendre par exemple : • DES (Data Encryption Standard), • AES (Advanced Encryption Standard), • XOR (Exclusive Or). Figure 6 : Schéma fonctionnel du bloc Decipher Le Main Bloc est le module contenant l’IP de décryptage. Comme les entrées des blocs de décryptage ne sont pas toujours identique l’un à l’autre et envers les fifo’s, nous sommes obligés d’ajouter des wrapper. Ces wrappers sont nommées PRE et POST et permettent une connexion correcte avec les fifo’s d’entrée et de sortie. 2.2 DEFINITION DES SCENARIOS : a. Scénario : procédure d'initialisation (cas "rien à signaler") Hypothèses : i. L'IP comporte 5 modes de fonctionnement : M1, M2, M3, M4, M5. (Par défaut, le seul mode actif est le mode M0, propre au bloc MMSC.) ii. L'utilisateur possède les clés des 3 modes suivants : M2, M3, M5, et les valide. Initialisation : Lors de l'initialisation, les trames que l'utilisateur envoie au bloc MMSC sont les suivantes : Page | 9 Trame n°1 : activer M2 N° de trame 1 N° de mode 2 Validation/Dévalidation Valider Clé Clé mode 2 Trame n°2 : activer M3 N° de trame 2 N° de mode 3 Validation/Dévalidation Valider Clé Clé mode 3 Trame n°3 : activer M5 N° de trame 3 N° de mode 5 Validation/Dévalidation Valider Clé Clé mode 5 En fonctionnement : L'utilisateur souhaite utiliser le mode M3 : Il envoie le n° du mode désiré sur l'entrée switch _mode, validée par le signal switch_enable. Valeur de switch_mode : '011' = (3)10. b. Scénario : Gestion du numéro de trame Hypothèses : i. L'IP comporte 5 modes de fonctionnement : M1, M2, M3, M4, M5. ii. L'utilisateur possède les clés des 3 modes suivants : M2, M3, M5. Après décryptage de la trame, on commence par vérifier le numéro de trame. Si après vérification, le numéro de trame est correct, alors on passe à la vérification de la clé. (cf. suite) Si le numéro de trame est incorrect alors plusieurs réactions sont envisageables selon les configurations. Les trames suivantes sont reçues : N° de trame N° de mode 1 - Validation/Dévalidation - Clé - N° de trame 2 N° de mode - Validation/Dévalidation - Clé - N° de trame 3 N° de mode - Validation/Dévalidation - Clé - N° de trame 1 N° de mode - Validation/Dévalidation - Clé - Le n° de la quatrième trame ne correspond pas au n° attendu, cela peut signifier deux choses: a) Un attaquant a réussi à capter la 1ère trame et tente de la retransmettre pour corrompre le système. b) Une erreur s’est produite sur le bus de transmission et la valeur du numéro de trame est erronée. Page | 10 Il n'y a aucun moyen de déceler s'il s'agit du premier ou du second cas, cette erreur sera donc interprétée comme une tentative de rejeu et sera traitée d'une des manières suivantes: a) On bloque le système jusqu’au prochain redémarrage. b) On bloque le système après un certain nombre d’erreurs détectées et fixé par le concepteur. c) L’erreur est ignorée. Le système considère que les rejeux ne sont pas des problèmes. A la détection d’une erreur sur le numéro de trame, le bloc MMSC la signale par l'intermédiaire du signal error. c. Scénario : validation des modes (cas "rien à signaler") Hypothèses : i. L'IP comporte 5 modes de fonctionnement : M1, M2, M3, M4, M5. ii. L'utilisateur possède les clés des 2 modes suivants : M2, M3. iii. Puis, l'utilisateur souhaite remplacer le mode M3 par le mode M5, dont il obtient la clé. Il va donc dévalider le mode M3 et valider le mode M5. Après vérification du numéro de trame, le système vérifie si l’utilisateur a bien les droits correspondant à la validation des modes qu’il souhaite activer. Cette vérification est faite par le test de la clé. Contenu de la ROM (statique) : Adresse Valeur 0 Clé mode 0* 1 Clé mode 1 2 Clé mode 2 … … M Clé mode M *La clé du mode 0 est le n° de série de l'IP. Contenu de la RAM : Dans la RAM, à chaque mode est associée une valeur binaire qui caractérise son état présent. Adresse Valeur 0 Etat mode 0 1 Etat mode 1 2 Etat mode 2 … … M Etat mode M Un mode possède 2 états inactif (par défaut) et actif. Au démarrage du système, les valeurs de la RAM sont inconnues donc on initialise tout à l'état inactif. Page | 11 Les états actif et inactif sont codés par les valeurs binaires '1010' et '0101' : Etat Valeur binaire Verrouillé 0000 Actif 1010 Inactif 0101 Initialisation : Etat de la RAM et du système : Adresse Valeur 0 1010 1 0101 2 0101 3 0101 4 0101 5 0101 Mode 0 1 2 3 4 5 Etat Actif Inactif Inactif Inactif Inactif Inactif Lors de l'initialisation, les trames reçues de la part de l'utilisateur sont les suivantes : Trame n°1 : activer M2 N° de trame N° de mode Validation/Dévalidation Clé 1 2 Valider Clé mode 2 Etat de la RAM et du système : Adresse Valeur 0 1010 1 0101 2 1010 3 0101 4 0101 5 0101 Trame n°2 : activer M3 N° de trame 2 N° de mode 3 Etat de la RAM et du système : Adresse Valeur 0 1010 1 0101 2 1010 3 1010 4 0101 5 0101 Trame n°3 : désactiver M3 N° de trame N° de mode 3 3 Mode 0 1 2 3 4 5 Validation/Dévalidation Valider Mode 0 1 2 3 4 5 Validation/Dévalidation dévalider Etat Actif Inactif Actif Inactif Inactif Inactif Clé Clé mode 3 Etat Actif Inactif Actif Actif Inactif Inactif Clé Clé mode 3 Page | 12 Etat de la RAM et du système : Adresse Valeur 0 1010 1 0101 2 1010 3 0101 4 0101 5 0101 Trame n°4 : activer M5 N° de trame 4 N° de mode 5 Etat de la RAM et du système : Adresse Valeur 0 1010 1 0101 2 1010 3 0101 4 0101 5 1010 Mode 0 1 2 3 4 5 Validation/Dévalidation Valider Mode 0 1 2 3 4 5 Etat Actif Inactif Actif Inactif Inactif Inactif Clé Clé mode 5 Etat Actif Inactif Actif Inactif Inactif Actif En fonctionnement : L'utilisateur souhaite utiliser le mode M5 : Il envoie le n° du mode désiré sur l'entrée switch _mode, validée par le signal switch_enable. Valeur de switch_mode : '101' = (5)10. Le fonctionnement est correct. Aucune erreur n'est détectée. Remarque : Si un mode verrouillé est sollicité dans la configuration de switch _mode, alors le système se bloque. d. Scénario : problème de clé Dans ce scénario, le système reçoit une clé erronée. Trois cas sont possibles : a) C'est une tentative de piratage. L'utilisateur tente d'accéder à un mode dont il n'a pas les droits. b) C'est une erreur de la part de l'utilisateur. c) Il s'agit d'une erreur de bus de transmission sur le champ 'clé'. Hypothèses : i. L'IP comporte 5 modes de fonctionnement : M1, M2, M3, M4, M5. ii. L'utilisateur possède les clés des 3 modes suivants : M2, M3, M5. iii. L'utilisateur souhaite activer les modes suivants : M2, M5 et M4 dont il ne connaît pas la clé. Page | 13 Les trames suivantes sont reçues : N° de trame 1 N° de mode 2 Validation/Dévalidation Valider Clé Clé mode 2 N° de trame 2 N° de mode 3 Validation/Dévalidation Valider Clé Clé mode 3 N° de trame 3 N° de mode 4 Validation/Dévalidation Valider Clé Clé incorrecte N° de trame 4 N° de mode 5 Validation/Dévalidation Valider Clé Clé mode 5 A chaque trame reçue, le système compare avec les clés contenues dans la ROM. A la 3ème trame, la clé ne correspond pas à la valeur dans la ROM. Plusieurs réactions seront envisageables : a) On bloque le système jusqu’au prochain redémarrage. b) On ne bloque le système qu'après un certain nombre d’erreurs détectées et fixé par le concepteur. Dans le 2ème type de profil, la 3ème trame est ignorée et une valeur de compteur est incrémentée. e. Scénario : problème de n° de mode Dans cet exemple, on considère l'apparition d’erreurs provoquées par le bus de transmission sur le N° de mode. Hypothèses : i. L'IP comporte 5 modes de fonctionnement : M1, M2, M3, M4, M5. ii. L'utilisateur possède les clés des 3 modes suivants : M2, M3, M5. iii. L'utilisateur souhaite activer les modes suivants : M2, M5 mais l'erreur transforme le n° de mode. Trame envoyée par l'utilisateur/μC : N° de trame N° de mode 1 2 Validation/Dévalidation Valider Clé Clé mode 2 N° de trame 2 N° de mode 3 Validation/Dévalidation Valider Clé Clé mode 3 N° de trame 3 N° de mode 5 Validation/Dévalidation Valider Clé Clé mode 5 Page | 14 Trame reçue : N° de trame 1 N° de mode 2 Validation/Dévalidation Valider Clé Clé mode 2 N° de trame 2 N° de mode 3 Validation/Dévalidation Valider Clé Clé mode 3 N° de trame 3 N° de mode 1 Validation/Dévalidation Valider Clé Clé mode 5 Si l'on considère que les modes sont codés de la manière suivante : mode 1 = 001, mode 2 = 010, mode 3 = 011, ... Il est possible qu'un bit erroné fasse passer mode 5 en mode 1 (101 -> 001). Cela a pour conséquence de demander une validation du mode 1 avec la clé du mode 5. La clé étant incorrecte, le système traite ce cas de manière similaire à une tentative de piratage, réagit selon la politique choisie et génère une erreur. Ce type d'erreur de bus de transmission ne peut pas être détecté et est considérée comme une erreur de clé incorrecte. f. Scénario : problème de validation/dévalidation Dans cet exemple, on considère l'apparition d’erreurs provoquées par le bus de transmission sur le champ de validation/dévalidation. Hypothèses : i. L'IP comporte 5 modes de fonctionnement : M1, M2, M3, M4, M5. ii. L'utilisateur possède les clés des 3 modes suivants : M2, M3, M5. iii. L'utilisateur souhaite activer les modes suivants : M2, M5 mais l'erreur modifie le champ de validation. Le champ de Validation/Dévalidation étant le seul point faible de la trame, un codage sur 1 bit unique rendrait possible de traiter une demande erronée dans le cas d'une erreur de bus de transmission ayant changé la valeur de ce bit. E.g. désactivation d'un mode tandis que l'utilisateur en demande l'activation. Ce champ est donc codé sur 2 bits et aux demandes validation et dévalidation sont associées les valeurs : ‘10’ et ‘01’ successivement. Pour passer d'une valeur à l'autre, il faut modifier 2 bits. La probabilité pour qu'une erreur survienne sur ces deux bits consécutifs peut être considérée comme nulle. Une erreur du bus de transmission sur ce champ génère donc les valeurs 11 ou 00. Trames reçues : N° de trame 1 N° de mode 2 Validation/Dévalidation Valider Clé Clé mode 2 N° de trame 2 N° de mode 3 Validation/Dévalidation Valider Clé Clé mode 3 N° de trame N° de mode Validation/Dévalidation 3 5 11 L'erreur sur la trame 3 est détectée et signalée par le biais du signal error. Clé Clé mode 5 Page | 15 2.3. CHOIX DES IPS DE CRYPTAGE Dans cette partie, on compare les performances de 3 IP pour le cryptage AES et 2 IP pour le cryptage DES. Tout ces IPs sont open source et leurs sources ont été téléchargées sur Internet. Pour l’AES, il s’agit de : Simple AES, Fast AES, et Mini AES. Et pour le DES, il s’agit de Simple DES et Triple DES.Pour avoir une première idée de l’encombrement que ces différents blocs de décryptage peuvent occupées nous les avons synthétisés sous Xilinx ISE. Nous avons choisis de faire toutes les synthèses sur le circuit suivant : Famille : Spartan3E Circuit : XC3S500E Boitier : FG320 Vitesse : -4 Ci-dessous est un récapitulatif des résultats d’implémentation des cinq IPs de cryptage: AES AES1 DES AES-FAST MINI-AES DES simple Triple DES Optimisation Speed Area Speed Area Speed Area Speed Area Speed Area Slices 14% (670) 3% (291) 13% (1284) 31 19% (895) 3% (325) 16% (1569) 31 155% (7218) 9% (914) 150% (13986) 262 160% (7471) 7% (657) 140% (13105) 262 77% (3622) 41% (3873) 42% (3934) 29 72% (3382) 40% (3785) 38% (3600) 29 6% (293) 2% (192) 5% (555) 199 5% (276) 1% (125) 5% (512) 199 34% (1670) 13% (1227) 28% (2680) 326 28% (1309) 10% (1012) 25% (2347) 326 112% (262) - 112% (262) - 82% (191) - 82% (191) - 130% (302) - 130% (302) - 4% (1) 56.251 MHz 4% (1) 44.819 MHz 12% 12% (29) (29) 20% 20% (4) (4) 8% 8% (2) (2) 69.348 52.407 MHz MHz 115 4% (1) 143.761 MHz 4% (1) 145.054 MHz Slice Flip Flops 4 input LUTs IOs bonded IOBs BRAMs GCLKs Maximum Frequency Durée de traitement (périodes d’horloge) Debits (Mbps) 13% 13% (31) (31) 15% 20% (3) (4) 4% 4% (1) (1) 122.171 82.596 MHz MHz 278 56 38 17 424 337 77 58 18 511 515 4% 4% (1) (1) 101.031 77.743 MHz MHz 57 113 Tableau 1 : Récapitulatif des résultats d'implémentation des IPs de cryptage Page | 16 87 AES : Nous constatons que le Fast AES est très rapide mais il prend énormément de la surface, de même pour le Mini AES. Nous optons alors pour le choix du Simple AES qui occupe un nombre de slice moins important mais qui est malheureusement plus lent. DES : Le Simple DES par rapport au Triple DES n’occupe pas énormément de surface et est rapide. Seul inconvénient est qu’il ne sera pas aussi sécurisé que le Triple DES. Nous optons dans notre choix pour le Simple DES. Pour mieux comparer ces algorithmes de cryptages, nous en avons conçu un autre avec un simple XOR (ou exclusif). Ses résultats d’implémentation figurent ci-dessous : Optimisation Slices Slice Flip Flops 4 input LUTs IOs bonded IOBs BRAMs GCLKs Durée de traitement (périodes d’horloge) XOR The same for Speed or Area 0% (19) 0% (33) 100 43% (100) 4% (1) 1 Tableau 2 : Résultat d'implémentation du XOR On constate que le XOR n’occupe quasiment rien en surface puisque l’algorithme est vraiment basique. Il ne nous a pas été possible de déterminer le débit de celui-ci du fait que la synthèse n’a malheureusement pas réussi à déterminer de fréquence maximale. Page | 17 III- Interface Graphique 3.1. BESOINS : L’on a déjà vue que le rôle du MMSC est de protéger les IPs contre les différentes attaques possibles. Mais pour s’adapter aux différents besoins des utilisateurs il est nécessaire que notre bloc soit le plus configurable possible. possible Le moyen le plus simple pour cela a été l’écriture d’un code VHDL générique (utilisation de la notion de généricité gén dans les déclarations). Par conséquence la configuration configurat est une « simple » modification des paramètres génériques. Comme outil de configuration, on a choisi de développer une interface graphique en JAVA qui agit sur 3 fichiers : le fichier MMSC_aes.vhd, le fichier MMSC_des.vhd et le fichier rom.vhd. Le développement eloppement de cette interface permet de mettre en œuvre les étapes de configuration qui seront détaillées dans la partie suivante. 3.2. LES ETAPES DE CONFIGURATION CONFIGU : Les différentes étapes de configuration de l’interface peuvent être résumé à la figure 7. Figure 7 : Schéma des différentes étapes de configuration L’on commence par demander le choix de l’algorithme de cryptage souhaité (AES ou DES) puis l’on génère la clé de cryptage qui sera enregistrée dans le fichier « MMSC_aes.vhd MMSC_aes.v »ou « MMSC_des.vhd ». La configuration onfiguration de la FSM se réalise à travers les fichiers « MMSC_aes.vhd MMSC_aes » et « MMSC_des.vhd » : Choix du nombre de modes : paramètre générique nb_modes. Choix de la taille de la clé : paramètre générique key_size. Choix du nombre de cycles d’horloge à attendre après l’initialisation : paramètre générique t_wait. La configuration de la FIFO utilise le fichier « MMSC_aes.vhd » ou « MMSC_des.vhd » : Choix du nombre de bits pour le bus de données : paramètre générique size_bus. Choix du nombre de bits pour le bus d’adresse : paramètre générique size_add. Page | 18 La génération énération des clés des différents modes puis l’enregistrement de ces clés dans la ROM utilise le fichier « rom.vhd ». Enfin, la dernière étape est le cryptage c des clés des différents modes puis l’enregistrement l’ de celles-ci dans un fichier texte. 3.3. DIAGRAMME DES CLASSES: Le diagramme de classe qui permet de modéliser les relations entre les différentes classes utilisées est le suivant : Figure 8 : Diagramme de classes Pour arriver à notre objectif, on a utilisé 7 classes : Classes Description Interface Classe lasse principale qui contient le main. main Blocs Classe qui va afficher les boutons qui correspondent à nos blocs. FSM classe à travers laquelle on modifie les paramètres de la machine d’état. Modes classe qui affiche les différents modes et qui génère les clés correspondant à ces modes. Cryptage classe qui décrit la procédure de cryptage. Choix_Cryptage classe qui permet de choisir l’algorithme de cryptage, génère la clé de cryptage et crypte les clés de modes qui seront stockées dans un fichier texte. FIFO classe à travers laquelle on modifie les paramètres de la FIFO. Page | 19 Explication des différentes relations • • • • • • • • L’objet Blocks fait partie de la classe Interface : relation d’agrégation. Les 4 objets FIFO, Modes, Modes Choix Cryptage, FSM font partie de la classe Blocks : relation d’agrégation. Pour faire le cryptage des clés des différents modes dans la classe Choix_Cryptage, Choix_Cryptage on a besoin in d’instancier un objet de la classe Cryptage : relation de dépendance. Selon l’algorithme de cryptage choisi dans la classe Choix_Cryptage, Choix_Cryptage on modifie dans la classe FIFO soit le fichier MMSC_aes.vhd soit le fichier MMSC_des.vhd : relation d’association. Dans la classe Choix_Cryptage on récupère les clés des modes générées dans la classe Modes pour les crypter : relation d’association. Les classes Blocks, Modes, Modes FSM, Choix_Cryptage et FIFO héritent de la classe JFrame, classe qui permet de créer une fenêtre fenêt graphique. Les classes Blocks, Modes, Modes FSM, Choix_Cryptage implémentent l’interface ActionListener,, classe qui permet une action à la suite d’un appui sur un bouton (pour les classes Blocks, Modes, Modes Choix_Cryptage)) ou le fait de cocher une case (pour la classe Choix_Cryptage)) ou choisir une option dans un menu (pour pour la classe FSM). La classe FSM implémente aussi l’interface ItemListener pour permettre de connaître l’option sélectionnée dans chaque menu à tout instant. IV- Performances après synthèse : Dans less figures suivantes, nous avons essayé de récapituler les différents résultats de synthèse du projet. En figure 9, nous apercevons les différents taux d’occupation en nombre de slices. Ces résultats proviennent d’une synthèse sur FPGA de famille Spartan3E dont les caractéristiques sont décrites ci-dessous ci : Circuit : XC3S500E Boitier : FG320 Vitesse : -4 Taux d'occupation de chaque blocs Nombre de slices 1000 800 920 729 600 Area Optimization Speed Optimization 336 341 400 271 269 122 128 200 110 112 122 133 fifo_in fifo_out 0 AES DES XOR fsm Figure 9 : Courbes des taux d'occupation de chaque bloc en nombre de slices Page | 20 On remarque que plus l’algorithme est sécurisant (AES puis DES et finalement XOR) et plus la surface d’occupation augmente, ce qui est dans un certain sens cohérent. Les différents blocs de décryptage prennent en compte leurs composants PRE et POST permettant permett une communication correcte avec les deux Fifo. Débits (Mbps) en fonction des blocs de cryptage 467 461 XOR DES 209 AES 75 0 50 100 250 Speed optimisation Area Optimisation 110 150 200 250 300 350 400 450 500 Débits (Mbps) Figure 10 : Courbes des débits en fonction des différents blocs de cryptage. La figure 10, concerne oncerne quand à elle les performances en termes de débits maximum. Ces paramètres devront donc être pris en compte en fonction du cahier des charges de l’utilisateur. Il faut aussi prendre en compte que ces résultats concernent une description précise de la MMSC (par exemple une fifo d’entrée de 32bits). Comme les blocs sont génériques ces valeurs sont susceptibles d’être modifiée. Page | 21 V- Simulation et test : V.1. SIMULATION SOUS MODELSIM: On a choisi de ne mettre que les résultats de simulation du MMSC avec le cryptage AES. On obtient les mêmes résultats avec le DES et le XOR. MMSC avec un algorithme AES Avec un test bench, on envoi quatre trames : trois pour l’activation des modes 1, 2 et 4 et une trame pour désactiver le mode 2. Ensuite, on essaye de changer les modes. Evidement, lorsqu’on essayera de choisir le mode 2, le système se bloquera. Ci-dessous figurent les résultats de la simulation. Figure 11 : Ecriture de la première trame sur la fifo d’entrée Figure 12 : Envoi de la clé de décryptage par le bloc ‘pre_aes’ vers ‘aes_dec’ Page | 22 Figure 13 : Transmission des données depuis la fifo d’entrées vers ‘aes_dec’ Figure 14 : Ecriture de la trame décryptée sur la fifo de sortie par ‘post_aes’ et début de sa lecture par le contrôleur. Figure 15 : Traitement réussi de la première trame par le contrôleur On constate que le contrôleur écrit à la première adresse de la RAM la valeur ‘00001010’, ce qui veut dire qu’il a activé le premier mode. Le traitement des autres trames qui restent se fait de la même manière. Page | 23 Ci-dessous sont représentées des figures pour les demandes de changement de mode : Figure 16 : Changement de mode vers le mode 4 qui est activé dans la RAM (x0A). Figure 17 : blocage du système après la demande du mode 2 qui est non activée (x05): Page | 24 V.2. IMPLEMENTATION SOUS XILINX SPARTAN3E : Une fois le modèle testé et validé par les simulations VHDL il est important de pouvoir tester celui-ci ci sous implémentation. Pour ce faire, l’implémentation d’un microcontrôleur PicoBlaze a été nécessaire conformément à la figure ci-dessous Pour transférer férer les trames nous avons repris un programme C++ que nous avons adapté selon nos besoins. Le programme se contente de transférer les trames ou les divers signaux d’activation sur un port USB. Le PC est ensuite connecté au kit de développement par l’intermédiaire rmédiaire d’un câble USB to RS232. Ainsi le microcontrôleur peut recevoir directement les trames depuis un PC. Lors de nos tests nous avons prouvé le bon fonctionnement du changement de mode. Pour cela nous avons considérer que toutes les fonctions étaient étaient initialement activées (initialisation de la RAM,, ici on n’utilise pas les trames pour activer les fonctions). fonctions Puis en transférant les signaux adéquates nous changions de mode tous en affichant celui-ci celui sur les led’s. Comme il ne nous était pas possible d’avoir accès directement aux états des différents registres, l’utilisation des led’s a été une des solutions. Cependant, il ne nous a pas été possible de tester l’ensemble du design étant donné que nous avions encore quelques problèmes tant à la réception des trames. Page | 25 VI. Conclusion Pour ce qui concerne le projet en lui-même, une bonne partie fonctionne cependant il reste encore certain point à corriger : Interface JAVA : Celle-ci fonctionne correctement excepter pour fournir des trames sous cryptage DES. Simulation VHDL Les simulations des blocs AES, DES, XOR fonctionnent correctement. La gestion des erreurs de la fsm. Test d’implémentation Sélection des modes à travers un test de la RAM. Activation des modes à partir des clés d’activation. Personnellement ce projet nous as permis d’abord d’acquérir de nouvelles connaissances comme : La cryptographie : AES, DES, XOR. La définition de scénarios (Description de différents points de vue) Le développement d’IP (recherche, évaluation, tests, réutilisation) Des notions aux problèmes liés aux développements de FPGA. De plus, le projet nous as permis de pouvoir travailler en équipe et de faire face aux différents problèmes que l’on peut rencontrer (Différents point de vue par exemple). Celui-ci nous offre donc une très bonne expérience qui nous sera utile dans le domaine professionnel. Page | 26 Annexes Fonctionnement du PRE et POST AES : • • • Le bloc AES se compose de : « pré_aes » qui adapte les données de la fifo d’entrée pour les envoyer au « aes_dec », « aes_dec » décrypte des données, « post_aes » stocke les données décryptés dans la fifo de sortie. Pre_aes Aes_dec Post_aes Schéma du bloc AES Schéma bloc AES avec entrées / sorties Page | 27 « pre_aes » : Machine d’état « pre_aes » : Machine d’états « pre_aes » Premier processus (P1) Etat init envoi_key attente_AES_ready attente_fifo_out_ready attente_fifo_in_ready attente_key_ready lecture_envoi_data Description Permet l’initialisation des différents signaux utilisés Pendant cet état, la clé utilisée pour le décryptage est envoyée au bloc «aes_dec » octet par octet Permet d’attendre que le bloc « aes_dec » soit près pour commencer un autre décryptage (lorsque aes_ready_t = ‘1’) Permet d’attendre que la fifo de la sortie soit vide Permet d’attendre que la fifo d’entrée soit remplie Permet d’attendre que le bloc « aes_dec » ait fini le traitement de la clé (KEY_READY_O=’1’) Permet de lire les données de la fifo d’entrée (trame de 128 bits) et de les envoyer octet par octet au bloc « aes_dec » pour le décryptage (la lecture et l’envoi sont simultannés) Page | 28 Second processus (P2) Etat init AES_ready_S AES_busy Description Permet l’initialisation des différents signaux utilisés Pendant cet état, le bloc « aes_dec » est près à recevoir des données et à les décrypter (on met le signal aes_ready_t à ‘1’) Pendant cet état, le bloc « aes_dec » est occupé ; il décrypte une trame (attente que le signal aes_ready change d’état de ‘0’ à ‘1’) Un scénario possible: Les processus du « pre_aes » commencent à leurs états init ; ils initialisent les différents signaux utilisés puis passent à l’état envoi_key pour P1 et AES_ready_S pour P2, P1 envoi la clé au bloc « aes_dec » octet par octet et ensuite passe à l’état attente_AES_ready, P2 compte 16 cycle d’horloge avant de signaler à P1 que « aes_dec » est près à recevoir les données à travers le signal aes_ready_t, lorsque P1 arrive à l’état lecture_envoi_data P2 passe à l’état AES_busy, Lorsque aes_ready_t est à ‘1’, P1 passe à l’état attente_fifo_out_ready, Lorsque la fifo de sortie est vide, P1 passe à l’état attente_fifo_in_ready, Lorsque « aes_dec » finisse le traitement de la clé, il met KEY_READY_O à ’1’ et P1 passe à l’état lecture_envoi_data, P2 maintenant arrive à l’état AES_busy, et P1 commence la lecture et l’envoi simultanés des données. Lorsque « aes_dec » ait fini de décrypter et commence l’envoi des données au « post_aes », P2 passe à l’état AES_ready_S. Lorsque P1 ait fini d’envoyer les données, il passe à l’état « attente_AES_ready ». « post_aes » : Le post AES est très simple puisque le pré AES contrôle tout les composants (les fifos, aes_dec ). Lorsque le signal aes_data_valid est à ‘1’, le post transfert les données décryptées de l’AES vers la fifo de sortie. Page | 29 Fonctionnement du PRE et POST DES : DIAGRAMME D’ETAT PRE-DES Reset Init Empty_fifo_in = ‘0’ Attente_fifo Empty_fifo_in = ‘1’ Acquisition Cpt_acquisition != size_data_crypt Cpt_acquisition != size_data_crypt Cptacquisition = size_data_crypt Test_fin_ Acquisition Cptacquisition = size_data_crypt DES_FREE DES_FREE Attente_DES DES_BUSY Page | 30 ------- Conditions dans le cas ou le nombre de bits des données d’entrées est moins important ou égale aux nombres de bits des données de sortie. ------- Conditions dans le cas ou le nombre de bits des données d’entrées est plus important que le nombre de bits des données de sortie. ------- Conditions dans les deux cas. SECOND PROCESS (Gestion de l’etat du DES) Reset Prevent_DES = ‘0’ DES_free Prevent_DES = ‘1’ Synchro_Post = ‘1’ Synchro_Post = ‘0’ DES_busy ETAT Init DESCRIPTION permet l’initialisation des sorties, des signaux…. Attente_fifo Attend qu’une donnée soit présente dans la fifo in et que la fifo out ne soit pas full. Cet état permet de récupérer la donnée en sortie de la fifo et de transmettre et d’adapter celle-ci selon le nombre de bits d’entrée du DES. Test si l’on a correctement adapté la donnée de sortie avant de lancer le décryptage. Attend que le DES ait finit son calcul avant de lancer un nouveaux décryptage. Acquisition Test_fin_ Acquisition Attente_DES Page | 31 1. Scénario possible : a. Données entrée = 32bits (fifo in) et Données sortie = 64bits (DES). Le Pre DES commence à son état INIT: - Il initialise tous les signaux et les sorties puis passe à l’état Attente_fifo. Etat Attente_fifo : - Initialisation de signaux suite aux états suivants. - La fifo n’a pas encore de donnée (Empty_fifo_in = ‘0’) : Il reste donc bloquer à l’état Attente_fifo - La fifo détient des données : La première donnée est disponible à sa sortie et empty_fifo_in est passé à 0. Comme la fifo in détient au moins une donnée et que la fifo out est non pleine alors l’état passe donc à Acquisition (test sur la fifo out est une sécurité en plus car on considère que le contrôleur vide plus rapidement la fifo que le Post DES ne la remplie). Etat Acquisition : - On passe Read Enable de la fifo d’entrée à 1 pour préparer la donnée n°2. - On transmet les 32 bits (donnée n°1) à la fifo. - On passe à l’état test_fin_acquisition. Etat test_fin_acquisition : - Remise à Zéro de Read Enable. - Il test la valeur de Cptacquisition. Celle-ci est initialisée à la longueur des données de la fifo (32). Si Cptacquisition vaut la valeur de la longueur des données du DES (64) alors il passe en Attente_DES sinon à l’état Attente_fifo. Dans notre cas Cptacquisition = 32 < 64 donc l’on passe en Attente_fifo. - On incrémente Cptacquisition de 32. Etat Attente_fifo : - La fifo détient des données : L’on passe à l’état Acquisition. Etat Acquisition : - On passe Read Enable de la fifo d’entrée à 1 pour préparer la donnée n°3. - On transmet les 32 bits (donnée n°2) à la fifo. - On passe à l’état test_fin_acquisition. Etat test_fin_acquisition : - Remise à Zéro de Read Enable. - Il test la valeur de Cptacquisition. Cptacquisition = 64 = Taille des données de sorties donc l’on passe en Attente_DES. - Réinitialisation de Cptacquisition. Etat Attente_DES: Le DES n’est pas occupé. - On lance le décryptage des données n°1 et n°2 concaténées. - On prévient le second processus qu’il peut faire basculer le DES en occupé - On passe en état Attente_fifo. Page | 32 b. Données entrée = 128bits (fifo in) et Données sortie = 64bits (DES). Le Pre DES commence à son état INIT: - Il initialise tous les signaux et les sorties puis passe à l’état Attente_fifo. Etat Attente_fifo : - Initialisation de signaux suite aux états suivants. - La fifo n’a pas encore de donnée (Empty_fifo_in = ‘0’) : Il reste donc bloquer à l’état Attente_fifo - La fifo détient des données : La première donnée est disponible à sa sortie et empty_fifo_in est passé à 1. Comme la fifo in détient au moins une donnée et que la fifo out est non pleine alors l’état passe donc à Acquisition. Etat Acquisition : - On transmet les 64 bits de poids fort à la fifo. - On passe à l’état Attente_DES. Etat Attente_DES: Le DES n’est pas occupé. - On lance le décryptage. - On prévient le second processus qu’il peut faire basculer le DES en occupé - On passe en état test_fin_acquisition. Etat test_fin_acquisition : - On test la valeur de Cptacquisition. Celle-ci est initialisée à la longueur des données de la fifo (128). Si Cptacquisition vaut la valeur de la longueur des données du DES (64) alors il passe en Attente_fifo sinon à l’état Acquisition. Dans notre cas Cptacquisition = 128 > 64 donc l’on passe en état Acquisition - On décrémente Cptacquisition de 64 (longueur donnée traitée). Etat Acquisition : - On transmet les 64 bits de poids faible à la fifo. - On passe à l’état Attente_DES. Etat Attente_DES: Le DES n’a pas finit de traiter la première donnée : - On attend que le DES soit libre. Plus tard le DES passe en non occupé. - On lance le décryptage. - On prévient le second processus qu’il peut faire basculer le DES en occupé - On passe en état test_fin_acquisition. Etat test_fin_acquisition : - On test la valeur de Cptacquisition. Dans notre cas Cptacquisition = 64 = longueur des données de sortie donc l’on passe en état Attente_fifo - On réinitialise Cptacquisition à 128 (longueur donnée d’entrée). - On passe Read Enable à 1 pour préparer la donnée suivante. Etat Attente_fifo : - Remise à zéro de Read Enable………. Page | 33 DIAGRAMME D’ETAT POST-DES Reset Init Data_in_ready = ‘0’ Attente_fin_DES Data_in_ready = ‘1’ Cpt_acquisition = size_data_crypt Acquisition Cptacquisition != size_data_crypt ------- Conditions dans le cas ou le nombre de bits des données d’entrées est moins important ou égale aux nombres de bits des données de sortie. ------- Conditions dans le cas ou le nombre de bits des données d’entrées est plus important que le nombre de bits des données de sortie. ------- Conditions dans les deux cas. ETAT Init DESCRIPTION permet l’initialisation des sorties, des signaux…. Attente_fin_DES Permet d’attendre qu’une donnée décryptée soit présente en sortie du DES. Cet état permet de récupérer la donnée en sortie du DES et d’adapter celle-ci selon le nombre de bits d’entrée de la Fifo. Acquisition Page | 34 2. Scénario possible : a. Données sortie = 32bits (fifo out) et Données entrée = 64bits (DES). Le Post DES commence à son état INIT: - Il initialise tous les signaux et les sorties puis passe à l’état Attente_fifo. Etat Attente_fin_DES : - Il passe Write Enable de la fifo de sortie à 0 (voir par la suite). - On passe le signal prévenant PRE_DES qu’il peut lancer un nouveau calcul à ‘0’ (voir par la suite) - Le DES n’a pas encore finit de décrypter une donnée (data_in_ready = ‘0’) : Il reste donc bloquer à l’état Attente_fin_DES. - Le DES a finit de décrypter une donnée : La donnée est disponible à sa sortie et data_in_ready passe à ‘1’. L’état passe donc à Acquisition. Etat Acquisition : - Au premier front d’horloge : - Il passe Write Enable de la fifo de sortie à 1. - Il transmet les 32 bits de poids fort à la fifo. - Il test la valeur de Cptacquisition. Celle-ci est initialisée à la longueur des données de la fifo (32). Si Cptacquisition vaut la valeur de la longueur des données du DES (64) alors il passe en Attente_fin_DES sinon il continue à récupérer et à transmettre. Dans notre cas Cptacquisition = 32 < 64 donc l’on reste dans l’état acquisition. - Il incrémente Cptacquisition de 32 (longueur donnée d’entrée). - Au second front d’horloge : - Write Enable est toujours à 1. - Il transmet les 32 bits de poids faible à la fifo. - Il test la valeur de Cptacquisition. Celle-ci vaut 64 = longueur donnée d’entrée, donc l’état passe à Attente_DES. - On ré-initialise Cptacquisition à la longueur de la donnée d’entrée (32). - On prévient PRE_DES que la donnée est lue il qu’il peut lancer un nouveau calcul. Etat Attente_fin_DES : - Il passe Write Enable de la fifo de sortie à 0. - On attend qu’une donnée soit prête (data_in_ready = ‘1’) ; Si les Données de sortie et d’entrée sont identique = 64bits alors l’on se retrouve avec le même cas sauf que l’on ne restera dans l’état acquisition que pendant un coup d’horloge. Page | 35 Données sortie = 128bits (fifo out) et Données entrée = 64bits (DES). Le Post DES commence à son état INIT: - Il initialise tous les signaux et les sorties puis passe à l’état Attente_fifo. Etat Attente_fin_DES : - Il passe Write Enable de la fifo de sortie à 0. - On passe le signal prévenant PRE_DES qu’il peut lancer un nouveau calcul à ‘0’. - Il attend qu’une donnée soit présente. - Data_in_ready passe à ‘1’ et l’état passe en acquisition. Etat Acquisition : - Il transmet les 64 bits d’entrée et de poids fort à la fifo. - Il test la valeur de Cptacquisition (cette fois-ci initialisée à la longueur des données de sortie soit 128). - Cptacquisition est différent de la longueur des données d’entrée (64) alors : - On décrémente Cptacquisition de la longueur des données d’entrées (64). - On passe en état Attente_fin_DES. - On signale à PRE_DES qu’il peut lancer un nouveau décryptage. Etat Attente_fin_DES : - Il passe Write Enable de la fifo de sortie à 0. - On passe le signal prévenant PRE_DES qu’il peut lancer un nouveau calcul à ‘0’. - Il attend qu’une donnée soit présente. - Data_in_ready passe à ‘1’ et l’état passe en acquisition. Etat Acquisition : - Il transmet les 64 bits d’entrée et de poids faible à la fifo. - Il test la valeur de Cptacquisition. Celle-ci vaut 64 : - On effectue Write Enable à ‘1’ pour enregistrer les deux données de 64 bits concaténées dans la fifo de sortie. - Ré-initialisation de Cptacquisition. - On passe en état Attente_fin_DES. - On signale à PRE_DES qu’il peut lancer un nouveau décryptage. Page | 36