La gâche du professeur Tee


   Suite à la disparition de quelques barrettes mémoires dans les salles de travaux pratiques d'informatique, le service travaux-entretien-sécurité de l'université d'Euphoria a décidé d'équiper les portes de serrures à codes. Le budget est limité et  les compétences locales ont été réquisitionnées par l'incubateur de l'université pour fabriquer un système original.

La solution retenue comprend un clavier à cinq touches A, B, C, D, X et un registre mémoire secret à quatre bits a, b, c et d. Le sésame X déclenche l'ouverture par simple pression à condition que tous les bits du registre secret soient identiques. Les touches alphabétiques permettent de changer les quatre bits, une simple pression sur la touche  A, B, C ou  D change l'état du bit  a, b, c, ou  d.

 
 

[1]   Le registre peut prendre 16 valeurs et sans rien de plus, vous pourriez ouvrir la porte en moins de huit tentatives. Quelle est la plus courte série de touches à composer pour ouvrir la porte ?
 
 

L'éminent professeur Tee a sécurisé le système. Chaque fois que la touche X est pressée un nombre aléatoire de rotations circulaires est appliquée au registre secret qui passe de l'état abcdà l'état bcda après chaque rotation. Un cryptogramme du registre s'affiche en permanence sur un petit écran à cristaux liquides, il dépend du temps qu'il fait et de la date du jour, seuls les enseignants peuvent utiliser cette information pour ouvrir la porte.
 
 

[2]   Comment faites-vous pour ouvrir la porte !


Solutions




Première question. Il existe plusieurs solutions, par exemple : XAXBXAXCXAXBXAX. En effet, il suffit de changer l'état des trois premiers bits du registre. La façon la plus économique est représentée par la figure ci-contre. On change successivement les bits : a, b, a, c, a, b, a. La listes des 3-uplets qui s'en déduit forme un code de Gray en dimension trois.
 
 

Plus généralement un code de Gray de dimension n est une énumération des 2^n mots binaires de longueur n dans laquelle deux éléments consécutifs diffèrent par un seul bit. Le lecteur pourra illustrer l'article de Zimmerman (login du mois d'avril) par l'écriture d'une procédure Gray(n) qui imprime un code de Gray sur n bits.
 
 

Deuxième question. Il suffit de composer la série XAXACXABXACXACXABXACX.

A priori, le registre secret peut prendre 16 valeurs différentes mais les rotations circulaires font que nous ne devons distinguer que 4 états : quatre bits identiques (xxxx), un bit distingué (xxxy), deux bits consécutifs identiques (xxyy) ou bien aucun bits consécutifs égaux (xyxy). Vis à vis de ces 4 situations, presser une touche ou trois produit le même effet, c'est ce que nous noterons l'action a. Nous considérerons deux autres actions. L'action b qui consiste à presser les touches A et B simultanément et l'action c qui consiste à presser A et C simultanément. Toutes les transitions possibles sont décrites par le diagramme sagittal de la figure ci-contre, c'est le diagramme de transition d'un automate fini non déterministe.

Nous allons vérifier qu'il est possible d'ouvrir la porte en 8 tentatives. En effet, on commence par essayer X, si la porte s'ouvre c'est gagné sinon nous sommes dans un des trois états de fermetures. Supposons que le registre soit dans l'état (xxxy). On commence par presser la touche A puis la touche X, c'est l'action a. Si la porte s'ouvre c'est gagné sinon nous en déduisons être dans l'état (xxyy) ou (xyxy). On continue par l'action c, si la porte s'ouvre c'est gagné sinon nous en déduisons être dans l'état (xxyy) et nous continuons par b. Si la porte s'ouvre c'est gagné sinon nous en déduisons être dans l'état (xyxy), nous refaisons c. Si la porte s'ouvre c'est gagné sinon c'est que notre hypothèse initiale était fausse : au départ nous étions dans l'état (xxyy) ou (xyxy). Mais après cette série d'actions, nous sommes sûrs d'être dans l'état (xxxy) et il suffit de recommencer la séquence cbc.
 
 

La théorie des automates décrit une procédure de déterminisation qui montrerait que la solution proposée est optimale.
 
 

Philippe Langevin