La sécurisation des circuits numériques face aux attaques en tensions

Aperçu des attaques visant les circuits numériques

   Au cours de ces 20 dernières années, de nombreux travaux portant sur les méthodes d’attaques de circuits sont apparus dans la littérature, suivis de mise en pratique, pour faire prendre conscience de la menace qui pèse sur la sécurité des circuits intégrés. Si ces techniques ciblent souvent des circuits cryptographiques, elles peuvent être utilisées sur d’autres systèmes afin de compromettre leur sécurité. En fonction des moyens et des connaissances dont disposent les attaquants, IBM a proposé une classification de ceux-ci [Abraham 1991] :
– la première classe est constituée des attaquants astucieux (clever outsiders) qui disposent de moyens limités et de connaissances disponibles publiquement. Il s’agit généralement de personnes isolées mais qui, sur du long terme, peuvent devenir nombreux et former un groupe potentiellement dangereux.
– la deuxième classe (knowlegeable insiders) dispose de compétences spécifiques et de moyens plus importants. Les attaquants sont capables de comprendre un système complexe grâce aux équipements auxquels ils ont accès.
– la dernière catégorie regroupe les organisations financées (funded organizations).
Ces groupes sont capables de rassembler des experts aux compétences complémentaires et disposent de moyens financiers très importants. Ils peuvent également faire appel à des personnes faisant partie des classes I et II. Les attaquants appartenant à cette catégorie font généralement partie d’agences gouvernementales, de grandes entreprises ou de groupes de crimes organisés. Cette première partie rappelle les moyens d’attaques répertoriés dans la littérature. Ils sont souvent distingués en fonction de leur caractère intrusif ou destructeur. La description de ces catégories d’attaques sera l’objet du paragraphe suivant. Les principales contremesures développées pour lutter contre ces attaques sont ensuite répertoriées. Elles permettent de renforcer la sécurité des systèmes, qui peut être évaluée selon plusieurs critères, nous verrons l’exemple des critères communs. Par la suite, l’intégration de ces contremesures en suivant le flot de conception standard des circuits numériques sera analysée. Les résultats de cette analyse nous aideront à prendre en compte les contraintes dans le choix et l’implantation de ces solutions.

