• Aucun résultat trouvé

Dans ce chapitre, nous avons présenté la conception et la caractérisation d’une fonction physique non-clonable : la TERO-PUF. L’étape de conception est toujours très importante pour ce type de fonctions car elle doit être recommencée pour chaque nouvelle technologie. En effet, les fonctions physiques non-clonables sont basées sur les éléments les plus basiques de chaque technologie et souffrent d’un défaut de portabilité.

Le banc de caractérisation qui a été spécialement mis en place pour la caracté-risation des PUF a également été présenté. L’avantage de ce banc se situe dans sa modularité et dans sa facilité d’utilisation. En effet, il est possible de ne changer que les blocs de base constituant la fonction physique non-clonable et de se re-servir du banc sans autres modifications. De même, il est tout à fait possible de modifier le banc pour lui rajouter des fonctionnalités comme la caractérisation croisée en température et tension.

Enfin, la caractérisation de la TERO-PUF a été présentée pour deux familles de FPGA : Xilinx Spartan 6 et Altera Cyclone V. Les résultats ont été précisément décrits et montrent qu’il est possible d’extraire plus d’un bit par challenge grâce à la TERO-PUF. Cela constitue clairement un avantage en termes de surface d’im-plantation puisque deux fois moins de cellules sont nécessaires, par rapport à la RO-PUF. Lors de la caractérisation, l’évaluation de l’imprévisibilité des réponses a été effectuée grâce à certains tests de la suite de tests statistiques NIST. Cette approche permet une analyse plus fine qu’une simple mesure du biais. En revanche, ces tests ne sont pas adaptés aux fonctions physiques non-clonables et il est néces-saire d’aller plus loin dans cette partie de l’analyse et d’étudier une modélisation stochastique de l’extraction d’entropie.

Les travaux présentés dans ce chapitre ont besoin d’être à la fois complétés et améliorés. En effet, la caractérisation en température de la TERO-PUF sur les FPGA Altera Cyclone V est manquante et doit être faite. De plus, le paramètre de la durée d’acquisition introduit dans ce chapitre doit être étudié plus en détail. Il faudrait par exemple trouver un moyen d’écarter les cellules dont l’état oscillant est très long (voir permanent) de la génération des réponses de la PUF.

Enfin, il est également nécessaire de trouver et de tester des attaques sur la TERO-PUF. En effet, la sécurité de la TERO-PUF n’a encore jamais été éprou-vée. Il est certainement possible de récupérer la moyenne du nombre d’oscillations des cellules TERO par l’utilisation d’un canal auxiliaire comme le rayonnement électromagnétique ou la consommation de puissance. Une analyse spectrale de la consommation de puissance pourrait par exemple être effectuée sur une fenêtre glissante. De cette manière, une raie devrait apparaître à la fréquence d’oscillation d’une cellule lorsque celle-ci oscille. La raie disparaîtra lorsque la cellule se sera ar-rêtée. Ainsi, en enregistrant le temps écoulé entre l’apparition et la disparition des raies, il est possible de remonter jusqu’à un nombre d’oscillations. De plus, l’ampli-tude de la raie est linéairement liée avec le nombre d’oscillations de la cellule. Il est donc possible de retrouver ce nombre.

Étude et implantation de

LILLIPUT

La dernière partie de ce manuscrit de thèse est composée de deux chapitres dans lesquels nous nous intéressons au dernier mécanisme de protection nécessaire dans le projet SALWARE. Ce mécanisme correspond à la mise en place d’un algorithme léger de chiffrement permettant une communication sécurisée lors de l’activation du circuit. Comme cette activation ne se fait qu’une fois dans la vie du circuit in-tégré, l’algorithme de chiffrement choisi doit occuper le moins de surface possible. En revanche, le temps d’exécution de ce dernier n’est pas une contrainte puisqu’il ne sera utilisé que lors de l’activation. Ainsi, la seule et unique contrainte d’im-plantation pour le projet SALWARE est la surface. Dans les deux chapitres qui suivent, le terme "léger" sera donc relatif à cette contrainte. La Figure 4.1 montre le positionnement de ce mécanisme dans le projet SALWARE.

