Aller au contenu principal

Chiffrement AES

Progression

#Chiffrement AES (Advanced Encryption Standard)

À quoi ça sert ?

À quoi ça sert: chiffrer efficacement des données avec un secret partagé. Comment: AES chiffre des blocs de 128 bits en 10/12/14 tours (AES‑128/192/256); on l’emploie via des modes d’opération sûrs (CTR/GCM), avec IV/nonce unique et, idéalement, une authenticité intégrée (AEAD).

#Principe

L'AES est un chiffrement par blocs qui traite les données par blocs de 128 bits. Il supporte des clés de 128, 192 ou 256 bits, correspondant respectivement à AES-128, AES-192 et AES-256.

#Animation interactive

Voici une animation qui illustre le fonctionnement de l'algorithme AES :

Chargement...

#Structure de l'AES

#Organisation des données

  • Taille de bloc : 128 bits (16 octets)
  • État : Organisé en matrice 4×4 d'octets
  • Clé : 128, 192 ou 256 bits

#Rounds

L'AES effectue plusieurs rounds de transformation :

  • AES-128 : 10 rounds
  • AES-192 : 12 rounds
  • AES-256 : 14 rounds

Chaque round applique 4 transformations :

  1. SubBytes : Substitution non linéaire
  2. ShiftRows : Permutation des lignes
  3. MixColumns : Mélange des colonnes (sauf dernier round)
  4. AddRoundKey : XOR avec la clé de round

#Implémentation en Python

pythonpython
1import numpy as np2 3# Fonction pour créer la matrice S-box (simplifiée)4def create_sbox():5    \"\"\"Créer une S-box simplifiée pour l'exemple\"\"\"6    # Dans une implémentation réelle, ceci serait une table prédéfinie7    sbox = {}8    for i in range(256):9        # Simplification : inversion dans GF(2^8) + transformation affine10        sbox[i] = i ^ 0x63  # Transformation affine simplifiée11    return sbox12 13# Fonction pour SubBytes14def sub_bytes(state, sbox):

#Génération des clés de round

L'AES utilise un processus appelé "Key Schedule" pour générer les clés de chaque round à partir de la clé principale.

pythonpython
1def key_expansion(key):2    \"\"\"Génération des clés de round (simplifiée)\"\"\"3    # Dans une implémentation réelle, ceci serait plus complexe4    round_keys = []5    6    # La clé initiale est la première clé de round7    round_keys.append(key)8    9    # Générer les clés suivantes (simplifié)10    for i in range(10):  # Pour AES-12811        # Dans l'AES réel, on utilise la clé précédente + une constante de ronde12        # et des transformations comme SubWord et RotWord13        new_key = [[(key[r][c] + i + 1) % 256 for c in range(4)] for r in range(4)]14        round_keys.append(new_key)

#Exercice : Implémentation du déchiffrement AES

Implémentez le déchiffrement AES en inversant les opérations de chiffrement.

#Instructions

  1. Inversez l'ordre des opérations
  2. Utilisez les transformations inverses
  3. Appliquez les clés de round dans l'ordre inverse

#Exemple de code

pythonpython
1# Fonction pour InvShiftRows2def inv_shift_rows(state):3    \"\"\"Appliquer InvShiftRows à l'état\"\"\"4    # Décaler la ligne 1 d'un cran vers la droite5    state[1] = state[1][-1:] + state[1][:-1]6    7    # Décaler la ligne 2 de deux crans8    state[2] = state[2][-2:] + state[2][:-2]9    10    # Décaler la ligne 3 de trois crans11    state[3] = state[3][-3:] + state[3][:-3]12    13    return state14 

#Applications

  1. Sécurité des communications : HTTPS, SSH, VPN
  2. Stockage sécurisé : Disques chiffrés, bases de données
  3. Applications mobiles : Chiffrement des données locales
  4. Systèmes d'exploitation : Chiffrement de fichiers
  5. Cartes à puce : Sécurité des transactions
  6. Cloud computing : Protection des données dans le cloud

#Sécurité

L'AES est considéré comme sécurisé contre toutes les attaques pratiques connues :

  • Cryptanalyse différentielle : Résistante grâce à sa structure
  • Cryptanalyse linéaire : Résistante grâce aux S-boxes
  • Attaques par force brute : Impraticable pour AES-128 et plus

#Modes de chiffrement

L'AES peut être utilisé avec différents modes :

  1. ECB (Electronic Codebook) : Chaque bloc chiffré indépendamment
  2. CBC (Cipher Block Chaining) : Chaque bloc XORé avec le précédent
  3. CTR (Counter) : Chiffrement comme un chiffre de flux
  4. GCM (Galois/Counter Mode) : Authentification intégrée

L'AES est un algorithme solide et éprouvé qui protège des milliards de transactions numériques chaque jour."

Modes d’opération (rappel)

Évitez ECB (révèle les motifs). CBC requiert padding et un IV aléatoire et n’offre pas d’authenticité — combinez avec un MAC (ou préférez GCM). CTR/GCM exigent un nonce unique par clé.