Les attaques actives

   Le deuxième groupe d’attaques non invasives concerne les injections de fautes. Les attaques en fautes exploitent les propriétés physiques des composants. Attaques par modification de la température. Les informations sensibles utilisées par un circuit au cours de son  fonctionnement ont besoin d’être stockées. Elles ne sont pas censées être divulguées à l’extérieur du circuit. Les mémoires volatiles sont utilisées dans ce but : l’information est perdue lorsque l’alimentation est coupée. Toutefois, à cause du phénomène de rétention de données, si le temps nécessaire à la lecture de la mémoire est plus petit que le temps de rétention, la volatilité de la mémoire peut être contournée. Pour une cellule SRAM, le phénomène de rétention est activé aux alentours de -20°C. Dès lors, un attaquant peut alors récupérer le contenu de la mémoire [Ali 2011a]. Dans [Skorobogatov 2009], il est montré que le réchauffement local d’une mémoire non volatile flash ou E²PROM d’un microcontrôleur peut modifier son contenu de manière permanente. L’attaque a été utilisée pour effacer plusieurs bits de la mémoire. D’autre part, les circuits sont spécifiés pour fonctionner dans une certaine gamme de températures. Au-delà de cette gamme, les temps de propagation sont modifiés au point de ne plus garantir le bon fonctionnement du composant. On peut retrouver la mise en évidence de ce phénomène dans [Dutertre 2010]. Des fautes ont été injectés dans un algorithme de cryptographie embarqué sur un FPGA. La température du circuit a été portée à 210°C pour obtenir les premières fautes. Modification de la fréquence d’horloge. Le principe ici est d’augmenter la fréquence de l’horloge qui cadence les opérations du circuit. Cela ne concerne évidemment que les circuits synchrones. Au-delà d’une fréquence maximale, les opérations logiques n’ont pas le temps de s’effectuer avant le front d’horloge qui vient les mettre à jour. Cette méthode, bien qu’efficace, ne permet pas un contrôle spatial ou temporel des fautes injectées. En effet, en modifiant la fréquence d’horloge, les fautes sont potentiellement injectées à chaque cycle d’horloge, ce qui peut provoquer le non-fonctionnement complet du circuit attaqué. Il existe une amélioration de cette méthode, qui consiste non pas à modifier le signal d’horloge en entier, mais à modifier la période d’un ou plusieurs cycles choisis par l’attaquant. Il s’agit ici d’impulsions créées sur le signal d’horloge afin d’en modifier temporairement la fréquence. Dans [Amiel 2006], il est mentionné que de tels raccourcissements de périodes d’horloge provoquent une modification d’un ou de plusieurs octets. L’idée est de diminuer progressivement la période d’un cycle jusqu’à ce qu’une faute apparaisse. Cette méthode d’injection de fautes a été présentée plus récemment dans [Agoyan 2010]. Il est montré qu’avec cette méthode, on est capable de modifier un seul STMicroelectronics Confidentiel bit dans le circuit attaqué avec une bonne synchronisation temporelle et de manière reproductible. Cependant, ces injections requièrent l’accès direct au signal d’horloge. Il n’est pas possible d’attaquer directement un circuit utilisant son propre système de génération d’horloge car la déconnexion de ce signal paraît difficile [Barenghi 2012]. D’autre part, les circuits numériques asynchrones ne possèdent pas de signal d’horloge, et peuvent donc s’avérer efficaces contre ce type d’attaque [Fournier 2003, Monnet 2006]. Modification de la tension d’alimentation. Les circuits intégrés sont conçus pour fonctionner dans une certaine gamme de tension. Cette tension dépend de la technologie des composants élémentaires CMOS. À titre d’exemple, pour les nœuds technologiques avancés actuels (28 nm), la tension d’alimentation nominale se situe autour de 1 V. Au-delà de la gamme opérationnelle de tensions, il n’est plus possible de garantir le bon fonctionnement du circuit. Dès lors, plusieurs types d’attaques peuvent être menées en jouant sur la tension d’alimentation. La sous-alimentation d’un processeur peut entrainer des interruptions ou des sauts d’instructions. On peut ainsi induire des fautes transitoires sur un ou plusieurs bits au fur et à mesure que la tension est diminuée. La baisse de tension modifie les propriétés temporelles des portes logiques en les ralentissant. Ainsi, lorsque les contraintes temporelles ne sont plus respectées, les premières fautes apparaissent [Zussa 2012]. L’influence de la baisse de la tension d’alimentation sur un circuit implémenté sur FPGA est montrée de manière expérimentale dans [Dutertre 2010]. Ce mode opératoire a été utilisé dans [Selmane 2008] sur une carte à puce conçue en technologie 130 nm embarquant un coprocesseur AES. Comme pour les attaques par modification de la fréquence d’horloge, il est possible de modifier temporairement la tension d’alimentation en y créant une impulsion. L’avantage de cette méthode est d’avoir une meilleure synchronisation temporelle du moment où la faute est injectée. Il y a quatre principaux types d’impulsions qui peuvent être appliqués sur les rails d’alimentation d’un circuit (figure 1.6) :
