Le carnet d'adresses d'Orlov

...

Bien que défait, le général russe Orlov a rétabli l'organisation de contre-espionnage du SMERSH. James Bond est persuadé que la liste des membres du SMERSH est stockée dans le YotaPhone d'Orlov. Les agents du MI6 ont réussi à collecter les informations suivantes :

Le contenu du carnet d'adresses est chiffré avec un mot de passe ; à l'aide de jumelles, nos espions ont pu déterminer que lorsque Orlov le saisissait, le premier caractère était un chiffre et que les suivants étaient des lettres minuscules. Ils n'ont pas bien vu, mais ils sont sûrs qu'il n'y a pas plus de 6 caractères en tout.

Le mot de passe est stocké sur le YotaPhone sous la forme d'un hash (empreinte) de 32 bits ; l'algorithme de hash est assez rudimentaire. Dans ce qui suit, les symboles ^, & et >> désignent respectivement le ou exclusif, le et logique et le décalage de bits.

  • On crée une table HASH de 256 valeurs 32 bits ; la ième valeur est calculée ainsi :
k = i
répéter 8 fois:
    si (le bit de poids faible de k == 1) alors
        k = k ^ 0xdeadc0de
    k = k / 2

Dans l'algorithme qui précède, tous les nombres mis en jeu sont des entiers.

  • On calcule le hash H d'une chaîne de caractères S selon la formule suivante :
H = 0xffffffff
répéter pour chaque caractère de code ascii C de la chaîne de caractères S:
    H = (H >> 8) ^ HASH[(H & 0xff) ^ C]
H = H ^ 0xffffffff

Enfin, lorsqu'un mot de passe est saisi, son hash est calculé et comparé à celui stocké sur le YotaPhone. Si il y a correspondance, le mot de passe en clair est utilisé pour déchiffrer le carnet d'adresses.

Le MI6 pense que si on arrive à subtiliser le YotaPhone d'Orlov, on peut, à l'aide d'une vulnérabilité d'Android avoir accès à sa mémoire et y retrouver la valeur du hash.

Lors d'une réception de l'ambassadeur Ferrero, James dérobe le YotaPhone et en extrait la valeur de hash : 0xbed3414a. Malheureusement ce hash ne fait pas partie de la liste que le MI6 lui avait préparé :

   hash     |  mot de passe
------------+--------------
0xb6e957d3  |  4ever
0xbc85bbc8  |  2penny
0xccbc0a32  |  7bond
0xd51b1e85  |  7jbond
0xfcf2e28c  |  1enkin

En fin développeur, vous allez devoir aider Q à retrouver le mot de passe en clair.

Ce problème est tiré de c0d1ng UP 2019

Type de retour

une chaîne de caractères

Entrée du problème

Pas de donnée d'entrée

Formulaire de réponse

Vous devez être connecté pour pouvoir répondre aux défis

Tags : algorithmique cryptographie combinatoire cup19 level4