Programmation assembleur (ASM)
Rick Wertenbroek / Magali Frölich / Daniel Rossier
Sécurité sur
x86
Jeudi 12 janvier 2017
Echéance: vendredi 27 janvier 2017, 23h59
- 1 -
labo secu
(v2017.1.6)
Objectif du laboratoire
Ce laboratoire propose deux exercices pratiques pour étudier les conventions
ABI
cdecl
utilisées avec
le jeu d’instructions
x86.
Le premier exercice se concentre sur l'algorithme de chiffrement AES-128
(128 bits). Nous utiliserons les instructions spécialisées fournies par l'extension AES-NI d'Intel. Le
deuxième exercice propose de mettre en place une attaque de type
buffer overflow
.
Consignes de laboratoire
Le laboratoire est
individuel
et est évalué selon les conditions établies dans le document
annexe qui vous a été distribué en début de semestre.
Pour toutes les fonctions implémentées en assembleur x86 il sera demandé de respecter la
convention
ABI cdecl
étudiée en cours.
Etape no. 1
– Chiffrer un bloc de données avec l’algorithme AES
L’algorithme de chiffrement AES-128 sert à chiffrer des blocs de données de 128 bits. C’est un
chiffrement symétrique, ce qui veut dire qu’on utilisera la même clé pour chiffrer et déchiffrer les
données.
Les étapes permettant le chiffrement d'un bloc de données sont les suivantes :
Générer les sous-clés depuis la clé initiale.
Ronde initiale
Rondes internes (Cette opération doit être répétée 8 fois)
Ronde finale
Les instructions principales utilisées dans le programme sont les suivantes :
aeskeygenassist
imm8, %xmm1, %xmm1
Génération des sous-clés
aesimc
%xmm1, %xmm2
Transformation inverse mixColumns
aesenc
%xmm1, %xmm2
Chiffrement des rondes internes
aesenclast
%xmm1, %xmm2
Chiffrement de la ronde finale
aesdec
%xmm1, %xmm2
Déchiffrement des rondes internes
aesdeclast
%xmm1, %xmm2
Déchiffrement de la ronde finale
Les instructions AES-NI manipulent les registres 128-bits
(%xmm0, %xmm1, %xmm2, …).
a) Le ficher
labo6/asm_x86/aes.S
contient une implémentation de l’algorithme AES.
Prenez connaissance du code contenu dans ce fichier.