– impulsion positive sur l’alimentation (1.6(b))
– impulsion négative sur l’alimentation (1.6(a))
– impulsion négative sur la masse (1.6(c))
– impulsion positive sur la masse (1.6(d))
Les attaques par impulsion en dessous de la tension nominale sont les plus répandues. Elles ont notamment été utilisées comme méthodes d’injection de fautes dans [Choukri 2005, Bar-El 2006] sur des circuits cryptographiques. Les attaques par surtension qu’il s’agisse de modifications quasi-statiques ou d’impulsions sur l’alimentation restent relativement rares dans la littérature. Peu d’études se sont focalisées sur les effets de telles attaques. On peut néanmoins citer [Hutter 2009]. Des impulsions de 7 V ont été appliquées sur un tag RFID, ce qui a provoqué une écriture erronée dans la mémoire du tag. Toutefois, les mécanismes mis en jeu lors de ces attaques ne sont pas mentionnés et restent peu connus. Attaques par impulsions électromagnétiques. Les attaques électromagnétiques ont d’abord été utilisées de manière passive, c’est-à-dire pour réaliser des attaques par canaux auxiliaires comme indiqué dans la section 1.1.2.1. Cependant, ce vecteur constitue également un moyen d’attaque qui a été étudié par plusieurs groupes de recherche. Quisquater et Samyde [Quisquater 2002] ont décrit l’usage d’une sonde pour appliquer un fort champ magnétique transitoire sur un microprocesseur. Ils ont utilisé le flash d’un appareil photo pour injecter une haute tension dans la bobine de la sonde. La forte tension entraine un champ magnétique qui à son tour provoque des courants de Foucault à la surface de la puce qui sont à l’origine des erreurs relevées. Dans [Schmidt 2007], les auteurs ont utilisé un éclateur à la place d’une sonde pour générer un arc électrique audessus du microcontrôleur exécutant l’algorithme de cryptographie asymétrique RSA. Grâce à la faute injectée, l’attaque réalisée a permis de factoriser le module de chiffrement de l’algorithme. Plus récemment, les travaux [Dehbaoui 2012a] ont porté sur l’étude des fautes injectées par une sonde électromagnétique sur un microcontrôleur 8-bits en technologie 0.35 µm. En envoyant une impulsion de 50 V d’amplitude et d’une durée de 20 ns à différents moments de la 10e ronde de l’AES, chacun des 16 octets de la ronde a pu être fauté. L’attaque permet donc une bonne synchronisation temporelle. Les mêmes auteurs dans [Dehbaoui 2012b] se sont intéressés aux types de fautes induites par des impulsions électromagnétiques sur FPGA. En regardant des chemins de propagation témoins placés à différents endroits dans le circuit, ils ont observé des modifications de temps de propagation de manière localisée dans le FPGA.

Protection contre les attaques invasives

   Ces attaques physiques requièrent d’ouvrir le boîtier afin d’avoir accès aux interconnexions. La première contremesure est d’empêcher le désassemblage de la puce. Les boîtiers BGA (Bold Grid Array) peuvent rendre l’ouverture plus difficile : la puce doit être dessoudée et placée sur un adaptateur spécial (nécessite des équipements spécifiques et un personnel qualifié) [Skorobogatov 2005]. Toutefois, cette protection a un impact limité car le désassemblage peut être sous-traité ou externalisé afin de contourner cette difficulté. Le circuit est exposé à plus de lumière lorsque le boîtier est retiré. Par conséquent, un détecteur de lumière qui réinitialise ou détruit le circuit en cas de détection d’une quantité anormale de lumière peut être utilisé. Une autre contremesure consiste à rendre plus difficile l’accès aux signaux importants, notamment en utilisant un placement routage automatique tout en aboutant les composants les uns contre les autres (glue logic). Le cryptage des bus de données contribue aussi à complexifier la récupération des données [Maingot 2009] Contre les techniques d’attaques par sondage (microprobing), l’ajout d’un bouclier (shield) passif, ou actif (des bits de valeurs aléatoires transitent sur le bouclier) assurent une protection supplémentaire.

Conception automatisée à base de cellules standard

   La conception à base de cellules standard utilise une bibliothèque de portes logiques prédéfinies. Les cellules sont placées dans la position appropriée, et leurs interconnexions sont routées. Cette méthode de conception permet d’obtenir des circuits ayant à la fois une consommation plus faible, des performances accrues et une taille réduite par rapport aux FPGA. Cependant les coûts de développement sont plus importants notamment pour la production des masques [Weste 2010]. Le développement de la synthèse logique et des outils de placement et routage ont contribué à l’utilisation de cellules standard pour la conception de circuit. Les fondeurs et les fabricants de bibliothèques fournissent des cellules avec une large gamme de fonctions et de différentes tailles. Elles peuvent inclure :
– des fonctions logiques élémentaires (portes OU, ET, NON, OU-exclusif etc.) ou complexes
– des portes logiques de mémorisation (verrous, bascules)
– des mémoires (SRAM, ROM, CAM etc.)
Généralement, les cellules standard ont une hauteur fixe, ce qui permet de les connecter directement aux rails d’alimentation Vdd et Gnd (figure 1.13). Les cellules sont ainsi disposées les unes contre les autres sur plusieurs rangées en fonction de la taille du circuit. L’étape de routage permet ensuite de réaliser les connexions entre les cellules

