Solution de GarlicHorse pour Le Rat Conteur

intro crypto

15 octobre 2024

Table des matières

Mise en contexte

Une image JPG flag.jpg a été chiffrée à l’aide de l’algorithme de chiffrement AES en mode CTR. L’article Wikipedia en anglais des modes de chiffrements est plutôt complet : https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Counter_(CTR)

On apprend que le mode de chiffrement CTR utilise :

  • Une clé afin de chiffrer à l’aide de l’algorithme de chiffrement (AES ici)
  • Un IV (ou nonce) qui est une valeur aléatoire choisie au début du chiffrement et incrémentée à chaque block qui est chiffré par l’algorithme de chiffrement puis XOR avec le block de clair.

Solution

On dispose de l’IV qui est nul et de la clé 00112233445566778899aabbccddeeff.

On se réfère à https://pycryptodome.readthedocs.io/en/latest/src/cipher/classic.html#ctr-mode pour déchiffrer l’image.

from Crypto.Cipher import AES
from Crypto.Util.number import *

IV = long_to_bytes(0)
clef = bytes.fromhex("00112233445566778899aabbccddeeff")

with open('flag.jpg.enc', 'rb') as imagechiffree:
    image_bytes = imagechiffree.read()

try:
    chiffrement = AES.new(clef, AES.MODE_CTR, nonce=IV)
    pt = chiffrement.decrypt(image_bytes)

    with open('flag.jpg', 'wb') as flag:
        flag.write(pt)
except (ValueError, KeyError):
    print("Erreur lors du déchiffrement.")

Une superbe image de Yoda nous attend !