Projet de spécialité - Énumération de clé de chiffrement AES accélérée sur GPU

De Ensiwiki
Aller à : navigation, rechercher

Énumération de clé de chiffrement AES accélérée sur GPU

Sujet de Projets de spécialité - 2A 2021-2022 proposé par Thomas Hiscock (CEA-Leti) et Julie Dumas (TIMA)

Étudiants par équipe : 3 à 5

Nombre d'équipes : 1

Contexte

L’algorithme AES (Rijndael) est le standard de chiffrement symétrique utilisé pour chiffrer et assurer l’intégrité la majorité de nos communications et données. Cet algorithme prend en entrée une clé secrète, un message clair et produit un message chiffré.

Le laboratoire LSOSP du CEA-LETI situé à Grenoble traite de nombreuses thématiques autour de la sécurisation des systèmes embarqués. Lors de l’analyse de sécurité d’un produit, il est fréquent d’avoir à quantifier la difficulté de retrouver la clé secrète d’un algorithme AES.

Supposons que l’on ait intercepté un ou plusieurs couples (message_clair,message_chiffré), avec message_chiffré = AES_{k_0}(message_clair) (nous appelons k_0 la clé secrète utilisée). Dans cette situation, une approche simple pour retrouver k_0 est d’énumérer toutes les valeurs possibles de clé k^* pour trouver une hypothèse qui satisfait :

   AES_{k^*}(message_clair) = message_chiffré

Les clés utilisées sont en général de taille 128 bits, ce qui représente 2^{128} hypothèses pour k^* à tester !

Mais en situation réelle, diverses techniques d’attaques permettent de retrouver des sous parties de clé, par exemple :

  • Les attaques par canaux auxiliaires (Kocher 1996), peuvent extraire une partie ou la totalité d’une clé à partir de mesures physiques du système.
  • Les attaques cold boot, ou une extraction physique de composants permettent de retrouver des fragments de mémoire.
  • Les attaques sur les mémoires caches (Osvik, Shamir, and Tromer 2006) permettent d’extraire des informations entre les processus sur un même système.

La problématique que nous proposons de traiter dans ce projet est la suivante: comment peut-on énumérer efficacement les clés d’un algorithme AES quand certaines parties sont connues ?

Au vu de la nature parallèle du problème, les architectures de carte graphiques modernes (GPGPU) semblent très adaptées.

Objectifs du projet

L’objectif de ce projet est de développer une librairie (C ou C++) permettant l’énumération de clé sur GPU.

Dans les grandes lignes, le projet s’organisera autour des taches suivantes:

  • Développer un modèle de référence non parallélisé où l’utilisateur peut définir certains octets de clé connus, ainsi qu’un couple (message_clair, message_chiffré). La librairie doit alors pouvoir énumérer toutes les hypothèses restantes et retrouver la bonne clé.
  • Définir une architecture et une approche pour paralléliser les calculs sur architecture GPU.
  • Mettre en œuvre une énumération de clé sur accélérée sur GPU (en CUDA ou OpenCL).
  • Démontrer et quantifier le gain de la version GPU par rapport à la version de référence.

Le sujet étant très vaste, nous déterminerons une feuille de route exacte avec l’équipe étudiante. Cette dernière pourra évoluer au cours du projet. Voici quelques idées de points “bonus” qui peuvent être traités :

  • Comparaison d’une mise en œuvre OpenCL et CUDA
  • Comparaison de plusieurs approches de parallélisation
  • Mise en œuvre d’une énumération “intelligente”, capable de prendre en compte des scores de confiances sur les valeurs d’octets de clé.

Contact

Thomas Hiscock (thomas.hiscock@cea.fr) et Julie Dumas (julie.dumas@univ-grenoble-alpes.fr)

Références

Kocher, Paul C. 1996. “Timing Attacks on Implementations of Diffie-Hellman, Rsa, Dss, and Other Systems.” In Annual International Cryptology Conference, 104–13. Springer.


Osvik, Dag Arne, Adi Shamir, and Eran Tromer. 2006. “Cache Attacks and Countermeasures: The Case of Aes.” In Cryptographers’ Track at the Rsa Conference, 1–20. Springer.