Contraintes industrielles de développement

   Avec les menaces qui se font persistantes sur les circuits présents sur le marché, les concepteurs doivent être en mesure de proposer rapidement des solutions adaptées à l’évolution de ces attaques. Les améliorations passent par l’intégration de contremesures, qui doivent avoir un impact limité sur le coût final du système. De plus, la tendance aujourd’hui est à la réduction du temps entre la conception d’un produit et sa mise sur le marché (time to market). Cela doit inclure bien évidemment l’ensemble des tests fonctionnels une fois le circuit fabriqué. Toutes ces contraintes doivent être prises en compte dans les solutions de protection à adopter pour un système donné. En effet, le cycle de développement du système protégé doit être court, ce qui implique l’utilisation de contremesures peu complexes à développer. D’autre part, il faut s’assurer que les protections apportées soient les mêmes d’un circuit à l’autre (critère de reproductibilité). À cela, s’ajoute un autre critère important qui est la testabilité des contremesures. Il est possible de réaliser des mesures pour les attaques passives, néanmoins celles-ci peuvent être coûteuses en temps de test. De même, les tests de fonctionnalité des protections contre les attaques actives peuvent d’une part s’avérer longs à effectuer (toutes les configurations possibles) et d’autre part, certains types de fautes peuvent endommager ou faire vieillir le circuit. Ces considérations sont à prendre en compte pour le choix d’une contremesure adaptée à un type d’attaque. Une fois que les fonctions testées sont conformes aux attentes, il faut s’interroger aussi sur l’évolution du comportement global du circuit dans le temps. Si l’exemple d’un détecteur d’erreurs est considéré, il est important de savoir comment le ou les seuils de détection vont changer au cours du temps et si ceux-ci vont dégrader les performances du circuit en se déclenchant trop tôt. Pour avoir une dégradation uniforme, il faudrait veiller à ce que l’ensemble du système soit utilisé en même temps, ce qui éviterait un déséquilibre dans le vieillissement des composants.

Types d’analyse

   Analyse de la consommation moyenne. Le premier type d’analyse consiste à calculer la consommation moyenne du circuit sur un intervalle de temps donné (analyse statique). La probabilité pour chaque événement ainsi que la contribution de chacun d’entre eux dans le calcul de la puissance moyenne des portes logiques sont estimés. L’analyse requiert un fichier qui comporte l’activité du circuit. Généralement, des fichiers de type SAIF sont utilisés pour cette analyse. Il s’agit d’un format développé par Synopsys mais qui est supporté et utilisé par plusieurs outils d’aide à la conception de circuits. Ces fichiers contiennent le nombre de transitions sur chaque signal du circuit, ainsi que la durée pendant laquelle celui-ci se trouve dans un état logique haut ou bas, dans un état indéterminé ou en haute impédance [Xil 2009]. La génération du fichier SAIF se fait lors de l’étape de simulation fonctionnelle logique du circuit en cours de test. Ce type d’analyse privilégie la performance à la précision. Analyse de la consommation en fonction du temps. Le deuxième type d’analyse permet d’évaluer la puissance consommée en fonction du temps. Pour chaque événement, l’énergie correspondante est obtenue à partir de la bibliothèque de caractérisation des portes logiques et permet de construire la courbe de puissance consommée. Cette analyse nécessite un type de fichier différent de l’analyse statique : ici il s’agit d’un fichier VCD. Le format VCD est un standard défini par la norme IEEE Standard 1364-1995 [IEEE 1996]. Ce fichier contient les événements intervenant sur les signaux à chaque étape de la simulation. Il est généré à l’étape de simulation fonctionnelle tout comme le fichier SAIF. Le fichier VCD donne l’information sur la valeur d’un signal à un instant donné et également le moment où une transition s’effectue sur ce signal. À titre de comparaison, cette dernière information est absente des fichiers SAIF, qui ne contiennent qu’une information cumulée des fichiers VCD ce qui explique aussi que les fichiers SAIF soient moins volumineux que les VCD. Contrairement à l’analyse statique, la précision est le critère le plus important ici. Pour notre étude, on a besoin de la puissance consommée en fonction du temps, c’est donc l’analyse dynamique qui sera utilisée par la suite.

