SW VI : Sur la lune d'Endor

Authentification à 2 facteurs malmenée

Ce défi est tiré de c0d1ngUP 2018

R2 et ses compagnons sont sur la lune forestière d'Endor et tentent de pénétrer dans le bunker pour désactiver le champ de force qui protège l'étoile de la mort.

Heureusement ils disposent déjà du login et du mot de passe de Vader :

login: father
pass:  Th3D4rkS1d3

Mais il n'était pas prévu qu'il y ait une authentification 2 facteurs avec un code tournant. Pour s'authentifier et provoquer l'ouverture des portes, R2-D2 doit en effet donner un code à 6 chiffres, qui change à chaque ouverture de porte. En recherchant dans la documentation (car il a la documentation), il parvient à trouver l'algorithme de vérification du code tournant.

Il est donné en C. Précisément, l'algorithme prend le code d'ouverture précédent (le dernier qui a marché), ainsi que le code proposé et renvoie 1 si le code proposé est correct. Dans ce cas, la porte s'ouvre, et le code proposé deviendra le code précédent pour la prochaine ouverture de porte.

int check_code(int code_precedent, int code_propose) {
    int rounds = 20;
    int i;
    unsigned long int code = code_propose;
    for (i=0; i < rounds; i++) {
        code = (code * 5231) % 999671;
    }
    if (code == code_precedent) return 1;
    else return 0;
}

Par exemple, si lors de la dernière ouverture de porte, le code était 515020, alors, pour la prochaine ouverture de porte, il faudra fournir : 766875. En effet check_code(515020, 766875) renvoie bien 1.

Si on souhaite ouvrir la porte encore une fois, il faudra cette fois-ci fournir le code 567123. En effet, check_code(766875, 567123) renvoie 1.

Le problème pour R2-D2 est qu'il ne connaît pas le code précédent... heureusement pour lui, le développeur du système d'authentification (encore un gamorréen sans doute...) a laissé une trace de débuggage dans le source de la page.... Pensez à y regarder.

Pour valider ce défi, donnez le code de désactivation du champ de force que vous finirez par obtenir. Notez que si la valeur du code est 27657, par exemple, c'est bien le code à 6 chiffres 027657 qu'il faut donner.

Type de retour
une chaîne de caractères
Entrées du problème
Vous devez être connecté.e pour proposer une réponse au défi
Vous devez être connecté.e pour accéder aux forums.