Les travaux présentés dans ce chapitre ainsi que dans le Chapitre 5 ont été réalisés dans le cadre d’une collaboration et d’un échange avec l’équipe du Professeur Kris Gaj de l’Université George Mason à Fairfax aux États-Unis. De plus, les fichiers sources de toutes les implantations matérielles présentées dans ce chapitre sont disponibles sur le site du projet SALWARE1.

Dans ce chapitre, un algorithme léger de chiffrement par bloc, récent (2015), est étudié : LILLIPUT. Nous présentons ici les premières implantations matérielles de cet algorithme sur FPGA. De plus, des résultats de synthèse pour la technologie ASIC AMS 0.35µm2 sont également présentés pour les implantations matérielles décrites dans ce chapitre. Dans la première section de ce chapitre, l’algorithme de chiffrement est présenté. La Section 4.2 présente les stratégies d’implantation ainsi que la méthode utilisée pour analyser leur surface. Ensuite, les Sections 4.3 et 4.4 détaillent les implantations matérielles parallèle et série de LILLIPUT. Enfin, la Section 4.5 présente les résultats de ces implantations pour FPGA et ASIC. La Section 4.6 conclue ce chapitre et donne quelques perspectives d’améliorations.

1. http://www.univ-st-etienne.fr/salware/lightweight_block_cipher.htm 2. http://ams.com/eng/Products/Full-Service-Foundry/Process-Technology/CMOS

RSMicro

XTN66522LL IF4CPWC224 Internal secret ID storage 0NVM / PUFI 0Trusted areaI =? Cryptographic Function 0Trusted areaI Enable key Locking circuitry (Remote) (un)locking request GénérationC intrinsèqueCdeC l’identifiant secret 0TEROVPUFI =? Fonction cryptographique 0zoneCprotégéeI Clé d’activation CircuitCdeC blocage Requête de déblocage W

Figure 4.1 – Positionnement de l’implantation d’algorithme léger de chiffrement dans le projet SALWARE.

4.1 Description de l’algorithme LILLIPUT

LILLIPUT est un algorithme léger de chiffrement par bloc utilisant une archi-tecture basée sur un réseau de Feistel généralisé. Les spécifications de cet algorithme ainsi qu’une analyse complète de sa sécurité ont été publiées en 2015 dans [17]. Dans cette section, une description de chaque fonction de LILLIPUT est présentée dans le but de faciliter la compréhension de son implantation.

LILLIPUT prend un bloc de 64 bits ainsi qu’une clé de 80 bits en entrée et produit un message de 64 bits en sortie. Dans le but de fournir une description claire, le bloc de données X à chiffrer (ou à déchiffrer) est vu comme une suite de quartets (mots de 4 bits) : X = X15X14· · · X0.

LILLIPUT est composé d’une fonction de ronde qui est appliquée trente fois afin de chiffrer ou de déchiffrer un message. Cette fonction de ronde s’articule autour de trois opérations nommées : NonLinearLayer, LinearLayer et PermutationLayer. Pour chaque tour, un clé de ronde est générée grâce à une fonction de gestion ainsi qu’une fonction d’extraction de clé. De plus, seule la moitié du bloc de données correspondant aux bits de poids fort du message (X15X14· · · X8) est modifiée lors de chaque passage dans la fonction de ronde.

4.1.1 La fonction de ronde

La fonction de ronde commence par une étape non linéaire (NonLinearLayer ). Cette fonction est définie par l’expression suivante :

X8+i= X8+i⊕ S(X7−i⊕ RKij), i ∈ [0, 7]

où la fonction S représente le tableau de substitution utilisé dans LILLIPUT (Sbox) et RKijreprésente le quartet i de la clé de ronde correspondante au tour j. Le tableau de substitution est présenté en notations hexadécimales dans le Tableau 4.1. Dans ce Tableau 4.1, x(4) représente un mot de 4 bits.

Tableau 4.1 – Tableau de substitution utilisé dans l’algorithme LILLIPUT.

x(4) 0 1 2 3 4 5 6 7 8 9 A B C D E F

S(x(4)) 4 8 7 1 9 3 2 E 0 B 6 F A 5 D C

