TD SCA

Objectif

L'objectif de ce TD est de réaliser une attaque de type DPA sur des traces déjà acquises, et de comparer différents types d'attaque (DPA, CPA) et différents types de modèles de consommation (poids de hamming sur un bit, distance de hamming sur un octet, etc.).

Introduction

Les traces de consommation que vous allez utiliser lors de ce TD ont été acquises au sein du laboratoire Sécurité Matérielle de Télécom ParisTech (département COMELEC, équipe SEN), en avril 2006, et ont été utilisées lors d'un concours international organisée par l'école et baptisé le "DPA contest". Lors de ce concours, les participants devaient soumettre des attaques et l'objectif était de retrouver, en utilisant le moins de traces possible, la clé secrète manipulée par le circuit sur lequel ces traces avaient été acquises.

Cette première édition de ce concours (une deuxième édition a eu lieu entre 2009 et 2011, et une troisième édition a été lancée début 2011) vise une implémentation matérielle de l'algorithme DES sur un ASIC (Secmat V1) conçu à l'école. L'architecture du DES est décrite dans cet article. Un tour de DES est réalisé à chaque cycle d'horloge.

Préparation de l'environnement de travail

Pour les élèves situés à l'extérieur du réseau de l'école (par exemple ceux du M2 SETI), les deux archives peuvent être récupérées via les liens suivants : secmatv1_2006_04_0809_5000.tar.gz (traces) et td_dpa_py.tar.gz (squelette).

La première étape est de récupérer les traces de consommation du circuit. Durant la campagne d'acquisition, plus de 80.000 traces ont été enregistrées, mais pour des raisons de simplicité, vous allez récupérer un sous-ensemble de 5.000 traces. Ces traces sont contenues dans une archive qui, une fois extraite, fait environ 400 Mio. Afin de ne pas surcharger vos comptes, vous allez extraire cette archive dans un répertoire créé localement sur la machine où vous travaillez. Quand vous vous loggez (physiquement) sur une des machines dans la salle de TP, un répertoire local est créé automatiquement. Vous le trouverez dans /home/users/. Alors, déplacez-vous dans votre répertoire local pour commencer le travail:

$ cd /home/users/xxx
$ tar xzvf ~duc/enseignements/elecinf359/secmatv1_2006_04_0809_5000.tar.gz
[...]
$

Note : remplacez xxx par votre login (il en sera de même dans les commandes suivantes).

A noter aussi que ce répertoire est strictement local à la machine sur laquelle vous travaillez pendant le TD. Si vous voulez y accéder via ssh après, il faut se rappeler du nom de la machine.

Ensuite, récupérez le squelette d'application en Python contenant les fonctions nécessaires pour lire le répertoire contenant les traces, décoder une trace (qui sont dans un format binaire propre à l'oscilloscope) et pour calculer les différentes étapes de l'algorithme DES.

$ mkdir sr2i
$ cd sr2i
$ tar xzvf ~duc/enseignements/elecinf359/td_dpa_py.tar.gz
[...]
$ cd td_dpa_py

Vous pouvez maintenant tester l'application dpa (qui ne fait pour le moment que afficher les traces) :

$ ./dpa.py
Usage: dpa.py trace_directory number_of_traces_to_use
$ ./dpa.py /home/users/xxx/secmatv1_2006_04_0809_5000 1
$

Squelette d'application

L'archive contient trois fichiers :

  • dpa.py : Programme principal. C'est ce fichier que vous allez modifier
  • dpa_des.py : Contient un morceau de l'algorithme DES et notamment une fonction importante : des_first_round_hd_4bits qui est le premier modèle de consommation que vous utiliserez (modèle en distance de hamming sur 4 bits au premier tour de DES)
  • dpa_traces.py : Contient le code nécessaire pour lire et décoder les traces de consommation fournies

Travail demandé

Le TD commencera pas un rappel au tableau du principe de la DPA et de l'explication de l'utilisation du modèle de consommation fourni (distance de hamming sur 4 bits au premier tour).

À vous ensuite de coder une DPA, une CPA, ... et à comparer différents modèles de fuite. Identifiez les modèles qui marchent le mieux, affichez les traces différentielles (avec gnuplot par exemple), etc. Voici quelques exemples d'expériences à faire:

  1. Implémenter l'attaque DPA classique sur le modèle de fuite "différence de hamming sur 4 bits"
  2. Changer le modèle de fuite en une version qui prend en entrée le nombre de bits à considérer (entre 1 et 4). Comment l'efficacité de l'attaque change-t-elle selon ce paramètre?
  3. Essayer d'autres modéles de fuite (en poids de hamming ou en distance de hamming, après le XOR avec la clé, en sortie de boîte S, entre deux registres, etc.)
  4. Désynchroniser artificiellement les traces avant l'analyse en les décalant aléatoirement. Comment l'efficacité de l'attaque change-t-elle?
  5. Implémenter une attaque CPA (Correlation Power Analysis) et comparez avec la DPA.

Pour information dans le DPA contest v1, la clé produite par l'attaque devait être stable pendant 100 traces pour être acceptée. En utilisant ce critères, les meilleurs attaques soumises trouvent la clé en ... 120 traces seulement (donc au bout de la 20e trace, la bonne clé est trouvée et reste stable pendant les 100 traces suivantes). Essayez de vous approcher de ce résultat ! Bon courage !

Résultat

Si votre attaque fonctionne, elle doit retrouver la première sous-clé qui est : 38 0B 3B 26 00 0D 19 37.

Fichier attachéTaille
PDF icon sdarticle.pdf1013.82 Ko