Dans ce TD, nous allons implémenter TOTP, qui a été présenté en cours.
Vous aurez besoin de la bibliothèque Python suivante, qui nous permettra de générer des QR codes:
pip install "qrcode[pil]"
Tout d'abord, nous allons écrire un script generate_secret.py qui génère un secret TOTP et affiche le QR Code correspondant.
Stockez votre secret dans une variable
secret = b"cle secrete"
Encodez votre secret en base 32
Générez une URL otpauth, que vous placerez dans un QR code.
À l'aide d'une application comme Google Authenticator, scannez le QR code. Vous devriez voir apparaître une entrée dans l'application, accompagnée d'un code à 6 chiffres.
Dans un autre fichier totp.py, nous allons maintenant calculer le code TOTP, qui devrait correspondre à celui
qui s'affiche dans l'application.
Calculez le compteur, en divisant le temps UNIX par une durée de 30 secondes. Le résultat est un nombre entier.
Représentez ce nombre sous forme d'une byte string de 8 octets. Vous pouvez utiliser la fonction int.to_bytes.
Calculez le HASH HMAC SHA-1 du secret et du compteur.
Référez vous aux explications du cours pour cette étape.
Extrayez les 4 derniers bits du hash, et calculez la valeur correspondante (entre 0 et 15).
Extrayez un entier de 32 bits du hash, en utilisant l'indice obtenu précédemment.
Retirez le bit de signe (le bit de poids fort).
Représentez la valeur obtenue en décimal modulo \(10^6\) (en ne gardant que les 6 derniers chiffres). Si il n'y a pas 6 chiffres, ajoutez des zéros à gauche.
Vérifiez que le code obtenue correspond à celui affiché dans l'application.
En novembre 2024, ce TD a été rédigé. Pour tester, l'URL suivante a été utilisée:
otpauth://totp/gregwar?secret=NV4SA43FMNZGK5BB&issuer=Sécurité+IUT
Le code affiché à l'écrant était: 626 343
Quand ces lignes ont t-elles été écrites?