Ensuite, la deuxième fonction (LinearLayer ) peut être appliquée. Elle consiste en une série de ou exclusif entre les quartets de poids faible du bloc de données (X7X6· · · X0) et le résultat de la première fonction du tour. Plus précisément, cette fonction est définie par :

X15 = X1⊕ X2⊕ X3⊕ X4⊕ X5⊕ X6⊕ X15;

Xi = X7⊕ Xi, i ∈ [9, 14];

X8 = X8

Enfin, la dernière fonction permute les deux moitiés du bloc de données mais effectue également des permutations à l’intérieur de chaque moitié. Cette fonction est appelée PermutationLayer. Elle est définie dans le Tableau 4.2. Dans ce Ta-bleau 4.2, la permutation inverse utilisée pour le déchiffrement d’un message est également présentée.

Tableau 4.2 – Permutation du bloc de données utilisé dans LILLIPUT et son inverse.

i 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

π(i) 13 9 14 8 10 11 12 15 4 5 3 1 2 6 0 7

π−1(i) 14 11 12 10 8 9 13 15 3 1 4 5 6 0 2 7

4.1.2 La gestion de clé

La dernière partie de l’algorithme correspond à la gestion de la clé tout au long du chiffrement (ou du déchiffrement) d’un message. Cette fonction est divisée en deux parties. La première partie permet de générer une clé de 80 bits à partir de la clé générée lors du tour précédent. La deuxième partie a pour but d’extraire la clé de ronde de 32 bits servant dans la fonction non-linéaire du tour.

Pour générer les clés successives (de 80 bits), la fonction utilisée est basée sur quatre registres à décalage à rétroaction linéaire (LFSR pour Linear Feedback Shift

Register en anglais). Pour décrire cette fonction, notons Y la clé qui entre dans

la fonction. Cette clé est divisée en vingt quartets : Y = Y19Y18· · · Y0. De plus, un décalage de i bits vers la gauche est noté << i, un décalage de i bits vers la droite est noté >> i et les rotations de i bits vers la gauche et vers la droite sont notées <<< i et >>> i. Les quatre registres à décalage sont notés L0, L1, L2 et L3 et définis sur la Figure 4.2. Dans cette figure, le décalage du registre est appelé

Figure 4.2 – Description de la fonction de gestion de clé de l’algorithme LILLIPUT.

Pour la fonction d’extraction de la clé de ronde, la clé générée lors du tour précédent est prise en compte. Pour cette fonction, la chaine de 32 bits Z(32), qui est composée de certains quartets de la clé Y, est définie par :

Z(32)= Y18||Y16||Y13||Y10||Y9||Y6||Y3||Y1

Ensuite, chaque quartet RKij de la clé de ronde du tour j (RKj) est définie par :

RKij = S(Zi||Zi+8||Zi+16||Zi+24), i ∈ [0, 7]

où S représente la même fonction de substitution que celle utilisée dans la fonc-tion de ronde (Tableau 4.1). Enfin, le numéro du tour j ∈ [0, 29] est ajouté à la clé de ronde pour donner RK(32)j = RKj⊕ j(5)||0(27).

4.1.3 Chiffrement et déchiffrement

Comme LILLIPUT est basé sur un réseau de Feistel, le processus de déchiffre-ment est très proche du chiffredéchiffre-ment. En effet, la seule partie de la fonction de ronde à inverser est la permutation car elle ne se contente pas d’intervertir les deux moi-tiés du bloc de données mais elle permute également les quartets au sein de chaque moitié.

La gestion de clé est également très proche entre le chiffrement et le déchiffre-ment. Il faut simplement remonter les clés dans l’ordre inverse : de RK29 à RK0. Pour cela, il faut donc au préalable recalculer la dernière. Pour calculer les clés de ronde dans l’ordre inverse, il faut effectuer la permutation inverse des registres à décalage avant de ré-appliquer les mêmes modifications sur les quartets de la clé (fonction MixingLFSM présentée dans la Figure 4.2).

Pour plus de détails sur cet algorithme léger de chiffrement par bloc, le lecteur intéressé peux se référer directement aux spécifications de l’algorithme [17].

4.2 Stratégies d’implantations et analyse de la surface