Intérêt d’évaluer la signature

   Les attaques par canaux auxiliaires, notamment par analyse de consommation, se font par des tests sur silicium. L’analyse est donc réalisée en fin de développement, et si une ou plusieurs failles sont identifiées, il ne sera pas possible de modifier le circuit déjà fabriqué. Il peut ainsi s’écouler un long moment entre la découverte d’une faille, et la correction de celle-ci. Le but est donc de réduire ce temps de réaction en ayant la possibilité d’effectuer ces caractérisations sécuritaires  pendant la phase de conception. En effet, la détection de vulnérabilités du circuit en amont dans le flot de conception permet d’anticiper le développement de contremesures. L’idée est de pouvoir introduire au moment de la définition des spécifications du circuit des contraintes de conception visant à limiter la signature électrique. Ces contraintes seront vérifiées tout au long du flot. Avec cette approche, la robustesse d’un circuit vis-à-vis d’attaques par analyse de consommation peut être augmentée avant tout test électrique.

Cas particuliers et paramètres additionnels

   Pour obtenir la signature électrique d’un bloc analogique, on a besoin de la netlist après dessin des masques du circuit. Cette netlist est simulée dans les conditions de fonctionnement du circuit (stimuli de l’opération considérée à tension nominale) et on mesure le courant tiré depuis la source d’alimentation. Les modèles SPICE des transistors prennent en compte les capacités MOS, ainsi avec cette netlist, on a aussi accès à la capacité de jonction entre le caisson et le substrat. En ce qui concerne les capacités parasites, elles sont générées en même temps comme indiqué dans la partie 2.2.3.2. Ainsi, pour un circuit purement analogique, il n’est pas nécessaire de séparer la phase d’extraction des capacités et l’extraction du courant pour obtenir la signature car les simulations transitoires utilisant les modèles SPICE sont assez précises pour caractériser la puissance consommée. Par conséquent une simulation électrique classique pour un bloc analogique peut être utilisée. La modélisation des circuits analogiques pour l’optimisation des temps de simulation n’est pas abordée dans cette étude. Certains éléments du circuit qui est testé sur silicium ne sont pas représentés en détails sur la figure 2.13. Parmi ces éléments, on a le boitier, la carte de test ou encore les sondes utilisées pour effectuer les mesures. On peut également ajouter les résistances du réseau de distribution d’alimentation au niveau du circuit ou même la résistance série utilisée pour mesurer le courant. Certains de ces paramètres peuvent être négligés, si ce n’est pas le cas on peut les prendre en compte dans le paramètre Zex t , l’impédance externe au circuit. On a choisi de séparer ces paramètres car ils ne dépendent pas du circuit ou de sa fonctionnalité. Le boîtier ou la carte de test peuvent être différentes d’une expérience à une autre, les valeurs correspondantes sont prises dans la documentation du fabricant. À titre d’exemple, pour des boîtiers de type BGA à 144 billes, l’inductance est évaluée à 2.25 nH en valeur typique et la capacité (C lumped) à 60 fF dans [Clark 2003]. La résistance série équivalente du réseau de distribution d’alimentation peut être estimée à partir de l’extraction des résistances parasites. L’extraction donne la résistance entre le point d’arrivée de l’alimentation et chaque transistor connecté à la grille d’alimentation. Toutes ces résistances en parallèle représentent la résistance série équivalente du réseau d’alimentation. En fonction de la valeur de la résistance de mesure, la résistance du réseau d’alimentation peut être négligée.

Le rapport de stage ou le pfe est un document d’analyse, de synthèse et d’évaluation de votre apprentissage, c’est pour cela rapport-gratuit.com propose le téléchargement des modèles complet de projet de fin d’étude, rapport de stage, mémoire, pfe, thèse, pour connaître la méthodologie à avoir et savoir comment construire les parties d’un projet de fin d’étude.

Table des matières

Introduction
1 Menaces et sécurisation des circuits intégrés numériques 
1.1 Aperçu des attaques visant les circuits numériques 
1.1.1 Attaques invasives
1.1.2 Attaques non invasives
1.1.2.1 Attaques par canaux auxiliaires
1.1.2.2 Les attaques actives
1.1.3 Attaques semi-invasives
1.2 Contremesures
1.2.1 Protection contre les attaques invasives
1.2.2 Protection contre les attaques actives
1.2.2.1 Redondance matérielle
1.2.2.2 Redondance temporelle
1.2.2.3 Redondance d’information
1.2.3 Protection contre les attaques par canaux auxiliaires
1.2.4 Bilan
1.3 Exemple de critères d’évaluation : les critères communs 
1.3.1 Cible de sécurité et profil de protection
1.3.2 Exigences d’assurance de sécurité
1.3.3 Analyse des vulnérabilités et potentiel d’attaque
1.4 Intégration de contremesures dans le flot de conception 
1.4.1 Méthodes de conception
1.4.1.1 Utilisation de processeurs
1.4.1.2 Logique programmable
1.4.1.3 Conception automatisée à base de cellules standard
1.4.1.4 Conception sur-mesure (full-custom)
1.4.2 Contraintes imposées par le flot numérique
1.4.3 Contraintes industrielles de développement
1.5 Conclusion
2 Attaques passives en tension 
2.1 Consommation des circuits
2.1.1 Étude théorique de la consommation d’un circuit numérique
2.1.1.1 Différents types de consommation
2.1.1.2 Influence des paramètres physiques
2.1.2 Évaluation de la consommation
2.1.2.1 Types d’analyse
2.1.2.2 Flot d’évaluation
2.1.3 Bilan
2.2 Signature de consommation électrique en phase de conception
2.2.1 Intérêt d’évaluer la signature
2.2.2 Niveaux hiérarchiques à considérer pour la signature
2.2.3 Extraction de la capacité de grille d’alimentation
2.2.3.1 Capacités à extraire
2.2.3.2 Méthodologie d’extraction
2.2.4 Modèle équivalent de la signature en courant
2.2.4.1 Présentation du modèle
2.2.4.2 Cas particuliers et paramètres additionnels
2.2.5 Résultats du modèle obtenu
2.2.5.1 Paramètres expérimentaux
2.2.5.2 Résultats expérimentaux
2.2.5.3 Résultats de simulation
2.2.5.4 Comparaison et analyse
2.3 Évaluation de contremesures à l’aide du modèle
2.3.1 Les catégories de contremesure
2.3.1.1 Techniques de masquage
2.3.1.2 Techniques de dissimulation
2.3.2 Résultats des modèles simulés
2.3.2.1 Masquage des données
2.3.2.2 Capacités de découplage
2.4 Conclusion du chapitre 
3 Attaques actives en tension 
3.1 Attaques par impulsions sur l’alimentation
3.1.1 Rappels théoriques
3.1.1.1 Contraintes temporelles de fonctionnement
3.1.1.2 Définition des temps de setup et hold sur des bascules
3.1.2 Étude de l’impact de la variation de la tension sur la logique
3.1.2.1 Étude des temps de propagation
3.1.2.2 Conséquence sur les paramètres des contraintes temporelles
3.1.2.3 Fonctionnement de la logique
3.1.3 De la modification de tension à l’injection de fautes
3.1.3.1 Violations de contraintes temporelles
3.1.3.2 Impulsions transitoires à la sortie des portes combinatoires
3.1.3.3 Cas de domaines d’alimentation séparés
3.1.3.4 Autres phénomènes possibles
3.1.4 Distribution temporelle des chemins dans la logique synchrone
3.1.4.1 Profil de distribution des chemins
3.1.4.2 Paramètres modifiant la distribution temporelle
3.1.5 Bilan
3.2 Réalisation de circuits de détection 
3.2.1 Travaux relatifs à la détection de violation de temps de setup
3.2.2 Principes de fonctionnement des circuits de détection
3.2.2.1 Description du fonctionnement
3.2.2.2 Détermination des marges de fonctionnement
3.2.3 Solutions étudiées
3.2.3.1 Convertisseur temporel vers numérique (TDC : Time to digital converter )
3.2.3.2 Circuits de détection
3.2.4 Intégration des solutions
3.2.4.1 Implantation
3.2.4.2 Vérification et caractérisation en phase de conception
3.2.5 Résultats des tests silicium
3.2.5.1 Dispositif expérimental
3.2.5.2 Procédure de test
3.2.5.3 Mesures et résultats
3.2.6 Analyse et comparaison des mesures et des simulations
3.2.6.1 Comparaison avec les résultats théoriques
3.2.6.2 Analyse des mesures
3.2.6.3 Comparaison des détecteurs
3.3 Conclusions 
Conclusion générale et perspectives
Glossaire
Bibliographie
Liste des publications

Rapport PFE, mémoire et thèse PDFTélécharger le rapport complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.